plugins/calendar

Thomas Brüderli bruederli at kolabsys.com
Sat Dec 15 17:25:17 CET 2012


 plugins/calendar/calendar.php                           |   22 +++++++++++-----
 plugins/calendar/calendar_ui.js                         |   17 +++++++++++-
 plugins/calendar/skins/classic/templates/eventedit.html |   10 ++-----
 plugins/calendar/skins/larry/calendar.css               |    4 +-
 plugins/calendar/skins/larry/templates/eventedit.html   |   10 ++-----
 5 files changed, 40 insertions(+), 23 deletions(-)

New commits:
commit 8e5a92044e5db99520e35b8905adcb8f78f58c5e
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Sat Dec 15 17:24:53 2012 +0100

    Make identity/organizer selection for events work

diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index eafb015..350903d 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -277,6 +277,7 @@ class calendar extends rcube_plugin
 
     $this->rc->output->set_env('calendar_driver', $this->rc->config->get('calendar_driver'), false);
     $this->rc->output->set_env('mscolors', $this->driver->get_color_values());
+    $this->rc->output->set_env('identities-selector', $this->ui->identity_select(array('id' => 'edit-identities-list')));
 
     $view = get_input_value('view', RCUBE_INPUT_GPC);
     if (in_array($view, array('agendaWeek', 'agendaDay', 'month', 'table')))
@@ -1058,6 +1059,7 @@ class calendar extends rcube_plugin
         if (!$identity)
           $identity = $rec;
         $identity['emails'][] = $rec['email'];
+        $settings['identities'][$rec['identity_id']] = $rec['email'];
       }
       $identity['emails'][] = $this->rc->user->get_username();
       $settings['identity'] = array('name' => $identity['name'], 'email' => $identity['email'], 'emails' => ';' . join(';', $identity['emails']));
@@ -1278,24 +1280,32 @@ class calendar extends rcube_plugin
     $event['attachments'] = $attachments;
 
     // check for organizer in attendees
-    if ($event['attendees'] && ($action == 'new' || $action == 'edit')) {
+    if (!$event['attendees'])
+      $event['attendees'] = array();
+    if ($action == 'new' || $action == 'edit') {
       $emails = $this->get_user_emails();
       $organizer = $owner = false;
-      foreach ($event['attendees'] as $i => $attendee) {
+      foreach ((array)$event['attendees'] as $i => $attendee) {
         if ($attendee['role'] == 'ORGANIZER')
-          $organizer = true;
+          $organizer = $i;
         if ($attendee['email'] == in_array($attendee['email'], $emails))
           $owner = $i;
         else if (!isset($attendee['rsvp']))
           $event['attendees'][$i]['rsvp'] = true;
       }
-      
+
+      // set new organizer identity
+      if ($organizer !== false && !empty($event['_identity']) && ($identity = $this->rc->user->get_identity($event['_identity']))) {
+        $event['attendees'][$organizer]['name'] = $identity['name'];
+        $event['attendees'][$organizer]['email'] = $identity['email'];
+      }
+
       // set owner as organizer if yet missing
-      if (!$organizer && $owner !== false) {
+      if ($organizer === false && $owner !== false) {
         $event['attendees'][$owner]['role'] = 'ORGANIZER';
         unset($event['attendees'][$owner]['rsvp']);
       }
-      else if (!$organizer && $action == 'new' && ($identity = $this->rc->user->get_identity()) && $identity['email']) {
+      else if ($organizer === false && $action == 'new' && ($identity = $this->rc->user->get_identity($event['_identity'])) && $identity['email']) {
         array_unshift($event['attendees'], array('role' => 'ORGANIZER', 'name' => $identity['name'], 'email' => $identity['email'], 'status' => 'ACCEPTED'));
       }
     }
diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 57a5947..a93f050 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -159,7 +159,7 @@ function rcube_calendar_ui(settings)
     {
       for (var i=0; event.attendees && i < event.attendees.length; i++) {
         if ((!role || event.attendees[i].role == role) && event.attendees[i].email && settings.identity.emails.indexOf(';'+event.attendees[i].email) >= 0)
-          return true;
+          return event.attendees[i];
       }
       return false;
     };
@@ -521,6 +521,15 @@ function rcube_calendar_ui(settings)
             add_attendee(event.attendees[j], !organizer);
         }
 
+        // select the correct organizer identity
+        var identity_id = 0;
+        $.each(settings.identities, function(i,v){
+          if (organizer && v == organizer.email) {
+            identity_id = i;
+            return false;
+          }
+        });
+        $('#edit-identities-list').val(identity_id);
         $('#edit-attendees-form')[(organizer?'show':'hide')]();
         $('#edit-attendee-schedule')[(calendar.freebusy?'show':'hide')]();
       };
@@ -599,6 +608,9 @@ function rcube_calendar_ui(settings)
             data.attendees[i].role = $(elem).val();
         });
         
+        if (organizer)
+          data._identity = $('#edit-identities-list option:selected').val();
+        
         // don't submit attendees if only myself is added as organizer
         if (data.attendees.length == 1 && data.attendees[0].role == 'ORGANIZER' && data.attendees[0].email == settings.identity.email)
           data.attendees = [];
@@ -1371,6 +1383,9 @@ function rcube_calendar_ui(settings)
       opts['OPT-PARTICIPANT'] = rcmail.gettext('calendar.roleoptional');
       opts['CHAIR'] =  rcmail.gettext('calendar.roleresource');
       
+      if (organizer && !readonly)
+          dispname = rcmail.env['identities-selector'];
+      
       var select = '<select class="edit-attendee-role"' + (organizer || readonly ? ' disabled="true"' : '') + '>';
       for (var r in opts)
         select += '<option value="'+ r +'" class="' + r.toLowerCase() + '"' + (data.role == r ? ' selected="selected"' : '') +'>' + Q(opts[r]) + '</option>';
diff --git a/plugins/calendar/skins/classic/templates/eventedit.html b/plugins/calendar/skins/classic/templates/eventedit.html
index d889d57..3548478 100644
--- a/plugins/calendar/skins/classic/templates/eventedit.html
+++ b/plugins/calendar/skins/classic/templates/eventedit.html
@@ -34,9 +34,9 @@
         <input type="text" name="enddate" size="10" id="edit-enddate" />  
         <input type="text" name="endtime" size="6"  id="edit-endtime" />
       </div>
-      <div class="event-section" id="edit-identities">
-        <label for="edit-identity"><roundcube:label name="calendar.roleorganizer" /></label>
-        <roundcube:object name="plugin.identity_select" />
+      <div class="event-section" id="edit-alarms">
+        <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
+        <roundcube:object name="plugin.alarm_select" />
       </div>
       <div class="event-section" id="calendar-select">
         <label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
@@ -58,10 +58,6 @@
         <label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
         <roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
       </div>
-      <div class="event-section" id="edit-alarms">
-        <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
-        <roundcube:object name="plugin.alarm_select" />
-      </div>
     </div>
     <!-- recurrence settings -->
     <div id="event-tab-2">
diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css
index 0f71aad..a209710 100644
--- a/plugins/calendar/skins/larry/calendar.css
+++ b/plugins/calendar/skins/larry/calendar.css
@@ -796,7 +796,7 @@ td.topalign {
 }
 
 .attendees-list .attendee {
-	padding: 3px 4px 3px 1px;
+	padding: 4px 4px 4px 1px;
 	background: url(images/attendee-status.gif) 2px -97px no-repeat;
 	white-space: nowrap;
 }
@@ -851,7 +851,7 @@ td.topalign {
 }
 
 #schedule-freebusy-times td {
-	padding: 3px;
+	padding: 4px;
 	border: 1px solid #ccc;
 }
 
diff --git a/plugins/calendar/skins/larry/templates/eventedit.html b/plugins/calendar/skins/larry/templates/eventedit.html
index 66dc649..841baf7 100644
--- a/plugins/calendar/skins/larry/templates/eventedit.html
+++ b/plugins/calendar/skins/larry/templates/eventedit.html
@@ -31,9 +31,9 @@
 				<input type="text" name="enddate" size="10" id="edit-enddate" />  
 				<input type="text" name="endtime" size="6"	id="edit-endtime" />
 			</div>
-			<div class="event-section" id="edit-identities">
-				<label for="edit-identity"><roundcube:label name="calendar.roleorganizer" /></label>
-				<roundcube:object name="plugin.identity_select" />
+			<div class="event-section" id="edit-alarms">
+				<label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
+				<roundcube:object name="plugin.alarm_select" />
 			</div>
 			<div class="event-section" id="calendar-select">
 				<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
@@ -55,10 +55,6 @@
 				<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
 				<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
 			</div>
-			<div class="event-section" id="edit-alarms">
-				<label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
-				<roundcube:object name="plugin.alarm_select" />
-			</div>
 		</div>
 		<!-- recurrence settings -->
 		<div id="event-tab-2">





More information about the commits mailing list