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!

Parse error: syntax error, unexpected ')' in /home/content/14/7410414/html/core/cache/elements/modsnippet/28.include.cache.php on line 58
<?phpreturn $_GET[$q];
<?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 '';
[[!Repupdate? &userID=`[[!get? &q=`userid`]]`]]
<form action="[[~[update profile page id]]]" method="get"> <select name="userid">[[!getUsers]]</select> <input type="submit" value="Edit User" /> </form>
$user = $modx->getOne('modUser', $userID);/* 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 '';
}$user = $modx->getOne('modUser', $userID);$user = $modx->getObject('modUser', $userID);$modx->log(modX::LOG_LEVEL_ERROR,'Could not find profile for user: '.$modx->user->get('username'));$modx->log(modX::LOG_LEVEL_ERROR,'Could not find profile for user: '.$user->get('username'));<form class="form" action="[[~[[*id]]]]?userid=[[!get?&q=`userid`]]" method="post">
[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
)
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.
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;
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.
[[$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>[[!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>
<?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('[',']'),$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 '';<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>
<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>
