diff --git a/lib/browse/PartialQuery.inc.php b/lib/browse/PartialQuery.inc.php index 91d71f1..89dbe2e 100644 --- a/lib/browse/PartialQuery.inc.php +++ b/lib/browse/PartialQuery.inc.php @@ -253,6 +253,30 @@ class SimpleSearchQuery extends PartialQuery { } } +class TypeBrowseQuery extends SimpleSearchQuery { + var $iDocType; + + function TypeBrowseQuery($oDocType) { + $this->iDocType = $oDocType->getId(); + } + + function getQuery($aOptions = null) { + $aSubgroup = array( + 'values' => array( + array('type' => '-5', 'data' => array('bmd_5' => $this->iDocType)), + array('sql' => array('D.status_id = 1')), + ), + 'join' => 'AND', + ); + $aCriteriaSet = array( + 'subgroup' => array($aSubgroup), + 'join' => 'AND', + ); + $oUser = User::get($_SESSION['userID']); + return KTSearchUtil::criteriaToQuery($aCriteriaSet, $oUser, 'ktcore.permissions.read', $aOptions); + } +} + class BooleanSearchQuery extends PartialQuery { // FIXME cache permission lookups, etc. var $datavars; diff --git a/plugins/ktcore/KTPortlets.php b/plugins/ktcore/KTPortlets.php index fe930ab..443ce51 100644 --- a/plugins/ktcore/KTPortlets.php +++ b/plugins/ktcore/KTPortlets.php @@ -23,3 +23,37 @@ class KTSearchPortlet extends KTPortlet { $oPRegistry->registerPortlet(array('browse', 'dashboard'), 'KTSearchPortlet', 'ktcore.portlets.search', '/plugins/ktcore/KTPortlets.php'); + +class KTBrowseModePortlet extends KTPortlet { + + function KTBrowseModePortlet($sTitle = null) { + // match empty, false. + if ($sTitle == null) { + $sTitle = _('Browse Documents By'); + } + parent::KTPortlet($sTitle); + } + + function render() { + // this is unfortunate, but such is life. + $current_action = KTUtil::arrayGet($_REQUEST, 'fBrowseMode', 'folder'); + $modes = array( + 'folder' => array('name' => _('Folder')), + + 'document_type' => array('name' => _('Document Type'), 'target' => 'selectType'), + ); + + $oTemplating = new KTTemplating; + $oTemplate = $oTemplating->loadTemplate("kt3/portlets/browsemodes_portlet"); + $aTemplateData = array( + "context" => $this, + "current_action" => $current_action, + "modes" => $modes, + ); + + return $oTemplate->render($aTemplateData); + } +} +$oPRegistry->registerPortlet(array('browse'), 'KTBrowseModePortlet', 'ktcore.portlets.browsemodes', '/plugins/ktcore/KTPortlets.php'); + + diff --git a/presentation/lookAndFeel/knowledgeTree/browse.php b/presentation/lookAndFeel/knowledgeTree/browse.php index e75ce1c..18b814e 100644 --- a/presentation/lookAndFeel/knowledgeTree/browse.php +++ b/presentation/lookAndFeel/knowledgeTree/browse.php @@ -35,6 +35,7 @@ require_once(KT_LIB_DIR . "/browse/PartialQuery.inc.php"); require_once(KT_LIB_DIR . "/browse/browseutil.inc.php"); require_once(KT_LIB_DIR . "/foldermanagement/Folder.inc"); +require_once(KT_LIB_DIR . "/documentmanagement/DocumentType.inc"); require_once(KT_LIB_DIR . "/widgets/portlet.inc.php"); require_once(KT_LIB_DIR . '/actions/folderaction.inc.php'); @@ -46,8 +47,10 @@ $sectionName = "browse"; class BrowseDispatcher extends KTStandardDispatcher { - var $sSection = "browse"; - var $browseType; + var $sSection = "browse"; + var $browse_mode = null; + var $query = null; + var $resultURL; function BrowseDispatcher() { $this->aBreadcrumbs = array( @@ -55,81 +58,148 @@ class BrowseDispatcher extends KTStandardDispatcher { ); return parent::KTStandardDispatcher(); } - + function check() { - // which folder. - $in_folder_id = KTUtil::arrayGet($_REQUEST, "fFolderId", 1); - $folder_id = (int) $in_folder_id; // conveniently, will be 0 if not possible. - if ($folder_id == 0) { - $folder_id = 1; - } + $this->browse_mode = KTUtil::arrayGet($_REQUEST, 'fBrowseMode', "folder"); + $action = KTUtil::arrayGet($_REQUEST, $this->event_var, 'main'); + + // catch the alternative actions. + if ($action != 'main') { + return true; + } + + // if we're going to main ... + if ($this->browse_mode == 'folder') { + // which folder. + $in_folder_id = KTUtil::arrayGet($_REQUEST, "fFolderId", 1); + $folder_id = (int) $in_folder_id; // conveniently, will be 0 if not possible. + if ($folder_id == 0) { + $folder_id = 1; + } - // here we need the folder object to do the breadcrumbs. - $this->oFolder =& Folder::get($folder_id); - if (PEAR::isError($this->oFolder)) { - $this->oPage->addError(_("invalid folder")); - $folder_id = 1; - $this->oFolder =& Folder::get($folder_id); + // here we need the folder object to do the breadcrumbs. + $oFolder =& Folder::get($folder_id); + if (PEAR::isError($oFolder)) { + $this->oPage->addError(_("invalid folder")); + $folder_id = 1; + $oFolder =& Folder::get($folder_id); + } + + // we now have a folder, and need to create the query. + $this->oQuery = new BrowseQuery($oFolder->getId()); + + $this->aBreadcrumbs = array_merge($this->aBreadcrumbs, + KTBrowseUtil::breadcrumbsForFolder($oFolder)); + + $portlet = new KTActionPortlet(_("Folder Actions")); + $aActions = KTFolderActionUtil::getFolderActionsForFolder($oFolder, $this->oUser); + $portlet->setActions($aActions,null); + $this->oPage->addPortlet($portlet); + $this->resultURL = "?fFolderId=" . $oFolder->getId(); + + } else if ($this->browse_mode == 'category') { + return false; + } else if ($this->browse_mode == 'document_type') { + // FIXME implement document_type browsing. + $doctype = KTUtil::arrayGet($_REQUEST, 'fType',null); + $oDocType = DocumentType::get($doctype); + if (PEAR::isError($oDocType) || ($oDocType == false)) { + $this->errorRedirectToMain('No Document Type selected.'); + exit(0); + } + + $this->oQuery = new TypeBrowseQuery($oDocType); + + // FIXME probably want to redirect to self + action=selectType + $this->aBreadcrumbs[] = array('name' => _('Document Types')); + + $this->resultURL = "?fType=" . $doctype . "&fBrowseMode=document_type"; + + + + } else { + // FIXME what should we do if we can't initiate the browse? we "pretend" to have no perms. + return false; } + return true; } function do_main() { - $collection = new DocumentCollection; - $this->browseType = "Folder"; - - $collection->addColumn(new SelectionColumn("Browse Selection","selection")); - $collection->addColumn(new TitleColumn("Test 1 (title)","title")); - $collection->addColumn(new DateColumn(_("Created"),"created", "getCreatedDateTime")); - $collection->addColumn(new DateColumn(_("Last Modified"),"modified", "getLastModifiedDate")); - $collection->addColumn(new UserColumn(_('Creator'),'creator_id','getCreatorID')); - - $this->aBreadcrumbs = array_merge($this->aBreadcrumbs, - KTBrowseUtil::breadcrumbsForFolder($this->oFolder)); - // setup the folderside add actions - // FIXME do we want to use folder actions? - $portlet = new KTActionPortlet(_("Folder Actions")); - - - // FIXME make a FolderActionUtil ... is it necessary? - - $aActions = KTFolderActionUtil::getFolderActionsForFolder($this->oFolder, $this->oUser); - - $portlet->setActions($aActions,null); - - $this->oPage->addPortlet($portlet); - - $batchPage = (int) KTUtil::arrayGet($_REQUEST, "page", 0); - $batchSize = 20; - - $resultURL = "?fFolderId=" . $this->oFolder->getId(); - $collection->setBatching($resultURL, $batchPage, $batchSize); - - - // ordering. (direction and column) - $displayOrder = KTUtil::arrayGet($_REQUEST, 'sort_order', "asc"); - if ($displayOrder !== "asc") { $displayOrder = "desc"; } - $displayControl = KTUtil::arrayGet($_REQUEST, 'sort_on', "title"); - - - $collection->setSorting($displayControl, $displayOrder); - - // add in the query object. - $qObj = new BrowseQuery($this->oFolder->getId()); - $collection->setQueryObject($qObj); - - // breadcrumbs - // FIXME handle breadcrumbs - $collection->getResults(); - - $oTemplating = new KTTemplating; - $oTemplate = $oTemplating->loadTemplate("kt3/browse"); - $aTemplateData = array( + $collection = new DocumentCollection; + + + $collection->addColumn(new SelectionColumn("Browse Selection","selection")); + $collection->addColumn(new TitleColumn("Test 1 (title)","title")); + $collection->addColumn(new DateColumn(_("Created"),"created", "getCreatedDateTime")); + $collection->addColumn(new DateColumn(_("Last Modified"),"modified", "getLastModifiedDate")); + $collection->addColumn(new UserColumn(_('Creator'),'creator_id','getCreatorID')); + + + // setup the folderside add actions + // FIXME do we want to use folder actions? + + $batchPage = (int) KTUtil::arrayGet($_REQUEST, "page", 0); + $batchSize = 20; + + + $collection->setBatching($resultURL, $batchPage, $batchSize); + + + // ordering. (direction and column) + $displayOrder = KTUtil::arrayGet($_REQUEST, 'sort_order', "asc"); + if ($displayOrder !== "asc") { $displayOrder = "desc"; } + $displayControl = KTUtil::arrayGet($_REQUEST, 'sort_on', "title"); + + + $collection->setSorting($displayControl, $displayOrder); + + // add in the query object. + $qObj = $this->oQuery; + $collection->setQueryObject($qObj); + + // breadcrumbs + // FIXME handle breadcrumbs + $collection->getResults(); + + $oTemplating = new KTTemplating; + $oTemplate = $oTemplating->loadTemplate("kt3/browse"); + $aTemplateData = array( + "context" => $this, + "collection" => $collection, + 'browse_mode' => $this->browse_mode, + ); + return $oTemplate->render($aTemplateData); + } + + function do_selectCategory() { + $this->errorRedirectToMain('category browsing is not yet implemented.'); + + $oTemplating = new KTTemplating; + $oTemplate = $oTemplating->loadTemplate("kt3/browse_category"); + $aTemplateData = array( "context" => $this, - "collection" => $collection, - ); - return $oTemplate->render($aTemplateData); - } + ); + return $oTemplate->render($aTemplateData); + } + + function do_selectType() { + $aTypes = DocumentType::getList(); + // FIXME what is the error message? + + if (empty($aTypes)) { + $this->errorRedirectToMain('No document types available.'); + exit(0); + } + + $oTemplating = new KTTemplating; + $oTemplate = $oTemplating->loadTemplate("kt3/browse_types"); + $aTemplateData = array( + "context" => $this, + "document_types" => $aTypes, + ); + return $oTemplate->render($aTemplateData); + } } $oDispatcher = new BrowseDispatcher(); diff --git a/templates/kt3/browse.smarty b/templates/kt3/browse.smarty index 2b64c97..9900bd9 100644 --- a/templates/kt3/browse.smarty +++ b/templates/kt3/browse.smarty @@ -1 +1 @@ -{$collection->render()} \ No newline at end of file +{$collection->render()} diff --git a/templates/kt3/browse_types.smarty b/templates/kt3/browse_types.smarty new file mode 100644 index 0000000..ec8423d --- /dev/null +++ b/templates/kt3/browse_types.smarty @@ -0,0 +1,11 @@ +
{i18n}In some circumstances it is useful to view all +the different documents of a given document type. Select a type +to view all documents of that type.{/i18n}
+ +