Exemple #1
0
 /**
  * Главная страница
  * 
  * @return void
  */
 public function indexAction()
 {
     $options = Phorm_Config::xml('grids/control/widgets.xml');
     if ($this->_request->isXmlHttpRequest()) {
         $rows = $this->Widget->getWidgetsSetsFullList();
         $paginator = $this->Widget->getPaginator();
         $this->_helper->json(Phorm_JQuery_DataGrid::data($rows, $paginator, $options));
     } else {
         $this->view->assign('WidgetsDataTable', $this->view->DataGrid('WidgetsDataTable', $options));
     }
 }
Exemple #2
0
 /**
  * Сохранение данных о группе
  * 
  * @param array $data Массив данных для сохранения
  * 
  * @return array Массив данных о группе
  */
 public function saveRoleInfo($data)
 {
     /**
      * Выделяем из массива данных поля для вставки в основную таблицу pw_roles
      */
     $maindata = $this->getFilteredValuesByTableCols('pw_roles', $data);
     /**
      * Сохранение данных
      */
     $this->_db->beginTransaction();
     try {
         /**
          * Гостевая, административная группа и группа по умолчанию должны быть в единственном кол-ве
          */
         foreach (array('isdefault', 'isguest', 'isadmin') as $role) {
             if (isset($maindata[$role]) && $maindata[$role] == 'yes') {
                 $this->_db->update('pw_roles', array($role => 'no'));
             }
         }
         /*if(isset($maindata['isdefault']) && $maindata['isdefault']=='yes') {
         			$this->_db->update('pw_roles',array('isdefault'=>'no'));
         		}
         		
         		if(isset($maindata['isguest']) && $maindata['isguest']=='yes') {
         			$this->_db->update('pw_roles',array('isguest'=>'no'));
         		}
         		
         		if(isset($maindata['isadmin']) && $maindata['isadmin']=='yes') {
         			$this->_db->update('pw_roles',array('isadmin'=>'no'));
         		}*/
         /**
          * Сохранение данных
          */
         if (isset($data['roleid'])) {
             // Обновление существующей записи
             $this->_db->update('pw_roles', $maindata, 'roleid=' . (int) $data['roleid']);
             $action = 'update';
         } else {
             // Создание новой записи
             $this->_db->insert('pw_roles', $maindata);
             $data['roleid'] = $this->_db->lastInsertId();
             $action = 'insert';
         }
         /**
          * Права доступа к разделам
          */
         if (isset($data['acl_categories']) && is_int($data['acl_categories'])) {
             $this->_db->delete('pw_categories_acl', 'roleid=' . (int) $data['roleid']);
             $Categories = new Phorm_Categories();
             foreach ($Categories->getFullList() as $category) {
                 $this->_db->insert('pw_categories_acl', array('categoryid' => $category['categoryid'], 'roleid' => $data['roleid'], 'accesslevel' => $data['acl_categories']));
             }
         }
         /**
          * Права доступа к виджетам
          * @todo Сделать в виджетах методы типа pack и unpack
          */
         if (isset($data['acl_widgets']) && in_array($data['acl_widgets'], array('yes', 'no'))) {
             $Widget = new Phorm_Widget();
             foreach ($Widget->getWidgetsSetsFullList() as $set) {
                 if (!empty($set['widgets']) && ($widgets = Zend_Json::decode($set['widgets']))) {
                     foreach ($widgets as $layoutname => $layout) {
                         foreach ($layout as $i => $widget) {
                             $widget = Zend_Json::decode($widget);
                             $aclid = array_search($data['roleid'], $widget['acl']);
                             if ($aclid !== false) {
                                 unset($widget['acl'][$aclid]);
                             }
                             if ($data['acl_widgets'] == 'yes') {
                                 $widget['acl'][] = $data['roleid'];
                             }
                             $widget['acl'] = array_values($widget['acl']);
                             $widgets[$layoutname][$i] = Zend_Json::encode($widget);
                         }
                     }
                     $this->_db->update('pw_widgets_sets', array('widgets' => Zend_Json::encode($widgets)), 'setid=' . (int) $set['setid']);
                 }
             }
         }
         /**
          * Логирование
          */
         $this->setLog($action, array('url' => '/control/users/roleedit/roleid/' . (int) $data['roleid'] . '/', 'name' => $data['rolename'], 'tablename' => 'pw_roles', 'identity' => (int) $data['roleid'], 'fieldname' => 'roleid'));
         $this->_db->commit();
         return $data;
     } catch (Exception $e) {
         $this->_db->rollBack();
         $this->_errors[] = $e->getMessage();
     }
     return false;
 }