We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 25308
    • 46 Posts
    Quote from: swespi at Apr 08, 2011, 04:44 PM

    1.) You would put that line at the top of your new UpdateProfile snippet, just after the comments.
    2.) On the page that has your UpdateProfile snippet, you’d need to get the user ID from the $_GET array (or $_POST or $_SESSION, if you prefer). You can do this with a simple snippet like this:

    <?php
    return $_GET[$q];


    If you call that snippet "get", for example, you would then call UpdateProfile like so:

    [[!UpdateProfile? &userID=`[[!get? &q=`userid`]]`]]


    Then just have your user choosing page link to your profile page with a "?userid=[selected user id]" at the end of the link, or you can submit a form with something like this:

    <form action="[[~[update profile page id]]]" method="get">
    	<select name="userid">[[!getUsers]]</select>
    	<input type="submit" value="Edit User" />
    </form>


    Let us know how it works out!

    Thanks for the explanation. I’ll give this a try asap and let you know how it plays out. Once it works I’ll definitely pass back to the community. Thanks for your help, it’s much appreciated! grin
      • 25308
      • 46 Posts
      I received an error when running the process. It very well would have been myself flubbing an instruction. The error was:

      Parse error: syntax error, unexpected ')' in /home/content/14/7410414/html/core/cache/elements/modsnippet/28.include.cache.php on line 58


      Funny though,... looking at the snippet the only thing on line 58 is an end bracket "}"

      My steps in this process were:

      1. Created chunk called "get" with code suggested:
      <?phpreturn $_GET[$q];

      2. Duplicated the update snippet and renamed it "Repupdate"
      3. Changed "Repupdate" php to:
      <?php
      /**
       * UpdateProfile
       *
       * Copyright 2010 by Shaun McCormick <[email protected]>
       *
       * Register is free software; you can redistribute it and/or modify it under the
       * terms of the GNU General Public License as published by the Free Software
       * Foundation; either version 2 of the License, or (at your option) any later
       * version.
       *
       * Register is distributed in the hope that it will be useful, but WITHOUT ANY
       * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
       * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
       *
       * You should have received a copy of the GNU General Public License along with
       * Register; if not, write to the Free Software Foundation, Inc., 59 Temple
       * Place, Suite 330, Boston, MA 02111-1307 USA
       *
       * @package login
       */
      /**
       * MODx UpdateProfile Snippet. Handles updating of User Profiles.
       *
       * @package login
       */
      $userID = !empty($userID) ? (int) $userID : 1;
      $login = $modx->getService('login','Login',$modx->getOption('login.core_path',null,$modx->getOption('core_path').'components/login/').'model/login/',$scriptProperties);
      if (!($login instanceof Login)) return '';
      $modx->lexicon->load('login:updateprofile');
      $modx->lexicon->load('login:register');
      
      /* setup default properties */
      $preHooks = $modx->getOption('preHooks',$scriptProperties,'');
      $submitVar = $modx->getOption('submitVar',$scriptProperties,'login-updprof-btn');
      $redirectToLogin = $modx->getOption('redirectToLogin',$scriptProperties,true);
      $reloadOnSuccess = $modx->getOption('reloadOnSuccess',$scriptProperties,true);
      $errTpl = $modx->getOption('errTpl',$scriptProperties,'<span class="error">[[+error]]</span>');
      $emailField = $modx->getOption('email',$scriptProperties,'email');
      $validate = $modx->getOption('validate',$scriptProperties,'');
      $placeholderPrefix = $modx->getOption('placeholderPrefix',$scriptProperties,'');
      
      /* verify authenticated status */
      if (!$modx->user->hasSessionContext($modx->context->get('key')) && $modx->user->isMember('Administrator')) {
          if ($redirectToLogin) {
              $modx->sendUnauthorizedPage();
          } else {
              return '';
          }
      }
      
      /* get profile */
      $user = $modx->getOne('modUser', $userID));
      if(empty($user)) return '';
      $profile = $user->getOne('Profile');
      if (empty($profile)) {
          $modx->log(modX::LOG_LEVEL_ERROR,'Could not find profile for user: '.$modx->user->get('username'));
          return '';
      }
      
      $placeholders = $profile->toArray();
      /* add extended fields to placeholders */
      if ($modx->getOption('useExtended',$scriptProperties,true)) {
          $extended = $profile->get('extended');
          if (!empty($extended) && is_array($extended)) {
              $placeholders = array_merge($extended,$placeholders);
          }
      }
      $modx->toPlaceholders($placeholders,$placeholderPrefix);
      
      /* if success */
      if (!empty($_REQUEST['updpsuccess'])) {
          $modx->setPlaceholder('login.update_success',true);
      }
      
      if (!empty($_POST) && (empty($submitVar) || !empty($_POST[$submitVar]))) {
          /* handle validation */
          $login->loadValidator();
          $fields = $login->validator->validateFields($_POST,$validate);
          foreach ($fields as $k => $v) {
              $fields[$k] = str_replace(array('[',']'),array('[',']'),$v);
          }
          if (!empty($submitVar)) unset($fields[$submitVar]);
          
          /* if allow_multiple_emails setting is false, prevent duplicate emails */
          if (!empty($fields[$emailField]) && !$modx->getOption('allow_multiple_emails',null,false)) {
              $emailTaken = $modx->getObject('modUserProfile',array(
                  'email' => $fields[$emailField],
                  'id:!=' => $modx->user->get('id'),
              ));
              if ($emailTaken) {
                  $login->validator->errors[$emailField] = $modx->lexicon('login.email_taken',array('email' => $fields[$emailField]));
              }
          }
      
          if (empty($login->validator->errors)) {
              /* do prehooks */
              $login->loadHooks('preHooks');
              $login->preHooks->loadMultiple($preHooks,$fields,array(
                  'submitVar' => $submitVar,
                  'redirectToLogin' => $redirectToLogin,
                  'reloadOnSuccess' => $reloadOnSuccess,
              ));
              if (!empty($login->preHooks->fields)) {
                  $fields = $login->preHooks->fields;
              }
              if (!empty($submitVar)) unset($fields[$submitVar]);
              
              /* process hooks */
              if (!empty($login->preHooks->errors)) {
                  $errors = array();
                  foreach ($login->preHooks->errors as $key => $error) {
                      $errors[$key] = str_replace('[[+error]]',$error,$errTpl);
                  }
                  $modx->toPlaceholders($errors,'error');
      
                  $errorMsg = $login->preHooks->getErrorMessage();
                  $modx->toPlaceholder('message',$errorMsg,'error');
      
              } else {
                  /* update the profile */
                  $result = require_once $login->config['processorsPath'].'update.profile.php';
                  if ($result !== true) {
                      $modx->toPlaceholder('message',$result,'error');
                  } else if ($reloadOnSuccess) {
                      $url = $modx->makeUrl($modx->resource->get('id'),'','?updpsuccess=1','full');
                      $modx->sendRedirect($url);
                  } else {
                      $modx->setPlaceholder('login.update_success',true);
                  }
              }
          }
          $errors = array();
          foreach ($login->validator->errors as $key => $error) {
            $errors[$key] = str_replace('[[+error]]',$error,$errTpl);
          }
          $modx->toPlaceholders($errors,$placeholderPrefix.'error');
          $modx->toPlaceholders($fields,$placeholderPrefix);
      }
      
      return '';


      4. Added call for "Repudate" and form object for selection.
      Form call:
      [[!Repupdate? &userID=`[[!get? &q=`userid`]]`]]

      Form object:
      <form action="[[~[update profile page id]]]" method="get">
      	<select name="userid">[[!getUsers]]</select>
      	<input type="submit" value="Edit User" />
      </form>


      Sorry for such a long reply. Didn’t want to waste your time by nickle and diming the questions to you. Any ideas as to what I did to flub it?
      ~Thanks
        • 29019 ☆ A M B ☆
        • 104 Posts
        That was my fault - there’s an extra parenthesis on line 53. Change it to this:

        $user = $modx->getOne('modUser', $userID);


        When you get error messages like that, you can tell a lot from the path: "...elements/modsnippet/28.include.cache.php". From that you can tell it’s a snippet, and the 28 is the ID of that snippet. Line numbers can be a bit deceiving. MODx puts your snippet code after a few lines in a function. If you’re still having trouble finding it, you can always check out the cache file and see exactly where it is.

        Also on your form, you’ll need to change the action attribute to use an actual ID instead of "[update profile page id]". If you are putting this all on one page, you could just use the current ID, otherwise you’ll need to put the ID of the page that has your Repupdate snippet on it.
          www.darkstardesign.com

          Are you in the Nashville area? Join us for our next MODX meetup!
          • 25308
          • 46 Posts
          Hi swepsi,

          Unfortunately I ran into a similar problem again with an error on the page itself when it loads.

          "Fatal error: Call to undefined method modX::getOne() in /home/content/14/7410414/html/core/cache/elements/modsnippet/28.include.cache.php on line 57"

          I checked the error log and it was empty. An error message appears directly on the page. It directs me to my copy of the update snippet I made again. I noticed that the last time it made an error call it was 5 rows off. Looked back to that again and it was the same section with the
          /* get profile */
          $user = $modx->getOne('modUser', $userID);
          if(empty($user)) return '';
          $profile = $user->getOne('Profile');
          if (empty($profile)) {
              $modx->log(modX::LOG_LEVEL_ERROR,'Could not find profile for user: '.$modx->user->get('username'));
              return '';
          }


          I’m not sure what the problem is though. ;(

          Before I waste any more of your time I want to bring up something that I should have mentioned at the beginning. Some of the information I’m accessing is collected in extended fields on the registration form. The information that the admin user group is editing is never seen by the "customers" group. It’s more internal tracking and information. With the method that you’re gracious enough share with me here,..will I be able to access extended fields? Another forum member suggested custom tables. But again,...my ignorance is getting the better of me. Any thoughts on that?

          Oh and thank you for the explanation of the error messages. It helped me cut out some of the goofs I made in my call. Thank you.
            • 29019 ☆ A M B ☆
            • 104 Posts
            I had one more typo in there - you need to change this:

            $user = $modx->getOne('modUser', $userID);


            to this:

            $user = $modx->getObject('modUser', $userID);


            One more thing you might want to change is about 4 lines down, where it logs an error message. Change it from this:

            $modx->log(modX::LOG_LEVEL_ERROR,'Could not find profile for user: '.$modx->user->get('username'));


            To this:

            $modx->log(modX::LOG_LEVEL_ERROR,'Could not find profile for user: '.$user->get('username'));


            Another potential gotcha is your update form tag - make sure you include your user ID on the end of the path. Your form tag should look like this:

            <form class="form" action="[[~[[*id]]]]?userid=[[!get?&q=`userid`]]" method="post">


            Extended fields are supported by UpdateProfile and that’s carried over to your version - just make sure the "useExtended" property is set to true (it is by default). Make sure you put these extended fields in your form and you should be all set. You can use a custom table for these if you want, but that will require some more modifications to UpdateProfile.
              www.darkstardesign.com

              Are you in the Nashville area? Join us for our next MODX meetup!
              • 25308
              • 46 Posts
              I think we’re getting pretty close. Now the page is popping up with the form. That’s much closer. I’m still getting an error in the log though.

               [2011-04-11 07:04:51] (ERROR @ /index.php) `[15` is not a valid integer and may not be passed to makeUrl()
              [2011-04-11 07:04:51] (ERROR @ /home/content/14/7410414/html/core/xpdo/om/xpdoobject.class.php : 235) PHP warning: PDOStatement::execute() [<a href='pdostatement.execute'>pdostatement.execute</a>]: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
              [2011-04-11 07:04:51] (ERROR @ /index.php) Error HY093 executing statement: 
              Array
              (
                  [0] => HY093
              )


              From what I’ve researched it seems as if the list of people in the usergroup isn’t getting passed to the page. I’ve included a copy of my files to see what I flubbed.

              Page items:

              mlist = the code that works with get page you were kind enough to share with me.
              get = the get code you were kind enough to share.
              Repupdate = the copy of the UpdateProfile snippet I’ve made with changes we’ve talked about.

              The getpage package is installed.
              The id of page where I’m utilizing this form is [[~15]] (rep page file included)

              Thanks for the help. It’s greatly appreciated.
                • 25308
                • 46 Posts
                Quote from: odeclas at Apr 01, 2011, 09:23 AM

                You will need to write some custom functionality if you want user A (admin) to be able to update user B (Joe Schmoe) profile in the front end. UpdateProfile, as you’ve discovered is designed to service the logged-in user in the front end. In your case, you want to edit a ’non-logged-in’ user. Manage Users in the backend manager is designed to do the job you want.

                You could create a restricted access policy that didn’t have edit content rights but did have edit user rights (I think!) - if you didn’t want to give them full backend access.

                From your other thread on the Register snippet, you are also going to run into issues with the non-standard fields (extended user profile fields) in any front-end editing scenario.

                As you’ve already suggested, if you have to have front-end user editing, it would probably be better/simpler to go down a custom table route.


                Are you familiar with the creation of custom tables? I’m reading up on it right now but I’m kinda limited in my knowledge of database interactions. I really need to learn some new tricks apparently. wink I’ve tried a few methods to achieve my end result with little success. Since the items that I need to alter are never seen by users that register it makes sense that the info could be handled in a seperate table. I’m just not sure how to;

                1. make a list of the "customers" user group to select from to later alter. (xPDO query?)

                2. to create custom tables and relate them to the member selected from the "customers" user group. Like I said I’m reading up on it now in the documentation @ http://rtfm.modx.com/display/revolution20/Using+Custom+Database+Tables+in+your+3rd+Party+Components

                any suggestions?
                  • 25308
                  • 46 Posts
                  Quote from: swespi at Apr 09, 2011, 09:30 AM

                  That was my fault - there’s an extra parenthesis on line 53. Change it to this:

                  $user = $modx->getOne('modUser', $userID);


                  When you get error messages like that, you can tell a lot from the path: "...elements/modsnippet/28.include.cache.php". From that you can tell it’s a snippet, and the 28 is the ID of that snippet. Line numbers can be a bit deceiving. MODx puts your snippet code after a few lines in a function. If you’re still having trouble finding it, you can always check out the cache file and see exactly where it is.

                  Also on your form, you’ll need to change the action attribute to use an actual ID instead of "[update profile page id]". If you are putting this all on one page, you could just use the current ID, otherwise you’ll need to put the ID of the page that has your Repupdate snippet on it.

                  Ok,.. So I’ve been playing around with this all weekend and I’m not any closer to figuring this out.

                  my process is:
                  1. I made a snippet of the code you provided. (The bit that works with get page) and named it swepsi.
                  2. I made a snippet with the "get" php and named it "get"
                  3. copied and made changes to the updateprofile snippet and renamed it "Repupdate"
                  4. included the calls and "repupdate" form all on one page [[~15]]

                  I checked the [[!swepsi]] code by itself and it listed all the customers fine.

                  Here’s my on page code:
                  [[$Rep_nav]]<br />
                  
                  <form action="[[[[~15]]]]" method="get">
                  	<select name="userid">[[!get]]</select>
                  	<input type="submit" value="Edit User" />
                  </form>
                  [[!Repupdate? &userID=`[[!get? &q=`userid`]]`]]
                  
                  <form class="form" action="[[~[[*id]]]]" method="post">
                   
                  		<label>Phone#: <span class="error">[[+error.phone]]</span> <br />
                  		<input name="phone" type="text" value="[[+phone]]" /></label>
                          <br />
                          <label>Alt. Phone#: <span class="error">[[+error.alt_phone]]</span> <br />
                  		<input name="alt_phone" type="text" value="[[+alt_phone]]" /></label>
                          <br />
                          <label>Business: <span class="error">[[+error.business]]</span> <br />
                  		<input name="business" type="text" value="[[+business]]" /></label>
                          <br />
                      <label>Would you like to receive promotions on special deals? <span class="error">[[+error.notifications]]</span> <br />
                      <select name="promotions">
                     <option value="yes">Yes</option>
                     <option value="no">No</option>
                  </select></label>
                  <br />
                  <label>Product: <span class="error">[[+error.product]]</span> <br />
                  		<input name="product" type="text" value="[[+product]]" /></label>
                  		<br />
                  <label>Reference#: <span class="error">[[+error.reference]]</span> <br />
                  		<input name="reference_number" type="text" value="[[+reference_number]]" /></label>
                  		<br />
                  <label>Timeline: <span class="error">[[+error.time_line]]</span> <br />
                  		<input name="time_line" type="text" value="[[+time_line]]" /></label>
                  		<br />
                  <label>Representative: <span class="error">[[+error.representative]]</span> <br />
                  		<input name="representative" type="text" value="[[+representative]]" /></label>
                  		<br />		
                  <label>Notes: <span class="error">[[+error.notes]]</span> <br />
                  		<input name="notes" type="text" value="[[+notes]]" /></label>
                  		<br />
                  		
                  <br class="clear" />
                  <div class="form-buttons">
                              <input name="registerbtn" type="submit" value="Register" />
                          </div>
                  </form>


                  For some reason my error log is no longer giving me clues as to what’s going on. I do have one question though,.. how is the code you gave me that I later named "swepsi" being called? I see the [[!get]] call for the form. It’s not putting any names in the select box though. I hope your right that it’s something simple. I’m just not seeing it though. Thanks for all your help.
                    • 29019 ☆ A M B ☆
                    • 104 Posts
                    Hey Robot,

                    Sorry I haven’t gotten back to you before now - I’ve been swamped. Here’s all of the code that I got working on a temporary site.

                    This is the relevant section of the edit page. I called my snippet UpdateAnyProfile.

                    [[!UpdateAnyProfile? &userID=`[[!get? &q=`id`]]`]]
                    <div class="update-profile">
                    	<div class="error">[[+error.message]]</div>
                    	[[+login.update_success:if=`[[+login.update_success]]`:is=`1`:then=`[[%login.profile_updated? &namespace=`login` &topic=`updateprofile`]]`]]
                    
                    	<form class="form" action="[[~[[*id]]]]?id=[[!get?&q=`id`]]" method="post">
                    		<input type="hidden" name="nospam:blank" value="" />
                    
                    		<label>[[!%login.fullname? &namespace=`login` &topic=`updateprofile`]]</label>
                    		<input type="text" name="fullname" value="[[+update-any.fullname]]" />
                    		[[+update-any.error.fullname:notempty=`<span class="error">[[+update-any.error.fullname]]</span>`]]
                    
                    		<label>[[!%login.email]]</label>
                    		<input type="text" name="email:required:email" value="[[+update-any.email]]" />
                    		[[+update-any.error.email:notempty=`<span class="error">[[+update-any.error.email]]</span>`]]
                    
                    		<input type="submit" name="login-updprof-btn" value="[[!%login.update_profile]]" />
                    	</form>
                    </div>


                    Note that I changed the placeholderPrefix property value to ’update-any’ on the snippet just to make things easier on me. My UpdateAnyProfile snippet looks like this (I took out the comments at the top for brevity):

                    <?php
                    /* comments... */
                    $userID = !empty($userID) ? (int) $userID : 1;
                    $login = $modx->getService('login','Login',$modx->getOption('login.core_path',null,$modx->getOption('core_path').'components/login/').'model/login/',$scriptProperties);
                    if (!($login instanceof Login)) return '';
                    $modx->lexicon->load('login:updateprofile');
                    $modx->lexicon->load('login:register');
                    
                    /* setup default properties */
                    $preHooks = $modx->getOption('preHooks',$scriptProperties,'');
                    $submitVar = $modx->getOption('submitVar',$scriptProperties,'login-updprof-btn');
                    $redirectToLogin = $modx->getOption('redirectToLogin',$scriptProperties,true);
                    $reloadOnSuccess = $modx->getOption('reloadOnSuccess',$scriptProperties,true);
                    $errTpl = $modx->getOption('errTpl',$scriptProperties,'<span class="error">[[+error]]</span>');
                    $emailField = $modx->getOption('email',$scriptProperties,'email');
                    $validate = $modx->getOption('validate',$scriptProperties,'');
                    $placeholderPrefix = $modx->getOption('placeholderPrefix',$scriptProperties,'');
                    
                    /* verify authenticated status */
                    if (!$modx->user->hasSessionContext($modx->context->get('key')) && $modx->user->isMember('Administrator')) {
                        if ($redirectToLogin) {
                            $modx->sendUnauthorizedPage();
                        } else {
                            return '';
                        }
                    }
                    
                    /* get profile */
                    $user = $modx->getObject('modUser', $userID);
                    if(empty($user)) return '';
                    $profile = $user->getOne('Profile');
                    if (empty($profile)) {
                        $modx->log(modX::LOG_LEVEL_ERROR,'Could not find profile for user: '.$user->get('username'));
                        return '';
                    }
                    
                    $placeholders = $profile->toArray();
                    /* add extended fields to placeholders */
                    if ($modx->getOption('useExtended',$scriptProperties,true)) {
                        $extended = $profile->get('extended');
                        if (!empty($extended) && is_array($extended)) {
                            $placeholders = array_merge($extended,$placeholders);
                        }
                    }
                    $modx->toPlaceholders($placeholders,$placeholderPrefix);
                    
                    /* if success */
                    if (!empty($_REQUEST['updpsuccess'])) {
                        $modx->setPlaceholder('login.update_success',true);
                    }
                    
                    if (!empty($_POST) && (empty($submitVar) || !empty($_POST[$submitVar]))) {
                        /* handle validation */
                        $login->loadValidator();
                        $fields = $login->validator->validateFields($_POST,$validate);
                        foreach ($fields as $k => $v) {
                            $fields[$k] = str_replace(array('[',']'),array('&#91;','&#93;'),$v);
                        }
                        if (!empty($submitVar)) unset($fields[$submitVar]);
                        
                        /* if allow_multiple_emails setting is false, prevent duplicate emails */
                        if (!empty($fields[$emailField]) && !$modx->getOption('allow_multiple_emails',null,false)) {
                            $emailTaken = $modx->getObject('modUserProfile',array(
                                'email' => $fields[$emailField],
                                'id:!=' => $modx->user->get('id'),
                            ));
                            if ($emailTaken) {
                                $login->validator->errors[$emailField] = $modx->lexicon('login.email_taken',array('email' => $fields[$emailField]));
                            }
                        }
                    
                        if (empty($login->validator->errors)) {
                            /* do prehooks */
                            $login->loadHooks('preHooks');
                            $login->preHooks->loadMultiple($preHooks,$fields,array(
                                'submitVar' => $submitVar,
                                'redirectToLogin' => $redirectToLogin,
                                'reloadOnSuccess' => $reloadOnSuccess,
                            ));
                            if (!empty($login->preHooks->fields)) {
                                $fields = $login->preHooks->fields;
                            }
                            if (!empty($submitVar)) unset($fields[$submitVar]);
                            
                            /* process hooks */
                            if (!empty($login->preHooks->errors)) {
                                $errors = array();
                                foreach ($login->preHooks->errors as $key => $error) {
                                    $errors[$key] = str_replace('[[+error]]',$error,$errTpl);
                                }
                                $modx->toPlaceholders($errors,'error');
                    
                                $errorMsg = $login->preHooks->getErrorMessage();
                                $modx->toPlaceholder('message',$errorMsg,'error');
                    
                            } else {
                                /* update the profile */
                                $result = require_once $login->config['processorsPath'].'update.profile.php';
                                if ($result !== true) {
                                    $modx->toPlaceholder('message',$result,'error');
                                } else if ($reloadOnSuccess) {
                                    $url = $modx->makeUrl($modx->resource->get('id'),'','?updpsuccess=1','full');
                                    $modx->sendRedirect($url);
                                } else {
                                    $modx->setPlaceholder('login.update_success',true);
                                }
                            }
                        }
                        $errors = array();
                        foreach ($login->validator->errors as $key => $error) {
                          $errors[$key] = str_replace('[[+error]]',$error,$errTpl);
                        }
                        $modx->toPlaceholders($errors,$placeholderPrefix.'error');
                        $modx->toPlaceholders($fields,$placeholderPrefix);
                    }
                    
                    return '';


                    The relevant sections of my test page that lists users looks like this:

                    <table>
                    	<thead>
                    		<tr>
                    			<th>ID</th>
                    			<th>Full Name</th>
                    			<th>Email</th>
                    			<th>Login Count</th>
                    			<th>Username</th>
                    		</tr>
                    	</thead>
                    	<tbody>
                    		[[!getUsers? &tpl=`modx-user`]]
                    	</tbody>
                    </table>


                    With this modx-user tpl (216 is the ID of my page that has the UpdateAnyProfile snippet on it in my test site):

                    <tr[[If?&subject=`[[+idx:mod]]`&operator=`equals`&operand=`1`&then=` class="odd"`]]>
                    	<td><a href="[[~216]]?id=[[+id]]">[[+id]]</a></td>
                    	<td>[[+fullname]]</td>
                    	<td>[[+email]]</td>
                    	<td>[[+logincount]]</td>
                    	<td>[[+username]]</td>
                    </tr>


                    All of that put together works fine for me. Obviously I’m only updating user names and emails, but see if you can start there and get that working.
                      www.darkstardesign.com

                      Are you in the Nashville area? Join us for our next MODX meetup!
                      • 25308
                      • 46 Posts
                      Thanks for the reply Swepsi,... much appreciated. I’m sure you’re growing weary of this with your work load being crazy right now. Thank you for your time. grin

                      I followed the steps in your last post.

                      1. created snippet called "UpdateAnyProfile"
                      2. created a tpl chunk called "Modx-user" and modified page id to my resource with "UpdateAnyUser" snippet call on it [[~17]]
                      3. added the table with the [[!getUsers? &tpl=`modx-user`]] call, the "UpdateAnyProfile" call and form to page [[~17]]

                      But no luck. The title bar of "ID Full Name Email Login Count Username" comes up but with no users. :’(

                      The instructions were very concise. I didn’t understand on thing though,... when you said "Note that I changed the placeholderPrefix property value to ’update-any’ on the snippet just to make things easier on me." did I have to change anything in the files to reflect that? That’s probably where I flubbed.

                      Man I’m sorry this is taking up so much of your time. Thank you.