From b103d9f30d226517fb82db6cf71e1f0537234fff Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 15 Mar 2021 16:07:57 +0100 Subject: [PATCH 1/3] SeedDMS_Core_DMS::search() support searching for date of last document status change --- SeedDMS_Core/Core/inc.ClassDMS.php | 38 +++++++++++++++++++++++------- SeedDMS_Core/package.xml | 3 ++- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index f240e39cd..922f9e918 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -1462,7 +1462,7 @@ class SeedDMS_Core_DMS { if(is_array($query)) { foreach(array('limit', 'offset', 'logicalmode', 'searchin', 'startFolder', 'owner', 'status', 'creationstartdate', 'creationenddate', 'modificationstartdate', 'modificationenddate', 'categories', 'attributes', 'mode', 'expirationstartdate', 'expirationenddate') as $paramname) ${$paramname} = isset($query[$paramname]) ? $query[$paramname] : ${$paramname}; - foreach(array('orderby') as $paramname) + foreach(array('orderby', 'statusstartdate', 'statusenddate') as $paramname) ${$paramname} = isset($query[$paramname]) ? $query[$paramname] : ''; $query = isset($query['query']) ? $query['query'] : ''; } @@ -1558,7 +1558,7 @@ class SeedDMS_Core_DMS { if ($creationstartdate) { $startdate = SeedDMS_Core_DMS::makeTimeStamp($creationstartdate['hour'], $creationstartdate['minute'], $creationstartdate['second'], $creationstartdate['year'], $creationstartdate["month"], $creationstartdate["day"]); if ($startdate) { - $searchCreateDate .= "`tblFolders`.`date` >= ".$startdate; + $searchCreateDate .= "`tblFolders`.`date` >= ".$this->db->qstr($startdate); } } if ($creationenddate) { @@ -1567,7 +1567,7 @@ class SeedDMS_Core_DMS { /** @noinspection PhpUndefinedVariableInspection */ if($startdate) $searchCreateDate .= " AND "; - $searchCreateDate .= "`tblFolders`.`date` <= ".$stopdate; + $searchCreateDate .= "`tblFolders`.`date` <= ".$this->db->qstr($stopdate); } } @@ -1772,7 +1772,7 @@ class SeedDMS_Core_DMS { if ($creationstartdate) { $startdate = SeedDMS_Core_DMS::makeTimeStamp($creationstartdate['hour'], $creationstartdate['minute'], $creationstartdate['second'], $creationstartdate['year'], $creationstartdate["month"], $creationstartdate["day"]); if ($startdate) { - $searchCreateDate .= "`tblDocuments`.`date` >= ".$startdate; + $searchCreateDate .= "`tblDocuments`.`date` >= ".$this->db->qstr($startdate); } } if ($creationenddate) { @@ -1780,7 +1780,7 @@ class SeedDMS_Core_DMS { if ($stopdate) { if($searchCreateDate) $searchCreateDate .= " AND "; - $searchCreateDate .= "`tblDocuments`.`date` <= ".$stopdate; + $searchCreateDate .= "`tblDocuments`.`date` <= ".$this->db->qstr($stopdate); } } if ($modificationstartdate) { @@ -1796,7 +1796,7 @@ class SeedDMS_Core_DMS { if ($stopdate) { if($searchCreateDate) $searchCreateDate .= " AND "; - $searchCreateDate .= "`tblDocumentContent`.`date` <= ".$stopdate; + $searchCreateDate .= "`tblDocumentContent`.`date` <= ".$this->db->qstr($stopdate); } } $searchExpirationDate = ''; @@ -1805,7 +1805,7 @@ class SeedDMS_Core_DMS { if ($startdate) { if($searchExpirationDate) $searchExpirationDate .= " AND "; - $searchExpirationDate .= "`tblDocuments`.`expires` >= ".$startdate; + $searchExpirationDate .= "`tblDocuments`.`expires` >= ".$this->db->qstr($startdate); } } if ($expirationenddate) { @@ -1813,7 +1813,24 @@ class SeedDMS_Core_DMS { if ($stopdate) { if($searchExpirationDate) $searchExpirationDate .= " AND "; - $searchExpirationDate .= "`tblDocuments`.`expires` <= ".$stopdate; + $searchExpirationDate .= "`tblDocuments`.`expires` <= ".$this->db->qstr($stopdate); + } + } + $searchStatusDate = ''; + if ($statusstartdate) { + $startdate = $statusstartdate['year'].'-'.$statusstartdate["month"].'-'.$statusstartdate["day"].' '.$statusstartdate['hour'].':'.$statusstartdate['minute'].':'.$statusstartdate['second']; + if ($startdate) { + if($searchStatusDate) + $searchStatusDate .= " AND "; + $searchStatusDate .= "`tblDocumentStatusLog`.`date` >= ".$this->db->qstr($startdate); + } + } + if ($statusenddate) { + $stopdate = $statusenddate['year'].'-'.$statusenddate["month"].'-'.$statusenddate["day"].' '.$statusenddate['hour'].':'.$statusenddate['minute'].':'.$statusenddate['second']; + if ($stopdate) { + if($searchStatusDate) + $searchStatusDate .= " AND "; + $searchStatusDate .= "`tblDocumentStatusLog`.`date` <= ".$this->db->qstr($stopdate); } } @@ -1859,6 +1876,9 @@ class SeedDMS_Core_DMS { if (strlen($searchExpirationDate)>0) { $searchQuery .= " AND (".$searchExpirationDate.")"; } + if (strlen($searchStatusDate)>0) { + $searchQuery .= " AND (".$searchStatusDate.")"; + } if ($searchAttributes) { $searchQuery .= " AND (".implode(" AND ", $searchAttributes).")"; } @@ -1868,7 +1888,7 @@ class SeedDMS_Core_DMS { $searchQuery .= " AND `tblDocumentStatusLog`.`status` IN (".implode(',', $status).")"; } - if($searchKey || $searchOwner || $searchCategories || $searchCreateDate || $searchExpirationDate || $searchAttributes || $status) { + if($searchKey || $searchOwner || $searchCategories || $searchCreateDate || $searchExpirationDate || $searchStatusDate || $searchAttributes || $status) { // Count the number of rows that the search will produce. $resArr = $this->db->getResultArray("SELECT COUNT(*) AS num FROM (SELECT DISTINCT `tblDocuments`.`id` ".$searchQuery.") a"); $totalDocs = 0; diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index d9c5cccf7..fb059f999 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,7 +12,7 @@ uwe@steinmann.cx yes - 2021-01-27 + 2021-03-15 5.1.22 @@ -30,6 +30,7 @@ - add new parameter to SeedDMS_Core_DMS->getDocumentList() for skipping expired documents - add parameter $incdisabled to SeedDMS_Core_Folder::getNotifyList() - do not validate value in SeedDMS_Core_Attribute::setValue(), it should have been done before +- SeedDMS_Core_DMS::search() can search for last date of document status change From fad2020cfd53a2ea5e7e49a339e654f1f7f77494 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 15 Mar 2021 16:08:51 +0100 Subject: [PATCH 2/3] add searching for last date of a document status --- out/out.Search.php | 28 ++++++++++++++++++++++++++++ views/bootstrap/class.Search.php | 22 ++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/out/out.Search.php b/out/out.Search.php index 8f86216c3..d34d3b572 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -359,6 +359,29 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext UI::exitError(getMLText("search"),getMLText("invalid_create_date_end")); } + $statusstartdate = array(); + $statusstopdate = array(); + if (isset($_GET["statusdate"]) && $_GET["statusdate"]!=null) { + $statusdate = true; + } else { + $statusdate = false; + } + + if(isset($_GET["statusstart"])) { + $tmp = explode("-", $_GET["statusstart"]); + $statusstartdate = array('year'=>(int)$tmp[0], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[2], 'hour'=>0, 'minute'=>0, 'second'=>0); + } + if ($statusstartdate && !checkdate($statusstartdate['month'], $startdate['day'], $startdate['year'])) { + UI::exitError(getMLText("search"),getMLText("invalid_status_date_end")); + } + if(isset($_GET["statusend"])) { + $tmp = explode("-", $_GET["statusend"]); + $statusstopdate = array('year'=>(int)$tmp[0], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[2], 'hour'=>23, 'minute'=>59, 'second'=>59); + } + if ($statusstopdate && !checkdate($statusstopdate['month'], $stopdate['day'], $stopdate['year'])) { + UI::exitError(getMLText("search"),getMLText("invalid_status_date_end")); + } + $expstartdate = array(); $expstopdate = array(); if (isset($_GET["expirationdate"]) && $_GET["expirationdate"]!=null) { @@ -499,6 +522,8 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext 'mode'=>$resultmode, 'expirationstartdate'=>$expirationdate ? $expstartdate : array(), 'expirationenddate'=>$expirationdate ? $expstopdate : array(), + 'statusstartdate'=>$statusdate ? $statusstartdate : array(), + 'statusenddate'=>$statusdate ? $statusstopdate : array(), 'orderby'=>$orderby )); $total = $resArr['totalDocs'] + $resArr['totalFolders']; @@ -572,8 +597,11 @@ if($settings->_showSingleSearchHit && count($entries) == 1) { $view->setParam('stopdate', isset($stopdate) ? $stopdate : array()); $view->setParam('expstartdate', isset($expstartdate) ? $expstartdate : array()); $view->setParam('expstopdate', isset($expstopdate) ? $expstopdate : array()); + $view->setParam('statusstartdate', isset($statusstartdate) ? $statusstartdate : array()); + $view->setParam('statusstopdate', isset($statusstopdate) ? $statusstopdate : array()); $view->setParam('creationdate', isset($creationdate) ? $creationdate : ''); $view->setParam('expirationdate', isset($expirationdate) ? $expirationdate: ''); + $view->setParam('statusdate', isset($statusdate) ? $statusdate: ''); $view->setParam('status', isset($status) ? $status : array()); $view->setParam('categories', isset($categories) ? $categories : ''); $view->setParam('category', isset($categorynames) ? $categorynames : ''); diff --git a/views/bootstrap/class.Search.php b/views/bootstrap/class.Search.php index 91b8205a3..45bb60114 100644 --- a/views/bootstrap/class.Search.php +++ b/views/bootstrap/class.Search.php @@ -141,8 +141,11 @@ function typeahead() { /* {{{ */ $stopdate = $this->params['stopdate']; $expstartdate = $this->params['expstartdate']; $expstopdate = $this->params['expstopdate']; + $statusstartdate = $this->params['statusstartdate']; + $statusstopdate = $this->params['statusstopdate']; $creationdate = $this->params['creationdate']; $expirationdate = $this->params['expirationdate']; + $statusdate = $this->params['statusdate']; $status = $this->params['status']; $this->query = $this->params['query']; $orderby = $this->params['orderby']; @@ -306,6 +309,8 @@ function typeahead() { /* {{{ */ $openfilterdlg = true; if($expirationdate) $openfilterdlg = true; + if($statusdate) + $openfilterdlg = true; ?>
@@ -369,6 +374,23 @@ function typeahead() { /* {{{ */ + +: + +
+ + "> + +   + + + "> + + + + Date: Mon, 15 Mar 2021 16:09:35 +0100 Subject: [PATCH 3/3] add entry for 5.1.22 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 06b48b315..e6642636d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -18,6 +18,7 @@ arbitrary files - use mandatory reviewers/approvers when adding files by webdav - set some http security headers in .htaccess +- add searching for last date of a document status change -------------------------------------------------------------------------------- Changes in version 5.1.21