diff --git a/lib/browse/Criteria.inc b/lib/browse/Criteria.inc index 821546d..f709133 100644 --- a/lib/browse/Criteria.inc +++ b/lib/browse/Criteria.inc @@ -651,6 +651,48 @@ class GenericMetadataCriterion extends BrowseCriterion { } } +class GeneralMetadataCriterion extends BrowseCriterion { + var $aLookup = array( + "table" => "document_fields_link", + "field" => "value", + "joinColumn" => "document_id", + ); + var $bString = true; + var $sDocumentField = 'value'; + var $sSortField = null; + var $bContains = true; + var $sNamespace = 'ktcore.criteria.generalmetadata'; + var $sSearchTable = "DFL" ; + var $bHandleNot = false; + function GeneralMetadataCriterion() + { + $this->sDisplay = _kt('General Metadata'); + } + + function documentDisplay ($oDocument) { + + return 'General Metadata'; + } + + + function getSearchField () { + return $this->aLookup['field']; + } + + + function searchSQL ($aRequest) { + $val = array('('.$this->getSearchTable() . "." . $this->getSearchField() . " LIKE '%!%' or dm.name LIKE '%!%' )", + array(DBUtil::escapeSimple($aRequest[$this->getWidgetBase()]),DBUtil::escapeSimple($aRequest[$this->getWidgetBase()]))); + + return $val; + } + + function searchJoinSQL () { + global $default; + return "LEFT JOIN $default->document_fields_link_table AS $this->sSearchTable ON $this->sSearchTable.metadata_version_id = D.metadata_version_id"; + } +} + class DateModifiedCriterion extends DateCreatedCriterion { var $sDocumentField = 'modified'; var $sSortField = 'modified'; diff --git a/plugins/generalmetadata/GeneralMetadataDashlet.php b/plugins/generalmetadata/GeneralMetadataDashlet.php new file mode 100644 index 0000000..beff81d --- /dev/null +++ b/plugins/generalmetadata/GeneralMetadataDashlet.php @@ -0,0 +1,78 @@ +sTitle = _kt('General Metadata Search'); + } + + /** + * Check to see if user is active + * + * @param object $oUser + * @return boolean + */ + function is_active($oUser) { + $this->oUser = $oUser; + return true; + } + + /** + * Render function for template + * + * @return unknown + */ + function render() { + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('GeneralMetadata/dashlet'); + + $oRegistry =& KTPluginRegistry::getSingleton(); + $oPlugin =& $oRegistry->getPlugin('ktcore.generalmetadata.plugin'); + $url = $oPlugin->getPagePath('GeneralMetadataPage'); + + $aTemplateData = array( + 'context' => $this, + 'url' => $url, + ); + return $oTemplate->render($aTemplateData); + } +} +?> diff --git a/plugins/generalmetadata/GeneralMetadataPage.php b/plugins/generalmetadata/GeneralMetadataPage.php new file mode 100644 index 0000000..71382e6 --- /dev/null +++ b/plugins/generalmetadata/GeneralMetadataPage.php @@ -0,0 +1,99 @@ +aBreadcrumbs[] = array('url' => 'dashboard.php', 'name' => _kt('Dashboard')); + $this->aBreadcrumbs[] = array('name' => _kt('General Metadata Search')); + + $sTitle = _kt('Search Results'); + $this->oPage->setBreadcrumbDetails($sTitle); + + + $aCriteriaSet = array( + 'join'=>'AND', + 'subgroup'=>array( + 0=>array( + 'join'=>'AND', + 'values'=>array( + 1=>array( + 'data'=>array( + 'ktcore.criteria.generalmetadata'=>$searchable_text, + 'ktcore.criteria.generalmetadata_not'=>0 + ), + 'type'=>'ktcore.criteria.generalmetadata' + ) + ) + ) + ) + ); + + + $this->browseType = "Folder"; + $sSearch = md5(serialize($aCriteriaSet)); + $_SESSION['boolean_search'][$sSearch] = $aCriteriaSet; + + $collection = new AdvancedCollection; + $oColumnRegistry = KTColumnRegistry::getSingleton(); + $aColumns = $oColumnRegistry->getColumnsForView('ktcore.views.search'); + $collection->addColumns($aColumns); + + // set a view option + $aTitleOptions = array( + 'documenturl' => $GLOBALS['KTRootUrl'] . '/view.php', + ); + $collection->setColumnOptions('ktcore.columns.title', $aTitleOptions); + $collection->setColumnOptions('ktcore.columns.selection', array( + 'rangename' => 'selection', + 'show_folders' => true, + 'show_documents' => true, + )); + + $aOptions = $collection->getEnvironOptions(); // extract data from the environment + + $aOptions['return_url'] = KTUtil::addQueryStringSelf("action=performSearch&boolean_search_id=" . urlencode($sSearch)); + $aOptions['empty_message'] = _kt("No documents or folders match this query."); + $aOptions['is_browse'] = true; + + $collection->setOptions($aOptions); + $collection->setQueryObject(new BooleanSearchQuery($aCriteriaSet)); + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate("kt3/browse"); + $aTemplateData = array( + "context" => $this, + "collection" => $collection, + "custom_title" => $sTitle, + "params" => $aParams, + "joins" => $aJoins, + 'isEditable' => true, + "boolean_search" => $sSearch, + 'bulkactions' => KTBulkActionUtil::getAllBulkActions(), + 'browseutil' => new KTBrowseUtil(), + 'returnaction' => 'booleanSearch', + 'returndata' => $sSearch, + + ); + return $oTemplate->render($aTemplateData); + } +} +?> \ No newline at end of file diff --git a/plugins/generalmetadata/GeneralMetadataPlugin.php b/plugins/generalmetadata/GeneralMetadataPlugin.php new file mode 100644 index 0000000..ba1c8ad --- /dev/null +++ b/plugins/generalmetadata/GeneralMetadataPlugin.php @@ -0,0 +1,69 @@ +sFriendlyName = _kt('General Metadata Search Plugin'); + return $res; + } + + /** + * Setup function for plugin + * + */ + function setup() { + // Register plugin components + $this->registerCriterion('GeneralMetadataCriterion', 'ktcore.criteria.generalmetadata', KT_LIB_DIR . '/browse/Criteria.inc'); + $this->registerDashlet('GeneralMetadataDashlet', 'ktcore.generalmetadata.dashlet', 'GeneralMetadataDashlet.php'); + $this->registerPage('GeneralMetadataPage', 'GeneralMetadataPage', __FILE__); + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplating->addLocation('General Metadata Search', '/plugins/generalmetadata/templates'); + } + } +$oPluginRegistry =& KTPluginRegistry::getSingleton(); +$oPluginRegistry->registerPlugin('GeneralMetadataPlugin', 'ktcore.generalmetadata.plugin', __FILE__); \ No newline at end of file diff --git a/plugins/generalmetadata/templates/GeneralMetadata/dashlet.smarty b/plugins/generalmetadata/templates/GeneralMetadata/dashlet.smarty new file mode 100644 index 0000000..6e0614b --- /dev/null +++ b/plugins/generalmetadata/templates/GeneralMetadata/dashlet.smarty @@ -0,0 +1,15 @@ +
+ +
+{if (!empty($saved_searches))} +
+

{i18n}Saved Searches{/i18n}

+{foreach item=oSearch from=$saved_searches} +{i18n}Saved Search{/i18n}: getId()}">{$oSearch->getName()}
+{/foreach} + + +{/if} \ No newline at end of file diff --git a/plugins/ktcore/KTCorePlugin.php b/plugins/ktcore/KTCorePlugin.php index 7d163d6..2e856d1 100644 --- a/plugins/ktcore/KTCorePlugin.php +++ b/plugins/ktcore/KTCorePlugin.php @@ -181,6 +181,8 @@ class KTCorePlugin extends KTPlugin { $this->registerCriterion('TransactionTextCriterion', 'ktcore.criteria.transactiontext', KT_LIB_DIR . '/browse/Criteria.inc'); $this->registerCriterion('DateCreatedDeltaCriterion', 'ktcore.criteria.datecreateddelta', KT_LIB_DIR . '/browse/Criteria.inc'); $this->registerCriterion('DateModifiedDeltaCriterion', 'ktcore.criteria.datemodifieddelta', KT_LIB_DIR . '/browse/Criteria.inc'); + $this->registerCriterion('GeneralMetadataCriterion', 'ktcore.criteria.generalmetadata', KT_LIB_DIR . '/browse/Criteria.inc'); + $this->setupAdmin(); }