xref: /plugin/bez/mdl/Acl.php (revision de02284c1e90f3c0d8df29c1c019b3ef912eafd9)
1*de02284cSSzymon Olewniczak<?php
2*de02284cSSzymon Olewniczak
3*de02284cSSzymon Olewniczak//if(!defined('DOKU_INC')) die('meh.');
4*de02284cSSzymon Olewniczak//
5*de02284cSSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/tokens.php";
6*de02284cSSzymon Olewniczak
7*de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl;
8*de02284cSSzymon Olewniczak
9*de02284cSSzymon Olewniczak//ACL level defines
10*de02284cSSzymon Olewniczakuse dokuwiki\plugin\bez\meta\PermissionDeniedException;
11*de02284cSSzymon Olewniczak
12*de02284cSSzymon Olewniczakdefine('BEZ_AUTH_NONE', 0);
13*de02284cSSzymon Olewniczakdefine('BEZ_AUTH_VIEWER', 2);
14*de02284cSSzymon Olewniczakdefine('BEZ_AUTH_USER', 5);
15*de02284cSSzymon Olewniczakdefine('BEZ_AUTH_LEADER', 10);
16*de02284cSSzymon Olewniczakdefine('BEZ_AUTH_ADMIN', 20);
17*de02284cSSzymon Olewniczak
18*de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_UNKNOWN', -1);
19*de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_NONE', 0);
20*de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_VIEW', 1);
21*de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_CHANGE', 2);
22*de02284cSSzymon Olewniczak
23*de02284cSSzymon Olewniczakclass Acl {
24*de02284cSSzymon Olewniczak    /** @var  Model */
25*de02284cSSzymon Olewniczak    private $model;
26*de02284cSSzymon Olewniczak
27*de02284cSSzymon Olewniczak    private $level = BEZ_AUTH_NONE;
28*de02284cSSzymon Olewniczak
29*de02284cSSzymon Olewniczak//    private $threads = array();
30*de02284cSSzymon Olewniczak//    private $commcauses = array();
31*de02284cSSzymon Olewniczak//    private $tasks = array();
32*de02284cSSzymon Olewniczak
33*de02284cSSzymon Olewniczak    private function update_level($level) {
34*de02284cSSzymon Olewniczak		if ($level > $this->level) {
35*de02284cSSzymon Olewniczak			$this->level = $level;
36*de02284cSSzymon Olewniczak		}
37*de02284cSSzymon Olewniczak	}
38*de02284cSSzymon Olewniczak
39*de02284cSSzymon Olewniczak    public function get_level() {
40*de02284cSSzymon Olewniczak        return $this->level;
41*de02284cSSzymon Olewniczak    }
42*de02284cSSzymon Olewniczak
43*de02284cSSzymon Olewniczak    public function __construct(Model $model) {
44*de02284cSSzymon Olewniczak        $this->model = $model;
45*de02284cSSzymon Olewniczak
46*de02284cSSzymon Olewniczak		$userd = $this->model->dw_auth->getUserData($this->model->user_nick);
47*de02284cSSzymon Olewniczak		if ($userd !== false && is_array($userd['grps'])) {
48*de02284cSSzymon Olewniczak			$grps = $userd['grps'];
49*de02284cSSzymon Olewniczak			if (in_array('admin', $grps ) || in_array('bez_admin', $grps )) {
50*de02284cSSzymon Olewniczak				$this->update_level(BEZ_AUTH_ADMIN);
51*de02284cSSzymon Olewniczak            } elseif (in_array('bez_leader', $grps )) {
52*de02284cSSzymon Olewniczak                $this->update_level(BEZ_AUTH_LEADER);
53*de02284cSSzymon Olewniczak			} else {
54*de02284cSSzymon Olewniczak				$this->update_level(BEZ_AUTH_USER);
55*de02284cSSzymon Olewniczak			}
56*de02284cSSzymon Olewniczak        } elseif (isset($_GET['t'])) {
57*de02284cSSzymon Olewniczak//            $page_id = $this->model->action->page_id();
58*de02284cSSzymon Olewniczak//            $toko = new Tokens();
59*de02284cSSzymon Olewniczak//
60*de02284cSSzymon Olewniczak//            if ($toko->check(trim($_GET['t']), $page_id)) {
61*de02284cSSzymon Olewniczak//                $this->update_level(BEZ_AUTH_VIEWER);
62*de02284cSSzymon Olewniczak//            }
63*de02284cSSzymon Olewniczak        }
64*de02284cSSzymon Olewniczak    }
65*de02284cSSzymon Olewniczak
66*de02284cSSzymon Olewniczak    private function static_thread() {
67*de02284cSSzymon Olewniczak        $acl = array_fill_keys(Thread::get_columns(), BEZ_PERMISSION_NONE);
68*de02284cSSzymon Olewniczak
69*de02284cSSzymon Olewniczak        //virtual columns
70*de02284cSSzymon Olewniczak        $acl['participants'] = BEZ_PERMISSION_NONE;
71*de02284cSSzymon Olewniczak        $acl['labels'] = BEZ_PERMISSION_NONE;
72*de02284cSSzymon Olewniczak
73*de02284cSSzymon Olewniczak        //BEZ_AUTH_VIEWER is also token viewer
74*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_VIEWER) {
75*de02284cSSzymon Olewniczak            //user can display everythig
76*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
77*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_VIEW;
78*de02284cSSzymon Olewniczak            }, $acl);
79*de02284cSSzymon Olewniczak        }
80*de02284cSSzymon Olewniczak
81*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_ADMIN) {
82*de02284cSSzymon Olewniczak            //user can edit everythig
83*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
84*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_CHANGE;
85*de02284cSSzymon Olewniczak            }, $acl);
86*de02284cSSzymon Olewniczak
87*de02284cSSzymon Olewniczak            return $acl;
88*de02284cSSzymon Olewniczak        }
89*de02284cSSzymon Olewniczak    }
90*de02284cSSzymon Olewniczak
91*de02284cSSzymon Olewniczak
92*de02284cSSzymon Olewniczak    private function check_thread(Thread $thread) {
93*de02284cSSzymon Olewniczak//        $acl = array(
94*de02284cSSzymon Olewniczak//                'id'            => BEZ_PERMISSION_NONE,
95*de02284cSSzymon Olewniczak//                'title'         => BEZ_PERMISSION_NONE,
96*de02284cSSzymon Olewniczak//                'description'   => BEZ_PERMISSION_NONE,
97*de02284cSSzymon Olewniczak//                'state'         => BEZ_PERMISSION_NONE,
98*de02284cSSzymon Olewniczak//                'opinion'       => BEZ_PERMISSION_NONE,
99*de02284cSSzymon Olewniczak//                'type'          => BEZ_PERMISSION_NONE,
100*de02284cSSzymon Olewniczak//                'coordinator'   => BEZ_PERMISSION_NONE,
101*de02284cSSzymon Olewniczak//                'reporter'      => BEZ_PERMISSION_NONE,
102*de02284cSSzymon Olewniczak//                'date'          => BEZ_PERMISSION_NONE,
103*de02284cSSzymon Olewniczak//                'last_mod'      => BEZ_PERMISSION_NONE,
104*de02284cSSzymon Olewniczak//                'last_activity' => BEZ_PERMISSION_NONE,
105*de02284cSSzymon Olewniczak//                'participants'  => BEZ_PERMISSION_NONE,
106*de02284cSSzymon Olewniczak//                'subscribents'  => BEZ_PERMISSION_NONE,
107*de02284cSSzymon Olewniczak//                'description_cache' => BEZ_PERMISSION_NONE,
108*de02284cSSzymon Olewniczak//                'opinion_cache' => BEZ_PERMISSION_NONE
109*de02284cSSzymon Olewniczak//        );
110*de02284cSSzymon Olewniczak
111*de02284cSSzymon Olewniczak        $acl = $this->static_thread();
112*de02284cSSzymon Olewniczak
113*de02284cSSzymon Olewniczak        //we create new issue
114*de02284cSSzymon Olewniczak        if ($thread->id === NULL) {
115*de02284cSSzymon Olewniczak            if ($this->level >= BEZ_AUTH_USER) {
116*de02284cSSzymon Olewniczak                $acl['title'] = BEZ_PERMISSION_CHANGE;
117*de02284cSSzymon Olewniczak                $acl['content'] = BEZ_PERMISSION_CHANGE;
118*de02284cSSzymon Olewniczak                //$acl['type'] = BEZ_PERMISSION_CHANGE;
119*de02284cSSzymon Olewniczak            }
120*de02284cSSzymon Olewniczak
121*de02284cSSzymon Olewniczak            if ($this->level >= BEZ_AUTH_LEADER) {
122*de02284cSSzymon Olewniczak                $acl['coordinator'] = BEZ_PERMISSION_CHANGE;
123*de02284cSSzymon Olewniczak            }
124*de02284cSSzymon Olewniczak
125*de02284cSSzymon Olewniczak            return $acl;
126*de02284cSSzymon Olewniczak        }
127*de02284cSSzymon Olewniczak
128*de02284cSSzymon Olewniczak        if ($thread->state === 'proposal' &&
129*de02284cSSzymon Olewniczak            $thread->original_poster === $this->model->user_nick) {
130*de02284cSSzymon Olewniczak            $acl['title'] = BEZ_PERMISSION_CHANGE;
131*de02284cSSzymon Olewniczak            $acl['content'] = BEZ_PERMISSION_CHANGE;
132*de02284cSSzymon Olewniczak            //$acl['type'] = BEZ_PERMISSION_CHANGE;
133*de02284cSSzymon Olewniczak        }
134*de02284cSSzymon Olewniczak
135*de02284cSSzymon Olewniczak        if ($thread->coordinator === $this->model->user_nick) {
136*de02284cSSzymon Olewniczak            $acl['title'] = BEZ_PERMISSION_CHANGE;
137*de02284cSSzymon Olewniczak            $acl['content'] = BEZ_PERMISSION_CHANGE;
138*de02284cSSzymon Olewniczak            //$acl['type'] = BEZ_PERMISSION_CHANGE;
139*de02284cSSzymon Olewniczak
140*de02284cSSzymon Olewniczak            //coordinator can change coordinator
141*de02284cSSzymon Olewniczak            $acl['coordinator'] = BEZ_PERMISSION_CHANGE;
142*de02284cSSzymon Olewniczak
143*de02284cSSzymon Olewniczak            $acl['state'] = BEZ_PERMISSION_CHANGE;
144*de02284cSSzymon Olewniczak            //$acl['opinion'] = BEZ_PERMISSION_CHANGE;
145*de02284cSSzymon Olewniczak        }
146*de02284cSSzymon Olewniczak
147*de02284cSSzymon Olewniczak        return $acl;
148*de02284cSSzymon Olewniczak    }
149*de02284cSSzymon Olewniczak
150*de02284cSSzymon Olewniczak    //if user can chante id => he can delete record
151*de02284cSSzymon Olewniczak    private function check_task($task) {
152*de02284cSSzymon Olewniczak        $acl = array(
153*de02284cSSzymon Olewniczak                'id'             => BEZ_PERMISSION_NONE,
154*de02284cSSzymon Olewniczak                'task'           => BEZ_PERMISSION_NONE,
155*de02284cSSzymon Olewniczak                'state'          => BEZ_PERMISSION_NONE,
156*de02284cSSzymon Olewniczak                'tasktype'       => BEZ_PERMISSION_NONE,
157*de02284cSSzymon Olewniczak                'executor'       => BEZ_PERMISSION_NONE,
158*de02284cSSzymon Olewniczak                'cost'           => BEZ_PERMISSION_NONE,
159*de02284cSSzymon Olewniczak                'reason'         => BEZ_PERMISSION_NONE,
160*de02284cSSzymon Olewniczak                'reporter'       => BEZ_PERMISSION_NONE,
161*de02284cSSzymon Olewniczak                'date'           => BEZ_PERMISSION_NONE,
162*de02284cSSzymon Olewniczak                'close_date'     => BEZ_PERMISSION_NONE,
163*de02284cSSzymon Olewniczak                'cause'          => BEZ_PERMISSION_NONE,
164*de02284cSSzymon Olewniczak                'plan_date'      => BEZ_PERMISSION_NONE,
165*de02284cSSzymon Olewniczak                'all_day_event'  => BEZ_PERMISSION_NONE,
166*de02284cSSzymon Olewniczak                'start_time'     => BEZ_PERMISSION_NONE,
167*de02284cSSzymon Olewniczak                'finish_time'    => BEZ_PERMISSION_NONE,
168*de02284cSSzymon Olewniczak                'issue'          => BEZ_PERMISSION_NONE,
169*de02284cSSzymon Olewniczak                'task_cache'     => BEZ_PERMISSION_NONE,
170*de02284cSSzymon Olewniczak                'reason_cache'   => BEZ_PERMISSION_NONE,
171*de02284cSSzymon Olewniczak                'subscribents'   => BEZ_PERMISSION_NONE
172*de02284cSSzymon Olewniczak        );
173*de02284cSSzymon Olewniczak
174*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_VIEWER) {
175*de02284cSSzymon Olewniczak            //user can display everythig
176*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
177*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_VIEW;
178*de02284cSSzymon Olewniczak            }, $acl);
179*de02284cSSzymon Olewniczak        }
180*de02284cSSzymon Olewniczak
181*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_ADMIN) {
182*de02284cSSzymon Olewniczak            //admin can edit everythig
183*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
184*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_CHANGE;
185*de02284cSSzymon Olewniczak            }, $acl);
186*de02284cSSzymon Olewniczak
187*de02284cSSzymon Olewniczak            return $acl;
188*de02284cSSzymon Olewniczak        }
189*de02284cSSzymon Olewniczak
190*de02284cSSzymon Olewniczak        //we create new task
191*de02284cSSzymon Olewniczak        if ($task->id === NULL) {
192*de02284cSSzymon Olewniczak
193*de02284cSSzymon Olewniczak            if ($task->coordinator === $this->model->user_nick ||
194*de02284cSSzymon Olewniczak               ($task->issue === '' && $this->level >= BEZ_AUTH_LEADER)) {
195*de02284cSSzymon Olewniczak                $acl['task'] = BEZ_PERMISSION_CHANGE;
196*de02284cSSzymon Olewniczak                $acl['tasktype'] = BEZ_PERMISSION_CHANGE;
197*de02284cSSzymon Olewniczak                $acl['executor'] = BEZ_PERMISSION_CHANGE;
198*de02284cSSzymon Olewniczak                $acl['cost'] = BEZ_PERMISSION_CHANGE;
199*de02284cSSzymon Olewniczak                $acl['plan_date'] = BEZ_PERMISSION_CHANGE;
200*de02284cSSzymon Olewniczak                $acl['all_day_event'] = BEZ_PERMISSION_CHANGE;
201*de02284cSSzymon Olewniczak                $acl['start_time'] = BEZ_PERMISSION_CHANGE;
202*de02284cSSzymon Olewniczak                $acl['finish_time'] = BEZ_PERMISSION_CHANGE;
203*de02284cSSzymon Olewniczak            }
204*de02284cSSzymon Olewniczak
205*de02284cSSzymon Olewniczak            //przypisujemy zadanie programowe samemu sobie
206*de02284cSSzymon Olewniczak            //no executor
207*de02284cSSzymon Olewniczak            if ($task->issue === '') {
208*de02284cSSzymon Olewniczak                $acl['task'] = BEZ_PERMISSION_CHANGE;
209*de02284cSSzymon Olewniczak                $acl['tasktype'] = BEZ_PERMISSION_CHANGE;
210*de02284cSSzymon Olewniczak                $acl['cost'] = BEZ_PERMISSION_CHANGE;
211*de02284cSSzymon Olewniczak                $acl['plan_date'] = BEZ_PERMISSION_CHANGE;
212*de02284cSSzymon Olewniczak                $acl['all_day_event'] = BEZ_PERMISSION_CHANGE;
213*de02284cSSzymon Olewniczak                $acl['start_time'] = BEZ_PERMISSION_CHANGE;
214*de02284cSSzymon Olewniczak                $acl['finish_time'] = BEZ_PERMISSION_CHANGE;
215*de02284cSSzymon Olewniczak            }
216*de02284cSSzymon Olewniczak
217*de02284cSSzymon Olewniczak            return $acl;
218*de02284cSSzymon Olewniczak        }
219*de02284cSSzymon Olewniczak
220*de02284cSSzymon Olewniczak        //user can change state
221*de02284cSSzymon Olewniczak        if ($task->executor === $this->model->user_nick) {
222*de02284cSSzymon Olewniczak            $acl['reason'] = BEZ_PERMISSION_CHANGE;
223*de02284cSSzymon Olewniczak            $acl['state'] = BEZ_PERMISSION_CHANGE;
224*de02284cSSzymon Olewniczak        }
225*de02284cSSzymon Olewniczak
226*de02284cSSzymon Olewniczak        //reporters can add subscribents to programme task
227*de02284cSSzymon Olewniczak        if ($task->reporter === $this->model->user_nick) {
228*de02284cSSzymon Olewniczak            $acl['subscribents'] = BEZ_PERMISSION_CHANGE;
229*de02284cSSzymon Olewniczak        }
230*de02284cSSzymon Olewniczak
231*de02284cSSzymon Olewniczak        if ($task->coordinator === $this->model->user_nick ||
232*de02284cSSzymon Olewniczak            ($task->issue === '' && $this->level >= BEZ_AUTH_LEADER)) {
233*de02284cSSzymon Olewniczak
234*de02284cSSzymon Olewniczak            $acl['reason'] = BEZ_PERMISSION_CHANGE;
235*de02284cSSzymon Olewniczak            $acl['state'] = BEZ_PERMISSION_CHANGE;
236*de02284cSSzymon Olewniczak
237*de02284cSSzymon Olewniczak            //we can chante cause
238*de02284cSSzymon Olewniczak            $acl['cause'] =  BEZ_PERMISSION_CHANGE;
239*de02284cSSzymon Olewniczak
240*de02284cSSzymon Olewniczak            $acl['task'] = BEZ_PERMISSION_CHANGE;
241*de02284cSSzymon Olewniczak            $acl['tasktype'] = BEZ_PERMISSION_CHANGE;
242*de02284cSSzymon Olewniczak            $acl['executor'] = BEZ_PERMISSION_CHANGE;
243*de02284cSSzymon Olewniczak            $acl['cost'] = BEZ_PERMISSION_CHANGE;
244*de02284cSSzymon Olewniczak            $acl['reason'] = BEZ_PERMISSION_CHANGE;
245*de02284cSSzymon Olewniczak            $acl['plan_date'] = BEZ_PERMISSION_CHANGE;
246*de02284cSSzymon Olewniczak            $acl['all_day_event'] = BEZ_PERMISSION_CHANGE;
247*de02284cSSzymon Olewniczak            $acl['start_time'] = BEZ_PERMISSION_CHANGE;
248*de02284cSSzymon Olewniczak            $acl['finish_time'] = BEZ_PERMISSION_CHANGE;
249*de02284cSSzymon Olewniczak
250*de02284cSSzymon Olewniczak
251*de02284cSSzymon Olewniczak            //leaders can add subscribents to programme tasks
252*de02284cSSzymon Olewniczak            $acl['subscribents'] = BEZ_PERMISSION_CHANGE;
253*de02284cSSzymon Olewniczak        }
254*de02284cSSzymon Olewniczak
255*de02284cSSzymon Olewniczak        if ($task->issue === '' &&
256*de02284cSSzymon Olewniczak            $task->reporter === $this->model->user_nick &&
257*de02284cSSzymon Olewniczak            $task->executor === $this->model->user_nick) {
258*de02284cSSzymon Olewniczak            $acl['reason'] = BEZ_PERMISSION_CHANGE;
259*de02284cSSzymon Olewniczak            $acl['state'] = BEZ_PERMISSION_CHANGE;
260*de02284cSSzymon Olewniczak
261*de02284cSSzymon Olewniczak            $acl['task'] = BEZ_PERMISSION_CHANGE;
262*de02284cSSzymon Olewniczak            $acl['tasktype'] = BEZ_PERMISSION_CHANGE;
263*de02284cSSzymon Olewniczak            //no executor
264*de02284cSSzymon Olewniczak            $acl['cost'] = BEZ_PERMISSION_CHANGE;
265*de02284cSSzymon Olewniczak            $acl['reason'] = BEZ_PERMISSION_CHANGE;
266*de02284cSSzymon Olewniczak            $acl['plan_date'] = BEZ_PERMISSION_CHANGE;
267*de02284cSSzymon Olewniczak            $acl['all_day_event'] = BEZ_PERMISSION_CHANGE;
268*de02284cSSzymon Olewniczak            $acl['start_time'] = BEZ_PERMISSION_CHANGE;
269*de02284cSSzymon Olewniczak            $acl['finish_time'] = BEZ_PERMISSION_CHANGE;
270*de02284cSSzymon Olewniczak        }
271*de02284cSSzymon Olewniczak
272*de02284cSSzymon Olewniczak
273*de02284cSSzymon Olewniczak        return $acl;
274*de02284cSSzymon Olewniczak
275*de02284cSSzymon Olewniczak    }
276*de02284cSSzymon Olewniczak
277*de02284cSSzymon Olewniczak    private function check_commcause($commcause) {
278*de02284cSSzymon Olewniczak        $acl = array(
279*de02284cSSzymon Olewniczak            'id'            => BEZ_PERMISSION_NONE,
280*de02284cSSzymon Olewniczak            'issue'         => BEZ_PERMISSION_NONE,
281*de02284cSSzymon Olewniczak            'datetime'      => BEZ_PERMISSION_NONE,
282*de02284cSSzymon Olewniczak            'reporter'      => BEZ_PERMISSION_NONE,
283*de02284cSSzymon Olewniczak            'type'          => BEZ_PERMISSION_NONE,
284*de02284cSSzymon Olewniczak            'content'       => BEZ_PERMISSION_NONE,
285*de02284cSSzymon Olewniczak            'content_cache'   => BEZ_PERMISSION_NONE
286*de02284cSSzymon Olewniczak        );
287*de02284cSSzymon Olewniczak
288*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_VIEWER) {
289*de02284cSSzymon Olewniczak            //user can display everythig
290*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
291*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_VIEW;
292*de02284cSSzymon Olewniczak            }, $acl);
293*de02284cSSzymon Olewniczak        }
294*de02284cSSzymon Olewniczak
295*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_ADMIN) {
296*de02284cSSzymon Olewniczak            //admin can edit everythig
297*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
298*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_CHANGE;
299*de02284cSSzymon Olewniczak            }, $acl);
300*de02284cSSzymon Olewniczak
301*de02284cSSzymon Olewniczak            return $acl;
302*de02284cSSzymon Olewniczak        }
303*de02284cSSzymon Olewniczak        //we create new commcause
304*de02284cSSzymon Olewniczak        if ($commcause->id === NULL) {
305*de02284cSSzymon Olewniczak            if ($this->level >= BEZ_USER) {
306*de02284cSSzymon Olewniczak                $acl['content'] = BEZ_PERMISSION_CHANGE;
307*de02284cSSzymon Olewniczak            }
308*de02284cSSzymon Olewniczak
309*de02284cSSzymon Olewniczak            if ($commcause->coordinator === $this->model->user_nick) {
310*de02284cSSzymon Olewniczak                $acl['type'] = BEZ_PERMISSION_CHANGE;
311*de02284cSSzymon Olewniczak                $acl['content'] = BEZ_PERMISSION_CHANGE;
312*de02284cSSzymon Olewniczak            }
313*de02284cSSzymon Olewniczak
314*de02284cSSzymon Olewniczak            return $acl;
315*de02284cSSzymon Olewniczak        }
316*de02284cSSzymon Olewniczak
317*de02284cSSzymon Olewniczak
318*de02284cSSzymon Olewniczak        if ($commcause->coordinator === $this->model->user_nick) {
319*de02284cSSzymon Olewniczak            $acl['type'] = BEZ_PERMISSION_CHANGE;
320*de02284cSSzymon Olewniczak            $acl['content'] = BEZ_PERMISSION_CHANGE;
321*de02284cSSzymon Olewniczak
322*de02284cSSzymon Olewniczak            //we can only delete records when there is no tasks subscribed to issue
323*de02284cSSzymon Olewniczak            if ($commcause->tasks_count === 0) {
324*de02284cSSzymon Olewniczak                 $acl['id'] = BEZ_PERMISSION_CHANGE;
325*de02284cSSzymon Olewniczak            }
326*de02284cSSzymon Olewniczak
327*de02284cSSzymon Olewniczak        }
328*de02284cSSzymon Olewniczak
329*de02284cSSzymon Olewniczak        //jeżeli ktoś zmieni typ z komentarza na przyczynę, tracimy możliwość edycji
330*de02284cSSzymon Olewniczak        if ($commcause->reporter === $this->model->user_nick &&
331*de02284cSSzymon Olewniczak            $commcause->type === '0') {
332*de02284cSSzymon Olewniczak            $acl['content'] = BEZ_PERMISSION_CHANGE;
333*de02284cSSzymon Olewniczak
334*de02284cSSzymon Olewniczak            //we can only delete records when there is no tasks subscribed to issue
335*de02284cSSzymon Olewniczak            if ($commcause->tasks_count === 0) {
336*de02284cSSzymon Olewniczak                 $acl['id'] = BEZ_PERMISSION_CHANGE;
337*de02284cSSzymon Olewniczak            }
338*de02284cSSzymon Olewniczak        }
339*de02284cSSzymon Olewniczak
340*de02284cSSzymon Olewniczak        return $acl;
341*de02284cSSzymon Olewniczak
342*de02284cSSzymon Olewniczak    }
343*de02284cSSzymon Olewniczak
344*de02284cSSzymon Olewniczak    private function static_label() {
345*de02284cSSzymon Olewniczak        $acl = array_fill_keys(Label::get_columns(), BEZ_PERMISSION_NONE);
346*de02284cSSzymon Olewniczak
347*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_USER) {
348*de02284cSSzymon Olewniczak            //user can display everythig
349*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
350*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_VIEW;
351*de02284cSSzymon Olewniczak            }, $acl);
352*de02284cSSzymon Olewniczak        }
353*de02284cSSzymon Olewniczak
354*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_ADMIN) {
355*de02284cSSzymon Olewniczak            //admin can edit everythig
356*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
357*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_CHANGE;
358*de02284cSSzymon Olewniczak            }, $acl);
359*de02284cSSzymon Olewniczak        }
360*de02284cSSzymon Olewniczak
361*de02284cSSzymon Olewniczak        return $acl;
362*de02284cSSzymon Olewniczak    }
363*de02284cSSzymon Olewniczak
364*de02284cSSzymon Olewniczak    private function check_label(Label $label) {
365*de02284cSSzymon Olewniczak        return $this->static_label();
366*de02284cSSzymon Olewniczak    }
367*de02284cSSzymon Olewniczak
368*de02284cSSzymon Olewniczak   private function check_tasktype($tasktype) {
369*de02284cSSzymon Olewniczak        $acl = array(
370*de02284cSSzymon Olewniczak            'id'            => BEZ_PERMISSION_NONE,
371*de02284cSSzymon Olewniczak            'pl'         => BEZ_PERMISSION_NONE,
372*de02284cSSzymon Olewniczak            'en'      => BEZ_PERMISSION_NONE
373*de02284cSSzymon Olewniczak        );
374*de02284cSSzymon Olewniczak
375*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_USER) {
376*de02284cSSzymon Olewniczak            //user can display everythig
377*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
378*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_VIEW;
379*de02284cSSzymon Olewniczak            }, $acl);
380*de02284cSSzymon Olewniczak        }
381*de02284cSSzymon Olewniczak
382*de02284cSSzymon Olewniczak        if ($this->level >= BEZ_AUTH_ADMIN) {
383*de02284cSSzymon Olewniczak            //admin can edit everythig
384*de02284cSSzymon Olewniczak            $acl = array_map(function($value) {
385*de02284cSSzymon Olewniczak                return BEZ_PERMISSION_CHANGE;
386*de02284cSSzymon Olewniczak            }, $acl);
387*de02284cSSzymon Olewniczak        }
388*de02284cSSzymon Olewniczak
389*de02284cSSzymon Olewniczak        return $acl;
390*de02284cSSzymon Olewniczak    }
391*de02284cSSzymon Olewniczak
392*de02284cSSzymon Olewniczak    /*returns array */
393*de02284cSSzymon Olewniczak    public function check(Entity $obj) {
394*de02284cSSzymon Olewniczak        $method = 'check_'.$obj->get_table_name();
395*de02284cSSzymon Olewniczak        if (!method_exists($this, $method)) {
396*de02284cSSzymon Olewniczak            throw new \Exception('no acl rules set for table: '.$obj->get_table_name());
397*de02284cSSzymon Olewniczak        }
398*de02284cSSzymon Olewniczak        return $this->$method($obj);
399*de02284cSSzymon Olewniczak    }
400*de02284cSSzymon Olewniczak
401*de02284cSSzymon Olewniczak    public function check_field(Entity $obj, $field) {
402*de02284cSSzymon Olewniczak        $acl = $this->check($obj);
403*de02284cSSzymon Olewniczak
404*de02284cSSzymon Olewniczak        if (isset($acl[$field])) {
405*de02284cSSzymon Olewniczak            return $acl[$field];
406*de02284cSSzymon Olewniczak        }
407*de02284cSSzymon Olewniczak        return BEZ_PERMISSION_UNKNOWN;
408*de02284cSSzymon Olewniczak    }
409*de02284cSSzymon Olewniczak
410*de02284cSSzymon Olewniczak    public function check_static($table) {
411*de02284cSSzymon Olewniczak        $method = 'static_'.$table;
412*de02284cSSzymon Olewniczak        if (!method_exists($this, $method)) {
413*de02284cSSzymon Olewniczak            throw new \Exception('no acl rules set for table: '.$table);
414*de02284cSSzymon Olewniczak        }
415*de02284cSSzymon Olewniczak        return $this->$method($table);
416*de02284cSSzymon Olewniczak    }
417*de02284cSSzymon Olewniczak
418*de02284cSSzymon Olewniczak    public function check_static_field($table, $field) {
419*de02284cSSzymon Olewniczak        $acl = $this->check_static($table);
420*de02284cSSzymon Olewniczak        return $acl[$field];
421*de02284cSSzymon Olewniczak    }
422*de02284cSSzymon Olewniczak
423*de02284cSSzymon Olewniczak
424*de02284cSSzymon Olewniczak    public function can_change(Entity $obj, $field) {
425*de02284cSSzymon Olewniczak        if ($this->check_field($obj, $field) < BEZ_PERMISSION_CHANGE) {
426*de02284cSSzymon Olewniczak            $table = $obj->get_table_name();
427*de02284cSSzymon Olewniczak            $id = $obj->id;
428*de02284cSSzymon Olewniczak            throw new PermissionDeniedException('user cannot change field "'.$field.'" in table "'.$table.', rowid: "'.$id.'"');
429*de02284cSSzymon Olewniczak        }
430*de02284cSSzymon Olewniczak    }
431*de02284cSSzymon Olewniczak}
432