xref: /plugin/bez/action/migration.php (revision 8529a37e653d1541bf2f86ce790406b573200b43)
1fe5d6d1eSSzymon Olewniczak<?php
2fe5d6d1eSSzymon Olewniczak/**
3fe5d6d1eSSzymon Olewniczak * DokuWiki Plugin bez (Action Component)
4fe5d6d1eSSzymon Olewniczak *
5fe5d6d1eSSzymon Olewniczak */
6fe5d6d1eSSzymon Olewniczak
7fe5d6d1eSSzymon Olewniczak// must be run within Dokuwiki
8fe5d6d1eSSzymon Olewniczak
9fe5d6d1eSSzymon Olewniczakif(!defined('DOKU_INC')) die();
10fe5d6d1eSSzymon Olewniczak
11fe5d6d1eSSzymon Olewniczak/**
12fe5d6d1eSSzymon Olewniczak * Class action_plugin_bez_migration
13fe5d6d1eSSzymon Olewniczak *
14fe5d6d1eSSzymon Olewniczak * Handle migrations that need more than just SQL
15fe5d6d1eSSzymon Olewniczak */
16fe5d6d1eSSzymon Olewniczakclass action_plugin_bez_migration extends DokuWiki_Action_Plugin {
17fe5d6d1eSSzymon Olewniczak    /**
18fe5d6d1eSSzymon Olewniczak     * @inheritDoc
19fe5d6d1eSSzymon Olewniczak     */
20fe5d6d1eSSzymon Olewniczak    public function register(Doku_Event_Handler $controller) {
21fe5d6d1eSSzymon Olewniczak        $controller->register_hook('PLUGIN_SQLITE_DATABASE_UPGRADE', 'BEFORE', $this, 'handle_migrations');
22fe5d6d1eSSzymon Olewniczak    }
23fe5d6d1eSSzymon Olewniczak
24fe5d6d1eSSzymon Olewniczak    /**
25fe5d6d1eSSzymon Olewniczak     * Call our custom migrations when defined
26fe5d6d1eSSzymon Olewniczak     *
27fe5d6d1eSSzymon Olewniczak     * @param Doku_Event $event
28fe5d6d1eSSzymon Olewniczak     * @param $param
29fe5d6d1eSSzymon Olewniczak     */
30fe5d6d1eSSzymon Olewniczak    public function handle_migrations(Doku_Event $event, $param) {
31fe5d6d1eSSzymon Olewniczak        if ($event->data['sqlite']->getAdapter()->getDbname() !== 'b3p') {
32fe5d6d1eSSzymon Olewniczak            return;
33fe5d6d1eSSzymon Olewniczak        }
34fe5d6d1eSSzymon Olewniczak        $to = $event->data['to'];
35fe5d6d1eSSzymon Olewniczak
36fe5d6d1eSSzymon Olewniczak        if(is_callable(array($this, "migration$to"))) {
37fe5d6d1eSSzymon Olewniczak            $event->preventDefault();
38fe5d6d1eSSzymon Olewniczak            $event->result = call_user_func(array($this, "migration$to"), $event->data);
39fe5d6d1eSSzymon Olewniczak        }
40fe5d6d1eSSzymon Olewniczak    }
41fe5d6d1eSSzymon Olewniczak
42fe5d6d1eSSzymon Olewniczak    /**
43fe5d6d1eSSzymon Olewniczak     * Executes Migration 1
44fe5d6d1eSSzymon Olewniczak     *
45fe5d6d1eSSzymon Olewniczak     * Add a latest column to all existing multi tables
46fe5d6d1eSSzymon Olewniczak     *
47fe5d6d1eSSzymon Olewniczak     * @param helper_plugin_sqlite $sqlite
48fe5d6d1eSSzymon Olewniczak     * @return bool
49fe5d6d1eSSzymon Olewniczak     */
50fe5d6d1eSSzymon Olewniczak    protected function migration1($data) {
51*8529a37eSSzymon Olewniczak        global $INFO;
52*8529a37eSSzymon Olewniczak
53fe5d6d1eSSzymon Olewniczak        $file = $data['file'];
54fe5d6d1eSSzymon Olewniczak        /** @var helper_plugin_sqlite $sqlite */
55fe5d6d1eSSzymon Olewniczak        $sqlite = $data['sqlite'];
56fe5d6d1eSSzymon Olewniczak
57fe5d6d1eSSzymon Olewniczak        $sql = file_get_contents($file);
58fe5d6d1eSSzymon Olewniczak        if ($sql === false) {
59fe5d6d1eSSzymon Olewniczak            throw new Exception('cannot open file '.$file);
60fe5d6d1eSSzymon Olewniczak        }
61fe5d6d1eSSzymon Olewniczak
62fe5d6d1eSSzymon Olewniczak        $matches = array();
63fe5d6d1eSSzymon Olewniczak        preg_match_all('/.*?(?(?=BEGIN)BEGIN.*?END)\s*;/is', $sql, $matches);
64fe5d6d1eSSzymon Olewniczak        $queries = $matches[0];
65fe5d6d1eSSzymon Olewniczak
66fe5d6d1eSSzymon Olewniczak        $db = $sqlite->getAdapter()->getDb();
67fe5d6d1eSSzymon Olewniczak
68fe5d6d1eSSzymon Olewniczak        $db->beginTransaction();
69fe5d6d1eSSzymon Olewniczak        foreach ($queries as $query) {
70fe5d6d1eSSzymon Olewniczak            $res = $db->query($query);
71fe5d6d1eSSzymon Olewniczak            if($res === false) {
72fe5d6d1eSSzymon Olewniczak                $err = $db->errorInfo();
73fe5d6d1eSSzymon Olewniczak                msg($err[0].' '.$err[1].' '.$err[2].':<br /><pre>'.hsc($sql).'</pre>', -1);
74fe5d6d1eSSzymon Olewniczak                $db->rollBack();
75fe5d6d1eSSzymon Olewniczak                return false;
76fe5d6d1eSSzymon Olewniczak            }
77fe5d6d1eSSzymon Olewniczak        }
78*8529a37eSSzymon Olewniczak
79*8529a37eSSzymon Olewniczak        //import from bez
80*8529a37eSSzymon Olewniczak        $bez = new \PDO('sqlite:' . DOKU_INC . 'data/meta/bez.sqlite3');
81*8529a37eSSzymon Olewniczak
82*8529a37eSSzymon Olewniczak        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
83*8529a37eSSzymon Olewniczak
84*8529a37eSSzymon Olewniczak        $stmt = $bez->query('SELECT * FROM issuetypes');
85*8529a37eSSzymon Olewniczak        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
86*8529a37eSSzymon Olewniczak            $sqlite->storeEntry('label', array('id' => $row['id'],
87*8529a37eSSzymon Olewniczak                                                            'name' => $row['pl'],
88*8529a37eSSzymon Olewniczak                                                            'added_by' => $INFO['client'],
89*8529a37eSSzymon Olewniczak                                                            'added_date' => date('c')));
90*8529a37eSSzymon Olewniczak        }
91*8529a37eSSzymon Olewniczak
92*8529a37eSSzymon Olewniczak        $stmt = $bez->query('SELECT * FROM tasktypes');
93*8529a37eSSzymon Olewniczak        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
94*8529a37eSSzymon Olewniczak            $sqlite->storeEntry('task_program', array('id' => $row['id'],
95*8529a37eSSzymon Olewniczak                                                             'name' => $row['pl'],
96*8529a37eSSzymon Olewniczak                                                             'added_by' => $INFO['client'],
97*8529a37eSSzymon Olewniczak                                                             'added_date' => date('c')));
98*8529a37eSSzymon Olewniczak        }
99*8529a37eSSzymon Olewniczak
100*8529a37eSSzymon Olewniczak        $stmt = $bez->query('SELECT *, (SELECT COUNT(*) FROM tasks
101*8529a37eSSzymon Olewniczak								WHERE tasks.cause = commcauses.id) AS task_count FROM commcauses');
102*8529a37eSSzymon Olewniczak        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
103*8529a37eSSzymon Olewniczak            if ($row['type'] == '0') {
104*8529a37eSSzymon Olewniczak                $type = 'comment';
105*8529a37eSSzymon Olewniczak            } elseif ($row['type'] == '1') {
106*8529a37eSSzymon Olewniczak                $type = 'cause_real';
107*8529a37eSSzymon Olewniczak            } elseif ($row['type'] == '2') {
108*8529a37eSSzymon Olewniczak                $type = 'cause_potential';
109*8529a37eSSzymon Olewniczak            }
110*8529a37eSSzymon Olewniczak            $sqlite->storeEntry('thread_comment',
111*8529a37eSSzymon Olewniczak                                       array('id' => $row['id'],
112*8529a37eSSzymon Olewniczak                                             'thread_id' => $row['issue'],
113*8529a37eSSzymon Olewniczak                                             'type' => $type,
114*8529a37eSSzymon Olewniczak                                             'author' => $row['reporter'],
115*8529a37eSSzymon Olewniczak                                             'create_date' => date('c', strtotime($row['datetime'])),
116*8529a37eSSzymon Olewniczak                                             'last_modification_date' => date('c', strtotime($row['datetime'])),
117*8529a37eSSzymon Olewniczak                                             'content' => $row['content'],
118*8529a37eSSzymon Olewniczak                                             'content_html' => $row['content_cache'],
119*8529a37eSSzymon Olewniczak                                             'task_count' => $row['task_count']));
120*8529a37eSSzymon Olewniczak        }
121*8529a37eSSzymon Olewniczak
122*8529a37eSSzymon Olewniczak        $stmt = $bez->query('SELECT tasks.*, commcauses.type AS cause_type
123*8529a37eSSzymon Olewniczak                                          FROM tasks
124*8529a37eSSzymon Olewniczak                                          LEFT JOIN commcauses ON tasks.cause = commcauses.id');
125*8529a37eSSzymon Olewniczak        //thread_id => array('user_id' => 'user_id')
126*8529a37eSSzymon Olewniczak        $task_assignee = array();
127*8529a37eSSzymon Olewniczak        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
128*8529a37eSSzymon Olewniczak            if ($row['close_date'] != '') {
129*8529a37eSSzymon Olewniczak                $last_mod = date('c', (int) $row['close_date']);
130*8529a37eSSzymon Olewniczak            } else {
131*8529a37eSSzymon Olewniczak                $last_mod = date('c', (int) $row['date']);
132*8529a37eSSzymon Olewniczak            }
133*8529a37eSSzymon Olewniczak
134*8529a37eSSzymon Olewniczak            $data =  array('id' => $row['id'],
135*8529a37eSSzymon Olewniczak                           'original_poster' => $row['reporter'],
136*8529a37eSSzymon Olewniczak                           'assignee' => $row['executor'],
137*8529a37eSSzymon Olewniczak                           'create_date' => date('c', (int) $row['date']),
138*8529a37eSSzymon Olewniczak                           'last_activity_date' => $last_mod,
139*8529a37eSSzymon Olewniczak                           'last_modification_date' => $last_mod,
140*8529a37eSSzymon Olewniczak                           'plan_date' => $row['plan_date'],
141*8529a37eSSzymon Olewniczak                           'all_day_event' => $row['all_day_event'],
142*8529a37eSSzymon Olewniczak                           'start_time' => $row['start_time'],
143*8529a37eSSzymon Olewniczak                           'finish_time' => $row['finish_time'],
144*8529a37eSSzymon Olewniczak                           'content' => $row['task'],
145*8529a37eSSzymon Olewniczak                           'content_html' => $row['task_cache'],
146*8529a37eSSzymon Olewniczak                           'thread_id' => $row['issue'],
147*8529a37eSSzymon Olewniczak                           'thread_comment_id' => $row['cause'],
148*8529a37eSSzymon Olewniczak                           'task_program_id' => $row['tasktype']
149*8529a37eSSzymon Olewniczak            );
150*8529a37eSSzymon Olewniczak
151*8529a37eSSzymon Olewniczak            if ($data['thread_id'] != '') {
152*8529a37eSSzymon Olewniczak                if (!is_array($task_assignee[$data['thread_id']])) {
153*8529a37eSSzymon Olewniczak                    $task_assignee[$data['thread_id']] = array();
154*8529a37eSSzymon Olewniczak                }
155*8529a37eSSzymon Olewniczak                $task_assignee[$data['thread_id']][$row['executor']] = $row['executor'];
156*8529a37eSSzymon Olewniczak            }
157*8529a37eSSzymon Olewniczak
158*8529a37eSSzymon Olewniczak            if ($row['cost'] != '0') {
159*8529a37eSSzymon Olewniczak                $data['cost'] = $row['cost'];
160*8529a37eSSzymon Olewniczak            }
161*8529a37eSSzymon Olewniczak
162*8529a37eSSzymon Olewniczak            if ($row['issue'] == '') {
163*8529a37eSSzymon Olewniczak                $data['type'] = 'program';
164*8529a37eSSzymon Olewniczak            } elseif ($row['cause'] == '') {
165*8529a37eSSzymon Olewniczak                $data['type'] = 'correction';
166*8529a37eSSzymon Olewniczak            } elseif ($row['cause_type'] == '1') {
167*8529a37eSSzymon Olewniczak                $data['type'] = 'corrective';
168*8529a37eSSzymon Olewniczak            } else {
169*8529a37eSSzymon Olewniczak                $data['type'] = 'preventive';
170*8529a37eSSzymon Olewniczak            }
171*8529a37eSSzymon Olewniczak
172*8529a37eSSzymon Olewniczak            if ($row['state'] == '0') {
173*8529a37eSSzymon Olewniczak                $data['state'] = 'opened';
174*8529a37eSSzymon Olewniczak            } elseif ($row['state'] == '1' || $row['state'] == '2') {
175*8529a37eSSzymon Olewniczak                $data['state'] = 'done';
176*8529a37eSSzymon Olewniczak                $data['closed_by'] = $row['executor'];
177*8529a37eSSzymon Olewniczak                $data['close_date'] = date('c', (int) $row['close_date']);
178*8529a37eSSzymon Olewniczak
179*8529a37eSSzymon Olewniczak                if ($row['reason'] != '') {
180*8529a37eSSzymon Olewniczak                    $sqlite->storeEntry('task_comment',
181*8529a37eSSzymon Olewniczak                                               array('task_id' => $row['id'],
182*8529a37eSSzymon Olewniczak                                                     'author' => $row['executor'],
183*8529a37eSSzymon Olewniczak                                                     'create_date' => $data['close_date'],
184*8529a37eSSzymon Olewniczak                                                     'last_modification_date' => $data['close_date'],
185*8529a37eSSzymon Olewniczak                                                     'content' => $row['reason'],
186*8529a37eSSzymon Olewniczak                                                     'content_html' => $row['reason_cache']));
187*8529a37eSSzymon Olewniczak                }
188*8529a37eSSzymon Olewniczak            }
189*8529a37eSSzymon Olewniczak
190*8529a37eSSzymon Olewniczak            //user_id => array()
191*8529a37eSSzymon Olewniczak            $participants = array();
192*8529a37eSSzymon Olewniczak            $subscribents = explode(',', $row['subscribents']);
193*8529a37eSSzymon Olewniczak            foreach ($subscribents as $user_id) {
194*8529a37eSSzymon Olewniczak                $participants[$user_id] = array('user_id' => $user_id, 'subscribent' => '1');
195*8529a37eSSzymon Olewniczak            }
196*8529a37eSSzymon Olewniczak
197*8529a37eSSzymon Olewniczak            $op = $data['original_poster'];
198*8529a37eSSzymon Olewniczak            if (!isset($participants[$op])) {
199*8529a37eSSzymon Olewniczak                $participants[$op] = array('user_id' => $op, 'original_poster' => '1');
200*8529a37eSSzymon Olewniczak            } else {
201*8529a37eSSzymon Olewniczak                $participants[$op]['original_poster'] = '1';
202*8529a37eSSzymon Olewniczak            }
203*8529a37eSSzymon Olewniczak
204*8529a37eSSzymon Olewniczak            $as = $data['assignee'];
205*8529a37eSSzymon Olewniczak            if (!isset($participants[$as])) {
206*8529a37eSSzymon Olewniczak                $participants[$as] = array('user_id' => $as, 'assignee' => '1');
207*8529a37eSSzymon Olewniczak            } else {
208*8529a37eSSzymon Olewniczak                $participants[$as]['assignee'] = '1';
209*8529a37eSSzymon Olewniczak            }
210*8529a37eSSzymon Olewniczak
211*8529a37eSSzymon Olewniczak            foreach($participants as $part) {
212*8529a37eSSzymon Olewniczak                $part['task_id'] = $row['id'];
213*8529a37eSSzymon Olewniczak                $part['added_by'] = $INFO['client'];
214*8529a37eSSzymon Olewniczak                $part['added_date'] = date('c');
215*8529a37eSSzymon Olewniczak
216*8529a37eSSzymon Olewniczak                $res = $sqlite->storeEntry('task_participant', $part);
217*8529a37eSSzymon Olewniczak                if ($res === false) {
218*8529a37eSSzymon Olewniczak                    throw new Exception($db->errorInfo());
219*8529a37eSSzymon Olewniczak                }
220*8529a37eSSzymon Olewniczak            }
221*8529a37eSSzymon Olewniczak
222*8529a37eSSzymon Olewniczak            $sqlite->storeEntry('task', $data);
223*8529a37eSSzymon Olewniczak        }
224*8529a37eSSzymon Olewniczak
225*8529a37eSSzymon Olewniczak
226*8529a37eSSzymon Olewniczak
227*8529a37eSSzymon Olewniczak        $stmt = $bez->query('SELECT *,
228*8529a37eSSzymon Olewniczak                                (SELECT COUNT(*) FROM tasks
229*8529a37eSSzymon Olewniczak								WHERE tasks.issue = issues.id) AS task_count,
230*8529a37eSSzymon Olewniczak								(SELECT COUNT(*) FROM tasks
231*8529a37eSSzymon Olewniczak								WHERE tasks.issue = issues.id AND tasks.state != 0) AS task_closed_count,
232*8529a37eSSzymon Olewniczak								(SELECT SUM(cost) FROM tasks
233*8529a37eSSzymon Olewniczak								WHERE tasks.issue = issues.id) AS task_sum_cost
234*8529a37eSSzymon Olewniczak								FROM issues');
235*8529a37eSSzymon Olewniczak
236*8529a37eSSzymon Olewniczak        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
237*8529a37eSSzymon Olewniczak
238*8529a37eSSzymon Olewniczak            $data =  array('id' => $row['id'],
239*8529a37eSSzymon Olewniczak                           'original_poster' => $row['reporter'],
240*8529a37eSSzymon Olewniczak                           'coordinator' => $row['coordinator'],
241*8529a37eSSzymon Olewniczak                           'create_date' => date('c', (int) $row['date']),
242*8529a37eSSzymon Olewniczak                           'last_activity_date' => date('c', strtotime($row['last_activity'])),
243*8529a37eSSzymon Olewniczak                           'last_modification_date' => date('c', (int) $row['last_mod']),
244*8529a37eSSzymon Olewniczak                           'title' => $row['title'],
245*8529a37eSSzymon Olewniczak                           'content' => $row['description'],
246*8529a37eSSzymon Olewniczak                           'content_html' => $row['description_cache'],
247*8529a37eSSzymon Olewniczak                           'task_count' => $row['task_count'],
248*8529a37eSSzymon Olewniczak                           'task_count_closed' => $row['task_closed_count']
249*8529a37eSSzymon Olewniczak            );
250*8529a37eSSzymon Olewniczak
251*8529a37eSSzymon Olewniczak            if ($row['task_sum_cost'] != '0') {
252*8529a37eSSzymon Olewniczak                $data['task_sum_cost'] = $row['task_sum_cost'];
253*8529a37eSSzymon Olewniczak            }
254*8529a37eSSzymon Olewniczak
255*8529a37eSSzymon Olewniczak            if ($row['coordinator'] == '') {
256*8529a37eSSzymon Olewniczak                $data['state'] = 'proposal';
257*8529a37eSSzymon Olewniczak            } elseif ($row['state'] == '1') {
258*8529a37eSSzymon Olewniczak                $data['closed_by'] = $row['coordinator'];
259*8529a37eSSzymon Olewniczak                $data['state'] = 'closed';
260*8529a37eSSzymon Olewniczak                $data['close_date'] = $data['last_modification_date'];
261*8529a37eSSzymon Olewniczak
262*8529a37eSSzymon Olewniczak                $sqlite->storeEntry('thread_comment',
263*8529a37eSSzymon Olewniczak                                           array('thread_id' => $row['id'],
264*8529a37eSSzymon Olewniczak                                                 'type' => 'comment',
265*8529a37eSSzymon Olewniczak                                                 'author' => $row['coordinator'],
266*8529a37eSSzymon Olewniczak                                                 'create_date' => $data['close_date'],
267*8529a37eSSzymon Olewniczak                                                 'last_modification_date' => $data['close_date'],
268*8529a37eSSzymon Olewniczak                                                 'content' => $row['opinion'],
269*8529a37eSSzymon Olewniczak                                                 'content_html' => $row['opinion_cache']));
270*8529a37eSSzymon Olewniczak
271*8529a37eSSzymon Olewniczak
272*8529a37eSSzymon Olewniczak            } elseif ($row['state'] == '2') {
273*8529a37eSSzymon Olewniczak                $data['closed_by'] = $row['coordinator'];
274*8529a37eSSzymon Olewniczak                $data['state'] = 'rejected';
275*8529a37eSSzymon Olewniczak                $data['close_date'] = $data['last_modification_date'];
276*8529a37eSSzymon Olewniczak
277*8529a37eSSzymon Olewniczak                if ($row['opinion'] != '') {
278*8529a37eSSzymon Olewniczak                    $res = $sqlite->storeEntry('thread_comment',
279*8529a37eSSzymon Olewniczak                                               array('thread_id' => $row['id'],
280*8529a37eSSzymon Olewniczak                                                     'type' => 'comment',
281*8529a37eSSzymon Olewniczak                                                     'author' => $row['coordinator'],
282*8529a37eSSzymon Olewniczak                                                     'create_date' => $data['close_date'],
283*8529a37eSSzymon Olewniczak                                                     'last_modification_date' => $data['close_date'],
284*8529a37eSSzymon Olewniczak                                                     'content' => $row['opinion'],
285*8529a37eSSzymon Olewniczak                                                     'content_html' => $row['opinion_cache']));
286*8529a37eSSzymon Olewniczak                    if ($res === false) {
287*8529a37eSSzymon Olewniczak                        throw new Exception($db->errorInfo());
288*8529a37eSSzymon Olewniczak                    }
289*8529a37eSSzymon Olewniczak                }
290*8529a37eSSzymon Olewniczak
291*8529a37eSSzymon Olewniczak            } elseif ($row['task_count'] == $row['task_closed_count']) {
292*8529a37eSSzymon Olewniczak                $data['state'] = 'done';
293*8529a37eSSzymon Olewniczak            } else {
294*8529a37eSSzymon Olewniczak                $data['state'] = 'opened';
295*8529a37eSSzymon Olewniczak            }
296*8529a37eSSzymon Olewniczak
297*8529a37eSSzymon Olewniczak            $sqlite->storeEntry('thread', $data);
298*8529a37eSSzymon Olewniczak
299*8529a37eSSzymon Olewniczak            $sqlite->storeEntry('thread_label',
300*8529a37eSSzymon Olewniczak                                       array('thread_id' => $row['id'],
301*8529a37eSSzymon Olewniczak                                             'label_id' => $row['type']));
302*8529a37eSSzymon Olewniczak
303*8529a37eSSzymon Olewniczak            //participants
304*8529a37eSSzymon Olewniczak            //user_id => array()
305*8529a37eSSzymon Olewniczak            $participants = array();
306*8529a37eSSzymon Olewniczak            $org_participants = array_filter(explode(',', $row['participants']));
307*8529a37eSSzymon Olewniczak            foreach ($org_participants as $user_id) {
308*8529a37eSSzymon Olewniczak                $participants[$user_id] = array('user_id' => $user_id);
309*8529a37eSSzymon Olewniczak            }
310*8529a37eSSzymon Olewniczak
311*8529a37eSSzymon Olewniczak            $subscribents = array_filter(explode(',', $row['subscribents']));
312*8529a37eSSzymon Olewniczak            foreach ($subscribents as $user_id) {
313*8529a37eSSzymon Olewniczak                if (!isset($participants[$user_id])) {
314*8529a37eSSzymon Olewniczak                    $participants[$user_id] = array('user_id' => $user_id);
315*8529a37eSSzymon Olewniczak                }
316*8529a37eSSzymon Olewniczak                $participants[$user_id]['subscribent'] = '1';
317*8529a37eSSzymon Olewniczak            }
318*8529a37eSSzymon Olewniczak
319*8529a37eSSzymon Olewniczak            if (is_array($task_assignee[$row['id']])) foreach ($task_assignee[$row['id']] as $user_id) {
320*8529a37eSSzymon Olewniczak                if (!isset($participants[$user_id])) {
321*8529a37eSSzymon Olewniczak                    $participants[$user_id] = array('user_id' => $user_id);
322*8529a37eSSzymon Olewniczak                }
323*8529a37eSSzymon Olewniczak                $participants[$user_id]['task_assignee'] = '1';
324*8529a37eSSzymon Olewniczak            }
325*8529a37eSSzymon Olewniczak
326*8529a37eSSzymon Olewniczak            $op = $data['original_poster'];
327*8529a37eSSzymon Olewniczak            if (!isset($participants[$op])) {
328*8529a37eSSzymon Olewniczak                $participants[$op] = array('user_id' => $op, 'original_poster' => '1');
329*8529a37eSSzymon Olewniczak            } else {
330*8529a37eSSzymon Olewniczak                $participants[$op]['original_poster'] = '1';
331*8529a37eSSzymon Olewniczak            }
332*8529a37eSSzymon Olewniczak
333*8529a37eSSzymon Olewniczak            $cor = $data['coordinator'];
334*8529a37eSSzymon Olewniczak            if (!isset($participants[$cor])) {
335*8529a37eSSzymon Olewniczak                $participants[$cor] = array('user_id' => $cor, 'coordinator' => '1');
336*8529a37eSSzymon Olewniczak            } else {
337*8529a37eSSzymon Olewniczak                $participants[$cor]['coordinator'] = '1';
338*8529a37eSSzymon Olewniczak            }
339*8529a37eSSzymon Olewniczak
340*8529a37eSSzymon Olewniczak            foreach($participants as $part) {
341*8529a37eSSzymon Olewniczak                $part['thread_id'] = $row['id'];
342*8529a37eSSzymon Olewniczak                $part['added_by'] = $INFO['client'];
343*8529a37eSSzymon Olewniczak                $part['added_date'] = date('c');
344*8529a37eSSzymon Olewniczak
345*8529a37eSSzymon Olewniczak                $sqlite->storeEntry('thread_participant', $part);
346*8529a37eSSzymon Olewniczak            }
347*8529a37eSSzymon Olewniczak
348*8529a37eSSzymon Olewniczak        }
349*8529a37eSSzymon Olewniczak
350fe5d6d1eSSzymon Olewniczak        $db->commit();
351fe5d6d1eSSzymon Olewniczak
352fe5d6d1eSSzymon Olewniczak        return true;
353fe5d6d1eSSzymon Olewniczak    }
354fe5d6d1eSSzymon Olewniczak
355fe5d6d1eSSzymon Olewniczak}
356