mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-09-09 19:38:57 +00:00
minimize number of sql statements
add new method getInstanceByData(), get folders and documents from first sql statement which fetches the subfolders and documents of a folder instead of fetching each single document and folder.
This commit is contained in:
parent
f453cac8d2
commit
61f1ddbd08
|
@ -265,6 +265,22 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
|
||||||
return $searchFields;
|
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
|
* Return an document by its id
|
||||||
*
|
*
|
||||||
|
@ -276,7 +292,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
|
||||||
public static function getInstance($id, $dms) { /* {{{ */
|
public static function getInstance($id, $dms) { /* {{{ */
|
||||||
$db = $dms->getDB();
|
$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);
|
$resArr = $db->getResultArray($queryStr);
|
||||||
if (is_bool($resArr) && $resArr == false)
|
if (is_bool($resArr) && $resArr == false)
|
||||||
return false;
|
return false;
|
||||||
|
@ -285,20 +302,26 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
|
||||||
$resArr = $resArr[0];
|
$resArr = $resArr[0];
|
||||||
|
|
||||||
// New Locking mechanism uses a separate table to track the lock.
|
// New Locking mechanism uses a separate table to track the lock.
|
||||||
|
/*
|
||||||
$queryStr = "SELECT * FROM `tblDocumentLocks` WHERE `document` = " . (int) $id;
|
$queryStr = "SELECT * FROM `tblDocumentLocks` WHERE `document` = " . (int) $id;
|
||||||
$lockArr = $db->getResultArray($queryStr);
|
$lockArr = $db->getResultArray($queryStr);
|
||||||
if ((is_bool($lockArr) && $lockArr==false) || (count($lockArr)==0)) {
|
if ((is_bool($lockArr) && $lockArr==false) || (count($lockArr)==0)) {
|
||||||
// Could not find a lock on the selected document.
|
// Could not find a lock on the selected document.
|
||||||
$lock = -1;
|
$resArr['lock'] = -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// A lock has been identified for this document.
|
// 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');
|
$classname = $dms->getClassname('document');
|
||||||
/** @var SeedDMS_Core_Document $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->setDMS($dms);
|
||||||
$document = $document->applyDecorators();
|
$document = $document->applyDecorators();
|
||||||
return $document;
|
return $document;
|
||||||
|
|
|
@ -177,6 +177,22 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
|
||||||
return $sql;
|
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
|
* Return a folder by its id
|
||||||
*
|
*
|
||||||
|
@ -195,6 +211,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
|
||||||
else if (count($resArr) != 1)
|
else if (count($resArr) != 1)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
return self::getInstanceByData($resArr[0], $dms);
|
||||||
|
|
||||||
$resArr = $resArr[0];
|
$resArr = $resArr[0];
|
||||||
$classname = $dms->getClassname('folder');
|
$classname = $dms->getClassname('folder');
|
||||||
/** @var SeedDMS_Core_Folder $folder */
|
/** @var SeedDMS_Core_Folder $folder */
|
||||||
|
@ -601,9 +619,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
|
||||||
if (is_bool($resArr) && $resArr == false)
|
if (is_bool($resArr) && $resArr == false)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
$classname = $this->_dms->getClassname('folder');
|
||||||
$this->_subFolders = array();
|
$this->_subFolders = array();
|
||||||
for ($i = 0; $i < count($resArr); $i++)
|
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;
|
return $this->_subFolders;
|
||||||
|
@ -784,7 +804,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
|
||||||
$db = $this->_dms->getDB();
|
$db = $this->_dms->getDB();
|
||||||
|
|
||||||
if (!isset($this->_documents)) {
|
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`";
|
if ($orderby && $orderby[0]=="n") $queryStr .= " ORDER BY `name`";
|
||||||
elseif($orderby && $orderby[0]=="s") $queryStr .= " ORDER BY `sequence`";
|
elseif($orderby && $orderby[0]=="s") $queryStr .= " ORDER BY `sequence`";
|
||||||
elseif($orderby && $orderby[0]=="d") $queryStr .= " ORDER BY `date`";
|
elseif($orderby && $orderby[0]=="d") $queryStr .= " ORDER BY `date`";
|
||||||
|
@ -801,9 +821,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$this->_documents = array();
|
$this->_documents = array();
|
||||||
|
$classname = $this->_dms->getClassname('document');
|
||||||
foreach ($resArr as $row) {
|
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"]));
|
$row['lock'] = !$row['lock'] ? -1 : $row['lock'];
|
||||||
array_push($this->_documents, $this->_dms->getDocument($row["id"]));
|
// array_push($this->_documents, $this->_dms->getDocument($row["id"]));
|
||||||
|
array_push($this->_documents, $classname::getInstanceByData($row, $this->_dms));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $this->_documents;
|
return $this->_documents;
|
||||||
|
|
|
@ -12,11 +12,11 @@
|
||||||
<email>uwe@steinmann.cx</email>
|
<email>uwe@steinmann.cx</email>
|
||||||
<active>yes</active>
|
<active>yes</active>
|
||||||
</lead>
|
</lead>
|
||||||
<date>2019-08-07</date>
|
<date>2019-12-13</date>
|
||||||
<time>07:31:17</time>
|
<time>07:31:17</time>
|
||||||
<version>
|
<version>
|
||||||
<release>5.1.13</release>
|
<release>5.1.14</release>
|
||||||
<api>5.1.13</api>
|
<api>5.1.14</api>
|
||||||
</version>
|
</version>
|
||||||
<stability>
|
<stability>
|
||||||
<release>stable</release>
|
<release>stable</release>
|
||||||
|
@ -24,9 +24,7 @@
|
||||||
</stability>
|
</stability>
|
||||||
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
|
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
|
||||||
<notes>
|
<notes>
|
||||||
- add decorators
|
- speed up SeedDMS_Core_Folder::getSubFolders() SeedDMS_Core_Folder::getDocuments() by minimizing the number of sql queries.
|
||||||
- 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 '.'
|
|
||||||
</notes>
|
</notes>
|
||||||
<contents>
|
<contents>
|
||||||
<dir baseinstalldir="SeedDMS" name="/">
|
<dir baseinstalldir="SeedDMS" name="/">
|
||||||
|
@ -1693,5 +1691,23 @@ add method SeedDMS_Core_DatabaseAccess::setLogFp()
|
||||||
- add new method SeedDMS_Core_Folder::empty()
|
- add new method SeedDMS_Core_Folder::empty()
|
||||||
</notes>
|
</notes>
|
||||||
</release>
|
</release>
|
||||||
|
<release>
|
||||||
|
<date>2019-08-07</date>
|
||||||
|
<time>07:31:17</time>
|
||||||
|
<version>
|
||||||
|
<release>5.1.13</release>
|
||||||
|
<api>5.1.13</api>
|
||||||
|
</version>
|
||||||
|
<stability>
|
||||||
|
<release>stable</release>
|
||||||
|
<api>stable</api>
|
||||||
|
</stability>
|
||||||
|
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
|
||||||
|
<notes>
|
||||||
|
- 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 '.'
|
||||||
|
</notes>
|
||||||
|
</release>
|
||||||
</changelog>
|
</changelog>
|
||||||
</package>
|
</package>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user