Location: PHPKode > projects > Energine > energine-2.2/core2a/framework/UserGroup.class.php
<?php

/**
 * Класс Group.
 *
 * @package energine
 * @subpackage core
 * @author 1m.dm
 * @copyright ColoCall 2006
 * @version $Id: UserGroup.class.php,v 1.5 2007/12/17 14:16:03 pavka Exp $
 */

//require_once('core/framework/DBWorker.class.php');

/**
 * Группы пользователей.
 *
 * @package energine
 * @subpackage core
 * @final
 */
final class UserGroup extends DBWorker {

    /**
     * @access private
     * @var int идентификатор группы для гостей
     */
    private $defaultGuestGroup = false;

    /**
     * @access private
     * @var int идентификатор группы для аутентифицированных пользователей
     */
    private $defaultUserGroup = false;

    /**
     * @access private
     * @var array информация о всех существующих группах пользователей
     * @see UserGroup::__construct()
     */
    private $groups;

    /**
     * @access private
     * @static
     * @var UserGroup единый для всей системы экземпляр класса UserGroup
     */
    private static $instance;

    /**
     * Конструктор класса.
     *
     * @access public
     * @return void
     */
    public function __construct() {
        parent::__construct();
        /*
         * Загружаем инфомацию о группах пользователей в структуру вида:
         *     array(
         *         $group_id => array(group info)
         *     );
         */
        $result = $this->dbh->select('user_groups');
        foreach ($result as $groupInfo) {
            $this->groups[$groupInfo['group_id']] = $groupInfo;
            unset($this->groups[$groupInfo['group_id']]['group_id']);
        }
    }

    /**
     * Возвращает единый для всей системы экземпляр класса UserGroup.
     * См. паттерн проектирования Singleton.
     *
     * @access public
     * @static
     * @return UserGroup
     */
    public static function getInstance() {
        if (!isset(self::$instance)) {
            self::$instance = new UserGroup;
        }
        return self::$instance;
    }

    /**
     * Возвращает идентификатор группы для гостей.
     *
     * @access public
     * @return int
     */
    public function getDefaultGuestGroup() {
        if (!$this->defaultGuestGroup) {
            $result = false;
            foreach ($this->groups as $groupId => $groupInfo) {
                if ($groupInfo['group_default'] == 1) {
                    $result = $groupId;
                    break;
                }
            }
            if ($result == false) {
            	throw new SystemException('ERR_DEV_NO_DEFAULT_GROUP', SystemException::ERR_CRITICAL);
            }
            $this->defaultGuestGroup = $result;
        }
        return $this->defaultGuestGroup;
    }

    /**
     * Возвращает идентификатор группы для аутентифицированных пользователей.
     *
     * @access public
     * @return int
     */
    public function getDefaultUserGroup() {
        if (!$this->defaultUserGroup) {
            $result = false;
            foreach ($this->groups as $groupId => $groupInfo) {
                if ($groupInfo['group_user_default'] == 1) {
                    $result = $groupId;
                    break;
                }
            }
            if ($result == false) {
            	throw new SystemException('ERR_DEV_NO_DEFAULT_USER_GROUP', SystemException::ERR_CRITICAL);
            }
            $this->defaultUserGroup = $result;
        }
        return $this->defaultUserGroup;
    }

    /**
     * Возвращает набор групп, к которым принадлежит пользователь.
     *
     * @access public
     * @return array
     */
    public function getUserGroups($userId) {
        $result = array($this->getDefaultGuestGroup());
        if (!is_null($userId)) {
            $res = $this->dbh->select('user_user_groups', array('group_id'), array('u_id' => $userId));
            if (is_array($res)) {
                $result = simplifyDBResult($res, 'group_id');
            }
        }
        return $result;
    }

    /**
     * Возвращает информацию о группе.
     *
     * @access public
     * @return array
     */
    public function getInfo($groupId) {
        $result = array();
        if (isset($this->groups[$groupId])) {
            $result = $this->groups[$groupId];
        }
        return $result;
    }
}
Return current item: Energine