summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorGravatar mensonge2008-04-17 08:02:09 +0000
committerGravatar mensonge2008-04-17 08:02:09 +0000
commit3e2854611b5d73687a701b24dc58fd56d79be09d (patch)
tree4fad2b7ffa9e126613519a5e6d08a491d4723284
parent39cf52851529c0d91d69307186c6bf5e9f362735 (diff)
downloadscuttle-3e2854611b5d73687a701b24dc58fd56d79be09d.tar.gz
scuttle-3e2854611b5d73687a701b24dc58fd56d79be09d.zip
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.php5
-rw-r--r--config.inc.php.example7
-rw-r--r--services/tag2tagservice.php25
-rw-r--r--templates/sidebar.block.linked.php78
-rw-r--r--templates/sidebar.block.menu.php64
-rw-r--r--templates/sidebar.linkedtags.inc.php82
-rw-r--r--tests/tag2TagTest.php21
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('&nbsp;', $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('&nbsp;', $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);
+
+ }*/
}
?>