SystemSourceStorageAcl.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. Lib::loadClass('Core_AclSimpleSchemaBase');
  3. Lib::loadClass('ParseOgcFilter');
  4. class Schema_SystemSourceStorageAcl extends Core_AclSimpleSchemaBase {
  5. public $_simpleSchema = [
  6. 'root' => [
  7. '@namespace' => 'default_objects/SystemSource',
  8. '@primaryKey' => 'idZasob',
  9. 'idZasob' => [ '@type' => 'xsd:integer' ],
  10. 'name' => [ '@type' => 'xsd:string' ],
  11. 'description' => [ '@type' => 'xsd:string' ],
  12. 'A_RECORD_CREATE_AUTHOR' => [ '@type' => 'xsd:string' , '@label' => 'autor' ],
  13. 'A_RECORD_CREATE_DATE' => [ '@type' => 'xsd:date' , '@label' => 'utworzono' ],
  14. 'A_RECORD_UPDATE_AUTHOR' => [ '@type' => 'xsd:string' , '@label' => 'zaktualizował' ],
  15. 'A_RECORD_UPDATE_DATE' => [ '@type' => 'xsd:date', '@label' => 'zaktualizowano' ],
  16. 'SystemObject' => [ '@ref' => 'default_objects/SystemObject', '@maxOccurs' => 'unbounded' ]
  17. ]
  18. ];
  19. public $_rootTableName = 'CRM_#CACHE_ACL_SOURCE';
  20. public $_version = '1';
  21. public function updateCache() {
  22. DBG::simpleLog('schema', "SystemSource::updateCache...");
  23. DB::getPDO()->execSql("
  24. create table if not exists `{$this->_rootTableName}` (
  25. `idZasob` int(11) NOT NULL,
  26. `name` varchar(255) DEFAULT '',
  27. `description` varchar(255) DEFAULT '',
  28. `hasConfig` tinyint(1) DEFAULT 0,
  29. `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL,
  30. `A_RECORD_CREATE_DATE` datetime DEFAULT NULL,
  31. `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
  32. `A_RECORD_UPDATE_DATE` datetime DEFAULT NULL,
  33. UNIQUE KEY `idZasob` (idZasob)
  34. ) ENGINE=MyISAM DEFAULT CHARSET=latin2
  35. ");
  36. $host = V::get('SERVER_NAME', '', $_SERVER);
  37. if (!$host) die('Missing SERVER_NAME!');
  38. function hideConfPass($line) {
  39. if (false !== ($pos = strpos($line, "pass' =>"))) {
  40. return substr($line, 0, $pos + 9) . "*****";
  41. }
  42. return $line;
  43. }
  44. foreach (glob(APP_PATH_CONFIG . "/.cnf--zasob_*-{$host}.ini.php", GLOB_NOSORT) as $file) {
  45. $fname = basename($file);
  46. // DBG::nicePrint($fname, '$fname');
  47. $idZasob = (int)substr($fname, strlen('.cnf--zasob_'), strpos($fname, '-', strlen('.cnf--zasob_') + 1) - strlen('.cnf--zasob_'));// '.cnf--zasob_931-...'
  48. // DBG::nicePrint($idZasob, '$idZasob');
  49. if (!$idZasob) continue;
  50. $conf = parse_ini_file($file, true);
  51. if (!$conf) continue;
  52. if (in_array(V::get('type', '', $conf), ['mysql', 'pgsql', 'mssql'])) {
  53. DB::getPDO()->insertOrUpdate($this->_rootTableName, 'idZasob', $idZasob, [
  54. 'idZasob' => $idZasob,
  55. 'name' => V::get('database', $idZasob, $conf),
  56. 'hasConfig' => 1,
  57. '@insert' => [
  58. 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
  59. 'A_RECORD_CREATE_DATE' => 'NOW()',
  60. ],
  61. '@update' => [
  62. 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
  63. 'A_RECORD_UPDATE_DATE' => 'NOW()',
  64. ]
  65. ]);
  66. }
  67. // DBG::nicePrint(implode("\n", array_map( hideConfPass, explode("\n", var_export($conf, true)) ) ), '$conf');
  68. }
  69. foreach (DB::getPDO()->fetchAll("
  70. select z.`ID`, z.`DESC`, z.OPIS
  71. from CRM_LISTA_ZASOBOW z
  72. where z.`TYPE` in ('BAZA_DANYCH', 'DATABASE_MYSQL', 'DATABASE_POSTGRESQL')
  73. and z.A_STATUS not in ('DELETED')
  74. ") as $item) {
  75. $desc = V::get('DESC', $item['ID'], $item);
  76. DB::getPDO()->insertOrUpdate($this->_rootTableName, 'idZasob', $item['ID'], [
  77. 'idZasob' => $item['ID'],
  78. 'name' => $desc,
  79. 'description' => V::get('OPIS', $desc, $item),
  80. '@insert' => [
  81. 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
  82. 'A_RECORD_CREATE_DATE' => 'NOW()',
  83. 'hasConfig' => 0,
  84. ],
  85. '@update' => [
  86. 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
  87. 'A_RECORD_UPDATE_DATE' => 'NOW()',
  88. ]
  89. ]);
  90. }
  91. }
  92. public function getTotal($params = []) {
  93. return DB::getPDO()->fetchValue(" select count(1) as cnt from `{$this->_rootTableName}` ");
  94. }
  95. public function getItems($params = []) {
  96. $items = DB::getPDO()->fetchAll("
  97. select t.*
  98. from `{$this->_rootTableName}` t
  99. ");
  100. $currSortCol = V::get('order_by', 'ID', $params);
  101. $currSortFlip = strtolower(V::get('order_dir', 'desc', $params));
  102. // TODO: validate $currSortCol is in field list
  103. // TODO: validate $currSortFlip ('asc' or 'desc')
  104. $aliasMap = array();
  105. foreach ($this->_simpleSchema['root'] as $key => $field) {
  106. if ('@' === substr($key, 0, 1)) continue;
  107. $aliasMap[ $key ] = $key;// (!empty($field['@alias'])) ? $field['@alias'] : $key;
  108. }
  109. // TODO: if (!array_key_exists($currSortCol, $aliasMap)) throw new Exception("field name not allowed to sort");
  110. $currSortCol = (array_key_exists($currSortCol, $aliasMap)) ? $aliasMap[$currSortCol] : null;
  111. if (!empty($currSortCol) && ('asc' == $currSortFlip || 'desc' == $currSortFlip)) {
  112. usort($items, function ($itemA, $itemB) use ($currSortCol, $currSortFlip) {
  113. $a = strtolower(V::get($currSortCol, '', $itemA));
  114. $b = strtolower(V::get($currSortCol, '', $itemB));
  115. if ($a == $b) return 0;
  116. else if ('asc' == $currSortFlip) return ($a < $b) ? -1 : 1;
  117. else if ('desc' == $currSortFlip) return ($a > $b) ? -1 : 1;
  118. throw new Exception("BUG - Wrong sort param - order dir");
  119. });
  120. }
  121. $limit = V::get('limit', 0, $params);
  122. $limit = ($limit < 0) ? 0 : $limit;
  123. $offset = V::get('limitstart', 0, $params);
  124. $offset = ($offset < 0) ? 0 : $offset;
  125. return array_slice($items, $offset, ($limit > 0) ? $limit : null, $preserve_keys = true);
  126. }
  127. }