]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
make linkedtags sidebar tree menu work with jquery/jstree now
authorChristian Weiske <cweiske@cweiske.de>
Sat, 9 Oct 2010 08:20:14 +0000 (10:20 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Sat, 9 Oct 2010 08:20:14 +0000 (10:20 +0200)
data/templates/sidebar.block.linked.php
www/ajax/getadminlinkedtags.php
www/ajax/getlinkedtags.php

index 9e91f93246c7556ee24b449d7fb99248a6e56ebf..db0d0878d260672e9beb0b4f37d0e1af090caf12 100644 (file)
@@ -1,4 +1,11 @@
 <?php
+/*
+ * Used in:
+ * - populartags.php
+ * - bookmarks.php
+ * - alltags.php
+ * - tags.php
+ */
 /* Service creation: only useful services are created */
 $tag2tagservice =SemanticScuttle_Service_Factory::get('Tag2Tag');
 
@@ -8,98 +15,50 @@ require_once('sidebar.linkedtags.inc.php');
 $user = isset($user)?$user:'';
 $userid = isset($userid)?$userid:0;
 $currenttag = isset($currenttag)?$currenttag:'';
-$summarizeLinkedTags = isset($summarizeLinkedTags)?$summarizeLinkedTags:false;
-
+//$summarizeLinkedTags = isset($summarizeLinkedTags)?$summarizeLinkedTags:false;
 
 $logged_on_userid = $userservice->getCurrentUserId();
-if ($logged_on_userid === false) {
-       $logged_on_userid = NULL;
-}
-
-$explodedTags = array();
-if (strlen($currenttag)>0) {
-       $explodedTags = explode('+', $currenttag);
-} else {
-       if($summarizeLinkedTags == true) {
-               $orphewTags = $tag2tagservice->getOrphewTags('>', $userid, 4, "nb");
-       } else {
-               $orphewTags = $tag2tagservice->getOrphewTags('>', $userid);
-       }
-
-       foreach($orphewTags as $orphewTag) {
-               $explodedTags[] = $orphewTag['tag'];
-       }
-}
-
+$editingMode = $logged_on_userid !== false;
 ?>
-
+<h2><?php echo T_('Linked Tags'); ?></h2>
+<div id="related">
 <?php
-if(($logged_on_userid != null) && ($userid === $logged_on_userid)) {
-       $editingMode = true;
-} else {
-       $editingMode = false;
-}
-
-$this->includeTemplate("dojo.inc");
-?>
-
-<?php if(count($explodedTags)>0 || $editingMode):?>
-
-<h2><?php
-
-
-echo T_('Linked Tags').' ';
-//if($userid != null) {
-$cUser = $userservice->getUser($userid);
-//echo '<small><a href="'.createURL('alltags', $cUser['username']).'">('.T_('all tags').')</a></small>';
-//}
-?></h2>
-<?php //endif?>
-
-<div id="related"> <?php
-if($editingMode) {
+if ($editingMode) {
        echo '<p style="margin-bottom: 13px;text-align:center;">';
        echo ' (<a href="'. createURL('tag2tagadd','') .'" rel="tag">'.T_('Add new link').'</a>) ';
        echo ' (<a href="'. createURL('tag2tagdelete','') .'" rel="tag">'.T_('Delete link').'</a>)';
        echo '</p>';
 }
-
-if(strlen($user)==0) {
-       $cat_url = createURL('tags', '%2$s');
-}
-
-$stopList = array();
-foreach($explodedTags as $explodedTag) {
-       if(!in_array($explodedTag, $stopList)) {
-
-
-
-               // fathers tag
-               $fatherTags = $tag2tagservice->getLinkedTags($explodedTag, '>', $userid, true);
-               if(count($fatherTags)>0) {
-                       foreach($fatherTags as $fatherTag) {
-                               echo '<a href="'. sprintf($cat_url, filter($user, 'url'), filter($fatherTag, 'url')) .'" rel="tag">('. filter($fatherTag) .')</a> ';
-                       }
-               }
-               /*
-                $displayLinkedTags = displayLinkedTags($explodedTag, '>', $userid, $cat_url, $user, $editingMode, null, 1);
-                echo $displayLinkedTags['output'];
-                if(is_array($displayLinkedTags['stopList'])) {
-                $stopList = array_merge($stopList, $displayLinkedTags['stopList']);
-                }*/
-               echo '<div dojoType="dojo.data.ItemFileReadStore" url="'.ROOT.'ajax/getlinkedtags.php?tag='.filter($explodedTag, 'url').'&amp;uId='.$userid.'" jsid="linkedTagStore" ></div>';
-               echo '<div dojoType="dijit.Tree" store="linkedTagStore" labelAttr="name" >';
-               echo '<script type="dojo/method" event="onClick" args="item">';
-               $returnUrl = sprintf($cat_url, filter($user, 'url'), filter('', 'url'));
-               echo 'window.location = "'.$returnUrl.'"+item.name';
-               echo '</script>';
-               echo '<script type="dojo/method" event="getLabelClass" args="item">';
-               echo 'return \'treeTag\';';
-               echo '</script>';
-               echo '</div>';
-       }
-
-}
-?> </div>
-
-<?php endif?>
+?>
+<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-1.4.2.js"></script>
+<script type="text/javascript" src="<?php echo ROOT ?>js/jquery.jstree.js"></script>
+<script type="text/javascript">
+jQuery("#related")
+.jstree({
+    "themes" : {
+        "theme": "default",
+        "dots": false,
+        "icons": true,
+        "url": '<?php echo ROOT ?>js/themes/default/style.css'
+    },
+    "json_data" : {
+        "ajax" : {
+            "url": function(node) {
+                //-1 is root
+                parent = "";
+                if (node == -1 ) {
+                    node = <?php echo json_encode($currenttag); ?>;
+                    parent = "&amp;parent=true";
+                } else if (node.attr('rel')) {
+                    node = node.attr('rel');
+                } else {
+                    return;
+                }
+                return "<?php echo ROOT ?>ajax/getlinkedtags.php?tag=" + node + parent;
+            }
+        }
+    },
+    plugins : [ "themes", "json_data"]
+});
+</script>
+</div>
\ No newline at end of file
index 1004f29267283ede3d551ea11d013a94eb24e7c2..5f939a60c602fc2e8f3173b16ccb1b1a0a5fc8b8 100644 (file)
 $httpContentType = 'application/json';
 require_once '../www-header.php';
 
-function assembleTagData($tag, SemanticScuttle_Service_Tag2Tag $t2t)
+/**
+ * Creates and returns an array of tags for the jsTree ajax loader.
+ * If the tag is empty, the configured menu2 (admin) main tags are used.
+ *
+ * @param string                          $tag Tag name to fetch subtags for
+ * @param SemanticScuttle_Service_Tag2Tag $t2t Tag relation service
+ *
+ * @return array Array of tag data suitable for the jsTree ajax loader
+ */
+function assembleAdminTagData($tag, SemanticScuttle_Service_Tag2Tag $t2t)
 {
     if ($tag == '') {
         $linkedTags = $GLOBALS['menu2Tags'];
@@ -45,7 +54,8 @@ function assembleTagData($tag, SemanticScuttle_Service_Tag2Tag $t2t)
  * Creates an jsTree json array for the given tag
  *
  * @param string  $tag         Tag name
- * @param boolean $hasChildren If the tag has subtags (children) or not
+ * @param boolean $hasChildren If the tag has subtags (children) or not.
+ *                             If unsure, set it to "true".
  *
  * @return array Array to be sent back to the browser as json
  */
@@ -74,7 +84,7 @@ function createTagArray($tag, $hasChildren = true)
 
 
 $tag     = isset($_GET['tag']) ? trim($_GET['tag']) : '';
-$tagData = assembleTagData(
+$tagData = assembleAdminTagData(
     $tag,
     SemanticScuttle_Service_Factory::get('Tag2Tag')
 );
index f412998d9ffcb7116ab040793c2583390bfb27d6..307ee26268cf6ed8f476fd1ff903d6be0d2114ee 100644 (file)
 <?php
-/***************************************************************************
- Copyright (C) 2004 - 2006 Scuttle project
- http://sourceforge.net/projects/scuttle/
- http://scuttle.org/
+/**
+ * Returns a list of tags linked to the given one,
+ * suitable for jsTree consumption.
+ *
+ * Accepted GET parameters:
+ *
+ * @param string  $tag    Tag for which the children tags shall be returned
+ *                        Multiple tags (separated with space or "+") are
+ *                        supported.
+ *                        If no tag is given, all top-level tags are loaded.
+ * @param integer $uId    User ID to fetch the tags for
+ * @param boolean $parent Load parent tags
+ *
+ * SemanticScuttle - your social bookmark manager.
+ *
+ * PHP version 5.
+ *
+ * @category   Bookmarking
+ * @package    SemanticScuttle
+ * @subpackage Templates
+ * @author     Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
+ * @author     Christian Weiske <cweiske@cweiske.de>
+ * @author     Eric Dane <ericdane@users.sourceforge.net>
+ * @license    GPL http://www.gnu.org/licenses/gpl.html
+ * @link       http://sourceforge.net/projects/semanticscuttle
+ */
+$httpContentType = 'application/json';
+#$httpContentType = 'text/plain';
+require_once '../www-header.php';
 
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+$tag            = isset($_GET['tag']) ? $_GET['tag'] : null;
+$uId            = isset($_GET['uId']) ? (int)$_GET['uId'] : 0;
+$loadParentTags = isset($_GET['parent']) ? (bool)$_GET['parent'] : false;
 
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
+$tags = explode(' ', trim($tag));
+if (count($tags) == 1 && $tags[0] == '') {
+    //no tags
+    $tags = array();
+}
 
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- ***************************************************************************/
 
-/* Return a json file with list of linked tags */
-$httpContentType = 'application/json';
-require_once '../www-header.php';
+function assembleLinkedTagData(
+    $tags, $uId, $loadParentTags, SemanticScuttle_Service_Tag2Tag $t2t
+) {
+    $tagData = array();
 
-/* Service creation: only useful services are created */
-$b2tservice =SemanticScuttle_Service_Factory::get('Bookmark2Tag');
-$bookmarkservice =SemanticScuttle_Service_Factory::get('Tag');
-$tagstatservice =SemanticScuttle_Service_Factory::get('TagStat');
+    if (count($tags) == 0) {
+        //no tags given -> show the 4 most used top-level tags
+        $orphewTags     = $t2t->getOrphewTags('>', $uId, 4, 'nb');
+        #$orphewTags = $t2t->getOrphewTags('>', $uId);
+        foreach ($orphewTags as $orphewTag) {
+            $tags[] = $orphewTag['tag'];
+        }
+        $loadParentTags = true;
+    }
 
-/* Managing all possible inputs */
-isset($_GET['tag']) ? define('GET_TAG', $_GET['tag']): define('GET_TAG', '');
-isset($_GET['uId']) ? define('GET_UID', $_GET['uId']): define('GET_UID', '');
+    if ($loadParentTags) {
+        //find parent tags + append the selected tags as children afterwards
+        foreach ($tags as $tag) {
+            $parentTags = $t2t->getLinkedTags($tag, '>', $uId, true);
+            if (count($parentTags) > 0) {
+                foreach ($parentTags as $parentTag) {
+                    $ta = createTagArray(
+                        $parentTag, true, true, true
+                    );
+                    //FIXME: find out if there are subtags
+                    $tac = createTagArray($tag, true);
+                    $ta['children'][] = $tac;
+                    $tagData[] = $ta;
+                }
+            } else {
+                //no parent tags -> display it normally
+                //FIXME: find out if there are subtags
+                $tagData[] = createTagArray($tag, true);
+            }
+        }
+    } else {
+        //just find the linked tags
+        foreach ($tags as $tag) {
+            $linkedTags = $t2t->getLinkedTags($tag, '>', $uId);
+            foreach ($linkedTags as $linkedTag) {
+                //FIXME: find out if there are subtags
+                $tagData[] = createTagArray($linkedTag, true);
+            }
+        }
+    }
 
+    return $tagData;
+}
 
-function displayTag($tag, $uId) {
-       $uId = ($uId==0)?NULL:$uId;  // if user is nobody, NULL allows to look for every public tags
-       
-       $tag2tagservice =SemanticScuttle_Service_Factory::get('Tag2Tag');
-       $output =  '{ id:'.rand().', name:\''.$tag.'\'';
+/**
+ * Creates an jsTree json array for the given tag
+ *
+ * @param string  $tag         Tag name
+ * @param boolean $hasChildren If the tag has subtags (children) or not.
+ *                             If unsure, set it to "true".
+ * @param boolean $isOpen      If the tag has children: Is the tree node open
+ *                             or closed?
+ * @param boolean $autoParent  If the tag is an automatically generated parent tag
+ *
+ * @return array Array to be sent back to the browser as json
+ */
+function createTagArray($tag, $hasChildren = true, $isOpen = false, $autoParent = false)
+{
+    if ($autoParent) {
+        $title = '(' . $tag . ')';
+    } else {
+        $title = $tag;
+    }
 
-       $linkedTags = $tag2tagservice->getLinkedTags($tag, '>', $uId);
-       if(count($linkedTags) > 0) {
-               $output.= ', children: [';
-               foreach($linkedTags as $linkedTag) {
-                       $output.= displayTag($linkedTag, $uId);
-               }
-               $output = substr($output, 0, -1); // remove final comma avoiding IE6 Dojo bug
-               $output.= "]";
-       }
+    $ar = array(
+        'data' => array(
+            //<a> attributes
+            'title' => $title,
+            'attr' => array(
+                'href' => createUrl('tags', $tag)
+            )
+        ),
+        //<li> attributes
+        'attr' => array(
+            'rel'  => $tag,//needed for identifying the tag in html
+        ),
+    );
+    if ($hasChildren) {
+        //jstree needs that to show the arrows
+        $ar['state'] = $isOpen ? 'open' : 'closed';
+    }
+    if ($autoParent) {
+        //FIXME: use css class
+        $ar['data']['attr']['style'] = 'color: #AAA';
+    }
 
-       $output.= '},';
-       return $output;
+    return $ar;
 }
 
-?>
 
-{ label: 'name', identifier: 'id', items: [
-<?php
-$json = displayTag(GET_TAG, intval(GET_UID));
-$json = substr($json, 0, -1); // remove final comma avoiding IE6 Dojo bug
-echo $json;
-?>
-] }
+$tagData = assembleLinkedTagData(
+    $tags, 0/*$uId*/, $loadParentTags,
+    SemanticScuttle_Service_Factory::get('Tag2Tag')
+);
+echo json_encode($tagData);
+?>
\ No newline at end of file