From 3e2854611b5d73687a701b24dc58fd56d79be09d Mon Sep 17 00:00:00 2001 From: mensonge Date: Thu, 17 Apr 2008 08:02:09 +0000 Subject: [PATCH] New feature: menu box which displays tags included into the special tag menu [Config modified] git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@105 b3834d28-1941-0410-a4f8-b48e95affb8f --- bookmarks.php | 5 +- config.inc.php.example | 7 ++- services/tag2tagservice.php | 25 +++++++++ templates/sidebar.block.linked.php | 78 +------------------------- templates/sidebar.block.menu.php | 64 ++++++++++++++++++++++ templates/sidebar.linkedtags.inc.php | 82 ++++++++++++++++++++++++++++ tests/tag2TagTest.php | 21 ++++++- 7 files changed, 200 insertions(+), 82 deletions(-) create mode 100644 templates/sidebar.block.menu.php create mode 100644 templates/sidebar.linkedtags.inc.php 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.''; - $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.''; + $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); + + }*/ } ?>