Show dialog for event export settings like start date and w/o attachments (#1712)
This commit is contained in:
parent
dcdc4299b1
commit
c2ebe32fda
9 changed files with 141 additions and 7 deletions
|
@ -1060,9 +1060,18 @@ class calendar extends rcube_plugin
|
||||||
{
|
{
|
||||||
$start = get_input_value('start', RCUBE_INPUT_GET);
|
$start = get_input_value('start', RCUBE_INPUT_GET);
|
||||||
$end = get_input_value('end', RCUBE_INPUT_GET);
|
$end = get_input_value('end', RCUBE_INPUT_GET);
|
||||||
if (!$start) $start = mktime(0, 0, 0, 1, date('n'), date('Y')-1);
|
if (!isset($start))
|
||||||
if (!$end) $end = mktime(0, 0, 0, 31, 12, date('Y')+10);
|
$start = 'today -1 year';
|
||||||
|
if (!is_numeric($start))
|
||||||
|
$start = strtotime($start . ' 00:00:00');
|
||||||
|
if (!$end)
|
||||||
|
$end = 'today +10 years';
|
||||||
|
if (!is_numeric($end))
|
||||||
|
$end = strtotime($end . ' 23:59:59');
|
||||||
|
|
||||||
|
$attachments = get_input_value('attachments', RCUBE_INPUT_GET);
|
||||||
$calid = $calname = get_input_value('source', RCUBE_INPUT_GET);
|
$calid = $calname = get_input_value('source', RCUBE_INPUT_GET);
|
||||||
|
|
||||||
$calendars = $this->driver->list_calendars();
|
$calendars = $this->driver->list_calendars();
|
||||||
|
|
||||||
if ($calendars[$calid]) {
|
if ($calendars[$calid]) {
|
||||||
|
@ -1077,7 +1086,7 @@ class calendar extends rcube_plugin
|
||||||
header("Content-Type: text/calendar");
|
header("Content-Type: text/calendar");
|
||||||
header("Content-Disposition: inline; filename=".$calname.'.ics');
|
header("Content-Disposition: inline; filename=".$calname.'.ics');
|
||||||
|
|
||||||
$this->get_ical()->export($events, '', true, array($this->driver, 'get_attachment_body'));
|
$this->get_ical()->export($events, '', true, $attachments ? array($this->driver, 'get_attachment_body') : null);
|
||||||
|
|
||||||
if ($terminate)
|
if ($terminate)
|
||||||
exit;
|
exit;
|
||||||
|
|
|
@ -2021,6 +2021,63 @@ function rcube_calendar_ui(settings)
|
||||||
rcmail.display_message(p.message || rcmail.get_label('importerror', 'calendar'), 'error');
|
rcmail.display_message(p.message || rcmail.get_label('importerror', 'calendar'), 'error');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// open a dialog to select calendars for export
|
||||||
|
this.export_events = function(calendar)
|
||||||
|
{
|
||||||
|
// close show dialog first
|
||||||
|
var $dialog = $("#eventsexport"),
|
||||||
|
form = rcmail.gui_objects.exportform;
|
||||||
|
|
||||||
|
if ($dialog.is(':ui-dialog'))
|
||||||
|
$dialog.dialog('close');
|
||||||
|
|
||||||
|
if (calendar)
|
||||||
|
$('#event-export-calendar').val(calendar.id);
|
||||||
|
|
||||||
|
$('#event-export-range').change(function(e){
|
||||||
|
var custom = $('option:selected', this).val() == 'custom',
|
||||||
|
input = $('#event-export-startdate')
|
||||||
|
input.parent()[(custom?'show':'hide')]();
|
||||||
|
if (custom)
|
||||||
|
input.select();
|
||||||
|
})
|
||||||
|
|
||||||
|
var buttons = {};
|
||||||
|
buttons[rcmail.gettext('export', 'calendar')] = function() {
|
||||||
|
if (form) {
|
||||||
|
var start = 0, range = $('#event-export-range option:selected', this).val(),
|
||||||
|
source = $('#event-export-calendar option:selected').val(),
|
||||||
|
attachmt = $('#event-export-attachments').get(0).checked;
|
||||||
|
|
||||||
|
if (range == 'custom')
|
||||||
|
start = date2unixtime(parse_datetime('00:00', $('#event-export-startdate').val()));
|
||||||
|
else if (range > 0)
|
||||||
|
start = 'today -' + range + '^months';
|
||||||
|
|
||||||
|
rcmail.goto_url('export_events', { source:source, start:start, attachments:attachmt?1:0 });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
buttons[rcmail.gettext('cancel', 'calendar')] = function() {
|
||||||
|
$dialog.dialog("close");
|
||||||
|
};
|
||||||
|
|
||||||
|
// open jquery UI dialog
|
||||||
|
$dialog.dialog({
|
||||||
|
modal: true,
|
||||||
|
resizable: false,
|
||||||
|
closeOnEscape: false,
|
||||||
|
title: rcmail.gettext('exporttitle', 'calendar'),
|
||||||
|
close: function() {
|
||||||
|
$('.ui-dialog-buttonpane button', $dialog.parent()).button('enable');
|
||||||
|
$dialog.dialog("destroy").hide();
|
||||||
|
},
|
||||||
|
buttons: buttons,
|
||||||
|
width: 520
|
||||||
|
}).show();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
// show URL of the given calendar in a dialog box
|
// show URL of the given calendar in a dialog box
|
||||||
this.showurl = function(calendar)
|
this.showurl = function(calendar)
|
||||||
{
|
{
|
||||||
|
@ -2693,6 +2750,8 @@ function rcube_calendar_ui(settings)
|
||||||
$('#edit-recurrence-enddate').datepicker(datepicker_settings).click(function(){ $("#edit-recurrence-repeat-until").prop('checked', true) });
|
$('#edit-recurrence-enddate').datepicker(datepicker_settings).click(function(){ $("#edit-recurrence-repeat-until").prop('checked', true) });
|
||||||
$('#edit-recurrence-repeat-times').change(function(e){ $('#edit-recurrence-repeat-count').prop('checked', true); });
|
$('#edit-recurrence-repeat-times').change(function(e){ $('#edit-recurrence-repeat-count').prop('checked', true); });
|
||||||
|
|
||||||
|
$('#event-export-startdate').datepicker(datepicker_settings);
|
||||||
|
|
||||||
// init attendees autocompletion
|
// init attendees autocompletion
|
||||||
var ac_props;
|
var ac_props;
|
||||||
// parallel autocompletion
|
// parallel autocompletion
|
||||||
|
@ -2791,7 +2850,7 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
|
||||||
rcmail.register_command('calendar-showurl', function(){ cal.showurl(cal.calendars[cal.selected_calendar]); }, false);
|
rcmail.register_command('calendar-showurl', function(){ cal.showurl(cal.calendars[cal.selected_calendar]); }, false);
|
||||||
|
|
||||||
// search and export events
|
// search and export events
|
||||||
rcmail.register_command('export', function(){ rcmail.goto_url('export_events', { source:cal.selected_calendar }); }, true);
|
rcmail.register_command('export', function(){ cal.export_events(cal.calendars[cal.selected_calendar]); }, true);
|
||||||
rcmail.register_command('search', function(){ cal.quicksearch(); }, true);
|
rcmail.register_command('search', function(){ cal.quicksearch(); }, true);
|
||||||
rcmail.register_command('reset-search', function(){ cal.reset_quicksearch(); }, true);
|
rcmail.register_command('reset-search', function(){ cal.reset_quicksearch(); }, true);
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,7 @@ class calendar_ui
|
||||||
$this->cal->register_handler('plugin.event_rsvp_buttons', array($this, 'event_rsvp_buttons'));
|
$this->cal->register_handler('plugin.event_rsvp_buttons', array($this, 'event_rsvp_buttons'));
|
||||||
$this->cal->register_handler('plugin.angenda_options', array($this, 'angenda_options'));
|
$this->cal->register_handler('plugin.angenda_options', array($this, 'angenda_options'));
|
||||||
$this->cal->register_handler('plugin.events_import_form', array($this, 'events_import_form'));
|
$this->cal->register_handler('plugin.events_import_form', array($this, 'events_import_form'));
|
||||||
|
$this->cal->register_handler('plugin.events_export_form', array($this, 'events_export_form'));
|
||||||
$this->cal->register_handler('plugin.searchform', array($this->rc->output, 'search_form')); // use generic method from rcube_template
|
$this->cal->register_handler('plugin.searchform', array($this->rc->output, 'search_form')); // use generic method from rcube_template
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,11 +543,12 @@ class calendar_ui
|
||||||
$select->add(array(
|
$select->add(array(
|
||||||
$this->cal->gettext('onemonthback'),
|
$this->cal->gettext('onemonthback'),
|
||||||
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>2))),
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>2))),
|
||||||
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>3))),
|
||||||
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>6))),
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>6))),
|
||||||
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>12))),
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>12))),
|
||||||
$this->cal->gettext('all'),
|
$this->cal->gettext('all'),
|
||||||
),
|
),
|
||||||
array('1','2','6','12',0));
|
array('1','2','3','6','12',0));
|
||||||
|
|
||||||
$html .= html::div('form-section',
|
$html .= html::div('form-section',
|
||||||
html::div(null, $input->show()) .
|
html::div(null, $input->show()) .
|
||||||
|
@ -572,6 +574,53 @@ class calendar_ui
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Form to select options for exporting events
|
||||||
|
*/
|
||||||
|
function events_export_form($attrib = array())
|
||||||
|
{
|
||||||
|
if (!$attrib['id'])
|
||||||
|
$attrib['id'] = 'rcmExportForm';
|
||||||
|
|
||||||
|
$html .= html::div('form-section',
|
||||||
|
html::label('event-export-calendar', $this->cal->gettext('calendar')) .
|
||||||
|
$this->calendar_select(array('name' => 'calendar', 'id' => 'event-export-calendar'))
|
||||||
|
);
|
||||||
|
|
||||||
|
$select = new html_select(array('name' => 'range', 'id' => 'event-export-range'));
|
||||||
|
$select->add(array(
|
||||||
|
$this->cal->gettext('all'),
|
||||||
|
$this->cal->gettext('onemonthback'),
|
||||||
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>2))),
|
||||||
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>3))),
|
||||||
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>6))),
|
||||||
|
$this->cal->gettext(array('name' => 'nmonthsback', 'vars' => array('nr'=>12))),
|
||||||
|
$this->cal->gettext('customdate'),
|
||||||
|
),
|
||||||
|
array(0,'1','2','3','6','12','custom'));
|
||||||
|
|
||||||
|
$startdate = new html_inputfield(array('name' => 'start', 'size' => 11, 'id' => 'event-export-startdate'));
|
||||||
|
|
||||||
|
$html .= html::div('form-section',
|
||||||
|
html::label('event-export-range', $this->cal->gettext('exportrange')) .
|
||||||
|
$select->show(0) .
|
||||||
|
html::span(array('style'=>'display:none'), $startdate->show())
|
||||||
|
);
|
||||||
|
|
||||||
|
$checkbox = new html_checkbox(array('name' => 'attachments', 'id' => 'event-export-attachments', 'value' => 1));
|
||||||
|
$html .= html::div('form-section',
|
||||||
|
html::label('event-export-range', $this->cal->gettext('exportattachments')) .
|
||||||
|
$checkbox->show(1)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->rc->output->add_gui_object('exportform', $attrib['id']);
|
||||||
|
|
||||||
|
return html::tag('form', array('action' => $this->rc->url(array('task' => 'calendar', 'action' => 'export_events')),
|
||||||
|
'method' => "post", 'id' => $attrib['id']),
|
||||||
|
$html
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate the form for event attachments upload
|
* Generate the form for event attachments upload
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -40,6 +40,9 @@ $labels['description'] = 'Beschrieb';
|
||||||
$labels['all-day'] = 'ganztägig';
|
$labels['all-day'] = 'ganztägig';
|
||||||
$labels['export'] = 'Exportieren';
|
$labels['export'] = 'Exportieren';
|
||||||
$labels['exporttitle'] = 'Kalender als iCalendar exportieren';
|
$labels['exporttitle'] = 'Kalender als iCalendar exportieren';
|
||||||
|
$labels['exportrange'] = 'Termine ab';
|
||||||
|
$labels['exportattachments'] = 'Mit Anhängen';
|
||||||
|
$labels['customdate'] = 'Eigenes Datum';
|
||||||
$labels['location'] = 'Ort';
|
$labels['location'] = 'Ort';
|
||||||
$labels['date'] = 'Datum';
|
$labels['date'] = 'Datum';
|
||||||
$labels['start'] = 'Beginn';
|
$labels['start'] = 'Beginn';
|
||||||
|
|
|
@ -40,6 +40,9 @@ $labels['description'] = 'Beschreibung';
|
||||||
$labels['all-day'] = 'ganztägig';
|
$labels['all-day'] = 'ganztägig';
|
||||||
$labels['export'] = 'Exportieren';
|
$labels['export'] = 'Exportieren';
|
||||||
$labels['exporttitle'] = 'Kalender als iCalendar exportieren';
|
$labels['exporttitle'] = 'Kalender als iCalendar exportieren';
|
||||||
|
$labels['exportrange'] = 'Termine ab';
|
||||||
|
$labels['exportattachments'] = 'Mit Anhängen';
|
||||||
|
$labels['customdate'] = 'Eigenes Datum';
|
||||||
$labels['location'] = 'Ort';
|
$labels['location'] = 'Ort';
|
||||||
$labels['date'] = 'Datum';
|
$labels['date'] = 'Datum';
|
||||||
$labels['start'] = 'Beginn';
|
$labels['start'] = 'Beginn';
|
||||||
|
|
|
@ -46,6 +46,9 @@ $labels['description'] = 'Description';
|
||||||
$labels['all-day'] = 'all-day';
|
$labels['all-day'] = 'all-day';
|
||||||
$labels['export'] = 'Export';
|
$labels['export'] = 'Export';
|
||||||
$labels['exporttitle'] = 'Export to iCalendar';
|
$labels['exporttitle'] = 'Export to iCalendar';
|
||||||
|
$labels['exportrange'] = 'Events from';
|
||||||
|
$labels['exportattachments'] = 'With attachments';
|
||||||
|
$labels['customdate'] = 'Custom date';
|
||||||
$labels['location'] = 'Location';
|
$labels['location'] = 'Location';
|
||||||
$labels['url'] = 'URL';
|
$labels['url'] = 'URL';
|
||||||
$labels['date'] = 'Date';
|
$labels['date'] = 'Date';
|
||||||
|
|
|
@ -146,6 +146,10 @@
|
||||||
<roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
|
<roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="eventsexport" class="uidialog">
|
||||||
|
<roundcube:object name="plugin.events_export_form" id="events-export-form" />
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="calendarurlbox" class="uidialog">
|
<div id="calendarurlbox" class="uidialog">
|
||||||
<p><roundcube:label name="calendar.showurldescription" /></p>
|
<p><roundcube:label name="calendar.showurldescription" /></p>
|
||||||
<textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
|
<textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
|
||||||
|
|
|
@ -161,6 +161,10 @@
|
||||||
<roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
|
<roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="eventsexport" class="uidialog">
|
||||||
|
<roundcube:object name="plugin.events_export_form" id="events-export-form" />
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="calendarurlbox" class="uidialog">
|
<div id="calendarurlbox" class="uidialog">
|
||||||
<p><roundcube:label name="calendar.showurldescription" /></p>
|
<p><roundcube:label name="calendar.showurldescription" /></p>
|
||||||
<textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
|
<textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
|
||||||
|
|
Loading…
Add table
Reference in a new issue