*Calendar - Quick add dialog now shows conflict warning instead of quietly stopping

This commit is contained in:
nathangray 2019-06-17 10:24:36 -06:00
parent 3c9419ee1a
commit cd76cccf8b
2 changed files with 53 additions and 6 deletions

View File

@ -34,6 +34,7 @@ class calendar_uiforms extends calendar_ui
var $public_functions = array( var $public_functions = array(
'freetimesearch' => True, 'freetimesearch' => True,
'ajax_add' => true, 'ajax_add' => true,
'ajax_conflicts' => true,
'edit' => true, 'edit' => true,
'process_edit' => true, 'process_edit' => true,
'export' => true, 'export' => true,
@ -1469,6 +1470,32 @@ class calendar_uiforms extends calendar_ui
$this->edit(); $this->edit();
} }
public function ajax_conflicts()
{
$participants = json_decode($_GET['participants'],true);
unset($_GET['participants']);
$content = $this->default_add_event();
// Process edit wants to see input values
$participants = array(1=> false);
$participants['cal_resources'] = '';
foreach($content['participants'] as $id => $status)
{
$quantity = $role = '';
calendar_so::split_status($status,$quantity,$role);
$participants[] = array(
'uid' => $id,
'status' => $status,
'quantity' => $quantity,
'role' => $role
);
}
$content['participants'] = $participants;
$content['button'] = array('apply' => true);
return $this->process_edit($content);
}
/** /**
* Edit a calendar event * Edit a calendar event
* *

View File

@ -1655,7 +1655,6 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend(
// Open dialog to use as target // Open dialog to use as target
var add_dialog = et2_dialog.show_dialog(null, '', ' ', null, [], et2_dialog.PLAIN_MESSAGE, this.egw); var add_dialog = et2_dialog.show_dialog(null, '', ' ', null, [], et2_dialog.PLAIN_MESSAGE, this.egw);
// Call the server, get it into the dialog // Call the server, get it into the dialog
options = jQuery.extend({menuaction: 'calendar.calendar_uiforms.ajax_add', template: 'calendar.add'}, options); options = jQuery.extend({menuaction: 'calendar.calendar_uiforms.ajax_add', template: 'calendar.add'}, options);
this.egw.json( this.egw.json(
@ -1699,16 +1698,36 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend(
// Wait a bit to make sure etemplate button finishes processing, or it will error // Wait a bit to make sure etemplate button finishes processing, or it will error
window.setTimeout(function() { window.setTimeout(function() {
var template = etemplate2.getById('calendar-add'); var template = etemplate2.getById('calendar-add');
if(template) if(template && template.name === 'calendar.add')
{ {
template.clear(); template.clear();
this.dialog.destroy();
delete app.calendar.quick_add;
} }
this.dialog.destroy(); else if (template)
if(this.event)
{ {
this.event.destroy(); // Open conflicts
var data = jQuery.extend({},template.widgetContainer.getArrayMgr('content').data, app.calendar.quick_add);
egw.openPopup(
egw.link(
'/index.php?menuaction=calendar.calendar_uiforms.ajax_conflicts',
data
),
850, 300,
'conflicts', 'calendar'
);
delete app.calendar.quick_add;
// Close the JS dialog
this.dialog.destroy();
// Do not submit this etemplate
return false;
} }
}.bind({dialog: add_dialog, event: event}), 100);
}.bind({dialog: add_dialog, event: ev}), 1000);
} }
}); });
}, },
@ -1722,6 +1741,7 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend(
*/ */
add_dialog_save: function(event, widget) add_dialog_save: function(event, widget)
{ {
this.quick_add = widget.getInstanceManager().getValues(widget.getRoot());
// Close the dialog // Close the dialog
jQuery(widget.getInstanceManager().DOMContainer.parentNode).dialog('close'); jQuery(widget.getInstanceManager().DOMContainer.parentNode).dialog('close');