GroupRights.php
[Pman.Admin] / GroupRights.php
1 <?php
2 /**
3  * 
4  * Part of Core..
5  * 
6  */
7 require_once 'Pman.php';
8
9 class Pman_Admin_GroupRights extends Pman
10 {
11     function getAuth() {
12         parent::getAuth(); // load company!
13         $au = $this->getAuthUser();
14         if (!$au) {
15             $this->jerr("Not authenticated", array('authFailure' => true));
16         }
17         
18         if ($au->company()->comptype !='OWNER') {
19             $this->jerr("Error", "only company owners can manage groups");
20         }
21         
22         $this->authUser = $au;
23         return true;
24     }
25     
26     // perms - any table that can be modified by the user should be listed here..
27     // without it, our perms manager should deny writing via the web interface...
28     
29     // FOR PERMS - SEE THE DATAOBJECT!
30     
31     function get($v, $opts = Array())
32     {
33         // must recieve a group..
34         if (!isset($_GET['group_id']) || (int)$_GET['group_id'] < 0) {
35             $this->jerr("NO GROUP");
36         }
37         
38         if (!$this->checkPerm('E')) { // editing groups..
39             $this->jerr("PERMISSION DENIED");
40         }
41         
42         $g = DB_DataObject::Factory('core_group');
43         if (!$g->get($_GET['group_id'])) {
44             $this->jerr("group is invalid");
45         }
46         //print_r($g);
47          //   DB_DataObject::debugLevel(1);
48         $p = DB_DataObject::factory('core_group_right');
49         $p->group_id = (int)$_GET['group_id'];
50         $p->find();
51         $cur = array();
52     
53         while ($p->fetch()) {
54             $cur[$p->rightname] = clone($p);
55         }
56         
57 //        print_r($cur);exit;
58         
59         $e = -1;
60         $ar = array();
61         // echo "<PRE>"; print_r($p->defaultPermData() );
62         foreach($p->defaultPermData() as $k => $defdata) {
63             
64             if (empty($defdata[0])) { // no admin data available..
65                 continue;
66             }
67             if (!isset($cur[$k])) {
68                 // then there is no current access right for it..
69                 //DB_DataObject::debugLevel(1);
70                 $gr = DB_DataObject::factory('core_group_right');
71                 $gr->group_id = (int)$_GET['group_id'];
72                 $gr->rightname = $k;
73                 $gr->accessmask = $g->type == 2 ? '' : $defdata[1]; // set to defaults.. unless it's a contact group.
74                 $gr->insert();
75                 $cur[$k] = clone($gr);
76             }
77             
78             
79             $ar[] = array(
80                 'id' => $cur[$k]->id * 1, //
81                 'rightname' => $k,
82                 'descript' => isset($defdata[2]) ? $defdata[2] : '' ,
83                 'accessmask' => $cur[$k]->accessmask,
84                 'FullMask' => $defdata[0],
85                 'group_id' => (int)$_GET['group_id']
86             );
87                 
88         }
89
90         foreach ($ar as $key => $row) {
91             $rightname[$key]  = $row['rightname'];
92             $descript[$key] = $row['descript'];
93         }
94
95         // Sort the data with volume descending, edition ascending
96         array_multisort($rightname, SORT_ASC, $descript, SORT_ASC, $ar);        
97         
98         //print_r($ar); exit;
99         /*
100         usort($ar, function($a, $b) {           
101                    $rdiff = $a['rightname'] - $b['rightname'];
102             if ($rdiff) return $rdiff; 
103             return $a['descript'] - $b['descript'];     
104         });
105         */
106         //print_r($ar);exit;
107         $this->jdata($ar);
108         
109          
110     }
111     
112     
113     // post.. 
114     function post($v)
115     {
116         if (!isset($_POST['group_id']) || (int)$_POST['group_id'] < 0) {
117             $this->jerr("NO GROUP");
118         }
119         
120         if (!$this->checkPerm('E')) { // editing groups..
121             $this->jerr("PERMISSION DENIED");
122         }
123         
124         // add or update..
125         if (!empty($_POST['dataUpdate'])) {
126             foreach($_POST['dataUpdate'] as $id => $ac) {
127                 $id  = (int)$id;
128                 $p = DB_DataObject::factory('core_group_right');
129                 $p->group_id = (int)$_POST['group_id'];
130                 if (!$p->get($id)) {
131                     $this->jerr("could not find gid:{$p->group_id} and $id");
132                     continue; // errro cond.
133                 }
134                 $po = clone($p);
135                 $p->accessmask = $ac;
136                 $p->validate(); // ensure that the basic perms can not be removed
137                 $p->update($po);
138             }
139         }
140         if (!empty($_POST['dataAdd'])) {
141             foreach($_POST['dataAdd'] as $perm => $ac) {
142                 $p = DB_DataObject::factory('core_group_right');
143                 $p->group_id = (int)$_POST['group_id'];
144                 $p->rightname = $perm;
145                 $p->accessmask = $ac;
146                 $p->validate(); // ensure that the basic perms can not be removed
147                 $p->insert();
148             }
149         }
150         $this->jok("done");
151         
152         
153         
154     }
155     
156     function checkPerm($lvl)
157     {
158         return $this->hasPerm('Core.Groups', $lvl);
159     }
160     
161 }