Browse Source

+ handle TableAcl primaryKey set in Storage

Piotr Labudda 7 years ago
parent
commit
0c07ffd2cb
1 changed files with 15 additions and 7 deletions
  1. 15 7
      SE/se-lib/TableAcl.php

+ 15 - 7
SE/se-lib/TableAcl.php

@@ -42,11 +42,13 @@ class TableAcl extends Core_AclBase {
 	public $_types = array();
 	public $_virtualFieldsIdList = array();
 	public $_schemaLoaded = false;
+	public $_primaryKeyField = null;
+	public $_sourceNamespace = null;
 
 	public function __construct($zasobID) { $this->_zasobID = $zasobID; }
-	public function getNamespace() { return 'default_db/' . $this->getName(); }
-	public function getRootNamespace() { return 'default_db/' . $this->getName(); }
-	public function getSourceName() { return 'default_db'; }
+	public function getNamespace() { return $this->_sourceNamespace ? $this->_sourceNamespace . "/" . $this->getName() : 'default_db/' . $this->getName(); }
+	public function getRootNamespace() { return $this->getNamespace(); }
+	public function getSourceName() { return $this->_sourceNamespace ? $this->_sourceNamespace : 'default_db'; }
 	public function getName() { return $this->_name; }
 	public function getRootTableName() {
 		if (empty($this->_name)) return null;// throw new Exception("Table name not defined");
@@ -952,7 +954,7 @@ class TableAcl extends Core_AclBase {
 				if (empty($objectList)) throw new Exception("Acl [{$idTable}] not exists in SystemObject"); // TODO: update Storage object list?
 
 				$objItem = reset($objectList);
-				DBG::log($objItem, 'array', "DBG objItem({$idTable})");
+				// DBG::log($objItem, 'array', "DBG objItem({$idTable})");
 				switch ($objItem['_type']) {
 					// case 'TableAcl': // TODO: TEST - to replace TableAcl by AntAcl or use object with namespace + '/tableName'?
 					case 'AntAcl': {
@@ -1456,7 +1458,7 @@ class TableAcl extends Core_AclBase {
 	}
 
 	public function fromArray($arr) {
-		// DBG::log("fromArray(name='{$arr['name']}')");
+		// DBG::log($arr, 'array', "fromArray(name='{$arr['name']}')");
 		$this->_db = $arr['db'];
 		$this->_name = $arr['name'];
 		$this->_rootTableName = V::get('_rootTableName', null, $arr);
@@ -1805,16 +1807,22 @@ class TableAcl extends Core_AclBase {
 		$dsConfig['field_types'] = $this->getTypes();
 		$dsConfig['fields_virtual'] = $this->getVirtualFieldListByIdZasob();
 		$dsConfig['acl_fltr_allowed'] = !$this->hasSuperAccessPerms(); // filtr Access is visible only if user dont have supe access perms. If has then see all rows
+		// DBG::log($dsConfig, 'array', "DBG:DataSourceFactory::buildFromZasobInfo(\$dsConfig)");
 		return DataSourceFactory::buildFromZasobInfo($dsConfig);
 	}
 
 	public function getPrimaryKeyField() {
+		if ($this->_primaryKeyField) return $this->_primaryKeyField;
 		if ($this->loadSchema()) {
 			$pkField = $this->_schemaClass->getPrimaryKeyField();
-			if ($pkField) return $pkField;
+			if ($pkField) {
+				$this->_primaryKeyField = $pkField;
+				return $this->_primaryKeyField;
+			}
 		}
 		$ds = $this->getDataSource();
-		return $ds->getPrimaryKeyField();
+		$this->_primaryKeyField = $ds->getPrimaryKeyField();
+		return $this->_primaryKeyField;
 	}
 
 	public function isIntegerField($fldName) {