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

Source for file UserGroup.class.php

Documentation is available at UserGroup.class.php

  1. <?php
  2.  
  3. /**
  4.  * Класс Group.
  5.  *
  6.  * @package energine
  7.  * @subpackage core
  8.  * @author 1m.dm
  9.  * @copyright Energine 2006
  10.  * @version $Id$
  11.  */
  12.  
  13. //require_once('core/framework/DBWorker.class.php');
  14.  
  15. /**
  16.  * Группы пользователей.
  17.  *
  18.  * @package energine
  19.  * @subpackage core
  20.  * @author 1m.dm
  21.  * @final
  22.  */
  23. final class UserGroup extends DBWorker {
  24.  
  25.     /**
  26.      * @access private
  27.      * @var int идентификатор группы для гостей
  28.      */
  29.     private $defaultGuestGroup = false;
  30.  
  31.     /**
  32.      * @access private
  33.      * @var int идентификатор группы для аутентифицированных пользователей
  34.      */
  35.     private $defaultUserGroup = false;
  36.  
  37.     /**
  38.      * @access private
  39.      * @var array информация о всех существующих группах пользователей
  40.      * @see UserGroup::__construct()
  41.      */
  42.     private $groups;
  43.  
  44.     /**
  45.      * @access private
  46.      * @static
  47.      * @var UserGroup единый для всей системы экземпляр класса UserGroup
  48.      */
  49.     private static $instance;
  50.  
  51.     /**
  52.      * Конструктор класса.
  53.      *
  54.      * @access public
  55.      * @return void 
  56.      */
  57.     public function __construct({
  58.         parent::__construct();
  59.         /*
  60.          * Загружаем инфомацию о группах пользователей в структуру вида:
  61.          *     array(
  62.          *         $group_id => array(group info)
  63.          *     );
  64.          */
  65.         $this->groups = convertDBResult($this->dbh->select('user_groups')'group_id'true);
  66.     }
  67.  
  68.     /**
  69.      * Возвращает единый для всей системы экземпляр класса UserGroup.
  70.      * См. паттерн проектирования Singleton.
  71.      *
  72.      * @access public
  73.      * @static
  74.      * @return UserGroup 
  75.      */
  76.     public static function getInstance({
  77.         if (!isset(self::$instance)) {
  78.             self::$instance new UserGroup;
  79.         }
  80.         return self::$instance;
  81.     }
  82.  
  83.     /**
  84.      * Возвращает перечень групп
  85.      *
  86.      * @return array 
  87.      * @access public
  88.      */
  89.  
  90.     public function asArray({
  91.         return $this->groups;
  92.     }
  93.  
  94.     /**
  95.      * Возвращает идентификатор группы для гостей.
  96.      *
  97.      * @access public
  98.      * @return int 
  99.      */
  100.     public function getDefaultGuestGroup({
  101.         if (!$this->defaultGuestGroup{
  102.             $result false;
  103.             foreach ($this->groups as $groupId => $groupInfo{
  104.                 if ($groupInfo['group_default'== 1{
  105.                     $result $groupId;
  106.                     break;
  107.                 }
  108.             }
  109.             if ($result == false{
  110.                 throw new SystemException('ERR_DEV_NO_DEFAULT_GROUP'SystemException::ERR_CRITICAL);
  111.             }
  112.             $this->defaultGuestGroup = $result;
  113.         }
  114.         return (int)$this->defaultGuestGroup;
  115.     }
  116.  
  117.     /**
  118.      * Возвращает идентификатор группы для аутентифицированных пользователей.
  119.      *
  120.      * @access public
  121.      * @return int 
  122.      */
  123.     public function getDefaultUserGroup({
  124.         if (!$this->defaultUserGroup{
  125.             $result false;
  126.             foreach ($this->groups as $groupId => $groupInfo{
  127.                 if ($groupInfo['group_user_default'== 1{
  128.                     $result $groupId;
  129.                     break;
  130.                 }
  131.             }
  132.             if ($result == false{
  133.                 throw new SystemException('ERR_DEV_NO_DEFAULT_USER_GROUP'SystemException::ERR_CRITICAL);
  134.             }
  135.             $this->defaultUserGroup = $result;
  136.         }
  137.         return $this->defaultUserGroup;
  138.     }
  139.  
  140.     /**
  141.      * Возвращает набор групп, к которым принадлежит пользователь.
  142.      *
  143.      * @param int идентификатор пользователя
  144.      * @access public
  145.      * @return array 
  146.      */
  147.     public function getUserGroups($userId false{
  148.         static $cachedGroups array();
  149.         if (!isset($cachedGroups[$userId])) {
  150.             $cachedGroups[$userIdarray($this->getDefaultGuestGroup());
  151.             if (!empty($userId)) {
  152.                 $res $this->dbh->select('user_user_groups'array('group_id')array('u_id' => $userId));
  153.                 if (is_array($res)) {
  154.                     $cachedGroups[$userIdsimplifyDBResult($res'group_id');
  155.                 }
  156.             }
  157.         }
  158.  
  159.         return $cachedGroups[$userId];
  160.     }
  161.  
  162.     /**
  163.      * Возвращает информацию о группе.
  164.      *
  165.      * @access public
  166.      * @return array 
  167.      */
  168.     public function getInfo($groupId{
  169.         $result array();
  170.         if (isset($this->groups[$groupId])) {
  171.             $result $this->groups[$groupId];
  172.         }
  173.         return $result;
  174.     }
  175.  
  176.     /**
  177.       * Возвращает перечень идентификаторов пользователей в группе
  178.       *
  179.       * @return array 
  180.       * @access public
  181.       */
  182.  
  183.     public function getMembers($groupID){
  184.         $result array();
  185.         $members simplifyDBResult($this->dbh->select('user_user_groups'array('u_id')array('group_id'=>$groupID))'u_id');
  186.         if (is_array($members)) {
  187.             foreach ($members as $memberID{
  188.                 $member new User($memberID);
  189.                 if ($member->getValue('u_is_active'== 1{
  190.                   $result[$member;
  191.                 }
  192.  
  193.             }
  194.         }
  195.         return $result;
  196.     }
  197. }
В создании документации нам помог: phpDocumentor