inc.ClassFolder.php

This commit is contained in:
Jörg Neugebauer 2017-10-28 14:28:12 +02:00
parent ab73fe5298
commit 3f2e24f80d
3 changed files with 332 additions and 224 deletions

View File

@ -561,7 +561,7 @@ class SeedDMS_Core_DMS {
* If user authentication was done externally, this function can
* be used to tell the dms who is currently logged in.
*
* @return object $user
* @return SeedDMS_Core_User $user
*
*/
function getLoggedInUser() { /* {{{ */

View File

@ -186,7 +186,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
protected $_sequence;
/**
* @var object temp. storage for latestcontent
* @var SeedDMS_Core_DocumentContent temp. storage for latestcontent
*/
protected $_latestContent;
@ -200,7 +200,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
*/
protected $_folder;
/** @var SeedDMS_Core_UserAccess[] */
/** @var array of SeedDMS_Core_UserAccess and SeedDMS_Core_GroupAccess */
protected $_accessList;
function __construct($id, $name, $comment, $date, $expires, $ownerID, $folderID, $inheritAccess, $defaultAccess, $locked, $keywords, $sequence) { /* {{{ */
@ -557,7 +557,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* will not have read access anymore.
*
* @param integer $mode access mode
* @param boolean $noclean set to true if notifier list shall not be clean up
* @param bool|string $noclean set to true if notifier list shall not be clean up
* @return bool
*/
function setDefaultAccess($mode, $noclean="false") { /* {{{ */
@ -802,7 +802,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
*
* @param int $mode access mode (defaults to M_ANY)
* @param int|string $op operation (defaults to O_EQ)
* @return bool|SeedDMS_Core_UserAccess[]
* @return bool|array
*/
function getAccessList($mode = M_ANY, $op = O_EQ) { /* {{{ */
$db = $this->_dms->getDB();
@ -970,7 +970,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
$accessList = $this->getAccessList();
if (!$accessList) return false;
foreach ($accessList["users"] as $userAccess) {
/** @var SeedDMS_Core_UserAccess $userAccess */
foreach ($accessList["users"] as $userAccess) {
if ($userAccess->getUserID() == $user->getID()) {
$mode = $userAccess->getMode();
if ($user->isGuest()) {
@ -983,7 +984,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
/* Get the highest right defined by a group */
if($accessList['groups']) {
$mode = 0;
foreach ($accessList["groups"] as $groupAccess) {
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($user->isMemberOfGroup($groupAccess->getGroup())) {
if ($groupAccess->getMode() > $mode)
$mode = $groupAccess->getMode();
@ -1014,7 +1016,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* The function takes inherited access rights into account.
* For a list of possible access rights see @file inc.AccessUtils.php
*
* @param $group object instance of class SeedDMS_Core_Group
* @param SeedDMS_Core_Group $group object instance of class SeedDMS_Core_Group
* @return integer access mode
*/
function getGroupAccessMode($group) { /* {{{ */
@ -1026,7 +1028,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
if (!$accessList)
return false;
foreach ($accessList["groups"] as $groupAccess) {
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($groupAccess->getGroupID() == $group->getID()) {
$foundInACL = true;
if ($groupAccess->getMode() > $highestPrivileged)
@ -1043,7 +1046,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
return $this->getDefaultAccess();
} /* }}} */
/**
/**
* Returns a list of all notifications
*
* The returned list has two elements called 'users' and 'groups'. Each one
@ -1051,8 +1054,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* SeedDMS_Core_Group.
*
* @param integer $type type of notification (not yet used)
* @return array list of notifications
*/
* @return array|bool
*/
function getNotifyList($type=0) { /* {{{ */
if (empty($this->_notifyList)) {
$db = $this->_dms->getDB();
@ -1092,7 +1095,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
/* Make a copy of both notifier lists because removeNotify will empty
* $this->_notifyList and the second foreach will not work anymore.
*/
/** @var SeedDMS_Core_User[] $nusers */
$nusers = $this->_notifyList["users"];
/** @var SeedDMS_Core_Group[] $ngroups */
$ngroups = $this->_notifyList["groups"];
foreach ($nusers as $u) {
if ($this->getAccessMode($u) < M_READ) {
@ -1172,7 +1177,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
// that the current group has not been explicitly excluded.
$acl = $this->getAccessList(M_NONE, O_EQ);
$found = false;
foreach ($acl["groups"] as $group) {
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
break;
@ -1190,7 +1196,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
return -4;
}
$found = false;
foreach ($acl["groups"] as $group) {
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
break;
@ -1240,6 +1247,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
$db = $this->_dms->getDB();
/* Verify that user / group exists. */
/** @var SeedDMS_Core_Group|SeedDMS_Core_User $obj */
$obj = ($isUser ? $this->_dms->getUser($userOrGroupID) : $this->_dms->getGroup($userOrGroupID));
if (!is_object($obj)) {
return -1;
@ -1315,8 +1323,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* @param array $attributes list of version attributes. The element key
* must be the id of the attribute definition.
* @param object $workflow
* @return bool/array false in case of an error or a result set
*/
* @return bool|SeedDMS_Core_AddContentResultSet
*/
function addContent($comment, $user, $tmpFile, $orgFileName, $fileType, $mimeType, $reviewers=array(), $approvers=array(), $version=0, $attributes=array(), $workflow=null) { /* {{{ */
$db = $this->_dms->getDB();
@ -1365,7 +1373,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
$this->_content = null;
$this->_latestContent = null;
$content = $this->getLatestContent($contentID);
$content = $this->getLatestContent($contentID); /** @todo: Parameter not defined in Funktion */
$docResultSet = new SeedDMS_Core_AddContentResultSet($content);
$docResultSet->setDMS($this->_dms);
@ -1402,7 +1410,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
// and submit comments, if appropriate. Reviewers can also recommend that
// a document be rejected.
$pendingReview=false;
$reviewRes = array();
/** @noinspection PhpUnusedLocalVariableInspection */
$reviewRes = array(); /** @todo unused variable */
foreach (array("i", "g") as $i){
if (isset($reviewers[$i])) {
foreach ($reviewers[$i] as $reviewerID) {
@ -1420,7 +1429,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
// Add approvers to the database. Approvers must also review the document
// and make a recommendation on its release as an approved version.
$pendingApproval=false;
$approveRes = array();
/** @noinspection PhpUnusedLocalVariableInspection */
$approveRes = array(); /** @todo unused variable */
foreach (array("i", "g") as $i){
if (isset($approvers[$i])) {
foreach ($approvers[$i] as $approverID) {
@ -1458,7 +1468,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
return false;
}
$docResultSet->setStatus($status,$comment,$user);
/** @noinspection PhpMethodParametersCountMismatchInspection */
$docResultSet->setStatus($status,$comment,$user); /** @todo parameter count wrong */
$db->commitTransaction();
return $docResultSet;
@ -1496,7 +1507,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
if ((int) $version<1) {
$queryStr = "SELECT MAX(`version`) as m from `tblDocumentContent` where `document` = ".$this->_id;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$res)
if (is_bool($resArr) && !$res) /** @todo undefined variable */
return false;
$version = $resArr[0]['m'];
@ -1551,21 +1562,22 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* out. Access rights based on the document status are calculated for the
* currently logged in user.
*
* @return array list of objects of class SeedDMS_Core_DocumentContent
*/
* @return bool|SeedDMS_Core_DocumentContent[]
*/
function getContent() { /* {{{ */
$db = $this->_dms->getDB();
if (!isset($this->_content)) {
$queryStr = "SELECT * FROM `tblDocumentContent` WHERE `document` = ".$this->_id." ORDER BY `version`";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$res)
if (is_bool($resArr) && !$res) /** @todo undefined variable */
return false;
$this->_content = array();
$classname = $this->_dms->getClassname('documentcontent');
$user = $this->_dms->getLoggedInUser();
foreach ($resArr as $row) {
/** @var SeedDMS_Core_DocumentContent $content */
$content = new $classname($row["id"], $this, $row["version"], $row["comment"], $row["date"], $row["createdBy"], $row["dir"], $row["orgFileName"], $row["fileType"], $row["mimeType"], $row['fileSize'], $row['checksum']);
if($user) {
if($content->getAccessMode($user) >= M_READ)
@ -1587,7 +1599,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* currently logged in user.
*
* @param integer $version version number of content element
* @return object/boolean object of class {@link SeedDMS_Core_DocumentContent}
* @return SeedDMS_Core_DocumentContent|boolean object of class {@link SeedDMS_Core_DocumentContent}
* or false
*/
function getContentByVersion($version) { /* {{{ */
@ -1604,13 +1616,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT * FROM `tblDocumentContent` WHERE `document` = ".$this->_id." AND `version` = " . (int) $version;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$res)
if (is_bool($resArr) && !$res) /** @todo undefined variable */
return false;
if (count($resArr) != 1)
return false;
$resArr = $resArr[0];
$classname = $this->_dms->getClassname('documentcontent');
/** @var SeedDMS_Core_DocumentContent $content */
if($content = new $classname($resArr["id"], $this, $resArr["version"], $resArr["comment"], $resArr["date"], $resArr["createdBy"], $resArr["dir"], $resArr["orgFileName"], $resArr["fileType"], $resArr["mimeType"], $resArr['fileSize'], $resArr['checksum'])) {
$user = $this->_dms->getLoggedInUser();
/* A user with write access on the document may always see the version */
@ -1623,6 +1636,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
}
} /* }}} */
/**
* @return bool|null|SeedDMS_Core_DocumentContent
*/
function __getLatestContent() { /* {{{ */
if (!$this->_latestContent) {
$db = $this->_dms->getDB();
@ -1651,20 +1667,21 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* Access rights based on the document status are calculated for the
* currently logged in user.
*
* @return object object of class {@link SeedDMS_Core_DocumentContent}
* @return bool|SeedDMS_Core_DocumentContent object of class {@link SeedDMS_Core_DocumentContent}
*/
function getLatestContent() { /* {{{ */
if (!$this->_latestContent) {
$db = $this->_dms->getDB();
$queryStr = "SELECT * FROM `tblDocumentContent` WHERE `document` = ".$this->_id." ORDER BY `version` DESC";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$res)
if (is_bool($resArr) && !$res) /** @todo: $res not defined */
return false;
$classname = $this->_dms->getClassname('documentcontent');
$user = $this->_dms->getLoggedInUser();
foreach ($resArr as $row) {
if (!$this->_latestContent) {
/** @var SeedDMS_Core_DocumentContent $content */
$content = new $classname($row["id"], $this, $row["version"], $row["comment"], $row["date"], $row["createdBy"], $row["dir"], $row["orgFileName"], $row["fileType"], $row["mimeType"], $row['fileSize'], $row['checksum']);
if($user) {
/* If the user may even write the document, then also allow to see all content.
@ -1686,7 +1703,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
/**
* Remove version of document
*
* @param interger $version version number of content
* @param SeedDMS_Core_DocumentContent $version version number of content
* @return boolean true if successful, otherwise false
*/
private function _removeContent($version) { /* {{{ */
@ -1813,11 +1830,12 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
return true;
} /* }}} */
/**
* Call callback onPreRemoveDocument before deleting content
*
* @param integer $version version number of content
*/
/**
* Call callback onPreRemoveDocument before deleting content
*
* @param SeedDMS_Core_DocumentContent $version version number of content
* @return bool|mixed
*/
function removeContent($version) { /* {{{ */
/* Check if 'onPreRemoveDocument' callback is set */
if(isset($this->_dms->callbacks['onPreRemoveContent'])) {
@ -1847,7 +1865,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* Return a certain document link
*
* @param integer $linkID id of link
* @return object instance of SeedDMS_Core_DocumentLink or false in case of
* @return SeedDMS_Core_DocumentLink|bool of SeedDMS_Core_DocumentLink or false in case of
* an error.
*/
function getDocumentLink($linkID) { /* {{{ */
@ -1866,7 +1884,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
$link = new SeedDMS_Core_DocumentLink($resArr["id"], $document, $target, $resArr["userID"], $resArr["public"]);
$user = $this->_dms->getLoggedInUser();
if($link->getAccessMode($user, $document, $target) >= M_READ)
return $file;
/** @noinspection PhpUndefinedVariableInspection */
return $file; /** @todo variable not defined */
return null;
} /* }}} */

View File

@ -73,6 +73,48 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
*/
protected $_sequence;
/**
* @var
*/
protected $_date;
/**
* @var SeedDMS_Core_Folder
*/
protected $_parent;
/**
* @var SeedDMS_Core_User
*/
protected $_owner;
/**
* @var SeedDMS_Core_Folder[]
*/
protected $_subFolders;
/**
* @var SeedDMS_Core_Document[]
*/
protected $_documents;
/**
* @var SeedDMS_Core_UserAccess[]|SeedDMS_Core_GroupAccess[]
*/
protected $_accessList;
/**
* SeedDMS_Core_Folder constructor.
* @param $id
* @param $name
* @param $parentID
* @param $comment
* @param $date
* @param $ownerID
* @param $inheritAccess
* @param $defaultAccess
* @param $sequence
*/
function __construct($id, $name, $parentID, $comment, $date, $ownerID, $inheritAccess, $defaultAccess, $sequence) { /* {{{ */
parent::__construct($id);
$this->_id = $id;
@ -87,14 +129,15 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$this->_notifyList = array();
} /* }}} */
/**
* Return an array of database fields which used for searching
* a term entered in the database search form
*
* @param array $searchin integer list of search scopes (2=name, 3=comment,
* 4=attributes)
* @return array list of database fields
*/
/**
* Return an array of database fields which used for searching
* a term entered in the database search form
*
* @param SeedDMS_Core_DMS $dms
* @param array $searchin integer list of search scopes (2=name, 3=comment,
* 4=attributes)
* @return array list of database fields
*/
public static function getSearchFields($dms, $searchin) { /* {{{ */
$db = $dms->getDB();
@ -125,6 +168,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $sql;
} /* }}} */
/**
* @param $id
* @param SeedDMS_Core_DMS $dms
* @return bool|SeedDMS_Core_Folder
*/
public static function getInstance($id, $dms) { /* {{{ */
$db = $dms->getDB();
@ -137,23 +185,25 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$resArr = $resArr[0];
$classname = $dms->getClassname('folder');
/** @var SeedDMS_Core_Folder $folder */
$folder = new $classname($resArr["id"], $resArr["name"], $resArr["parent"], $resArr["comment"], $resArr["date"], $resArr["owner"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr["sequence"]);
$folder->setDMS($dms);
return $folder;
} /* }}} */
/*
/**
* Get the name of the folder.
*
* @return string name of folder
*/
public function getName() { return $this->_name; }
/*
* Set the name of the folder.
*
* @param string $newName set a new name of the folder
*/
/**
* Set the name of the folder.
*
* @param string $newName set a new name of the folder
* @return bool
*/
public function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
@ -166,8 +216,15 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
/**
* @return string
*/
public function getComment() { return $this->_comment; }
/**
* @param $newComment
* @return bool
*/
public function setComment($newComment) { /* {{{ */
$db = $this->_dms->getDB();
@ -215,8 +272,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/**
* Returns the parent
*
* @return object parent folder or false if there is no parent folder
*/
* @return bool|SeedDMS_Core_Folder
*/
public function getParent() { /* {{{ */
if ($this->_id == $this->_dms->rootFolderID || empty($this->_parentID)) {
return false;
@ -228,15 +285,15 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $this->_parent;
} /* }}} */
/**
* Check if the folder is subfolder
*
* This function checks if the passed folder is a subfolder of the current
* folder.
*
* @param object $subFolder potential sub folder
* @return boolean true if passes folder is a subfolder
*/
/**
* Check if the folder is subfolder
*
* This function checks if the passed folder is a subfolder of the current
* folder.
*
* @param SeedDMS_Core_Folder $subfolder
* @return bool true if passes folder is a subfolder
*/
function isSubFolder($subfolder) { /* {{{ */
$target_path = $subfolder->getPath();
foreach($target_path as $next_folder) {
@ -252,7 +309,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* This function moves a folder from one parent folder into another parent
* folder. It will fail if the root folder is moved.
*
* @param object $newParent new parent folder
* @param SeedDMS_Core_Folder $newParent new parent folder
* @return boolean true if operation was successful otherwise false
*/
public function setParent($newParent) { /* {{{ */
@ -306,7 +363,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
foreach ($resArr as $row) {
$newPath = preg_replace("/^.*:".$this->_id.":(.*$)/", $pathPrefix."\\1", $row["folderList"]);
$queryStr="UPDATE `tblDocuments` SET `folderList` = '".$newPath."' WHERE `tblDocuments`.`id` = '".$row["id"]."'";
$res = $db->getResult($queryStr);
/** @noinspection PhpUnusedLocalVariableInspection */
$res = $db->getResult($queryStr);
}
/* Update path in folderList for all documents */
@ -318,7 +376,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
foreach ($resArr as $row) {
$newPath = preg_replace("/^.*:".$this->_id.":(.*$)/", $pathPrefix."\\1", $row["folderList"]);
$queryStr="UPDATE `tblFolders` SET `folderList` = '".$newPath."' WHERE `tblFolders`.`id` = '".$row["id"]."'";
$res = $db->getResult($queryStr);
/** @noinspection PhpUnusedLocalVariableInspection */
$res = $db->getResult($queryStr);
}
return true;
@ -338,7 +397,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/**
* Set the owner
*
* @param object new owner of the folder
* @param SeedDMS_Core_User $newOwner of the folder
* @return boolean true if successful otherwise false
*/
function setOwner($newOwner) { /* {{{ */
@ -353,6 +412,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
/**
* @return bool|int
*/
function getDefaultAccess() { /* {{{ */
if ($this->inheritsAccess()) {
$res = $this->getParent();
@ -363,15 +425,16 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $this->_defaultAccess;
} /* }}} */
/**
* Set default access mode
*
* This method sets the default access mode and also removes all notifiers which
* will not have read access anymore.
*
* @param integer $mode access mode
* @param boolean $noclean set to true if notifier list shall not be clean up
*/
/**
* Set default access mode
*
* This method sets the default access mode and also removes all notifiers which
* will not have read access anymore.
*
* @param integer $mode access mode
* @param boolean $noclean set to true if notifier list shall not be clean up
* @return bool
*/
function setDefaultAccess($mode, $noclean=false) { /* {{{ */
$db = $this->_dms->getDB();
@ -443,7 +506,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
function hasSubFolders() { /* {{{ */
$db = $this->_dms->getDB();
if (isset($this->_subFolders)) {
return count($this->subFolders);
/** @noinspection PhpUndefinedFieldInspection */
return count($this->subFolders); /** @todo not $this->_subFolders? */
}
$queryStr = "SELECT count(*) as c FROM `tblFolders` WHERE `parent` = " . $this->_id;
$resArr = $db->getResultArray($queryStr);
@ -462,8 +526,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @param string $orderby if set to 'n' the list is ordered by name, otherwise
* it will be ordered by sequence
* @param string $dir direction of sorting (asc or desc)
* @return array list of folder objects or false in case of an error
*/
* @return SeedDMS_Core_Folder[]|bool
*/
function getSubFolders($orderby="", $dir="asc") { /* {{{ */
$db = $this->_dms->getDB();
@ -497,8 +561,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @param integer $sequence position of folder in list of sub folders.
* @param array $attributes list of document attributes. The element key
* must be the id of the attribute definition.
* @return object object of type SeedDMS_Core_Folder or false in case of
* an error.
* @return bool|SeedDMS_Core_Folder
* an error.
*/
function addSubFolder($name, $comment, $owner, $sequence, $attributes=array()) { /* {{{ */
$db = $this->_dms->getDB();
@ -540,7 +604,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/* Check if 'onPostAddSubFolder' callback is set */
if(isset($this->_dms->callbacks['onPostAddSubFolder'])) {
foreach($this->_dms->callbacks['onPostAddSubFolder'] as $callback) {
if(!call_user_func($callback[0], $callback[1], $newFolder)) {
/** @noinspection PhpStatementHasEmptyBodyInspection */
if(!call_user_func($callback[0], $callback[1], $newFolder)) {
}
}
}
@ -618,7 +683,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
function hasDocuments() { /* {{{ */
$db = $this->_dms->getDB();
if (isset($this->_documents)) {
return count($this->documents);
/** @noinspection PhpUndefinedFieldInspection */
return count($this->documents); /** @todo not $this->_documents? */
}
$queryStr = "SELECT count(*) as c FROM `tblDocuments` WHERE `folder` = " . $this->_id;
$resArr = $db->getResultArray($queryStr);
@ -628,16 +694,18 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $resArr[0]['c'];
} /* }}} */
/**
* Check if folder has document with given name
*
* @return boolean true if document exists, false if not or in case
* of an error
*/
/**
* Check if folder has document with given name
*
* @param string $name
* @return bool true if document exists, false if not or in case
* of an error
*/
function hasDocumentByName($name) { /* {{{ */
$db = $this->_dms->getDB();
if (isset($this->_documents)) {
return count($this->documents);
/** @noinspection PhpUndefinedFieldInspection */ /** @todo not $this->_documents? */
return count($this->documents);
}
$queryStr = "SELECT count(*) as c FROM `tblDocuments` WHERE `folder` = " . $this->_id . " AND `name` = ".$db->qstr($name);
$resArr = $db->getResultArray($queryStr);
@ -656,8 +724,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @param string $orderby if set to 'n' the list is ordered by name, otherwise
* it will be ordered by sequence
* @param string $dir direction of sorting (asc or desc)
* @return array list of documents or false in case of an error
*/
* @return SeedDMS_Core_Document[]|bool
*/
function getDocuments($orderby="", $dir="asc") { /* {{{ */
$db = $this->_dms->getDB();
@ -682,29 +750,30 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $this->_documents;
} /* }}} */
/**
* Count all documents and subfolders of the folder
*
* This function also counts documents and folders of subfolders, so
* basically it works like recursively counting children.
*
* This function checks for access rights up the given limit. If more
* documents or folders are found, the returned value will be the number
* of objects available and the precise flag in the return array will be
* set to false. This number should not be revelead to the
* user, because it allows to gain information about the existens of
* objects without access right.
* Setting the parameter $limit to 0 will turn off access right checking
* which is reasonable if the $user is an administrator.
*
* @param string $orderby if set to 'n' the list is ordered by name, otherwise
* it will be ordered by sequence
* @param integer $limit maximum number of folders and documents that will
* be precisly counted by taken the access rights into account
* @return array array with four elements 'document_count', 'folder_count'
* 'document_precise', 'folder_precise' holding
* the counted number and a flag if the number is precise.
*/
/**
* Count all documents and subfolders of the folder
*
* This function also counts documents and folders of subfolders, so
* basically it works like recursively counting children.
*
* This function checks for access rights up the given limit. If more
* documents or folders are found, the returned value will be the number
* of objects available and the precise flag in the return array will be
* set to false. This number should not be revelead to the
* user, because it allows to gain information about the existens of
* objects without access right.
* Setting the parameter $limit to 0 will turn off access right checking
* which is reasonable if the $user is an administrator.
*
* @param SeedDMS_Core_User $user
* @param integer $limit maximum number of folders and documents that will
* be precisly counted by taken the access rights into account
* @return array|bool with four elements 'document_count', 'folder_count'
* 'document_precise', 'folder_precise' holding
* the counted number and a flag if the number is precise.
* @internal param string $orderby if set to 'n' the list is ordered by name, otherwise
* it will be ordered by sequence
*/
function countChildren($user, $limit=10000) { /* {{{ */
$db = $this->_dms->getDB();
@ -771,38 +840,38 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
} /* }}} */
// $comment will be used for both document and version leaving empty the version_comment
/**
* Add a new document to the folder
* This function will add a new document and its content from a given file.
* It does not check for access rights on the folder. The new documents
* default access right is read only and the access right is inherited.
*
* @param string $name name of new document
* @param string $comment comment of new document
* @param integer $expires expiration date as a unix timestamp or 0 for no
* expiration date
* @param object $owner owner of the new document
* @param string $keywords keywords of new document
* @param array $categories list of category ids
* @param string $tmpFile the path of the file containing the content
* @param string $orgFileName the original file name
* @param string $fileType usually the extension of the filename
* @param string $mimeType mime type of the content
* @param float $sequence position of new document within the folder
* @param array $reviewers list of users who must review this document
* @param array $approvers list of users who must approve this document
* @param string $reqversion version number of the content
* @param string $version_comment comment of the content. If left empty
* the $comment will be used.
* @param array $attributes list of document attributes. The element key
* must be the id of the attribute definition.
* @param array $version_attributes list of document version attributes.
* The element key must be the id of the attribute definition.
* @param object $workflow
* @return array/boolean false in case of error, otherwise an array
* containing two elements. The first one is the new document, the
* second one is the result set returned when inserting the content.
*/
/**
* Add a new document to the folder
* This function will add a new document and its content from a given file.
* It does not check for access rights on the folder. The new documents
* default access right is read only and the access right is inherited.
*
* @param string $name name of new document
* @param string $comment comment of new document
* @param integer $expires expiration date as a unix timestamp or 0 for no
* expiration date
* @param object $owner owner of the new document
* @param SeedDMS_Core_User $keywords keywords of new document
* @param array $categories list of category ids
* @param string $tmpFile the path of the file containing the content
* @param string $orgFileName the original file name
* @param string $fileType usually the extension of the filename
* @param string $mimeType mime type of the content
* @param float $sequence position of new document within the folder
* @param array $reviewers list of users who must review this document
* @param array $approvers list of users who must approve this document
* @param int|string $reqversion version number of the content
* @param string $version_comment comment of the content. If left empty
* the $comment will be used.
* @param array $attributes list of document attributes. The element key
* must be the id of the attribute definition.
* @param array $version_attributes list of document version attributes.
* The element key must be the id of the attribute definition.
* @param SeedDMS_Core_Workflow $workflow
* @return array|bool false in case of error, otherwise an array
* containing two elements. The first one is the new document, the
* second one is the result set returned when inserting the content.
*/
function addDocument($name, $comment, $expires, $owner, $keywords, $categories, $tmpFile, $orgFileName, $fileType, $mimeType, $sequence, $reviewers=array(), $approvers=array(),$reqversion=0,$version_comment="", $attributes=array(), $version_attributes=array(), $workflow=null) { /* {{{ */
$db = $this->_dms->getDB();
@ -859,7 +928,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/* Check if 'onPostAddDocument' callback is set */
if(isset($this->_dms->callbacks['onPostAddDocument'])) {
foreach($this->_dms->callbacks['onPostAddDocument'] as $callback) {
if(!call_user_func($callback[0], $callback[1], $document)) {
/** @noinspection PhpStatementHasEmptyBodyInspection */
if(!call_user_func($callback[0], $callback[1], $document)) {
}
}
}
@ -923,7 +993,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/* Check if 'onPostRemoveFolder' callback is set */
if(isset($this->_dms->callbacks['onPostRemoveFolder'])) {
foreach($this->_dms->callbacks['onPostRemoveFolder'] as $callback) {
if(!call_user_func($callback[0], $callback[1], $this->_id)) {
/** @noinspection PhpStatementHasEmptyBodyInspection */
if(!call_user_func($callback[0], $callback[1], $this->_id)) {
}
}
}
@ -939,7 +1010,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @return boolean true on success, false in case of an error
*/
function remove() { /* {{{ */
$db = $this->_dms->getDB();
/** @noinspection PhpUnusedLocalVariableInspection */
$db = $this->_dms->getDB();
// Do not delete the root folder.
if ($this->_id == $this->_dms->rootFolderID || !isset($this->_parentID) || ($this->_parentID == null) || ($this->_parentID == "") || ($this->_parentID == 0)) {
@ -969,24 +1041,24 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $this->removeFromDatabase();
} /* }}} */
/**
* Returns a list of access privileges
*
* If the folder inherits the access privileges from the parent folder
* those will be returned.
* $mode and $op can be set to restrict the list of returned access
* privileges. If $mode is set to M_ANY no restriction will apply
* regardless of the value of $op. The returned array contains a list
* of {@link SeedDMS_Core_UserAccess} and
* {@link SeedDMS_Core_GroupAccess} objects. Even if the document
* has no access list the returned array contains the two elements
* 'users' and 'groups' which are than empty. The methode returns false
* if the function fails.
*
* @param integer $mode access mode (defaults to M_ANY)
* @param integer $op operation (defaults to O_EQ)
* @return array multi dimensional array
*/
/**
* Returns a list of access privileges
*
* If the folder inherits the access privileges from the parent folder
* those will be returned.
* $mode and $op can be set to restrict the list of returned access
* privileges. If $mode is set to M_ANY no restriction will apply
* regardless of the value of $op. The returned array contains a list
* of {@link SeedDMS_Core_UserAccess} and
* {@link SeedDMS_Core_GroupAccess} objects. Even if the document
* has no access list the returned array contains the two elements
* 'users' and 'groups' which are than empty. The methode returns false
* if the function fails.
*
* @param int $mode access mode (defaults to M_ANY)
* @param int|string $op operation (defaults to O_EQ)
* @return bool|SeedDMS_Core_GroupAccess|SeedDMS_Core_UserAccess
*/
function getAccessList($mode = M_ANY, $op = O_EQ) { /* {{{ */
$db = $this->_dms->getDB();
@ -1043,16 +1115,17 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
/**
* Add access right to folder
* This function may change in the future. Instead of passing the a flag
* and a user/group id a user or group object will be expected.
*
* @param integer $mode access mode
* @param integer $userOrGroupID id of user or group
* @param integer $isUser set to 1 if $userOrGroupID is the id of a
* user
*/
/**
* Add access right to folder
* This function may change in the future. Instead of passing the a flag
* and a user/group id a user or group object will be expected.
*
* @param integer $mode access mode
* @param integer $userOrGroupID id of user or group
* @param integer $isUser set to 1 if $userOrGroupID is the id of a
* user
* @return bool
*/
function addAccess($mode, $userOrGroupID, $isUser) { /* {{{ */
$db = $this->_dms->getDB();
@ -1073,16 +1146,17 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
/**
* Change access right of folder
* This function may change in the future. Instead of passing the a flag
* and a user/group id a user or group object will be expected.
*
* @param integer $newMode access mode
* @param integer $userOrGroupID id of user or group
* @param integer $isUser set to 1 if $userOrGroupID is the id of a
* user
*/
/**
* Change access right of folder
* This function may change in the future. Instead of passing the a flag
* and a user/group id a user or group object will be expected.
*
* @param integer $newMode access mode
* @param integer $userOrGroupID id of user or group
* @param integer $isUser set to 1 if $userOrGroupID is the id of a
* user
* @return bool
*/
function changeAccess($newMode, $userOrGroupID, $isUser) { /* {{{ */
$db = $this->_dms->getDB();
@ -1102,6 +1176,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
/**
* @param $userOrGroupID
* @param $isUser
* @return bool
*/
function removeAccess($userOrGroupID, $isUser) { /* {{{ */
$db = $this->_dms->getDB();
@ -1158,7 +1237,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$accessList = $this->getAccessList();
if (!$accessList) return false;
foreach ($accessList["users"] as $userAccess) {
/** @var SeedDMS_Core_UserAccess $userAccess */
foreach ($accessList["users"] as $userAccess) {
if ($userAccess->getUserID() == $user->getID()) {
$mode = $userAccess->getMode();
if ($user->isGuest()) {
@ -1171,7 +1251,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/* Get the highest right defined by a group */
if($accessList['groups']) {
$mode = 0;
foreach ($accessList["groups"] as $groupAccess) {
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($user->isMemberOfGroup($groupAccess->getGroup())) {
if ($groupAccess->getMode() > $mode)
$mode = $groupAccess->getMode();
@ -1198,7 +1279,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* applied to get the access mode is the same as describe at
* {@link getAccessMode}
*
* @param object $group group for which access shall be checked
* @param SeedDMS_Core_Group $group group for which access shall be checked
* @return integer access mode
*/
function getGroupAccessMode($group) { /* {{{ */
@ -1208,7 +1289,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
if (!$accessList)
return false;
foreach ($accessList["groups"] as $groupAccess) {
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($groupAccess->getGroupID() == $group->getID()) {
$foundInACL = true;
if ($groupAccess->getMode() > $highestPrivileged)
@ -1224,13 +1306,14 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $this->getDefaultAccess();
} /* }}} */
/**
/** @noinspection PhpUnusedParameterInspection */
/**
* Get a list of all notification
* This function returns all users and groups that have registerd a
* notification for the folder
*
* @param integer $type type of notification (not yet used)
* @return array array with a the elements 'users' and 'groups' which
* @return SeedDMS_Core_User[]|SeedDMS_Core_Group[]|bool array with a the elements 'users' and 'groups' which
* contain a list of users and groups.
*/
function getNotifyList($type=0) { /* {{{ */
@ -1272,6 +1355,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/* Make a copy of both notifier lists because removeNotify will empty
* $this->_notifyList and the second foreach will not work anymore.
*/
/** @var SeedDMS_Core_User[] $nusers */
$nusers = $this->_notifyList["users"];
$ngroups = $this->_notifyList["groups"];
foreach ($nusers as $u) {
@ -1279,6 +1363,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$this->removeNotify($u->getID(), true);
}
}
/** @var SeedDMS_Core_Group[] $ngroups */
foreach ($ngroups as $g) {
if ($this->getGroupAccessMode($g) < M_READ) {
$this->removeNotify($g->getID(), false);
@ -1286,7 +1372,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
}
} /* }}} */
/*
/**
* Add a user/group to the notification list
* This function does not check if the currently logged in user
* is allowed to add a notification. This must be checked by the calling
@ -1307,6 +1393,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$userOrGroup = ($isUser) ? "`userID`" : "`groupID`";
/* Verify that user / group exists */
/** @var SeedDMS_Core_User|SeedDMS_Core_Group $obj */
$obj = ($isUser ? $this->_dms->getUser($userOrGroupID) : $this->_dms->getGroup($userOrGroupID));
if (!is_object($obj)) {
return -1;
@ -1356,7 +1443,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
// that the current group has not been explicitly excluded.
$acl = $this->getAccessList(M_NONE, O_EQ);
$found = false;
foreach ($acl["groups"] as $group) {
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
break;
@ -1374,7 +1462,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return -4;
}
$found = false;
foreach ($acl["groups"] as $group) {
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
break;
@ -1407,21 +1496,21 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return 0;
} /* }}} */
/*
* Removes notify for a user or group to folder
* This function does not check if the currently logged in user
* is allowed to remove a notification. This must be checked by the calling
* application.
*
* @param integer $userOrGroupID
* @param boolean $isUser true if $userOrGroupID is a user id otherwise false
* @param $type type of notification (0 will delete all) Not used yet!
* @return integer error code
* -1: Invalid User/Group ID.
* -3: User is not subscribed.
* -4: Database / internal error.
* 0: Update successful.
*/
/**
* Removes notify for a user or group to folder
* This function does not check if the currently logged in user
* is allowed to remove a notification. This must be checked by the calling
* application.
*
* @param integer $userOrGroupID
* @param boolean $isUser true if $userOrGroupID is a user id otherwise false
* @param int $type type of notification (0 will delete all) Not used yet!
* @return int error code
* -1: Invalid User/Group ID.
* -3: User is not subscribed.
* -4: Database / internal error.
* 0: Update successful.
*/
function removeNotify($userOrGroupID, $isUser, $type=0) { /* {{{ */
$db = $this->_dms->getDB();
@ -1494,17 +1583,16 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return $this->getReadAccessList(0, 0);
} /* }}} */
/**
* Returns a list of groups and users with read access on the folder
* The list will not include any guest users,
* administrators and the owner of the folder unless $listadmin resp.
* $listowner is set to true.
*
* @param boolean $listadmin if set to true any admin will be listed too
* @param boolean $listowner if set to true the owner will be listed too
*
* @return array list of users and groups
*/
/**
* Returns a list of groups and users with read access on the folder
* The list will not include any guest users,
* administrators and the owner of the folder unless $listadmin resp.
* $listowner is set to true.
*
* @param bool|int $listadmin if set to true any admin will be listed too
* @param bool|int $listowner if set to true the owner will be listed too
* @return array list of users and groups
*/
function getReadAccessList($listadmin=0, $listowner=0) { /* {{{ */
$db = $this->_dms->getDB();
@ -1530,9 +1618,12 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
// to the folder.
$tmpList = $this->getAccessList(M_NONE, O_LTEQ);
}
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($tmpList["groups"] as $groupAccess) {
$groupIDs .= (strlen($groupIDs)==0 ? "" : ", ") . $groupAccess->getGroupID();
}
/** @var SeedDMS_Core_UserAccess $userAccess */
foreach ($tmpList["users"] as $userAccess) {
$user = $userAccess->getUser();
if (!$listadmin && $user->isAdmin()) continue;
@ -1671,6 +1762,4 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
}
?>
}