diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php
index c69036d90b..960a2e06ca 100644
--- a/calendar/inc/class.calendar_uiforms.inc.php
+++ b/calendar/inc/class.calendar_uiforms.inc.php
@@ -923,7 +923,7 @@ class calendar_uiforms extends calendar_ui
case 'freetime':
// the "click" has to be in onload, to make sure the button is already created
- $GLOBALS['egw']->js->set_onload("document.getElementsByName('exec[freetime]')[0].click();");
+ egw_framwork::set_onload("document.getElementsByName('exec[freetime]')[0].click();");
break;
case 'add_alarm':
@@ -1340,7 +1340,7 @@ class calendar_uiforms extends calendar_ui
{
egw_vfs::lock($lock_path,$preserv['lock_token'],$locktime,$lock_owner,$scope='shared',$type='write',true,false);
}
- if (($lock = egw_vfs::checkLock($lock_path)) && $lock['owner'] != $lock_owner)
+ if (($lock = egw_vfs::checkLock($lock_path)))
{
$msg .= ' '.lang('This entry is currently opened by %1!',
(($lock_uid = $GLOBALS['egw']->accounts->name2id(substr($lock['owner'],7),'account_email')) ?
@@ -1353,32 +1353,8 @@ class calendar_uiforms extends calendar_ui
elseif(egw_vfs::lock($lock_path,$preserv['lock_token'],$locktime,$lock_owner,$scope='shared',$type='write',false,false))
{
// install ajax handler to unlock the entry again, if the window get's closed by the user (X of window or our [Close] button)
- $GLOBALS['egw']->js->set_onunload("if (do_onunload) xajax_doXMLHTTPsync('calendar.calendar_uiforms.ajax_unlock',$event[id],'$preserv[lock_token]');");
- $GLOBALS['egw']->js->set_onload("replace_eTemplate_onsubmit();");
-
- // overwrite submit method of eTemplate form AND onSubmit event, to switch off onUnload handler for regular form submits
- // selectboxes use onchange(this.form.submit()) which does not fire onSubmit event --> need to overwrite submit() method
- // regular submit buttons dont call submit(), but trigger onSubmit event --> need to overwrite onSubmit event
- $GLOBALS['egw_info']['flags']['java_script'] .= '
-
-';
+ egw_framework::set_onbeforeunload("unlock_event($event[id],'$preserv[lock_token]');");
+ egw_framework::set_onload("replace_eTemplate_onsubmit();");
}
else
{
@@ -1575,7 +1551,7 @@ function replace_eTemplate_onsubmit()
// the call to set_style_by_class has to be in onload, to make sure the function and the element is already created
$onload .= " set_style_by_class('table','end_hide','display','".($content['duration'] && isset($sel_options['duration'][$content['duration']]) ? 'none' : 'block')."');";
- $GLOBALS['egw']->js->set_onload($onload);
+ egw_framework::set_onload($onload);
$readonlys['recur_exception'] = true;
@@ -1686,8 +1662,9 @@ function replace_eTemplate_onsubmit()
* @param int $id
* @param string $token
*/
- function ajax_unlock($id,$token)
+ public static function ajax_unlock($id,$token)
{
+ error_log(__METHOD__."($id,'$token')");
$lock_path = egw_vfs::app_entry_lock_path('calendar',$id);
$lock_owner = 'mailto:'.$GLOBALS['egw_info']['user']['account_email'];
@@ -1695,9 +1672,6 @@ function replace_eTemplate_onsubmit()
{
egw_vfs::unlock($lock_path,$token,false);
}
- $response = new xajaxResponse();
- $response->addScript('window.close();');
- return $response->getXML();
}
/**
@@ -2099,15 +2073,11 @@ function replace_eTemplate_onsubmit()
// let the window popup, if its already there
$GLOBALS['egw_info']['flags']['java_script'] .= "\n";
- if (!is_object($GLOBALS['egw']->js))
- {
- $GLOBALS['egw']->js = CreateObject('phpgwapi.javascript');
- }
$sel_options['duration'] = $this->durations;
if ($content['duration'] && isset($sel_options['duration'][$content['duration']])) $content['end'] = '';
// We hide the enddate if one of our predefined durations fits
// the call to set_style_by_class has to be in onload, to make sure the function and the element is already created
- $GLOBALS['egw']->js->set_onload("set_style_by_class('table','end_hide','visibility','".($content['duration'] && isset($sel_options['duration'][$content['duration']]) ? 'hidden' : 'visible')."');");
+ egw_framework::set_onload("set_style_by_class('table','end_hide','visibility','".($content['duration'] && isset($sel_options['duration'][$content['duration']]) ? 'hidden' : 'visible')."');");
$etpl->exec('calendar.calendar_uiforms.freetimesearch',$content,$sel_options,'',array(
'participants' => $content['participants'],
diff --git a/calendar/js/app.js b/calendar/js/app.js
index 6887b3dc1e..e469ce11af 100644
--- a/calendar/js/app.js
+++ b/calendar/js/app.js
@@ -10,9 +10,9 @@
/**
* Fix calendar specific id: "cal_id:recurrence" or "appId:", replacing $app and $id in url
- *
+ *
* Cut away the recurrence date from id, and use app from calendar integration
- *
+ *
* @param _action
* @param _senders
*/
@@ -31,20 +31,20 @@ function cal_fix_app_id(_action, _senders)
id = matches[2];
}
var backup_url = _action.data.url;
-
+
_action.data.url = _action.data.url.replace(/(\$|%24)id/,id);
_action.data.url = _action.data.url.replace(/(\$|%24)app/,app);
nm_action(_action, _senders);
-
+
_action.data.url = backup_url; // restore url
}
/**
* Open calendar entry, taking into accout the calendar integration of other apps
- *
+ *
* calendar_uilist::get_rows sets var js_calendar_integration object
- *
+ *
* @param _action
* @param _senders
*/
@@ -80,14 +80,14 @@ function cal_open(_action, _senders)
}
console.log(_action);
nm_action(_action, _senders);
-
+
_action.data = backup; // restore url, width, height, nm_action
}
/**
* Delete calendar entry, asking if you want to delete series or exception
- *
- *
+ *
+ *
* @param _action
* @param _senders
*/
@@ -142,6 +142,43 @@ function cal_delete(_action, _senders)
}
console.log(_action);
nm_action(_action, _senders, null, {ids: []});
-
+
_action.data = backup; // restore url, width, height, nm_action
}
+
+do_onunload = true;
+/**
+ * Overwrite submit method of eTemplate form AND onSubmit event, to switch off onUnload handler for regular form submits
+ *
+ * selectboxes use onchange(this.form.submit()) which does not fire onSubmit event --> need to overwrite submit() method
+ * regular submit buttons dont call submit(), but trigger onSubmit event --> need to overwrite onSubmit event
+ */
+function replace_eTemplate_onsubmit()
+{
+ document.eTemplate.old_submit = document.eTemplate.submit;
+ document.eTemplate.submit = function()
+ {
+ do_onunload = false;
+ this.old_submit();
+ };
+ document.eTemplate.old_onsubmit = document.eTemplate.onsubmit;
+ document.eTemplate.onsubmit = function()
+ {
+ do_onunload = false;
+ this.old_onsubmit();
+ };
+}
+
+/**
+ * Send synchronious ajax request to server to unlock an etry
+ *
+ * @param {number} _cal_id
+ * @param {string} _token
+ */
+function unlock_event(_cal_id, _token)
+{
+ if (do_onunload)
+ {
+ xajax_doXMLHTTPsync('calendar_uiforms::ajax_unlock', _cal_id, _token);
+ }
+}