diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index f09510b61..43056e7a0 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -265,6 +265,22 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $searchFields; } /* }}} */ + /** + * Return a folder by its database record + * + * @param array $resArr array of folder data as returned by database + * @param SeedDMS_Core_DMS $dms + * @return SeedDMS_Core_Folder|bool instance of SeedDMS_Core_Folder if document exists + */ + public static function getInstanceByData($resArr, $dms) { /* {{{ */ + $classname = $dms->getClassname('document'); + /** @var SeedDMS_Core_Document $document */ + $document = new $classname($resArr["id"], $resArr["name"], $resArr["comment"], $resArr["date"], $resArr["expires"], $resArr["owner"], $resArr["folder"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr['lock'], $resArr["keywords"], $resArr["sequence"]); + $document->setDMS($dms); + $document = $document->applyDecorators(); + return $document; + } /* }}} */ + /** * Return an document by its id * @@ -276,7 +292,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ public static function getInstance($id, $dms) { /* {{{ */ $db = $dms->getDB(); - $queryStr = "SELECT * FROM `tblDocuments` WHERE `id` = " . (int) $id; +// $queryStr = "SELECT * FROM `tblDocuments` WHERE `id` = " . (int) $id; + $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lock` FROM `tblDocuments` LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id` = `tblDocumentLocks`.`document` WHERE `id` = " . (int) $id; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && $resArr == false) return false; @@ -285,20 +302,26 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $resArr = $resArr[0]; // New Locking mechanism uses a separate table to track the lock. + /* $queryStr = "SELECT * FROM `tblDocumentLocks` WHERE `document` = " . (int) $id; $lockArr = $db->getResultArray($queryStr); if ((is_bool($lockArr) && $lockArr==false) || (count($lockArr)==0)) { // Could not find a lock on the selected document. - $lock = -1; + $resArr['lock'] = -1; } else { // A lock has been identified for this document. - $lock = $lockArr[0]["userID"]; + $resArr['lock'] = $lockArr[0]["userID"]; } +*/ + $resArr['lock'] = !$resArr['lock'] ? -1 : $resArr['lock']; +// print_r($resArr);exit; + + return self::getInstanceByData($resArr, $dms); $classname = $dms->getClassname('document'); /** @var SeedDMS_Core_Document $document */ - $document = new $classname($resArr["id"], $resArr["name"], $resArr["comment"], $resArr["date"], $resArr["expires"], $resArr["owner"], $resArr["folder"], $resArr["inheritAccess"], $resArr["defaultAccess"], $lock, $resArr["keywords"], $resArr["sequence"]); + $document = new $classname($resArr["id"], $resArr["name"], $resArr["comment"], $resArr["date"], $resArr["expires"], $resArr["owner"], $resArr["folder"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr['lock'], $resArr["keywords"], $resArr["sequence"]); $document->setDMS($dms); $document = $document->applyDecorators(); return $document; diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index e5d23927b..58f21a26d 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -177,6 +177,22 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $sql; } /* }}} */ + /** + * Return a folder by its database record + * + * @param array $resArr array of folder data as returned by database + * @param SeedDMS_Core_DMS $dms + * @return SeedDMS_Core_Folder|bool instance of SeedDMS_Core_Folder if document exists + */ + public static function getInstanceByData($resArr, $dms) { /* {{{ */ + $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); + $folder = $folder->applyDecorators(); + return $folder; + } /* }}} */ + /** * Return a folder by its id * @@ -195,6 +211,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { else if (count($resArr) != 1) return null; + return self::getInstanceByData($resArr[0], $dms); + $resArr = $resArr[0]; $classname = $dms->getClassname('folder'); /** @var SeedDMS_Core_Folder $folder */ @@ -601,9 +619,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { if (is_bool($resArr) && $resArr == false) return false; + $classname = $this->_dms->getClassname('folder'); $this->_subFolders = array(); for ($i = 0; $i < count($resArr); $i++) - $this->_subFolders[$i] = $this->_dms->getFolder($resArr[$i]["id"]); +// $this->_subFolders[$i] = $this->_dms->getFolder($resArr[$i]["id"]); + $this->_subFolders[$i] = $classname::getInstanceByData($resArr[$i], $this->_dms); } return $this->_subFolders; @@ -784,7 +804,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $db = $this->_dms->getDB(); if (!isset($this->_documents)) { - $queryStr = "SELECT * FROM `tblDocuments` WHERE `folder` = " . $this->_id; + $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lock` FROM `tblDocuments` LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id` = `tblDocumentLocks`.`document` WHERE `folder` = " . $this->_id; if ($orderby && $orderby[0]=="n") $queryStr .= " ORDER BY `name`"; elseif($orderby && $orderby[0]=="s") $queryStr .= " ORDER BY `sequence`"; elseif($orderby && $orderby[0]=="d") $queryStr .= " ORDER BY `date`"; @@ -801,9 +821,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return false; $this->_documents = array(); + $classname = $this->_dms->getClassname('document'); foreach ($resArr as $row) { -// array_push($this->_documents, new SeedDMS_Core_Document($row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], isset($row["lockUser"])?$row["lockUser"]:NULL, $row["keywords"], $row["sequence"])); - array_push($this->_documents, $this->_dms->getDocument($row["id"])); + $row['lock'] = !$row['lock'] ? -1 : $row['lock']; +// array_push($this->_documents, $this->_dms->getDocument($row["id"])); + array_push($this->_documents, $classname::getInstanceByData($row, $this->_dms)); } } return $this->_documents; diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 2b4af3015..50f676bd9 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2019-08-07 + 2019-12-13 - 5.1.13 - 5.1.13 + 5.1.14 + 5.1.14 stable @@ -24,9 +24,7 @@ GPL License -- add decorators -- add new methods SeedDMS_Core_Document::isType(), SeedDMS_Core_Folder::isType(), SeedDMS_Core_DocumentContent::isType(). Use them instead of checking the class name. -- skip a fileType with just a '.' +- speed up SeedDMS_Core_Folder::getSubFolders() SeedDMS_Core_Folder::getDocuments() by minimizing the number of sql queries. @@ -1693,5 +1691,23 @@ add method SeedDMS_Core_DatabaseAccess::setLogFp() - add new method SeedDMS_Core_Folder::empty() + + 2019-08-07 + + + 5.1.13 + 5.1.13 + + + stable + stable + + GPL License + +- add decorators +- add new methods SeedDMS_Core_Document::isType(), SeedDMS_Core_Folder::isType(), SeedDMS_Core_DocumentContent::isType(). Use them instead of checking the class name. +- skip a fileType with just a '.' + +