(function () { 'use strict'; var app = angular.module('issuers'); var templatePath = modulesSharedResourcesUrl + 'Modules/Issuers/Views/'; app.directive('issuersList', ['config', 'issuersDataContext', 'common', '$location', '$modal', '$q', '$upload', 'OrganisationAdminService', 'fileUpload', 'myUsersDataContext', 'features', function (config, issuersDataContext, common, $location, $modal, $q, $upload, OrganisationAdminService, fileUpload, myUsersDataContext, features) { return { restrict: 'E', templateUrl: templatePath + 'issuerslist.html', scope: { hideTitle: '=', }, link: link }; function link($scope, elem, attrs) { var getLogFn = common.logger.getLogFn; var log = getLogFn('branding'); var logSuccess = getLogFn('branding', "success"); $scope.orderByPredicate = 'name'; $scope.selectedOrg = ''; activate(); function activate() { NProgress.done(); log('Activated Badges View'); getOrganisations(); getFeatures(); } function getOrganisations() { myUsersDataContext.getOrganisationsFullFlatSimple().then(function (data) { $scope.organisations = []; for (var i = 0; i < data.length; i++) { if (data[i].type === 0) { $scope.organisations.push(data[i]) } } $scope.getIssuers(); $scope.organisationsLoaded = true; }); } function getFeatures() { OrganisationAdminService.getTopLevelOrg().then(function (org) { features.getCurrentFeatures(org.id).then(function (features) { $scope.features = features; }); }); } $scope.getIssuers = function () { issuersDataContext.getIssuersForCurrentUser().then(function (data) { $scope.issuers = data.issuers; $scope.issuersLoaded = true; }); } $scope.canDeleteIssuer = function (orgId) { for (i in $scope.organisations) { if ($scope.organisations[i].id == orgId) { return true; } } return false; } //manage the users for an organisation $scope.manageIssuer = function (issuer) { if (issuer) { for (i in $scope.organisations) { if ($scope.organisations[i].id == issuer.organisationId) { $scope.issuer = angular.copy(issuer); openIssueModal(); } } } else { $scope.issuer = angular.copy(issuer); openIssueModal(); } } $scope.createOrgIssuer = function (issuer) { issuersDataContext.createOrganisationIssuer(issuer).then(function (data) { logSuccess('Badge issuer successfully added'); $scope.getIssuers(); return data; }); } $scope.deleteOrgIssuer = function (issuer) { issuersDataContext.deleteOrganisationIssuer(issuer).then(function (data) { logSuccess('Badge issuer successfully deleted'); $scope.getIssuers(); return data; }); } $scope.updateOrgIssuer = function (issuer) { if (issuer.id == null) issuersDataContext.createOrganisationIssuer(issuer).then(function (data) { logSuccess('Badge issuer successfully added'); $scope.getIssuers(); return data; }); else { issuersDataContext.updateOrganisationIssuer(issuer).then(function (data) { logSuccess('Badge issuer successfully updated'); $scope.getIssuers(); return data; }); } } function openIssueModal() { $modal.open({ templateUrl: templatePath + 'orgissuer.html', controller: manageIssuerController, size: 'sm', backdrop: 'static', resolve: { organisations: function () { return $scope.organisations; }, Issuer: function () { return $scope.issuer; }, createOrgIssuer: function () { return $scope.createOrgIssuer; }, deleteOrgIssuer: function () { return $scope.deleteOrgIssuer; }, updateOrgIssuer: function () { return $scope.updateOrgIssuer; }, azureUpload: function () { return $scope.azureUpload; }, cloudinaryUpload: function () { return $scope.cloudinaryUpload; } } }); } //Controller for managing issuer var manageIssuerController = function ($scope, $modalInstance, organisations, Issuer, createOrgIssuer, deleteOrgIssuer, updateOrgIssuer, azureUpload, cloudinaryUpload) { $scope.organisations = organisations; $scope.createOrgIssuer = createOrgIssuer; $scope.deleteOrgIssuer = deleteOrgIssuer; $scope.updateOrgIssuer = updateOrgIssuer; $scope.isEdit = false; $scope.issuer = Issuer; $scope.fileName = 'Choose file'; // get the current issuer if it exists else we create the issuer object if ($scope.issuer) { $scope.issuer = Issuer; $scope.isEdit = true; } else { $scope.issuer = { organisationId: '', name: '', description: '', jsonUrl: '', logoUrl: null, }; } // Called when image file has been selected $scope.onOrgLogoFileSelect = function (files) { $scope.file = files[0]; // we're not interested in multiple file uploads here // check if the user has actually selected an image file else throw an error if ($scope.file.type !== 'image/jpeg' && $scope.file.type !== 'image/png' && $scope.file.type !== 'image/gif' || $scope.file.type === 'image/tiff') { $scope.errorMessage = "That doesn't look like an image file!"; return; } // check if the user has selected an image below our maximum file size of 20MB if ($scope.file.size < 20000000) { $scope.imageAdded = true; var reader = new FileReader(); reader.onload = function (e) { $scope.$apply(function () { // get loaded data and render thumbnail. $scope.logoPreview = e.target.result; }); }; // Generate base 64 image for preview reader.readAsDataURL($scope.file); } else { $scope.errorMessage = 'Image is too large!'; return; } $scope.fileName = $scope.file.name; files.originalImageFileName = $scope.file.name; files.imageFileSize = $scope.file.size; files.imageFileType = $scope.file.type; $scope.files = files; } //upload org logo function uploadImage(obj, file, success, progress, error, uploadPath) { var data = { upload_preset: cloudinaryUploadPreset, tags: 'mybadges,' + $scope.issuer.organisationId }; //images are uploaded to Cloudinary $upload.upload({ url: cloudinaryApiBaseUrl + cloudinaryName + uploadPath, data: data, file: file }).progress(function (e) { var percent = Math.round((e.loaded * 100.0) / e.total); return progress(percent); }).success(function (data, status, headers, config) { return success(obj, data); }).error(function (data) { return error(); }); } //called when a logo is uploaded function UploadSuccess(files, data) { //ensure we always use https data.url = data.url.replace(/^http:\/\//i, 'https://'); data.url = data.url.replace(/image\/upload\//g, 'image/upload/w_300/'); $scope.issuer.logoUrl = data.url $scope.progress = null; // check if we are editing or creating a new issuer if ($scope.isEdit === false) $scope.createOrgIssuer($scope.issuer); else $scope.updateOrgIssuer($scope.issuer); $modalInstance.dismiss('cancel'); //work out if its and bade or image and update accordingly return; } // Generate the image upload process percentage function UploadProgress(percentComplete) { $scope.progress = percentComplete; $scope.uploadStatus = "Uploading... " + percentComplete + "%"; } function UploadError() { console.log("Problem uploading json"); } // save the organisation issuer $scope.saveOrganisationIssuer = function () { // Upload the image to cloudinary if ($scope.logoPreview) { uploadImage($scope.files, $scope.file, UploadSuccess, UploadProgress, UploadError, cloudinaryUploadPath); } else { $scope.updateOrgIssuer($scope.issuer); $modalInstance.dismiss('cancel'); } } $scope.resetImage = function () { $scope.issuer.logoUrl = null; $scope.logoPreview = null; $scope.orgLogo = null; $scope.fileName = 'Choose file'; } // close the modal $scope.cancel = function () { $modalInstance.dismiss('cancel'); }; }; } }]); })();