PrzypomnijStorageAcl.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842
  1. <?php
  2. Lib::loadClass('Core_AclSimpleSchemaBase');
  3. Lib::loadClass('ParseOgcFilter');
  4. Lib::loadClass('Router');
  5. Lib::loadClass('SchemaVersionUpgrade');
  6. class Schema_PrzypomnijStorageAcl extends Core_AclSimpleSchemaBase {
  7. public $_simpleSchema = [
  8. 'root' => [
  9. '@namespace' => 'default_objects/Przypomnij',
  10. '@primaryKey' => 'feature_id',
  11. // col: Typ rekordu / ID
  12. 'feature_id' => [ '@type' => 'xsd:string' ], // eg.: "PROBLEMS.123"
  13. 'namespace' => [ '@type' => 'xsd:string' ], // eg.: "default_db/PROBLEMS"
  14. 'primaryKey' => [ '@type' => 'xsd:integer' ], // eg.: 123
  15. 'A_STATUS' => [ '@type' => 'xsd:string' ],
  16. 'featureType' => [ '@type' => 'xsd:string' ], // eg.: Zasob.TYPE, Projekt.M_DIST_TYPE, etc.
  17. 'featureDesc' => [ '@type' => 'xsd:string' ], // eg.: Zasob.DESC, Projekt.M_DIST_DESC, etc.
  18. 'L_APPOITMENT_USER' => [ '@type' => 'xsd:string' ], // Osoba odpowiedzialna
  19. 'A_ADM_COMPANY' => [ '@type' => 'xsd:string' ],
  20. 'A_CLASSIFIED' => [ '@type' => 'xsd:string' ],
  21. // col: Termin wykonania / Opis działań do wykonania
  22. 'L_APPOITMENT_DATE' => [ '@type' => 'xsd:dateTime' ], // Termin wykonania
  23. 'L_APPOITMENT_INFO' => [ '@type' => 'xsd:string' ], // Opis działań do wykonania
  24. // Firma powiąz. / adres / opis-temat
  25. // Lokalizacja
  26. 'PROJECT__ID' => [ '@type' => "xsd:int" ],
  27. 'PROJECT__L_APPOITMENT_USER' => [ '@type' => "xsd:string" ],
  28. 'USER__IS_ACTIVE' => [ '@type' => "xsd:int" ],
  29. // 'idZasob' => [ '@type' => 'xsd:integer' ],
  30. // 'idDatabase' => [ '@type' => 'xsd:integer' ],
  31. // '_rootTableName' => [ '@type' => 'xsd:string' ],
  32. // '_type' => [ '@type' => 'xsd:string' ],
  33. // 'hasStruct' => [ '@type' => 'xsd:integer' ], // 0 - removed, old, 1 - has config, structure
  34. // 'isStructInstalled' => [ '@type' => 'xsd:integer' ], // installed
  35. // 'isObjectActive' => [ '@type' => 'xsd:integer' ], // (0,1) - admin settings with restrictions: (hasStruct, isStructInstalled, all fields installed and with idZasob)
  36. // 'description' => [ '@type' => 'xsd:string' ],
  37. // 'name' => [ '@type' => 'p5:string' ],
  38. // 'typeName' => [ '@type' => 'p5:string' ],
  39. // 'nsPrefix' => [ '@type' => 'p5:string' ],
  40. // 'reinstallLink' => [ '@type' => 'p5:www_link' ],
  41. // 'instanceTableSource' => [ '@type' => 'xsd:string' ], // enum('table', 'view') default 'view'
  42. // 'A_RECORD_CREATE_AUTHOR' => [ '@type' => 'xsd:string' , '@label' => 'autor' ],
  43. // 'A_RECORD_CREATE_DATE' => [ '@type' => 'xsd:date' , '@label' => 'utworzono' ],
  44. // 'A_RECORD_UPDATE_AUTHOR' => [ '@type' => 'xsd:string' , '@label' => 'zaktualizował' ],
  45. // 'A_RECORD_UPDATE_DATE' => [ '@type' => 'xsd:date', '@label' => 'zaktualizowano' ],
  46. ]
  47. ];
  48. // public $_rootTableName = 'CRM_LISTA_ZASOBOW';
  49. public $_rootTableName = '_PRZYPOMNIJ_ITEMS';
  50. static function _createItemsTable() {
  51. DB::getPDO()->execSql("
  52. CREATE TABLE IF NOT EXISTS `_PRZYPOMNIJ_ITEMS` (
  53. `L_APPOITMENT_USER` varchar(255) NOT NULL default '',
  54. `A_ADM_COMPANY` varchar(255) NOT NULL default '',
  55. `A_CLASSIFIED` varchar(255) NOT NULL default '',
  56. `feature_id` varchar(255) NOT NULL,
  57. `namespace` varchar(255) NOT NULL default '',
  58. `primaryKey` varchar(255) NOT NULL default '',
  59. `A_STATUS` varchar(16) NOT NULL default '',
  60. `featureType` varchar(32) NOT NULL default '',
  61. `featureDesc` varchar(255) NOT NULL default '',
  62. `L_APPOITMENT_DATE` dateTime DEFAULT NULL,
  63. `L_APPOITMENT_INFO` varchar(255) NOT NULL default '',
  64. `PROJECT__ID` int(11) NOT NULL DEFAULT 0,
  65. `PROJECT__L_APPOITMENT_USER` varchar(255) NOT NULL default '',
  66. `USER__IS_ACTIVE` tinyint(1) NOT NULL DEFAULT 0,
  67. PRIMARY KEY (`feature_id`),
  68. KEY `namespace` (`namespace`),
  69. KEY `L_APPOITMENT_USER` (`L_APPOITMENT_USER`),
  70. KEY `A_ADM_COMPANY` (`A_ADM_COMPANY`),
  71. KEY `A_CLASSIFIED` (`A_CLASSIFIED`)
  72. -- `ID_PROJECT` int(11) NOT NULL,
  73. -- `_l_app_user` varchar(40) NOT NULL DEFAULT '',
  74. -- `P_ID` varchar(20) NOT NULL DEFAULT '0',
  75. -- `A_RECORD_CREATE_DATE` datetime NOT NULL,
  76. -- `A_RECORD_CREATE_AUTHOR` varchar(40) NOT NULL DEFAULT '',
  77. -- `A_RECORD_UPDATE_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  78. -- `A_RECORD_UPDATE_AUTHOR` varchar(40) NOT NULL DEFAULT '',
  79. -- `L_APPOITMENT_DATE` varchar(30) NOT NULL DEFAULT '',
  80. -- `L_APPOITMENT_USER` varchar(40) NOT NULL DEFAULT '',
  81. -- `L_APPOITMENT_INFO` varchar(200) NOT NULL DEFAULT '',
  82. -- `L_CALENDAR` enum('NO','YES') NOT NULL DEFAULT 'NO',
  83. -- `A_STATUS` enum('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED') NOT NULL DEFAULT 'WAITING',
  84. -- `M_DIST_DATE` date NOT NULL DEFAULT '0000-00-00',
  85. -- `M_DIST_TYPE` varchar(64) NOT NULL DEFAULT 'INNE',
  86. -- `M_DIST_DESC` varchar(255) NOT NULL DEFAULT '',
  87. -- `M_DISTRIBUTOR` varchar(200) NOT NULL DEFAULT '',
  88. -- KEY `ID_PROJECT` (`ID_PROJECT`)
  89. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  90. ");
  91. }
  92. function __construct() {
  93. parent::__construct($this->_simpleSchema);
  94. $this->idUser = User::getID(); // default - current user
  95. }
  96. function onBeforeFetchData() {
  97. self::updateCacheIfNeeded();
  98. }
  99. static function updateCacheIfNeeded() {
  100. static $_checked = false;
  101. if ($_checked) return;
  102. $confKeyLastUpdateDate = 'Schema_PrzypomnijStorageAcl::lastUpdateDate';
  103. $lastUpdateDate = DB::getPDO()->fetchValue(" select CONF_VAL from CRM_CONFIG where CONF_KEY = :conf_key ", [ ':conf_key' => $confKeyLastUpdateDate ]);
  104. $tablesList = [];
  105. $tablesList[] = '_PRZYPOMNIJ_ITEMS'; // to check if tables exists
  106. $tablesList[] = '_PRZYPOMNIJ_PROJECT_TREE'; // to check if tables exists
  107. $tablesList[] = '_PRZYPOMNIJ_ACTIVE_USERS'; // to check if tables exists
  108. $tablesList[] = 'IN7_MK_BAZA_DYSTRYBUCJI';
  109. $tablesList[] = 'IN7_DZIENNIK_KORESP';
  110. $tablesList[] = 'CRM_PROCES';
  111. $tablesList[] = 'PROBLEMS';
  112. $tablesList[] = 'CRM_LISTA_ZASOBOW';
  113. $tablesList[] = 'MK_Rewiry';
  114. $tablesList[] = 'BUILDINGS';
  115. $tablesList[] = 'QUALITY_NOTICES';
  116. $tablesList[] = 'BADANIA_W_TERENIE';
  117. $sqlTableList = implode(", ", array_map(function ($table) { return "'{$table}'"; }, $tablesList));
  118. $tablesUpdateDates = DB::getPDO()->fetchValuesListByKey("
  119. select IF( UPDATE_TIME > :last_update_date, 1, 0 ) as TO_UPDATE
  120. , TABLE_NAME
  121. , UPDATE_TIME
  122. from information_schema.tables
  123. where TABLE_SCHEMA = :db_name
  124. and TABLE_NAME in({$sqlTableList})
  125. ", $key = 'TABLE_NAME', [
  126. ':db_name' => DB::getPDO()->getDatabaseName(),
  127. ':last_update_date' => $lastUpdateDate,
  128. ]);
  129. DBG::log($tablesUpdateDates, 'array', "DBG::Przypomnij: \$tablesUpdateDates 1");
  130. if (!array_key_exists('_PRZYPOMNIJ_ITEMS', $tablesUpdateDates)) {
  131. self::_createItemsTable();
  132. $tablesUpdateDates = array_map(function ($value) { return 1; }, $tablesUpdateDates);
  133. }
  134. if (!array_key_exists('_PRZYPOMNIJ_PROJECT_TREE', $tablesUpdateDates)
  135. || $tablesUpdateDates['IN7_MK_BAZA_DYSTRYBUCJI']
  136. ) {
  137. if (!array_key_exists('_PRZYPOMNIJ_PROJECT_TREE', $tablesUpdateDates)) {
  138. self::_createProjectsTreeTable();
  139. }
  140. if (self::_isProjectsOwnerChanged()) {
  141. self::_updateProjectsTreeTable();
  142. }
  143. // $tablesUpdateDates = array_map(function ($value) { return 1; }, $tablesUpdateDates); // moved to mass update
  144. }
  145. if (!array_key_exists('_PRZYPOMNIJ_ACTIVE_USERS', $tablesUpdateDates)
  146. || $tablesUpdateDates['ADMIN_USERS']
  147. ) {
  148. if (!array_key_exists('_PRZYPOMNIJ_ACTIVE_USERS', $tablesUpdateDates)) {
  149. self::_createUsersTable();
  150. }
  151. if (self::_isUsersChanged()) {
  152. self::_updateUsersStatusTable();
  153. }
  154. // $tablesUpdateDates = array_map(function ($value) { return 1; }, $tablesUpdateDates); // moved to mass update
  155. }
  156. DBG::log($tablesUpdateDates, 'array', "DBG::Przypomnij: \$tablesUpdateDates 2");
  157. $tablesToUpdate = array_keys(
  158. array_filter($tablesUpdateDates, function ($value) { return $value; })
  159. );
  160. $tablesToUpdate = array_filter($tablesToUpdate, function ($tableName) { return ( '_PRZYPOMNIJ_' !== substr($tableName, 0, strlen('_PRZYPOMNIJ_')) ); });
  161. DBG::log($tablesToUpdate, 'array', "DBG::Przypomnij: \$tablesToUpdate");
  162. foreach ($tablesToUpdate as $tableName) self::_updateForTable($tableName);
  163. if (!array_key_exists('_PRZYPOMNIJ_PROJECT_TREE', $tablesUpdateDates)
  164. || $tablesUpdateDates['IN7_MK_BAZA_DYSTRYBUCJI']
  165. ) {
  166. self::_updateLAppUserByProjectsTree();
  167. }
  168. if (!array_key_exists('_PRZYPOMNIJ_ACTIVE_USERS', $tablesUpdateDates)
  169. || $tablesUpdateDates['ADMIN_USERS']
  170. || !empty($tablesToUpdate) // update if anything updates
  171. ) {
  172. self::_updateUserStatus();
  173. }
  174. DB::getPDO()->insertOrUpdate('CRM_CONFIG', [
  175. 'CONF_KEY' => $confKeyLastUpdateDate,
  176. '@insert' => [
  177. 'CONF_VAL' => "NOW()",
  178. ],
  179. '@update' => [
  180. 'CONF_VAL' => "NOW()",
  181. ]
  182. ]);
  183. $_checked = true;
  184. }
  185. static function _updateForTable($tableName) {
  186. $namespace = "default_db/{$tableName}";
  187. if ('CRM_LISTA_ZASOBOW' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  188. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  189. DB::getPDO()->execSql("
  190. insert into `_PRZYPOMNIJ_ITEMS` (
  191. `feature_id`, `namespace`, `primaryKey`
  192. , `A_STATUS`, `featureType`, `featureDesc`
  193. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  194. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  195. )
  196. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  197. , t.`A_STATUS`
  198. , t.`TYPE` as `featureType`
  199. , t.`DESC` as `featureDesc`
  200. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  201. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  202. from `CRM_LISTA_ZASOBOW` as t
  203. where t.`A_STATUS` in ('NORMAL', 'WAITING')
  204. and t.`L_APPOITMENT_DATE` != ''
  205. and t.`L_APPOITMENT_USER` != ''
  206. ", [
  207. ':namespace' => $namespace,
  208. ':table_name' => $tableName,
  209. ]);
  210. }
  211. else if ('CRM_PROCES' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  212. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  213. DB::getPDO()->execSql("
  214. insert into `_PRZYPOMNIJ_ITEMS` (
  215. `feature_id`, `namespace`, `primaryKey`
  216. , `A_STATUS`, `featureType`, `featureDesc`
  217. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  218. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  219. )
  220. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  221. , t.`A_STATUS`
  222. , t.`TYPE` as `featureType`
  223. , t.`DESC` as `featureDesc`
  224. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  225. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  226. from `CRM_PROCES` as t
  227. where t.`A_STATUS` in ('NORMAL', 'WAITING')
  228. and t.`TYPE` = 'PROCES_INIT'
  229. and t.`L_APPOITMENT_DATE` != ''
  230. and t.`L_APPOITMENT_USER` != ''
  231. ", [
  232. ':namespace' => $namespace,
  233. ':table_name' => $tableName,
  234. ]);
  235. }
  236. else if ('IN7_DZIENNIK_KORESP' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  237. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  238. DB::getPDO()->execSql("
  239. insert into `_PRZYPOMNIJ_ITEMS` (
  240. `feature_id`, `namespace`, `primaryKey`
  241. , `A_STATUS`, `featureType`, `featureDesc`
  242. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  243. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  244. , `PROJECT__ID`
  245. )
  246. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  247. , t.`A_STATUS`
  248. , concat(t.`K_TYP_KORESP`, '-', t.`K_TYP_RODZAJ`) as `featureType`
  249. , concat('<strong>', t.`K_OD_KOGO`, '</strong><br><em>', t.`OD_KOGO_ADRES`, '</em><br>', t.`K_ZAWARTOS`) as `featureDesc`
  250. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  251. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  252. , t.`ID_PROJECT` as PROJECT__ID
  253. from `IN7_DZIENNIK_KORESP` as t
  254. where t.`A_STATUS` not in ('OFF_HARD', 'DELETED')
  255. ", [
  256. ':namespace' => $namespace,
  257. ':table_name' => $tableName,
  258. ]);
  259. }
  260. else if ('IN7_MK_BAZA_DYSTRYBUCJI' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  261. // TODO: 'M_DIST_DESC' => htmlspecialchars($row['M_DIST_DESC']), // TODO: fix bug in html a href inside M_DIST_DES
  262. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  263. DB::getPDO()->execSql("
  264. insert into `_PRZYPOMNIJ_ITEMS` (
  265. `feature_id`, `namespace`, `primaryKey`
  266. , `A_STATUS`, `featureType`, `featureDesc`
  267. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  268. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  269. , `PROJECT__ID`
  270. )
  271. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  272. , t.`A_STATUS`
  273. , t.`M_DIST_TYPE` as `featureType`
  274. , t.`M_DIST_DESC` as `featureDesc`
  275. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  276. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  277. , t.`P_ID` as PROJECT__ID
  278. from `IN7_MK_BAZA_DYSTRYBUCJI` as t
  279. where t.`A_STATUS` not in ('OFF_HARD', 'DELETED')
  280. ", [
  281. ':namespace' => $namespace,
  282. ':table_name' => $tableName,
  283. ]);
  284. }
  285. else if ('PROBLEMS' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  286. // TODO: 'A_PROBLEM_DESC' => htmlspecialchars($row['A_PROBLEM_DESC']),
  287. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  288. DB::getPDO()->execSql("
  289. insert into `_PRZYPOMNIJ_ITEMS` (
  290. `feature_id`, `namespace`, `primaryKey`
  291. , `A_STATUS`, `featureType`, `featureDesc`
  292. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  293. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  294. , `PROJECT__ID`
  295. )
  296. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  297. , t.`A_STATUS`
  298. , '' as `featureType`
  299. , t.`A_PROBLEM_DESC` as `featureDesc`
  300. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  301. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  302. , t.`ID_PROJECT` as PROJECT__ID
  303. from `PROBLEMS` as t
  304. where t.`A_STATUS` not in ('OFF_HARD', 'DELETED')
  305. and t.`L_APPOITMENT_DATE` != ''
  306. and t.`L_APPOITMENT_USER` != ''
  307. ", [
  308. ':namespace' => $namespace,
  309. ':table_name' => $tableName,
  310. ]);
  311. }
  312. else if ('MK_Rewiry' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  313. // TODO: 'A_PROBLEM_DESC' => htmlspecialchars($row['A_PROBLEM_DESC']),
  314. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  315. DB::getPDO()->execSql("
  316. insert into `_PRZYPOMNIJ_ITEMS` (
  317. `feature_id`, `namespace`, `primaryKey`
  318. , `A_STATUS`, `featureType`, `featureDesc`
  319. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  320. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  321. , `PROJECT__ID`
  322. )
  323. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  324. , t.`A_STATUS`
  325. , '' as `featureType`
  326. , t.`L_APPOITMENT_INFO` as `featureDesc`
  327. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  328. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  329. , t.`ID_PROJECT` as PROJECT__ID
  330. from `MK_Rewiry` as t
  331. where t.`A_STATUS` not in ('OFF_HARD', 'DELETED')
  332. and t.`L_APPOITMENT_DATE` != ''
  333. and t.`L_APPOITMENT_USER` != ''
  334. ", [
  335. ':namespace' => $namespace,
  336. ':table_name' => $tableName,
  337. ]);
  338. }
  339. else if ('BUILDINGS' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  340. // TODO: 'A_PROBLEM_DESC' => htmlspecialchars($row['A_PROBLEM_DESC']),
  341. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  342. DB::getPDO()->execSql("
  343. insert into `_PRZYPOMNIJ_ITEMS` (
  344. `feature_id`, `namespace`, `primaryKey`
  345. , `A_STATUS`, `featureType`, `featureDesc`
  346. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  347. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  348. , `PROJECT__ID`
  349. )
  350. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  351. , t.`A_STATUS`
  352. , '' as `featureType`
  353. , t.`L_APPOITMENT_INFO` as `featureDesc`
  354. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  355. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  356. , t.`ID_PROJECT` as PROJECT__ID
  357. from `BUILDINGS` as t
  358. where t.`A_STATUS` not in ('OFF_HARD', 'DELETED')
  359. and t.`L_APPOITMENT_DATE` != ''
  360. and t.`L_APPOITMENT_USER` != ''
  361. ", [
  362. ':namespace' => $namespace,
  363. ':table_name' => $tableName,
  364. ]);
  365. }
  366. else if ('QUALITY_NOTICES' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  367. // TODO: 'A_PROBLEM_DESC' => htmlspecialchars($row['A_PROBLEM_DESC']),
  368. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  369. DB::getPDO()->execSql("
  370. insert into `_PRZYPOMNIJ_ITEMS` (
  371. `feature_id`, `namespace`, `primaryKey`
  372. , `A_STATUS`, `featureType`, `featureDesc`
  373. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  374. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  375. , `PROJECT__ID`
  376. )
  377. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  378. , t.`A_STATUS`
  379. , t.`NOTICE_INITIAL_TYPE` as `featureType`
  380. , t.`NOTICE_REQUEST` as `featureDesc`
  381. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  382. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  383. , 0 as PROJECT__ID
  384. from `QUALITY_NOTICES` as t
  385. where t.`A_STATUS` not in ('OFF_HARD', 'DELETED')
  386. and t.`L_APPOITMENT_DATE` != ''
  387. and t.`L_APPOITMENT_USER` != ''
  388. ", [
  389. ':namespace' => $namespace,
  390. ':table_name' => $tableName,
  391. ]);
  392. }
  393. else if ('BADANIA_W_TERENIE' === $tableName) { // TODO: getUpdateConfigForTable($tableName);
  394. // TODO: 'A_PROBLEM_DESC' => htmlspecialchars($row['A_PROBLEM_DESC']),
  395. DB::getPDO()->execSql(" DELETE from `_PRZYPOMNIJ_ITEMS` where `namespace` = :namespace ", [ ':namespace' => $namespace ]);
  396. DB::getPDO()->execSql("
  397. insert into `_PRZYPOMNIJ_ITEMS` (
  398. `feature_id`, `namespace`, `primaryKey`
  399. , `A_STATUS`, `featureType`, `featureDesc`
  400. , `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`
  401. , `L_APPOITMENT_DATE`, `L_APPOITMENT_INFO`
  402. , `PROJECT__ID`
  403. )
  404. select concat( :table_name , '.', t.ID) as `feature_id`, :namespace as `namespace`, t.ID as `primaryKey`
  405. , t.`A_STATUS`
  406. , '' as `featureType`
  407. , t.`L_APPOITMENT_INFO` as `featureDesc`
  408. , t.`L_APPOITMENT_USER`, t.`A_ADM_COMPANY`, t.`A_CLASSIFIED`
  409. , t.`L_APPOITMENT_DATE`, t.`L_APPOITMENT_INFO`
  410. , 0 as PROJECT__ID
  411. from `BADANIA_W_TERENIE` as t
  412. where t.`A_STATUS` not in ('OFF_HARD', 'DELETED')
  413. and t.`L_APPOITMENT_DATE` != ''
  414. and t.`L_APPOITMENT_USER` != ''
  415. ", [
  416. ':namespace' => $namespace,
  417. ':table_name' => $tableName,
  418. ]);
  419. }
  420. else if ('_PRZYPOMNIJ_ITEMS' === $tableName) {}
  421. else if ('_PRZYPOMNIJ_PROJECT_TREE' === $tableName) {}
  422. else {
  423. throw new Exception("TODO: (default_objects/Przypomnij)::_updateForTable({$tableName})");
  424. }
  425. }
  426. static function _createUsersTable() {
  427. DB::getPDO()->execSql("
  428. CREATE TABLE IF NOT EXISTS `_PRZYPOMNIJ_ACTIVE_USERS` (
  429. `ADM_ACCOUNT` varchar(20) NOT NULL,
  430. UNIQUE KEY `ADM_ACCOUNT` (`ADM_ACCOUNT`)
  431. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  432. ");
  433. }
  434. static function _isUsersChanged() {
  435. return ( DB::getPDO()->fetchValue("
  436. select count(1) as total
  437. -- u.ID as u__ID, u.ADM_ACCOUNT as u__ADM_ACCOUNT, t.*
  438. from ADMIN_USERS u
  439. left join _PRZYPOMNIJ_ACTIVE_USERS t on ( t.ADM_ACCOUNT = u.ADM_ACCOUNT )
  440. where t.ADM_ACCOUNT is null
  441. ") > 0);
  442. }
  443. static function _updateUsersStatusTable() {
  444. DB::getPDO()->execSql(" truncate table `_PRZYPOMNIJ_ACTIVE_USERS` ");
  445. DB::getPDO()->execSql("
  446. insert into `_PRZYPOMNIJ_ACTIVE_USERS` (`ADM_ACCOUNT`)
  447. select `ADM_ACCOUNT`
  448. from `ADMIN_USERS`
  449. where A_STATUS = 'NORMAL'
  450. ");
  451. }
  452. static function _updateUserStatus() {
  453. DB::getPDO()->execSql("
  454. update `_PRZYPOMNIJ_ITEMS` as i
  455. left join `_PRZYPOMNIJ_ACTIVE_USERS` as u on ( u.ADM_ACCOUNT = i.L_APPOITMENT_USER )
  456. set i.USER__IS_ACTIVE = IF(u.ADM_ACCOUNT is null, 0, 1)
  457. where i.L_APPOITMENT_USER != ''
  458. ");
  459. }
  460. static function _createProjectsTreeTable() {
  461. DB::getPDO()->execSql("
  462. CREATE TABLE IF NOT EXISTS `_PRZYPOMNIJ_PROJECT_TREE` (
  463. `ID_PROJECT` int(11) NOT NULL,
  464. `P_ID` int(11) NOT NULL DEFAULT 0,
  465. `L_APPOITMENT_USER` varchar(40) NOT NULL DEFAULT '',
  466. `_l_app_user` varchar(40) NOT NULL DEFAULT '',
  467. UNIQUE KEY `ID_PROJECT` (`ID_PROJECT`),
  468. KEY `P_ID` (`P_ID`)
  469. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  470. ");
  471. }
  472. static function _isProjectsOwnerChanged() {
  473. return ( DB::getPDO()->fetchValue("
  474. select count(1) as total
  475. -- p.ID as p__ID, p.L_APPOITMENT_USER as p__L_APPOITMENT_USER, t.*
  476. from IN7_MK_BAZA_DYSTRYBUCJI p
  477. left join _PRZYPOMNIJ_PROJECT_TREE t on ( t.ID_PROJECT = p.ID )
  478. where (
  479. t.L_APPOITMENT_USER is null
  480. or p.L_APPOITMENT_USER != t.L_APPOITMENT_USER
  481. )
  482. ") > 0);
  483. }
  484. static function _updateProjectsTreeTable() {
  485. DB::getPDO()->execSql(" truncate table `_PRZYPOMNIJ_PROJECT_TREE` ");
  486. DB::getPDO()->execSql("
  487. insert into `_PRZYPOMNIJ_PROJECT_TREE` (`ID_PROJECT`,`P_ID`,`_l_app_user`,`L_APPOITMENT_USER`)
  488. select `ID`,`P_ID`,`L_APPOITMENT_USER`,`L_APPOITMENT_USER`
  489. from `IN7_MK_BAZA_DYSTRYBUCJI`
  490. where 1=1
  491. ");
  492. // test recurse update l_app
  493. $sql = "
  494. select c._l_app_user
  495. , p.L_APPOITMENT_USER
  496. , p1.L_APPOITMENT_USER
  497. , p2.L_APPOITMENT_USER
  498. , p3.L_APPOITMENT_USER
  499. , p4.L_APPOITMENT_USER
  500. , p5.L_APPOITMENT_USER
  501. , p.ID
  502. , p1.ID
  503. , p2.ID
  504. , p3.ID
  505. , p4.ID
  506. , p5.ID
  507. from `_PRZYPOMNIJ_PROJECT_TREE` as c
  508. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p on (p.ID=c.ID_PROJECT)
  509. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p1 on (p1.ID=p.P_ID)
  510. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p2 on (p2.ID=p1.P_ID)
  511. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p3 on (p3.ID=p2.P_ID)
  512. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p4 on (p4.ID=p3.P_ID)
  513. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p5 on (p5.ID=p4.P_ID)
  514. where c.`_l_app_user`=''
  515. ";
  516. // for i to recurse limit
  517. $sql = "
  518. update `_PRZYPOMNIJ_PROJECT_TREE` as c
  519. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p on (p.ID=c.ID_PROJECT)
  520. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p1 on (p1.ID=p.P_ID)
  521. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p2 on (p2.ID=p1.P_ID)
  522. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p3 on (p3.ID=p2.P_ID)
  523. -- left join `IN7_MK_BAZA_DYSTRYBUCJI` as p4 on (p4.ID=p3.P_ID)
  524. -- left join `IN7_MK_BAZA_DYSTRYBUCJI` as p5 on (p5.ID=p4.P_ID)
  525. set
  526. c.`_l_app_user`=IF(p.`L_APPOITMENT_USER`!='', p.`L_APPOITMENT_USER`
  527. , IF(p1.`L_APPOITMENT_USER`!='', p1.`L_APPOITMENT_USER`
  528. , IF(p2.`L_APPOITMENT_USER`!='', p2.`L_APPOITMENT_USER`
  529. , IF(p3.`L_APPOITMENT_USER`!='', p3.`L_APPOITMENT_USER`
  530. -- , IF(p4.`L_APPOITMENT_USER`!='', p4.`L_APPOITMENT_USER`
  531. -- , IF(p5.`L_APPOITMENT_USER`!='', p5.`L_APPOITMENT_USER`
  532. , ''
  533. -- )
  534. -- )
  535. )
  536. )
  537. )
  538. )
  539. where c.`_l_app_user`=''
  540. ";
  541. DB::getPDO()->execSql($sql);
  542. }
  543. static function _updateLAppUserByProjectsTree() {
  544. DB::getPDO()->execSql("
  545. update `_PRZYPOMNIJ_ITEMS` as i
  546. join `_PRZYPOMNIJ_PROJECT_TREE` as t on ( t.ID_PROJECT = i.PROJECT__ID )
  547. set i.PROJECT__L_APPOITMENT_USER = t._l_app_user
  548. where i.PROJECT__ID > 0
  549. ");
  550. }
  551. // function getTotal($params = []) {
  552. // self::updateCacheIfNeeded();
  553. // $sqlWhere = $this->_parseWhere($params);
  554. // return DB::getPDO()->fetchValue("
  555. // select count(1) as cnt
  556. // from `{$this->_rootTableName}` t
  557. // {$sqlWhere}
  558. // ");
  559. // }
  560. // function getItem($pk, $params = []) {
  561. // self::updateCacheIfNeeded();
  562. // if (!$pk) throw new Exception("Missing primary key '{$this->_namespace}'");
  563. // $pkField = $this->getSqlPrimaryKeyField();
  564. // if (!$pkField) throw new Exception("Missing primary key field defined in '{$this->_namespace}'");
  565. // $item = DB::getPDO()->fetchFirst("
  566. // select t.*
  567. // from `{$this->_rootTableName}` t
  568. // where t.`{$pkField}` = :pk
  569. // ", [ ':pk' => $pk ]);
  570. // if (!$item) throw new Exception("Item '{$pk}' not exists - type '{$this->_namespace}'");
  571. // return $this->buildFeatureFromSqlRow($item, $params);
  572. // }
  573. //
  574. // function getItems($params = []) {
  575. // self::updateCacheIfNeeded();
  576. // $sqlWhere = $this->_parseWhere($params);
  577. //
  578. // $currSortCol = V::get('order_by', 'feature_id', $params);
  579. // $currSortFlip = strtolower(V::get('order_dir', 'desc', $params));
  580. // // TODO: validate $currSortCol is in field list
  581. // // TODO: validate $currSortFlip ('asc' or 'desc')
  582. // $xsdFields = $this->getXsdTypes();
  583. // if (!array_key_exists($currSortCol, $xsdFields)) throw new Exception("Field '{$currSortCol}' not found in '{$this->_namespace}'");
  584. // if (!in_array($currSortFlip, ['asc', 'desc'])) throw new Exception("Sort dir not allowed");
  585. // $sqlOrderBy = "order by t.`{$currSortCol}` {$currSortFlip}";
  586. //
  587. // $limit = V::get('limit', 0, $params, 'int');
  588. // $limit = ($limit < 0) ? 0 : $limit;
  589. // $offset = V::get('limitstart', 0, $params, 'int');
  590. // $offset = ($offset < 0) ? 0 : $offset;
  591. // $sqlLimit = ($limit > 0)
  592. // ? "limit {$limit} offset {$offset}"
  593. // : '';
  594. //
  595. // Lib::loadClass('AclQueryItems');
  596. // $query = new AclQueryItems($this);
  597. // $query->setParams($params);
  598. // $query->setSource('default_db');
  599. // $query->setRawSql("
  600. // select t.*
  601. // from `{$this->_rootTableName}` t
  602. // {$sqlWhere}
  603. // {$sqlOrderBy}
  604. // {$sqlLimit}
  605. // ");
  606. // return array_map(function ($item) use ($params) {
  607. // return $this->buildFeatureFromSqlRow($item, $params);
  608. // }, $query->fetchAll());
  609. // }
  610. function buildQuery($params = array()) {
  611. Lib::loadClass('AclQueryFeatures');
  612. return new AclQueryFeatures($this, $params, $legacyMode = false);
  613. }
  614. function _parseWhere($params = []) {
  615. $sqlWhere = [];
  616. DBG::log($params, 'array', "SystemObject::_parseWhere");
  617. // if (!empty($params['#refFrom'])) {
  618. // // '#refFrom' => [
  619. // // 'namespace' => 'default_objects/SystemSource',
  620. // // 'primaryKey' => $sourceItem['idZasob']
  621. // // ]
  622. // if (empty($params['#refFrom']['namespace'])) throw new Exception("Missing refFrom/namespace");
  623. // if (empty($params['#refFrom']['primaryKey'])) throw new Exception("Missing refFrom/primaryKey");
  624. //
  625. // if ('default_objects/SystemSource' != $params['#refFrom']['namespace']) throw new Exception("Unsupported refFrom/namespace '{$params['#refFrom']['namespace']}'");
  626. // $sqlWhere[] = "t.idDatabase = " . DB::getPDO()->quote($params['#refFrom']['primaryKey'], PDO::PARAM_INT);
  627. // }
  628. {
  629. $filterParams = [];
  630. $xsdFields = $this->getXsdTypes();
  631. foreach ($params as $k => $v) {
  632. if ('f_' != substr($k, 0, 2)) continue;
  633. $fieldName = substr($k, 2);
  634. if (!array_key_exists($fieldName, $xsdFields)) {
  635. // TODO: check query by xpath or use different param prefix
  636. throw new Exception("Field '{$fieldName}' not found in '{$this->_namespace}'");
  637. }
  638. if ('p5:www_link' == $xsdFields[$fieldName]) {
  639. continue;
  640. }
  641. $filterParams[$fieldName] = $v;
  642. }
  643. }
  644. if (!empty($filterParams)) {
  645. DBG::log($filterParams, 'array', "SystemObject::_parseWhere TODO \$filterParams");
  646. foreach ($filterParams as $fieldName => $value) {
  647. if (is_array($value)) {
  648. DBG::log($value, 'array', "TODO SystemObject::_parseWhere array value for \$filterParams[{$fieldName}]");
  649. } else if (is_scalar($value)) {
  650. if ('=' == substr($value, 0, 1)) {
  651. $sqlWhere[] = "t.{$fieldName} = " . DB::getPDO()->quote(substr($value, 1), PDO::PARAM_STR);
  652. } else {
  653. $sqlWhere[] = "t.{$fieldName} like " . DB::getPDO()->quote("%{$value}%", PDO::PARAM_STR);
  654. }
  655. } else {
  656. DBG::log($value, 'array', "BUG SystemObject::_parseWhere unknown type for \$filterParams[{$fieldName}]");
  657. }
  658. }
  659. }
  660. { // acl fields
  661. $sqlWhere[] = "t.{$fieldName} like " . DB::getPDO()->quote("%{$value}%", PDO::PARAM_STR);
  662. }
  663. return (!empty($sqlWhere)) ? "where " . implode(" and ", $sqlWhere) : '';
  664. }
  665. function buildFeatureFromSqlRow($item, $params = []) {
  666. // DBG::log($params, 'array', "buildFeatureFromSqlRow... '{$item['namespace']}'");
  667. // $exNs = explode('/', $item['namespace']);
  668. // $item['name'] = array_pop($exNs);
  669. // $item['nsPrefix'] = implode('__x3A__', $exNs);
  670. // $item['typeName'] = implode('__x3A__', $exNs) . ':' . $item['name'];
  671. // $item['reinstallLink'] = Router::getRoute('Storage_AclReinstall')->getLink('', [ 'namespace' => $item['namespace'] ]);
  672. // if (!empty($params['propertyName'])) {
  673. // if (is_string($params['propertyName'])) $params['propertyName'] = explode(',', $params['propertyName']);
  674. // if (!is_array($params['propertyName'])) throw new Exception("Wrong param propertyName - expected array or string");
  675. // foreach ($params['propertyName'] as $fetchField) {
  676. // if ('*' == $fetchField) continue;
  677. // if ('field' == $fetchField) {
  678. // $item['field'] = SchemaFactory::loadDefaultObject('SystemObjectField')->getItems([
  679. // '__backRef' => [
  680. // 'namespace' => 'default_objects/SystemObject',
  681. // 'primaryKey' => $item['namespace']
  682. // ],
  683. // 'order_by' => 'sortPrio',
  684. // 'order_dir' => 'asc',
  685. // ]);
  686. // }
  687. // }
  688. // }
  689. return $item;
  690. }
  691. // function updateItem($itemPatch) { // @required [ 'namespace' => ... ] (primaryKey)
  692. // $pkField = $this->getPrimaryKeyField();
  693. // $pk = V::get($pkField, null, $itemPatch);
  694. // if (null === $pk) throw new Exception("BUG missing primary key field for '{$this->_namespace}' updateItem");
  695. // $this->clearGetItemCache($pk);
  696. // DBG::log(['updateItem $itemPatch', $itemPatch]);
  697. // unset($itemPatch[$pkField]);
  698. // if (empty($itemPatch)) return 0;
  699. // foreach ($itemPatch as $fieldName => $value) {
  700. // if ('isStructInstalled' == $fieldName) continue;
  701. // if ('isObjectActive' == $fieldName) continue;
  702. // if ('primaryKey' == $fieldName) continue;
  703. // if ('appInfo' == $fieldName) continue;
  704. // throw new Exception("Update field '{$fieldName}' not allowed for '{$this->_namespace}'");
  705. // }
  706. // return DB::getPDO()->update($this->_rootTableName, $pkField, $pk, $itemPatch);
  707. // }
  708. // TODO: to use in AclQueryFeatures
  709. function getDB() { return DB::getPDO()->getZasobId(); }
  710. function getLocalFieldList() {
  711. return array_filter(array_keys($this->_simpleSchema['root']), function ($fieldName) {
  712. if ( '@' == substr($fieldName, 0, 1)) return false;
  713. return true;
  714. });
  715. }
  716. function hasWriteGroupField() { return $this->_hasWriteGroupField; }
  717. function hasReadGroupField() { return $this->_hasReadGroupField; }
  718. function hasOwnerField() { return $this->_hasOwnerField; }
  719. function isLocalField($fieldName) {
  720. return in_array($fieldName, array_keys($this->_simpleSchema['root']));
  721. }
  722. // TODO: to use in AclQueryFeatures
  723. function parseSpecialFilter($filterName, $value) { // @return string | array | null
  724. switch ($filterName) {
  725. case 'UserStatus': return $this->_parseSpecialFilterUserStatus($value);
  726. case 'ns': return $this->_parseSpecialFilterNamespace($value);
  727. case 'time': return $this->_parseSpecialFilterTime($value);
  728. default: return null;
  729. }
  730. }
  731. function _parseSpecialFilterUserStatus($value) {
  732. switch ($value) {
  733. case 'IS_ACTIVE': return ['USER__IS_ACTIVE', '=', '1'];
  734. case 'IS_NOT_ACTIVE': return ['USER__IS_ACTIVE', '=', '0'];
  735. default: return null;
  736. }
  737. }
  738. function _parseSpecialFilterNamespace($value) {
  739. switch ($value) {
  740. case 'IN7_MK_BAZA_DYSTRYBUCJI': return ['namespace', '=', 'default_db/IN7_MK_BAZA_DYSTRYBUCJI'];
  741. case 'IN7_DZIENNIK_KORESP': return ['namespace', '=', 'default_db/IN7_DZIENNIK_KORESP'];
  742. case 'CRM_PROCES': return ['namespace', '=', 'default_db/CRM_PROCES'];
  743. case 'PROBLEMS': return ['namespace', '=', 'default_db/PROBLEMS'];
  744. case 'CRM_LISTA_ZASOBOW': return ['namespace', '=', 'default_db/CRM_LISTA_ZASOBOW'];
  745. case 'MK_Rewiry': return ['namespace', '=', 'default_db/MK_Rewiry'];
  746. case 'BUILDINGS': return ['namespace', '=', 'default_db/BUILDINGS'];
  747. case 'QUALITY_NOTICES': return ['namespace', '=', 'default_db/QUALITY_NOTICES'];
  748. case 'BADANIA_W_TERENIE': return ['namespace', '=', 'default_db/BADANIA_W_TERENIE'];
  749. default: return null;
  750. }
  751. }
  752. function _parseSpecialFilterTime($value) {
  753. switch ($value) {
  754. case 'PO_TERMINIE': return ['L_APPOITMENT_DATE', 'and', [
  755. ['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_LESS_THAN_NOW'],
  756. ] ];
  757. case 'DZISIAJ': return ['L_APPOITMENT_DATE', 'and', [
  758. ['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_GREATER_THAN', mktime(0,0,0, date("m"), date("d"), date("Y"))],
  759. ['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_LESS_THAN', mktime(0,0,0, date("m"), date("d") + 1, date("Y"))],
  760. ] ];
  761. case 'W_CIAGU_7_DNI': return ['L_APPOITMENT_DATE', 'and', [
  762. ['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_GREATER_THAN', mktime(0,0,0, date("m"), date("d") + 1, date("Y"))],
  763. ['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_LESS_THAN', mktime(0,0,0, date("m"), date("d") + 7, date("Y"))],
  764. ] ];
  765. case 'PO_7_DNIACH': return ['L_APPOITMENT_DATE', 'and', [
  766. ['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_GREATER_THAN', mktime(0,0,0, date("m"), date("d") + 7, date("Y"))],
  767. ] ];
  768. case 'BRAK': return ['L_APPOITMENT_DATE', 'or', [
  769. ['L_APPOITMENT_DATE', '=', ''],
  770. ['L_APPOITMENT_DATE', '=', '0000-00-00 00:00:00'],
  771. ] ];
  772. default: return null;
  773. }
  774. }
  775. function getSpecialFilters() {
  776. $fltrs = array();
  777. {
  778. $fltrs['UserStatus'] = new stdClass();
  779. $fltrs['UserStatus']->icon = 'glyphicon glyphicon-user';
  780. $fltrs['UserStatus']->label = 'Status użytkownika';
  781. $fltrs['UserStatus']->btns = [];
  782. $fltrs['UserStatus']->btns['Aktywny'] = (object)[ 'value' => 'IS_ACTIVE' ];
  783. $fltrs['UserStatus']->btns['Nieaktywny'] = (object)[ 'value' => 'IS_NOT_ACTIVE' ];
  784. }
  785. {
  786. $fltrs['ns'] = new stdClass();
  787. $fltrs['ns']->icon = 'glyphicon glyphicon-tag';
  788. $fltrs['ns']->label = 'Typ rekordu';
  789. $fltrs['ns']->btns = [];
  790. $fltrs['ns']->btns['Projekty'] = (object)[ 'value' => 'IN7_MK_BAZA_DYSTRYBUCJI' ];
  791. $fltrs['ns']->btns['Koresp.'] = (object)[ 'value' => 'IN7_DZIENNIK_KORESP' ];
  792. $fltrs['ns']->btns['Procesy'] = (object)[ 'value' => 'CRM_PROCES' ];
  793. $fltrs['ns']->btns['Zadania'] = (object)[ 'value' => 'PROBLEMS' ];
  794. $fltrs['ns']->btns['Zasoby'] = (object)[ 'value' => 'CRM_LISTA_ZASOBOW' ];
  795. $fltrs['ns']->btns['MK_Rewiry'] = (object)[ 'value' => 'MK_Rewiry' ];
  796. $fltrs['ns']->btns['Budynki'] = (object)[ 'value' => 'BUILDINGS' ];
  797. $fltrs['ns']->btns['Jakość-Zgłoszenia'] = (object)[ 'value' => 'QUALITY_NOTICES' ];
  798. $fltrs['ns']->btns['Badania w terenie'] = (object)[ 'value' => 'BADANIA_W_TERENIE' ];
  799. }
  800. {
  801. $fltrs['time'] = new stdClass();
  802. $fltrs['time']->icon = 'glyphicon glyphicon-calendar';
  803. $fltrs['time']->label = 'Czas';
  804. $fltrs['time']->btns = [];
  805. $fltrs['time']->btns['po termine'] = (object)[ 'value' => 'PO_TERMINIE' ];
  806. $fltrs['time']->btns['dzisiaj'] = (object)[ 'value' => 'DZISIAJ' ];
  807. $fltrs['time']->btns['w ciągu 7 dni'] = (object)[ 'value' => 'W_CIAGU_7_DNI' ];
  808. $fltrs['time']->btns['po 7 dniach'] = (object)[ 'value' => 'PO_7_DNIACH' ];
  809. $fltrs['time']->btns['brak'] = (object)[ 'value' => 'BRAK' ];
  810. }
  811. return $fltrs;
  812. }
  813. }