149 lines
3.8 KiB
JavaScript
149 lines
3.8 KiB
JavaScript
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
/* Constructor */
|
|
function Resource($http, $q, path, options) {
|
|
angular.extend(this, {
|
|
_http: $http,
|
|
_q: $q,
|
|
_path: path
|
|
});
|
|
angular.extend(this, options);
|
|
}
|
|
|
|
/* The factory we'll use to register with Angular */
|
|
Resource.$factory = ['$http', '$q', function($http, $q) {
|
|
return function(path, options) {
|
|
return new Resource($http, $q, path, options);
|
|
};
|
|
}];
|
|
|
|
/* Factory registration in Angular module */
|
|
angular.module('SOGo.Common').factory('sgResource', Resource.$factory);
|
|
|
|
/* Instance methods */
|
|
|
|
Resource.prototype.path = function(uid) {
|
|
return (uid ? this._path + '/' + uid : this._path) + '/view';
|
|
};
|
|
|
|
Resource.prototype.find = function(uid) {
|
|
var deferred = this._q.defer();
|
|
|
|
this._http
|
|
.get(this.path(uid))
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
Resource.prototype.filter = function(uid, params) {
|
|
var deferred = this._q.defer();
|
|
|
|
this._http({
|
|
method: 'GET',
|
|
url: this.path(uid),
|
|
params: params
|
|
})
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
Resource.prototype.newguid = function(uid) {
|
|
var deferred = this._q.defer(),
|
|
path = this._path + '/' + uid + '/newguid';
|
|
|
|
this._http
|
|
.get(path)
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
/**
|
|
* @function create
|
|
* @desc Create a new resource using a specific action
|
|
* @param {string} action - the action to be used in the URL
|
|
* @param {string} name - the new resource's name
|
|
*/
|
|
Resource.prototype.create = function(action, name) {
|
|
var deferred = this._q.defer(),
|
|
path = this._path + '/' + action;
|
|
|
|
this._http
|
|
.post(path, { name: name })
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
Resource.prototype.save = function(uid, newValue, options) {
|
|
var deferred = this._q.defer(),
|
|
action = (options && options.action)? options.action : 'save',
|
|
path = this._path + '/' + uid + '/' + action;
|
|
|
|
this._http
|
|
.post(path, newValue)
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
Resource.prototype.remove = function(uid) {
|
|
var deferred = this._q.defer(),
|
|
path = this._path + '/' + uid + '/delete';
|
|
|
|
this._http
|
|
.get(path)
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
/**
|
|
* @function fetch
|
|
* @desc Fetch resources using a specific object, action and/or parameters
|
|
* @param {string} object_id - the object on which the action will be applied (ex: addressbook, calendar)
|
|
* @param {string} action - the action to be used in the URL
|
|
* @param {string} params - the url parameter
|
|
*/
|
|
Resource.prototype.fetch = function(object_id, action, params) {
|
|
var deferred = this._q.defer();
|
|
var object_id_path = object_id ? ("/" + object_id) : "";
|
|
var action_path = action ? ("/" + action) : "";
|
|
var params_path = params ? ("?" + params) : "";
|
|
|
|
var path = this._path + object_id_path + action_path + params_path;
|
|
|
|
this._http
|
|
.get(path)
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
Resource.prototype.saveAclUsers = function(object_id, action, data) {
|
|
var deferred = this._q.defer();
|
|
var object_id_path = object_id ? ("/" + object_id) : "";
|
|
var action_path = action ? ("/" + action) : "";
|
|
var path = this._path + object_id_path + action_path;
|
|
|
|
this._http
|
|
.post(path, data)
|
|
.success(deferred.resolve)
|
|
.error(deferred.reject);
|
|
|
|
return deferred.promise;
|
|
};
|
|
})();
|