diff options
author | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-04-17 08:02:09 +0000 |
---|---|---|
committer | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-04-17 08:02:09 +0000 |
commit | 3e2854611b5d73687a701b24dc58fd56d79be09d (patch) | |
tree | 4fad2b7ffa9e126613519a5e6d08a491d4723284 | |
parent | 39cf52851529c0d91d69307186c6bf5e9f362735 (diff) | |
download | semanticscuttle-3e2854611b5d73687a701b24dc58fd56d79be09d.tar.gz semanticscuttle-3e2854611b5d73687a701b24dc58fd56d79be09d.tar.bz2 |
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
-rw-r--r-- | bookmarks.php | 5 | ||||
-rw-r--r-- | config.inc.php.example | 7 | ||||
-rw-r--r-- | services/tag2tagservice.php | 25 | ||||
-rw-r--r-- | templates/sidebar.block.linked.php | 78 | ||||
-rw-r--r-- | templates/sidebar.block.menu.php | 64 | ||||
-rw-r--r-- | templates/sidebar.linkedtags.inc.php | 82 | ||||
-rw-r--r-- | tests/tag2TagTest.php | 21 |
7 files changed, 200 insertions, 82 deletions
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 = '<small><a href="'.createURL('tag2tagedit', $precedentTag.'/'.$tag).'" title="'._('Edit link').'">></a> </small>'; - } else { - $link = '> '; - } - } - - $output = ''; - $output.= '<tr>'; - $output.= '<td></td>'; - $output.= '<td>'; - $output.= $level == 1?'<b>':''; - $output.= str_repeat(' ', $level*2) .$link.'<a href="'. sprintf($cat_url, filter($user, 'url'), filter($tag, 'url')) .'" rel="tag">'. filter($tag) .'</a>'; - $output.= $level == 1?'</b>':''; - //$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.= '<span title="'.T_('Synonyms:').' '.$synonymList.'">, etc</span>'; - } - - /*if($editingMode) { - $output.= ' ('; - $output.= '<a href="'.createURL('tag2tagadd', $tag).'" title="'._('Add a subtag').'">+</a>'; - if(1) { - $output.= ' - '; - $output.= '<a href="'.createURL('tag2tagdelete', $tag).'">-</a>'; - } - $output.= ')'; - }*/ - $output.= '</td>'; - $output.= '</tr>'; - - $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 '<a href="'.createURL('alltags', $cUser['username']).'">('.T_('plus').')</a>'; + echo '<small><a href="'.createURL('alltags', $cUser['username']).'">('.T_('all tags').')</a></small>'; //} ?> </h2> 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 @@ +<?php +$tag2tagservice =& ServiceFactory::getServiceInstance('Tag2TagService'); +$userservice =& ServiceFactory::getServiceInstance('UserService'); + +require_once('sidebar.linkedtags.inc.php'); + +$logged_on_userid = $userservice->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) { +?> + +<h2> +<?php + echo '<span title="'.sprintf(T_('Tags included into the tag \'%s\''), $GLOBALS['menuTag']).'">'.T_('Menu Tags').'</span> '; + $cUser = $userservice->getUser($userid); + echo '<small span title="'.T_('See all tags').'"><a href="'.createURL('alltags', $cUser['username']).'">('.T_('all tags').')</a></small>'; + //} +?> +</h2> + + +<div id="related"> +<table> +<?php + if($editingMode) { + echo '<tr><td></td><td>'; + echo ' (<a href="'. createURL('tag2tagadd','') .'" rel="tag">'.T_('Add new link').'</a>) '; + echo ' (<a href="'. createURL('tag2tagdelete','') .'" rel="tag">'.T_('Delete link').'</a>)'; + echo '</td></tr>'; + } + + $stopList = array(); + foreach($menuTags as $menuTag) { + $tag = $menuTag['tag']; + if(!in_array($tag, $stopList)) { + $displayLinkedTags = displayLinkedTags($tag, '>', $userid, $cat_url, $user, $editingMode, null, 1); + echo $displayLinkedTags['output']; + if(is_array($displayLinkedTags['stopList'])) { + $stopList = array_merge($stopList, $displayLinkedTags['stopList']); + } + } + } +?> +</table> +</div> + +<?php +} +?> 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 @@ +<?php +/* +To be inserted into blocks where structured tags must be displayed in a tree format. +*/ + +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 = '<small><a href="'.createURL('tag2tagedit', $precedentTag.'/'.$tag).'" title="'._('Edit link').'">></a> </small>'; + } else { + $link = '> '; + } + } + + $output = ''; + $output.= '<tr>'; + $output.= '<td></td>'; + $output.= '<td>'; + $output.= $level == 1?'<b>':''; + $output.= str_repeat(' ', $level*2) .$link.'<a href="'. sprintf($cat_url, filter($user, 'url'), filter($tag, 'url')) .'" rel="tag">'. filter($tag) .'</a>'; + $output.= $level == 1?'</b>':''; + //$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.= '<span title="'.T_('Synonyms:').' '.$synonymList.'">, etc</span>'; + } + + /*if($editingMode) { + $output.= ' ('; + $output.= '<a href="'.createURL('tag2tagadd', $tag).'" title="'._('Add a subtag').'">+</a>'; + if(1) { + $output.= ' - '; + $output.= '<a href="'.createURL('tag2tagdelete', $tag).'">-</a>'; + } + $output.= ')'; + }*/ + $output.= '</td>'; + $output.= '</tr>'; + + $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); + + }*/ } ?> |