When tagging events, tag them with the event->creator as well as the share owner.
authorMichael J. Rubinsky <mrubinsk@horde.org>
Tue, 9 Mar 2010 16:48:43 +0000 (11:48 -0500)
committerMichael J. Rubinsky <mrubinsk@horde.org>
Tue, 9 Mar 2010 16:48:43 +0000 (11:48 -0500)
Needed since the event owner may not necessarily be the share owner.

kronolith/lib/Ajax/Imple/TagActions.php
kronolith/lib/Driver/Kolab.php
kronolith/lib/Driver/Sql.php

index c42e630..b6bac14 100644 (file)
@@ -51,12 +51,11 @@ class Kronolith_Ajax_Imple_TagActions extends Horde_Ajax_Imple_Base
 
         // Check perms only calendar owners may tag a calendar, only event
         // creator can tag an event.
-        if ($post['type'] == 'calendar') {
-            $cal = $GLOBALS['kronolith_shares']->getShare($post['resource']);
-            $owner = $cal->get('owner');
-        } elseif($post['type'] == 'event') {
+        $cal = $GLOBALS['kronolith_shares']->getShare($post['resource']);
+        $cal_owner = $cal->get('owner');
+        if($post['type'] == 'event') {
             $event = Kronolith::getDriver()->getByUID($post['resource']);
-            $owner = $event->creator;
+            $event_owner = $event->creator;
         }
 
         // $owner is null for system-owned shares, so an admin has perms,
@@ -67,7 +66,10 @@ class Kronolith_Ajax_Imple_TagActions extends Horde_Ajax_Imple_Base
             $tagger = Kronolith::getTagger();
             switch ($request) {
             case 'add':
-                $tagger->tag($post['resource'], $tags, $owner, $post['type']);
+                $tagger->tag($post['resource'], $tags, $cal_owner, $post['type']);
+                if (!empty($event_owner)) {
+                    $tagger->tag($post['resource'], $tags, $event_owner, $post['type']);
+                }
                 break;
             case 'remove':
                 $tagger->untag($post['resource'], (int)$tags, $post['type']);
index 4c84e20..f49902a 100644 (file)
@@ -367,6 +367,9 @@ class Kronolith_Driver_Kolab extends Kronolith_Driver
             $tagger->tag($event->uid, $event->tags, $event->creator, 'event');
         }
 
+        $cal = $GLOBALS['kronolith_shares']->getShare($event->calendar);
+        $tagger->tag($event->uid, $event->tags, $cal->get('owner'), 'event');
+
         /* Notify about the changed event. */
         Kronolith::sendNotification($event, $edit ? 'edit' : 'add');
 
index 643ecba..21c543d 100644 (file)
@@ -572,6 +572,10 @@ class Kronolith_Driver_Sql extends Kronolith_Driver
             $tagger = Kronolith::getTagger();
             $tagger->replaceTags($event->uid, $event->tags, $event->creator, 'event');
 
+            /* Add tags again, but as the share owner (replaceTags removes ALL tags). */
+            $cal = $GLOBALS['kronolith_shares']->getShare($event->calendar);
+            $tagger->tag($event->uid, $event->tags, $cal->get('owner'), 'event');
+
             /* Update Geolocation */
             if ($gDriver = Kronolith::getGeoDriver()) {
                 $gDriver->setLocation($event->id, $event->geoLocation);
@@ -630,6 +634,10 @@ class Kronolith_Driver_Sql extends Kronolith_Driver
         $tagger = Kronolith::getTagger();
         $tagger->tag($event->uid, $event->tags, $event->creator, 'event');
 
+        /* Add tags again, but as the share owner (replaceTags removes ALL tags). */
+        $cal = $GLOBALS['kronolith_shares']->getShare($event->calendar);
+        $tagger->tag($event->uid, $event->tags, $cal->get('owner'), 'event');
+
         /* Update Geolocation */
         if ($event->geoLocation && $gDriver = Kronolith::getGeoDriver()) {
             $gDriver->setLocation($event->id, $event->geoLocation);