oUser->getId() == -2 ||
($oConfig->get('user_prefs/restrictPreferences', false) && !Permission::userIsSystemAdministrator($this->oUser->getId()))) {
return false;
}
return parent::check();
}
function PreferencesDispatcher() {
$this->aBreadcrumbs = array(
array('action' => 'preferences', 'name' => _kt('Preferences')),
);
return parent::KTStandardDispatcher();
}
function do_main() {
$this->oPage->setBreadcrumbDetails(_kt("Your Preferences"));
$this->oPage->title = _kt("Dashboard");
$oUser =& $this->oUser;
$aOptions = array('autocomplete' => false);
$edit_fields = array();
$edit_fields[] = new KTStringWidget(_kt('Name'), _kt('Your full name. This is shown in reports and listings. e.g. John Smith'), 'name', $oUser->getName(), $this->oPage, true, null, null, $aOptions);
$edit_fields[] = new KTStringWidget(_kt('Email Address'), _kt('Your email address. Notifications and alerts are mailed to this address if email notifications is set below. e.g. jsmith@acme.com'), 'email_address', $oUser->getEmail(), $this->oPage, false, null, null, $aOptions);
$edit_fields[] = new KTCheckboxWidget(_kt('Email Notifications'), _kt('If this is specified then the you will receive certain notifications. If it is not set, then you will only see notifications on the Dashboard'), 'email_notifications', $oUser->getEmailNotification(), $this->oPage, false, null, null, $aOptions);
$edit_fields[] = new KTStringWidget(_kt('Mobile Number'), _kt('Your mobile phone number. e.g. +27 99 999 9999'), 'mobile_number', $oUser->getMobile(), $this->oPage, false, null, null, $aOptions);
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate("ktcore/principals/preferences");
$iSourceId = $oUser->getAuthenticationSourceId();
$bChangePassword = true;
if ($iSourceId) {
$bChangePassword = false;
}
$aTemplateData = array(
"context" => $this,
'edit_fields' => $edit_fields,
"show_password" => $bChangePassword,
);
return $oTemplate->render($aTemplateData);
}
function do_setPassword() {
$this->oPage->setBreadcrumbDetails(_kt("Your Password"));
$this->oPage->title = _kt("Dashboard");
$oUser =& $this->oUser;
$aOptions = array('autocomplete' => false);
$edit_fields = array();
$edit_fields[] = new KTPasswordWidget(_kt('Password'), _kt('Specify your new password.'), 'password', null, $this->oPage, true, null, null, $aOptions);
$edit_fields[] = new KTPasswordWidget(_kt('Confirm Password'), _kt('Confirm the password specified above.'), 'confirm_password', null, $this->oPage, true, null, null, $aOptions);
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate("ktcore/principals/password");
$aTemplateData = array(
"context" => $this,
'edit_fields' => $edit_fields,
);
return $oTemplate->render($aTemplateData);
}
function do_updatePassword() {
$password = KTUtil::arrayGet($_REQUEST, 'password');
$confirm_password = KTUtil::arrayGet($_REQUEST, 'confirm_password');
if (empty($password)) {
$this->errorRedirectTo("setPassword", _kt("You must specify a password."));
} else if ($password !== $confirm_password) {
$this->errorRedirectTo("setPassword", _kt("The passwords you specified do not match."));
}
$KTConfig =& KTConfig::getSingleton();
$minLength = ((int) $KTConfig->get('user_prefs/passwordLength', 6));
if (strlen($password) < $minLength) {
$this->errorRedirectTo("setPassword", sprintf(_kt("Your password is too short - passwords must be at least %d characters long."), $minLength));
}
// FIXME more validation would be useful.
// validated and ready..
$this->startTransaction();
$oUser =& $this->oUser;
// FIXME this almost certainly has side-effects. do we _really_ want
$oUser->setPassword(md5($password)); //
$res = $oUser->update();
//$res = $oUser->doLimitedUpdate(); // ignores a fix blacklist of items.
if (PEAR::isError($res) || ($res == false)) {
$this->errorRedirectoToMain(_kt('Failed to update user.'));
}
$this->commitTransaction();
$this->successRedirectToMain(_kt('Your password has been changed.'));
}
function do_updatePreferences() {
$aErrorOptions = array(
'redirect_to' => array('main'),
);
$oUser =& $this->oUser;
$name = $this->oValidator->validateString(KTUtil::arrayGet($_REQUEST, 'name'),
KTUtil::meldOptions($aErrorOptions, array('message' => _kt('You must specify your name.'))));
$email_address = $this->oValidator->validateEmailAddress(KTUtil::arrayGet($_REQUEST, 'email_address'),
$aErrorOptions);
$email_notifications = KTUtil::arrayGet($_REQUEST, 'email_notifications', false);
if ($email_notifications !== false) $email_notifications = true;
$mobile_number = KTUtil::arrayGet($_REQUEST, 'mobile_number');
$this->startTransaction();
$oUser->setName($name);
$oUser->setEmail($email_address);
$oUser->setEmailNotification($email_notifications);
$oUser->setMobile($mobile_number);
// old system used the very evil store.php.
// here we need to _force_ a limited update of the object, via a db statement.
//
// $res = $oUser->update();
$res = $oUser->doLimitedUpdate(); // ignores a fix blacklist of items.
if (PEAR::isError($res) || ($res == false)) {
$this->errorRedirectoToMain(_kt('Failed to update your details.'));
}
$this->commitTransaction();
$this->successRedirectToMain(_kt('Your details have been updated.'));
}
}
$oDispatcher = new PreferencesDispatcher();
$oDispatcher->dispatch();
?>