/** * Главная страница * * @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)); } }
/** * Сохранение данных о группе * * @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; }