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