advancedSearchBL.php
5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php
/**
* Business logic used to perform advanced search. Advanced search allows
* users to search by meta data types
*
* @author Rob Cherry, Jam Warehouse South Africa (Pty) Ltd
* @date 26 February 2003
* @package presentation.knowledgeTree.search
*/
require_once("../../../../config/dmsDefaults.php");
if (checkSession()) {
require_once("$default->fileSystemRoot/lib/visualpatterns/PatternBrowsableSearchResults.inc");
require_once("$default->fileSystemRoot/lib/visualpatterns/PatternEditableTableSqlQuery.inc");
require_once("$default->fileSystemRoot/lib/visualpatterns/PatternCustom.inc");
require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc");
require_once("$default->fileSystemRoot/lib/documentmanagement/Document.inc");
require_once("$default->fileSystemRoot/lib/security/permission.inc");
require_once("advancedSearchUI.inc");
require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
//if (isset($fForSearch)) {
if (strlen($fSearchString) > 0) {
if (strlen($fSearchString) > 0) {
//display search results
$sMetaTagIDs = getChosenMetaDataTags();
if (strlen($sMetaTagIDs) > 0) {
$sSQLSearchString = getSQLSearchString($fSearchString);
$sDocument = getApprovedDocumentString($sMetaTagIDs, $sSQLSearchString);
if (strlen($sDocument) > 0) {
//if there are documents to view
$oPatternCustom = & new PatternCustom();
if (!isset($fStartIndex)) {
$fStartIndex = 0;
}
$oPatternCustom->setHtml(getSearchResults($sDocument,$fStartIndex, $fSearchString, $sMetaTagIDs));
$main->setCentralPayload($oPatternCustom);
$main->render();
} else {
$oPatternCustom = & new PatternCustom();
$oPatternCustom->setHtml(getSearchPage($fSearchString, explode(",",$sMetaTagIDs)));
$main->setCentralPayload($oPatternCustom);
$main->setErrorMessage("No documents matched your search criteria");
$main->setFormAction("advancedSearchBL.php?fForSearch=1");
$main->render();
}
} else {
$oPatternCustom = & new PatternCustom();
$oPatternCustom->setHtml(getSearchPage($fSearchString));
$main->setCentralPayload($oPatternCustom);
$main->setErrorMessage("Please select at least one criteria to search by");
$main->setFormAction("advancedSearchBL.php?fForSearch=1");
$main->render();
}
} else {
$sMetaTagIDs = getChosenMetaDataTags();
$aMetaTagIDs = explode(",", $sMetaTagIDs);
$oPatternCustom = & new PatternCustom();
$oPatternCustom->setHtml(getSearchPage($fSearchString, $aMetaTagIDs));
$main->setCentralPayload($oPatternCustom);
$main->setErrorMessage("Please enter text to search on");
$main->setFormAction("advancedSearchBL.php?fForSearch=1");
$main->render();
}
} else {
//display search criteria
$oPatternCustom = & new PatternCustom();
$oPatternCustom->setHtml(getSearchPage($fSearchString));
$main->setCentralPayload($oPatternCustom);
$main->setFormAction("advancedSearchBL.php?fForSearch=1");
$main->render();
}
}
function getChosenMetaDataTags() {
$aKeys = array_keys($_POST);
$aTagIDs = array();
for ($i = 0; $i < count($aKeys); $i++) {
$sRowStart = $aKeys[$i];
$pos = strcmp("adv_search_start", $sRowStart);
if ($pos == 0) {
$i++;
$sRowStart = $aKeys[$i];
while ((strcmp("adv_search_end", $sRowStart) != 0) && ($i < count($aKeys))) {
$aTagIDs[count($aTagIDs)] = $_POST[$aKeys[$i]];
$i++;
$sRowStart = $aKeys[$i];
}
}
}
if (count($aTagIDs) > 1) {
return implode(",",$aTagIDs);
}
return $aTagIDs[0];
}
/**
* Generate a string onsisting of all documents that match the search criteria
* and that the user is allowed to see
*/
function getApprovedDocumentString($sMetaTagIDs, $sSQLSearchString) {
global $default;
$aApprovedDocumentIDs = array();
$sQuery = "SELECT DISTINCT D.id " .
"FROM documents AS D INNER JOIN document_fields_link AS DFL ON DFL.document_id = D.id " .
"INNER JOIN document_fields AS DF ON DF.id = DFL.document_field_id " .
"WHERE DF.ID IN (1,2,3,4) " .
"AND " . $sSQLSearchString;
$sql = $default->db;
$sql->query($sQuery);
while ($sql->next_record()) {
if (Permission::userHasDocumentReadPermission($sql->f("id"))) {
$aApprovedDocuments[count($aApprovedDocuments)] = $sql->f("id");
}
}
if (count($aApprovedDocuments) > 1) {
return implode(",",$aApprovedDocuments);
}
return $aApprovedDocuments[0];
}
/*
* Generate a string that can be used in a SQL query
* from the list of documents the user is allowed to see
*/
function getSQLSearchString($sSearchString) {
$aWords = explode(" ", $sSearchString);
$sSQLSearchString;
for ($i = 0; $i < count($aWords) - 1; $i++) {
$sSQLSearchString .= "(DFL.value LIKE '%" . $aWords[$i] . "%') OR ";
}
$sSQLSearchString .= "(DFL.value LIKE '%" . $aWords[count($aWords) -1] . "%')";
return $sSQLSearchString;
}
?>