From e2adcb3e3c897c7e70aa010345c747dcc74cc52e Mon Sep 17 00:00:00 2001 From: nbm Date: Thu, 23 Dec 2004 14:48:39 +0000 Subject: [PATCH] Untie Criteria from Browser, so it can be used by others easily. --- lib/browse/Browser.inc | 292 ++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ lib/browse/Criteria.inc | 314 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/browse/FolderBrowser.inc | 4 ++-- 3 files changed, 326 insertions(+), 284 deletions(-) create mode 100644 lib/browse/Criteria.inc diff --git a/lib/browse/Browser.inc b/lib/browse/Browser.inc index f76f8ab..b400480 100644 --- a/lib/browse/Browser.inc +++ b/lib/browse/Browser.inc @@ -1,8 +1,4 @@ fileSystemRoot/lib/security/Permission.inc"); -require_once("$default->fileSystemRoot/lib/users/User.inc"); -require_once("$default->fileSystemRoot/lib/documentmanagement/Document.inc"); -require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc"); /** * $Id$ * @@ -29,283 +25,13 @@ require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc"); * @package lib.browse */ -class BrowseCriterion { - var $sDisplay; - var $sDocumentField; - var $sSortField; - var $aLookup = null; - var $oBrowser; - var $bFolderCriterion = false; - - function BrowseCriterion ($sDisplay, $sDocumentField, $sSortField, &$oBrowser) { - $this->sDisplay =& $sDisplay; - $this->sDocumentField =& $sDocumentField; - $this->sSortField =& $sSortField; - $this->oBrowser =& $oBrowser; - } - - function headerDisplay () { - return $this->sDisplay; - } - - // dummy function - function documentDisplay ($oDocument) { - return $this->sDisplay; - } - - function folderDisplay ($oDocument) { - return " "; - } - - function folderQuery ($iParentID) { - global $default; - $sFolderQuery = "SELECT f.id FROM $default->folders_table AS f ";/*ok*/ - if (!$this->bFolderCriterion) { - $sFolderQuery .= "WHERE parent_id = ? ORDER BY f.name asc"; - $aParams = array($iParentID); - return array($sFolderQuery, $aParams); - } - - if (!is_null($this->aLookup)) { - $sFolderQuery .= "INNER JOIN " . $this->aLookup["table"] . " lt ON f.$this->sDocumentField = lt.id WHERE parent_id = ?"; - $sFolderQuery .= " ORDER BY lt." . $this->aLookup["field"] . " " . $this->oBrowser->sSortDirection; - $aParams = array($iParentID); - return array($sFolderQuery, $aParams); - } - - $sFolderQuery .= "WHERE parent_id = ? ORDER BY " . $this->getFolderSortField() . " " . $this->oBrowser->sSortDirection; - $aParams = array($iParentID); - return array($sFolderQuery, $aParams); - } - - function documentQuery ($iFolderID) { - global $default; - // create query to retrieve documents in this folder - $documentQuery = "SELECT d.id as id FROM $default->documents_table AS d ";/*wc*/ - - if (!is_null($this->aLookup)) { - $sDocumentJoinField = $this->getDocumentField(); - $documentQuery .= "INNER JOIN " . $this->aLookup["table"] . " lt ON "; - if (array_key_exists('joinColumn', $this->aLookup)) { - $documentQuery .= "d.$sDocumentJoinField" . " = lt." . $this->aLookup["joinColumn"]; - } else { - $documentQuery .= "d.$sDocumentJoinField" . " = lt.id"; - } - } - - $documentQuery .= " WHERE d.folder_id = ? "; - $aParams = array($iFolderID); - if (!is_null($this->aLookup)) { - if (array_key_exists("whereClause", $this->aLookup)) { - $documentQuery .= "AND lt." . $this->aLookup["whereClause"] . " "; - } - - $documentQuery .= "ORDER BY lt." . $this->aLookup["field"] . " " . $this->oBrowser->sSortDirection; - } else { - $sDocumentJoinField = $this->getDocumentField(); - // $sSortField = $this->getSortField(); - $documentQuery .= "ORDER BY " . $this->getSortField() . " " . $this->oBrowser->sSortDirection; - } - - return array($documentQuery, $aParams); - } - - function getDocumentField () { - return $this->sDocumentField; - } - - function getSortField () { - return $this->sSortField; - } - - function getFolderSortField () { - return $this->sSortField; - } - - function getLookup () { - return $this->aLookup; - } - - function getName() { - return $this->sDocumentField; - } -} - -class NameCriterion extends BrowseCriterion { - var $bFolderCriterion = true; - function documentDisplay ($oDocument) { - $aOptions =& $this->oBrowser->getOptions(); - if (array_key_exists('displayFullPath', $aOptions)) { - $bDisplayFullPath = $aOptions['displayFullPath']; - } else { - $bDisplayFullPath = false; - } - if (array_key_exists('templateBrowsing', $aOptions)) { - $bTemplateBrowsing = $aOptions['templateBrowsing']; - } else { - $bTemplateBrowsing = false; - } - - if ($bTemplateBrowsing) { - return displayDocumentLinkForTemplateBrowsing($oDocument, $bDisplayFullPath); - } else { - return displayDocumentLink($oDocument, $bDisplayFullPath); - } - } - - function folderDisplay($oFolder) { - return displayFolderLink($oFolder); - } - - function getFolderSortField() { - return 'name'; - } -} - -class IDCriterion extends BrowseCriterion { - var $bFolderCriterion = true; - function documentDisplay ($oDocument) { - return $oDocument->getID(); - } - function folderDisplay($oFolder) { - return $oFolder->getID(); - } -} - -class TitleCriterion extends BrowseCriterion { - var $bFolderCriterion = true; - function documentDisplay ($oDocument) { - return $oDocument->getName(); - } - function folderDisplay($oFolder) { - return $oFolder->getDescription(); - } - - function getFolderSortField() { - return 'description'; - } -} - -class CreatorCriterion extends BrowseCriterion { - var $bFolderCriterion = true; - var $aLookup = array( - "table" => "users", - "field" => "name", - ); - function documentDisplay ($oDocument) { - $oCreator = User::get($oDocument->getCreatorID()); - if ($oCreator) { - return $oCreator->getName(); - } - return " "; - } - function folderDisplay($oFolder) { - return $this->documentDisplay($oFolder); - } -} - -class DateCreatedCriterion extends BrowseCriterion { - var $aLookup = array( - "table" => "document_transactions", - "field" => "datetime", - "joinColumn" => "document_id", - "whereClause" => "transaction_id=1", - ); - - function documentDisplay ($oDocument) { - $aDocumentTransaction = DocumentTransaction::getList("transaction_id=1 AND document_id=" . $oDocument->getID()); - return $aDocumentTransaction[0]->dDateTime; - } - function getName() { - return "datecreated"; - } -} - -class DocumentTypeCriterion extends BrowseCriterion { - var $aLookup = array( - "table" => "document_types_lookup", - "field" => "name" - ); - - function documentDisplay ($oDocument) { - $oDocumentType = DocumentType::get($oDocument->getDocumentTypeID()); - if ($oDocumentType) { - return $oDocumentType->getName(); - } - return " "; - } -} - -class GenericMetadataCriterion extends BrowseCriterion { - var $aLookup = array( - "table" => "document_fields_link", - "field" => "value", - "joinColumn" => "document_id", - ); - var $iFieldID; - - function GenericMetadataCriterion ($sDisplay, $sDocumentField, $sSortField, &$oBrowser, $iFieldID) { - $this->iFieldID = $iFieldID; - $this->BrowseCriterion($sDisplay, $sDocumentField, $sSortField, $oBrowser); - $this->aLookup['whereClause'] = 'document_field_id = ' . $iFieldID; - } - - function documentDisplay ($oDocument) { - global $default; - $sQuery = "SELECT DFL.value as value " . - "FROM $default->document_fields_link_table AS DFL " . - "WHERE DFL.document_id = ? " . - "AND DFL.document_field_id = ?"; - $aParams = array($oDocument->getID(), $this->iFieldID); - - $res = DBUtil::getOneResultKey(array($sQuery, $aParams), 'value'); - if (PEAR::isError($res)) { - // WARN: Add log warning - return " "; - } - return $res; - } - - function getName() { - global $default; - $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($this->iFieldID)); /*ok*/ - return "gmd_" . DBUtil::getOneResultKey($aQuery, 'name'); - } -} - -function &getCriterionByNumber(&$aSortCriteria, &$oBrowser, $iID) { - global $default; - switch ($iID) { - case -1: - $oCriterion =& new NameCriterion(_("Name"), 'filename', 'filename', $oBrowser); - break; - case -2: - $oCriterion =& new TitleCriterion(_("Title"), 'name', 'name', $oBrowser); - break; - case -3: - $oCriterion =& new CreatorCriterion(_("Creator"), 'creator_id', 'creator_id', $oBrowser); - break; - case -4: - $oCriterion =& new DateCreatedCriterion(_("Date Created"), 'id', 'id', $oBrowser); - break; - case -5: - $oCriterion =& new DocumentTypeCriterion(_("Document Type"), 'document_type_id', 'document_type_id', $oBrowser); - break; - case -6: - $oCriterion =& new IDCriterion(_("ID"), 'id', 'id', $oBrowser); - break; - default: - $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($iID)); /*ok*/ - $sName = DBUtil::getOneResultKey($aQuery, 'name'); - $oCriterion =& new GenericMetadataCriterion($sName, 'id', 'id', $oBrowser, $iID); - break; +require_once("$default->fileSystemRoot/lib/security/Permission.inc"); +require_once("$default->fileSystemRoot/lib/users/User.inc"); +require_once("$default->fileSystemRoot/lib/documentmanagement/Document.inc"); +require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc"); +require_once("Criteria.inc"); - } - return $oCriterion; -} - class Browser { - /** * The point we're browsing from */ @@ -341,7 +67,7 @@ class Browser { $aQuery = array("SELECT criteria_id FROM browse_criteria ORDER BY precedence", array()); /*ok*/ $aSelectedCriteriaIDs = DBUtil::getResultArrayKey($aQuery, 'criteria_id'); foreach ($aSelectedCriteriaIDs as $iID) { - $oCriterion =& getCriterionByNumber($aNewSortCriteria, $this, $iID); + $oCriterion =& Criteria::getCriterionByNumber($iID); $aNewSortCriteria[$oCriterion->getName()] =& $oCriterion; } } @@ -410,6 +136,9 @@ class Browser { function setOptions($aOptions) { $this->aOptions = array_merge($this->aOptions, $aOptions); + foreach (array_values($this->aSortCriteria) as $oCriteria) { + $oCriteria->setOptions($aOptions); + } } function getOptions() { @@ -427,6 +156,5 @@ class Browser { */ function browse() { } - - } +?> diff --git a/lib/browse/Criteria.inc b/lib/browse/Criteria.inc new file mode 100644 index 0000000..6eab795 --- /dev/null +++ b/lib/browse/Criteria.inc @@ -0,0 +1,314 @@ +fileSystemRoot/lib/security/Permission.inc"); +require_once("$default->fileSystemRoot/lib/users/User.inc"); +require_once("$default->fileSystemRoot/lib/documentmanagement/Document.inc"); +require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc"); +/** + * $Id$ + * + * Contains document browsing business logic. + * + * Copyright (c) 2003 Jam Warehouse http://www.jamwarehouse.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Revision$ + * @author Neil Blakey-Milner , Jam Warehouse (Pty) Ltd, South Africa + * @package lib.browse + */ + +class BrowseCriterion { + var $sDisplay; + var $sDocumentField; + var $sSortField; + var $aLookup = null; + var $bFolderCriterion = false; + var $aOptions = array(); + + function BrowseCriterion ($sDisplay, $sDocumentField, $sSortField) { + $this->sDisplay =& $sDisplay; + $this->sDocumentField =& $sDocumentField; + $this->sSortField =& $sSortField; + } + + function headerDisplay () { + return $this->sDisplay; + } + + // dummy function + function documentDisplay ($oDocument) { + return $this->sDisplay; + } + + function folderDisplay ($oDocument) { + return " "; + } + + function folderQuery ($iParentID, $sSortDirection) { + global $default; + $sFolderQuery = "SELECT f.id FROM $default->folders_table AS f ";/*ok*/ + if (!$this->bFolderCriterion) { + $sFolderQuery .= "WHERE parent_id = ? ORDER BY f.name asc"; + $aParams = array($iParentID); + return array($sFolderQuery, $aParams); + } + + if (!is_null($this->aLookup)) { + $sFolderQuery .= "INNER JOIN " . $this->aLookup["table"] . " lt ON f.$this->sDocumentField = lt.id WHERE parent_id = ?"; + $sFolderQuery .= " ORDER BY lt." . $this->aLookup["field"] . " " . $sSortDirection; + $aParams = array($iParentID); + return array($sFolderQuery, $aParams); + } + + $sFolderQuery .= "WHERE parent_id = ? ORDER BY " . $this->getFolderSortField() . " " . $sSortDirection; + $aParams = array($iParentID); + return array($sFolderQuery, $aParams); + } + + function documentQuery ($iFolderID, $sSortDirection) { + global $default; + // create query to retrieve documents in this folder + $documentQuery = "SELECT d.id as id FROM $default->documents_table AS d ";/*wc*/ + + if (!is_null($this->aLookup)) { + $sDocumentJoinField = $this->getDocumentField(); + $documentQuery .= "INNER JOIN " . $this->aLookup["table"] . " lt ON "; + if (array_key_exists('joinColumn', $this->aLookup)) { + $documentQuery .= "d.$sDocumentJoinField" . " = lt." . $this->aLookup["joinColumn"]; + } else { + $documentQuery .= "d.$sDocumentJoinField" . " = lt.id"; + } + } + + $documentQuery .= " WHERE d.folder_id = ? "; + $aParams = array($iFolderID); + if (!is_null($this->aLookup)) { + if (array_key_exists("whereClause", $this->aLookup)) { + $documentQuery .= "AND lt." . $this->aLookup["whereClause"] . " "; + } + + $documentQuery .= "ORDER BY lt." . $this->aLookup["field"] . " " . $sSortDirection; + } else { + $sDocumentJoinField = $this->getDocumentField(); + // $sSortField = $this->getSortField(); + $documentQuery .= "ORDER BY " . $this->getSortField() . " " . $sSortDirection; + } + + return array($documentQuery, $aParams); + } + + function getDocumentField () { + return $this->sDocumentField; + } + + function getSortField () { + return $this->sSortField; + } + + function getFolderSortField () { + return $this->sSortField; + } + + function getLookup () { + return $this->aLookup; + } + + function getName() { + return $this->sDocumentField; + } + + function setOptions($aOptions) { + $this->aOptions = $aOptions; + } +} + +class NameCriterion extends BrowseCriterion { + var $bFolderCriterion = true; + function documentDisplay ($oDocument) { + $aOptions = $this->aOptions; + if (array_key_exists('displayFullPath', $aOptions)) { + $bDisplayFullPath = $aOptions['displayFullPath']; + } else { + $bDisplayFullPath = false; + } + if (array_key_exists('templateBrowsing', $aOptions)) { + $bTemplateBrowsing = $aOptions['templateBrowsing']; + } else { + $bTemplateBrowsing = false; + } + + if ($bTemplateBrowsing) { + return displayDocumentLinkForTemplateBrowsing($oDocument, $bDisplayFullPath); + } else { + return displayDocumentLink($oDocument, $bDisplayFullPath); + } + } + + function folderDisplay($oFolder) { + return displayFolderLink($oFolder); + } + + function getFolderSortField() { + return 'name'; + } +} + +class IDCriterion extends BrowseCriterion { + var $bFolderCriterion = true; + function documentDisplay ($oDocument) { + return $oDocument->getID(); + } + function folderDisplay($oFolder) { + return $oFolder->getID(); + } +} + +class TitleCriterion extends BrowseCriterion { + var $bFolderCriterion = true; + function documentDisplay ($oDocument) { + return $oDocument->getName(); + } + function folderDisplay($oFolder) { + return $oFolder->getDescription(); + } + + function getFolderSortField() { + return 'description'; + } +} + +class CreatorCriterion extends BrowseCriterion { + var $bFolderCriterion = true; + var $aLookup = array( + "table" => "users", + "field" => "name", + ); + function documentDisplay ($oDocument) { + $oCreator = User::get($oDocument->getCreatorID()); + if ($oCreator) { + return $oCreator->getName(); + } + return " "; + } + function folderDisplay($oFolder) { + return $this->documentDisplay($oFolder); + } +} + +class DateCreatedCriterion extends BrowseCriterion { + var $aLookup = array( + "table" => "document_transactions", + "field" => "datetime", + "joinColumn" => "document_id", + "whereClause" => "transaction_id=1", + ); + + function documentDisplay ($oDocument) { + $aDocumentTransaction = DocumentTransaction::getList("transaction_id=1 AND document_id=" . $oDocument->getID()); + return $aDocumentTransaction[0]->dDateTime; + } + function getName() { + return "datecreated"; + } +} + +class DocumentTypeCriterion extends BrowseCriterion { + var $aLookup = array( + "table" => "document_types_lookup", + "field" => "name" + ); + + function documentDisplay ($oDocument) { + $oDocumentType = DocumentType::get($oDocument->getDocumentTypeID()); + if ($oDocumentType) { + return $oDocumentType->getName(); + } + return " "; + } +} + +class GenericMetadataCriterion extends BrowseCriterion { + var $aLookup = array( + "table" => "document_fields_link", + "field" => "value", + "joinColumn" => "document_id", + ); + var $iFieldID; + + function GenericMetadataCriterion ($sDisplay, $sDocumentField, $sSortField, $iFieldID) { + $this->iFieldID = $iFieldID; + $this->BrowseCriterion($sDisplay, $sDocumentField, $sSortField); + $this->aLookup['whereClause'] = 'document_field_id = ' . $iFieldID; + } + + function documentDisplay ($oDocument) { + global $default; + $sQuery = "SELECT DFL.value as value " . + "FROM $default->document_fields_link_table AS DFL " . + "WHERE DFL.document_id = ? " . + "AND DFL.document_field_id = ?"; + $aParams = array($oDocument->getID(), $this->iFieldID); + + $res = DBUtil::getOneResultKey(array($sQuery, $aParams), 'value'); + if (PEAR::isError($res)) { + // WARN: Add log warning + return " "; + } + return $res; + } + + function getName() { + global $default; + $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($this->iFieldID)); /*ok*/ + return "gmd_" . DBUtil::getOneResultKey($aQuery, 'name'); + } +} + +class Criteria { + function &getCriterionByNumber($iID) { + global $default; + switch ($iID) { + case -1: + $oCriterion =& new NameCriterion(_("Name"), 'filename', 'filename'); + break; + case -2: + $oCriterion =& new TitleCriterion(_("Title"), 'name', 'name'); + break; + case -3: + $oCriterion =& new CreatorCriterion(_("Creator"), 'creator_id', 'creator_id'); + break; + case -4: + $oCriterion =& new DateCreatedCriterion(_("Date Created"), 'id', 'id'); + break; + case -5: + $oCriterion =& new DocumentTypeCriterion(_("Document Type"), 'document_type_id', 'document_type_id'); + break; + case -6: + $oCriterion =& new IDCriterion(_("ID"), 'id', 'id'); + break; + default: + $aQuery = array("SELECT name FROM $default->document_fields_table WHERE id = ?", array($iID)); /*ok*/ + $sName = DBUtil::getOneResultKey($aQuery, 'name'); + $oCriterion =& new GenericMetadataCriterion($sName, 'id', 'id', $iID); + break; + } + return $oCriterion; + } + + function initCriteria () { + } +} + +?> diff --git a/lib/browse/FolderBrowser.inc b/lib/browse/FolderBrowser.inc index 7bd373b..9c72112 100644 --- a/lib/browse/FolderBrowser.inc +++ b/lib/browse/FolderBrowser.inc @@ -117,7 +117,7 @@ class FolderBrowser extends Browser { $oSortCriterion = $this->aSortCriteria[$this->sSortField]; $aLookupCriteria = $oSortCriterion->getLookup(); - $aQuery = $oSortCriterion->folderQuery($iFolderID); + $aQuery = $oSortCriterion->folderQuery($iFolderID, $this->sSortDirection); $oResult = DBUtil::runQuery($aQuery); if (PEAR::isError($oResult)) { @@ -145,7 +145,7 @@ class FolderBrowser extends Browser { $default->log->debug("Going on to document checking"); - $aQuery = $oSortCriterion->documentQuery($iFolderID); + $aQuery = $oSortCriterion->documentQuery($iFolderID, $this->sSortDirection); $oResult = DBUtil::runQuery($aQuery); if (PEAR::isError($oResult)) { var_dump($oResult); -- libgit2 0.21.4