Commit 8035779b31822ae57fa16eea95eddc41d3bfbfaa

Authored by Megan Watson
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
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 . &#39;/plugins/plugin.inc.php&#39;); @@ -44,7 +44,7 @@ require_once(KT_LIB_DIR . &#39;/plugins/plugin.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -48,7 +48,8 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -60,7 +61,7 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -69,8 +70,9 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -85,7 +87,7 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -93,18 +95,18 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -114,12 +116,12 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -127,7 +129,7 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -136,12 +138,12 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -155,7 +157,7 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -163,7 +165,7 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/templating/templating.inc.php&#39;); @@ -177,7 +179,7 @@ require_once(KT_LIB_DIR . &#39;/templating/templating.inc.php&#39;);
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 . &#39;/browse/PartialQuery.inc.php&#39;); @@ -52,46 +52,71 @@ require_once(KT_LIB_DIR . &#39;/browse/PartialQuery.inc.php&#39;);
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>&nbsp;
  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