Source for file User.class.php

Documentation is available at User.class.php

  1. /**
  2.  * Содержит класс User
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author dr.Pavka
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine_core_frameworkUser.class.php.html,v 1.1 2007/09/17 14:32:35 pavka Exp $
  9.  */
  10.  
  11. require_once('core/framework/DBWorker.class.php');
  12. require_once('core/framework/UserGroup.class.php');
  13. /**
  14.  * Класс для работы с пользователем
  15.  * Возвращает информацию о пользователе, сохраняет данные
  16.  *
  17.  * @package energine
  18.  * @subpackage core
  19.  */
  20. class User extends DBWorker {
  21.     /**
  22.      * Имя таблицы пользователей
  23.      *
  24.      */
  25.     const USER_TABLE_NAME = 'user_Users';
  26.  
  27.     /**
  28.      * Имя таблицы групп
  29.      *
  30.      */
  31.     const GROUP_TABLE_NAME = 'user_UserGroups';
  32.  
  33.     /**
  34.      * Идентификатор пользователя
  35.      *
  36.      * @var int 
  37.      * @access private
  38.      */
  39.     private $id = false;
  40.     /**
  41.      * Объект по работе с пользователями
  42.      *
  43.      * @var UserGroup 
  44.      * @access protected
  45.      */
  46.     protected $userGroup;
  47.  
  48.     /**
  49.      * Информация о пользователе
  50.      *
  51.      * @var array 
  52.      * @access private
  53.      */
  54.     private $info = array();
  55.  
  56.     /**
  57.      * Массив ошибок произошедших во время работы
  58.      *
  59.      * @var array 
  60.      * @access private
  61.      */
  62.     private $error = array();
  63.  
  64.     /**
  65.      * Конструктор класса
  66.      *
  67.      * @param int идентификатор пользователя
  68.      * @return void 
  69.      */
  70.     public function __construct($id false{
  71.         parent::__construct();
  72.         $this->id = $id;
  73.         $this->userGroup = UserGroup::getInstance();
  74.         //Если пользователь существует  - загружаем его информацию
  75.         if ($this->id{
  76.             $this->loadInfo($this->id);
  77.         }
  78.     }
  79.  
  80.     /**
  81.      * Загрузка информации из БД
  82.      *
  83.      * @param int идентификатор пользователя
  84.      * @return void 
  85.      * @access protected
  86.      */
  87.  
  88.     protected function loadInfo($UID{
  89.         $result $this->dbh->select(self::USER_TABLE_NAMEtruearray('u_id' => $UID));
  90.         if (is_array($result&& !empty($result)) {
  91.             $this->id = $UID;
  92.             $result[0]['u_password'true;
  93.             $this->info = $result[0];
  94.         }
  95.     }
  96.  
  97.     /**
  98.      * Возвращает перечень групп в которые входит пользователь
  99.      *
  100.      * @return mixed 
  101.      * @access public
  102.      */
  103.  
  104.     public function getGroups({
  105.         $result array();
  106.            $result $this->userGroup->getUserGroups($this->id);
  107.         return $result;
  108.     }
  109.  
  110.     /**
  111.      * Возвращает идентфикатор пользователя
  112.      *
  113.      * @return mixed 
  114.      * @access public
  115.      */
  116.  
  117.     public function getID({
  118.         return $this->id;
  119.     }
  120.     /**
  121.      * Возвращает значение поля
  122.      *
  123.      * @return mixed 
  124.      * @access public
  125.      */
  126.  
  127.     public function getValue($fieldName{
  128.         $result false;
  129.         if (isset($this->info[$fieldName])) {
  130.             $result $this->info[$fieldName];
  131.         }
  132.         return $result;
  133.     }
  134.     /**
  135.      * Возвращает перечень полей
  136.      *
  137.      * @return array 
  138.      * @access public
  139.      */
  140.  
  141.     public function getFields({
  142.         $result $this->dbh->getColumnsInfo(self::USER_TABLE_NAME);
  143.         return $result;
  144.     }
  145.     /**
  146.      * Создание нового пользователя
  147.      *
  148.      * @param array 
  149.      * @return bool 
  150.      * @access public
  151.      */
  152.  
  153.     public function create($data{
  154.         try {
  155.             //проверяем имеются ли все необходимые значения
  156.             $tableInfo $this->dbh->getColumnsInfo(self::USER_TABLE_NAME);
  157.             $necessaryFields $uniqueFields array();
  158.             foreach ($tableInfo as $columnName => $columnInfo{
  159.                 //отбираем все поля !nullable, не PRI, и без дефолтного значения
  160.                 if (!$columnInfo['nullable'&& $columnInfo['index'!= DBA::PRIMARY_INDEX && !$columnInfo['default']{
  161.                     array_push($necessaryFields$columnName);
  162.                 }
  163.                 //Отбираем все уникальные поля
  164.                 if ($columnInfo['index'== DBA::UNIQUE_INDEX{
  165.                     array_push($uniqueFields$columnName);
  166.                 }
  167.             }
  168.             //если пересечение списка необходимых полей и списка полей данных не пустое  - значит недостаточно данных для сохранения
  169.             if ($undefinedFields = array_diff($necessaryFieldsarray_keys($data))) {
  170.                 throw new SystemException('ERR_INSUFFICIENT_DATA'SystemException::ERR_WARNING$undefinedFields);
  171.             }
  172.             //проверяем являются ли введенные поля уникальными
  173.             if (!empty($uniqueFields)) {
  174.                 $condition array();
  175.                 foreach ($uniqueFields as $fieldname{
  176.                     $condition[$fieldname.' = "'.$data[$fieldname].'"';
  177.                 }
  178.                 $condition = implode(' OR '$condition);
  179.                 if (simplifyDBResult($this->dbh->select(self::USER_TABLE_NAME'COUNT(u_id) as num'$condition)'num'true)>0{
  180.                     throw new SystemException('ERR_NOT_UNIQUE_DATA'SystemException::ERR_WARNING);
  181.                 }
  182.             }
  183.             $this->info = $data;
  184.             //$this->info['u_password'] = $data['u_password'];
  185.             $data['u_password'= sha1($data['u_password']);
  186.             $result $this->dbh->modify(QAL::INSERTself::USER_TABLE_NAME $data);
  187.             $this->id = $result;
  188.             $this->setGroups(array($this->userGroup->getDefaultUserGroup()));
  189.         }
  190.         catch (SystemException $e{
  191.             array_push($this->error$e);
  192.             $result false;
  193.         }
  194.         return $result;
  195.     }
  196.  
  197.     /**
  198.      * Обновление данных о пользователе
  199.      *
  200.      * @param array 
  201.      * @return boolean 
  202.      * @access public
  203.      */
  204.  
  205.     public function update($data){
  206.         $result false;
  207.         if ($this->getID()) {
  208.             $result $this->dbh->modify(QAL::UPDATEself::USER_TABLE_NAME $dataarray('u_id'=>$this->getID()));
  209.         }
  210.         return $result;
  211.     }
  212.  
  213.     /**
  214.      * Устанавливает перечень групп в которые будет входить пользователь
  215.      *
  216.      * @param array 
  217.      * @return void 
  218.      * @access public
  219.      */
  220.  
  221.     public function setGroups($groups{
  222.         //Устанавливать группы можно только тогда, когда пользователь создан
  223.         if ($this->getID()) {
  224.             $this->dbh->beginTransaction();
  225.             try {
  226.                 $this->dbh->modify(QAL::DELETEself::GROUP_TABLE_NAMEnullarray('u_id'=>$this->getID()));
  227.                 foreach ($groups as $groupID{
  228.                     $this->dbh->modify(QAL::INSERTself::GROUP_TABLE_NAMEarray('u_id'=>$this->getID()'group_id'=>$groupID));
  229.                 }
  230.                 $this->dbh->commit();
  231.             }
  232.             catch (SystemException $e{
  233.                 $this->dbh->rollback();
  234.                 //передаем исключение дальше
  235.                 throw new SystemException($e->getMessage()$e->getCode()$e->getCustomMessage());
  236.             }
  237.         }
  238.     }
  239.  
  240.     /**
  241.      * Генерирует пароль заданной длины из случайных буквенно-цифровых символов.
  242.      *
  243.      * @param int $length 
  244.      * @return string 
  245.      * @access public
  246.      * @static
  247.      */
  248.     public static function generatePassword($length 8{
  249.         $chars '0123456789abcdefghjiklmnopqrstuvwxyzABCDEFGHJIKLMNOPQRSTUVWXYZ';
  250.         $password '';
  251.         $max = strlen($chars1// $max = count($chars) - 1;
  252.         for ($i 0$i $length$i++{
  253.             $password .= $chars[mt_rand(0$max)];
  254.         }
  255.         return $password;
  256.     }
  257.  
  258.     /**
  259.      * Возвращает массив ошибок
  260.      *
  261.      * @return array 
  262.      * @access public
  263.      */
  264.  
  265.      public function getErrors({
  266.         return (empty($this->error))?false:$this->error;
  267.      }
  268. }

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