diff --git a/bookmarks.php b/bookmarks.php
index ff1d65b..285f29a 100644
--- a/bookmarks.php
+++ b/bookmarks.php
@@ -168,12 +168,11 @@ if ($templatename == 'editbookmark.tpl') {
}
} else if ($user && !isset($_GET['popup'])) {
- $tplVars['sidebar_blocks'] = array('profile', 'watchstatus');
+ $tplVars['sidebar_blocks'] = array('profile', 'watchstatus', 'menu');
if (!$cat) {
$cat = NULL;
- $tplVars['currenttag'] = NULL;
- $tplVars['sidebar_blocks'][] = 'linked'; //test
+ $tplVars['currenttag'] = NULL;
} else {
$rssCat = '/'. filter($cat, 'url');
$tplVars['currenttag'] = $cat;
diff --git a/config.inc.php.example b/config.inc.php.example
index dad6155..76bd93f 100644
--- a/config.inc.php.example
+++ b/config.inc.php.example
@@ -43,7 +43,7 @@ $top_include = 'top.inc.php';
# bottom_include: The footer file.
$bottom_include = 'bottom.inc.php';
# sidebar block index : array ordering blocks search, users, linked, recent
-$index_sidebar_blocks = array('search','users','linked','recent');
+$index_sidebar_blocks = array('search', 'menu', 'recent', 'users');
# shortdate: The format of short dates.
# longdate: The format of long dates.
@@ -137,6 +137,11 @@ $enableCommonBookmarkDescription = true;
$enableWebsiteThumbnails = true;
$sizeSearchHistory = 10;
+# name of the tag whose subtags will appear into the menu box
+$menuTag = 'menu';
+# maximum number of items (tags) appearing into menu box
+$maxSizeMenuBlock = 7;
+
include_once('debug.inc.php');
?>
diff --git a/services/tag2tagservice.php b/services/tag2tagservice.php
index ee26a11..8b2b731 100644
--- a/services/tag2tagservice.php
+++ b/services/tag2tagservice.php
@@ -188,6 +188,31 @@ class Tag2TagService {
return $this->db->sql_fetchrowset($dbresult);
}
+ function getMenuTags($uId) {
+ if(strlen($GLOBALS['menuTag']) < 1) {
+ return array();
+ } else {
+ // we don't use the getAllLinkedTags function in order to improve performance
+ $query = "SELECT tag2 as 'tag', COUNT(tag2) as 'count'";
+ $query.= " FROM `". $this->getTableName() ."`";
+ $query.= " WHERE tag1 = '".$GLOBALS['menuTag']."'";
+ $query.= " AND relationType = '>'";
+ if($uId > 0) {
+ $query.= " AND uId = '".$uId."'";
+ }
+ $query.= " GROUP BY tag2";
+ $query.= " ORDER BY count DESC";
+ $query.= " LIMIT 0, ".$GLOBALS['maxSizeMenuBlock'];
+
+ if (! ($dbresult =& $this->db->sql_query($query)) ){
+ message_die(GENERAL_ERROR, 'Could not get linked tags', '', __LINE__, __FILE__, $query, $this->db);
+ return false;
+ }
+ return $this->db->sql_fetchrowset($dbresult);
+ }
+ }
+
+
function existsLinkedTags($tag1, $tag2, $relationType, $uId) {
$query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`";
$query.= " WHERE tag1 = '" .$tag1 ."'";
diff --git a/templates/sidebar.block.linked.php b/templates/sidebar.block.linked.php
index d415c27..b534db8 100644
--- a/templates/sidebar.block.linked.php
+++ b/templates/sidebar.block.linked.php
@@ -2,81 +2,7 @@
$tag2tagservice =& ServiceFactory::getServiceInstance('Tag2TagService');
$userservice =& ServiceFactory::getServiceInstance('UserService');
-function displayLinkedTags($tag, $linkType, $uId, $cat_url, $user, $editingMode =false, $precedentTag =null, $level=0, $stopList=array()) {
-
- if(in_array($tag, $stopList)) {
- return array('output' => '', 'stoplist' => $stopList);
- }
-
- $tag2tagservice =& ServiceFactory::getServiceInstance('Tag2TagService');
- $tagstatservice =& ServiceFactory::getServiceInstance('TagStatService');
-
- // link '>'
- if($level>1) {
- if($editingMode) {
- $link = '> ';
- } else {
- $link = '> ';
- }
- }
-
- $output = '';
- $output.= '
';
- $output.= ' | ';
- $output.= '';
- $output.= $level == 1?'':'';
- $output.= str_repeat(' ', $level*2) .$link.''. filter($tag) .'';
- $output.= $level == 1?'':'';
- //$output.= ' - '. $tagstatservice->getMaxDepth($tag, $linkType, $uId);
-
- $synonymTags = $tag2tagservice->getAllLinkedTags($tag, '=', $uId);
- $synonymTags = is_array($synonymTags)?$synonymTags:array($synonymTags);
- sort($synonymTags);
- $synonymList = '';
- foreach($synonymTags as $synonymTag) {
- //$output.= ", ".$synonymTag;
- $synonymList.= $synonymTag.' ';
- }
- if(count($synonymTags)>0) {
- $output.= ', '.$synonymTags[0];
- }
- if(count($synonymTags)>1) {
- $output.= ', etc';
- }
-
- /*if($editingMode) {
- $output.= ' (';
- $output.= '+';
- if(1) {
- $output.= ' - ';
- $output.= '-';
- }
- $output.= ')';
- }*/
- $output.= ' | ';
- $output.= '
';
-
- $tags = array($tag);
- $tags = array_merge($tags, $synonymTags);
- foreach($tags as $tag) {
-
- if(!in_array($tag, $stopList)) {
- $linkedTags = $tag2tagservice->getLinkedTags($tag, '>', $uId);
- $precedentTag = $tag;
- $stopList[] = $tag;
- foreach($linkedTags as $linkedTag) {
- $displayLinkedTags = displayLinkedTags($linkedTag, $linkType, $uId, $cat_url, $user, $editingMode, $precedentTag, $level + 1, $stopList);
- $output.= $displayLinkedTags['output'];
- }
- if(is_array($displayLinkedTags['stopList'])) {
- $stopList = array_merge($stopList, $displayLinkedTags['stopList']);
- $stopList = array_unique($stopList);
- }
- }
-
- }
- return array('output' => $output, 'stopList' => $stopList);
-}
+require_once('sidebar.linkedtags.inc.php');
$logged_on_userid = $userservice->getCurrentUserId();
if ($logged_on_userid === false) {
@@ -115,7 +41,7 @@ if(($logged_on_userid != null) && ($userid === $logged_on_userid)) {
echo T_('Linked Tags').' ';
//if($userid != null) {
$cUser = $userservice->getUser($userid);
- echo '('.T_('plus').')';
+ echo '('.T_('all tags').')';
//}
?>
diff --git a/templates/sidebar.block.menu.php b/templates/sidebar.block.menu.php
new file mode 100644
index 0000000..20db5e0
--- /dev/null
+++ b/templates/sidebar.block.menu.php
@@ -0,0 +1,64 @@
+getCurrentUserId();
+if ($logged_on_userid === false) {
+ $logged_on_userid = NULL;
+}
+
+// editing mode
+if(($logged_on_userid != null) && ($userid === $logged_on_userid)) {
+ $editingMode = true;
+} else {
+ $editingMode = false;
+}
+
+if(strlen($user)==0) {
+ $cat_url = createURL('tags', '%2$s');
+}
+
+$menuTags = $tag2tagservice->getMenuTags($userid);
+if (sizeof($menuTags) > 0) {
+?>
+
+
+'.T_('Menu Tags').' ';
+ $cUser = $userservice->getUser($userid);
+ echo '('.T_('all tags').')';
+ //}
+?>
+
+
+
+
+
+
diff --git a/templates/sidebar.linkedtags.inc.php b/templates/sidebar.linkedtags.inc.php
new file mode 100644
index 0000000..95b420a
--- /dev/null
+++ b/templates/sidebar.linkedtags.inc.php
@@ -0,0 +1,82 @@
+ '', 'stoplist' => $stopList);
+ }
+
+ $tag2tagservice =& ServiceFactory::getServiceInstance('Tag2TagService');
+ $tagstatservice =& ServiceFactory::getServiceInstance('TagStatService');
+
+ // link '>'
+ if($level>1) {
+ if($editingMode) {
+ $link = '> ';
+ } else {
+ $link = '> ';
+ }
+ }
+
+ $output = '';
+ $output.= '';
+ $output.= ' | ';
+ $output.= '';
+ $output.= $level == 1?'':'';
+ $output.= str_repeat(' ', $level*2) .$link.''. filter($tag) .'';
+ $output.= $level == 1?'':'';
+ //$output.= ' - '. $tagstatservice->getMaxDepth($tag, $linkType, $uId);
+
+ $synonymTags = $tag2tagservice->getAllLinkedTags($tag, '=', $uId);
+ $synonymTags = is_array($synonymTags)?$synonymTags:array($synonymTags);
+ sort($synonymTags);
+ $synonymList = '';
+ foreach($synonymTags as $synonymTag) {
+ //$output.= ", ".$synonymTag;
+ $synonymList.= $synonymTag.' ';
+ }
+ if(count($synonymTags)>0) {
+ $output.= ', '.$synonymTags[0];
+ }
+ if(count($synonymTags)>1) {
+ $output.= ', etc';
+ }
+
+ /*if($editingMode) {
+ $output.= ' (';
+ $output.= '+';
+ if(1) {
+ $output.= ' - ';
+ $output.= '-';
+ }
+ $output.= ')';
+ }*/
+ $output.= ' | ';
+ $output.= '
';
+
+ $tags = array($tag);
+ $tags = array_merge($tags, $synonymTags);
+ foreach($tags as $tag) {
+
+ if(!in_array($tag, $stopList)) {
+ $linkedTags = $tag2tagservice->getLinkedTags($tag, '>', $uId);
+ $precedentTag = $tag;
+ $stopList[] = $tag;
+ foreach($linkedTags as $linkedTag) {
+ $displayLinkedTags = displayLinkedTags($linkedTag, $linkType, $uId, $cat_url, $user, $editingMode, $precedentTag, $level + 1, $stopList);
+ $output.= $displayLinkedTags['output'];
+ }
+ if(is_array($displayLinkedTags['stopList'])) {
+ $stopList = array_merge($stopList, $displayLinkedTags['stopList']);
+ $stopList = array_unique($stopList);
+ }
+ }
+
+ }
+ return array('output' => $output, 'stopList' => $stopList);
+}
+
+?>
diff --git a/tests/tag2TagTest.php b/tests/tag2TagTest.php
index c356be8..70925bd 100644
--- a/tests/tag2TagTest.php
+++ b/tests/tag2TagTest.php
@@ -457,10 +457,27 @@ class Tag2TagTest extends PHPUnit_Framework_TestCase
$linkedTags = $tts->getLinkedTags('b', '>', 2);
$this->assertSame(array('a'), $linkedTags);
-
-
//with stats
}
+
+ // Cannot be test because the function use GLOBALS variables
+ // not taken into account by tests
+ /*public function testMenuTags()
+ {
+ $tts = $this->tts;
+ $bs = $this->bs;
+
+ $bs->addBookmark("http://site1.com", "title", "description", "status", array('menu>tag1'), null, false, false, 1);
+ $bs->addBookmark("http://site1.com", "title2", "description2", "status", array('menu>tag2>tag3'), null, false, false, 1);
+ $bs->addBookmark("http://site1.com", "title3", "description3", "status", array('menu>tag1', 'menu>tag4'), null, false, false, 2);
+
+ $menuTags = $tts->getMenuTags($uId);
+ $this->assertEquals(3, sizeof($menuTags));
+ $this->assertContains('tag1', $menuTags);
+ $this->assertContains('tag2', $menuTags);
+ $this->assertContains('tag4', $menuTags);
+
+ }*/
}
?>