public function indexAction()
 {
     $return_array = array();
     // danh sách resources
     $resource_table = $this->getServiceLocator()->get('Permission\\Model\\JosAdminResourceTable');
     $resources = $resource_table->getResourceByArrayConditionAndArrayColumn(array('is_hidden' => 0), array('resource_id', 'resource', 'resource_name', 'parent_id', 'resource_type'));
     // sử dụng plugin
     $plugin_tree = $this->TreePlugin();
     $resources = $plugin_tree->outputTree($resources, 0);
     // get danh sách quyền
     $jos_admin_role_table = $this->getServiceLocator()->get('Permission\\Model\\JosAdminRoleTable');
     $roles = $jos_admin_role_table->getRoleByArrayConditionAndArrayColumn();
     // edit permission form
     $edit_permission_form = new EditPermissionForm($roles, $resources, $this->getServiceLocator());
     // kiểm tra post dữ liệu
     $request = $this->getRequest();
     if ($request->isPost()) {
         $post = $request->getPost();
         $edit_permission_form->setData($post);
         // kiểm tra form nếu hợp lệ
         if ($edit_permission_form->isValid()) {
             // lấy role_id đã post
             $role_id = $post['role_id'];
             unset($post['role_id']);
             // kiểm tra role id có tồn tại không
             $roles_exist = $jos_admin_role_table->getRoleByArrayConditionAndArrayColumn(array('role_id' => $role_id), array('role_name'));
             if ($roles_exist) {
                 $jos_admin_rule_table = $this->getServiceLocator()->get('Permission\\Model\\JosAdminRuleTable');
                 $jos_admin_rule_table->deleteRuleByRoleId($role_id);
                 foreach ($post as $key => $p) {
                     if ($p) {
                         // lưu quyền truy cập module vào bảng rule, để khi chọn lại rule này thì checkbox bằng true
                         $rule = new JosAdminRule();
                         $rule->setRoleId($role_id);
                         $rule->setResourceId($p);
                         $jos_admin_rule_table->saveResource($rule);
                     }
                 }
                 $this->flashMessenger()->addSuccessMessage('Chúc mừng, Cập nhật quyền thành công.');
                 return $this->redirect()->toRoute('permission/permission', array('index'));
             }
             // Lỗi, role id không tồn tại
             $this->flashMessenger()->addErrorMessage('Thông báo, Role không tồn tại. Vui lòng kiểm tra lại!');
             return $this->redirect()->toRoute('permission/permission', array('index'));
         }
     }
     $return_array['resources'] = $resources;
     $return_array['edit_permission_form'] = $edit_permission_form;
     return $return_array;
 }
 public function saveResource(JosAdminRule $rule)
 {
     $data = array('rule_id' => $rule->getRuleId(), 'role_id' => $rule->getRoleId(), 'resource_id' => $rule->getResourceId());
     $rule_id = (int) $rule->getRuleId();
     if ($rule_id == 0) {
         $this->tableGateway->insert($data);
     } else {
         if ($this->getRuleByArrayConditionAndArrayColumn(array('rule_id' => $rule_id), array('resource_id'))) {
             $this->tableGateway->update($data, array('rule_id' => $rule_id));
         } else {
             return false;
         }
     }
     return true;
 }