From 3027b61ec211d24211f77e96c63d26214bed607f Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 11 Apr 2018 11:44:44 +0200 Subject: [PATCH] Elastic: Calendar - Resources dialog --- plugins/calendar/calendar_ui.js | 43 +++++-- .../kolab/kolab_invitation_calendar.php | 4 +- plugins/calendar/lib/calendar_ui.php | 20 ++-- plugins/calendar/localization/en_US.inc | 1 + .../skins/elastic/templates/calendar.html | 69 ++++++----- .../skins/elastic/include/calendar.less | 107 +++++++++++++++--- 6 files changed, 178 insertions(+), 66 deletions(-) diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index 327b3e00..385a6ad1 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -2004,7 +2004,7 @@ function rcube_calendar_ui(settings) { text: rcmail.gettext('addresource', 'calendar'), 'class': 'mainaction save', - click: function() { rcmail.command('add-resource'); } + click: function() { rcmail.command('add-resource'); $dialog.dialog("close"); } }, { text: rcmail.gettext('close'), @@ -2013,23 +2013,33 @@ function rcube_calendar_ui(settings) } ]; + var resize = function() { + var container = $(rcmail.gui_objects.resourceinfocalendar); + container.fullCalendar('option', 'height', container.height() + 1); + }; + // open jquery UI dialog $dialog.dialog({ modal: true, - resizable: true, + resizable: false, // prevents from Availability tab reflow bugs on resize closeOnEscape: true, title: rcmail.gettext('findresources', 'calendar'), + classes: {'ui-dialog': 'resources-dialog'}, open: function() { rcmail.ksearch_blur(); $dialog.attr('aria-hidden', 'false'); + + // for Elastic + if ($('html.layout-small,html.layout-phone').length) { + $('#eventresourcesdialog .resource-selection').css('display', 'flex'); + $('#eventresourcesdialog .resource-content').css('display', 'none'); + } + setTimeout(resize, 50); }, close: function() { $dialog.dialog('destroy').attr('aria-hidden', 'true').hide(); }, - resize: function(e) { - var container = $(rcmail.gui_objects.resourceinfocalendar); - container.fullCalendar('option', 'height', container.height() + 4); - }, + resize: resize, buttons: buttons, width: 900, height: 500 @@ -2055,6 +2065,14 @@ function rcube_calendar_ui(settings) if (resources_data[node.id]) { resource_showinfo(resources_data[node.id]); rcmail.enable_command('add-resource', me.selected_event && $("#eventedit").is(':visible') ? true : false); + + // on elastic mobile display resource info box + if ($('html.layout-small,html.layout-phone').length) { + $('#eventresourcesdialog .resource-selection').css('display', 'none'); + $('#eventresourcesdialog .resource-content').css('display', 'flex'); + $(window).resize(); + resize(); + } } else { rcmail.enable_command('add-resource', false); @@ -2130,9 +2148,9 @@ function rcube_calendar_ui(settings) for (var k in attribs) { if (typeof attribs[k] == 'undefined') continue; - table.append($('').addClass(k) - .append('' + Q(ucfirst(rcmail.get_label(k, 'calendar'))) + '') - .append('' + text2html(render_attrib(attribs[k])) + '') + table.append($('').addClass(k + ' form-group row') + .append('') + .append('' + text2html(render_attrib(attribs[k])) + '') ); } @@ -4050,12 +4068,17 @@ function rcube_calendar_ui(settings) input.val(''); } }); - + $('#edit-resource-find').click(function(){ event_resources_dialog(); return false; }); + $('#resource-content a.nav-link').on('click', function() { + e.preventDefault(); + $(this).tab('show'); + }); + // handle change of "send invitations" checkbox $('#edit-attendees-invite').change(function() { $('#edit-attendees-donotify,input.edit-attendee-reply').prop('checked', this.checked); diff --git a/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php b/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php index b41e2964..ac676796 100644 --- a/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php @@ -234,7 +234,7 @@ class kolab_invitation_calendar $events = array(); foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) { $cal = $this->_get_calendar($foldername); - if ($cal->get_namespace() == 'other') + if (!$cal || $cal->get_namespace() == 'other') continue; foreach ($cal->list_events($start, $end, $search, 1, $query, array(array($subquery, 'OR'))) as $event) { @@ -288,7 +288,7 @@ class kolab_invitation_calendar $count = 0; foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) { $cal = $this->_get_calendar($foldername); - if ($cal->get_namespace() == 'other') + if (!$cal || $cal->get_namespace() == 'other') continue; $count += $cal->count_events($start, $end, $filter); diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php index 23b56cdc..72be0f91 100644 --- a/plugins/calendar/lib/calendar_ui.php +++ b/plugins/calendar/lib/calendar_ui.php @@ -805,20 +805,16 @@ class calendar_ui */ function resources_search_form($attrib) { - $attrib += array('command' => 'search-resource', 'id' => 'rcmcalresqsearchbox', 'autocomplete' => 'off'); - $attrib['name'] = '_q'; - - $input_q = new html_inputfield($attrib); - $out = $input_q->show(); + $attrib += array( + 'command' => 'search-resource', + 'reset-command' => 'reset-resource-search', + 'id' => 'rcmcalresqsearchbox', + 'autocomplete' => 'off', + 'form-name' => 'rcmcalresoursqsearchform', + ); // add form tag around text field - $out = $this->rc->output->form_tag(array( - 'name' => "rcmcalresoursqsearchform", - 'onsubmit' => rcmail_output::JS_OBJECT_NAME . ".command('" . $attrib['command'] . "'); return false", - 'style' => "display:inline"), - $out); - - return $out; + return $this->rc->output->search_form($attrib); } /** diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc index 8e7634c4..7219f08d 100644 --- a/plugins/calendar/localization/en_US.inc +++ b/plugins/calendar/localization/en_US.inc @@ -222,6 +222,7 @@ $labels['addresource'] = 'Book resource'; $labels['findresources'] = 'Find resources'; $labels['resourcedetails'] = 'Details'; $labels['resourceavailability'] = 'Availability'; +$labels['resourceprops'] = 'Resource properties'; $labels['resourceowner'] = 'Owner'; $labels['resourceadded'] = 'The resource was added to your event'; diff --git a/plugins/calendar/skins/elastic/templates/calendar.html b/plugins/calendar/skins/elastic/templates/calendar.html index 0265319c..bf1d2c5f 100644 --- a/plugins/calendar/skins/elastic/templates/calendar.html +++ b/plugins/calendar/skins/elastic/templates/calendar.html @@ -183,37 +183,52 @@
-
-

-