/** * @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);