Просмотр исходного кода

added Core_AclSimpleSchema::getSimpleSchemaTree()

Piotr Labudda 9 лет назад
Родитель
Сommit
2519616937

+ 36 - 0
SE/se-lib/Core/AclSimpleSchemaBase.php

@@ -142,6 +142,42 @@ class Core_AclSimpleSchemaBase extends Core_AclBase {
 
   public function hasSimpleSchema() { return true; }
   public function getSimpleSchema() { return $this->_simpleSchema; }
+  public function getSimpleSchemaTree() {
+    $tree = array();
+    foreach ($this->_simpleSchema['root'] as $fieldName => $field) {
+      $tree[ $fieldName ] = $field;
+      if (is_array($field) && !empty($field['@ref'])) {
+        $tree[ $fieldName ] = $this->_getSimpleSchemaTreeRec($field['@ref']);
+      }
+    }
+    return $tree;
+  }
+  public function _getSimpleSchemaTreeRec($ref) {
+    // echo "<p>DBG: F._getSimpleSchemaTreeRec({$ref})</p>";
+    $tree = array();
+    if (!empty($this->_simpleSchema[ $ref ])) {
+      $tree = array();
+      foreach ($this->_simpleSchema[ $ref ] as $fieldName => $field) {
+        // echo "<p>DBG: F._getSimpleSchemaTreeRec({$ref}) 1/'{$fieldName}'</p>";
+        $tree[ $fieldName ] = $field;
+        if (is_array($field) && !empty($field['@ref'])) {
+          $tree[ $fieldName ] = $this->_getSimpleSchemaTreeRec($field['@ref']);
+        }
+      }
+    } else {
+      $acl = Core_AclHelper::getAclByNamespace($ref);
+      $tree[ '@namespace' ] = $acl->getNamespace();
+      foreach ($acl->getXsdTypes() as $fieldName => $field) {
+        // echo "<p>DBG: F._getSimpleSchemaTreeRec({$ref}) 2/'{$fieldName}'</p>";
+        $tree[ $fieldName ] = $field;
+        if (is_array($field) && !empty($field['@ref'])) {
+          $tree[ $fieldName ] = $this->_getSimpleSchemaTreeRec($field['@ref']);
+        }
+      }
+    }
+    // echo'<pre>F._getSimpleSchemaTreeRec('.$ref.') tree';print_r($tree);echo'</pre>';
+    return $tree;
+  }
   public function getName() { return $this->_name; }
   public function getRootTableName() { $this->_rootTableName; }
   public function getXsdTypes() { return $this->_xsdTypes; }

+ 6 - 5
SE/se-lib/Route/UrlAction/UserProNetMediaZaliczka.php

@@ -39,7 +39,7 @@ class Route_UrlAction_UserProNetMediaZaliczka extends RouteBase {// TODO: UrlAct
 		UI::emptyTag('br');
 
 		$acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka");//User::getAcl()->getObjectAcl();
-		$schema = $this->getSchema();//$acl->getSimpleSchema();
+		$schema = $acl->getSimpleSchemaTree();
 		$zaliczkaData = $this->fetchDataBySchema($schema, $idUser);
 
 		?>
@@ -49,13 +49,14 @@ function zaliczkaFetchData(query, fieldType, resultCallback) {
 
   // fieldType: Object {"@baseTypeName": "default_db:IN7_DZIENNIK_KORESP", id: "xsd:integer", title: "xsd:string", kategoriaKosztu: "xsd:string"}
   if ('object' === typeof fieldType) {
-    if (!fieldType['@baseTypeName']) {
+    if (!fieldType['@namespace']) {
       // TODO: log error
       console.error("BUG: Missing typeName in fieldType");
       return;
     }
-    switch (fieldType['@baseTypeName']) {
-      case 'default_db:IN7_DZIENNIK_KORESP': {
+    switch (fieldType['@namespace']) {
+      case 'default_db/IN7_DZIENNIK_KORESP': {
+				
         console.warn("TODO: fetch by ajax default_db:IN7_DZIENNIK_KORESP");
         var options = [
           { id: 65432, title: 'testowa koresp 1', kategoriaKosztu: 'KOSZT1' },
@@ -64,7 +65,7 @@ function zaliczkaFetchData(query, fieldType, resultCallback) {
         ]
         resultCallback(options);
       } break;
-      case 'default_db:IN7_MK_BAZA_DYSTRYBUCJI': {
+      case 'default_db/IN7_MK_BAZA_DYSTRYBUCJI': {
         console.warn("TODO: fetch by ajax default_db:IN7_MK_BAZA_DYSTRYBUCJI");
         var options = [
           { id: 100, nrBudowy: 'Budowa 100/2016' },

+ 8 - 0
SE/se-lib/Schema/AccessOwnerStorageAcl.php

@@ -14,6 +14,14 @@ class Schema_AccessOwnerStorageAcl extends Core_AclBase {
   public function getFieldListByIdZasob() { return $this->getRealFieldListByIdZasob(); }
   public function getVisibleFieldListByIdZasob() { return $this->getRealFieldListByIdZasob(); }
   public function getVirtualFieldListByIdZasob() { return array(); }
+  public function getXsdTypes() {// TODO: mv to Core_AclBase
+    $xsdTypes = array();
+    foreach ($this->getFields() as $idZasob => $field) {
+      $xsdTypes[ $field['name'] ] = $field;
+      $xsdTypes[ $field['name'] ][ 'xsdType' ] = $this->getXsdFieldType($field['name']);
+    }
+    return $xsdTypes;
+  }
   public function getRealFieldListByIdZasob($force = false) {
     $cols = array();
     $cols[100000] = 'id';// ADMIN_USERS.ID