commit 377e087d2bde44f479bedeb4f3c07d0697aad409
parent aaed438644fb3aeba75e23f188d1e1d274e9a19e
Author: Jan Dankert <devnull@localhost>
Date: Tue, 21 Aug 2018 23:39:05 +0200
Neue Funktionen zum kumulierten Lesen der Objekteinstellungen. Dafür einige Methoden aus dem Folder in die Basisklasse hochgezogen.
Diffstat:
3 files changed, 164 insertions(+), 122 deletions(-)
diff --git a/modules/cms-core/model/BaseObject.class.php b/modules/cms-core/model/BaseObject.class.php
@@ -14,6 +14,7 @@ namespace {
namespace cms\model {
use phpseclib\Math\BigInteger;
+ use Spyc;
/**
* Superklasse fuer Objekte im Projektbaum.
@@ -179,9 +180,10 @@ namespace cms\model {
public $typeid;
+ var $parentfolders = array();
/**
- * @type array
+ * @type String
*/
public $settings;
@@ -1381,6 +1383,167 @@ SQL
}
+ /**
+ * Local Settings.
+ *
+ * @return array
+ */
+ public function getSettings()
+ {
+ return Spyc::YAMLLoad($this->settings);
+ }
+
+
+ /**
+ * Inherited Settings.
+ *
+ * @return array
+ */
+ public function getTotalSettings()
+ {
+ $totalSettings = array();
+
+ // cumulate settings of parent objects
+ $parentIds = array_keys( $this->parentObjectFileNames(true, false) );
+ foreach( $parentIds as $id )
+ {
+ $parentObject = new BaseObject( $id );
+ $parentObject->objectLoad();
+ $totalSettings = array_merge($totalSettings,$parentObject->getSettings());
+ }
+
+ // add settings from this base object.
+ $totalSettings = array_merge($totalSettings,$this->getSettings());
+
+ return $totalSettings;
+ }
+
+
+
+ /**
+ * Liefert alle übergeordneten Ordner.
+ *
+ * @param bool $with_root Mit Root-Folder?
+ * @param bool $with_self Mit dem aktuellen Ordner?
+ * @return array
+ */
+ public function parentObjectFileNames( $with_root = false, $with_self = false )
+ {
+ $db = \Session::getDatabase();
+
+ $foid = $this->id;
+ $idCache = array();
+
+ while( intval($foid)!=0 )
+ {
+ $sql = $db->sql( <<<SQL
+
+ SELECT parentid,id,filename
+ FROM {{object}}
+ WHERE {{object}}.id={parentid}
+
+SQL
+ );
+ $sql->setInt('parentid' ,$foid );
+
+ $row = $sql->getRow();
+
+ if ( in_array($row['id'],$idCache))
+ throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']);
+ else
+ $idCache[] = $row['id'];
+
+ $this->addParentfolder( $row['id'],$row['filename'] );
+ $foid = $row['parentid'];
+ }
+
+
+ $this->checkParentFolders($with_root,$with_self);
+
+ return $this->parentfolders;
+ }
+
+ public function parentObjectNames( $with_root = false, $with_self = false )
+ {
+ $db = \Session::getDatabase();
+
+ $foid = $this->id;
+ $idCache = array();
+
+ while( intval($foid)!=0 )
+ {
+ $sql = $db->sql( <<<SQL
+
+ SELECT {{object}}.parentid,{{object}}.id,{{object}}.filename,{{name}}.name FROM {{object}}
+ LEFT JOIN {{name}}
+ ON {{object}}.id = {{name}}.objectid
+ AND {{name}}.languageid = {languageid}
+ WHERE {{object}}.id={parentid}
+
+SQL
+ );
+ $sql->setInt('languageid',$this->languageid);
+ $sql->setInt('parentid' ,$foid );
+
+ $row = $sql->getRow();
+
+ if ( in_array($row['id'],$idCache))
+ throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']);
+ else
+ $idCache[] = $row['id'];
+
+ $this->addParentfolder( $row['id'],$row['name'],$row['filename'] );
+ $foid = $row['parentid'];
+ }
+
+ $this->checkParentFolders($with_root,$with_self);
+
+ return $this->parentfolders;
+ }
+
+
+ private function addParentFolder( $id,$name,$filename='' )
+ {
+ if ( empty($name) )
+ $name = $filename;
+
+ if ( empty($name) )
+ $name = "($id)";
+
+ if ( intval($id) != 0 )
+ $this->parentfolders[ $id ] = $name;
+ }
+
+
+ private function checkParentFolders( $with_root, $with_self )
+ {
+ // Reihenfolge umdrehen
+ $this->parentfolders = array_reverse($this->parentfolders,true);
+
+ // Ordner ist bereits hoechster Ordner
+ // if ( count($this->parentfolders) == 2 && $this->isRoot && $with_root && $with_self )
+ // {
+ // array_pop ( $this->parentfolders );
+ // return;
+ // }
+
+
+ if ( !$with_root && !empty($this->parentfolders) )
+ {
+ $keys = array_keys( $this->parentfolders );
+ unset( $this->parentfolders[$keys[0]] );
+ }
+
+ if ( !$with_self && !empty($this->parentfolders) )
+ {
+ $keys = array_keys( $this->parentfolders );
+ unset( $this->parentfolders[$keys[count($keys)-1]] );
+ }
+ }
+
}
+
+
+
}?>
\ No newline at end of file
diff --git a/modules/cms-core/model/Folder.class.php b/modules/cms-core/model/Folder.class.php
@@ -29,7 +29,6 @@ class Folder extends BaseObject
{
var $folderid;
var $projectid;
- var $parentfolders = array();
var $subfolders = array();
var $filenames = true;
var $name = '';
@@ -485,45 +484,6 @@ class Folder extends BaseObject
}
- function addParentFolder( $id,$name,$filename='' )
- {
- if ( empty($name) )
- $name = $filename;
-
- if ( empty($name) )
- $name = "($id)";
-
- if ( intval($id) != 0 )
- $this->parentfolders[ $id ] = $name;
- }
-
-
- function checkParentFolders( $with_root, $with_self )
- {
- // Reihenfolge umdrehen
- $this->parentfolders = array_reverse($this->parentfolders,true);
-
- // Ordner ist bereits hoechster Ordner
-// if ( count($this->parentfolders) == 2 && $this->isRoot && $with_root && $with_self )
-// {
-// array_pop ( $this->parentfolders );
-// return;
-// }
-
-
- if ( !$with_root && !empty($this->parentfolders) )
- {
- $keys = array_keys( $this->parentfolders );
- unset( $this->parentfolders[$keys[0]] );
- }
-
- if ( !$with_self && !empty($this->parentfolders) )
- {
- $keys = array_keys( $this->parentfolders );
- unset( $this->parentfolders[$keys[count($keys)-1]] );
- }
- }
-
/**
* Ermitteln des Dateinamens.
* @return String Dateiname
@@ -581,86 +541,6 @@ class Folder extends BaseObject
}
- /**
- * Liefert alle übergeordneten Ordner.
- *
- * @param bool $with_root Mit Root-Folder?
- * @param bool $with_self Mit dem aktuellen Ordner?
- * @return array
- */
- function parentObjectFileNames( $with_root = false, $with_self = false )
- {
- $db = \Session::getDatabase();
-
- $foid = $this->id;
- $idCache = array();
-
- while( intval($foid)!=0 )
- {
- $sql = $db->sql( <<<SQL
-
-SELECT parentid,id,filename
- FROM {{object}}
- WHERE {{object}}.id={parentid}
-
-SQL
- );
- $sql->setInt('parentid' ,$foid );
-
- $row = $sql->getRow();
-
- if ( in_array($row['id'],$idCache))
- throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']);
- else
- $idCache[] = $row['id'];
-
- $this->addParentfolder( $row['id'],$row['filename'] );
- $foid = $row['parentid'];
- }
-
-
- $this->checkParentFolders($with_root,$with_self);
-
- return $this->parentfolders;
- }
-
- function parentObjectNames( $with_root = false, $with_self = false )
- {
- $db = \Session::getDatabase();
-
- $foid = $this->id;
- $idCache = array();
-
- while( intval($foid)!=0 )
- {
- $sql = $db->sql( <<<SQL
-
-SELECT {{object}}.parentid,{{object}}.id,{{object}}.filename,{{name}}.name FROM {{object}}
- LEFT JOIN {{name}}
- ON {{object}}.id = {{name}}.objectid
- AND {{name}}.languageid = {languageid}
- WHERE {{object}}.id={parentid}
-
-SQL
- );
- $sql->setInt('languageid',$this->languageid);
- $sql->setInt('parentid' ,$foid );
-
- $row = $sql->getRow();
-
- if ( in_array($row['id'],$idCache))
- throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']);
- else
- $idCache[] = $row['id'];
-
- $this->addParentfolder( $row['id'],$row['name'],$row['filename'] );
- $foid = $row['parentid'];
- }
-
- $this->checkParentFolders($with_root,$with_self);
-
- return $this->parentfolders;
- }
// Ermitteln aller Unterordner
diff --git a/modules/cms-core/model/Project.class.php b/modules/cms-core/model/Project.class.php
@@ -965,7 +965,6 @@ SQL
* @see objectClasses/Object#getAllObjectIds()
* @param types Array
* @return Liste von Object-Ids
- * @deprecated use Project!
*/
public function getAllObjectIds( $types=array('folder','page','link','file') )
{