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 '.'
+
+