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'); 22*d3caa25dSSzymon Olewniczak// $controller->register_hook('PLUGIN_SQLITE_DATABASE_UPGRADE', 'AFTER', $this, 'handle_migrations_after'); 23fe5d6d1eSSzymon Olewniczak } 24fe5d6d1eSSzymon Olewniczak 25fe5d6d1eSSzymon Olewniczak /** 26fe5d6d1eSSzymon Olewniczak * Call our custom migrations when defined 27fe5d6d1eSSzymon Olewniczak * 28fe5d6d1eSSzymon Olewniczak * @param Doku_Event $event 29fe5d6d1eSSzymon Olewniczak * @param $param 30fe5d6d1eSSzymon Olewniczak */ 31fe5d6d1eSSzymon Olewniczak public function handle_migrations(Doku_Event $event, $param) { 32*d3caa25dSSzymon Olewniczak if ($event->data['sqlite']->getAdapter()->getDbName() !== 'b3p') { 33fe5d6d1eSSzymon Olewniczak return; 34fe5d6d1eSSzymon Olewniczak } 35fe5d6d1eSSzymon Olewniczak $to = $event->data['to']; 36fe5d6d1eSSzymon Olewniczak 37fe5d6d1eSSzymon Olewniczak if(is_callable(array($this, "migration$to"))) { 38fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 39fe5d6d1eSSzymon Olewniczak $event->result = call_user_func(array($this, "migration$to"), $event->data); 40fe5d6d1eSSzymon Olewniczak } 41fe5d6d1eSSzymon Olewniczak } 42fe5d6d1eSSzymon Olewniczak 43*d3caa25dSSzymon Olewniczak /** 44*d3caa25dSSzymon Olewniczak * Call our custom migrations when defined 45*d3caa25dSSzymon Olewniczak * 46*d3caa25dSSzymon Olewniczak * @param Doku_Event $event 47*d3caa25dSSzymon Olewniczak * @param $param 48*d3caa25dSSzymon Olewniczak */ 49*d3caa25dSSzymon Olewniczak public function handle_migrations_after(Doku_Event $event, $param) { 50*d3caa25dSSzymon Olewniczak if ($event->data['sqlite']->getAdapter()->getDbName() !== 'b3p') { 51*d3caa25dSSzymon Olewniczak return; 52*d3caa25dSSzymon Olewniczak } 53*d3caa25dSSzymon Olewniczak $to = $event->data['to']; 54*d3caa25dSSzymon Olewniczak 55*d3caa25dSSzymon Olewniczak if(is_callable(array($this, "migration$to"))) { 56*d3caa25dSSzymon Olewniczak $event->result = call_user_func(array($this, "migration$to"), $event->data); 57*d3caa25dSSzymon Olewniczak } 58*d3caa25dSSzymon Olewniczak } 59*d3caa25dSSzymon Olewniczak 605a4034efSSzymon Olewniczak protected function migration12($data) { 615a4034efSSzymon Olewniczak global $INFO; 625a4034efSSzymon Olewniczak 635a4034efSSzymon Olewniczak $file = $data['file']; 645a4034efSSzymon Olewniczak /** @var helper_plugin_sqlite $sqlite */ 655a4034efSSzymon Olewniczak $sqlite = $data['sqlite']; 665a4034efSSzymon Olewniczak 675a4034efSSzymon Olewniczak $sql = file_get_contents($file); 685a4034efSSzymon Olewniczak if($sql === false) { 695a4034efSSzymon Olewniczak throw new Exception('cannot open file ' . $file); 705a4034efSSzymon Olewniczak } 715a4034efSSzymon Olewniczak 725a4034efSSzymon Olewniczak $matches = array(); 735a4034efSSzymon Olewniczak preg_match_all('/.*?(?(?=BEGIN)BEGIN.*?END)\s*;/is', $sql, $matches); 745a4034efSSzymon Olewniczak $queries = $matches[0]; 755a4034efSSzymon Olewniczak 76*d3caa25dSSzymon Olewniczak $db = $sqlite->getAdapter()->getPdo(); 775a4034efSSzymon Olewniczak 78*d3caa25dSSzymon Olewniczak// $db->beginTransaction(); // translation already started 795a4034efSSzymon Olewniczak foreach($queries as $query) { 805a4034efSSzymon Olewniczak $res = $db->query($query); 815a4034efSSzymon Olewniczak if($res === false) { 825a4034efSSzymon Olewniczak $err = $db->errorInfo(); 835a4034efSSzymon Olewniczak msg($err[0] . ' ' . $err[1] . ' ' . $err[2] . ':<br /><pre>' . hsc($query) . '</pre>', -1); 845a4034efSSzymon Olewniczak $db->rollBack(); 855a4034efSSzymon Olewniczak return false; 865a4034efSSzymon Olewniczak } 875a4034efSSzymon Olewniczak } 88*d3caa25dSSzymon Olewniczak// $db->commit(); // commit will be done inside SQLiteDB 895a4034efSSzymon Olewniczak 905a4034efSSzymon Olewniczak return true; 915a4034efSSzymon Olewniczak } 925a4034efSSzymon Olewniczak 936f380773SSzymon Olewniczak protected function migration3($data) { 946f380773SSzymon Olewniczak global $INFO; 956f380773SSzymon Olewniczak 966f380773SSzymon Olewniczak $file = $data['file']; 976f380773SSzymon Olewniczak /** @var helper_plugin_sqlite $sqlite */ 986f380773SSzymon Olewniczak $sqlite = $data['sqlite']; 996f380773SSzymon Olewniczak 1006f380773SSzymon Olewniczak $sql = file_get_contents($file); 1016f380773SSzymon Olewniczak if($sql === false) { 1026f380773SSzymon Olewniczak throw new Exception('cannot open file ' . $file); 1036f380773SSzymon Olewniczak } 1046f380773SSzymon Olewniczak 1056f380773SSzymon Olewniczak $matches = array(); 1066f380773SSzymon Olewniczak preg_match_all('/.*?(?(?=BEGIN)BEGIN.*?END)\s*;/is', $sql, $matches); 1076f380773SSzymon Olewniczak $queries = $matches[0]; 1086f380773SSzymon Olewniczak 109*d3caa25dSSzymon Olewniczak $db = $sqlite->getAdapter()->getPdo(); 1106f380773SSzymon Olewniczak 111*d3caa25dSSzymon Olewniczak// $db->beginTransaction(); // translation already started 1126f380773SSzymon Olewniczak foreach($queries as $query) { 1136f380773SSzymon Olewniczak $res = $db->query($query); 1146f380773SSzymon Olewniczak if($res === false) { 1156f380773SSzymon Olewniczak $err = $db->errorInfo(); 1166f380773SSzymon Olewniczak msg($err[0] . ' ' . $err[1] . ' ' . $err[2] . ':<br /><pre>' . hsc($query) . '</pre>', -1); 1176f380773SSzymon Olewniczak $db->rollBack(); 1186f380773SSzymon Olewniczak return false; 1196f380773SSzymon Olewniczak } 1206f380773SSzymon Olewniczak } 121*d3caa25dSSzymon Olewniczak// $db->commit(); // commit will be done inside SQLiteDB 1226f380773SSzymon Olewniczak 1236f380773SSzymon Olewniczak return true; 1246f380773SSzymon Olewniczak } 1256f380773SSzymon Olewniczak 126fe5d6d1eSSzymon Olewniczak /** 127fe5d6d1eSSzymon Olewniczak * Executes Migration 1 128fe5d6d1eSSzymon Olewniczak * 129fe5d6d1eSSzymon Olewniczak * Add a latest column to all existing multi tables 130fe5d6d1eSSzymon Olewniczak * 131fe5d6d1eSSzymon Olewniczak * @param helper_plugin_sqlite $sqlite 132fe5d6d1eSSzymon Olewniczak * @return bool 133fe5d6d1eSSzymon Olewniczak */ 134fe5d6d1eSSzymon Olewniczak protected function migration1($data) { 1358529a37eSSzymon Olewniczak global $INFO; 1368529a37eSSzymon Olewniczak 137fe5d6d1eSSzymon Olewniczak $file = $data['file']; 138fe5d6d1eSSzymon Olewniczak /** @var helper_plugin_sqlite $sqlite */ 139fe5d6d1eSSzymon Olewniczak $sqlite = $data['sqlite']; 140fe5d6d1eSSzymon Olewniczak 141fe5d6d1eSSzymon Olewniczak $sql = file_get_contents($file); 142fe5d6d1eSSzymon Olewniczak if ($sql === false) { 143fe5d6d1eSSzymon Olewniczak throw new Exception('cannot open file '.$file); 144fe5d6d1eSSzymon Olewniczak } 145fe5d6d1eSSzymon Olewniczak 146fe5d6d1eSSzymon Olewniczak $matches = array(); 147fe5d6d1eSSzymon Olewniczak preg_match_all('/.*?(?(?=BEGIN)BEGIN.*?END)\s*;/is', $sql, $matches); 148fe5d6d1eSSzymon Olewniczak $queries = $matches[0]; 149fe5d6d1eSSzymon Olewniczak 150*d3caa25dSSzymon Olewniczak $db = $sqlite->getAdapter()->getPdo(); 151fe5d6d1eSSzymon Olewniczak 152*d3caa25dSSzymon Olewniczak// $db->beginTransaction(); // translation already started 153fe5d6d1eSSzymon Olewniczak foreach ($queries as $query) { 154fe5d6d1eSSzymon Olewniczak $res = $db->query($query); 155fe5d6d1eSSzymon Olewniczak if($res === false) { 156fe5d6d1eSSzymon Olewniczak $err = $db->errorInfo(); 1576df1cdc6SSzymon Olewniczak msg($err[0].' '.$err[1].' '.$err[2].':<br /><pre>'.hsc($query).'</pre>', -1); 158fe5d6d1eSSzymon Olewniczak $db->rollBack(); 159fe5d6d1eSSzymon Olewniczak return false; 160fe5d6d1eSSzymon Olewniczak } 161fe5d6d1eSSzymon Olewniczak } 1628529a37eSSzymon Olewniczak 1636df1cdc6SSzymon Olewniczak $bez_file = DOKU_INC . 'data/meta/bez.sqlite3'; 1646df1cdc6SSzymon Olewniczak if (!file_exists($bez_file)) { 165*d3caa25dSSzymon Olewniczak// $db->commit(); // commit will be done inside SQLiteDB 1666df1cdc6SSzymon Olewniczak return true; 1676df1cdc6SSzymon Olewniczak } 1686df1cdc6SSzymon Olewniczak 1698529a37eSSzymon Olewniczak //import from bez 1706df1cdc6SSzymon Olewniczak $bez = new \PDO('sqlite:' . $bez_file); 1718529a37eSSzymon Olewniczak 1728529a37eSSzymon Olewniczak $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 1738529a37eSSzymon Olewniczak 1748529a37eSSzymon Olewniczak $stmt = $bez->query('SELECT * FROM issuetypes'); 1758529a37eSSzymon Olewniczak while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { 1768529a37eSSzymon Olewniczak $sqlite->storeEntry('label', array('id' => $row['id'], 1778529a37eSSzymon Olewniczak 'name' => $row['pl'], 1788529a37eSSzymon Olewniczak 'added_by' => $INFO['client'], 1798529a37eSSzymon Olewniczak 'added_date' => date('c'))); 1808529a37eSSzymon Olewniczak } 1818529a37eSSzymon Olewniczak 1828529a37eSSzymon Olewniczak $stmt = $bez->query('SELECT * FROM tasktypes'); 1838529a37eSSzymon Olewniczak while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { 1848529a37eSSzymon Olewniczak $sqlite->storeEntry('task_program', array('id' => $row['id'], 1858529a37eSSzymon Olewniczak 'name' => $row['pl'], 1868529a37eSSzymon Olewniczak 'added_by' => $INFO['client'], 1878529a37eSSzymon Olewniczak 'added_date' => date('c'))); 1888529a37eSSzymon Olewniczak } 1898529a37eSSzymon Olewniczak 1908529a37eSSzymon Olewniczak $stmt = $bez->query('SELECT *, (SELECT COUNT(*) FROM tasks 1918529a37eSSzymon Olewniczak WHERE tasks.cause = commcauses.id) AS task_count FROM commcauses'); 1928529a37eSSzymon Olewniczak while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { 1938529a37eSSzymon Olewniczak if ($row['type'] == '0') { 1948529a37eSSzymon Olewniczak $type = 'comment'; 1958529a37eSSzymon Olewniczak } elseif ($row['type'] == '1') { 1968529a37eSSzymon Olewniczak $type = 'cause_real'; 1978529a37eSSzymon Olewniczak } elseif ($row['type'] == '2') { 1988529a37eSSzymon Olewniczak $type = 'cause_potential'; 1998529a37eSSzymon Olewniczak } 2008529a37eSSzymon Olewniczak $sqlite->storeEntry('thread_comment', 2018529a37eSSzymon Olewniczak array('id' => $row['id'], 2028529a37eSSzymon Olewniczak 'thread_id' => $row['issue'], 2038529a37eSSzymon Olewniczak 'type' => $type, 2048529a37eSSzymon Olewniczak 'author' => $row['reporter'], 2058529a37eSSzymon Olewniczak 'create_date' => date('c', strtotime($row['datetime'])), 2068529a37eSSzymon Olewniczak 'last_modification_date' => date('c', strtotime($row['datetime'])), 2078529a37eSSzymon Olewniczak 'content' => $row['content'], 2088529a37eSSzymon Olewniczak 'content_html' => $row['content_cache'], 2098529a37eSSzymon Olewniczak 'task_count' => $row['task_count'])); 2108529a37eSSzymon Olewniczak } 2118529a37eSSzymon Olewniczak 2128529a37eSSzymon Olewniczak $stmt = $bez->query('SELECT tasks.*, commcauses.type AS cause_type 2138529a37eSSzymon Olewniczak FROM tasks 2148529a37eSSzymon Olewniczak LEFT JOIN commcauses ON tasks.cause = commcauses.id'); 2158529a37eSSzymon Olewniczak //thread_id => array('user_id' => 'user_id') 2168529a37eSSzymon Olewniczak $task_assignee = array(); 2178529a37eSSzymon Olewniczak while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { 2188529a37eSSzymon Olewniczak if ($row['close_date'] != '') { 2198529a37eSSzymon Olewniczak $last_mod = date('c', (int) $row['close_date']); 2208529a37eSSzymon Olewniczak } else { 2218529a37eSSzymon Olewniczak $last_mod = date('c', (int) $row['date']); 2228529a37eSSzymon Olewniczak } 2238529a37eSSzymon Olewniczak 2248529a37eSSzymon Olewniczak $data = array('id' => $row['id'], 2258529a37eSSzymon Olewniczak 'original_poster' => $row['reporter'], 2268529a37eSSzymon Olewniczak 'assignee' => $row['executor'], 2278529a37eSSzymon Olewniczak 'create_date' => date('c', (int) $row['date']), 2288529a37eSSzymon Olewniczak 'last_activity_date' => $last_mod, 2298529a37eSSzymon Olewniczak 'last_modification_date' => $last_mod, 2308529a37eSSzymon Olewniczak 'plan_date' => $row['plan_date'], 2318529a37eSSzymon Olewniczak 'all_day_event' => $row['all_day_event'], 2328529a37eSSzymon Olewniczak 'start_time' => $row['start_time'], 2338529a37eSSzymon Olewniczak 'finish_time' => $row['finish_time'], 2348529a37eSSzymon Olewniczak 'content' => $row['task'], 2358529a37eSSzymon Olewniczak 'content_html' => $row['task_cache'], 2368529a37eSSzymon Olewniczak 'thread_id' => $row['issue'], 2378529a37eSSzymon Olewniczak 'thread_comment_id' => $row['cause'], 2388529a37eSSzymon Olewniczak 'task_program_id' => $row['tasktype'] 2398529a37eSSzymon Olewniczak ); 2408529a37eSSzymon Olewniczak 2418529a37eSSzymon Olewniczak if ($data['thread_id'] != '') { 2428529a37eSSzymon Olewniczak if (!is_array($task_assignee[$data['thread_id']])) { 2438529a37eSSzymon Olewniczak $task_assignee[$data['thread_id']] = array(); 2448529a37eSSzymon Olewniczak } 2458529a37eSSzymon Olewniczak $task_assignee[$data['thread_id']][$row['executor']] = $row['executor']; 2468529a37eSSzymon Olewniczak } 2478529a37eSSzymon Olewniczak 2488529a37eSSzymon Olewniczak if ($row['cost'] != '0') { 2498529a37eSSzymon Olewniczak $data['cost'] = $row['cost']; 2508529a37eSSzymon Olewniczak } 2518529a37eSSzymon Olewniczak 2528529a37eSSzymon Olewniczak if ($row['issue'] == '') { 2538529a37eSSzymon Olewniczak $data['type'] = 'program'; 2548529a37eSSzymon Olewniczak } elseif ($row['cause'] == '') { 2558529a37eSSzymon Olewniczak $data['type'] = 'correction'; 2568529a37eSSzymon Olewniczak } elseif ($row['cause_type'] == '1') { 2578529a37eSSzymon Olewniczak $data['type'] = 'corrective'; 2588529a37eSSzymon Olewniczak } else { 2598529a37eSSzymon Olewniczak $data['type'] = 'preventive'; 2608529a37eSSzymon Olewniczak } 2618529a37eSSzymon Olewniczak 2628529a37eSSzymon Olewniczak if ($row['state'] == '0') { 2638529a37eSSzymon Olewniczak $data['state'] = 'opened'; 2648529a37eSSzymon Olewniczak } elseif ($row['state'] == '1' || $row['state'] == '2') { 2658529a37eSSzymon Olewniczak $data['state'] = 'done'; 2668529a37eSSzymon Olewniczak $data['closed_by'] = $row['executor']; 2678529a37eSSzymon Olewniczak $data['close_date'] = date('c', (int) $row['close_date']); 2688529a37eSSzymon Olewniczak 2698529a37eSSzymon Olewniczak if ($row['reason'] != '') { 2708529a37eSSzymon Olewniczak $sqlite->storeEntry('task_comment', 2718529a37eSSzymon Olewniczak array('task_id' => $row['id'], 2728529a37eSSzymon Olewniczak 'author' => $row['executor'], 2738529a37eSSzymon Olewniczak 'create_date' => $data['close_date'], 2748529a37eSSzymon Olewniczak 'last_modification_date' => $data['close_date'], 2758529a37eSSzymon Olewniczak 'content' => $row['reason'], 2768529a37eSSzymon Olewniczak 'content_html' => $row['reason_cache'])); 2778529a37eSSzymon Olewniczak } 2788529a37eSSzymon Olewniczak } 2798529a37eSSzymon Olewniczak 2808529a37eSSzymon Olewniczak //user_id => array() 2818529a37eSSzymon Olewniczak $participants = array(); 2828529a37eSSzymon Olewniczak $subscribents = explode(',', $row['subscribents']); 2838529a37eSSzymon Olewniczak foreach ($subscribents as $user_id) { 2848529a37eSSzymon Olewniczak $participants[$user_id] = array('user_id' => $user_id, 'subscribent' => '1'); 2858529a37eSSzymon Olewniczak } 2868529a37eSSzymon Olewniczak 2878529a37eSSzymon Olewniczak $op = $data['original_poster']; 2888529a37eSSzymon Olewniczak if (!isset($participants[$op])) { 2898529a37eSSzymon Olewniczak $participants[$op] = array('user_id' => $op, 'original_poster' => '1'); 2908529a37eSSzymon Olewniczak } else { 2918529a37eSSzymon Olewniczak $participants[$op]['original_poster'] = '1'; 2928529a37eSSzymon Olewniczak } 2938529a37eSSzymon Olewniczak 2948529a37eSSzymon Olewniczak $as = $data['assignee']; 2958529a37eSSzymon Olewniczak if (!isset($participants[$as])) { 2968529a37eSSzymon Olewniczak $participants[$as] = array('user_id' => $as, 'assignee' => '1'); 2978529a37eSSzymon Olewniczak } else { 2988529a37eSSzymon Olewniczak $participants[$as]['assignee'] = '1'; 2998529a37eSSzymon Olewniczak } 3008529a37eSSzymon Olewniczak 3018529a37eSSzymon Olewniczak foreach($participants as $part) { 3028529a37eSSzymon Olewniczak $part['task_id'] = $row['id']; 3038529a37eSSzymon Olewniczak $part['added_by'] = $INFO['client']; 3048529a37eSSzymon Olewniczak $part['added_date'] = date('c'); 3058529a37eSSzymon Olewniczak 3068529a37eSSzymon Olewniczak $res = $sqlite->storeEntry('task_participant', $part); 3078529a37eSSzymon Olewniczak if ($res === false) { 3088529a37eSSzymon Olewniczak throw new Exception($db->errorInfo()); 3098529a37eSSzymon Olewniczak } 3108529a37eSSzymon Olewniczak } 3118529a37eSSzymon Olewniczak 3128529a37eSSzymon Olewniczak $sqlite->storeEntry('task', $data); 3138529a37eSSzymon Olewniczak } 3148529a37eSSzymon Olewniczak 3158529a37eSSzymon Olewniczak 3168529a37eSSzymon Olewniczak 3178529a37eSSzymon Olewniczak $stmt = $bez->query('SELECT *, 3188529a37eSSzymon Olewniczak (SELECT COUNT(*) FROM tasks 3198529a37eSSzymon Olewniczak WHERE tasks.issue = issues.id) AS task_count, 3208529a37eSSzymon Olewniczak (SELECT COUNT(*) FROM tasks 3218529a37eSSzymon Olewniczak WHERE tasks.issue = issues.id AND tasks.state != 0) AS task_closed_count, 3228529a37eSSzymon Olewniczak (SELECT SUM(cost) FROM tasks 3238529a37eSSzymon Olewniczak WHERE tasks.issue = issues.id) AS task_sum_cost 3248529a37eSSzymon Olewniczak FROM issues'); 3258529a37eSSzymon Olewniczak 3268529a37eSSzymon Olewniczak while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { 3278529a37eSSzymon Olewniczak 3288529a37eSSzymon Olewniczak $data = array('id' => $row['id'], 3298529a37eSSzymon Olewniczak 'original_poster' => $row['reporter'], 3308529a37eSSzymon Olewniczak 'coordinator' => $row['coordinator'], 3318529a37eSSzymon Olewniczak 'create_date' => date('c', (int) $row['date']), 3328529a37eSSzymon Olewniczak 'last_activity_date' => date('c', strtotime($row['last_activity'])), 3338529a37eSSzymon Olewniczak 'last_modification_date' => date('c', (int) $row['last_mod']), 3348529a37eSSzymon Olewniczak 'title' => $row['title'], 3358529a37eSSzymon Olewniczak 'content' => $row['description'], 3368529a37eSSzymon Olewniczak 'content_html' => $row['description_cache'], 3378529a37eSSzymon Olewniczak 'task_count' => $row['task_count'], 3388529a37eSSzymon Olewniczak 'task_count_closed' => $row['task_closed_count'] 3398529a37eSSzymon Olewniczak ); 3408529a37eSSzymon Olewniczak 3418529a37eSSzymon Olewniczak if ($row['task_sum_cost'] != '0') { 3428529a37eSSzymon Olewniczak $data['task_sum_cost'] = $row['task_sum_cost']; 3438529a37eSSzymon Olewniczak } 3448529a37eSSzymon Olewniczak 3458529a37eSSzymon Olewniczak if ($row['coordinator'] == '') { 3468529a37eSSzymon Olewniczak $data['state'] = 'proposal'; 3478529a37eSSzymon Olewniczak } elseif ($row['state'] == '1') { 3488529a37eSSzymon Olewniczak $data['closed_by'] = $row['coordinator']; 3498529a37eSSzymon Olewniczak $data['state'] = 'closed'; 3508529a37eSSzymon Olewniczak $data['close_date'] = $data['last_modification_date']; 3518529a37eSSzymon Olewniczak 3528529a37eSSzymon Olewniczak $sqlite->storeEntry('thread_comment', 3538529a37eSSzymon Olewniczak array('thread_id' => $row['id'], 3548529a37eSSzymon Olewniczak 'type' => 'comment', 3558529a37eSSzymon Olewniczak 'author' => $row['coordinator'], 3568529a37eSSzymon Olewniczak 'create_date' => $data['close_date'], 3578529a37eSSzymon Olewniczak 'last_modification_date' => $data['close_date'], 3588529a37eSSzymon Olewniczak 'content' => $row['opinion'], 3598529a37eSSzymon Olewniczak 'content_html' => $row['opinion_cache'])); 3608529a37eSSzymon Olewniczak 3618529a37eSSzymon Olewniczak 3628529a37eSSzymon Olewniczak } elseif ($row['state'] == '2') { 3638529a37eSSzymon Olewniczak $data['closed_by'] = $row['coordinator']; 3648529a37eSSzymon Olewniczak $data['state'] = 'rejected'; 3658529a37eSSzymon Olewniczak $data['close_date'] = $data['last_modification_date']; 3668529a37eSSzymon Olewniczak 3678529a37eSSzymon Olewniczak if ($row['opinion'] != '') { 3688529a37eSSzymon Olewniczak $res = $sqlite->storeEntry('thread_comment', 3698529a37eSSzymon Olewniczak array('thread_id' => $row['id'], 3708529a37eSSzymon Olewniczak 'type' => 'comment', 3718529a37eSSzymon Olewniczak 'author' => $row['coordinator'], 3728529a37eSSzymon Olewniczak 'create_date' => $data['close_date'], 3738529a37eSSzymon Olewniczak 'last_modification_date' => $data['close_date'], 3748529a37eSSzymon Olewniczak 'content' => $row['opinion'], 3758529a37eSSzymon Olewniczak 'content_html' => $row['opinion_cache'])); 3768529a37eSSzymon Olewniczak if ($res === false) { 3778529a37eSSzymon Olewniczak throw new Exception($db->errorInfo()); 3788529a37eSSzymon Olewniczak } 3798529a37eSSzymon Olewniczak } 3808529a37eSSzymon Olewniczak } else { 3818529a37eSSzymon Olewniczak $data['state'] = 'opened'; 3828529a37eSSzymon Olewniczak } 3838529a37eSSzymon Olewniczak 3848529a37eSSzymon Olewniczak $sqlite->storeEntry('thread', $data); 3858529a37eSSzymon Olewniczak 3868529a37eSSzymon Olewniczak $sqlite->storeEntry('thread_label', 3878529a37eSSzymon Olewniczak array('thread_id' => $row['id'], 3888529a37eSSzymon Olewniczak 'label_id' => $row['type'])); 3898529a37eSSzymon Olewniczak 3908529a37eSSzymon Olewniczak //participants 3918529a37eSSzymon Olewniczak //user_id => array() 3928529a37eSSzymon Olewniczak $participants = array(); 3938529a37eSSzymon Olewniczak $org_participants = array_filter(explode(',', $row['participants'])); 3948529a37eSSzymon Olewniczak foreach ($org_participants as $user_id) { 3958529a37eSSzymon Olewniczak $participants[$user_id] = array('user_id' => $user_id); 3968529a37eSSzymon Olewniczak } 3978529a37eSSzymon Olewniczak 3988529a37eSSzymon Olewniczak $subscribents = array_filter(explode(',', $row['subscribents'])); 3998529a37eSSzymon Olewniczak foreach ($subscribents as $user_id) { 4008529a37eSSzymon Olewniczak if (!isset($participants[$user_id])) { 4018529a37eSSzymon Olewniczak $participants[$user_id] = array('user_id' => $user_id); 4028529a37eSSzymon Olewniczak } 4038529a37eSSzymon Olewniczak $participants[$user_id]['subscribent'] = '1'; 4048529a37eSSzymon Olewniczak } 4058529a37eSSzymon Olewniczak 406f4ba43dcSSzymon Olewniczak $stmt_i = $bez->query('SELECT reporter FROM commcauses WHERE issue=' . $row['id']); 407f4ba43dcSSzymon Olewniczak while ($commcause = $stmt_i->fetch(\PDO::FETCH_ASSOC)) { 408f4ba43dcSSzymon Olewniczak $user_id = $commcause['reporter']; 409f4ba43dcSSzymon Olewniczak if (!isset($participants[$user_id])) { 410f4ba43dcSSzymon Olewniczak $participants[$user_id] = array('user_id' => $user_id); 411f4ba43dcSSzymon Olewniczak } 412f4ba43dcSSzymon Olewniczak $participants[$user_id]['commentator'] = '1'; 413f4ba43dcSSzymon Olewniczak } 414f4ba43dcSSzymon Olewniczak 4158529a37eSSzymon Olewniczak if (is_array($task_assignee[$row['id']])) foreach ($task_assignee[$row['id']] as $user_id) { 4168529a37eSSzymon Olewniczak if (!isset($participants[$user_id])) { 4178529a37eSSzymon Olewniczak $participants[$user_id] = array('user_id' => $user_id); 4188529a37eSSzymon Olewniczak } 4198529a37eSSzymon Olewniczak $participants[$user_id]['task_assignee'] = '1'; 4208529a37eSSzymon Olewniczak } 4218529a37eSSzymon Olewniczak 4228529a37eSSzymon Olewniczak $op = $data['original_poster']; 4238529a37eSSzymon Olewniczak if (!isset($participants[$op])) { 4248529a37eSSzymon Olewniczak $participants[$op] = array('user_id' => $op, 'original_poster' => '1'); 4258529a37eSSzymon Olewniczak } else { 4268529a37eSSzymon Olewniczak $participants[$op]['original_poster'] = '1'; 4278529a37eSSzymon Olewniczak } 4288529a37eSSzymon Olewniczak 4298529a37eSSzymon Olewniczak $cor = $data['coordinator']; 4308529a37eSSzymon Olewniczak if (!isset($participants[$cor])) { 4318529a37eSSzymon Olewniczak $participants[$cor] = array('user_id' => $cor, 'coordinator' => '1'); 4328529a37eSSzymon Olewniczak } else { 4338529a37eSSzymon Olewniczak $participants[$cor]['coordinator'] = '1'; 4348529a37eSSzymon Olewniczak } 4358529a37eSSzymon Olewniczak 4368529a37eSSzymon Olewniczak foreach($participants as $part) { 4378529a37eSSzymon Olewniczak $part['thread_id'] = $row['id']; 4388529a37eSSzymon Olewniczak $part['added_by'] = $INFO['client']; 4398529a37eSSzymon Olewniczak $part['added_date'] = date('c'); 4408529a37eSSzymon Olewniczak 4418529a37eSSzymon Olewniczak $sqlite->storeEntry('thread_participant', $part); 4428529a37eSSzymon Olewniczak } 4438529a37eSSzymon Olewniczak 4448529a37eSSzymon Olewniczak } 4458529a37eSSzymon Olewniczak 446*d3caa25dSSzymon Olewniczak// $db->commit(); // commit will be done inside SQLiteDB 447fe5d6d1eSSzymon Olewniczak 448fe5d6d1eSSzymon Olewniczak return true; 449fe5d6d1eSSzymon Olewniczak } 450fe5d6d1eSSzymon Olewniczak 4511f0a4a30SSzymon Olewniczak protected function migration8($data) { 4521f0a4a30SSzymon Olewniczak /** @var helper_plugin_sqlite $sqlite */ 4531f0a4a30SSzymon Olewniczak $sqlite = $data['sqlite']; 4541f0a4a30SSzymon Olewniczak 455*d3caa25dSSzymon Olewniczak $db = $sqlite->getAdapter()->getPdo(); 456*d3caa25dSSzymon Olewniczak $db->commit(); // stop current transatction 4571f0a4a30SSzymon Olewniczak $db->query('PRAGMA journal_mode=WAL'); 458*d3caa25dSSzymon Olewniczak $db->beginTransaction(); // recreate transaction 4591f0a4a30SSzymon Olewniczak return true; 4601f0a4a30SSzymon Olewniczak } 4611f0a4a30SSzymon Olewniczak 462fe5d6d1eSSzymon Olewniczak} 463