mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-07-06 18:01:31 +02:00
- first use of web services as Ajax: change the privacy level directly from the picture page
git-svn-id: http://piwigo.org/svn/trunk@2413 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
@@ -72,3 +72,108 @@ function popuphelp(url)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Function.prototype.pwgBind = function() {
|
||||
var __method = this, object = arguments[0], args = new Array();
|
||||
for (var i=1; i<arguments.length; i++)
|
||||
args[i-1] = arguments[i];
|
||||
return function() { return __method.apply(object, args); }
|
||||
}
|
||||
|
||||
PwgWS = function(urlRoot)
|
||||
{
|
||||
this.urlRoot = urlRoot;
|
||||
this.options = {
|
||||
method: "GET",
|
||||
async: true,
|
||||
onFailure: null,
|
||||
onSuccess: null
|
||||
};
|
||||
};
|
||||
|
||||
PwgWS.prototype = {
|
||||
|
||||
callService : function(method, parameters, options)
|
||||
{
|
||||
if (options)
|
||||
{
|
||||
for (var property in options)
|
||||
this.options[property] = options[property];
|
||||
}
|
||||
try { this.transport = new XMLHttpRequest();}
|
||||
catch(e) {
|
||||
try { this.transport = new ActiveXObject('Msxml2.XMLHTTP'); }
|
||||
catch(e) {
|
||||
try { this.transport = new ActiveXObject('Microsoft.XMLHTTP'); }
|
||||
catch (e){
|
||||
dispatchError(0, "Cannot create request object");
|
||||
}
|
||||
}
|
||||
}
|
||||
this.transport.onreadystatechange = this.onStateChange.pwgBind(this);
|
||||
|
||||
var url = this.urlRoot;
|
||||
url += "ws.php?format=json&method="+method;
|
||||
if (parameters)
|
||||
{
|
||||
for (var property in parameters)
|
||||
{
|
||||
if ( typeof parameters[property] == 'object' && parameters[property])
|
||||
{
|
||||
for (var i=0; i<parameters[property].length; i++)
|
||||
url += "&"+property+"[]="+parameters[property][i];
|
||||
}
|
||||
else
|
||||
url += "&"+property+"="+parameters[property];
|
||||
}
|
||||
}
|
||||
this.transport.open(this.options.method, url, this.options.async);
|
||||
this.transport.send(null);
|
||||
},
|
||||
|
||||
onStateChange: function() {
|
||||
var readyState = this.transport.readyState;
|
||||
if (readyState == 4)
|
||||
this.respondToReadyState(this.transport.readyState);
|
||||
},
|
||||
|
||||
dispatchError: function( httpCode, text )
|
||||
{
|
||||
!this.options.onFailure || this.options.onFailure( httpCode, text);
|
||||
},
|
||||
|
||||
respondToReadyState: function(readyState)
|
||||
{
|
||||
var transport = this.transport;
|
||||
if (readyState==4 && transport.status == 200)
|
||||
{
|
||||
var resp;
|
||||
try {
|
||||
eval('resp = ' + transport.responseText);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
this.dispatchError( 200, e.message + '\n' + transport.responseText.substr(0,256).escapeHTML() );
|
||||
}
|
||||
if (resp!=null)
|
||||
{
|
||||
if (resp.stat==null)
|
||||
this.dispatchError( 200, "Invalid response" );
|
||||
else if (resp.stat=='ok')
|
||||
{
|
||||
if (this.options.onSuccess) this.options.onSuccess( resp.result );
|
||||
}
|
||||
else
|
||||
this.dispatchError( 200, resp.err + " " + resp.message);
|
||||
}
|
||||
}
|
||||
if (readyState==4 && transport.status != 200)
|
||||
this.dispatchError( transport.status, transport.statusText );
|
||||
},
|
||||
|
||||
|
||||
transport: null,
|
||||
urlRoot: null,
|
||||
options: {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user