mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-05-10 05:26:06 +00:00
combine database and fulltext search into one form
This commit is contained in:
parent
45f0771b3f
commit
f6ec61359e
460
op/op.Search.php
460
op/op.Search.php
|
@ -31,25 +31,6 @@ include("../inc/inc.Authentication.php");
|
|||
*/
|
||||
require_once("SeedDMS/Preview.php");
|
||||
|
||||
// Redirect to the search page if the navigation search button has been
|
||||
// selected without supplying any search terms.
|
||||
if (isset($_GET["navBar"])) {
|
||||
if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) {
|
||||
$folderid=$settings->_rootFolderID;
|
||||
}
|
||||
else {
|
||||
$folderid = $_GET["folderid"];
|
||||
}
|
||||
if(strlen($_GET["query"])==0) {
|
||||
header("Location: ../out/out.SearchForm.php?folderid=".$folderid);
|
||||
} else {
|
||||
if(isset($_GET["fullsearch"]) && $_GET["fullsearch"]) {
|
||||
header("Location: ../op/op.SearchFulltext.php?folderid=".$folderid."&query=".$_GET["query"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getTime() {
|
||||
if (function_exists('microtime')) {
|
||||
$tm = microtime();
|
||||
|
@ -59,82 +40,205 @@ function getTime() {
|
|||
return time();
|
||||
}
|
||||
|
||||
//
|
||||
// Parse all of the parameters for the search
|
||||
//
|
||||
|
||||
// Create the keyword search string. This search spans up to three columns
|
||||
// in the database: keywords, name and comment.
|
||||
|
||||
if (isset($_GET["query"]) && is_string($_GET["query"])) {
|
||||
$query = $_GET["query"];
|
||||
}
|
||||
else {
|
||||
$query = "";
|
||||
// Redirect to the search page if the navigation search button has been
|
||||
// selected without supplying any search terms.
|
||||
if (isset($_GET["navBar"])) {
|
||||
if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) {
|
||||
$folderid=$settings->_rootFolderID;
|
||||
} else {
|
||||
$folderid = $_GET["folderid"];
|
||||
}
|
||||
/*
|
||||
if(strlen($_GET["query"])==0) {
|
||||
header("Location: ../out/out.SearchForm.php?folderid=".$folderid);
|
||||
} else {
|
||||
if(isset($_GET["fullsearch"]) && $_GET["fullsearch"]) {
|
||||
header("Location: ../op/op.SearchFulltext.php?folderid=".$folderid."&query=".$_GET["query"]);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
$mode = "AND";
|
||||
if (isset($_GET["mode"]) && is_numeric($_GET["mode"]) && $_GET["mode"]==0) {
|
||||
$mode = "OR";
|
||||
}
|
||||
if(isset($_GET["fullsearch"]) && $_GET["fullsearch"]) {
|
||||
// Search in Fulltext {{{
|
||||
if (isset($_GET["query"]) && is_string($_GET["query"])) {
|
||||
$query = $_GET["query"];
|
||||
}
|
||||
else {
|
||||
$query = "";
|
||||
}
|
||||
|
||||
$searchin = array();
|
||||
if (isset($_GET['searchin']) && is_array($_GET["searchin"])) {
|
||||
foreach ($_GET["searchin"] as $si) {
|
||||
if (isset($si) && is_numeric($si)) {
|
||||
switch ($si) {
|
||||
case 1: // keywords
|
||||
case 2: // name
|
||||
case 3: // comment
|
||||
case 4: // attributes
|
||||
$searchin[$si] = $si;
|
||||
break;
|
||||
// category
|
||||
$categories = array();
|
||||
if(isset($_GET['categoryids']) && $_GET['categoryids']) {
|
||||
foreach($_GET['categoryids'] as $catid) {
|
||||
if($catid > 0) {
|
||||
$category = $dms->getDocumentCategory($catid);
|
||||
$categories[] = $category->getName();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if none is checkd search all
|
||||
if (count($searchin)==0) $searchin=array(1, 2, 3, 4);
|
||||
|
||||
// Check to see if the search has been restricted to a particular sub-tree in
|
||||
// the folder hierarchy.
|
||||
if (isset($_GET["targetidform1"]) && is_numeric($_GET["targetidform1"]) && $_GET["targetidform1"]>0) {
|
||||
$targetid = $_GET["targetidform1"];
|
||||
$startFolder = $dms->getFolder($targetid);
|
||||
}
|
||||
else {
|
||||
$targetid = $settings->_rootFolderID;
|
||||
$startFolder = $dms->getFolder($targetid);
|
||||
}
|
||||
if (!is_object($startFolder)) {
|
||||
UI::exitError(getMLText("search_results"),getMLText("invalid_folder_id"));
|
||||
}
|
||||
|
||||
// Check to see if the search has been restricted to a particular
|
||||
// document owner.
|
||||
$owner = null;
|
||||
if (isset($_GET["ownerid"]) && is_numeric($_GET["ownerid"]) && $_GET["ownerid"]!=-1) {
|
||||
$owner = $dms->getUser($_GET["ownerid"]);
|
||||
if (!is_object($owner)) {
|
||||
UI::htmlStartPage(getMLText("search_results"));
|
||||
UI::contentContainer(getMLText("unknown_owner"));
|
||||
UI::htmlEndPage();
|
||||
exit;
|
||||
//
|
||||
// Get the page number to display. If the result set contains more than
|
||||
// 25 entries, it is displayed across multiple pages.
|
||||
//
|
||||
// This requires that a page number variable be used to track which page the
|
||||
// user is interested in, and an extra clause on the select statement.
|
||||
//
|
||||
// Default page to display is always one.
|
||||
$pageNumber=1;
|
||||
if (isset($_GET["pg"])) {
|
||||
if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
|
||||
$pageNumber = (integer)$_GET["pg"];
|
||||
}
|
||||
else if (!strcasecmp($_GET["pg"], "all")) {
|
||||
$pageNumber = "all";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --------------- Suche starten --------------------------------------------
|
||||
|
||||
// Check to see if the search has been restricted to a particular
|
||||
// document owner.
|
||||
$owner = null;
|
||||
if (isset($_GET["ownerid"]) && is_numeric($_GET["ownerid"]) && $_GET["ownerid"]!=-1) {
|
||||
$owner = $dms->getUser($_GET["ownerid"]);
|
||||
if (!is_object($owner)) {
|
||||
UI::exitError(getMLText("search_results"),getMLText("unknown_owner"));
|
||||
}
|
||||
}
|
||||
|
||||
$pageNumber=1;
|
||||
if (isset($_GET["pg"])) {
|
||||
if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
|
||||
$pageNumber = (integer)$_GET["pg"];
|
||||
}
|
||||
else if (!strcasecmp($_GET["pg"], "all")) {
|
||||
$pageNumber = "all";
|
||||
}
|
||||
}
|
||||
|
||||
$startTime = getTime();
|
||||
if($settings->_enableFullSearch) {
|
||||
if(!empty($settings->_luceneClassDir))
|
||||
require_once($settings->_luceneClassDir.'/Lucene.php');
|
||||
else
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
}
|
||||
|
||||
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
|
||||
$index = Zend_Search_Lucene::open($settings->_luceneDir);
|
||||
$lucenesearch = new SeedDMS_Lucene_Search($index);
|
||||
$hits = $lucenesearch->search($query, $owner ? $owner->getLogin() : '', '', $categories);
|
||||
$totalDocs = count($hits);
|
||||
$limit = 20;
|
||||
$resArr = array();
|
||||
if($pageNumber != 'all' && count($hits) > $limit) {
|
||||
$resArr['totalPages'] = (int) (count($hits) / $limit);
|
||||
if ((count($hits)%$limit) > 0)
|
||||
$resArr['totalPages']++;
|
||||
$hits = array_slice($hits, ($pageNumber-1)*$limit, $limit);
|
||||
} else {
|
||||
$resArr['totalPages'] = 1;
|
||||
}
|
||||
|
||||
$entries = array();
|
||||
if($hits) {
|
||||
foreach($hits as $hit) {
|
||||
if($tmp = $dms->getDocument($hit['document_id'])) {
|
||||
if($tmp->getAccessMode($user) >= M_READ) {
|
||||
$entries[] = $tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$searchTime = getTime() - $startTime;
|
||||
$searchTime = round($searchTime, 2);
|
||||
// }}}
|
||||
} else {
|
||||
// Search in Database {{{
|
||||
if (isset($_GET["query"]) && is_string($_GET["query"])) {
|
||||
$query = $_GET["query"];
|
||||
}
|
||||
else {
|
||||
$query = "";
|
||||
}
|
||||
|
||||
/* Select if only documents (0x01), only folders (0x02) or both (0x03)
|
||||
* are found
|
||||
*/
|
||||
$resultmode = 0x03;
|
||||
|
||||
$mode = "AND";
|
||||
if (isset($_GET["mode"]) && is_numeric($_GET["mode"]) && $_GET["mode"]==0) {
|
||||
$mode = "OR";
|
||||
}
|
||||
|
||||
$searchin = array();
|
||||
if (isset($_GET['searchin']) && is_array($_GET["searchin"])) {
|
||||
foreach ($_GET["searchin"] as $si) {
|
||||
if (isset($si) && is_numeric($si)) {
|
||||
switch ($si) {
|
||||
case 1: // keywords
|
||||
case 2: // name
|
||||
case 3: // comment
|
||||
case 4: // attributes
|
||||
$searchin[$si] = $si;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if none is checkd search all
|
||||
if (count($searchin)==0) $searchin=array(1, 2, 3, 4);
|
||||
|
||||
// Check to see if the search has been restricted to a particular sub-tree in
|
||||
// the folder hierarchy.
|
||||
if (isset($_GET["targetidform1"]) && is_numeric($_GET["targetidform1"]) && $_GET["targetidform1"]>0) {
|
||||
$targetid = $_GET["targetidform1"];
|
||||
$startFolder = $dms->getFolder($targetid);
|
||||
}
|
||||
else {
|
||||
$targetid = $settings->_rootFolderID;
|
||||
$startFolder = $dms->getFolder($targetid);
|
||||
}
|
||||
if (!is_object($startFolder)) {
|
||||
UI::exitError(getMLText("search_results"),getMLText("invalid_folder_id"));
|
||||
}
|
||||
|
||||
// Check to see if the search has been restricted to a particular
|
||||
// document owner.
|
||||
$owner = null;
|
||||
if (isset($_GET["ownerid"]) && is_numeric($_GET["ownerid"]) && $_GET["ownerid"]!=-1) {
|
||||
$owner = $dms->getUser($_GET["ownerid"]);
|
||||
if (!is_object($owner)) {
|
||||
UI::htmlStartPage(getMLText("search_results"));
|
||||
UI::contentContainer(getMLText("unknown_owner"));
|
||||
UI::htmlEndPage();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// Is the search restricted to documents created between two specific dates?
|
||||
$startdate = array();
|
||||
$stopdate = array();
|
||||
if (isset($_GET["creationdate"]) && $_GET["creationdate"]!=null) {
|
||||
$creationdate = true;
|
||||
} else {
|
||||
$creationdate = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Is the search restricted to documents created between two specific dates?
|
||||
$startdate = array();
|
||||
$stopdate = array();
|
||||
if (isset($_GET["creationdate"]) && $_GET["creationdate"]!=null) {
|
||||
if(isset($_GET["createstart"])) {
|
||||
$tmp = explode("-", $_GET["createstart"]);
|
||||
$startdate = array('year'=>(int)$tmp[2], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[0], 'hour'=>0, 'minute'=>0, 'second'=>0);
|
||||
} else {
|
||||
$startdate = array('year'=>$_GET["createstartyear"], 'month'=>$_GET["createstartmonth"], 'day'=>$_GET["createstartday"], 'hour'=>0, 'minute'=>0, 'second'=>0);
|
||||
if(isset($_GET["createstartyear"]))
|
||||
$startdate = array('year'=>$_GET["createstartyear"], 'month'=>$_GET["createstartmonth"], 'day'=>$_GET["createstartday"], 'hour'=>0, 'minute'=>0, 'second'=>0);
|
||||
}
|
||||
if (!checkdate($startdate['month'], $startdate['day'], $startdate['year'])) {
|
||||
if ($startdate && !checkdate($startdate['month'], $startdate['day'], $startdate['year'])) {
|
||||
UI::htmlStartPage(getMLText("search_results"));
|
||||
UI::contentContainer(getMLText("invalid_create_date_start"));
|
||||
UI::htmlEndPage();
|
||||
|
@ -144,19 +248,24 @@ if (isset($_GET["creationdate"]) && $_GET["creationdate"]!=null) {
|
|||
$tmp = explode("-", $_GET["createend"]);
|
||||
$stopdate = array('year'=>(int)$tmp[2], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[0], 'hour'=>0, 'minute'=>0, 'second'=>0);
|
||||
} else {
|
||||
$stopdate = array('year'=>$_GET["createendyear"], 'month'=>$_GET["createendmonth"], 'day'=>$_GET["createendday"], 'hour'=>23, 'minute'=>59, 'second'=>59);
|
||||
if(isset($_GET["createendyear"]))
|
||||
$stopdate = array('year'=>$_GET["createendyear"], 'month'=>$_GET["createendmonth"], 'day'=>$_GET["createendday"], 'hour'=>23, 'minute'=>59, 'second'=>59);
|
||||
}
|
||||
if (!checkdate($stopdate['month'], $stopdate['day'], $stopdate['year'])) {
|
||||
if ($stopdate && !checkdate($stopdate['month'], $stopdate['day'], $stopdate['year'])) {
|
||||
UI::htmlStartPage(getMLText("search_results"));
|
||||
UI::contentContainer(getMLText("invalid_create_date_end"));
|
||||
UI::htmlEndPage();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$expstartdate = array();
|
||||
$expstopdate = array();
|
||||
if (isset($_GET["expirationdate"]) && $_GET["expirationdate"]!=null) {
|
||||
$expstartdate = array();
|
||||
$expstopdate = array();
|
||||
if (isset($_GET["expirationdate"]) && $_GET["expirationdate"]!=null) {
|
||||
$expirationdate = true;
|
||||
} else {
|
||||
$expirationdate = false;
|
||||
}
|
||||
|
||||
if(isset($_GET["expirationstart"]) && $_GET["expirationstart"]) {
|
||||
$tmp = explode("-", $_GET["expirationstart"]);
|
||||
$expstartdate = array('year'=>(int)$tmp[2], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[0], 'hour'=>0, 'minute'=>0, 'second'=>0);
|
||||
|
@ -177,87 +286,102 @@ if (isset($_GET["expirationdate"]) && $_GET["expirationdate"]!=null) {
|
|||
$expstopdate = array('year'=>$_GET["expirationendyear"], 'month'=>$_GET["expirationendmonth"], 'day'=>$_GET["expirationendday"], 'hour'=>23, 'minute'=>59, 'second'=>59);
|
||||
$expstopdate = array();
|
||||
}
|
||||
}
|
||||
|
||||
// status
|
||||
$status = array();
|
||||
if (isset($_GET["pendingReview"])){
|
||||
$status[] = S_DRAFT_REV;
|
||||
}
|
||||
if (isset($_GET["pendingApproval"])){
|
||||
$status[] = S_DRAFT_APP;
|
||||
}
|
||||
if (isset($_GET["inWorkflow"])){
|
||||
$status[] = S_IN_WORKFLOW;
|
||||
}
|
||||
if (isset($_GET["released"])){
|
||||
$status[] = S_RELEASED;
|
||||
}
|
||||
if (isset($_GET["rejected"])){
|
||||
$status[] = S_REJECTED;
|
||||
}
|
||||
if (isset($_GET["obsolete"])){
|
||||
$status[] = S_OBSOLETE;
|
||||
}
|
||||
if (isset($_GET["expired"])){
|
||||
$status[] = S_EXPIRED;
|
||||
}
|
||||
|
||||
// category
|
||||
$categories = array();
|
||||
if(isset($_GET['categoryids']) && $_GET['categoryids']) {
|
||||
foreach($_GET['categoryids'] as $catid) {
|
||||
if($catid > 0)
|
||||
$categories[] = $dms->getDocumentCategory($catid);
|
||||
// status
|
||||
$status = array();
|
||||
if (isset($_GET["pendingReview"])){
|
||||
$status[] = S_DRAFT_REV;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_GET["attributes"]))
|
||||
$attributes = $_GET["attributes"];
|
||||
else
|
||||
$attributes = array();
|
||||
|
||||
//
|
||||
// Get the page number to display. If the result set contains more than
|
||||
// 25 entries, it is displayed across multiple pages.
|
||||
//
|
||||
// This requires that a page number variable be used to track which page the
|
||||
// user is interested in, and an extra clause on the select statement.
|
||||
//
|
||||
// Default page to display is always one.
|
||||
$pageNumber=1;
|
||||
$limit = 15;
|
||||
if (isset($_GET["pg"])) {
|
||||
if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
|
||||
$pageNumber = (int) $_GET["pg"];
|
||||
if (isset($_GET["pendingApproval"])){
|
||||
$status[] = S_DRAFT_APP;
|
||||
}
|
||||
elseif (!strcasecmp($_GET["pg"], "all")) {
|
||||
$limit = 0;
|
||||
if (isset($_GET["inWorkflow"])){
|
||||
$status[] = S_IN_WORKFLOW;
|
||||
}
|
||||
if (isset($_GET["released"])){
|
||||
$status[] = S_RELEASED;
|
||||
}
|
||||
if (isset($_GET["rejected"])){
|
||||
$status[] = S_REJECTED;
|
||||
}
|
||||
if (isset($_GET["obsolete"])){
|
||||
$status[] = S_OBSOLETE;
|
||||
}
|
||||
if (isset($_GET["expired"])){
|
||||
$status[] = S_EXPIRED;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do not search for folders if result shall be filtered by status.
|
||||
* If this is not done, unexplainable results will be delivered.
|
||||
* e.g. a search for expired documents of a given user will list
|
||||
* also all folders of that user because the status doesn't apply
|
||||
* to folders.
|
||||
*/
|
||||
if($status)
|
||||
$resultmode = 0x01;
|
||||
|
||||
// ---------------- Start searching -----------------------------------------
|
||||
$startTime = getTime();
|
||||
$resArr = $dms->search($query, $limit, ($pageNumber-1)*$limit, $mode, $searchin, $startFolder, $owner, $status, $startdate, $stopdate, array(), array(), $categories, $attributes, 0x03, $expstartdate, $expstopdate);
|
||||
$searchTime = getTime() - $startTime;
|
||||
$searchTime = round($searchTime, 2);
|
||||
|
||||
$entries = array();
|
||||
if($resArr['folders']) {
|
||||
foreach ($resArr['folders'] as $entry) {
|
||||
if ($entry->getAccessMode($user) >= M_READ) {
|
||||
$entries[] = $entry;
|
||||
// category
|
||||
$categories = array();
|
||||
if(isset($_GET['categoryids']) && $_GET['categoryids']) {
|
||||
foreach($_GET['categoryids'] as $catid) {
|
||||
if($catid > 0)
|
||||
$categories[] = $dms->getDocumentCategory($catid);
|
||||
}
|
||||
}
|
||||
}
|
||||
if($resArr['docs']) {
|
||||
foreach ($resArr['docs'] as $entry) {
|
||||
if ($entry->getAccessMode($user) >= M_READ) {
|
||||
$entries[] = $entry;
|
||||
|
||||
/* Do not search for folders if result shall be filtered by categories. */
|
||||
if($categories)
|
||||
$resultmode = 0x01;
|
||||
|
||||
if (isset($_GET["attributes"]))
|
||||
$attributes = $_GET["attributes"];
|
||||
else
|
||||
$attributes = array();
|
||||
|
||||
//
|
||||
// Get the page number to display. If the result set contains more than
|
||||
// 25 entries, it is displayed across multiple pages.
|
||||
//
|
||||
// This requires that a page number variable be used to track which page the
|
||||
// user is interested in, and an extra clause on the select statement.
|
||||
//
|
||||
// Default page to display is always one.
|
||||
$pageNumber=1;
|
||||
$limit = 15;
|
||||
if (isset($_GET["pg"])) {
|
||||
if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
|
||||
$pageNumber = (int) $_GET["pg"];
|
||||
}
|
||||
elseif (!strcasecmp($_GET["pg"], "all")) {
|
||||
$limit = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---------------- Start searching -----------------------------------------
|
||||
$startTime = getTime();
|
||||
$resArr = $dms->search($query, $limit, ($pageNumber-1)*$limit, $mode, $searchin, $startFolder, $owner, $status, $creationdate ? $startdate : array(), $creationdate ? $stopdate : array(), array(), array(), $categories, $attributes, $resultmode, $expirationdate ? $expstartdate : array(), $expirationdate ? $expstopdate : array());
|
||||
$searchTime = getTime() - $startTime;
|
||||
$searchTime = round($searchTime, 2);
|
||||
|
||||
$entries = array();
|
||||
if($resArr['folders']) {
|
||||
foreach ($resArr['folders'] as $entry) {
|
||||
if ($entry->getAccessMode($user) >= M_READ) {
|
||||
$entries[] = $entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
if($resArr['docs']) {
|
||||
foreach ($resArr['docs'] as $entry) {
|
||||
if ($entry->getAccessMode($user) >= M_READ) {
|
||||
$entries[] = $entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
// -------------- Output results --------------------------------------------
|
||||
|
||||
if(count($entries) == 1) {
|
||||
|
@ -273,6 +397,28 @@ if(count($entries) == 1) {
|
|||
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
|
||||
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'folder'=>$startFolder, 'query'=>$query, 'searchhits'=>$entries, 'totalpages'=>$resArr['totalPages'], 'pagenumber'=>$pageNumber, 'searchtime'=>$searchTime, 'urlparams'=>$_GET, 'searchin'=>$searchin, 'cachedir'=>$settings->_cacheDir));
|
||||
if($view) {
|
||||
$view->setParam('fullsearch', (isset($_GET["fullsearch"]) && $_GET["fullsearch"]) ? true : false);
|
||||
$view->setParam('mode', $mode);
|
||||
$view->setParam('searchin', $searchin);
|
||||
$view->setParam('startfolder', $startFolder);
|
||||
$view->setParam('owner', $owner);
|
||||
$view->setParam('startdate', $startdate);
|
||||
$view->setParam('stopdate', $stopdate);
|
||||
$view->setParam('expstartdate', $expstartdate);
|
||||
$view->setParam('expstopdate', $expstopdate);
|
||||
$view->setParam('creationdate', $creationdate);
|
||||
$view->setParam('expirationdate', $expirationdate);
|
||||
$view->setParam('status', $status);
|
||||
$view->setParam('categories', $categories);
|
||||
$view->setParam('attributes', $attributes);
|
||||
$attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_document, SeedDMS_Core_AttributeDefinition::objtype_documentcontent/*, SeedDMS_Core_AttributeDefinition::objtype_all*/));
|
||||
$view->setParam('attrdefs', $attrdefs);
|
||||
$allCats = $dms->getDocumentCategories();
|
||||
$view->setParam('allcategories', $allCats);
|
||||
$allUsers = $dms->getAllUsers($settings->_sortUsersInList);
|
||||
$view->setParam('allusers', $allUsers);
|
||||
$view->setParam('workflowmode', $settings->_workflowMode);
|
||||
$view->setParam('enablefullsearch', $settings->_enableFullSearch);
|
||||
$view->show();
|
||||
exit;
|
||||
}
|
||||
|
|
|
@ -31,19 +31,43 @@ require_once("class.Bootstrap.php");
|
|||
*/
|
||||
class SeedDMS_View_Search extends SeedDMS_Bootstrap_Style {
|
||||
|
||||
function markQuery($str, $tag = "b") {
|
||||
/**
|
||||
* Mark search query sting in a given string
|
||||
*
|
||||
* @param string $str mark this text
|
||||
* @param string $tag wrap the marked text with this html tag
|
||||
* @return string marked text
|
||||
*/
|
||||
function markQuery($str, $tag = "b") { /* {{{ */
|
||||
$querywords = preg_split("/ /", $this->query);
|
||||
|
||||
foreach ($querywords as $queryword)
|
||||
$str = str_ireplace("($queryword)", "<" . $tag . ">\\1</" . $tag . ">", $str);
|
||||
|
||||
return $str;
|
||||
}
|
||||
} /* }}} */
|
||||
|
||||
function show() { /* {{{ */
|
||||
$dms = $this->params['dms'];
|
||||
$user = $this->params['user'];
|
||||
$folder = $this->params['folder'];
|
||||
$fullsearch = $this->params['fullsearch'];
|
||||
$attrdefs = $this->params['attrdefs'];
|
||||
$allCats = $this->params['allcategories'];
|
||||
$allUsers = $this->params['allusers'];
|
||||
$mode = $this->params['mode'];
|
||||
$workflowmode = $this->params['workflowmode'];
|
||||
$enablefullsearch = $this->params['enablefullsearch'];
|
||||
$attributes = $this->params['attributes'];
|
||||
$categories = $this->params['categories'];
|
||||
$owner = $this->params['owner'];
|
||||
$startdate = $this->params['startdate'];
|
||||
$stopdate = $this->params['stopdate'];
|
||||
$expstartdate = $this->params['expstartdate'];
|
||||
$expstopdate = $this->params['expstopdate'];
|
||||
$creationdate = $this->params['creationdate'];
|
||||
$expirationdate = $this->params['expirationdate'];
|
||||
$status = $this->params['status'];
|
||||
$this->query = $this->params['query'];
|
||||
$entries = $this->params['searchhits'];
|
||||
$totalpages = $this->params['totalpages'];
|
||||
|
@ -58,6 +82,222 @@ class SeedDMS_View_Search extends SeedDMS_Bootstrap_Style {
|
|||
$this->contentStart();
|
||||
$this->pageNavigation(getMLText("search_results"), "");
|
||||
|
||||
echo "<div class=\"row-fluid\">\n";
|
||||
echo "<div class=\"span4\">\n";
|
||||
?>
|
||||
<ul class="nav nav-tabs" id="searchtab">
|
||||
<li <?php echo ($fullsearch == false) ? 'class="active"' : ''; ?>><a data-target="#database" data-toggle="tab"><?php printMLText('databasesearch'); ?></a></li>
|
||||
<?php
|
||||
if($enablefullsearch) {
|
||||
?>
|
||||
<li <?php echo ($fullsearch == true) ? 'class="active"' : ''; ?>><a data-target="#fulltext" data-toggle="tab"><?php printMLText('fullsearch'); ?></a></li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane <?php echo ($fullsearch == false) ? 'active' : ''; ?>" id="database">
|
||||
<?php
|
||||
// Database search Form {{{
|
||||
$this->contentContainerStart();
|
||||
?>
|
||||
<form action="../op/op.Search.php" name="form1" onsubmit="return checkForm();">
|
||||
<table class="table-condensed">
|
||||
<tr>
|
||||
<td><?php printMLText("search_query");?>:</td>
|
||||
<td>
|
||||
<input type="text" name="query" value="<?php echo $this->query; ?>" />
|
||||
<select name="mode">
|
||||
<option value="1" <?php echo ($mode=='AND') ? "selected" : ""; ?>><?php printMLText("search_mode_and");?>
|
||||
<option value="0"<?php echo ($mode=='OR') ? "selected" : ""; ?>><?php printMLText("search_mode_or");?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("search_in");?>:</td>
|
||||
<td>
|
||||
<label class="checkbox" for="keywords"><input type="checkbox" id="keywords" name="searchin[]" value="1" <?php if(in_array('1', $searchin)) echo " checked"; ?>><?php printMLText("keywords");?> (<?php printMLText('documents_only'); ?>)</label>
|
||||
<label class="checkbox" for="searchName"><input type="checkbox" name="searchin[]" id="searchName" value="2" <?php if(in_array('2', $searchin)) echo " checked"; ?>><?php printMLText("name");?></label>
|
||||
<label class="checkbox" for="comment"><input type="checkbox" name="searchin[]" id="comment" value="3" <?php if(in_array('3', $searchin)) echo " checked"; ?>><?php printMLText("comment");?></label>
|
||||
<label class="checkbox" for="attributes"><input type="checkbox" name="searchin[]" id="attributes" value="4" <?php if(in_array('4', $searchin)) echo " checked"; ?>><?php printMLText("attributes");?></label>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
if($attrdefs) {
|
||||
foreach($attrdefs as $attrdef) {
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo htmlspecialchars($attrdef->getName()); ?></td>
|
||||
<td><?php $this->printAttributeEditField($attrdef, $attributes[$attrdef->getID()]) ?></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td><?php printMLText("category");?>:<br />(<?php printMLText('documents_only'); ?>)</td>
|
||||
<td>
|
||||
<select class="chzn-select" name="categoryids[]" multiple="multiple" data-placeholder="<?php printMLText('select_category'); ?>">
|
||||
<option value="-1"><?php printMLText("all_categories");?>
|
||||
<?php
|
||||
$tmpcatids = array();
|
||||
foreach($categories as $tmpcat)
|
||||
$tmpcatids[] = $tmpcat->getID();
|
||||
foreach ($allCats as $catObj) {
|
||||
print "<option value=\"".$catObj->getID()."\" ".(in_array($catObj->getID(), $tmpcatids) ? "selected" : "").">" . htmlspecialchars($catObj->getName()) . "\n";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("status");?>:<br />(<?php printMLText('documents_only'); ?>)</td>
|
||||
<td>
|
||||
<?php if($workflowmode == 'traditional') { ?>
|
||||
<label class="checkbox" for='pendingReview'><input type="checkbox" id="pendingReview" name="pendingReview" value="1" <?php echo in_array(S_DRAFT_REV, $status) ? "checked" : ""; ?>><?php printOverallStatusText(S_DRAFT_REV);?></label>
|
||||
<label class="checkbox" for='pendingApproval'><input type="checkbox" id="pendingApproval" name="pendingApproval" value="1" <?php echo in_array(S_DRAFT_APP, $status) ? "checked" : ""; ?>><?php printOverallStatusText(S_DRAFT_APP);?></label>
|
||||
<?php } else { ?>
|
||||
<label class="checkbox" for='inWorkflow'><input type="checkbox" id="inWorkflow" name="inWorkflow" value="1" <?php echo in_array(S_IN_WORKFLOW, $status) ? "checked" : ""; ?>><?php printOverallStatusText(S_IN_WORKFLOW);?></label>
|
||||
<?php } ?>
|
||||
<label class="checkbox" for='released'><input type="checkbox" id="released" name="released" value="1" <?php echo in_array(S_RELEASED, $status) ? "checked" : ""; ?>><?php printOverallStatusText(S_RELEASED);?></label>
|
||||
<label class="checkbox" for='rejected'><input type="checkbox" id="rejected" name="rejected" value="1" <?php echo in_array(S_REJECTED, $status) ? "checked" : ""; ?>><?php printOverallStatusText(S_REJECTED);?></label>
|
||||
<label class="checkbox" for='obsolete'><input type="checkbox" id="obsolete" name="obsolete" value="1" <?php echo in_array(S_OBSOLETE, $status) ? "checked" : ""; ?>><?php printOverallStatusText(S_OBSOLETE);?></label>
|
||||
<label class="checkbox" for='expired'><input type="checkbox" id="expired" name="expired" value="1" <?php echo in_array(S_EXPIRED, $status) ? "checked" : ""; ?>><?php printOverallStatusText(S_EXPIRED);?></label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("owner");?>:</td>
|
||||
<td>
|
||||
<select class="chzn-select-deselect" name="ownerid">
|
||||
<option value="-1"></option>
|
||||
<?php
|
||||
foreach ($allUsers as $userObj) {
|
||||
if ($userObj->isGuest())
|
||||
continue;
|
||||
print "<option value=\"".$userObj->getID()."\" ".(($owner && $userObj->getID() == $owner->getID()) ? "selected" : "").">" . htmlspecialchars($userObj->getLogin()." - ".$userObj->getFullName()) . "\n";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("under_folder")?>:</td>
|
||||
<td><?php $this->printFolderChooser("form1", M_READ, -1, $startfolder);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("creation_date");?>:</td>
|
||||
<td>
|
||||
<label class="checkbox inline">
|
||||
<input type="checkbox" name="creationdate" value="true" <?php if($creationdate) echo "checked"; ?>/><?php printMLText("between");?>
|
||||
</label><br />
|
||||
<span class="input-append date" id="createstartdate" data-date="<?php echo date('d-m-Y'); ?>" data-date-format="dd-mm-yyyy" data-date-language="<?php echo str_replace('_', '-', $this->params['session']->getLanguage()); ?>">
|
||||
<input class="span4" size="16" name="createstart" type="text" value="<?php if($startdate) printf("%02d-%02d-%04d", $startdate['day'], $startdate['month'], $startdate['year']); else echo date('d-m-Y'); ?>">
|
||||
<span class="add-on"><i class="icon-calendar"></i></span>
|
||||
</span>
|
||||
<?php printMLText("and"); ?>
|
||||
<span class="input-append date" id="createenddate" data-date="<?php echo date('d-m-Y'); ?>" data-date-format="dd-mm-yyyy" data-date-language="<?php echo str_replace('_', '-', $this->params['session']->getLanguage()); ?>">
|
||||
<input class="span4" size="16" name="createend" type="text" value="<?php if($stopdate) printf("%02d-%02d-%04d", $stopdate['day'], $stopdate['month'], $stopdate['year']); else echo date('d-m-Y'); ?>">
|
||||
<span class="add-on"><i class="icon-calendar"></i></span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("expires");?>:<br />(<?php printMLText('documents_only'); ?>)</td>
|
||||
<td>
|
||||
<label class="checkbox inline">
|
||||
<input type="checkbox" name="expirationdate" value="true" <?php if($expirationdate) echo "checked"; ?>/><?php printMLText("between");?>
|
||||
</label><br />
|
||||
<span class="input-append date" id="expirationstartdate" data-date="<?php echo date('d-m-Y'); ?>" data-date-format="dd-mm-yyyy" data-date-language="<?php echo str_replace('_', '-', $this->params['session']->getLanguage()); ?>">
|
||||
<input class="span4" size="16" name="expirationstart" type="text" value="<?php if($expstartdate) printf("%02d-%02d-%04d", $expstartdate['day'], $expstartdate['month'], $expstartdate['year']); else echo date('d-m-Y'); ?>">
|
||||
<span class="add-on"><i class="icon-calendar"></i></span>
|
||||
</span>
|
||||
<?php printMLText("and"); ?>
|
||||
<span class="input-append date" id="expirationenddate" data-date="<?php echo date('d-m-Y'); ?>" data-date-format="dd-mm-yyyy" data-date-language="<?php echo str_replace('_', '-', $this->params['session']->getLanguage()); ?>">
|
||||
<input class="span4" size="16" name="expirationend" type="text" value="<?php if($expstopdate) printf("%02d-%02d-%04d", $expstopdate['day'], $expstopdate['month'], $expstopdate['year']); else echo date('d-m-Y'); ?>">
|
||||
<span class="add-on"><i class="icon-calendar"></i></span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td><button type="submit" class="btn"><i class="icon-search"> <?php printMLText("search"); ?></button></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</form>
|
||||
<?php
|
||||
$this->contentContainerEnd();
|
||||
// }}}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
if($enablefullsearch) {
|
||||
echo "<div class=\"tab-pane ".(($fullsearch == true) ? 'active' : '')."\" id=\"fulltext\">\n";
|
||||
$this->contentContainerStart();
|
||||
?>
|
||||
<form action="../op/op.Search.php" name="form2" onsubmit="return checkForm();">
|
||||
<input type="hidden" name="fullsearch" value="1" />
|
||||
<table class="table-condensed">
|
||||
<tr>
|
||||
<td><?php printMLText("search_query");?>:</td>
|
||||
<td>
|
||||
<input type="text" name="query" value="<?php echo $this->query; ?>" />
|
||||
<!--
|
||||
<select name="mode">
|
||||
<option value="1" selected><?php printMLText("search_mode_and");?>
|
||||
<option value="0"><?php printMLText("search_mode_or");?>
|
||||
</select>
|
||||
-->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("category_filter");?>:</td>
|
||||
<td>
|
||||
<select class="chzn-select" name="categoryids[]" multiple="multiple" data-placeholder="<?php printMLText('select_category'); ?>">
|
||||
<!--
|
||||
<option value="-1"><?php printMLText("all_categories");?>
|
||||
-->
|
||||
<?php
|
||||
$tmpcatids = array();
|
||||
foreach($categories as $tmpcat)
|
||||
$tmpcatids[] = $tmpcat->getID();
|
||||
foreach ($allCats as $catObj) {
|
||||
print "<option value=\"".$catObj->getID()."\" ".(in_array($catObj->getID(), $tmpcatids) ? "selected" : "").">" . htmlspecialchars($catObj->getName()) . "\n";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php printMLText("owner");?>:</td>
|
||||
<td>
|
||||
<select class="chzn-select-deselect" name="ownerid">
|
||||
<option value="-1"></option>
|
||||
<?php
|
||||
foreach ($allUsers as $userObj) {
|
||||
if ($userObj->isGuest())
|
||||
continue;
|
||||
print "<option value=\"".$userObj->getID()."\" ".(($owner && $userObj->getID() == $owner->getID()) ? "selected" : "").">" . htmlspecialchars($userObj->getLogin()." - ".$userObj->getFullName()) . "\n";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td><button type="submit" class="btn"><i class="icon-search"> <?php printMLText("search"); ?></button></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
<?php
|
||||
$this->contentContainerEnd();
|
||||
echo "</div>\n";
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
echo "</div>\n";
|
||||
echo "<div class=\"span8\">\n";
|
||||
// Database search Result {{{
|
||||
$foldercount = $doccount = 0;
|
||||
if($entries) {
|
||||
foreach ($entries as $entry) {
|
||||
|
@ -76,19 +316,16 @@ class SeedDMS_View_Search extends SeedDMS_Bootstrap_Style {
|
|||
print "<th></th>\n";
|
||||
print "<th>".getMLText("name")."</th>\n";
|
||||
print "<th>".getMLText("attributes")."</th>\n";
|
||||
print "<th>".getMLText("owner")."</th>\n";
|
||||
print "<th>".getMLText("status")."</th>\n";
|
||||
print "<th>".getMLText("version")."</th>\n";
|
||||
// print "<th>".getMLText("comment")."</th>\n";
|
||||
//print "<th>".getMLText("reviewers")."</th>\n";
|
||||
//print "<th>".getMLText("approvers")."</th>\n";
|
||||
print "</tr>\n</thead>\n<tbody>\n";
|
||||
|
||||
$previewer = new SeedDMS_Preview_Previewer($cachedir, 40);
|
||||
foreach ($entries as $entry) {
|
||||
if(get_class($entry) == 'SeedDMS_Core_Document') {
|
||||
$document = $entry;
|
||||
$owner = $document->getOwner();
|
||||
$lc = $document->getLatestContent();
|
||||
$version = $lc->getVersion();
|
||||
$previewer->createPreview($lc);
|
||||
|
||||
if (in_array(3, $searchin))
|
||||
|
@ -118,34 +355,40 @@ class SeedDMS_View_Search extends SeedDMS_Bootstrap_Style {
|
|||
}
|
||||
print $docName;
|
||||
print "</a>";
|
||||
print "<br /><span style=\"font-size: 85%; font-style: italic; color: #666; \">".getMLText('owner').": <b>".htmlspecialchars($owner->getFullName())."</b>, ".getMLText('creation_date').": <b>".date('Y-m-d', $document->getDate())."</b>, ".getMLText('version')." <b>".$version."</b> - <b>".date('Y-m-d', $lc->getDate())."</b></span>";
|
||||
if($comment) {
|
||||
print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>";
|
||||
}
|
||||
print "</td>";
|
||||
|
||||
$attributes = $lc->getAttributes();
|
||||
print "<td>";
|
||||
print "<ul class=\"unstyled\">\n";
|
||||
$attributes = $lc->getAttributes();
|
||||
if($attributes) {
|
||||
foreach($attributes as $attribute) {
|
||||
$attrdef = $attribute->getAttributeDefinition();
|
||||
print "<li>".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars($attribute->getValue())."</li>\n";
|
||||
$lcattributes = $lc->getAttributes();
|
||||
if($lcattributes) {
|
||||
foreach($lcattributes as $lcattribute) {
|
||||
$attrdef = $lcattribute->getAttributeDefinition();
|
||||
print "<li>".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars($lcattribute->getValue())."</li>\n";
|
||||
}
|
||||
}
|
||||
print "</ul>\n";
|
||||
print "<ul class=\"unstyled\">\n";
|
||||
$docttributes = $document->getAttributes();
|
||||
if($docttributes) {
|
||||
foreach($docttributes as $docttribute) {
|
||||
$attrdef = $docttribute->getAttributeDefinition();
|
||||
print "<li>".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars($docttribute->getValue())."</li>\n";
|
||||
}
|
||||
}
|
||||
print "</ul>\n";
|
||||
print "</td>";
|
||||
|
||||
$owner = $document->getOwner();
|
||||
print "<td>".htmlspecialchars($owner->getFullName())."</td>";
|
||||
$display_status=$lc->getStatus();
|
||||
print "<td>".getOverallStatusText($display_status["status"]). "</td>";
|
||||
|
||||
print "<td>".$lc->getVersion()."</td>";
|
||||
// print "<td>".$comment."</td>";
|
||||
print "</tr>\n";
|
||||
} elseif(get_class($entry) == 'SeedDMS_Core_Folder') {
|
||||
$folder = $entry;
|
||||
$owner = $folder->getOwner();
|
||||
if (in_array(2, $searchin)) {
|
||||
$folderName = $this->markQuery(htmlspecialchars($folder->getName()), "i");
|
||||
} else {
|
||||
|
@ -159,17 +402,26 @@ class SeedDMS_View_Search extends SeedDMS_Bootstrap_Style {
|
|||
print htmlspecialchars($path[$i]->getName())."/";
|
||||
}
|
||||
print $folderName;
|
||||
print "</a></td>";
|
||||
print "<td></td>";
|
||||
|
||||
$owner = $folder->getOwner();
|
||||
print "<td>".htmlspecialchars($owner->getFullName())."</td>";
|
||||
print "<td></td>";
|
||||
print "<td></td>";
|
||||
print "</a>";
|
||||
print "<br /><span style=\"font-size: 85%; font-style: italic; color: #666;\">".getMLText('owner').": <b>".htmlspecialchars($owner->getFullName())."</b>, ".getMLText('creation_date').": <b>".date('Y-m-d', $folder->getDate())."</b></span>";
|
||||
if (in_array(3, $searchin)) $comment = $this->markQuery(htmlspecialchars($folder->getComment()));
|
||||
else $comment = htmlspecialchars($folder->getComment());
|
||||
if (strlen($comment) > 50) $comment = substr($comment, 0, 47) . "...";
|
||||
print "<td>".$comment."</td>";
|
||||
if($comment) {
|
||||
print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>";
|
||||
}
|
||||
print "</td>";
|
||||
print "<td>";
|
||||
print "<ul class=\"unstyled\">\n";
|
||||
$folderattributes = $folder->getAttributes();
|
||||
if($folderattributes) {
|
||||
foreach($folderattributes as $folderattribute) {
|
||||
$attrdef = $folderattribute->getAttributeDefinition();
|
||||
print "<li>".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars($folderattribute->getValue())."</li>\n";
|
||||
}
|
||||
}
|
||||
print "</td>";
|
||||
print "<td></td>";
|
||||
print "</tr>\n";
|
||||
}
|
||||
}
|
||||
|
@ -182,6 +434,9 @@ class SeedDMS_View_Search extends SeedDMS_Bootstrap_Style {
|
|||
print "<div class=\"alert alert-error\">".getMLText("search_no_results")."</div>";
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
echo "</div>";
|
||||
echo "</div>";
|
||||
$this->htmlEndPage();
|
||||
} /* }}} */
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user