コード例 #1
0
 public function create2($group_id = null, $acl_id = null)
 {
     $group = $this->load_group($group_id);
     if (!$acl_id) {
         $acl_id = $this->GetData('acl_id');
     }
     $acl = ACL::find_by_id($acl_id);
     if (!$acl) {
         Site::Flash('error', 'Unable to find the ACL selected');
         Redirect("admin/acl/groups/{$group->id}/rules/new");
     }
     if ($this->post) {
         $ids = $this->PostData('actions');
         $urls = $this->PostData('urls');
         if (is_array($ids)) {
             $count = 0;
             foreach ($ids as $id => $action) {
                 if (!$action) {
                     continue;
                 }
                 $rule = new ACLRule();
                 $rule->aclgroup_id = $group->id;
                 $rule->acl_id = $id;
                 $rule->action = $action;
                 if ($rule->action == 'araRedirect') {
                     if (isset($urls[$id])) {
                         $rule->url = $urls[$id];
                     }
                 }
                 if ($rule->save()) {
                     $count++;
                 }
             }
             $plural = 's have';
             if ($count == 1) {
                 $plural = ' has';
             }
             Site::Flash('notice', "{$count} rule{$plural} been added");
             Redirect("admin/acl/groups/{$group->id}");
         } else {
             Site::InstantFlash('error', 'No ACLs selected');
         }
     }
     $controller = mysql_real_escape_string($acl->controller);
     $id = mysql_real_escape_string($acl->id);
     $ids = array();
     $group_id = mysql_real_escape_string($group->id);
     $currentRules = ACLRule::Find_all("aclgroups.id = '{$group_id}' AND (acls.controller = '{$controller}' OR acls.id = '{$id}')");
     foreach ($currentRules as $rule) {
         $ids[$rule->acl->id] = $rule->acl->id;
     }
     $rulesql = '';
     if (count($ids) > 0) {
         $rulesql = ' AND NOT acls.id IN (' . implode(', ', $ids) . ')';
     }
     $acls = ACL::find_all("(acls.controller = '{$controller}' OR acls.id = '{$id}'){$rulesql}", "acls.action ASC");
     if (count($acls) == 0) {
         Site::Flash('error', 'There are no more ACLs to add in this section');
         Redirect("admin/acl/groups/{$group->id}/rules/new");
     }
     $this->assign('acl', $acl);
     $this->assign('acls', $acls);
     $this->assign('group', $group);
     $this->title = "ACL :: Groups :: {$group->name} :: New Rule";
     $this->render("aclrule/create2.tpl");
 }