Source for file RoleEditor.class.php

Documentation is available at RoleEditor.class.php

  1.  
  2. /**
  3.  * Содержит класс RoleEditor
  4.  *
  5.  * @package energine
  6.  * @author dr.Pavka
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine__modulesusercomponentsRoleEditor.class.php.html,v 1.1 2007/09/17 14:32:32 pavka Exp $
  9.  */
  10. require_once('core/framework/TreeBuilder.class.php');
  11. require_once('core/modules/share/components/Grid.class.php');
  12.  
  13. /**
  14.  * Редактор ролей
  15.  *
  16.  * @package energine
  17.  * @subpackage user
  18.  */
  19. class RoleEditor extends Grid {
  20.     /**
  21.      * Уникальные поля
  22.      * Эти поля могут быть только у одного пользователя из всех
  23.      * @var array 
  24.      * @access private
  25.      */
  26.     private $uniqueFields = array('group_default''group_user_default');
  27.  
  28.     /**
  29.      * Конструктор класса
  30.      *
  31.      * @return void 
  32.      */
  33.     public function __construct($name$moduleDocument $document,  array $params null{
  34.         parent::__construct($name$module$document,  $params);
  35.         $this->setTableName('user_Groups');
  36.         $this->setTitle($this->translate('TXT_ROLE_EDITOR'));
  37.     }
  38.  
  39.     /**
  40.      * Переопределенный метод
  41.      * Для формы редактирования, если чекбоксы ролей по умолчанию отмечены делает их неактивными
  42.      *
  43.      * @return void 
  44.      * @access public
  45.      */
  46.  
  47.     public function build({
  48.         if ($this->getType(== self::COMPONENT_TYPE_FORM_ALTER {
  49.             foreach ($this->uniqueFields as $fieldName{
  50.                 if ($this->getData()->getFieldByName($fieldName)->getRowData(0=== true{
  51.                     $this->getDataDescription()->getFieldDescriptionByName($fieldName)->setMode(FieldDescription::FIELD_MODE_READ);
  52.                 }
  53.             }
  54.         }
  55.  
  56.         if ($this->getType(!= self::COMPONENT_TYPE_LIST{
  57.             //Добавляем вкладку с уровнем прав
  58.             $this->addTab($this->buildTab($this->translate('TXT_ROLE_DIV_RIGHTS')));
  59.         }
  60.  
  61.         return parent::build();
  62.     }
  63.  
  64.     /**
  65.       * Переопределенный метод сохранения
  66.       *
  67.       *
  68.       * @return void 
  69.       * @access protected
  70.       */
  71.  
  72.     protected function loadData({
  73.  
  74.         /* added by Tigra */
  75.         if (isset($_POST['groupName'])) {
  76.             $this->setOrder(array($_POST['groupName'=> strtoupper($_POST['orderVector'])));
  77.         }
  78.         /* ^added by Tigra^ */
  79.  
  80.         $result parent::loadData();
  81.         if ($this->getAction(== 'save'{
  82.             foreach ($this->uniqueFields as $fieldName{
  83.                 if (isset($result[0][$fieldName]&& $result[0][$fieldName]{
  84.                     $this->dbh->modify(QAL::UPDATE$this->getTableName()array($fieldName=>null));
  85.                 }
  86.             }
  87.         }
  88.         return $result;
  89.     }
  90.  
  91.     /**
  92.      * Добавляется fake поле user_div_rights в котором находятся данные
  93.      *
  94.      * @return DataDescription 
  95.      * @access protected
  96.      */
  97.  
  98.     protected function createDataDescription({
  99.         $result parent::createDataDescription();
  100.         if ($this->getType(!= self::COMPONENT_TYPE_LIST{
  101.             foreach ($result as $fieldDescription{
  102.                 $fieldDescription->addProperty('tabName'$this->translate('TXT_ROLE_EDITOR'));
  103.             }
  104.             $fd new FieldDescription('group_div_rights');
  105.             $fd->setSystemType(FieldDescription::FIELD_TYPE_INT);
  106.             $fd->setType(FieldDescription::FIELD_TYPE_CUSTOM);
  107.             $fd->addProperty('tabName'$this->translate('TXT_ROLE_DIV_RIGHTS'));
  108.             $fd->addProperty('customField'true);
  109.             $result->addFieldDescription($fd);
  110.         }
  111.         return $result;
  112.     }
  113.  
  114.     /**
  115.      * Вкладка с уровнем прав на разделы
  116.      *
  117.      * @return DOMNode 
  118.      * @access private
  119.      */
  120.  
  121.     private function buildDivRightsData({
  122.         $builder  new TreeBuilder();
  123.         $sitemap Sitemap::getInstance();
  124.         $builder->setTree($sitemap->getTree());
  125.  
  126.         $id $this->getFilter();
  127.         $id (!empty($id))?current($id):'';
  128.  
  129.         $data $sitemap->getInfo();
  130.         foreach ($data as $smapID => $value{
  131.             $data[$smapID]['RightsId'$sitemap->getDocumentRights($smapID$id);
  132.             $data[$smapID]['Id'$smapID;
  133.             //unset($data[$key]['smap_segment']);
  134.         }
  135.  
  136.         //$d = array_map(null, $data, array_map(create_function('', 'return array(\'group_id\'=>0);'), array_fill(0,sizeof($data),'')));
  137.  
  138.  
  139.         $dataObject new Data();
  140.         $dataObject->load($data);
  141.         $builder->setData($dataObject);
  142.  
  143.         $dataDescriptionObject new DataDescription();
  144.  
  145.         $f new FieldDescription('Id');
  146.         $f->setType(FieldDescription::FIELD_TYPE_INT);
  147.         $f->addProperty('key'true);
  148.         $dataDescriptionObject->addFieldDescription($f);
  149.  
  150.         $f new FieldDescription('Pid');
  151.         $f->setType(FieldDescription::FIELD_TYPE_INT);
  152.         $dataDescriptionObject->addFieldDescription($f);
  153.  
  154.         $f new FieldDescription('Name');
  155.         $f->setType(FieldDescription::FIELD_TYPE_STRING);
  156.         $dataDescriptionObject->addFieldDescription($f);
  157.  
  158.         $f new FieldDescription('RightsId');
  159.         $f->setType(FieldDescription::FIELD_TYPE_SELECT);
  160.         if ($this->getAction(== 'view'{
  161.             $f->setMode(FieldDescription::FIELD_MODE_READ);
  162.         }
  163.         $rights $this->dbh->select('user_GroupRights'array('right_id''right_const'));
  164.         $rights = array_merge(array(array('right_id'=>0'right_const'=>'NO_RIGHTS'))$rights);
  165.         foreach ($rights as $key => $value{
  166.             $rights[$key]['right_const'$this->translate('TXT_'.$value['right_const']);
  167.         }
  168.         $f->loadAvailableValues($rights'right_id''right_const');
  169.         $dataDescriptionObject->addFieldDescription($f);
  170.  
  171.  
  172.         $builder->setData($dataObject);
  173.         $builder->setDataDescription($dataDescriptionObject);
  174.         $builder->build();
  175.  
  176.         return $builder->getResult();
  177.     }
  178.  
  179.     /**
  180.       * Для методов add и edit добавляется инфо о роли
  181.       *
  182.       * @return Data 
  183.       * @access protected
  184.       */
  185.  
  186.     protected function createData({
  187.         $result parent::createData();
  188.         if ($this->getType(!= self::COMPONENT_TYPE_LIST{
  189.             $f new Field('group_div_rights');
  190.             $f->setData($this->buildDivRightsData());
  191.             $result->addField($f);
  192.         }
  193.  
  194.         return $result;
  195.     }
  196.  
  197.     /**
  198.      * Сохранение данных о уровне прав на разделы
  199.      *
  200.      * @return boolean 
  201.      * @access protected
  202.      */
  203.  
  204.     protected function saveData({
  205.         $result parent::saveData();
  206.  
  207.         $roleID (is_int($result))?$result:current($this->getFilter());
  208.  
  209.         $this->dbh->modify(QAL::DELETE'share_AccessLevel'nullarray('group_id'=>$roleID));
  210.  
  211.         if(isset($_POST['div_right']&& is_array($_POST['div_right']))
  212.         foreach ($_POST['div_right'as $smapID=>$rightID{
  213.             if(!empty($rightID))
  214.             $this->dbh->modify(QAL::INSERT'share_AccessLevel',array('group_id'=>$roleID'smap_id'=>$smapID'right_id'=>$rightID));
  215.         }
  216.  
  217.         return $result;
  218.     }
  219.  
  220.     /**
  221.      * При удалении происходит проверка не удаляется ли дефолтная группа
  222.      *
  223.      * @return void 
  224.      * @access protected
  225.      */
  226.  
  227.     protected function deleteData($id{
  228.         if ($this->dbh->select($this->getTableName()'group_id'array('group_id'=>$id'group_default'=>true)) !== true{
  229.             throw new SystemException('ERR_DEFAULT_GROUP'SystemException::ERR_NOTICE);
  230.         }
  231.         parent::deleteData($id);
  232.     }
  233. }

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