Commit 607a06c4465a2a3b4bb4d20ea306937ee4f0c303

Authored by nbm
1 parent e2adcb3e

Allow criteria to render their own search widgets.

Make it easy to get all the base metadata and all the generic document
fields.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3083 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing 1 changed file with 89 additions and 6 deletions
lib/browse/Criteria.inc
... ... @@ -2,6 +2,7 @@
2 2 require_once("$default->fileSystemRoot/lib/security/Permission.inc");
3 3 require_once("$default->fileSystemRoot/lib/users/User.inc");
4 4 require_once("$default->fileSystemRoot/lib/documentmanagement/Document.inc");
  5 +require_once("$default->fileSystemRoot/lib/documentmanagement/DocumentType.inc");
5 6 require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc");
6 7 /**
7 8 * $Id$
... ... @@ -132,6 +133,14 @@ class BrowseCriterion {
132 133 function setOptions($aOptions) {
133 134 $this->aOptions = $aOptions;
134 135 }
  136 +
  137 + function searchDisplay($aRequest) {
  138 + return "<tr><td>" . $this->headerDisplay() . ": </td><td>" . $this->searchWidget($aRequest) . "</td></tr>\n";
  139 + }
  140 +
  141 + function searchWidget ($aRequest) {
  142 + return "<input type=\"text\" size=\"50\" name=\"bmd$k\" />";
  143 + }
135 144 }
136 145  
137 146 class NameCriterion extends BrowseCriterion {
... ... @@ -205,6 +214,16 @@ class CreatorCriterion extends BrowseCriterion {
205 214 function folderDisplay($oFolder) {
206 215 return $this->documentDisplay($oFolder);
207 216 }
  217 + function searchWidget ($aRequest) {
  218 + $sRet = "<select size=\"1\" name=\"bmd$k\">\n";
  219 + $aUsers = User::getList();
  220 + $sRet .= "<option value=\"-1\">None</option>\n";
  221 + foreach ($aUsers as $oUser) {
  222 + $sRet .= "<option value=\"" . $oUser->getID() . "\">" . $oUser->getName() . "</option>\n";
  223 + }
  224 + $sRet .= "</select>\n";
  225 + return $sRet;
  226 + }
208 227 }
209 228  
210 229 class DateCreatedCriterion extends BrowseCriterion {
... ... @@ -237,6 +256,16 @@ class DocumentTypeCriterion extends BrowseCriterion {
237 256 }
238 257 return "&nbsp;";
239 258 }
  259 + function searchWidget ($aRequest) {
  260 + $sRet = "<select size=\"1\" name=\"bmd$k\">\n";
  261 + $aUsers = DocumentType::getList();
  262 + $sRet .= "<option value=\"-1\">None</option>\n";
  263 + foreach ($aUsers as $oUser) {
  264 + $sRet .= "<option value=\"" . $oUser->getID() . "\">" . $oUser->getName() . "</option>\n";
  265 + }
  266 + $sRet .= "</select>\n";
  267 + return $sRet;
  268 + }
240 269 }
241 270  
242 271 class GenericMetadataCriterion extends BrowseCriterion {
... ... @@ -277,7 +306,7 @@ class GenericMetadataCriterion extends BrowseCriterion {
277 306 }
278 307  
279 308 class Criteria {
280   - function &getCriterionByNumber($iID) {
  309 + function &_getBaseCriterionByNumber($iID) {
281 310 global $default;
282 311 switch ($iID) {
283 312 case -1:
... ... @@ -298,16 +327,70 @@ class Criteria {
298 327 case -6:
299 328 $oCriterion =& new IDCriterion(_("ID"), 'id', 'id');
300 329 break;
301   - default:
302   - $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($iID)); /*ok*/
303   - $sName = DBUtil::getOneResultKey($aQuery, 'name');
304   - $oCriterion =& new GenericMetadataCriterion($sName, 'id', 'id', $iID);
305   - break;
306 330 }
307 331 return $oCriterion;
308 332 }
309 333  
310 334 function initCriteria () {
  335 + global $aBaseCriteria;
  336 + if (isset($aBaseCriteria)) {
  337 + return;
  338 + }
  339 + $aBaseCriteria = array();
  340 + $aIDs = range(-1, -6);
  341 + foreach ($aIDs as $iID) {
  342 + $oCriterion =& Criteria::_getBaseCriterionByNumber($iID);
  343 + $aBaseCriteria[$iID] =& $oCriterion;
  344 + }
  345 + }
  346 +
  347 + function &getBaseCriteria () {
  348 + global $aBaseCriteria;
  349 + Criteria::initCriteria();
  350 + return $aBaseCriteria;
  351 + }
  352 +
  353 + function &getGenericCriteria () {
  354 + global $aGenericCriteria;
  355 + global $default;
  356 + $aQuery = array("SELECT id FROM $default->document_fields_table", array()); /*ok*/
  357 + $aIDs = DBUtil::getResultArrayKey($aQuery, 'id');
  358 + foreach ($aIDs as $iID) {
  359 + $oCriterion =& Criteria::getCriterionByNumber($iID);
  360 + $aGenericCriteria[$iID] =& $oCriterion;
  361 + }
  362 + return $aGenericCriteria;
  363 + }
  364 +
  365 + function &getAllCriteria () {
  366 + global $aAllCriteria;
  367 + global $aBaseCriteria;
  368 + global $default;
  369 + Criteria::initCriteria();
  370 + if (isset($aAllCriteria)) {
  371 + return $aAllCriteria;
  372 + }
  373 + $aQuery = array("SELECT id FROM $default->document_fields_table", array()); /*ok*/
  374 + $aIDs = DBUtil::getResultArrayKey($aQuery, 'id');
  375 + $aAllCriteriaIDs = array_merge(array_keys($aBaseCriteria), $aIDs);
  376 + foreach ($aAllCriteriaIDs as $iID) {
  377 + $oCriterion =& Criteria::getCriterionByNumber($iID);
  378 + $aAllCriteria[$iID] =& $oCriterion;
  379 + }
  380 + return $aAllCriteria;
  381 + }
  382 +
  383 + function &getCriterionByNumber($iID) {
  384 + global $aBaseCriteria;
  385 + global $default;
  386 + Criteria::initCriteria();
  387 + if (array_key_exists($iID, $aBaseCriteria)) {
  388 + return $aBaseCriteria[$iID];
  389 + } else {
  390 + $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($iID)); /*ok*/
  391 + $sName = DBUtil::getOneResultKey($aQuery, 'name');
  392 + return new GenericMetadataCriterion($sName, 'id', 'id', $iID);
  393 + }
311 394 }
312 395 }
313 396  
... ...