[ '@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, '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'], '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, '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); } }