<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ UserProfile
*
* @package energine
* @author dr.Pavka
* @copyright ColoCall 2006
* @version $Id: UserProfile.class.php,v 1.13 2007/12/17 14:16:19 pavka Exp $
*/
//require_once('core/modules/share/components/DBDataSet.class.php');
//require_once('core/framework/AuthUser.class.php');
/**
* ФоÑма ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
полÑзоваÑелÑ
*
* @package energine
* @subpackage user
*/
class UserProfile extends DBDataSet {
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа
*
* @return void
* @access public
*/
public function __construct($name, $module, Document $document, array $params = null) {
parent::__construct($name, $module, $document, $params);
$this->setTableName('user_users');
$this->setType(self::COMPONENT_TYPE_FORM_ALTER);
if (!$this->document->user->isAuthenticated()) {
throw new SystemException('ERR_DEV_NO_AUTH_USER', SystemException::ERR_DEVELOPER);
}
$this->setFilter($this->document->user->getID());
}
/**
* ÐейÑÑвие по ÑмолÑаниÑ
*
* @return type
* @access protected
*/
protected function main() {
$this->setDataSetAction('save-user');
$this->setTitle($this->translate('TXT_USER_PROFILE'));
$this->addTranslation('MSG_PWD_MISMATCH');
$this->prepare();
}
/**
* ÐеÑеопÑеделен паÑамеÑÑ active
*
* @return int
* @access protected
*/
protected function defineParams() {
$result = array_merge(parent::defineParams(),
array(
'active'=>true,
));
return $result;
}
/**
* ÐеÑод ÑоÑ
ÑанениÑ
* ÐеÑепиÑан ÑодиÑелÑÑкий
*
* @return void
* @access protected
*/
protected function save() {
if($this->document->user->getValue('u_password') != sha1($_POST[$this->getTableName()]['u_password'])) {
$_SESSION['error'] = true;
$this->response->redirectToCurrentSection('error/');
}
if (!empty($_POST[$this->getTableName()]['u_password'])) {
if ($_POST[$this->getTableName()]['u_password'] != $_POST['u_password2']) {
$this->generateError(SystemException::ERR_WARNING, 'ERR_PWD_MISMATCH');
}
unset($_POST['u_password2']);
$_POST[$this->getTableName()]['u_password'] = sha1($_POST[$this->getTableName()]['u_password']);
}
$_POST[$this->getTableName()]['u_id'] = $this->document->getUser()->getID();
$this->prepare();
$fields = $this->getDataDescription()->getFieldDescriptionList();
if (array_diff($fields, array_keys($_POST[$this->getTableName()])) != array()) {
throw new SystemException('ERR_BAD_DATA', SystemException::ERR_CRITICAL);
}
$data = $_POST[$this->getTableName()];
try {
$this->document->user->update($data);
$_SESSION['saved'] = true;
//пеÑеадÑеÑаÑиÑ
$this->response->redirectToCurrentSection('success/');
}
//ÐÑлавливаем вÑе оÑибки коÑоÑÑе могли пÑоизойÑи пÑи ÑоÑ
Ñанении в ÐÐ, ÑÑÐ¾Ð±Ñ Ð²ÑвеÑÑи нÑжнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑибке на ÑÑовне компоненÑа
catch (FormException $formError) {
$errors = $this->saver->getErrors();
foreach ($errors as $errorFieldName) {
$message = $this->saver->getDataDescription()->getFieldDescriptionByName($errorFieldName)->getPropertyValue('message');
$this->generateError(SystemException::ERR_NOTICE, $message);
}
//пеÑеадÑеÑаÑиÑ
$this->response->redirectToCurrentSection();
}
catch (SystemException $e){
$this->generateError(SystemException::ERR_NOTICE, $e->getMessage(), $e->getCustomMessage());
//пеÑеадÑеÑаÑиÑ
$this->response->redirectToCurrentSection();
}
}
/**
* ÐеÑод, вÑводÑÑий ÑообÑение об ÑÑпеÑном ÑоÑ
Ñанении даннÑÑ
*
* @return void
* @access protected
*/
protected function success() {
//еÑли в ÑеÑÑии Ð½ÐµÑ Ð¿ÐµÑеменной saved, знаÑÐ¸Ñ ÑÑÐ¾Ñ Ð¼ÐµÑод пÑÑаÑÑÑÑ Ð´ÐµÑнÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ. Ðе вÑйдеÑ!
if (!isset($_SESSION['saved'])) {
throw new SystemException('ERR_404', SystemException::ERR_404);
}
//ÐÐ°Ð²Ñ Ñделал Ñвое дело...
unset($_SESSION['saved']);
$this->setBuilder($this->createBuilder());
$dd = new DataDescription();
$this->setDataDescription($dd);
$ddi = new FieldDescription('success_message');
$ddi->setType(FieldDescription::FIELD_TYPE_TEXT);
$ddi->setMode(FieldDescription::FIELD_MODE_READ);
$ddi->removeProperty('title');
$dd->addFieldDescription($ddi);
$d = new Data();
$this->setData($d);
$di = new Field('success_message');
$di->setData($this->translate('TXT_USER_PROFILE_SAVED'));
$d->addField($di);
$this->document->componentManager->getComponentByName('breadCrumbs')->addCrumb();
}
/**
* ÐеÑод, вÑводÑÑий ÑообÑение о невеÑно введенном паÑоле
*
* @return void
* @access protected
*/
protected function error() {
//еÑли в ÑеÑÑии Ð½ÐµÑ Ð¿ÐµÑеменной error, знаÑÐ¸Ñ ÑÑÐ¾Ñ Ð¼ÐµÑод пÑÑаÑÑÑÑ Ð´ÐµÑнÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ. Ðе вÑйдеÑ!
if (!isset($_SESSION['error'])) {
throw new SystemException('ERR_404', SystemException::ERR_404);
}
//ÐÐ°Ð²Ñ Ñделал Ñвое дело...
unset($_SESSION['error']);
$this->setBuilder($this->createBuilder());
$dd = new DataDescription();
$this->setDataDescription($dd);
$ddi = new FieldDescription('error_message');
$ddi->setType(FieldDescription::FIELD_TYPE_TEXT);
$ddi->setMode(FieldDescription::FIELD_MODE_READ);
$ddi->removeProperty('title');
$dd->addFieldDescription($ddi);
$d = new Data();
$this->setData($d);
$di = new Field('error_message');
$di->setData($this->translate('TXT_USER_PROFILE_WRONG_PWD'));
$d->addField($di);
$this->document->componentManager->getComponentByName('breadCrumbs')->addCrumb();
}
/**
* ÐÐ»Ñ Ð¼ÐµÑода success пеÑеопÑеделен меÑод ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа меÑаданнÑÑ
*
* @return DataDescription
* @access protected
*/
protected function createDataDescription() {
$result = parent::createdataDescription();
if ($field = $result->getFieldDescriptionByName('u_is_active')) {
$result->removeFieldDescription($field);
}
$field = $result->getFieldDescriptionByName('u_password');
$field->addProperty('message2', $this->translate('ERR_PWD_MISMATCH'));
$result->removeFieldDescription($field);
$result->addFieldDescription($field);
if ($this->getAction() !== 'save') {
$field = new FieldDescription('u_password2');
$field->addProperty('message2', $this->translate('ERR_PWD_MISMATCH'));
$field->setType(FieldDescription::FIELD_TYPE_PWD);
$field->addProperty('customField', true);
$field->addProperty('title', $this->translate('FIELD_U_PASSWORD2'));
$result->addFieldDescription($field);
}
return $result;
}
/**
* ÐÐ»Ñ Ð¼ÐµÑода success Ñоздаем Ñвой обÑÐµÐºÑ Ð´Ð°Ð½Ð½ÑÑ
*
* @return Data
* @access protected
*/
protected function createData() {
$result = parent::createData();
$result->getFieldByName('u_password')->setData('');
return $result;
}
}