Needed since the event owner may not necessarily be the share owner.
// 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,
$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']);
$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');
$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);
$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);