energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file User.class.php

Documentation is available at User.class.php

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