Unified request* event arguments handling, added support for _unlock and _action parameters

pull/280/head
Aleksander Machniak 9 years ago
parent 5bdd767a48
commit 100fea325e

@ -5,6 +5,7 @@ CHANGELOG Roundcube Webmail
- Add possibility to configure max_allowed_packet value for all database engines (#1490283)
- Improved handling of storage errors after message is sent
- Update to TinyMCE 4.1.8
- Unified request* event arguments handling, added support for _unlock and _action parameters
- Fix refreshing of drafts list when sending a message which was saved in meantime (#1490238)
- Fix saving/sending emoticon images when assets_dir is set
- Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet (#1490292)

@ -7287,22 +7287,32 @@ function rcube_webmail()
};
// send a http request to the server
this.http_request = function(action, query, lock)
this.http_request = function(action, data, lock)
{
var url = this.url(action, query);
if (typeof data !== 'object')
data = rcube_parse_query(data);
data._remote = 1;
data._unlock = lock ? lock : 0;
// trigger plugin hook
var result = this.triggerEvent('request'+action, query);
var result = this.triggerEvent('request' + action, data);
if (result !== undefined) {
// abort if one the handlers returned false
if (result === false)
return false;
else
url = this.url(action, result);
// abort if one of the handlers returned false
if (result === false) {
if (data._unlock)
this.set_busy(false, null, data._unlock);
return false;
}
else if (result !== undefined) {
data = result;
if (data._action) {
action = data._action;
delete data._action;
}
}
url += '&_remote=1';
var url = this.url(action, data);
// send request
this.log('HTTP GET: ' + url);
@ -7311,33 +7321,39 @@ function rcube_webmail()
this.start_keepalive();
return $.ajax({
type: 'GET', url: url, data: { _unlock:(lock?lock:0) }, dataType: 'json',
success: function(data){ ref.http_response(data); },
type: 'GET', url: url, dataType: 'json',
success: function(data) { ref.http_response(data); },
error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
});
};
// send a http POST request to the server
this.http_post = function(action, postdata, lock)
this.http_post = function(action, data, lock)
{
var url = this.url(action);
if (typeof data !== 'object')
data = rcube_parse_query(data);
if (postdata && typeof postdata === 'object') {
postdata._remote = 1;
postdata._unlock = (lock ? lock : 0);
}
else
postdata += (postdata ? '&' : '') + '_remote=1' + (lock ? '&_unlock='+lock : '');
data._remote = 1;
data._unlock = lock ? lock : 0;
// trigger plugin hook
var result = this.triggerEvent('request'+action, postdata);
if (result !== undefined) {
// abort if one of the handlers returned false
if (result === false)
return false;
else
postdata = result;
var result = this.triggerEvent('request'+action, data);
// abort if one of the handlers returned false
if (result === false) {
if (data._unlock)
this.set_busy(false, null, data._unlock);
return false;
}
else if (result !== undefined) {
data = result;
if (data._action) {
action = data._action;
delete data._action;
}
}
var url = this.url(action);
// send request
this.log('HTTP POST: ' + url);
@ -7346,7 +7362,7 @@ function rcube_webmail()
this.start_keepalive();
return $.ajax({
type: 'POST', url: url, data: postdata, dataType: 'json',
type: 'POST', url: url, data: data, dataType: 'json',
success: function(data){ ref.http_response(data); },
error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
});

@ -654,6 +654,34 @@ jQuery.fn.placeholder = function(text) {
});
};
// function to parse query string into an object
rcube_parse_query = function(query)
{
if (!query)
return {};
var params = {}, e, k, v,
re = /([^&=]+)=?([^&]*)/g,
decodeRE = /\+/g, // Regex for replacing addition symbol with a space
decode = function (str) { return decodeURIComponent(str.replace(decodeRE, ' ')); };
query = query.replace(/\?/, '');
while (e = re.exec(query)) {
k = decode(e[1]);
v = decode(e[2]);
if (k.substring(k.length - 2) === '[]') {
k = k.substring(0, k.length - 2);
(params[k] || (params[k] = [])).push(v);
}
else
params[k] = v;
}
return params;
};
// This code was written by Tyler Akins and has been placed in the
// public domain. It would be nice if you left this header intact.

Loading…
Cancel
Save