[ '@namespace' => 'default_objects/SystemObject', 'ID' => [ '@type' => 'xsd:integer' ], 'namespace' => [ '@type' => 'xsd:string' ], 'typeName' => [ '@type' => 'xsd:string' ], 'tabela' => [ '@type' => 'xsd:string', '@alias' => 'DESC' ], 'nazwa' => [ '@type' => 'xsd:string', '@alias' => 'DESC' ], 'opis' => [ '@type' => 'xsd:string', '@alias' => 'OPIS' ], 'id_zasob' => [ '@type' => 'xsd:integer' ], 'autor' => [ '@type' => 'xsd:string' , '@alias' => 'A_RECORD_CREATE_AUTHOR' ], 'utworzono' => [ '@type' => 'xsd:date' , '@alias' => 'A_RECORD_CREATE_DATE' ], 'zaktualizował' => [ '@type' => 'xsd:string' , '@alias' => 'A_RECORD_UPDATE_AUTHOR' ], 'zaktualizowano' => [ '@type' => 'xsd:date', '@alias' => 'A_RECORD_UPDATE_DATE' ] ] ]; public $_rootTableName = 'CRM_LISTA_ZASOBOW'; public function getTotal($params = []) { return count($this->_getAllItems()); } public function getItems($params = []) { $items = $this->_getAllItems(); $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); } public function _generateUniqueKeyFromNamespace($namespace) { return str_replace('/', '__x3A__', $namespace); } public function _getAllItems($params = []) { static $_cacheAllItems = null; if (null !== $_cacheAllItems) return $_cacheAllItems; $idMainDatabase = DB::getPDO()->getZasobId(); $_cacheAllItems = array_filter( array_merge( array_map( function ($row) { $row['namespace'] = "default_db/{$row['tabela']}"; $row['typeName'] = "default_db:{$row['tabela']}"; $row['ID'] = $this->_generateUniqueKeyFromNamespace($row['namespace']); return $row; } , DB::getPDO()->fetchAll(" select z.ID as id_zasob , z.`DESC` as tabela , IF(z.`DESC_PL` != '', z.`DESC_PL`, z.`DESC`) as nazwa , z.`OPIS` as opis , z.A_RECORD_CREATE_AUTHOR as `autor` , z.A_RECORD_CREATE_DATE as `utworzono` , z.A_RECORD_UPDATE_AUTHOR as `zaktualizował` , z.A_RECORD_UPDATE_DATE as `zaktualizowano` from `CRM_LISTA_ZASOBOW` z where z.PARENT_ID = {$idMainDatabase} and z.`TYPE` = 'TABELA' and z.`A_STATUS` not in('DELETED', 'OFF_HARD', 'OFF_SOFT') ") ) , array_map( function ($typeName) { $namespace = str_replace(':', '/', $typeName); $namespace = str_replace('__x3A__', '/', $namespace); return [ 'ID' => $this->_generateUniqueKeyFromNamespace($namespace), 'namespace' => $namespace, 'typeName' => $typeName, 'tabela' => '', // TODO: $acl->getRootTableName(), 'nazwa' => substr($typeName, strrpos($typeName, ':') + 1), 'opis' => '...', 'autor' => '', 'utworzono' => '', 'zaktualizował' => '', 'zaktualizowano' => '' ]; } , Core_AclHelper::getAclList() ) ) , function ($item) use ($params) { return true; } ); return $_cacheAllItems; } }