Commit 27b3f2a2e8c38a91c66f545dc94258a7c360ad6a

Authored by Neil Blakey-Milner
1 parent 5b143f5c

Build the default criteria list from the browser_criteria table.

Add a columns helper method to make building the table easier.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3080 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing 1 changed file with 81 additions and 11 deletions
lib/browse/Browser.inc
... ... @@ -73,7 +73,7 @@ class BrowseCriterion {
73 73 return array($sFolderQuery, $aParams);
74 74 }
75 75  
76   - $sFolderQuery .= "WHERE parent_id = ? ORDER BY $this->sSortField " . $this->oBrowser->sSortDirection;
  76 + $sFolderQuery .= "WHERE parent_id = ? ORDER BY " . $this->getFolderSortField() . " " . $this->oBrowser->sSortDirection;
77 77 $aParams = array($iParentID);
78 78 return array($sFolderQuery, $aParams);
79 79 }
... ... @@ -104,7 +104,7 @@ class BrowseCriterion {
104 104 } else {
105 105 $sDocumentJoinField = $this->getDocumentField();
106 106 // $sSortField = $this->getSortField();
107   - $documentQuery .= "ORDER BY $this->sSortField " . $this->oBrowser->sSortDirection;
  107 + $documentQuery .= "ORDER BY " . $this->getSortField() . " " . $this->oBrowser->sSortDirection;
108 108 }
109 109  
110 110 return array($documentQuery, $aParams);
... ... @@ -118,9 +118,17 @@ class BrowseCriterion {
118 118 return $this->sSortField;
119 119 }
120 120  
  121 + function getFolderSortField () {
  122 + return $this->sSortField;
  123 + }
  124 +
121 125 function getLookup () {
122 126 return $this->aLookup;
123 127 }
  128 +
  129 + function getName() {
  130 + return $this->sDocumentField;
  131 + }
124 132 }
125 133  
126 134 class NameCriterion extends BrowseCriterion {
... ... @@ -148,15 +156,34 @@ class NameCriterion extends BrowseCriterion {
148 156 function folderDisplay($oFolder) {
149 157 return displayFolderLink($oFolder);
150 158 }
  159 +
  160 + function getFolderSortField() {
  161 + return 'name';
  162 + }
  163 +}
  164 +
  165 +class IDCriterion extends BrowseCriterion {
  166 + var $bFolderCriterion = true;
  167 + function documentDisplay ($oDocument) {
  168 + return $oDocument->getID();
  169 + }
  170 + function folderDisplay($oFolder) {
  171 + return $oFolder->getID();
  172 + }
151 173 }
152 174  
153 175 class TitleCriterion extends BrowseCriterion {
  176 + var $bFolderCriterion = true;
154 177 function documentDisplay ($oDocument) {
155 178 return $oDocument->getName();
156 179 }
157 180 function folderDisplay($oFolder) {
158 181 return $oFolder->getDescription();
159 182 }
  183 +
  184 + function getFolderSortField() {
  185 + return 'description';
  186 + }
160 187 }
161 188  
162 189 class CreatorCriterion extends BrowseCriterion {
... ... @@ -189,6 +216,9 @@ class DateCreatedCriterion extends BrowseCriterion {
189 216 $aDocumentTransaction = DocumentTransaction::getList("transaction_id=1 AND document_id=" . $oDocument->getID());
190 217 return $aDocumentTransaction[0]->dDateTime;
191 218 }
  219 + function getName() {
  220 + return "datecreated";
  221 + }
192 222 }
193 223  
194 224 class DocumentTypeCriterion extends BrowseCriterion {
... ... @@ -235,6 +265,43 @@ class GenericMetadataCriterion extends BrowseCriterion {
235 265 }
236 266 return $res;
237 267 }
  268 +
  269 + function getName() {
  270 + global $default;
  271 + $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($this->iFieldID)); /*ok*/
  272 + return "gmd_" . DBUtil::getOneResultKey($aQuery, 'name');
  273 + }
  274 +}
  275 +
  276 +function &getCriterionByNumber(&$aSortCriteria, &$oBrowser, $iID) {
  277 + global $default;
  278 + switch ($iID) {
  279 + case -1:
  280 + $oCriterion =& new NameCriterion(_("Name"), 'filename', 'filename', $oBrowser);
  281 + break;
  282 + case -2:
  283 + $oCriterion =& new TitleCriterion(_("Title"), 'name', 'name', $oBrowser);
  284 + break;
  285 + case -3:
  286 + $oCriterion =& new CreatorCriterion(_("Creator"), 'creator_id', 'creator_id', $oBrowser);
  287 + break;
  288 + case -4:
  289 + $oCriterion =& new DateCreatedCriterion(_("Date Created"), 'id', 'id', $oBrowser);
  290 + break;
  291 + case -5:
  292 + $oCriterion =& new DocumentTypeCriterion(_("Document Type"), 'document_type_id', 'document_type_id', $oBrowser);
  293 + break;
  294 + case -6:
  295 + $oCriterion =& new IDCriterion(_("ID"), 'id', 'id', $oBrowser);
  296 + break;
  297 + default:
  298 + $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($iID)); /*ok*/
  299 + $sName = DBUtil::getOneResultKey($aQuery, 'name');
  300 + $oCriterion =& new GenericMetadataCriterion($sName, 'id', 'id', $oBrowser, $iID);
  301 + break;
  302 +
  303 + }
  304 + return $oCriterion;
238 305 }
239 306  
240 307 class Browser {
... ... @@ -270,17 +337,16 @@ class Browser {
270 337 function Browser($sNewSortField, $sNewSortDirection, $aNewSortCriteria = array()) {
271 338 // default sort criteria
272 339 if (count($aNewSortCriteria) == 0) {
273   - $aNewSortCriteria = array (
274   - "name" => new NameCriterion(_("Title"), 'name', 'name', $this),
275   - "filename" => new TitleCriterion(_("Description"), 'filename', 'filename', $this),
276   - "creator_id" => new CreatorCriterion(_("Creator"), 'creator_id', 'creator_id', $this),
277   - "id" => new DateCreatedCriterion(_("Date Created"), 'id', 'id', $this),
278   - "document_type_id" => new DocumentTypeCriterion(_("Document Type"), 'document_type_id', 'document_type_id', $this),
279   - "category" => new GenericMetadataCriterion("Category", 'id', 'id', $this, 1),
280   - );
  340 + $aNewSortCriteria = array();
  341 + $aQuery = array("SELECT criteria_id FROM browse_criteria ORDER BY precedence", array()); /*ok*/
  342 + $aSelectedCriteriaIDs = DBUtil::getResultArrayKey($aQuery, 'criteria_id');
  343 + foreach ($aSelectedCriteriaIDs as $iID) {
  344 + $oCriterion =& getCriterionByNumber($aNewSortCriteria, $this, $iID);
  345 + $aNewSortCriteria[$oCriterion->getName()] =& $oCriterion;
  346 + }
281 347 }
282 348  
283   - $this->aSortCriteria = $aNewSortCriteria;
  349 + $this->aSortCriteria =& $aNewSortCriteria;
284 350 $this->sSortField = $sNewSortField;
285 351 $this->sSortDirection = $sNewSortDirection;
286 352 }
... ... @@ -350,6 +416,10 @@ class Browser {
350 416 return $this->aOptions;
351 417 }
352 418  
  419 + function columns() {
  420 + return count($this->aSortCriteria);
  421 + }
  422 +
353 423 /**
354 424 * [Abstract] Browse the documents
355 425 *
... ...