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
This commit is contained in:
parent
39cf528515
commit
3e2854611b
7 changed files with 200 additions and 82 deletions
|
@ -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
|
||||
} else {
|
||||
$rssCat = '/'. filter($cat, 'url');
|
||||
$tplVars['currenttag'] = $cat;
|
||||
|
|
|
@ -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');
|
||||
?>
|
||||
|
|
|
@ -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 ."'";
|
||||
|
|
|
@ -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>
|
||||
|
|
64
templates/sidebar.block.menu.php
Normal file
64
templates/sidebar.block.menu.php
Normal file
|
@ -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
|
||||
}
|
||||
?>
|
82
templates/sidebar.linkedtags.inc.php
Normal file
82
templates/sidebar.linkedtags.inc.php
Normal file
|
@ -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);
|
||||
}
|
||||
|
||||
?>
|
|
@ -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);
|
||||
|
||||
}*/
|
||||
}
|
||||
?>
|
||||
|
|
Loading…
Reference in a new issue