|
|
@@ -0,0 +1,488 @@
|
|
|
+<?php
|
|
|
+// @requires $_SERVER['SERVER_NAME']
|
|
|
+
|
|
|
+Lib::loadClass('RouteBase');
|
|
|
+Lib::loadClass('Schema_TableFactory');
|
|
|
+
|
|
|
+/*
|
|
|
+# Storage:
|
|
|
+- [ ] view available storage (from Zasoby - type 'BAZA_DANYCH', 'DATABASE_MYSQL', ...)
|
|
|
+- [ ] check config for connection
|
|
|
+- [ ] add cells to Zasoby
|
|
|
+- [ ] create cells in Storage
|
|
|
+- [x] use PDO
|
|
|
+
|
|
|
+*/
|
|
|
+class Route_Storage extends RouteBase {
|
|
|
+
|
|
|
+ public function handleAuth() {
|
|
|
+ if (!User::logged()) {
|
|
|
+ User::authByRequest();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function defaultAction() {
|
|
|
+ SE_Layout::gora();
|
|
|
+ SE_Layout::menu();
|
|
|
+ try {
|
|
|
+ $storageList = $this->getStorageList();
|
|
|
+ if (empty($storageList)) throw new Exception("No storage defined");
|
|
|
+ $storageMenu = array();
|
|
|
+ foreach ($storageList as $storage) {
|
|
|
+ $menuItem = array();
|
|
|
+ $menuItem['id'] = $id = $storage['ID'];
|
|
|
+ $menuItem['nazwa'] = $storage['DESC'];
|
|
|
+ $menuItem['typ'] = $storage['TYPE'];
|
|
|
+ $menuItem['tabele i widoki'] = '<a href="index.php?_route=Storage&_task=tableList&idStorage=' . $id . '">' . "tabele" . '</a>';
|
|
|
+ //$menuItem['views'] = '<a href="index.php?_route=Storage&_task=viewList&idStorage=' . $id . '">' . "views" . '</a>';
|
|
|
+ $menuItem['raw info'] = '<a href="index.php?_route=Storage&_task=rawInfo&idStorage=' . $id . '">' . "raw info" . '</a>';
|
|
|
+ $menuItem['xsd'] = '<a href="index.php?_route=Storage&_task=xsd&idStorage=' . $id . '" target="_blank">' . "xsd" . '</a>';
|
|
|
+ $storageMenu[] = $menuItem;
|
|
|
+ }
|
|
|
+ $this->navView();
|
|
|
+ DBG::table("storageMenu", $storageMenu, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+ } catch (Exception $e) {
|
|
|
+ SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
|
|
|
+ }
|
|
|
+ SE_Layout::dol();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function tableListAction() {
|
|
|
+ SE_Layout::gora();
|
|
|
+ SE_Layout::menu();
|
|
|
+ try {
|
|
|
+ $idStorage = V::get('idStorage', 0, $_REQUEST, 'int');
|
|
|
+ if (empty($idStorage)) throw new Exception("No id storage");
|
|
|
+ $storageList = $this->getStorageList();
|
|
|
+ if (empty($storageList)) throw new Exception("No storage defined");
|
|
|
+ if (!array_key_exists($idStorage, $storageList)) throw new Exception("No id storage not exists");
|
|
|
+
|
|
|
+ $this->navView();
|
|
|
+ $storagePdo = DB::getStorage($idStorage);
|
|
|
+ $viewRealList = $storagePdo->getViewList();
|
|
|
+ $tableRealList = $storagePdo->getTableList();
|
|
|
+ $tableZasobList = array();
|
|
|
+ foreach (DB::getPDO()->fetchAllByKey("
|
|
|
+ select z.ID, z.`DESC`, z.A_STATUS
|
|
|
+ from CRM_LISTA_ZASOBOW z
|
|
|
+ where z.PARENT_ID = '{$idStorage}'
|
|
|
+ ", $key = 'DESC') as $ind => $row) {
|
|
|
+ $tableZasobList[strtolower($ind)] = $row;
|
|
|
+ }
|
|
|
+
|
|
|
+ $emptyItem = array();
|
|
|
+ $emptyItem['nazwa'] = '';//->urlTblStruct = $this->buildActionUrl('tableStruct', array('storageId'=>$storageId, 'tblName'=>$tblName));
|
|
|
+ $emptyItem['type'] = '';
|
|
|
+ $emptyItem['dodaj zasób'] = '';//->urlTblAddToZasoby = $this->buildAjaxActionUrl('addTableToZasoby', $urlParams);
|
|
|
+ $emptyItem['struktura'] = '';//->urlTblRawStruct = $this->buildActionUrl('tableStructRaw', array('storageId'=>$storageId, 'tblName'=>$tblName));
|
|
|
+ $emptyItem['objectTest'] = '';//->urlObjectTest = $this->buildActionUrl('objectTest', array('storageId'=>$storageId, 'tblName'=>$tblName));
|
|
|
+ $emptyItem['xsd'] = '';//->urlTableXsd = $this->buildActionUrl('tableXsd', array('storageId'=>$storageId, 'tblName'=>$tblName, 'HEADER_NOT_INIT'=>'YES'));
|
|
|
+ $emptyItem['id_zasob'] = '';//->zasobId = $zasobTableId;
|
|
|
+ $emptyItem['isHist'] = '';//->isHistTable = ('_HIST' == substr($tblName, -5)) ? true : false;
|
|
|
+ $emptyItem['uwagi'] = '';
|
|
|
+
|
|
|
+ $tableList = array();
|
|
|
+ foreach ($tableRealList as $row) {
|
|
|
+ $tblName = $row['table_name'];
|
|
|
+ $tblItem = V::cloneArray($emptyItem);
|
|
|
+ $tblItem['nazwa'] = $tblName;
|
|
|
+ $tblItem['type'] = $row['table_type'];
|
|
|
+ $tblItem['struktura'] = '<a href="index.php?_route=Storage&_task=tableStruct&idStorage=' . $idStorage . '&table=' . $tblName . '">' . "struct" . '</a>';
|
|
|
+ $tblItem['xsd'] = '<a href="index.php?_route=Storage&_task=tableXsd&idStorage=' . $idStorage . '&table=' . $tblName . '" target="_blank">' . "xsd" . '</a>';
|
|
|
+ $tblItem['objectTest'] = '<a href="index.php?_route=Storage&_task=objectTest&idStorage=' . $idStorage . '&table=' . $tblName . '">' . "objectTest" . '</a>';
|
|
|
+ $tblItem['isHist'] = ('_hist' == substr($tblName, -5));
|
|
|
+ $tblItem['uwagi'] = '';
|
|
|
+ $tblZasob = V::get($tblName, '', $tableZasobList);
|
|
|
+ if ($tblZasob) {
|
|
|
+ $tableZasobList[$tblName]['_checked'] = true;
|
|
|
+ $tblItem['id_zasob'] = $tblZasob['ID'];
|
|
|
+ } else {
|
|
|
+ $tblItem['uwagi'] .= 'TODO: ADD ZASOB';
|
|
|
+ $tblItem['dodaj zasób'] = '<a href="#">TODO: ADD ZASOB</a>';
|
|
|
+ }
|
|
|
+ $tableList[] = $tblItem;
|
|
|
+ }
|
|
|
+ foreach ($viewRealList as $row) {
|
|
|
+ $tblName = $row['table_name'];
|
|
|
+ $tblItem = V::cloneArray($emptyItem);
|
|
|
+ $tblItem['nazwa'] = $tblName;
|
|
|
+ $tblItem['type'] = $row['table_type'];
|
|
|
+ $tblItem['struktura'] = '<a href="index.php?_route=Storage&_task=viewStruct&idStorage=' . $idStorage . '&table=' . $tblName . '">' . "struct" . '</a>';
|
|
|
+ $tblItem['uwagi'] = '';
|
|
|
+ $tblZasob = V::get($tblName, '', $tableZasobList);
|
|
|
+ if ($tblZasob) {
|
|
|
+ $tableZasobList[$tblName]['_checked'] = true;
|
|
|
+ $tblItem['id_zasob'] = $tblZasob['ID'];
|
|
|
+ } else {
|
|
|
+ $tblItem['uwagi'] .= 'TODO: ADD ZASOB';
|
|
|
+ $tblItem['dodaj zasób'] = '<a href="#">TODO: ADD ZASOB</a>';
|
|
|
+ }
|
|
|
+ $tableList[] = $tblItem;
|
|
|
+ }
|
|
|
+ foreach ($tableZasobList as $tblName => $row) {
|
|
|
+ if (!$row['_checked']) {
|
|
|
+ $tblItem = V::cloneArray($emptyItem);
|
|
|
+ $tblItem['nazwa'] = $tblName;
|
|
|
+ $tblItem['id_zasob'] = $row['ID'];
|
|
|
+ $tblItem['type'] = 'unknown';
|
|
|
+ $tblItem['uwagi'] = 'TODO: nie istnieje w bazie danych';
|
|
|
+ $tableList[] = $tblItem;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ DBG::table("tableList", $tableList, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+ } catch (Exception $e) {
|
|
|
+ SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
|
|
|
+ }
|
|
|
+ SE_Layout::dol();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function rawInfoAction() {
|
|
|
+ SE_Layout::gora();
|
|
|
+ SE_Layout::menu();
|
|
|
+ try {
|
|
|
+ $idStorage = V::get('idStorage', 0, $_REQUEST, 'int');
|
|
|
+ if (empty($idStorage)) throw new Exception("No id storage");
|
|
|
+ $storageList = $this->getStorageList();
|
|
|
+ if (empty($storageList)) throw new Exception("No storage defined");
|
|
|
+ if (!array_key_exists($idStorage, $storageList)) throw new Exception("No id storage not exists");
|
|
|
+
|
|
|
+ $this->navView();
|
|
|
+ $storagePdo = DB::getStorage($idStorage);
|
|
|
+ $rawInfo = $storagePdo->getTableListWithInfo();
|
|
|
+ DBG::table("rawInfo", $rawInfo, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+ } catch (Exception $e) {
|
|
|
+ SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
|
|
|
+ }
|
|
|
+ SE_Layout::dol();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function tableStructAction() {
|
|
|
+ SE_Layout::gora();
|
|
|
+ SE_Layout::menu();
|
|
|
+ try {
|
|
|
+ $idStorage = V::get('idStorage', 0, $_REQUEST, 'int');
|
|
|
+ if (empty($idStorage)) throw new Exception("No id storage");
|
|
|
+ $storageList = $this->getStorageList();
|
|
|
+ if (empty($storageList)) throw new Exception("No storage defined");
|
|
|
+ if (!array_key_exists($idStorage, $storageList)) throw new Exception("No id storage not exists");
|
|
|
+ $tblName = V::get('table', '', $_REQUEST, 'word');
|
|
|
+ if (empty($tblName)) throw new Exception("No table name");
|
|
|
+
|
|
|
+ $this->navView();
|
|
|
+ $storagePdo = DB::getStorage($idStorage);
|
|
|
+ $tblStruct = $storagePdo->getTableStruct($tblName);
|
|
|
+ DBG::table("tblStruct", $tblStruct, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+ } catch (Exception $e) {
|
|
|
+ SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
|
|
|
+ }
|
|
|
+ SE_Layout::dol();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function xsdAction() {
|
|
|
+ $idStorage = V::get('idStorage', 0, $_REQUEST, 'int');
|
|
|
+ $storage = DB::getStorage($idStorage);
|
|
|
+ $tableRealList = $storage->getTableList();
|
|
|
+ $srvName = $_SERVER['SERVER_NAME'];
|
|
|
+ $storageZasobId = $storage->getZasobId();
|
|
|
+ $objNs = "p5_{$storageZasobId}_{$tblName}";
|
|
|
+ $objNsUri = "https://biuro.biall-net.pl/api/{$storageZasobId}/{$tblName}";
|
|
|
+ $p5TypePrefix = "p5Type";
|
|
|
+ $p5TypeNsUri = "http://biuro.biall-net.pl/p5/schema/types";
|
|
|
+ $p5TypeNsLocation = "http://biuro.biall-net.pl/p5/schema/types.xsd";
|
|
|
+ header('Content-type: text/plain; charset=utf-8');// TODO: test
|
|
|
+
|
|
|
+ //header('Content-type: application/xml; charset=utf-8');
|
|
|
+ $xmlWriter = new XMLWriter();
|
|
|
+ $xmlWriter->openUri('php://output');
|
|
|
+ $xmlWriter->setIndent(true);
|
|
|
+ if (!$xmlWriter) throw new HttpException("Error no XMLWriter", 404);
|
|
|
+ $xmlWriter->startDocument('1.0', 'UTF-8');
|
|
|
+ $xmlWriter->startElement('xs:schema');
|
|
|
+ $xmlWriter->writeAttribute('xmlns:xs', 'http://www.w3.org/2001/XMLSchema');
|
|
|
+ $xmlWriter->writeAttribute('xmlns:vc', 'http://www.w3.org/2007/XMLSchema-versioning');
|
|
|
+ $xmlWriter->writeAttribute("xmlns:{$p5TypePrefix}", $p5TypeNsUri);
|
|
|
+ $xmlWriter->writeAttribute('elementFormDefault', 'qualified');
|
|
|
+ $xmlWriter->writeAttribute('targetNamespace', $objNsUri);
|
|
|
+ $xmlWriter->writeAttribute('vc:minVersion', '1.1');
|
|
|
+
|
|
|
+ $xmlWriter->startElement('xs:import');
|
|
|
+ $xmlWriter->writeAttribute('namespace', $p5TypeNsUri);
|
|
|
+ $xmlWriter->writeAttribute('schemaLocation', $p5TypeNsLocation);
|
|
|
+ $xmlWriter->endElement();// xs:import
|
|
|
+
|
|
|
+ foreach ($tableRealList as $tbl) {
|
|
|
+ $tblName = $tbl['table_name'];
|
|
|
+ $this->tableXsdViewXmlWriter($xmlWriter, $idStorage, $tblName);
|
|
|
+ }
|
|
|
+
|
|
|
+ $xmlWriter->endElement();// xs:schema
|
|
|
+ $xmlWriter->endDocument();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function tableXsdAction() {
|
|
|
+ $idStorage = V::get('idStorage', '', $_GET);
|
|
|
+ $tblName = V::get('table', '', $_GET, 'word');
|
|
|
+ if (empty($tblName)) die("Wrong table name");
|
|
|
+ header('Content-type: text/plain; charset=utf-8');// TODO: test
|
|
|
+
|
|
|
+ $storage = DB::getStorage($idStorage);
|
|
|
+ $storageZasobId = $storage->getZasobId();
|
|
|
+ $objNs = "p5_{$storageZasobId}_{$tblName}";
|
|
|
+ $objNsUri = "https://biuro.biall-net.pl/api/{$storageZasobId}/{$tblName}";
|
|
|
+ $p5TypePrefix = "p5Type";
|
|
|
+ $p5TypeNsUri = "http://biuro.biall-net.pl/p5/schema/types";
|
|
|
+ $p5TypeNsLocation = "http://biuro.biall-net.pl/p5/schema/types.xsd";
|
|
|
+
|
|
|
+ //header('Content-type: application/xml; charset=utf-8');
|
|
|
+ $xmlWriter = new XMLWriter();
|
|
|
+ $xmlWriter->openUri('php://output');
|
|
|
+ $xmlWriter->setIndent(true);
|
|
|
+ if (!$xmlWriter) throw new HttpException("Error no XMLWriter", 404);
|
|
|
+ $xmlWriter->startDocument('1.0', 'UTF-8');
|
|
|
+ $xmlWriter->startElement('xs:schema');
|
|
|
+ $xmlWriter->writeAttribute('xmlns:xs', 'http://www.w3.org/2001/XMLSchema');
|
|
|
+ $xmlWriter->writeAttribute('xmlns:vc', 'http://www.w3.org/2007/XMLSchema-versioning');
|
|
|
+ $xmlWriter->writeAttribute("xmlns:{$p5TypePrefix}", $p5TypeNsUri);
|
|
|
+ $xmlWriter->writeAttribute('elementFormDefault', 'qualified');
|
|
|
+ $xmlWriter->writeAttribute('targetNamespace', $objNsUri);
|
|
|
+ $xmlWriter->writeAttribute('vc:minVersion', '1.1');
|
|
|
+
|
|
|
+ $xmlWriter->startElement('xs:import');
|
|
|
+ $xmlWriter->writeAttribute('namespace', $p5TypeNsUri);
|
|
|
+ $xmlWriter->writeAttribute('schemaLocation', $p5TypeNsLocation);
|
|
|
+ $xmlWriter->endElement();// xs:import
|
|
|
+ $this->tableXsdViewXmlWriter($xmlWriter, $idStorage, $tblName);
|
|
|
+ $xmlWriter->endElement();// xs:schema
|
|
|
+ $xmlWriter->endDocument();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function tableXsdViewXmlWriter(&$xmlWriter, $idStorage, $tblName) {
|
|
|
+ $storage = DB::getStorage($idStorage);
|
|
|
+ $schema = Schema_TableFactory::build($tblName, $idStorage, $_SERVER['SERVER_NAME']);
|
|
|
+ $struct = $schema->getStruct();
|
|
|
+ DBG::_('DBG', '>1', "struct", $struct, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+
|
|
|
+ $typeName = "{$tblName}Type";
|
|
|
+
|
|
|
+ $xmlWriter->startElement('xs:complexType');
|
|
|
+ $xmlWriter->writeAttribute('name', $typeName);
|
|
|
+ $xmlWriter->startElement('xs:sequence');
|
|
|
+ foreach ($struct as $field) {
|
|
|
+ $xmlWriter->startElement('xs:element');
|
|
|
+ $xmlWriter->writeAttribute('name', $field['name']);
|
|
|
+ $xmlWriter->writeAttribute('minOccurs', 0);// TODO: set minOccurs by default, etc.
|
|
|
+ if ($field['is_nullable']) $xmlWriter->writeAttribute('nillable', 'true');
|
|
|
+ if (null !== $field['default_value']) {
|
|
|
+ $xmlWriter->writeAttribute('default', $field['default_value']);
|
|
|
+ } else if (null === $field['default_value'] && $field['is_nullable']) {
|
|
|
+ $xmlWriter->writeAttribute('default', $field['default_value']);
|
|
|
+ } else {
|
|
|
+ // TODO: Schema BUG?
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($field['p5_restrictions'])) {
|
|
|
+ $xmlWriter->writeAttribute('type', "p5Type:{$field['p5_type']}");
|
|
|
+ } else {
|
|
|
+ $xmlWriter->startElement('xs:simpleType');
|
|
|
+ $xmlWriter->writeAttribute('base', "p5Type:{$field['p5_type']}");
|
|
|
+ $xmlWriter->startElement('xs:restriction');
|
|
|
+ if (!empty($field['p5_restrictions']['enumeration'])) {
|
|
|
+ foreach ($field['p5_restrictions']['enumeration'] as $enumValue) {
|
|
|
+ $xmlWriter->startElement('xs:enumeration');
|
|
|
+ $xmlWriter->writeAttribute('value', $enumValue);
|
|
|
+ $xmlWriter->endElement();// xs:enumeration
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // TODO: another restrictions...
|
|
|
+ }
|
|
|
+ $xmlWriter->endElement();// xs:restriction
|
|
|
+ $xmlWriter->endElement();// xs:simpleType
|
|
|
+ }
|
|
|
+ $xmlWriter->endElement();// xs:element
|
|
|
+ }
|
|
|
+ $xmlWriter->endElement();// xs:sequence
|
|
|
+ $xmlWriter->endElement();// xs:complexType
|
|
|
+ return;
|
|
|
+
|
|
|
+ // <xs:element maxOccurs="1" minOccurs="0" name="{$fldName}" nillable="true" type="xs:integer"/>
|
|
|
+ $pKeyField = 'ID';//$storageObject->getPrimaryKeyFieldName();
|
|
|
+ //DBG::_(true, true, "struct", $struct, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+ foreach ($struct as $field) {
|
|
|
+ $fldName = $vField->getName();
|
|
|
+ $fldType = $vField->getType();
|
|
|
+ $xsdType = $fldType->getTypeForXsd();
|
|
|
+
|
|
|
+ if ($fldType->hasDefault()) {
|
|
|
+ $fldDefault = $fldType->getDefault();
|
|
|
+ if (!empty($fldDefault) || '0' === $fldDefault) {
|
|
|
+ $elNode->setAttribute('default', $fldDefault);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $fldRestrictions = $fldType->getRestrictions();
|
|
|
+ if (empty($fldRestrictions)) {
|
|
|
+ $elNode->setAttribute('type', "{$p5TypePrefix}:{$xsdType}");
|
|
|
+ } else {
|
|
|
+ $sType = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:simpleType');
|
|
|
+ $elNode->appendChild($sType);
|
|
|
+ $sTypeRes = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:restriction');
|
|
|
+ $sType->appendChild($sTypeRes);
|
|
|
+ $sTypeRes->setAttribute('base', "{$p5TypePrefix}:{$xsdType}");
|
|
|
+
|
|
|
+ $enumList = $fldType->getEnumeration();
|
|
|
+ if (empty($enumList)) {
|
|
|
+ foreach ($fldRestrictions as $restricionName => $restrictionValue) {
|
|
|
+ if ('maxLength' == $restricionName) {
|
|
|
+ $sTypeResMaxLength = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:maxLength');
|
|
|
+ $sTypeRes->appendChild($sTypeResMaxLength);
|
|
|
+ $sTypeResMaxLength->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('minLength' == $restricionName) {
|
|
|
+ $sTypeResMinLength = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:minLength');
|
|
|
+ $sTypeRes->appendChild($sTypeResMinLength);
|
|
|
+ $sTypeResMinLength->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('pattern' == $restricionName) {
|
|
|
+ $sTypeResPattern = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:pattern');
|
|
|
+ $sTypeRes->appendChild($sTypeResPattern);
|
|
|
+ $sTypeResPattern->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('fractionDigits' == $restricionName) {
|
|
|
+ $sTypeResFractionDigits = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:fractionDigits');
|
|
|
+ $sTypeRes->appendChild($sTypeResFractionDigits);
|
|
|
+ $sTypeResFractionDigits->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('totalDigits' == $restricionName) {
|
|
|
+ $sTypeResTotalDigits = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:totalDigits');
|
|
|
+ $sTypeRes->appendChild($sTypeResTotalDigits);
|
|
|
+ $sTypeResTotalDigits->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('maxExclusive' == $restricionName) {
|
|
|
+ $sTypeResMaxExclusive = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:maxExclusive');
|
|
|
+ $sTypeRes->appendChild($sTypeResMaxExclusive);
|
|
|
+ $sTypeResMaxExclusive->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('minExclusive' == $restricionName) {
|
|
|
+ $sTypeResMinExclusive = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:minExclusive');
|
|
|
+ $sTypeRes->appendChild($sTypeResMinExclusive);
|
|
|
+ $sTypeResMinExclusive->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('maxInclusive' == $restricionName) {
|
|
|
+ $sTypeResMaxInclusive = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:maxInclusive');
|
|
|
+ $sTypeRes->appendChild($sTypeResMaxInclusive);
|
|
|
+ $sTypeResMaxInclusive->setAttribute('value', $restrictionValue);
|
|
|
+ } else if ('minInclusive' == $restricionName) {
|
|
|
+ $sTypeResMinInclusive = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:minInclusive');
|
|
|
+ $sTypeRes->appendChild($sTypeResMinInclusive);
|
|
|
+ $sTypeResMinInclusive->setAttribute('value', $restrictionValue);
|
|
|
+ }
|
|
|
+ /* TODO: xsd restrictions:
|
|
|
+ enumeration Defines a list of acceptable values
|
|
|
+ fractionDigits Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero
|
|
|
+ length Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero
|
|
|
+ maxExclusive Specifies the upper bounds for numeric values (the value must be less than this value)
|
|
|
+ maxInclusive Specifies the upper bounds for numeric values (the value must be less than or equal to this value)
|
|
|
+ maxLength Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero
|
|
|
+ minExclusive Specifies the lower bounds for numeric values (the value must be greater than this value)
|
|
|
+ minInclusive Specifies the lower bounds for numeric values (the value must be greater than or equal to this value)
|
|
|
+ minLength Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero
|
|
|
+ pattern Defines the exact sequence of characters that are acceptable
|
|
|
+ totalDigits Specifies the exact number of digits allowed. Must be greater than zero
|
|
|
+ whiteSpace Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled
|
|
|
+ */
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ foreach ($enumList as $enumValue) {
|
|
|
+ $sTypeResEnum = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:enumeration');
|
|
|
+ $sTypeRes->appendChild($sTypeResEnum);
|
|
|
+ $sTypeResEnum->setAttribute('value', $enumValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $elNode = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xs:element');
|
|
|
+ $rootNode->appendChild($elNode);
|
|
|
+ $elNode->setAttribute('name', $tblName);
|
|
|
+ $elNode->setAttribute('type', "{$objNs}:{$typeName}");
|
|
|
+
|
|
|
+ header('Content-type: application/xml');
|
|
|
+ echo $dom->saveXML();
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function navView() {
|
|
|
+ $backLabel = 'back';
|
|
|
+ $backLink = 'index.php?_route=Storage';
|
|
|
+ $backDisabled = true;
|
|
|
+ $currentLabel = 'Storage';
|
|
|
+ $currentLink = 'index.php?_route=Storage';
|
|
|
+ if ($task = V::get('_task', '', $_REQUEST)) {
|
|
|
+ $currentLink = "index.php?_route=Storage&_task={$task}";
|
|
|
+ $backDisabled = false;
|
|
|
+ $idStorage = V::get('idStorage', 0, $_REQUEST, 'int');
|
|
|
+ $tblName = V::get('table', '', $_REQUEST, 'word');
|
|
|
+ switch ($task) {
|
|
|
+ case 'tableList':
|
|
|
+ case 'viewList':
|
|
|
+ case 'rawInfo':
|
|
|
+ $backLabel = 'Storage';
|
|
|
+ $backLink = 'index.php?_route=Storage';
|
|
|
+ $currentLink = "index.php?_route=Storage&_task={$task}&idStorage={$idStorage}";
|
|
|
+ break;
|
|
|
+ case 'tableStruct':
|
|
|
+ $backLabel = "Tabele [{$idStorage}]";
|
|
|
+ $backLink = "index.php?_route=Storage&_task=tableList&idStorage={$idStorage}";
|
|
|
+ $currentLink = "index.php?_route=Storage&_task={$task}&idStorage={$idStorage}&table={$tblName}";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ switch ($task) {
|
|
|
+ case 'tableList': $currentLabel = "Tabele [{$idStorage}]"; break;
|
|
|
+ case 'viewList': $currentLabel = "Widoki [{$idStorage}]"; break;
|
|
|
+ case 'rawInfo': $currentLabel = "Raw info [{$idStorage}]"; break;
|
|
|
+ case 'tableStruct': $currentLabel = "Struktura tabeli '{$tblName}'"; break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ?>
|
|
|
+<nav class="navbar navbar-default navbar-static-top">
|
|
|
+ <div class="container-fluid">
|
|
|
+ <div class="navbar-left">
|
|
|
+ <ul class="nav navbar-nav navbar-center">
|
|
|
+ <li><a href="<?php echo $backLink; ?>" class="btn <?php echo ($backDisabled)? 'disabled' : ''; ?>"><i class="glyphicon glyphicon-chevron-left"></i> <?php echo $backLabel; ?></a></li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ <div class="navbar-left">
|
|
|
+ <ul class="nav navbar-nav navbar-center">
|
|
|
+ <li><a class="btn" href="<?php echo $currentLink; ?>"><?php echo $currentLabel; ?></a></li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ <div class="navbar-right">
|
|
|
+<!--
|
|
|
+ <ul class="nav navbar-nav navbar-right">
|
|
|
+ <li><a href="#">Link</a></li>
|
|
|
+ <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
|
|
|
+ <ul class="dropdown-menu">
|
|
|
+ <li><a href="#">Action</a></li>
|
|
|
+ <li><a href="#">Another action</a></li>
|
|
|
+ <li><a href="#">Something else here</a></li>
|
|
|
+ <li role="separator" class="divider"></li>
|
|
|
+ <li><a href="#">Separated link</a></li>
|
|
|
+ </ul>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+-->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</nav>
|
|
|
+ <?php
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getStorageList() {
|
|
|
+ $storageList = array();
|
|
|
+ $sth = DB::getPDO()->prepare("
|
|
|
+ select z.ID, z.`DESC`, z.`TYPE`
|
|
|
+ from CRM_LISTA_ZASOBOW z
|
|
|
+ where z.TYPE in('BAZA_DANYCH','DATABASE_MYSQL','DATABASE_POSTGRESQL')
|
|
|
+ ");
|
|
|
+ $sth->execute();
|
|
|
+ $rows = $sth->fetchAll();
|
|
|
+ foreach ($rows as $row) {
|
|
|
+ $storageList[$row['ID']] = $row;
|
|
|
+ }
|
|
|
+ return $storageList;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|