FixCrmProcesInitIdx.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('DebugExecutionTime');
  4. Lib::loadClass('UI');
  5. class Route_FixCrmProcesInitIdx extends RouteBase {
  6. function handleAuth() {
  7. if (!User::logged()) {
  8. throw new HttpException('Unauthorized', 401);
  9. }
  10. }
  11. function defaultAction() { $this->layout('defaultView'); }
  12. function defaultView() {
  13. // echo '<a href="index.php?_route=FixCrmProcesInitIdx&_task=run">aktualizuj uprawnienia</a>';
  14. echo UI::h('div', [ 'class' => "jumbotron" ], [
  15. UI::h('div', [ 'class' => "container" ], [
  16. UI::h('form', [ 'class' => "form-inline", 'method' => "POST" ], [
  17. UI::h('input', [ 'type' => "hidden", 'name' => "_route", 'value' => "FixCrmProcesInitIdx" ]),
  18. UI::h('input', [ 'type' => "hidden", 'name' => "_task", 'value' => "run" ]),
  19. UI::h('button', [ 'type' => "submit", 'id' => "fldExecuteBtn", 'class' => "btn btn-primary", 'autocomplete' => "off" ], "Zaktualizuj uprawnienia"),
  20. ]),
  21. ]),
  22. ]);
  23. echo UI::h('script', [ 'type' => "text/javascript" ], "
  24. jQuery(document).ready(function () {
  25. jQuery('#fldExecuteBtn').on('click', function () {
  26. jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
  27. jQuery(this).parent().submit();
  28. })
  29. });
  30. ");
  31. }
  32. function mapAction() { $this->layout('mapView'); }
  33. function mapView() {
  34. // echo '<a href="index.php?_route=FixCrmProcesInitIdx&_task=run">aktualizuj uprawnienia</a>';
  35. $idProcesInit = V::get('id_proces_init', '', $_REQUEST, 'int');
  36. echo UI::h('div', [ 'class' => "jumbotron" ], [
  37. UI::h('div', [ 'class' => "container" ], [
  38. UI::h('form', [ 'class' => "form-inline", 'method' => "POST" ], [
  39. UI::h('input', [ 'type' => "hidden", 'name' => "_route", 'value' => "FixCrmProcesInitIdx" ]),
  40. UI::h('input', [ 'type' => "hidden", 'name' => "_task", 'value' => "map" ]),
  41. UI::h('input', [ 'type' => "text", 'class' => "form-control", 'name' => "id_proces_init", 'value' => $idProcesInit ]),
  42. UI::h('button', [ 'type' => "submit", 'id' => "fldExecuteBtn", 'class' => "btn btn-primary", 'autocomplete' => "off" ], "Pokaż mapę"),
  43. ]),
  44. ]),
  45. ]);
  46. echo UI::h('script', [ 'type' => "text/javascript" ], "
  47. jQuery(document).ready(function () {
  48. jQuery('#fldExecuteBtn').on('click', function () {
  49. jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
  50. jQuery(this).parent().submit();
  51. })
  52. });
  53. ");
  54. if ($idProcesInit) {
  55. $this->printProcesInitMap($idProcesInit);
  56. }
  57. }
  58. function printProcesInitMap($idProcesInit) {
  59. Lib::loadClass('CrmProcesMap');
  60. $map = new CrmProcesMap($idProcesInit);
  61. }
  62. function runAction() { $this->layout('runView'); }
  63. function runView() {
  64. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  65. $dbgExecTime = new DebugExecutionTime();
  66. if ($DBG_TIME) $dbgExecTime->activate();
  67. $dbgExecTime->log('start');
  68. try {
  69. $this->callProcedure();
  70. } catch (Exception $e) {
  71. UI::alert('warning', $e->getMessage());
  72. UI::dol();
  73. exit;
  74. }
  75. $dbgExecTime->log('procedure');
  76. $procExecTime = $dbgExecTime->getLastExecTime();
  77. //$totalExecTime = $dbgExecTime->getTotalExecTime();
  78. UI::alert('success', [
  79. "Zaktualizowano uprawnienia",
  80. '<br><span style="font-style:italic; opacity:0.4;">' . "(" . number_format($procExecTime, 6) . " s)" . '</span>',
  81. ]);
  82. if($DBG_TIME){
  83. $dbgExecTime->log('end');
  84. //$dbgExecTime->printDebug();
  85. }
  86. }
  87. function runApiAction() {
  88. $this->callProcedure();
  89. die('Zaktualizowano uprawnienia');
  90. }
  91. function callProcedure() {
  92. $sql = "call `update_proces_init_idx_rec`();";
  93. $db = DB::getDB();
  94. if ($db->has_errors()) {
  95. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  96. }
  97. $res = $db->query($sql);
  98. if ($db->has_errors()) {
  99. $dbErrors = array();
  100. if ($db->has_errors()) {
  101. $dbErrorsSql = $db->get_errors();
  102. foreach ($dbErrorsSql as $vErr) {
  103. if ('SQL QUERY FAILED: ' == substr($vErr, 0, 18)) {
  104. $vErr = substr($vErr, 18);
  105. }
  106. //$dbErrors[] = StorageException::parseMessage($vErr);
  107. $dbErrors[] = $vErr;
  108. }
  109. }
  110. throw new StorageException($dbErrors);
  111. }
  112. }
  113. function test1Action() { $this->layout('test1View'); }
  114. function test1View() {
  115. try {
  116. $sql = "
  117. select count(*) as cnt, p.`ID`, group_concat(i.`idx_PROCES_INIT_ID`), group_concat(i.`idx_PROCES_WITH_GROUPS_ID`)
  118. from `CRM_PROCES` p
  119. left join `CRM_PROCES_idx` i on(i.`ID_PROCES`=p.`ID`)
  120. where i.`ID_PROCES`=p.`ID`
  121. group by p.`ID`
  122. order by cnt desc
  123. ";
  124. UI::table([
  125. 'rows' => array_map( function ($item) {
  126. return $item;
  127. }, DB::getPDO()->fetchAll($sql) ),
  128. ]);
  129. } catch (Exception $e) {
  130. UI::alert('danger', $e->getMessage());
  131. }
  132. }
  133. function testReinstallViewsAction() {
  134. $sqlList = array();
  135. $sqlList['install--CRM_AUTH_#Group'] = "
  136. CREATE OR REPLACE VIEW `CRM_AUTH_#Group` AS
  137. select z.`ID`, concat(z.`TYPE`, ' ', z.`DESC`) as LABEL
  138. from `CRM_LISTA_ZASOBOW` as z
  139. where z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  140. and z.`A_STATUS` in('NORMAL', 'WAITING')
  141. ";
  142. $sqlList['install--CRM_AUTH_#Proces'] = "
  143. CREATE OR REPLACE VIEW `CRM_AUTH_#Proces` AS
  144. select p.`ID`, concat(p.`TYPE`, ' ', p.`DESC`) as LABEL
  145. from `CRM_PROCES` as p
  146. where p.`A_STATUS` in('NORMAL', 'WAITING')
  147. ";
  148. $sqlList['install--CRM_AUTH_#ProcesInit'] = "
  149. CREATE OR REPLACE VIEW `CRM_AUTH_#ProcesInit` AS
  150. select p.`ID`, p.`DESC` as LABEL
  151. from `CRM_PROCES` as p
  152. where p.`A_STATUS` in('NORMAL', 'WAITING')
  153. and p.`TYPE` = 'PROCES_INIT'
  154. ";
  155. $sqlList['install--CRM_AUTH_#Ref__Proces_to_Zasob'] = "
  156. CREATE OR REPLACE VIEW `CRM_AUTH_#Ref__Proces_to_Zasob` AS
  157. select wsk.ID_PROCES as pk
  158. , wsk.ID_ZASOB as rpk
  159. from `CRM_WSKAZNIK` as wsk
  160. where wsk.`A_STATUS` in('NORMAL', 'WAITING')
  161. ";
  162. $sqlList['install--CRM_AUTH_#Ref__Proces_to_Zasob_with_perm_x'] = "
  163. CREATE OR REPLACE VIEW `CRM_AUTH_#Ref__Proces_to_Zasob_with_perm_x` AS
  164. select wsk.ID_PROCES as pk
  165. , wsk.ID_ZASOB as rpk
  166. from `CRM_WSKAZNIK` as wsk
  167. join `CRM_PRZYPADEK` as przyp on ( przyp.ID = wsk.ID_PRZYPADEK and przyp.FORM_TREAT & 8 )
  168. where wsk.`A_STATUS` in('NORMAL', 'WAITING')
  169. ";
  170. $sqlList['install--CRM_AUTH_#Ref__Proces_to_Group_with_perm_x'] = "
  171. CREATE OR REPLACE VIEW `CRM_AUTH_#Ref__Proces_to_Group_with_perm_x` AS
  172. select g.ID as pk
  173. , p.ID as rpk
  174. from `CRM_AUTH_#Group` as g
  175. join `CRM_AUTH_#Ref__Proces_to_Zasob_with_perm_x` as refP2Z on ( refP2Z.rpk = g.ID )
  176. join `CRM_AUTH_#Proces` as p on ( p.ID = refP2Z.pk )
  177. ";
  178. // below 2 the same queries but wrong data if there is a RULE: only ProcesInit my have relation to Group
  179. $sqlList__OFF['install--CRM_AUTH_#PROCES_WITH_RELATED_PERM_X'] = "
  180. CREATE OR REPLACE VIEW `CRM_AUTH_#PROCES_WITH_RELATED_PERM_X` AS
  181. select p.ID, concat( 'Groups: ', group_concat(g.ID) ) as LABEL
  182. from `CRM_PROCES` p
  183. join `CRM_WSKAZNIK` as wsk on (
  184. wsk.`ID_PROCES` = p.`ID`
  185. and wsk.`A_STATUS` in ( 'NORMAL', 'WAITING' )
  186. )
  187. join `CRM_AUTH_#Group` as g on ( g.`ID` = wsk.`ID_ZASOB` )
  188. group by p.ID
  189. ";
  190. $sqlList__OFF['install--CRM_AUTH_#PROCES_WITH_RELATED_PERM_X'] = "
  191. CREATE OR REPLACE VIEW `CRM_AUTH_#PROCES_WITH_RELATED_PERM_X` AS
  192. select p.ID, concat( 'Groups: ', group_concat(g.ID) ) as LABEL
  193. from `CRM_PROCES` p
  194. join `CRM_AUTH_#Ref__Proces_to_Zasob_with_perm_x` refP2ZX on ( refP2ZX.pk = p.ID )
  195. join `CRM_AUTH_#Group` as g on ( g.`ID` = refP2ZX.rpk )
  196. group by p.ID
  197. ";
  198. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  199. $dbgExecTime = new DebugExecutionTime();
  200. if ($DBG_TIME) $dbgExecTime->activate();
  201. $dbgExecTime->log('start');
  202. $sqlExecuteLimit = V::get('DBG_LIMIT', 0, $_GET);
  203. $sqlExecuteCounter = 0;
  204. foreach ($sqlList as $sqlName => $sql) {
  205. $sqlExecuteCounter++;
  206. echo'<p>['.$sqlExecuteCounter.'] Executing sql "'.$sqlName.'" ... </p>';
  207. try {
  208. DB::getPDO()->execSql($sql);
  209. } catch (\Exception $e) {
  210. DBG::log($e);
  211. UI::alert('danger', $e->getMessage());
  212. }
  213. if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
  214. echo'<p>['.$sqlExecuteCounter.'] DONE sql "'.$sqlName.'"</p>';
  215. if ($sqlExecuteLimit > 0 && $sqlExecuteCounter >= $sqlExecuteLimit) break;
  216. }
  217. if($DBG_TIME) $dbgExecTime->printDebug();
  218. }
  219. static function _getSqlDebug($sqlFile) {
  220. return file_get_contents( substr( __FILE__ , 0, -4 ) . '/' . $sqlFile . '.sql' );
  221. }
  222. function runDebugAction() {
  223. $sqlList = array();
  224. // SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  225. // SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  226. $sqlList['0-prepare-fill_idx_INIT-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx__loop__fill_idx_INIT`";
  227. $sqlList['0-prepare-fill_idx_INIT-create'] = self::_getSqlDebug('update_proces_init_idx__loop__fill_idx_INIT');
  228. $sqlList['0-prepare-while-1-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while1`";
  229. $sqlList['0-prepare-while-1-create'] = self::_getSqlDebug('update_proces_init_idx_rec__while1');
  230. $sqlList['0-prepare-while-2-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while2`";
  231. $sqlList['0-prepare-while-2-create'] = self::_getSqlDebug('update_proces_init_idx_rec__while2');
  232. $sqlList['CONF.1--set-start-time-in-config'] = "
  233. -- CONF.1--set-start-time-in-config
  234. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_start', NOW());
  235. ";
  236. $sqlList['I.2--fill-CRM_PROCES_idx_TEMP'] = self::_getSqlDebug('fill__CRM_PROCES_idx_TEMP');
  237. $sqlList['G.1--before-while-2-set-initial-proc_with_groups_id'] = self::_getSqlDebug('set_initial_proc_with_groups_id');
  238. $sqlList['G.2--while-2-loop-update-proc_with_groups_id-from-parent'] = "
  239. -- G.2--while-2-loop-update-proc_with_groups_id-from-parent
  240. call `update_proces_init_idx_rec__while2`();
  241. ";
  242. $sqlList['P_INIT_ID.1--fill_idx_INIT'] = "
  243. -- P_INIT_ID.1--fill_idx_INIT
  244. call `update_proces_init_idx__loop__fill_idx_INIT`();
  245. ";
  246. $sqlList['GOTO_AND_RET.1--from-7-fill_goto_and_return'] = self::_getSqlDebug('fill_goto_and_return');
  247. $sqlList['GOTO_AND_RET.2--fill_childrens_of_goto_and_return'] = self::_getSqlDebug('fill_childrens_of_goto_and_return');
  248. $sqlList__TODO_IS_NEEDED__['4.2-NEW-while-1'] = "
  249. call `update_proces_init_idx_rec__while1`();
  250. ";
  251. // TODO: mv here loop insert goto_and_return
  252. // TODO: add idx_MAIN_PROCES_INIT_ID - which proces has goto_end_return for this step
  253. $sqlList__TODO_SEE_IDX_2__['CLEANUP.1--remove-not-needed-rows'] = "
  254. -- // TODO: add to main procedure
  255. delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_INIT_ID`=0;
  256. ";
  257. $sqlList__TODO_SEE_IDX_2__['CLEANUP.2--update-idx_PROCES_WITH_GROUPS_ID-zero-where-null'] = "
  258. update `CRM_PROCES_idx_TEMP`
  259. set `idx_PROCES_WITH_GROUPS_ID`=0
  260. where `idx_PROCES_WITH_GROUPS_ID` is null
  261. and `TYPE`='PROCES_INIT'
  262. ;
  263. ";
  264. $sqlList__TODO_IS_NEEDED__['9-fix-goto_and_return'] = "
  265. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  266. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  267. from `CRM_PROCES_idx_TEMP` i
  268. join `CRM_PROCES_idx_TEMP` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  269. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  270. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  271. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  272. and i.`TYPE`!='GOTO_AND_RETURN'
  273. ;
  274. ";
  275. $sqlList__TODO_IS_NEEDED__['10-delete-where-!idx_PROCES_WITH_GROUPS_ID'] = "
  276. delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  277. ";
  278. $sqlList['GOTO_AND_RET.3--fill_goto_and_return_lvl2'] = self::_getSqlDebug('fill_goto_and_return_lvl2');
  279. $sqlList['GOTO_AND_RET.3--fill_childrens_of_goto_and_return_lvl2'] = self::_getSqlDebug('fill_childrens_of_goto_and_return_lvl2');
  280. $sqlList['IDX.1--clear-CRM_PROCES_idx'] = "
  281. -- IDX.1--clear-CRM_PROCES_idx
  282. truncate table `CRM_PROCES_idx`;
  283. ";
  284. $sqlList['IDX.2--update-CRM_PROCES_idx-from-temp'] = "
  285. -- IDX.2--update-CRM_PROCES_idx-from-temp
  286. insert into `CRM_PROCES_idx` (`ID_PROCES`,`PARENT_ID`,`TYPE`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  287. select i.`ID_PROCES`,i.`PARENT_ID`,i.`TYPE`,i.`idx_PROCES_INIT_ID`,i.`idx_MAIN_PROCES_INIT_ID`,i.`idx_PROCES_WITH_GROUPS_ID`
  288. from `CRM_PROCES_idx_TEMP` i
  289. where i.`idx_PROCES_INIT_ID`>0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
  290. ;
  291. ";
  292. $sqlList__TODO_OFF_time_0_1__['P.1--update-CRM_PROCES-idx_PROCES_INIT_ID'] = "
  293. update `CRM_PROCES` p
  294. set p.`idx_PROCES_INIT_ID`=coalesce((select i.`idx_PROCES_INIT_ID` from `CRM_PROCES_idx` i where i.`ID_PROCES`=p.`ID` limit 1), 0)
  295. ;
  296. ";
  297. $sqlList['GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES'] = "
  298. -- GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES
  299. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  300. ";
  301. $sqlList['GP.2--fill_CRM_PROCES_idx_GROUP_to_PROCES'] = self::_getSqlDebug('fill_CRM_PROCES_idx_GROUP_to_PROCES');
  302. $sqlList['CONF.2--set-end-time-in-config'] = "
  303. -- CONF.2--set-end-time-in-config
  304. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_end', NOW());
  305. ";
  306. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  307. $dbgExecTime = new DebugExecutionTime();
  308. if ($DBG_TIME) $dbgExecTime->activate();
  309. $dbgExecTime->log('start');
  310. $sqlExecuteLimit = V::get('DBG_LIMIT', 0, $_GET);
  311. $sqlExecuteCounter = 0;
  312. foreach ($sqlList as $sqlName => $sql) {
  313. $sqlExecuteCounter++;
  314. echo'<p>['.$sqlExecuteCounter.'] Executing sql "'.$sqlName.'" ... </p>';
  315. DB::getPDO()->execSql($sql);
  316. if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
  317. echo'<p>['.$sqlExecuteCounter.'] DONE sql "'.$sqlName.'"</p>';
  318. if ($sqlExecuteLimit > 0 && $sqlExecuteCounter >= $sqlExecuteLimit) break;
  319. }
  320. if($DBG_TIME) $dbgExecTime->printDebug();
  321. }
  322. function reinstallAction() {
  323. $this->reinstall();
  324. die('OK');
  325. }
  326. static function getSqlInstall__CRM_PROCES_idx() {
  327. return "
  328. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx` (
  329. `ID_PROCES` int(11) NOT NULL
  330. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  331. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  332. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  333. , `idx_MAIN_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  334. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  335. -- , `idx_PATH` text NOT NULL
  336. , KEY `ID_PROCES` (`ID_PROCES`)
  337. , KEY `PARENT_ID` (`PARENT_ID`)
  338. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  339. , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
  340. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  341. -- , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  342. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  343. ";
  344. }
  345. static function getSqlInstall__CRM_PROCES_idx_TEMP() {
  346. return "
  347. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_TEMP` (
  348. `ID_PROCES` int(11) NOT NULL
  349. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  350. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  351. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  352. , `idx_MAIN_PROCES_INIT_ID` int(11) NULL DEFAULT '0'
  353. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  354. -- , `idx_PATH` text NOT NULL
  355. , KEY `ID_PROCES` (`ID_PROCES`)
  356. , KEY `PARENT_ID` (`PARENT_ID`)
  357. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  358. , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
  359. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  360. , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  361. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  362. ";
  363. }
  364. static function getSqlInstall__CRM_PROCES_idx_GROUP_to_PROCES() {
  365. return "
  366. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
  367. `ID_PROCES` int(11) NOT NULL
  368. , `ID_GROUP` int(11) NOT NULL
  369. , `HAS_PERM_R` tinyint(1) NOT NULL DEFAULT 0
  370. , `HAS_PERM_X` tinyint(1) NOT NULL DEFAULT 0
  371. , KEY `ID_PROCES` (`ID_PROCES`)
  372. , KEY `ID_GROUP` (`ID_GROUP`)
  373. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  374. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  375. ";
  376. }
  377. static function getSqlInstall__CRM_PROCES_idx_GROUP_to_PROCES_PERM() {
  378. return "
  379. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES_PERM` (
  380. `ID_PROCES` int(11) NOT NULL
  381. , `ID_GROUP` int(11) NOT NULL
  382. , `HAS_PERM_R` tinyint(1) NOT NULL DEFAULT 0
  383. , `HAS_PERM_X` tinyint(1) NOT NULL DEFAULT 0
  384. , KEY `ID_PROCES` (`ID_PROCES`)
  385. , KEY `ID_GROUP` (`ID_GROUP`)
  386. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  387. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  388. ";
  389. }
  390. static function getSqlInstall__CRM_PROCES_idx_USER_to_PROCES_VIEW() {
  391. return "
  392. CREATE OR REPLACE VIEW `CRM_PROCES_idx_USER_to_PROCES_VIEW` AS
  393. select concat(u.`ID`, gi.`ID_PROCES`) as ID
  394. , gi.`ID_PROCES` as `ID_PROCES`
  395. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  396. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  397. , u.`A_STATUS` as `A_STATUS`
  398. from `ADMIN_USERS` u
  399. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  400. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  401. ";
  402. }
  403. static function getSqlInstall__CRM_PROCES_idx_USER_to_INIT_VIEW() {
  404. return "
  405. CREATE VIEW `CRM_PROCES_idx_USER_to_INIT_VIEW` AS
  406. select concat(u.`ID`, p.`ID`) as ID
  407. , p.`ID` as `ID_PROCES_INIT`
  408. , p.`DESC` as `DESC`
  409. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  410. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  411. , u.`A_STATUS` as `A_STATUS`
  412. from `ADMIN_USERS` u
  413. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  414. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  415. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  416. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  417. where p.`TYPE`='PROCES_INIT'
  418. group by u.`ID`, p.`ID`
  419. ";
  420. }
  421. static function getSqlInstall__CRM_PROCES_idx_GROUP_to_INIT_VIEW() {
  422. return "
  423. CREATE VIEW `CRM_PROCES_idx_GROUP_to_INIT_VIEW` AS
  424. select concat(gi.`ID_GROUP`, p.`ID`) as ID
  425. , p.`ID` as `ID_PROCES_INIT`
  426. , p.`DESC` as `DESC`
  427. , gi.`ID_GROUP` as `ID_GROUP`
  428. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  429. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  430. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  431. where p.`TYPE`='PROCES_INIT'
  432. group by gi.`ID_GROUP`, p.`ID`
  433. ";
  434. }
  435. static function getSqlInstall__CRM_PROCES_idx_TABLES_INFO_VIEW() {
  436. return "
  437. CREATE VIEW `CRM_PROCES_idx_TABLES_INFO_VIEW` AS
  438. select z.`ID` as `ID_CELL`
  439. , z.`DESC` as `CELL_NAME`
  440. , z.`DESC_PL` as `CELL_LABEL`
  441. , z.`OPIS` as `CELL_DESCRIPTION`
  442. , z.`SORT_PRIO` as `CELL_SORT_PRIO`
  443. , zp.`ID` as `ID_TABLE`
  444. , zp.`DESC` as `TABLE_NAME`
  445. , zp.`DESC_PL` as `TABLE_LABEL`
  446. , zp.`OPIS` as `TABLE_DESCRIPTION`
  447. , zpp.`ID` as `ID_DATABASE`
  448. from `CRM_LISTA_ZASOBOW` z
  449. join `CRM_LISTA_ZASOBOW` zp on(zp.`ID`=z.`PARENT_ID` and zp.`TYPE`='TABELA' and zp.`A_STATUS` in('WAITING','NORMAL'))
  450. join `CRM_LISTA_ZASOBOW` zpp on(zpp.`ID`=zp.`PARENT_ID`
  451. -- TODO: and zpp.`TYPE`='BAZA_DANYCH...'
  452. and zpp.`A_STATUS` in('WAITING','NORMAL')
  453. )
  454. where z.`TYPE`='KOMORKA'
  455. and z.`A_STATUS` in('WAITING','NORMAL')
  456. ";
  457. }
  458. static function getSqlInstall__CRM_PROCES_idx_TABLE_TO_PROCES_VIEW() {
  459. return "
  460. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` AS
  461. select tv.`ID_CELL` as `ID_CELL`
  462. , tv.`CELL_NAME` as `CELL_NAME`
  463. , tv.`ID_TABLE` as `ID_TABLE`
  464. , tv.`TABLE_NAME` as `TABLE_NAME`
  465. , tv.`TABLE_LABEL` as `TABLE_LABEL`
  466. , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
  467. , tv.`ID_DATABASE` as `ID_DATABASE`
  468. , wsk.`ID_PROCES` as `ID_PROCES`
  469. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  470. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  471. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  472. ";
  473. }
  474. static function getSqlInstall__CRM_PROCES_idx_URL_TO_PROCES_VIEW() {
  475. return "
  476. CREATE VIEW `CRM_PROCES_idx_URL_TO_PROCES_VIEW` AS
  477. select z.`ID` as `ID_URL`
  478. , z.`DESC` as `URL_LINK`
  479. , z.`DESC_PL` as `URL_LABEL`
  480. , z.`OPIS` as `URL_DESC`
  481. , wsk.`ID_PROCES` as `ID_PROCES`
  482. from `CRM_LISTA_ZASOBOW` z
  483. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=z.`ID` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  484. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  485. where z.`TYPE`='URL'
  486. and z.`A_STATUS` in('WAITING','NORMAL')
  487. ";
  488. }
  489. static function getSqlInstall__CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW() {
  490. return "
  491. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW` AS
  492. select tv.`ID_CELL` as `ID_CELL`
  493. , tv.`CELL_NAME` as `CELL_NAME`
  494. , tv.`ID_TABLE` as `ID_TABLE`
  495. , tv.`TABLE_NAME` as `TABLE_NAME`
  496. , tv.`TABLE_LABEL` as `TABLE_LABEL`
  497. , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
  498. , tv.`ID_DATABASE` as `ID_DATABASE`
  499. , wsk.`ID_PROCES` as `ID_PROCES`
  500. , replace(przyp.`FORM_TREAT`, ',', '') as FORM_TREAT
  501. , IF(przyp.`FORM_TREAT` & 2, 1, 0) as PERM_R
  502. , IF(przyp.`FORM_TREAT` & 4, 1, 0) as PERM_W
  503. , IF(przyp.`FORM_TREAT` & 8, 1, 0) as PERM_X
  504. , IF(przyp.`FORM_TREAT` & 16, 1, 0) as PERM_C
  505. , IF(przyp.`FORM_TREAT` & 32, 1, 0) as PERM_S
  506. , IF(przyp.`FORM_TREAT` & 64, 1, 0) as PERM_O
  507. , IF(przyp.`FORM_TREAT` & 128, 1, 0) as PERM_V
  508. , IF(przyp.`FORM_TREAT` & 256, 1, 0) as PERM_E
  509. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  510. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  511. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  512. join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
  513. ";
  514. }
  515. static function getSqlInstall__CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW() {
  516. return "
  517. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` AS
  518. select tpv.`ID_TABLE`
  519. , tpv.`TABLE_NAME`
  520. , tpv.`TABLE_LABEL`
  521. , tpv.`TABLE_DESCRIPTION`
  522. , tpv.`ID_DATABASE`
  523. , tpv.`ID_PROCES`
  524. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
  525. group by tpv.`ID_TABLE`, tpv.`ID_PROCES`
  526. ";
  527. }
  528. static function getSqlInstall__CRM_PROCES_idx_TABLE_TO_USER_VIEW() {
  529. return "
  530. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
  531. select tpgv.`ID_TABLE`, tpgv.`TABLE_NAME`, tpgv.`ID_PROCES`
  532. , upv.`ADM_ACCOUNT`
  533. , upv.`EMPLOYEE_TYPE`
  534. , upv.`A_STATUS`
  535. from `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` as tpgv
  536. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpgv.`ID_PROCES`)
  537. ";
  538. }
  539. static function getSqlInstall__CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST() {
  540. return "
  541. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST` AS
  542. select tpgv.`ID_TABLE`, tpgv.`TABLE_NAME`, tpgv.`ID_PROCES`
  543. , upv.`ADM_ACCOUNT`
  544. , upv.`EMPLOYEE_TYPE`
  545. , upv.`A_STATUS`
  546. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` as tpgv
  547. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpgv.`ID_PROCES`)
  548. ";
  549. }
  550. static function getSqlInstall__CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST2() {
  551. return "
  552. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST2` AS
  553. select tpgv.`ID_TABLE`, tpgv.`TABLE_NAME`, tpgv.`ID_PROCES`
  554. , upv.`ADM_ACCOUNT`
  555. , upv.`EMPLOYEE_TYPE`
  556. , upv.`A_STATUS`
  557. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` as tpgv
  558. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpgv.`ID_PROCES`)
  559. ";
  560. }
  561. static function getSqlInstall__CRM_PROCES_idx_TABLE_TO_INIT_VIEW() {
  562. return "
  563. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_INIT_VIEW` AS
  564. select tpgv.`ID_TABLE`, tpgv.`TABLE_NAME`, tpgv.`ID_PROCES`
  565. , pidx.`idx_MAIN_PROCES_INIT_ID` as `ID_MAIN_PROCES_INIT`
  566. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` as tpgv
  567. join `CRM_PROCES_idx` pidx on(pidx.`ID_PROCES`=tpgv.`ID_PROCES`)
  568. ";
  569. }
  570. static function getSqlInstall__update_proces_init_idx_rec() {
  571. return file_get_contents( substr( __FILE__ , 0, -4 ) . '/' . 'update_proces_init_idx_rec' . '.sql' );
  572. }
  573. function reinstall() {
  574. $sqlList = array();
  575. $sqlList['RemoveTable_CRM_PROCES_idx'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx`";
  576. $sqlList['InstallTable_CRM_PROCES_idx'] = self::getSqlInstall__CRM_PROCES_idx();
  577. $sqlList['RemoveTable_CRM_PROCES_idx_TEMP'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_TEMP`";
  578. $sqlList['InstallTable_CRM_PROCES_idx_TEMP'] = self::getSqlInstall__CRM_PROCES_idx_TEMP();
  579. $sqlList['RemoveOldTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
  580. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
  581. $sqlList['InstallTableGroupToInit'] = self::getSqlInstall__CRM_PROCES_idx_GROUP_to_PROCES();
  582. $sqlList['RemoveTableGroupToInitPerm'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES_PERM`";// TODO: to replace `CRM_PROCES_idx_GROUP_to_PROCES`
  583. $sqlList['InstallTableGroupToInitPerm'] = self::getSqlInstall__CRM_PROCES_idx_GROUP_to_PROCES_PERM();
  584. $sqlList['InstallViewUserToProces'] = self::getSqlInstall__CRM_PROCES_idx_USER_to_PROCES_VIEW();
  585. $sqlList['RemoveViewUserToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_INIT_VIEW`";
  586. $sqlList['InstallViewUserToInit'] = self::getSqlInstall__CRM_PROCES_idx_USER_to_INIT_VIEW();
  587. /* Usage - find proces init for user by $userLogin:
  588. SELECT *
  589. FROM `CRM_PROCES_idx_USER_to_INIT_VIEW`
  590. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  591. GROUP BY ID_PROCES_INIT
  592. */
  593. $sqlList['RemoveViewGroupToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_GROUP_to_INIT_VIEW`";
  594. $sqlList['InstallViewGroupToInit'] = self::getSqlInstall__CRM_PROCES_idx_GROUP_to_INIT_VIEW();
  595. $sqlList['RemoveViewTablesInfo'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLES_INFO_VIEW`";
  596. $sqlList['InstallViewTablesInfo'] = self::getSqlInstall__CRM_PROCES_idx_TABLES_INFO_VIEW();
  597. $sqlList['RemoveViewTableToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW`";
  598. $sqlList['InstallViewTableToProces'] = self::getSqlInstall__CRM_PROCES_idx_TABLE_TO_PROCES_VIEW();
  599. $sqlList['RemoveViewUrlToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_URL_TO_PROCES_VIEW`";
  600. $sqlList['InstallViewUrlToProces'] = self::getSqlInstall__CRM_PROCES_idx_URL_TO_PROCES_VIEW();
  601. $sqlList['RemoveViewTableCellToProcesWithPerms'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW`";
  602. $sqlList['InstallViewTableCellToProcesWithPerms'] = self::getSqlInstall__CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW();
  603. $sqlExample_TableCellToProcesForInitTable = "
  604. select tv.`ID_CELL` as `ID_CELL`
  605. , tv.`CELL_NAME` as `CELL_NAME`
  606. , tv.`CELL_LABEL` as `CELL_LABEL`
  607. , tv.`CELL_DESC` as `CELL_DESC`
  608. , tv.`CELL_SORT_PRIO` as `SORT_PRIO`
  609. , tv.`ID_TABLE` as `ID_TABLE`
  610. , tv.`TABLE_NAME` as `TABLE_NAME`
  611. , wsk.`ID_PROCES` as `ID_PROCES`
  612. , sum(IF(przyp.`FORM_TREAT` & 2, 1, 0)) as PERM_R
  613. , sum(IF(przyp.`FORM_TREAT` & 4, 1, 0)) as PERM_W
  614. , sum(IF(przyp.`FORM_TREAT` & 8, 1, 0)) as PERM_X
  615. , sum(IF(przyp.`FORM_TREAT` & 16, 1, 0)) as PERM_C
  616. , sum(IF(przyp.`FORM_TREAT` & 32, 1, 0)) as PERM_S
  617. , sum(IF(przyp.`FORM_TREAT` & 64, 1, 0)) as PERM_O
  618. , sum(IF(przyp.`FORM_TREAT` & 128, 1, 0)) as PERM_V
  619. , sum(IF(przyp.`FORM_TREAT` & 256, 1, 0)) as PERM_E
  620. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  621. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  622. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  623. join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
  624. where tv.`ID_TABLE`='{$idTable}'
  625. and wsk.`ID_PROCES` in({$sqlIdProcesList})
  626. group by tv.`ID_CELL`, wsk.`ID_PROCES`
  627. order by tv.`CELL_SORT_PRIO`
  628. ";
  629. $sqlExample_UrlToUserProces = "
  630. select zpv.*
  631. from `CRM_PROCES_idx_URL_TO_PROCES_VIEW` zpv
  632. where zpv.`ID_PROCES` in({$sqlIdProcesList})
  633. ";
  634. $sqlExample_sqlIdProcesList = "
  635. select gi.`ID_PROCES`
  636. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  637. where gi.`ID_GROUP` in({$idUserGroupList})
  638. ";
  639. $sqlList_BUG = "
  640. -- BUG #1349 - View's SELECT contains a subquery in the FROM clause
  641. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
  642. select tpvg.`ID_PROCES`, tpvg.`TABLE_NAME`
  643. , upv.`ADM_ACCOUNT`
  644. , upv.`EMPLOYEE_TYPE`
  645. , upv.`A_STATUS`
  646. from
  647. (select tpv.`ID_PROCES`, tpv.`TABLE_NAME`
  648. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
  649. group by tpv.`TABLE_NAME`, tpv.`ID_PROCES`) as tpvg
  650. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpvg.`ID_PROCES`)
  651. ";
  652. $sqlList['RemoveViewTableToProcesGrouped'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW`";
  653. $sqlList['InstallViewTableToProcesGrouped'] = self::getSqlInstall__CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW();
  654. $sqlList['RemoveViewTableToUser'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_USER_VIEW`";
  655. $sqlList['InstallViewTableToUser'] = self::getSqlInstall__CRM_PROCES_idx_TABLE_TO_USER_VIEW();
  656. // TODO: faster then using GROUPED view (~6ms vs ~180ms) - explain show that if `group by` in view then temporary and filesort used
  657. $sqlList['RemoveViewTableToUser__TEST'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST`";
  658. $sqlList['InstallViewTableToUser__TEST'] = self::getSqlInstall__CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST();
  659. $sqlList['RemoveViewTableToUser__TEST2'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST2`";
  660. $sqlList['InstallViewTableToUser__TEST2'] = self::getSqlInstall__CRM_PROCES_idx_TABLE_TO_USER_VIEW__TEST2();
  661. $sqlList['RemoveViewTableToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_INIT_VIEW`";
  662. $sqlList['InstallViewTableToInit'] = self::getSqlInstall__CRM_PROCES_idx_TABLE_TO_INIT_VIEW();
  663. $sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
  664. // throws errors:
  665. // #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  666. $sqlList['CreateProcedure'] = self::getSqlInstall__update_proces_init_idx_rec();
  667. $sqlList['RemoveTrigger_AfterInsertProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT`";
  668. $sqlList['CreateTrigger_AfterInsertProces'] = "
  669. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT` AFTER INSERT ON `CRM_PROCES`
  670. FOR EACH ROW BEGIN
  671. -- only when PARENT_ID changes and PARENT_ID exists in `CRM_PROCES_idx`
  672. IF NEW.`PARENT_ID` IS NOT NULL AND NEW.`PARENT_ID`>0 AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`PARENT_ID` limit 1)>0 THEN
  673. -- throw warning to update perms
  674. CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_CREATE_AUTHOR,':AFTER_INSERT'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
  675. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  676. END IF;
  677. END
  678. ";
  679. $sqlList['RemoveTrigger_AfterUpdateProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE`";
  680. $sqlList['CreateTrigger_AfterUpdateProces'] = "
  681. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE` AFTER UPDATE ON `CRM_PROCES`
  682. FOR EACH ROW BEGIN
  683. -- only when PARENT_ID changes and ID exists in `CRM_PROCES_idx`
  684. IF NEW.`PARENT_ID`!=OLD.`PARENT_ID` AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID`, NEW.`PARENT_ID`, OLD.`PARENT_ID`) limit 1)>0 THEN
  685. -- throw warning to update perms
  686. CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_UPDATE_AUTHOR,':AFTER_UPDATE'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
  687. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  688. END IF;
  689. END
  690. ";
  691. $sqlList['RemoveTrigger_AfterInsertWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT`";
  692. $sqlList['CreateTrigger_AfterInsertWskaznik'] = "
  693. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT` AFTER INSERT ON `CRM_WSKAZNIK`
  694. FOR EACH ROW BEGIN
  695. -- only when ID_PROCES exists in `CRM_PROCES_idx`
  696. -- only when ID_ZASOB is group
  697. -- only when ID_PRZYPADEK has perm 'X'
  698. IF NEW.`ID_PROCES`>0
  699. AND NEW.`ID_ZASOB`>0
  700. AND NEW.`ID_PRZYPADEK`>0
  701. AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`ID_PROCES` limit 1)>0
  702. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID`=NEW.`ID_ZASOB` and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  703. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID`=NEW.`ID_PRZYPADEK` and przyp.`FORM_TREAT` & 8 limit 1)>0
  704. THEN
  705. -- throw warning to update perms
  706. CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_CREATE_AUTHOR,':AFTER_INSERT_WSK'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
  707. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  708. END IF;
  709. END
  710. ";
  711. $sqlList['RemoveTrigger_AfterUpdateWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE`";
  712. $sqlList['CreateTrigger_AfterUpdateWskaznik'] = "
  713. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE` AFTER UPDATE ON `CRM_WSKAZNIK`
  714. FOR EACH ROW BEGIN
  715. -- only when old or new ID_PROCES exists in `CRM_PROCES_idx`
  716. -- only when old or new ID_ZASOB is group
  717. -- only when old or new ID_PRZYPADEK has perm 'X'
  718. IF (NEW.`ID_PROCES`!=OLD.`ID_PROCES`
  719. or NEW.`ID_ZASOB`!=OLD.`ID_ZASOB`
  720. or NEW.`ID_PRZYPADEK`!=OLD.`ID_PRZYPADEK`
  721. or (NEW.`A_STATUS`!=OLD.`A_STATUS`
  722. and ((NEW.`A_STATUS` in('WAITING','NORMAL') and OLD.`A_STATUS` not in('WAITING','NORMAL'))
  723. or (NEW.`A_STATUS` not in('WAITING','NORMAL') and OLD.`A_STATUS` in('WAITING','NORMAL'))
  724. )
  725. )
  726. )
  727. AND (NEW.`ID_PROCES`>0 or OLD.`ID_PROCES`>0)
  728. AND (NEW.`ID_ZASOB`>0 or OLD.`ID_ZASOB`>0)
  729. AND (NEW.`ID_PRZYPADEK`>0 or OLD.`ID_PRZYPADEK`>0)
  730. -- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID_PROCES`,OLD.`ID_PROCES`) limit 1)>0
  731. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID` in(NEW.`ID_ZASOB`,OLD.`ID_ZASOB`) and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  732. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID` in(NEW.`ID_PRZYPADEK`,OLD.`ID_PRZYPADEK`) and przyp.`FORM_TREAT` & 8 limit 1)>0
  733. THEN
  734. -- throw warning to update perms
  735. CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_UPDATE_AUTHOR,':AFTER_UPDATE_WSK'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
  736. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  737. END IF;
  738. END
  739. ";
  740. $sqlList['RemoveConfigLocks'] = "
  741. DELETE FROM `CRM_CONFIG` where `CONF_KEY`='tbl_indexer_CRM_PROCES_last_exec_lock_date';
  742. ";
  743. foreach ($sqlList as $sqlName => $sql) {
  744. DB::getPDO()->execSql($sql);
  745. }
  746. $this->callProcedure();
  747. }
  748. /*
  749. #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  750. */
  751. function parseMessageFromStorage($msg) {
  752. switch ($msg) {
  753. case 'ERROR: Already executed': {
  754. $msg = "Aktualizacja uprawnień została już uruchomiona przez inną osobę";
  755. break;
  756. }
  757. case 'ERROR: Update perms': {
  758. $msg = "Wymagana aktualizacja uprawnień";
  759. break;
  760. }
  761. }
  762. return $msg;
  763. }
  764. function parseMessageFromMsgsSystem($msg) {
  765. switch ($msg) {
  766. case 'Update perms': {
  767. $msg = "Wymagana aktualizacja uprawnień";
  768. break;
  769. }
  770. }
  771. return $msg;
  772. }
  773. function runByMessageFromMsgsSystem($msg, &$execNotes) {
  774. switch ($msg) {
  775. case 'Update perms': {
  776. $execNotes .= 'Wymagana aktualizacja uprawnień';
  777. $this->callProcedure();
  778. $execNotes .= ' done';
  779. break;
  780. }
  781. }
  782. }
  783. }