]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
New feature: menu box which displays tags included into the special tag menu [Config...
authormensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f>
Thu, 17 Apr 2008 08:02:09 +0000 (08:02 +0000)
committermensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f>
Thu, 17 Apr 2008 08:02:09 +0000 (08:02 +0000)
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@105 b3834d28-1941-0410-a4f8-b48e95affb8f

bookmarks.php
config.inc.php.example
services/tag2tagservice.php
templates/sidebar.block.linked.php
templates/sidebar.block.menu.php [new file with mode: 0644]
templates/sidebar.linkedtags.inc.php [new file with mode: 0644]
tests/tag2TagTest.php

index ff1d65b8b9d30355d9f88a7fce6b231447ce9f70..285f29afae386ec5d1e9da1983b49c980ce48075 100644 (file)
@@ -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;
index dad6155a4d85b68c7917ce058966313cadf0c8b7..76bd93f89ecdea23d7b051db703d5c45f832f701 100644 (file)
@@ -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');
 ?>
index ee26a114cdcaebac4bbd14c915d3461e138b9e03..8b2b731dd633b2827c5de1c3cda26d61178a281e 100644 (file)
@@ -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 ."'";
index d415c27531e0a6347b309f225500a59a3e387bb8..b534db84f44412fd6ec74a0114f6dddcd6694650 100644 (file)
@@ -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 (file)
index 0000000..20db5e0
--- /dev/null
@@ -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 (file)
index 0000000..95b420a
--- /dev/null
@@ -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);
+}
+
+?>
index c356be803452a8b7a3219320caf80503aa97ec34..70925bd07734d320f26f0c4efba4cc97e89535b8 100644 (file)
@@ -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);
+
+    }*/
 }
 ?>