AntAclBase.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /**
  3. * SE/schema/ant-object/default_db.{rootTableName}/{name}/build.xml
  4. */
  5. class AntAclBase extends Core_AclBase {
  6. public function __construct($zasobID = 0) {
  7. $this->_zasobID = $zasobID;
  8. $this->_name = '';
  9. $this->_namespace = '';
  10. $this->_rootTableName = '';
  11. $this->_primaryKey = '';
  12. $this->_fields = [];
  13. }
  14. public function getName() { return $this->_name; }
  15. public function getNamespace() { return $this->_namespace; }
  16. public function getSourceName() { return 'default_db'; } // TODO: ?
  17. public function getRootTableName() { $this->_rootTableName; }
  18. public function getPrimaryKeyField() { $this->_primaryKey; }
  19. public function getRealFieldListByIdZasob() {
  20. $cols = array();
  21. $fakeZasobId = 1000000;
  22. foreach ($this->getFields() as $field) {
  23. $idZasobField = ($field['idZasob']) ? $field['idZasob'] : $fakeZasobId++;
  24. $cols[$idZasobField] = $field['fieldNamespace'];
  25. }
  26. return $cols;
  27. }
  28. // public function getFieldType($fieldName) {
  29. // try {
  30. // throw new Exception("TODO: AntAclBase::getFieldType({$fieldName})");
  31. // } catch (Exception $e) {
  32. // DBG::log($e);
  33. // }
  34. // $field = $this->_getField($fieldName);
  35. // return $field['xsdType'];
  36. // }
  37. public function getXsdFieldType($fieldName) {
  38. $field = $this->_getField($fieldName);
  39. return $field['xsdType'];
  40. }
  41. public function getXsdMaxOccurs($fieldName) {
  42. $field = $this->_getField($fieldName);
  43. return $field['maxOccurs'];
  44. }
  45. public function getXsdMinOccurs($fieldName) {
  46. $field = $this->_getField($fieldName);
  47. return $field['minOccurs'];
  48. }
  49. public function getAttributesFromZasoby() {
  50. return [];// TODO: ...
  51. }
  52. public function isGeomField($fieldName) {
  53. return ('the_geom' === $fieldName); // TODO: ...
  54. }
  55. public function isEnumerationField($fieldName) {
  56. return false; // TODO: ...
  57. }
  58. public function canWriteField($fieldName) {
  59. return false; // TODO: return $this->getPerms($fieldName)->canWrite()
  60. }
  61. public function canCreateField($fieldName) {
  62. return false; // TODO: return $this->getPerms($fieldName)->canCreate()
  63. }
  64. public function canReadField($fieldName) {
  65. return true; // TODO: return $this->getPerms($fieldName)->canRead()
  66. }
  67. public function getFields() {
  68. if (empty($this->_fields)) {
  69. // TODO: fetch fields from DB
  70. // Lib::loadClass('SchemaFactory');
  71. // $objectStorage = SchemaFactory::loadDefaultObject('SystemObject');
  72. // $item = $objectStorage->getItem($namespace, [
  73. // 'propertyName' => '*,field'
  74. // ]);
  75. }
  76. return $this->_fields;
  77. }
  78. public function _getField($fieldName) {
  79. foreach ($this->getFields() as $field) {
  80. if ($fieldName === $field['fieldNamespace']) return $field;
  81. }
  82. throw new Exception("Field not found '{$this->_namespace}/{$fieldName}'");
  83. }
  84. public function getItems($params = []) {
  85. DBG::log($params, 'array', "AntAclBase::getItems params");
  86. return [];
  87. }
  88. public static function buildInstance($idZasob, $conf = []) {
  89. static $_cache;
  90. if (!$_cache) $_cache = array();
  91. if (array_key_exists($idZasob, $_cache)) {
  92. return $_cache[$idZasob];
  93. }
  94. if (empty($conf)) {
  95. throw new Exception("Brak danych konfiguracyjnych do obiektu ant nr {$idZasob}");
  96. // TODO: fetch conf by $idZasob (or find $namespace first)
  97. // Lib::loadClass('SchemaFactory');
  98. // $objectStorage = SchemaFactory::loadDefaultObject('SystemObject');
  99. // $item = $objectStorage->getItem($namespace, [
  100. // 'propertyName' => '*,field'
  101. // ]);
  102. }
  103. DBG::log($conf, 'array', 'AntAclBase::buildInstance $conf');
  104. $acl = new AntAclBase($idZasob);
  105. $acl->_name = $conf['name'];
  106. $acl->_rootTableName = $conf['_rootTableName'];
  107. $acl->_namespace = $conf['namespace'];
  108. $acl->_fields = $conf['field']; // TODO: lazyLoading - use getFields() in all functions
  109. $acl->_primaryKey = $conf['primaryKey'];
  110. // 'idZasob' => '25872',
  111. // 'idDatabase' => '36',
  112. // 'namespace' => 'default_db/CRM_PROCES/CRM_PROCES',
  113. // '_rootTableName' => 'CRM_PROCES',
  114. // '_type' => 'AntAcl',
  115. // 'isActive' => '1',
  116. // 'isStructInstalled' => '1',
  117. // 'description' => '',
  118. // 'name' => 'CRM_PROCES',
  119. // 'nsPrefix' => 'default_db__x3A__CRM_PROCES',
  120. // 'typeName' => 'default_db__x3A__CRM_PROCES:CRM_PROCES',
  121. // 'reinstallLink' => 'https://biuro.biall-net.pl/dev-pl/se-master/index.php?_route=Storage&_task=objectReinstall&namespace=default_db/CRM_PROCES/CRM_PROCES',
  122. // 'field' => [
  123. // 0 => [
  124. // 'namespace' => 'default_db/CRM_PROCES/CRM_PROCES/ID',
  125. // 'fieldNamespace' => 'ID',
  126. // 'idZasob' => NULL,
  127. // 'idDatabase' => '36',
  128. // '_rootTableName' => 'CRM_PROCES',
  129. // 'objectNamespace' => 'default_db/CRM_PROCES/CRM_PROCES',
  130. // 'xsdType' => 'xsd:int',
  131. // 'xsdRestrictions' => '[]',
  132. // 'appInfo' => '[]',
  133. // 'minOccurs' => '0',
  134. // 'maxOccurs' => '1',
  135. // 'isActive' => '1',
  136. // 'description' => '',
  137. // ),
  138. $_cache[$idZasob] = $acl;
  139. return $_cache[$idZasob];
  140. }
  141. }