| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- <?php
- Lib::loadClass('Core_AclSimpleSchemaBase');
- Lib::loadClass('ParseOgcFilter');
- class Schema_SystemSourceStorageAcl extends Core_AclSimpleSchemaBase {
- public $_simpleSchema = [
- 'root' => [
- '@namespace' => 'default_objects/SystemSource',
- '@primaryKey' => 'idZasob',
- 'idZasob' => [ '@type' => 'xsd:integer' ],
- 'nsPrefix' => [ '@type' => 'xsd:string' ],
- 'name' => [ '@type' => 'xsd:string' ],
- 'description' => [ '@type' => 'xsd:string' ],
- 'A_RECORD_CREATE_AUTHOR' => [ '@type' => 'xsd:string' , '@label' => 'autor' ],
- 'A_RECORD_CREATE_DATE' => [ '@type' => 'xsd:date' , '@label' => 'utworzono' ],
- 'A_RECORD_UPDATE_AUTHOR' => [ '@type' => 'xsd:string' , '@label' => 'zaktualizował' ],
- 'A_RECORD_UPDATE_DATE' => [ '@type' => 'xsd:date', '@label' => 'zaktualizowano' ],
- 'SystemObject' => [ '@ref' => 'default_objects/SystemObject', '@maxOccurs' => 'unbounded' ]
- ]
- ];
- public $_rootTableName = 'CRM_#CACHE_ACL_SOURCE';
- public $_version = '1';
- public function updateCache() {
- DBG::simpleLog('schema', "SystemSource::updateCache...");
- // DB::getPDO()->execSql(" drop table if exists `{$this->_rootTableName}` "); // TODO: DBG
- DB::getPDO()->execSql("
- create table if not exists `{$this->_rootTableName}` (
- `idZasob` int(11) NOT NULL,
- `nsPrefix` varchar(255) DEFAULT '',
- `name` varchar(255) DEFAULT '',
- `description` varchar(255) DEFAULT '',
- `hasConfig` tinyint(1) DEFAULT 0,
- `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL,
- `A_RECORD_CREATE_DATE` datetime DEFAULT NULL,
- `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
- `A_RECORD_UPDATE_DATE` datetime DEFAULT NULL,
- UNIQUE KEY `idZasob` (idZasob)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2
- ");
- // database from config files
- $host = V::get('SERVER_NAME', '', $_SERVER);
- if (!$host) die('Missing SERVER_NAME!');
- function hideConfPass($line) {
- if (false !== ($pos = strpos($line, "pass' =>"))) {
- return substr($line, 0, $pos + 9) . "*****";
- }
- return $line;
- }
- foreach (glob(APP_PATH_CONFIG . "/.cnf--zasob_*-{$host}.ini.php", GLOB_NOSORT) as $file) {
- $fname = basename($file);
- // DBG::nicePrint($fname, '$fname');
- $idZasob = (int)substr($fname, strlen('.cnf--zasob_'), strpos($fname, '-', strlen('.cnf--zasob_') + 1) - strlen('.cnf--zasob_'));// '.cnf--zasob_931-...'
- // DBG::nicePrint($idZasob, '$idZasob');
- if (!$idZasob) continue;
- $conf = parse_ini_file($file, true);
- if (!$conf) continue;
- if (in_array(V::get('type', '', $conf), ['mysql', 'pgsql', 'mssql'])) {
- DB::getPDO()->insertOrUpdate($this->_rootTableName, 'idZasob', $idZasob, [
- 'idZasob' => $idZasob,
- 'nsPrefix' => "zasob_{$idZasob}",
- 'name' => V::get('database', $idZasob, $conf),
- 'hasConfig' => 1,
- '@insert' => [
- 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_CREATE_DATE' => 'NOW()',
- ],
- '@update' => [
- 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_UPDATE_DATE' => 'NOW()',
- ]
- ]);
- }
- // DBG::nicePrint(implode("\n", array_map( hideConfPass, explode("\n", var_export($conf, true)) ) ), '$conf');
- }
- // source from CRM_LISTA_ZASOBOW
- foreach (DB::getPDO()->fetchAll("
- select z.`ID`, z.`DESC`, z.OPIS
- from CRM_LISTA_ZASOBOW z
- where z.`TYPE` in ('BAZA_DANYCH', 'DATABASE_MYSQL', 'DATABASE_POSTGRESQL')
- and z.A_STATUS not in ('DELETED')
- ") as $item) {
- $desc = V::get('DESC', $item['ID'], $item);
- DB::getPDO()->insertOrUpdate($this->_rootTableName, 'idZasob', $item['ID'], [
- 'idZasob' => $item['ID'],
- 'nsPrefix' => "zasob_{$item['ID']}",
- 'name' => $desc,
- 'description' => V::get('OPIS', $desc, $item),
- '@insert' => [
- 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_CREATE_DATE' => 'NOW()',
- 'hasConfig' => 0,
- ],
- '@update' => [
- 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_UPDATE_DATE' => 'NOW()',
- ]
- ]);
- }
- $idMainDb = DB::getPDO()->getZasobId();
- DB::getPDO()->update($this->_rootTableName, 'idZasob', $idMainDb, [
- 'nsPrefix' => 'default_db'
- ]);
- // default_objects: StorageAcl, AntAcl, ...
- $id = DB::getPDO()->fetchValue(" select idZasob from `{$this->_rootTableName}` where name = 'default_objects' ");
- if (!$id) {
- $item = DB::getPDO()->fetchFirst("
- select z.`ID`
- from CRM_LISTA_ZASOBOW z
- where z.`TYPE` in ('BAZA_DANYCH')
- and z.A_STATUS not in ('DELETED')
- and z.`DESC` = 'default_objects'
- ");
- if ($item) {
- $id = $item['ID'];
- } else {
- $idMainDbParent = DB::getPDO()->fetchValue(" select PARENT_ID from CRM_LISTA_ZASOBOW where ID = '" . DB::getPDO()->getZasobId() . "' ");
- $id = DB::getPDO()->insert('CRM_LISTA_ZASOBOW', [
- 'DESC' => 'default_objects',
- 'TYPE' => 'BAZA_DANYCH',
- 'OPIS' => "Obiekty systemowe",
- 'PARENT_ID' => $idMainDbParent,
- 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_CREATE_DATE' => 'NOW()',
- 'A_ADM_COMPANY' => 'system',// edit not allowed
- ]);
- }
- }
- if (!$id) throw new Exception("Missing default_objects ID");
- DB::getPDO()->insertOrUpdate($this->_rootTableName, 'idZasob', $id, [
- 'idZasob' => $id,
- 'nsPrefix' => 'default_objects',
- 'name' => 'default_objects',
- 'description' => "Obiekty systemowe",
- 'hasConfig' => 1,
- '@insert' => [
- 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_CREATE_DATE' => 'NOW()',
- ],
- '@update' => [
- 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_UPDATE_DATE' => 'NOW()',
- ]
- ]);
- }
- public function getTotal($params = []) {
- return DB::getPDO()->fetchValue(" select count(1) as cnt from `{$this->_rootTableName}` ");
- }
- public function getItem($pk, $params = []) {
- $sqlPk = DB::getPDO()->quote($pk, PDO::PARAM_INT);
- $item = DB::getPDO()->fetchFirst("
- select t.*
- from `{$this->_rootTableName}` t
- where t.idZasob = {$sqlPk}
- ");
- return $item;
- }
- public function getItems($params = []) {
- $sqlWhere = [];
- if (array_key_exists('f_hasConfig', $params)) {
- $sqlWhere[] = "t.hasConfig = " . DB::getPDO()->convertValueToSqlSafe($params['f_hasConfig']);
- }
- $sqlWhere = (!empty($sqlWhere)) ? "where " . implode(" and ", $sqlWhere) : "";
- $items = DB::getPDO()->fetchAll("
- select t.*
- from `{$this->_rootTableName}` t
- {$sqlWhere}
- ");
- $currSortCol = V::get('order_by', 'ID', $params);
- $currSortFlip = strtolower(V::get('order_dir', 'desc', $params));
- // TODO: validate $currSortCol is in field list
- // TODO: validate $currSortFlip ('asc' or 'desc')
- $aliasMap = array();
- foreach ($this->_simpleSchema['root'] as $key => $field) {
- if ('@' === substr($key, 0, 1)) continue;
- $aliasMap[ $key ] = $key;// (!empty($field['@alias'])) ? $field['@alias'] : $key;
- }
- // TODO: if (!array_key_exists($currSortCol, $aliasMap)) throw new Exception("field name not allowed to sort");
- $currSortCol = (array_key_exists($currSortCol, $aliasMap)) ? $aliasMap[$currSortCol] : null;
- if (!empty($currSortCol) && ('asc' == $currSortFlip || 'desc' == $currSortFlip)) {
- usort($items, function ($itemA, $itemB) use ($currSortCol, $currSortFlip) {
- $a = strtolower(V::get($currSortCol, '', $itemA));
- $b = strtolower(V::get($currSortCol, '', $itemB));
- if ($a == $b) return 0;
- else if ('asc' == $currSortFlip) return ($a < $b) ? -1 : 1;
- else if ('desc' == $currSortFlip) return ($a > $b) ? -1 : 1;
- throw new Exception("BUG - Wrong sort param - order dir");
- });
- }
- $limit = V::get('limit', 0, $params);
- $limit = ($limit < 0) ? 0 : $limit;
- $offset = V::get('limitstart', 0, $params);
- $offset = ($offset < 0) ? 0 : $offset;
- return array_slice($items, $offset, ($limit > 0) ? $limit : null, $preserve_keys = true);
- }
- }
|