Display the user's top 10 tags on the event edit form. Refreshes
authorMichael J. Rubinsky <mrubinsk@horde.org>
Tue, 24 Mar 2009 22:30:33 +0000 (18:30 -0400)
committerMichael J. Rubinsky <mrubinsk@horde.org>
Tue, 24 Mar 2009 22:38:26 +0000 (18:38 -0400)
each time the edit form is displayed.

kronolith/ajax.php
kronolith/js/src/kronolith.js
kronolith/lib/Tagger.php
kronolith/templates/index/index.inc

index 8053d21..d6b16c0 100644 (file)
@@ -89,7 +89,7 @@ ob_start();
 try {
     $notify = true;
     $result = false;
-    
+
     switch ($action) {
     case 'ListEvents':
         $start = new Horde_Date(Util::getFormData('start'));
@@ -112,7 +112,7 @@ try {
             $result->events = $events;
         }
         break;
-    
+
     case 'GetEvent':
         if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
             $result = true;
@@ -136,7 +136,7 @@ try {
         $result = new stdClass;
         $result->event = $event->toJSON(true, $prefs->getValue('twentyFour') ? 'H:i' : 'h:i A');
         break;
-    
+
     case 'SaveEvent':
         $cal = Util::getFormData('cal');
         if (!($kronolith_driver = getDriver($cal))) {
@@ -175,7 +175,7 @@ try {
             $result->events = $events;
         }
         break;
-    
+
     case 'UpdateEvent':
         if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
             break;
@@ -215,7 +215,7 @@ try {
             $notification->push($result, 'horde.error');
         }
         break;
-    
+
     case 'DeleteEvent':
         if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
             $result = true;
@@ -250,11 +250,11 @@ try {
         $result = new stdClass;
         $result->deleted = true;
         break;
-    
+
     case 'SaveCalPref':
         $result = true;
         break;
-    
+
     case 'ChunkContent':
         $chunk = basename(Util::getPost('chunk'));
         if (!empty($chunk)) {
@@ -262,6 +262,16 @@ try {
             $result->chunk = Util::bufferOutput('include', KRONOLITH_TEMPLATES . '/chunks/' . $chunk . '.php');
         }
         break;
+
+    case 'ListTopTags':
+        $tagger = new Kronolith_Tagger();
+        $result = new stdClass;
+        $result->tags = array();
+        $tags = $tagger->getCloud(Auth::getAuth(), 10);
+        foreach ($tags as $tag) {
+            $result->tags[] = $tag['tag_name'];
+        }
+        break;
     }
 } catch (Exception $e) {
     $notification->push($e->getMessage(), 'horde.error');
index e6ba6f3..10241c1 100644 (file)
@@ -959,8 +959,10 @@ KronolithCore = {
 
         if (id) {
             RedBox.loading();
+            this.doAction('ListTopTags', {}, this._topTags.bind(this));
             this.doAction('GetEvent', { 'cal': calendar, 'id': id }, this._editEvent.bind(this));
         } else {
+               this.doAction('ListTopTags', {}, this._topTags.bind(this));
             var d = new Date();
             $('kronolithEventForm').enable();
             $('kronolithEventForm').reset();
@@ -976,7 +978,19 @@ KronolithCore = {
             this.eventForm = RedBox.getWindowContents();
         }
     },
-
+    
+    _topTags: function(r)
+    {
+       if (!r.response.tags) {
+               return;
+       }
+       $('eventTopTags').update();
+       r.response.tags.each(function(tag) {
+               $('eventTopTags').insert(new Element('span').update(tag));
+       });
+       return;
+    },
+    
     /**
      * Callback method for showing event forms.
      *
index 7c254cb..4a4456e 100644 (file)
@@ -180,7 +180,6 @@ class Kronolith_Tagger
         $this->tag($localId, $add, $content_type);
     }
 
-
     /**
      * @TODO
      * @param array $tags  An array of tag ids.
@@ -190,9 +189,20 @@ class Kronolith_Tagger
         //TODO
     }
 
+    /**
+     * List tags beginning with $token.  Used for autocomplete code.
+     *
+     * @param $token
+     * @return unknown_type
+     */
     public function listTags($token)
     {
         return self::$_tagger->getTags(array('q' => $token));
     }
 
+    public function getCloud($user, $limit = 5)
+    {
+        return self::$_tagger->getTagCloud(array('userId' => $user,
+                                                  'limit' => $limit));
+    }
 }
index 423c56a..b7417c0 100644 (file)
   <textarea name="tags" id="kronolithEventTags" rows="2" class="kronolithLongField"></textarea>
 </div>
 
-<div class="kronolithTags">
-  <span>portugal</span>
-  <span>política</span>
-  <span>religião</span>
-  <span>outra</span>
-  <span>informática</span>
-  <span>lálá</span>
-</div>
+<div id="eventTopTags" class="kronolithTags"></div>
 
 <div id="kronolithEventActions">
   <input id="kronolithEventSave" type="button" value="<?php echo _("Save") ?>" class="button ok" />