Source for file UserProfile.class.php

Documentation is available at UserProfile.class.php

  1. /**
  2.  * Содержит класс UserProfile
  3.  *
  4.  * @package energine
  5.  * @author dr.Pavka
  6.  * @copyright ColoCall 2006
  7.  * @version $Id: fsource_energine__modulesusercomponentsUserProfile.class.php.html,v 1.1 2007/09/17 14:32:32 pavka Exp $
  8.  */
  9.  
  10. require_once('core/modules/share/components/DataSet.class.php');
  11. require_once('core/framework/AuthUser.class.php');
  12.  
  13. /**
  14.  * Форма редактирования данных пользователя
  15.  *
  16.  * @package energine
  17.  * @subpackage user
  18.  */
  19. class UserProfile extends DataSet {
  20.     /**
  21.      * Конструктор класса
  22.      *
  23.      * @return void 
  24.      * @access public
  25.      */
  26.     public function __construct($name$moduleDocument $document,  array $params null{
  27.         parent::__construct($name$module$document,  $params);
  28.     }
  29.  
  30.  
  31.     /**
  32.      * Действие по умолчанию
  33.      *
  34.      * @return type 
  35.      * @access protected
  36.      */
  37.  
  38.     protected function main({
  39.         $user $this->document->user;
  40.  
  41.         if (!$user->isAuthenticated()) {
  42.             throw new SystemException('ERR_DEV_NO_AUTH_USER'SystemException::ERR_DEVELOPER);
  43.         }
  44.         //устанавливаем action формы
  45.         $this->setDataSetAction('save-user');
  46.         $this->setTitle($this->translate('TXT_USER_PROFILE'));
  47.         $this->addTranslation('MSG_PWD_MISMATCH');
  48.         $this->prepare();
  49.     }
  50.  
  51.     /**
  52.      * Переопределен параметр active
  53.      *
  54.      * @return int 
  55.      * @access protected
  56.      */
  57.  
  58.     protected function defineParams({
  59.         $result = array_merge(parent::defineParams(),
  60.         array(
  61.         'active'=>true,
  62.         ));
  63.         return $result;
  64.     }
  65.     /**
  66.      * Метод сохранения
  67.      * Переписан родительский
  68.      *
  69.      * @return void 
  70.      * @access protected
  71.      */
  72.  
  73.     protected function save({
  74.         $fields $this->config->getMethodConfig(self::DEFAULT_ACTION_NAME)->fields;
  75.         foreach ($fields->field as $field{
  76.             $fieldName = (string)$field['name'];
  77.             if (!isset($_POST[$fieldName])) {
  78.                throw new SystemException('ERR_INSUFFICIENT_DATA'SystemException::ERR_CRITICAL);
  79.             }
  80.             $data[$fieldName$_POST[$fieldName];
  81.         }
  82.         if ($data['u_password'!= $data['u_password2']{
  83.             $this->generateError(SystemException::ERR_WARNING'ERR_PWD_MISMATCH');
  84.         }
  85.  
  86.         unset($data['u_password2']);
  87.         try {
  88.             $data['u_password'= sha1($data['u_password']);
  89.             $this->document->user->update($data);
  90.             $_SESSION['saved'true;
  91.  
  92.             //переадресация
  93.             $this->response->redirectToCurrentSection('success/');
  94.         }
  95.         //Отлавливаем все ошибки которые могли произойти при сохранении в БД, чтобы вывести нужную информацию об ошибке на уровне компонента
  96.         catch (FormException $formError{
  97.             $errors $this->saver->getErrors();
  98.             foreach ($errors as $errorFieldName{
  99.                 $message $this->saver->getDataDescription()->getFieldDescriptionByName($errorFieldName)->getPropertyValue('message');
  100.                 $this->generateError(SystemException::ERR_NOTICE$message);
  101.             }
  102.             //переадресация
  103.             $this->response->redirectToCurrentSection();
  104.         }
  105.         catch (SystemException $e){
  106.             $this->generateError(SystemException::ERR_NOTICE$e->getMessage()$e->getCustomMessage());
  107.             //переадресация
  108.             $this->response->redirectToCurrentSection();
  109.         }
  110.     }
  111.  
  112.     /**
  113.      * Метод выводящий сообщение об успешном сохранении данных
  114.      *
  115.      * @return void 
  116.      * @access protected
  117.      */
  118.  
  119.     protected function success({
  120.         //если в сессии нет переменной saved значит этот метод пытаются дернуть напрямую. Не выйдет!
  121.         if (!isset($_SESSION['saved'])) {
  122.             throw new SystemException('ERR_404'SystemException::ERR_404);
  123.         }
  124.         //Мавр сделал свое дело...
  125.         unset($_SESSION['saved']);
  126.         $this->prepare();
  127.         $this->document->componentManager->getComponentByName('breadCrumbs')->addCrumb();
  128.     }
  129.  
  130.     /**
  131.      * Для метода success переопределен метод создания обїекта метаданных
  132.      *
  133.      * @return DataDescription 
  134.      * @access protected
  135.      */
  136.  
  137.     protected function createDataDescription({
  138.         if ($this->getAction(=== 'success'{
  139.             $result new DataDescription();
  140.  
  141.             $ddi new FieldDescription('success_message');
  142.             $ddi->setType(FieldDescription::FIELD_TYPE_TEXT);
  143.             $ddi->setMode(FieldDescription::FIELD_MODE_READ);
  144.             $ddi->removeProperty('title');
  145.             $result->addFieldDescription($ddi);
  146.         }
  147.         else {
  148.             $result parent::createdataDescription();
  149.         }
  150.  
  151.         return $result;
  152.     }
  153.  
  154.     /**
  155.      * Для метода success создаем свой объект данных
  156.      *
  157.      * @return Data 
  158.      * @access protected
  159.      */
  160.  
  161.     protected function createData({
  162.         if ($this->getAction(=== 'success'{
  163.             $result new Data();
  164.             $di new Field('success_message');
  165.             $di->setData($this->translate('TXT_USER_PROFILE_SAVED'));
  166.             $result->addField($di);
  167.         }
  168.         else {
  169.             $result parent::createData();
  170.         }
  171.  
  172.         return $result;
  173.     }
  174.  
  175.  
  176.     /**
  177.      * Для метода редактирования убирается пароль
  178.      *
  179.      * @return array 
  180.      * @access protected
  181.      */
  182.  
  183.     protected function loadData({
  184.         $result parent::loadData();
  185.         if ($this->getAction(== 'save'{
  186.             if ($result[0]['u_password'!= $result[0]['u_password2']{
  187.                 throw new SystemException('ERR_PWD_NOT_MATCH'SystemException::ERR_WARNING);
  188.             }
  189.             $result[0]['u_password'= sha1($result[0]['u_password']);
  190.         }
  191.         elseif ($this->getAction(== 'main'{
  192.             $fields $this->config->getMethodConfig($this->getAction())->fields;
  193.             foreach ($fields->field as $field{
  194.                 $fieldName = (string)$field['name'];
  195.                 $result[0][$fieldName$this->document->user->getValue($fieldName);
  196.             }
  197.  
  198.             $result[0]['u_password''';
  199.         }
  200.  
  201.         return $result;
  202.     }
  203.  
  204. }

Documentation generated on Mon, 17 Sep 2007 13:33:34 +0300 by phpDocumentor 1.4.0a2