Commit 8035779b31822ae57fa16eea95eddc41d3bfbfaa
1 parent
52936350
KTS-3175
"Add "browse by tag" feature" Fixed. Created a portlet that displays next to the search results and can be used to filter down through the results. Committed by: Megan Watson Reviewed by: Conrad Vermeulen git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@8364 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
7 changed files
with
537 additions
and
153 deletions
plugins/ktcore/KTPortlets.php
| @@ -5,32 +5,32 @@ | @@ -5,32 +5,32 @@ | ||
| 5 | * KnowledgeTree Open Source Edition | 5 | * KnowledgeTree Open Source Edition |
| 6 | * Document Management Made Simple | 6 | * Document Management Made Simple |
| 7 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | 7 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | 8 | + * |
| 9 | * This program is free software; you can redistribute it and/or modify it under | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | * the terms of the GNU General Public License version 3 as published by the | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | * Free Software Foundation. | 11 | * Free Software Foundation. |
| 12 | - * | 12 | + * |
| 13 | * This program is distributed in the hope that it will be useful, but WITHOUT | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | * details. | 16 | * details. |
| 17 | - * | 17 | + * |
| 18 | * You should have received a copy of the GNU General Public License | 18 | * You should have received a copy of the GNU General Public License |
| 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | 20 | + * |
| 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | 23 | + * |
| 24 | * The interactive user interfaces in modified source and object code versions | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | * of this program must display Appropriate Legal Notices, as required under | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | * Section 5 of the GNU General Public License version 3. | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | 27 | + * |
| 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | * these Appropriate Legal Notices must retain the display of the "Powered by | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the |
| 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 33 | - * copyright notice. | 32 | + * must display the words "Powered by KnowledgeTree" and retain the original |
| 33 | + * copyright notice. | ||
| 34 | * Contributor( s): ______________________________________ | 34 | * Contributor( s): ______________________________________ |
| 35 | * | 35 | * |
| 36 | */ | 36 | */ |
| @@ -48,7 +48,7 @@ class KTSearchPortlet extends KTPortlet { | @@ -48,7 +48,7 @@ class KTSearchPortlet extends KTPortlet { | ||
| 48 | 48 | ||
| 49 | $oTemplating =& KTTemplating::getSingleton(); | 49 | $oTemplating =& KTTemplating::getSingleton(); |
| 50 | $oTemplate = $oTemplating->loadTemplate("kt3/portlets/search_portlet"); | 50 | $oTemplate = $oTemplating->loadTemplate("kt3/portlets/search_portlet"); |
| 51 | - | 51 | + |
| 52 | $iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', 1); | 52 | $iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', 1); |
| 53 | $iDocumentId = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); | 53 | $iDocumentId = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); |
| 54 | if (!$iFolderId && !$iDocumentId) { | 54 | if (!$iFolderId && !$iDocumentId) { |
| @@ -59,10 +59,10 @@ class KTSearchPortlet extends KTPortlet { | @@ -59,10 +59,10 @@ class KTSearchPortlet extends KTPortlet { | ||
| 59 | $aSearches = KTSavedSearch::getUserSearches($iUserId); | 59 | $aSearches = KTSavedSearch::getUserSearches($iUserId); |
| 60 | 60 | ||
| 61 | // empty on error. | 61 | // empty on error. |
| 62 | - if (PEAR::isError($aSearches)) { | ||
| 63 | - $aSearches = array(); | 62 | + if (PEAR::isError($aSearches)) { |
| 63 | + $aSearches = array(); | ||
| 64 | } | 64 | } |
| 65 | - | 65 | + |
| 66 | $iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', 1); | 66 | $iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', 1); |
| 67 | $aTemplateData = array( | 67 | $aTemplateData = array( |
| 68 | "context" => $this, | 68 | "context" => $this, |
| @@ -87,16 +87,24 @@ class KTBrowseModePortlet extends KTPortlet { | @@ -87,16 +87,24 @@ class KTBrowseModePortlet extends KTPortlet { | ||
| 87 | parent::KTPortlet($sTitle); | 87 | parent::KTPortlet($sTitle); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | - function render() { | 90 | + function render() { |
| 91 | // this is unfortunate, but such is life. | 91 | // this is unfortunate, but such is life. |
| 92 | $current_action = KTUtil::arrayGet($_REQUEST, 'fBrowseMode', null); | 92 | $current_action = KTUtil::arrayGet($_REQUEST, 'fBrowseMode', null); |
| 93 | $modes = array( | 93 | $modes = array( |
| 94 | - 'folder' => array('name' => _kt('Folder'), 'target' => "main"), | 94 | + 'folder' => array('name' => _kt('Folder'), 'target' => "main"), |
| 95 | 'document_type' => array('name' => _kt('Document Type'), 'target' => 'selectType'), | 95 | 'document_type' => array('name' => _kt('Document Type'), 'target' => 'selectType'), |
| 96 | 'lookup_value' => array('name' => _kt('Lookup Value'), 'target' => 'selectField'), | 96 | 'lookup_value' => array('name' => _kt('Lookup Value'), 'target' => 'selectField'), |
| 97 | - ); | ||
| 98 | - | ||
| 99 | - $oTemplating =& KTTemplating::getSingleton(); | 97 | + ); |
| 98 | + | ||
| 99 | + // Browse by tag | ||
| 100 | + $oRegistry =& KTPluginRegistry::getSingleton(); | ||
| 101 | + $oPlugin =& $oRegistry->getPlugin('ktcore.tagcloud.plugin'); | ||
| 102 | + if(!PEAR::isError($oPlugin) && !empty($oPlugin)){ | ||
| 103 | + $tagUrl = $oPlugin->getPagePath('TagCloudRedirection'); | ||
| 104 | + $modes['tag'] = array('name' => '<a href="'.$tagUrl.'">'._kt('Tag').'</a>'); | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + $oTemplating =& KTTemplating::getSingleton(); | ||
| 100 | $oTemplate = $oTemplating->loadTemplate("kt3/portlets/browsemodes_portlet"); | 108 | $oTemplate = $oTemplating->loadTemplate("kt3/portlets/browsemodes_portlet"); |
| 101 | $aTemplateData = array( | 109 | $aTemplateData = array( |
| 102 | "context" => $this, | 110 | "context" => $this, |
| @@ -104,7 +112,7 @@ class KTBrowseModePortlet extends KTPortlet { | @@ -104,7 +112,7 @@ class KTBrowseModePortlet extends KTPortlet { | ||
| 104 | "modes" => $modes, | 112 | "modes" => $modes, |
| 105 | ); | 113 | ); |
| 106 | 114 | ||
| 107 | - return $oTemplate->render($aTemplateData); | 115 | + return $oTemplate->render($aTemplateData); |
| 108 | } | 116 | } |
| 109 | } | 117 | } |
| 110 | 118 | ||
| @@ -161,21 +169,21 @@ class KTAdminSectionNavigation extends KTPortlet { | @@ -161,21 +169,21 @@ class KTAdminSectionNavigation extends KTPortlet { | ||
| 161 | function KTAdminSectionNavigation() { | 169 | function KTAdminSectionNavigation() { |
| 162 | parent::KTPortlet(_kt("Administration")); | 170 | parent::KTPortlet(_kt("Administration")); |
| 163 | } | 171 | } |
| 164 | - | 172 | + |
| 165 | function render() { | 173 | function render() { |
| 166 | require_once(KT_LIB_DIR . "/plugins/KTAdminNavigation.php"); | 174 | require_once(KT_LIB_DIR . "/plugins/KTAdminNavigation.php"); |
| 167 | - | 175 | + |
| 168 | $oRegistry =& KTAdminNavigationRegistry::getSingleton(); | 176 | $oRegistry =& KTAdminNavigationRegistry::getSingleton(); |
| 169 | - $categories = $oRegistry->getCategories(); | ||
| 170 | - | 177 | + $categories = $oRegistry->getCategories(); |
| 178 | + | ||
| 171 | // we need to investigate sub_url solutions. | 179 | // we need to investigate sub_url solutions. |
| 172 | - | 180 | + |
| 173 | $oTemplating =& KTTemplating::getSingleton(); | 181 | $oTemplating =& KTTemplating::getSingleton(); |
| 174 | $oTemplate = $oTemplating->loadTemplate("kt3/portlets/admin_categories"); | 182 | $oTemplate = $oTemplating->loadTemplate("kt3/portlets/admin_categories"); |
| 175 | $aTemplateData = array( | 183 | $aTemplateData = array( |
| 176 | "context" => $this, | 184 | "context" => $this, |
| 177 | "categories" => $categories, | 185 | "categories" => $categories, |
| 178 | ); | 186 | ); |
| 179 | - return $oTemplate->render($aTemplateData); | 187 | + return $oTemplate->render($aTemplateData); |
| 180 | } | 188 | } |
| 181 | } | 189 | } |
plugins/tagcloud/TagCloudDashlet.php
| @@ -6,32 +6,32 @@ | @@ -6,32 +6,32 @@ | ||
| 6 | * KnowledgeTree Open Source Edition | 6 | * KnowledgeTree Open Source Edition |
| 7 | * Document Management Made Simple | 7 | * Document Management Made Simple |
| 8 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | 8 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited |
| 9 | - * | 9 | + * |
| 10 | * This program is free software; you can redistribute it and/or modify it under | 10 | * This program is free software; you can redistribute it and/or modify it under |
| 11 | * the terms of the GNU General Public License version 3 as published by the | 11 | * the terms of the GNU General Public License version 3 as published by the |
| 12 | * Free Software Foundation. | 12 | * Free Software Foundation. |
| 13 | - * | 13 | + * |
| 14 | * This program is distributed in the hope that it will be useful, but WITHOUT | 14 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 17 | * details. | 17 | * details. |
| 18 | - * | 18 | + * |
| 19 | * You should have received a copy of the GNU General Public License | 19 | * You should have received a copy of the GNU General Public License |
| 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 21 | - * | 21 | + * |
| 22 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | 22 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 23 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | 23 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 24 | - * | 24 | + * |
| 25 | * The interactive user interfaces in modified source and object code versions | 25 | * The interactive user interfaces in modified source and object code versions |
| 26 | * of this program must display Appropriate Legal Notices, as required under | 26 | * of this program must display Appropriate Legal Notices, as required under |
| 27 | * Section 5 of the GNU General Public License version 3. | 27 | * Section 5 of the GNU General Public License version 3. |
| 28 | - * | 28 | + * |
| 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, | 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 30 | * these Appropriate Legal Notices must retain the display of the "Powered by | 30 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the |
| 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 34 | - * copyright notice. | 33 | + * must display the words "Powered by KnowledgeTree" and retain the original |
| 34 | + * copyright notice. | ||
| 35 | * Contributor( s): ______________________________________ | 35 | * Contributor( s): ______________________________________ |
| 36 | * | 36 | * |
| 37 | */ | 37 | */ |
| @@ -44,7 +44,7 @@ require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); | @@ -44,7 +44,7 @@ require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); | ||
| 44 | class TagCloudDashlet extends KTBaseDashlet { | 44 | class TagCloudDashlet extends KTBaseDashlet { |
| 45 | var $oUser; | 45 | var $oUser; |
| 46 | var $sClass = 'ktBlock'; | 46 | var $sClass = 'ktBlock'; |
| 47 | - | 47 | + |
| 48 | /** | 48 | /** |
| 49 | * Constructor method | 49 | * Constructor method |
| 50 | * | 50 | * |
| @@ -53,7 +53,7 @@ class TagCloudDashlet extends KTBaseDashlet { | @@ -53,7 +53,7 @@ class TagCloudDashlet extends KTBaseDashlet { | ||
| 53 | function TagCloudDashlet(){ | 53 | function TagCloudDashlet(){ |
| 54 | $this->sTitle = _kt('Tag Cloud'); | 54 | $this->sTitle = _kt('Tag Cloud'); |
| 55 | } | 55 | } |
| 56 | - | 56 | + |
| 57 | /** | 57 | /** |
| 58 | * Check to see if user is active | 58 | * Check to see if user is active |
| 59 | * | 59 | * |
| @@ -74,9 +74,7 @@ class TagCloudDashlet extends KTBaseDashlet { | @@ -74,9 +74,7 @@ class TagCloudDashlet extends KTBaseDashlet { | ||
| 74 | $oTemplating =& KTTemplating::getSingleton(); | 74 | $oTemplating =& KTTemplating::getSingleton(); |
| 75 | $oTemplate = $oTemplating->loadTemplate('TagCloud/dashlet'); | 75 | $oTemplate = $oTemplating->loadTemplate('TagCloud/dashlet'); |
| 76 | 76 | ||
| 77 | - $aTags = & $this->get_relevant_tags(); | ||
| 78 | - if($aTags) | ||
| 79 | - $aTags = & $this->get_tag_weightings($aTags); | 77 | + $aTags = $this->get_tag_weightings($aTags); |
| 80 | 78 | ||
| 81 | $oRegistry =& KTPluginRegistry::getSingleton(); | 79 | $oRegistry =& KTPluginRegistry::getSingleton(); |
| 82 | $oPlugin =& $oRegistry->getPlugin('ktcore.tagcloud.plugin'); | 80 | $oPlugin =& $oRegistry->getPlugin('ktcore.tagcloud.plugin'); |
| @@ -88,14 +86,14 @@ class TagCloudDashlet extends KTBaseDashlet { | @@ -88,14 +86,14 @@ class TagCloudDashlet extends KTBaseDashlet { | ||
| 88 | ); | 86 | ); |
| 89 | return $oTemplate->render($aTemplateData); | 87 | return $oTemplate->render($aTemplateData); |
| 90 | } | 88 | } |
| 91 | - | 89 | + |
| 92 | /** | 90 | /** |
| 93 | * Builds the weightings for tags based on their frequency | 91 | * Builds the weightings for tags based on their frequency |
| 94 | * | 92 | * |
| 95 | * @param array $aTags | 93 | * @param array $aTags |
| 96 | * @return array | 94 | * @return array |
| 97 | */ | 95 | */ |
| 98 | - function & get_tag_weightings(&$aTags) | 96 | + function get_tag_weightings($aTags) |
| 99 | { | 97 | { |
| 100 | $aTags = $this->get_relevant_tags(); | 98 | $aTags = $this->get_relevant_tags(); |
| 101 | 99 | ||
| @@ -121,23 +119,23 @@ class TagCloudDashlet extends KTBaseDashlet { | @@ -121,23 +119,23 @@ class TagCloudDashlet extends KTBaseDashlet { | ||
| 121 | 119 | ||
| 122 | return $aTags; | 120 | return $aTags; |
| 123 | } | 121 | } |
| 124 | - | 122 | + |
| 125 | /** | 123 | /** |
| 126 | * Returns the relevant tags for the current user | 124 | * Returns the relevant tags for the current user |
| 127 | * | 125 | * |
| 128 | * @return array | 126 | * @return array |
| 129 | */ | 127 | */ |
| 130 | - function & get_relevant_tags() | 128 | + function get_relevant_tags() |
| 131 | { | 129 | { |
| 132 | $aUserPermissions = KTSearchUtil::permissionToSQL($this->oUser, null); | 130 | $aUserPermissions = KTSearchUtil::permissionToSQL($this->oUser, null); |
| 133 | if(PEAR::isError($aUserPermissions)) { | 131 | if(PEAR::isError($aUserPermissions)) { |
| 134 | return false; | 132 | return false; |
| 135 | } | 133 | } |
| 136 | - list($where, $params, $joins) = KTSearchUtil::permissionToSQL($this->oUser, null); | 134 | + list($where, $params, $joins) = $aUserPermissions; |
| 137 | $sql = " | 135 | $sql = " |
| 138 | - SELECT | ||
| 139 | - TW.tag, count(*) as freq | ||
| 140 | - FROM | 136 | + SELECT |
| 137 | + TW.tag, count(*) as freq | ||
| 138 | + FROM | ||
| 141 | document_tags DT INNER JOIN tag_words TW ON DT.tag_id=TW.id | 139 | document_tags DT INNER JOIN tag_words TW ON DT.tag_id=TW.id |
| 142 | WHERE DT.document_id in (SELECT D.id FROM documents D $joins WHERE $where AND D.status_id = '1') GROUP BY TW.tag"; | 140 | WHERE DT.document_id in (SELECT D.id FROM documents D $joins WHERE $where AND D.status_id = '1') GROUP BY TW.tag"; |
| 143 | 141 | ||
| @@ -155,6 +153,6 @@ class TagCloudDashlet extends KTBaseDashlet { | @@ -155,6 +153,6 @@ class TagCloudDashlet extends KTBaseDashlet { | ||
| 155 | return $aTags; | 153 | return $aTags; |
| 156 | 154 | ||
| 157 | } | 155 | } |
| 158 | - | 156 | + |
| 159 | } | 157 | } |
| 160 | ?> | 158 | ?> |
plugins/tagcloud/TagCloudPlugin.php
| @@ -6,36 +6,36 @@ | @@ -6,36 +6,36 @@ | ||
| 6 | * KnowledgeTree Open Source Edition | 6 | * KnowledgeTree Open Source Edition |
| 7 | * Document Management Made Simple | 7 | * Document Management Made Simple |
| 8 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | 8 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited |
| 9 | - * | 9 | + * |
| 10 | * This program is free software; you can redistribute it and/or modify it under | 10 | * This program is free software; you can redistribute it and/or modify it under |
| 11 | * the terms of the GNU General Public License version 3 as published by the | 11 | * the terms of the GNU General Public License version 3 as published by the |
| 12 | * Free Software Foundation. | 12 | * Free Software Foundation. |
| 13 | - * | 13 | + * |
| 14 | * This program is distributed in the hope that it will be useful, but WITHOUT | 14 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 17 | * details. | 17 | * details. |
| 18 | - * | 18 | + * |
| 19 | * You should have received a copy of the GNU General Public License | 19 | * You should have received a copy of the GNU General Public License |
| 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 21 | - * | 21 | + * |
| 22 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | 22 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 23 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | 23 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 24 | - * | 24 | + * |
| 25 | * The interactive user interfaces in modified source and object code versions | 25 | * The interactive user interfaces in modified source and object code versions |
| 26 | * of this program must display Appropriate Legal Notices, as required under | 26 | * of this program must display Appropriate Legal Notices, as required under |
| 27 | * Section 5 of the GNU General Public License version 3. | 27 | * Section 5 of the GNU General Public License version 3. |
| 28 | - * | 28 | + * |
| 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, | 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 30 | * these Appropriate Legal Notices must retain the display of the "Powered by | 30 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the |
| 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 34 | - * copyright notice. | 33 | + * must display the words "Powered by KnowledgeTree" and retain the original |
| 34 | + * copyright notice. | ||
| 35 | * Contributor( s): ______________________________________ | 35 | * Contributor( s): ______________________________________ |
| 36 | * | 36 | * |
| 37 | */ | 37 | */ |
| 38 | - | 38 | + |
| 39 | require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); | 39 | require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); |
| 40 | require_once(KT_LIB_DIR . '/plugins/pluginregistry.inc.php'); | 40 | require_once(KT_LIB_DIR . '/plugins/pluginregistry.inc.php'); |
| 41 | require_once('TagCloudRedirectPage.php'); | 41 | require_once('TagCloudRedirectPage.php'); |
| @@ -48,7 +48,8 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -48,7 +48,8 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 48 | class TagCloudPlugin extends KTPlugin{ | 48 | class TagCloudPlugin extends KTPlugin{ |
| 49 | 49 | ||
| 50 | var $sNamespace = 'ktcore.tagcloud.plugin'; | 50 | var $sNamespace = 'ktcore.tagcloud.plugin'; |
| 51 | - | 51 | + var $iVersion = 1; |
| 52 | + | ||
| 52 | /** | 53 | /** |
| 53 | * Constructor method for plugin | 54 | * Constructor method for plugin |
| 54 | * | 55 | * |
| @@ -60,7 +61,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -60,7 +61,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 60 | $this->sFriendlyName = _kt('Tag Cloud Plugin'); | 61 | $this->sFriendlyName = _kt('Tag Cloud Plugin'); |
| 61 | return $res; | 62 | return $res; |
| 62 | } | 63 | } |
| 63 | - | 64 | + |
| 64 | /** | 65 | /** |
| 65 | * Setup function for plugin | 66 | * Setup function for plugin |
| 66 | * | 67 | * |
| @@ -69,8 +70,9 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -69,8 +70,9 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 69 | // Register plugin components | 70 | // Register plugin components |
| 70 | $this->registerCriterion('TagCloudCriterion', 'ktcore.criteria.tagcloud', KT_LIB_DIR . '/browse/Criteria.inc'); | 71 | $this->registerCriterion('TagCloudCriterion', 'ktcore.criteria.tagcloud', KT_LIB_DIR . '/browse/Criteria.inc'); |
| 71 | $this->registerDashlet('TagCloudDashlet', 'ktcore.tagcloud.feed.dashlet', 'TagCloudDashlet.php'); | 72 | $this->registerDashlet('TagCloudDashlet', 'ktcore.tagcloud.feed.dashlet', 'TagCloudDashlet.php'); |
| 72 | - $this->registerPage('TagCloudRedirection', 'TagCloudRedirectPage', __FILE__); | ||
| 73 | - | 73 | + $this->registerPage('TagCloudRedirection', 'TagCloudRedirectPage', __FILE__); |
| 74 | + $this->registerPortlet(array(), 'TagCloudPortlet', 'tagcloud.portlet', 'TagCloudPortlet.php'); | ||
| 75 | + | ||
| 74 | 76 | ||
| 75 | // Check if the tagcloud fielset entry exists, if not, create it | 77 | // Check if the tagcloud fielset entry exists, if not, create it |
| 76 | if(!TagCloudPlugin::tagFieldsetExists()){ | 78 | if(!TagCloudPlugin::tagFieldsetExists()){ |
| @@ -85,7 +87,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -85,7 +87,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 85 | }else{ // if the entry exists, make the fieldset id viewable anyway | 87 | }else{ // if the entry exists, make the fieldset id viewable anyway |
| 86 | $iFieldsetId = TagCloudPlugin::tagFieldsetExists(); | 88 | $iFieldsetId = TagCloudPlugin::tagFieldsetExists(); |
| 87 | } | 89 | } |
| 88 | - | 90 | + |
| 89 | // Check if the tagcloud document field entry exists, if not, create it | 91 | // Check if the tagcloud document field entry exists, if not, create it |
| 90 | if(!TagCloudPlugin::tagFieldExists()){ | 92 | if(!TagCloudPlugin::tagFieldExists()){ |
| 91 | $oField = TagCloudPlugin::createDocumentField($iFieldsetId); | 93 | $oField = TagCloudPlugin::createDocumentField($iFieldsetId); |
| @@ -93,18 +95,18 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -93,18 +95,18 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 93 | return false; | 95 | return false; |
| 94 | } | 96 | } |
| 95 | } | 97 | } |
| 96 | - | 98 | + |
| 97 | $oTemplating =& KTTemplating::getSingleton(); | 99 | $oTemplating =& KTTemplating::getSingleton(); |
| 98 | $oTemplating->addLocation('Tag Cloud Plugin', '/plugins/tagcloud/templates'); | 100 | $oTemplating->addLocation('Tag Cloud Plugin', '/plugins/tagcloud/templates'); |
| 99 | } | 101 | } |
| 100 | - | 102 | + |
| 101 | /** | 103 | /** |
| 102 | * function to add fieldset entry to fieldsets table | 104 | * function to add fieldset entry to fieldsets table |
| 103 | * | 105 | * |
| 104 | * @return unknown | 106 | * @return unknown |
| 105 | */ | 107 | */ |
| 106 | function createFieldset(){ | 108 | function createFieldset(){ |
| 107 | - // create the fieldsets entry | 109 | + // create the fieldsets entry |
| 108 | $oFieldset = KTFieldset::createFromArray(array( | 110 | $oFieldset = KTFieldset::createFromArray(array( |
| 109 | 'name' => 'Tag Cloud', | 111 | 'name' => 'Tag Cloud', |
| 110 | 'description' => 'Tag Cloud', | 112 | 'description' => 'Tag Cloud', |
| @@ -114,12 +116,12 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -114,12 +116,12 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 114 | 'isGeneric' => true, | 116 | 'isGeneric' => true, |
| 115 | 'isComplete' => false, | 117 | 'isComplete' => false, |
| 116 | 'isComplex' => false, | 118 | 'isComplex' => false, |
| 117 | - 'isSystem' => false, | 119 | + 'isSystem' => false, |
| 118 | )); | 120 | )); |
| 119 | - | 121 | + |
| 120 | return $oFieldset; | 122 | return $oFieldset; |
| 121 | } | 123 | } |
| 122 | - | 124 | + |
| 123 | /** | 125 | /** |
| 124 | * function to add the tagcloud entry to the document_fields table | 126 | * function to add the tagcloud entry to the document_fields table |
| 125 | * | 127 | * |
| @@ -127,7 +129,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -127,7 +129,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 127 | * @return int $id | 129 | * @return int $id |
| 128 | */ | 130 | */ |
| 129 | function createDocumentField($parentId){ | 131 | function createDocumentField($parentId){ |
| 130 | - // create the document_field entry | 132 | + // create the document_field entry |
| 131 | $id = DocumentField::createFromArray(array( | 133 | $id = DocumentField::createFromArray(array( |
| 132 | 'Name' => 'Tag', | 134 | 'Name' => 'Tag', |
| 133 | 'Description' => 'Tag Words', | 135 | 'Description' => 'Tag Words', |
| @@ -136,12 +138,12 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -136,12 +138,12 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 136 | 'HasLookup' => false, | 138 | 'HasLookup' => false, |
| 137 | 'HasLookupTree' => false, | 139 | 'HasLookupTree' => false, |
| 138 | 'ParentFieldset' => $parentId, | 140 | 'ParentFieldset' => $parentId, |
| 139 | - 'IsMandatory' => false, | 141 | + 'IsMandatory' => false, |
| 140 | )); | 142 | )); |
| 141 | 143 | ||
| 142 | return $id; | 144 | return $id; |
| 143 | } | 145 | } |
| 144 | - | 146 | + |
| 145 | /** | 147 | /** |
| 146 | * function to check if the Tag field exists in the document_fields table | 148 | * function to check if the Tag field exists in the document_fields table |
| 147 | * | 149 | * |
| @@ -155,7 +157,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -155,7 +157,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 155 | if (PEAR::isError($sTag)) { | 157 | if (PEAR::isError($sTag)) { |
| 156 | // XXX: log error | 158 | // XXX: log error |
| 157 | return false; | 159 | return false; |
| 158 | - | 160 | + |
| 159 | } | 161 | } |
| 160 | if(!is_null($sTag)){ | 162 | if(!is_null($sTag)){ |
| 161 | return $sTag; | 163 | return $sTag; |
| @@ -163,7 +165,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -163,7 +165,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 163 | return false; | 165 | return false; |
| 164 | } | 166 | } |
| 165 | } | 167 | } |
| 166 | - | 168 | + |
| 167 | /** | 169 | /** |
| 168 | * function to check if the fieldset exists in the database | 170 | * function to check if the fieldset exists in the database |
| 169 | * | 171 | * |
| @@ -177,7 +179,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | @@ -177,7 +179,7 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); | ||
| 177 | if (PEAR::isError($iFieldset)) { | 179 | if (PEAR::isError($iFieldset)) { |
| 178 | // XXX: log error | 180 | // XXX: log error |
| 179 | return false; | 181 | return false; |
| 180 | - | 182 | + |
| 181 | } | 183 | } |
| 182 | if(!is_null($iFieldset)){ | 184 | if(!is_null($iFieldset)){ |
| 183 | return $iFieldset; | 185 | return $iFieldset; |
plugins/tagcloud/TagCloudPortlet.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +/* | ||
| 4 | + * $Id: $ | ||
| 5 | + * | ||
| 6 | + * KnowledgeTree Open Source Edition | ||
| 7 | + * Document Management Made Simple | ||
| 8 | + * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | ||
| 9 | + * | ||
| 10 | + * This program is free software; you can redistribute it and/or modify it under | ||
| 11 | + * the terms of the GNU General Public License version 3 as published by the | ||
| 12 | + * Free Software Foundation. | ||
| 13 | + * | ||
| 14 | + * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 15 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||
| 16 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | ||
| 17 | + * details. | ||
| 18 | + * | ||
| 19 | + * You should have received a copy of the GNU General Public License | ||
| 20 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 21 | + * | ||
| 22 | + * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | ||
| 23 | + * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | ||
| 24 | + * | ||
| 25 | + * The interactive user interfaces in modified source and object code versions | ||
| 26 | + * of this program must display Appropriate Legal Notices, as required under | ||
| 27 | + * Section 5 of the GNU General Public License version 3. | ||
| 28 | + * | ||
| 29 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | ||
| 30 | + * these Appropriate Legal Notices must retain the display of the "Powered by | ||
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | ||
| 32 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | ||
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 34 | + * copyright notice. | ||
| 35 | + * Contributor( s): ______________________________________ | ||
| 36 | + * | ||
| 37 | + */ | ||
| 38 | + | ||
| 39 | +require_once(KT_LIB_DIR . '/widgets/portlet.inc.php'); | ||
| 40 | +require_once('TagCloudUtil.inc.php'); | ||
| 41 | + | ||
| 42 | +class TagCloudPortlet extends KTPortlet { | ||
| 43 | + var $bActive = true; | ||
| 44 | + var $oUser = ''; | ||
| 45 | + var $sTag = ''; | ||
| 46 | + | ||
| 47 | + function TagCloudPortlet($oUser = NULL, $sTag = NULL) { | ||
| 48 | + if(empty($oUser)){ | ||
| 49 | + $iUserId = $_SESSION['userID']; | ||
| 50 | + $oUser = User::get($iUserId); | ||
| 51 | + } | ||
| 52 | + $this->oUser = $oUser; | ||
| 53 | + $this->sTag = $sTag; | ||
| 54 | + $title = _kt('Tag Cloud'); | ||
| 55 | + parent::KTPortlet($title); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + function render() { | ||
| 59 | + $oRegistry =& KTPluginRegistry::getSingleton(); | ||
| 60 | + $oPlugin =& $oRegistry->getPlugin('ktcore.tagcloud.plugin'); | ||
| 61 | + $url = $oPlugin->getPagePath('TagCloudRedirection'); | ||
| 62 | + $url .= '&action=search'; | ||
| 63 | + | ||
| 64 | + $aTags = get_relevant_tags($this->oUser, $this->sTag); | ||
| 65 | + $aTags = get_tag_weightings($aTags); | ||
| 66 | + | ||
| 67 | + $oTemplating =& KTTemplating::getSingleton(); | ||
| 68 | + $oTemplate = $oTemplating->loadTemplate('TagCloud/portlet'); | ||
| 69 | + $aTemplateData = array( | ||
| 70 | + 'tags' => $aTags, | ||
| 71 | + 'url' => $url | ||
| 72 | + ); | ||
| 73 | + return $oTemplate->render($aTemplateData); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +?> | ||
| 0 | \ No newline at end of file | 79 | \ No newline at end of file |
plugins/tagcloud/TagCloudRedirectPage.php
| 1 | <?php | 1 | <?php |
| 2 | /* | 2 | /* |
| 3 | - * $Id$ | ||
| 4 | - * | ||
| 5 | - * KnowledgeTree Open Source Edition | ||
| 6 | - * Document Management Made Simple | ||
| 7 | - * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | ||
| 8 | - * | ||
| 9 | - * This program is free software; you can redistribute it and/or modify it under | ||
| 10 | - * the terms of the GNU General Public License version 3 as published by the | ||
| 11 | - * Free Software Foundation. | ||
| 12 | - * | ||
| 13 | - * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 14 | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||
| 15 | - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | ||
| 16 | - * details. | ||
| 17 | - * | ||
| 18 | - * You should have received a copy of the GNU General Public License | ||
| 19 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 20 | - * | ||
| 21 | - * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | ||
| 22 | - * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | ||
| 23 | - * | ||
| 24 | - * The interactive user interfaces in modified source and object code versions | ||
| 25 | - * of this program must display Appropriate Legal Notices, as required under | ||
| 26 | - * Section 5 of the GNU General Public License version 3. | ||
| 27 | - * | ||
| 28 | - * In accordance with Section 7(b) of the GNU General Public License version 3, | ||
| 29 | - * these Appropriate Legal Notices must retain the display of the "Powered by | ||
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | ||
| 31 | - * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | ||
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 33 | - * copyright notice. | ||
| 34 | - * Contributor( s): ______________________________________ | ||
| 35 | - * | ||
| 36 | - */ | 3 | +* $Id$ |
| 4 | +* | ||
| 5 | +* KnowledgeTree Open Source Edition | ||
| 6 | +* Document Management Made Simple | ||
| 7 | +* Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | ||
| 8 | +* | ||
| 9 | +* This program is free software; you can redistribute it and/or modify it under | ||
| 10 | +* the terms of the GNU General Public License version 3 as published by the | ||
| 11 | +* Free Software Foundation. | ||
| 12 | +* | ||
| 13 | +* This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 14 | +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||
| 15 | +* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | ||
| 16 | +* details. | ||
| 17 | +* | ||
| 18 | +* You should have received a copy of the GNU General Public License | ||
| 19 | +* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 20 | +* | ||
| 21 | +* You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | ||
| 22 | +* Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | ||
| 23 | +* | ||
| 24 | +* The interactive user interfaces in modified source and object code versions | ||
| 25 | +* of this program must display Appropriate Legal Notices, as required under | ||
| 26 | +* Section 5 of the GNU General Public License version 3. | ||
| 27 | +* | ||
| 28 | +* In accordance with Section 7(b) of the GNU General Public License version 3, | ||
| 29 | +* these Appropriate Legal Notices must retain the display of the "Powered by | ||
| 30 | +* KnowledgeTree" logo and retain the original copyright notice. If the display of the | ||
| 31 | +* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | ||
| 32 | +* must display the words "Powered by KnowledgeTree" and retain the original | ||
| 33 | +* copyright notice. | ||
| 34 | +* Contributor( s): ______________________________________ | ||
| 35 | +* | ||
| 36 | +*/ | ||
| 37 | 37 | ||
| 38 | require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); | 38 | require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); |
| 39 | require_once(KT_LIB_DIR . '/plugins/pluginregistry.inc.php'); | 39 | require_once(KT_LIB_DIR . '/plugins/pluginregistry.inc.php'); |
| @@ -52,46 +52,71 @@ require_once(KT_LIB_DIR . '/browse/PartialQuery.inc.php'); | @@ -52,46 +52,71 @@ require_once(KT_LIB_DIR . '/browse/PartialQuery.inc.php'); | ||
| 52 | require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php'); | 52 | require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php'); |
| 53 | require_once(KT_LIB_DIR . '/actions/bulkaction.php'); | 53 | require_once(KT_LIB_DIR . '/actions/bulkaction.php'); |
| 54 | 54 | ||
| 55 | +require_once(KT_DIR . '/plugins/tagcloud/TagCloudPortlet.php'); | ||
| 56 | + | ||
| 55 | class TagCloudRedirectPage extends KTStandardDispatcher { | 57 | class TagCloudRedirectPage extends KTStandardDispatcher { |
| 56 | 58 | ||
| 57 | - /** | 59 | + /** |
| 58 | * Dispatcher main method | 60 | * Dispatcher main method |
| 59 | * | 61 | * |
| 60 | * @return unknown | 62 | * @return unknown |
| 61 | */ | 63 | */ |
| 62 | - function do_main() { | ||
| 63 | - $searchable_text = KTUtil::arrayGet($_REQUEST, 'tag'); | ||
| 64 | - // set breadcrumbs | ||
| 65 | - $this->aBreadcrumbs[] = array('url' => 'dashboard.php', 'name' => _kt('Dashboard')); | ||
| 66 | - $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'].'&tag='.htmlentities($searchable_text,ENT_QUOTES,'UTF-8'), 'name' => _kt('Tag Cloud Search')); | ||
| 67 | - // set page title | ||
| 68 | - $sTitle = _kt('Search Results'); | ||
| 69 | - | ||
| 70 | - $this->oPage->setBreadcrumbDetails($sTitle); | ||
| 71 | - | ||
| 72 | - // build criteria set | ||
| 73 | - $aCriteriaSet = array( | ||
| 74 | - 'join'=>'AND', | ||
| 75 | - 'subgroup'=>array( | ||
| 76 | - 0=>array( | ||
| 77 | - 'join'=>'AND', | ||
| 78 | - 'values'=>array( | ||
| 79 | - 1=>array( | ||
| 80 | - 'data'=>array( | ||
| 81 | - 'ktcore.criteria.tagcloud'=>$searchable_text, | ||
| 82 | - 'ktcore.criteria.tagcloud_not'=>0 | ||
| 83 | - ), | ||
| 84 | - 'type'=>'ktcore.criteria.tagcloud' | ||
| 85 | - ) | ||
| 86 | - ) | ||
| 87 | - ) | ||
| 88 | - ) | ||
| 89 | - ); | ||
| 90 | - | ||
| 91 | - | ||
| 92 | - $this->browseType = 'Folder'; | ||
| 93 | - $sSearch = md5(serialize($aCriteriaSet)); | ||
| 94 | - $_SESSION['boolean_search'][$sSearch] = $aCriteriaSet; | 64 | + function do_main() { |
| 65 | + // Clear the session for a new search | ||
| 66 | + $url = isset($_REQUEST['tag']) ? 'tag='.$_REQUEST['tag'] : ''; | ||
| 67 | + $_SESSION['tagList'] = array(); | ||
| 68 | + $this->redirectTo('search', $url); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + /** | ||
| 72 | + * Recall a previous tag search and remove the tags that were selected after it. | ||
| 73 | + */ | ||
| 74 | + function do_recall() { | ||
| 75 | + $tag = $_REQUEST['tag']; | ||
| 76 | + $pos = $_REQUEST['pos']; | ||
| 77 | + | ||
| 78 | + // Delete all tags after and including the selected tag | ||
| 79 | + $tagList = $_SESSION['tagList']; | ||
| 80 | + $tagList = array_slice($tagList, 0, $pos); | ||
| 81 | + | ||
| 82 | + $_SESSION['tagList'] = $tagList; | ||
| 83 | + | ||
| 84 | + $this->redirectTo('search', 'tag='.$tag); | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + function do_search() { | ||
| 88 | + // Get the tag to search for and create search query | ||
| 89 | + $tag = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : ''; | ||
| 90 | + | ||
| 91 | + $iUserId = $_SESSION['userID']; | ||
| 92 | + $oUser = User::get($iUserId); | ||
| 93 | + | ||
| 94 | + // set breadcrumbs | ||
| 95 | + $this->aBreadcrumbs[] = array('url' => 'dashboard.php', 'name' => _kt('Dashboard')); | ||
| 96 | + $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Tag Cloud Search')); | ||
| 97 | + | ||
| 98 | + $tagList = $_SESSION['tagList']; | ||
| 99 | + if(!empty($tagList)){ | ||
| 100 | + $aPrevTag = end($tagList); | ||
| 101 | + $aTagTree = $aPrevTag['tagTree']; | ||
| 102 | + | ||
| 103 | + $base = KTUtil::addQueryString('TagCloudRedirection&action=recall', null); | ||
| 104 | + foreach($aTagTree as $key => $item){ | ||
| 105 | + $url = $base.'&tag='.$item.'&pos='.$key; | ||
| 106 | + $this->aBreadcrumbs[] = array('url' => $url, 'name' => $item); | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + if(!empty($tag)){ | ||
| 110 | + $this->aBreadcrumbs[] = array('url' => '', 'name' => $tag); | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + // set page title | ||
| 114 | + $sTitle = _kt('Search Results'); | ||
| 115 | + $this->oPage->setBreadcrumbDetails($sTitle); | ||
| 116 | + | ||
| 117 | + // Set tag cloud portlet | ||
| 118 | + $portlet = new TagCloudPortlet($oUser, $tag); | ||
| 119 | + $this->oPage->addPortlet($portlet); | ||
| 95 | 120 | ||
| 96 | $collection = new AdvancedCollection; | 121 | $collection = new AdvancedCollection; |
| 97 | $oColumnRegistry = KTColumnRegistry::getSingleton(); | 122 | $oColumnRegistry = KTColumnRegistry::getSingleton(); |
| @@ -99,25 +124,22 @@ class TagCloudRedirectPage extends KTStandardDispatcher { | @@ -99,25 +124,22 @@ class TagCloudRedirectPage extends KTStandardDispatcher { | ||
| 99 | $collection->addColumns($aColumns); | 124 | $collection->addColumns($aColumns); |
| 100 | 125 | ||
| 101 | // set a view option | 126 | // set a view option |
| 102 | - $aTitleOptions = array( | ||
| 103 | - 'documenturl' => $GLOBALS['KTRootUrl'] . '/view.php', | ||
| 104 | - ); | 127 | + $aTitleOptions = array('documenturl' => $GLOBALS['KTRootUrl'] . '/view.php',); |
| 105 | $collection->setColumnOptions('ktcore.columns.title', $aTitleOptions); | 128 | $collection->setColumnOptions('ktcore.columns.title', $aTitleOptions); |
| 106 | $collection->setColumnOptions('ktcore.columns.selection', array( | 129 | $collection->setColumnOptions('ktcore.columns.selection', array( |
| 107 | 'rangename' => 'selection', | 130 | 'rangename' => 'selection', |
| 108 | 'show_folders' => true, | 131 | 'show_folders' => true, |
| 109 | 'show_documents' => true, | 132 | 'show_documents' => true, |
| 110 | - )); | 133 | + )); |
| 111 | 134 | ||
| 112 | $aOptions = $collection->getEnvironOptions(); // extract data from the environment | 135 | $aOptions = $collection->getEnvironOptions(); // extract data from the environment |
| 113 | 136 | ||
| 114 | - //$aOptions['return_url'] = KTUtil::addQueryString('dashboard.php', false); | ||
| 115 | - $aOptions['return_url'] = KTUtil::addQueryString('TagCloudRedirection&tag='. $searchable_text, false ); | 137 | + $aOptions['return_url'] = KTUtil::addQueryString('TagCloudRedirection&action=search&tag='. $tag, false ); |
| 116 | $aOptions['empty_message'] = _kt('No documents or folders match this query.'); | 138 | $aOptions['empty_message'] = _kt('No documents or folders match this query.'); |
| 117 | $aOptions['is_browse'] = true; | 139 | $aOptions['is_browse'] = true; |
| 118 | 140 | ||
| 119 | $collection->setOptions($aOptions); | 141 | $collection->setOptions($aOptions); |
| 120 | - $collection->setQueryObject(new BooleanSearchQuery($aCriteriaSet)); | 142 | + $collection->setQueryObject(new TagQuery($oUser, $tag)); |
| 121 | 143 | ||
| 122 | $oTemplating =& KTTemplating::getSingleton(); | 144 | $oTemplating =& KTTemplating::getSingleton(); |
| 123 | $oTemplate = $oTemplating->loadTemplate('kt3/browse'); | 145 | $oTemplate = $oTemplating->loadTemplate('kt3/browse'); |
| @@ -131,10 +153,8 @@ class TagCloudRedirectPage extends KTStandardDispatcher { | @@ -131,10 +153,8 @@ class TagCloudRedirectPage extends KTStandardDispatcher { | ||
| 131 | 'browseutil' => new KTBrowseUtil(), | 153 | 'browseutil' => new KTBrowseUtil(), |
| 132 | 'returnaction' => 'booleanSearch', | 154 | 'returnaction' => 'booleanSearch', |
| 133 | 'returndata' => $sSearch, | 155 | 'returndata' => $sSearch, |
| 134 | - | ||
| 135 | ); | 156 | ); |
| 136 | return $oTemplate->render($aTemplateData); | 157 | return $oTemplate->render($aTemplateData); |
| 137 | - | ||
| 138 | - } | 158 | + } |
| 139 | } | 159 | } |
| 140 | ?> | 160 | ?> |
plugins/tagcloud/TagCloudUtil.inc.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +/* | ||
| 4 | + * $Id: $ | ||
| 5 | + * | ||
| 6 | + * KnowledgeTree Open Source Edition | ||
| 7 | + * Document Management Made Simple | ||
| 8 | + * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | ||
| 9 | + * | ||
| 10 | + * This program is free software; you can redistribute it and/or modify it under | ||
| 11 | + * the terms of the GNU General Public License version 3 as published by the | ||
| 12 | + * Free Software Foundation. | ||
| 13 | + * | ||
| 14 | + * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 15 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||
| 16 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | ||
| 17 | + * details. | ||
| 18 | + * | ||
| 19 | + * You should have received a copy of the GNU General Public License | ||
| 20 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 21 | + * | ||
| 22 | + * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | ||
| 23 | + * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | ||
| 24 | + * | ||
| 25 | + * The interactive user interfaces in modified source and object code versions | ||
| 26 | + * of this program must display Appropriate Legal Notices, as required under | ||
| 27 | + * Section 5 of the GNU General Public License version 3. | ||
| 28 | + * | ||
| 29 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | ||
| 30 | + * these Appropriate Legal Notices must retain the display of the "Powered by | ||
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | ||
| 32 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | ||
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 34 | + * copyright notice. | ||
| 35 | + * Contributor( s): ______________________________________ | ||
| 36 | + * | ||
| 37 | + */ | ||
| 38 | + | ||
| 39 | + | ||
| 40 | +/** | ||
| 41 | +* Builds the weightings for tags based on their frequency | ||
| 42 | +* | ||
| 43 | +* @param array $aTags | ||
| 44 | +* @return array | ||
| 45 | +*/ | ||
| 46 | +function get_tag_weightings($aTags) | ||
| 47 | +{ | ||
| 48 | + if (empty($aTags)){ | ||
| 49 | + return array(); | ||
| 50 | + }else{ | ||
| 51 | + $min_freq = min(array_values($aTags)); | ||
| 52 | + $max_freq = max(array_values($aTags)); | ||
| 53 | + } | ||
| 54 | + $min_size = 10; | ||
| 55 | + $max_size = 20; | ||
| 56 | + | ||
| 57 | + $distrib = $max_freq - $min_freq; | ||
| 58 | + if ($distrib == 0){ | ||
| 59 | + $distrib=1; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + $step = ($max_size - $min_size)/($distrib); | ||
| 63 | + | ||
| 64 | + foreach($aTags as $tag => $freq) | ||
| 65 | + { | ||
| 66 | + $size = ceil($min_size + (($freq - $min_freq) * $step)); | ||
| 67 | + $aTags[$tag] = $size; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + return $aTags; | ||
| 71 | +} | ||
| 72 | + | ||
| 73 | +/** | ||
| 74 | +* Returns the relevant tags for the current user | ||
| 75 | +* | ||
| 76 | +* @return array | ||
| 77 | +*/ | ||
| 78 | +function get_relevant_tags($oUser, $sTag) | ||
| 79 | +{ | ||
| 80 | + $aTagList = isset($_SESSION['tagList']) ? $_SESSION['tagList'] : array(); | ||
| 81 | + $tagTree = array(); | ||
| 82 | + $documentList = ''; | ||
| 83 | + | ||
| 84 | + // Get the previous tag info: | ||
| 85 | + // the list of documents that contain the tag to search within | ||
| 86 | + // the tags that have already been filtered so they aren't displayed again | ||
| 87 | + if(!empty($aTagList)){ | ||
| 88 | + $aPrevTag = end($aTagList); | ||
| 89 | + $sPrevTag = $aPrevTag['tag']; | ||
| 90 | + $documentList = $aPrevTag['docs']; | ||
| 91 | + $tagTree = $aPrevTag['tagTree']; | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + if(empty($sTag)){ | ||
| 95 | + // If there is no tag specified then get all tags. | ||
| 96 | + $aUserPermissions = KTSearchUtil::permissionToSQL($oUser, 'ktcore.permissions.read'); | ||
| 97 | + if(PEAR::isError($aUserPermissions)) { | ||
| 98 | + return array(); | ||
| 99 | + } | ||
| 100 | + // ensure the user has read permission on the documents | ||
| 101 | + list($sWhere, $aParams, $sJoins) = $aUserPermissions; | ||
| 102 | + | ||
| 103 | + $sql = "SELECT TW.tag, count(*) as freq | ||
| 104 | + FROM document_tags DT | ||
| 105 | + INNER JOIN tag_words TW ON DT.tag_id=TW.id | ||
| 106 | + WHERE DT.document_id in (SELECT D.id FROM documents D $sJoins WHERE $sWhere AND D.status_id = '1') | ||
| 107 | + GROUP BY TW.tag"; | ||
| 108 | + | ||
| 109 | + $tags = DBUtil::getResultArray(array($sql, $aParams)); | ||
| 110 | + }else{ | ||
| 111 | + // Create a new tag query to get the document id's associated with the tag | ||
| 112 | + $oQuery = new TagQuery($oUser, $sTag); | ||
| 113 | + $aOptions = array(); | ||
| 114 | + $aOptions['select'] = 'DISTINCT DTS.document_id'; | ||
| 115 | + | ||
| 116 | + $aQuery = $oQuery->getQuery($aOptions); | ||
| 117 | + $sInnerQuery = $aQuery[0]; | ||
| 118 | + $aParams = $aQuery[1]; | ||
| 119 | + | ||
| 120 | + $aDocIds = DBUtil::getResultArrayKey($aQuery, 'document_id'); | ||
| 121 | + $sDocs = implode(',', $aDocIds); | ||
| 122 | + | ||
| 123 | + // Don't display tags that have already been selected. | ||
| 124 | + $tagTree[] = $sTag; | ||
| 125 | + $cnt = count($tagTree); | ||
| 126 | + $sIgnoreTags = '?'; | ||
| 127 | + for($i = 1; $i < $cnt; $i++){ | ||
| 128 | + $sIgnoreTags .= ',?'; | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + // Get the tags within the documents that haven't been selected before | ||
| 132 | + $sQuery = "SELECT TW.tag, count(*) as freq | ||
| 133 | + FROM document_tags DT INNER JOIN tag_words TW ON DT.tag_id=TW.id | ||
| 134 | + WHERE DT.document_id in ($sDocs) AND TW.tag NOT IN ($sIgnoreTags) | ||
| 135 | + GROUP BY TW.tag"; | ||
| 136 | + | ||
| 137 | + $tags = DBUtil::getResultArray(array($sQuery, $tagTree), null); | ||
| 138 | + | ||
| 139 | + // Add new tag to the session | ||
| 140 | + if($sPrevTag != $sTag){ | ||
| 141 | + $aTagList[] = array('tag' => $sTag, 'docs' => $sDocs, 'tagTree' => $tagTree); | ||
| 142 | + $_SESSION['tagList'] = $aTagList; | ||
| 143 | + } | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + // Create tag / frequency array | ||
| 147 | + $aTags = array(); | ||
| 148 | + foreach($tags as $tag) | ||
| 149 | + { | ||
| 150 | + $word=$tag['tag']; | ||
| 151 | + $freq=$tag['freq']; | ||
| 152 | + $aTags[$word] = $freq; | ||
| 153 | + } | ||
| 154 | + | ||
| 155 | + return $aTags; | ||
| 156 | + | ||
| 157 | +} | ||
| 158 | + | ||
| 159 | +class TagQuery extends PartialQuery | ||
| 160 | +{ | ||
| 161 | + var $oUser; | ||
| 162 | + var $sTag; | ||
| 163 | + | ||
| 164 | + function TagQuery($oUser, $sTag = '') | ||
| 165 | + { | ||
| 166 | + $this->sTag = $sTag; | ||
| 167 | + $this->oUser = $oUser; | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + function getDocumentCount() | ||
| 171 | + { | ||
| 172 | + $aOptions = array( | ||
| 173 | + 'select' => 'count(DISTINCT DTS.document_id) AS cnt', | ||
| 174 | + ); | ||
| 175 | + $aQuery = $this->getQuery($aOptions); | ||
| 176 | + if (PEAR::isError($aQuery)) { return 0; } | ||
| 177 | + $iRet = DBUtil::getOneResultKey($aQuery, 'cnt'); | ||
| 178 | + return $iRet; | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + function getBaseQuery($aOptions) | ||
| 182 | + { | ||
| 183 | + $aCriteriaSet = array( | ||
| 184 | + 'join'=>'AND', | ||
| 185 | + 'subgroup'=>array( | ||
| 186 | + 0=>array( | ||
| 187 | + 'join'=>'AND', | ||
| 188 | + 'values'=>array( | ||
| 189 | + 1=>array( | ||
| 190 | + 'data'=>array( | ||
| 191 | + 'ktcore.criteria.tagcloud' => $this->sTag, | ||
| 192 | + 'ktcore.criteria.tagcloud_not'=>0 | ||
| 193 | + ), | ||
| 194 | + 'type'=>'ktcore.criteria.tagcloud' | ||
| 195 | + ) | ||
| 196 | + ), | ||
| 197 | + ) | ||
| 198 | + ) | ||
| 199 | + ); | ||
| 200 | + | ||
| 201 | + $aQuery = KTSearchUtil::criteriaToQuery($aCriteriaSet, $this->oUser, 'ktcore.permissions.read', $aOptions); | ||
| 202 | + return $aQuery; | ||
| 203 | + } | ||
| 204 | + | ||
| 205 | + function getQuery($aOptions = null) | ||
| 206 | + { | ||
| 207 | + $aTagList = isset($_SESSION['tagList']) ? $_SESSION['tagList'] : array(); | ||
| 208 | + if(!empty($aTagList)){ | ||
| 209 | + $aPrevTag = end($aTagList); | ||
| 210 | + $documentList = $aPrevTag['docs']; | ||
| 211 | + } | ||
| 212 | + | ||
| 213 | + // If the document list is empty then create internal query with read permissions for the user and the first tag | ||
| 214 | + $aQuery = $this->getBaseQuery($aOptions); | ||
| 215 | + if(empty($documentList)){ | ||
| 216 | + return $aQuery; | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + $sQuery = $aQuery[0]; | ||
| 220 | + | ||
| 221 | + $sQuery .= " AND DTS.document_id IN ($documentList) "; | ||
| 222 | + $aQuery[0] = $sQuery; | ||
| 223 | + | ||
| 224 | + return $aQuery; | ||
| 225 | + } | ||
| 226 | + | ||
| 227 | + function getDocuments($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) | ||
| 228 | + { | ||
| 229 | + $aOptions = array( | ||
| 230 | + 'select' => 'DISTINCT DTS.document_id AS id' | ||
| 231 | + ); | ||
| 232 | + $res = $this->getQuery($aOptions); | ||
| 233 | + if (PEAR::isError($res)) { return array(); } | ||
| 234 | + list($sQuery, $aParams) = $res; | ||
| 235 | + $sQuery .= ' ORDER BY ' . $sSortColumn . ' ' . $sSortOrder . ' '; | ||
| 236 | + $sQuery .= ' LIMIT ?, ?'; | ||
| 237 | + | ||
| 238 | + $aParams[] = $iBatchStart; | ||
| 239 | + $aParams[] = $iBatchSize; | ||
| 240 | + | ||
| 241 | + $q = array($sQuery, $aParams); | ||
| 242 | + $res = DBUtil::getResultArray($q); | ||
| 243 | + | ||
| 244 | + return $res; | ||
| 245 | + } | ||
| 246 | +} | ||
| 247 | + | ||
| 248 | + | ||
| 249 | +?> | ||
| 0 | \ No newline at end of file | 250 | \ No newline at end of file |
plugins/tagcloud/templates/TagCloud/portlet.smarty
0 → 100644
| 1 | +{literal} | ||
| 2 | +<style type="text/css"> | ||
| 3 | +#tagcloud a, a.link, a.visited, a.hover, a.active { | ||
| 4 | + | ||
| 5 | +color: gray; | ||
| 6 | +border-bottom: 0px; | ||
| 7 | +text-decoration: none; | ||
| 8 | + | ||
| 9 | +} | ||
| 10 | +</style> | ||
| 11 | +{/literal} | ||
| 12 | + | ||
| 13 | +{if empty($tags)} | ||
| 14 | +<p> | ||
| 15 | + {i18n}There are no tags defined or accessible.{/i18n} | ||
| 16 | +</p> | ||
| 17 | + | ||
| 18 | +{else} | ||
| 19 | +<div id=tagcloud> | ||
| 20 | +{foreach from=$tags key=tag item=size} | ||
| 21 | + | ||
| 22 | + <a href="{$url}&tag={$tag|urlencode}" style="color: #333; font-size: {$size}px">{$tag|sanitize}</a> | ||
| 23 | + | ||
| 24 | +{/foreach} | ||
| 25 | +</div> | ||
| 26 | +{/if} | ||
| 27 | + | ||
| 28 | +<br> | ||
| 29 | +<br> | ||
| 0 | \ No newline at end of file | 30 | \ No newline at end of file |