AntAclBase.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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 getXsdFieldType($fieldName) {
  29. $field = $this->_getField($fieldName);
  30. return $field['xsdType'];
  31. }
  32. public function getXsdMaxOccurs($fieldName) {
  33. $field = $this->_getField($fieldName);
  34. return $field['maxOccurs'];
  35. }
  36. public function getXsdMinOccurs($fieldName) {
  37. $field = $this->_getField($fieldName);
  38. return $field['minOccurs'];
  39. }
  40. public function getAttributesFromZasoby() {
  41. return [];// TODO: ...
  42. }
  43. public function isEnumerationField($fieldName) {
  44. return false; // TODO: ...
  45. }
  46. public function canWriteField($fieldName) {
  47. return false; // TODO: return $this->getPerms($fieldName)->canWrite()
  48. }
  49. public function canCreateField($fieldName) {
  50. return false; // TODO: return $this->getPerms($fieldName)->canCreate()
  51. }
  52. public function canReadField($fieldName) {
  53. return true; // TODO: return $this->getPerms($fieldName)->canRead()
  54. }
  55. public function getFields() {
  56. if (empty($this->_fields)) {
  57. // TODO: fetch fields from DB
  58. // Lib::loadClass('SchemaFactory');
  59. // $objectStorage = SchemaFactory::loadDefaultObject('SystemObject');
  60. // $item = $objectStorage->getItem($namespace, [
  61. // 'propertyName' => '*,field'
  62. // ]);
  63. }
  64. return $this->_fields;
  65. }
  66. public function _getField($fieldName) {
  67. foreach ($this->getFields() as $field) {
  68. if ($fieldName === $field['fieldNamespace']) return $field;
  69. }
  70. throw new Exception("Field not found '{$this->_namespace}/{$fieldName}'");
  71. }
  72. public static function buildInstance($idZasob, $conf = []) {
  73. static $_cache;
  74. if (!$_cache) $_cache = array();
  75. if (array_key_exists($idZasob, $_cache)) {
  76. return $_cache[$idZasob];
  77. }
  78. if (empty($conf)) {
  79. throw new Exception("Brak danych konfiguracyjnych do obiektu ant nr {$idZasob}");
  80. // TODO: fetch conf by $idZasob (or find $namespace first)
  81. // Lib::loadClass('SchemaFactory');
  82. // $objectStorage = SchemaFactory::loadDefaultObject('SystemObject');
  83. // $item = $objectStorage->getItem($namespace, [
  84. // 'propertyName' => '*,field'
  85. // ]);
  86. }
  87. DBG::log($conf, 'array', 'AntAclBase::buildInstance $conf');
  88. $acl = new AntAclBase($idZasob);
  89. $acl->_name = $conf['name'];
  90. $acl->_rootTableName = $conf['_rootTableName'];
  91. $acl->_namespace = $conf['namespace'];
  92. $acl->_fields = $conf['field']; // TODO: lazyLoading - use getFields() in all functions
  93. $acl->_primaryKey = $conf['primaryKey'];
  94. // 'idZasob' => '25872',
  95. // 'idDatabase' => '36',
  96. // 'namespace' => 'default_db/CRM_PROCES/CRM_PROCES',
  97. // '_rootTableName' => 'CRM_PROCES',
  98. // '_type' => 'AntAcl',
  99. // 'isActive' => '1',
  100. // 'isStructInstalled' => '1',
  101. // 'description' => '',
  102. // 'name' => 'CRM_PROCES',
  103. // 'nsPrefix' => 'default_db__x3A__CRM_PROCES',
  104. // 'typeName' => 'default_db__x3A__CRM_PROCES:CRM_PROCES',
  105. // 'reinstallLink' => 'https://biuro.biall-net.pl/dev-pl/se-master/index.php?_route=Storage&_task=objectReinstall&namespace=default_db/CRM_PROCES/CRM_PROCES',
  106. // 'field' => [
  107. // 0 => [
  108. // 'namespace' => 'default_db/CRM_PROCES/CRM_PROCES/ID',
  109. // 'fieldNamespace' => 'ID',
  110. // 'idZasob' => NULL,
  111. // 'idDatabase' => '36',
  112. // '_rootTableName' => 'CRM_PROCES',
  113. // 'objectNamespace' => 'default_db/CRM_PROCES/CRM_PROCES',
  114. // 'xsdType' => 'xsd:int',
  115. // 'xsdRestrictions' => '[]',
  116. // 'appInfo' => '[]',
  117. // 'minOccurs' => '0',
  118. // 'maxOccurs' => '1',
  119. // 'isActive' => '1',
  120. // 'description' => '',
  121. // ),
  122. $_cache[$idZasob] = $acl;
  123. return $_cache[$idZasob];
  124. }
  125. }