Files
LeafWeb/WebCms/App_Plugins/MemberManager/resources/member.resource.js
T
2022-10-24 11:17:36 -04:00

205 lines
7.6 KiB
JavaScript

/**
* @ngdoc service
* @name umbraco.resources.memberExtResource
*
* @description Member Management
*
* @returns {umbraco.resources.memberExtResource} memberExtResource
*
* @param {any} $http Http Service
* @param {any} $window Window
* @param {any} umbRequestHelper Umbraco Request Helper
**/
function memberExtResource($http, $window, umbRequestHelper) {
var memberExtResource = {
approveById: function (id) {
if (!id) {
throw "id cannot be null";
}
return umbRequestHelper.resourcePromise(
$http.post("Backoffice/MemberManager/MemberApi/PostApprove?" +
umbRequestHelper.dictionaryToQueryString(
[{ id: id }])),
'Failed to approve member with id ' + id);
},
suspendById: function (id) {
if (!id) {
throw "id cannot be null";
}
return umbRequestHelper.resourcePromise(
$http.post("Backoffice/MemberManager/MemberApi/PostSuspend?" +
umbRequestHelper.dictionaryToQueryString(
[{ id: id }])),
'Failed to approve member with id ' + id);
},
unlockById: function (id) {
if (!id) {
throw "id cannot be null";
}
return umbRequestHelper.resourcePromise(
$http.post("Backoffice/MemberManager/MemberApi/PostUnlock?" +
umbRequestHelper.dictionaryToQueryString(
[{ id: id }])),
'Failed to approve member with id ' + id);
},
getMembers: function (options) {
var defaults = {
pageSize: 0,
pageNumber: 0,
filterData: { filter: null },
orderDirection: "Ascending",
orderBy: "SortOrder"
};
if (options === undefined) {
options = {};
}
//overwrite the defaults if there are any specified
angular.extend(defaults, options);
//now copy back to the options we will use
options = defaults;
//change asc/desc
if (options.orderDirection === "asc") {
options.orderDirection = "Ascending";
}
else if (options.orderDirection === "desc") {
options.orderDirection = "Descending";
}
// Create the querystring dictionary
var querystring = _filterToDictionary(options.filterData);
querystring.push({ pageNumber: options.pageNumber });
querystring.push({ pageSize: options.pageSize });
querystring.push({ orderBy: options.orderBy });
querystring.push({ orderDirection: options.orderDirection });
return umbRequestHelper.resourcePromise(
$http.get("Backoffice/MemberManager/MemberApi/GetMembers?" +
umbRequestHelper.dictionaryToQueryString(querystring)),
'Failed to retrieve members');
},
getMemberExport: function (options) {
var defaults = {
filterData: { filter: null },
orderDirection: "Ascending",
orderBy: "SortOrder",
format: "Excel",
columns: null
};
if (options === undefined) {
options = {};
}
//overwrite the defaults if there are any specified
angular.extend(defaults, options);
//now copy back to the options we will use
options = defaults;
//change asc/desc
if (options.orderDirection === "asc") {
options.orderDirection = "Ascending";
}
else if (options.orderDirection === "desc") {
options.orderDirection = "Descending";
}
// Create the querystring dictionary
var querystring = _filterToDictionary(options.filterData);
querystring.push({ orderBy: options.orderBy });
querystring.push({ orderDirection: options.orderDirection });
querystring.push({ format: options.format });
querystring.push({ columns: options.columns });
var config = { responseType: 'blob' };
// Solution taken from http://jaliyaudagedara.blogspot.com/2016/05/angularjs-download-files-by-sending.html
$http.get("Backoffice/MemberManager/MemberApi/GetMembersExport?" + umbRequestHelper.dictionaryToQueryString(querystring),
config).success(function (data, status, headers) {
headers = headers();
try {
var filename = headers['x-filename'];
if (!filename) {
var result = headers['content-disposition'].split(';')[1].trim().split('=')[1];
filename = result.replace(/"/g, '');
}
var contentType = headers['content-type'];
var linkElement = document.createElement('a');
var blob = new Blob([data], { type: contentType });
var url = window.URL.createObjectURL(blob);
linkElement.setAttribute('href', url);
linkElement.setAttribute("download", filename);
var clickEvent = new MouseEvent("click", {
"view": window,
"bubbles": true,
"cancelable": false
});
linkElement.dispatchEvent(clickEvent);
} catch (ex) {
console.log(ex);
}
}).error(function (data) {
console.log(data);
});
},
getMemberGroups: function () {
return umbRequestHelper.resourcePromise(
$http.get("Backoffice/MemberManager/MemberApi/GetMemberGroups"),
'Failed to retrieve groups');
},
getMemberColumns: function (memberType) {
if (memberType === undefined || memberType === null) {
return umbRequestHelper.resourcePromise(
$http.get("Backoffice/MemberManager/MemberApi/GetMemberColumns"),
'Failed to retrieve groups');
} else {
return umbRequestHelper.resourcePromise(
$http.get("Backoffice/MemberManager/MemberApi/GetMemberColumns?memberType=" + memberType),
'Failed to retrieve groups');
}
},
canExport: function () {
return umbRequestHelper.resourcePromise(
$http.get("Backoffice/MemberManager/MemberApi/GetCanExport"),
false);
}
};
function _filterToDictionary(filter) {
if (!filter)
return;
var dict = [];
for (prop in filter) {
if (filter.hasOwnProperty(prop) &&
filter[prop] &&
(prop.startsWith('f_') || prop === 'filter' || prop === 'memberType' || prop === 'memberGroups') &&
filter[prop].length > 0) {
// Add a new dictionary entry.
var entry = {};
entry[prop] = filter[prop];
dict.push(entry);
}
}
return dict;
}
return memberExtResource;
}
angular.module('umbraco.resources').factory('memberExtResource', memberExtResource);