[[!FormIt? &submitvar=`submit` &hooks=`updateHook` &validate=`fullname:required, email:email:required` ]] <h1>Update Profile</h1> <div class="update-profile"> <div class="updprof-error">[[+error.message]]</div> [[+login.update_success:is=`1`:then=`[[%login.profile_updated? &namespace=`login` &topic=`updateprofile`]]`]] <form class="form" action="[[~[[*id]]]]" method="post"> <input type="hidden" name="nospam" value="" /> <label for="fullname">[[!%login.fullname? &namespace=`login` &topic=`updateprofile`]] <span class="error">[[+error.fullname]]</span> </label> <input type="text" name="fullname" id="fullname" value="[[+Profile_fullname]]" /> <label for="email">[[!%login.email]] <span class="error">[[+error.email]]</span> </label> <input type="text" name="email" id="email" value="[[+Profile_email]]" /> <label for="phone">[[!%login.phone]] <span class="error">[[+error.phone]]</span> </label> <input type="text" name="phone" id="phone" value="[[+Profile_phone]]" /> <label for="mobilephone">[[!%login.mobilephone]] <span class="error">[[+error.mobilephone]]</span> </label> <input type="text" name="mobilephone" id="mobilephone" value="[[+Profile_mobilephone]]" /> <label for="fax">[[!%login.fax]] <span class="error">[[+error.fax]]</span> </label> <input type="text" name="fax" id="fax" value="[[+fax]]" /> <label for="address">[[!%login.address]] <span class="error">[[+error.address]]</span> </label> <input type="text" name="address" id="address" value="[[+Profile_address]]" /> <label for="country">[[!%login.country]] <span class="error">[[+error.country]]</span> </label> <input type="text" name="country" id="country" value="[[+Profile_country]]" /> <label for="city">[[!%login.city]] <span class="error">[[+error.city]]</span> </label> <input type="text" name="city" id="city" value="[[+Profile_city]]" /> <label for="state">[[!%login.state]] <span class="error">[[+error.state]]</span> </label> <input type="text" name="state" id="state" value="[[+Profile_state]]" /> <label for="zip">[[!%login.zip]] <span class="error">[[+error.zip]]</span> </label> <input type="text" name="zip" id="zip" value="[[+Profile_zip]]" /> <label for="website">[[!%login.website]] <span class="error">[[+error.website]]</span> </label> <input type="text" name="website" id="website" value="[[+Profile_website]]" /> <br class="clear" /> <div class="form-buttons"> <input type="submit" name="login-updprof-btn" value="[[!%login.update_profile]]" /> </div> </form> </div>
$success = true; $data = $hook->getValues(); $extended = array(); foreach ($data as $key => $value) { $field = explode('.', $key); if (count($field) > 1) { //extended field (json-array) if ($field[0] == 'Profile_extended') { $extended[$field[1]] = $value; unset($data[$key]); } } elseif (substr($key, 0, 8) == 'Profile_') { $data[substr($key, 8)] = $value; unset($data[$key]); } } $data['extended'] = $extended; $data['fullname'] = $data['Profile_fullname']; $data['email'] = $data['Profile_email']; $data['phone'] = $data['Profile_phone']; $response = $modx->runProcessor('security/user/update', $data); if ($response->isError()) { $success = false; $errormsg = $response->getMessage(); } return $success;
The UpdateProfile snippet accepts the User ID from the $scriptProperties array and should load that user, allowing you to edit it. SO you can make a (heavily protected) form that the site manager could login to, and they can specify the user ID to edit. IF I'm reading this right: https://github.com/modxcms/Login/blob/develop/core/components/login/controllers/web/UpdateProfile.php#L120
you should also be able to pass in a username, and getObject will query that against the user table.
[[!PeopleGroup? &usergroup=`Clients` &getProfile=`1` &toPlaceholder=`users` &userTpl=`AloUserTpl2` &limit=`0`]] [[!FormIt? &submitVar=`edit` &hooks=`redirect` &store=`1` &redirectTo=`79` ]] <div class="postbox"> <div class="postboxmain"> <h2>Select User To Edit</h2> <form id="target" action="[[~[[*id]]]]" method="post"> <input type="hidden" value="[[!+fi.user-id]]" name="user-id" id="user-id"/> <ul id="edit-user-selected"> [[+users]] </ul> <input type="submit" class="submit" name="edit" value="Edit User" /> </form> </div> <div class="postboxfooter"></div> </div>
[[!FormItRetriever]] [[!UpdateProfile? &user=`[[!+fi.user-id]]`]] <div class="update-profile"> <div class="updprof-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]]]]" method="post"> <input type="hidden" name="nospam:blank" value="" /> <label for="fullname">[[!%login.fullname? &namespace=`login` &topic=`updateprofile`]] <span class="error">[[+error.fullname]]</span> </label> <input type="text" name="fullname" id="fullname" value="[[!+fullname]]" /> <label for="blocked">Block User <span class="error">[[+error.blocked]]</span> </label> <input type="hidden" name="blocked" id="blocked" value="[[!+blocked]]" /> <select id="blocked-select" name="blocked-select"> <option value="0">No</option> <option value="1">Yes</option> </select> <label for="blockedafter">Block User After <span class="error">[[+error.blockedafter]]</span> </label> <input type="hidden" name="blockedafter" value="[[!+blockedafter]]"/> <input type="text" name="blockedafter" id="blockedafter" value="[[dateconverter? &date=`[[!+blockedafter]]`]]" /> <label>Last Login</label> <p>[[!+lastlogin]]</p> <label for="email">[[!%login.email]] <span class="error">[[+error.email]]</span> </label> <input type="text" name="email:required:email" id="email" value="[[!+email]]" /> <label for="phone">[[!%login.phone]] <span class="error">[[+error.phone]]</span> </label> <input type="text" name="phone" id="phone" value="[[!+phone]]" /> <label for="mobilephone">[[!%login.mobilephone]] <span class="error">[[+error.mobilephone]]</span> </label> <input type="text" name="mobilephone" id="mobilephone" value="[[!+mobilephone]]" /> <label for="fax">[[!%login.fax]] <span class="error">[[+error.fax]]</span> </label> <input type="text" name="fax" id="fax" value="[[+fax]]" /> <label for="address">[[!%login.address]] <span class="error">[[+error.address]]</span> </label> <input type="text" name="address" id="address" value="[[!+address]]" /> <label for="country">[[!%login.country]] <span class="error">[[+error.country]]</span> </label> <input type="text" name="country" id="country" value="[[!+country]]" /> <label for="city">[[!%login.city]] <span class="error">[[+error.city]]</span> </label> <input type="text" name="city" id="city" value="[[!+city]]" /> <label for="state">[[!%login.state]] <span class="error">[[+error.state]]</span> </label> <input type="text" name="state" id="state" value="[[!+state]]" /> <label for="zip">[[!%login.zip]] <span class="error">[[+error.zip]]</span> </label> <input type="text" name="zip" id="zip" value="[[+!zip]]" /> [[!checkUser:eq=`1`:then=`<label for="website">File Share URL</label> <span class="error">[[+error.website]]</span> <input type="text" name="website" id="website" value="[[!+website]]" />`]] <br class="clear" /> <div class="form-buttons"> <input type="submit" class="submit" name="login-updprof-btn" value="[[!%login.update_profile]]" /> </div> </form> </div>