(function() { "use strict"; angular.module('shared') .factory('ShareFolder', ['LazModalService','$timeout', function (LazModalService,$timeout) { var factory = this; function ShareFolder() { var self = this; function ShareFolderController(folderService,MessageBox,messageHandler,close) { var ctrl = this; ctrl.editMode = false; ctrl.teachers = null; ctrl.pending = false; var init = function() { console.log('menu-folder.factory.js'); ctrl.folder = self.folder; if (ctrl.folder.shared_with == "teachers") { folderService.getTeachers(ctrl.folder.id).then( function (response) { ctrl.teachers = response.data; }, function (reason) { console.log(reason); messageHandler.publishError('There was a problem getting the list of teachers for your school.'); } ); } }; init(); ctrl.sharedTeacherMessage = function() { if (ctrl.teachers == null || ctrl.editMode || ctrl.folder.shared_with != "teachers") { return null; } var totalShared = 0; for (var counter = 0;counter < ctrl.teachers.length;counter++) { totalShared += ctrl.teachers[counter].selected ? 1 : 0; } if (totalShared < 1) { return null; } return "This folder is being shared with " + totalShared + " teacher" + (totalShared > 1 ? "s" : "") + "."; }; ctrl.close = function () { close(); }; ctrl.isDistrict = function() { return ctrl.folder.shared_with == "district"; }; ctrl.isSchool = function() { return ctrl.folder.shared_with == "school"; }; ctrl.isTeachers = function() { return ctrl.folder.shared_with == "teachers"; }; ctrl.clickedStopSharing = function() { if (ctrl.pending) { return; } ctrl.folder.new_shared_with = "n"; ctrl.editMode = false; ctrl.saveSharedFolder(); }; ctrl.clickedDistrict = function() { if (ctrl.isDistrict() || ctrl.pending) { return; } ctrl.folder.new_shared_with = "district"; ctrl.editMode = false; ctrl.saveSharedFolder(); }; ctrl.clickedSchool = function() { if (ctrl.isSchool() || ctrl.pending) { return; } ctrl.folder.new_shared_with = "school"; ctrl.editMode = false; ctrl.saveSharedFolder(); }; ctrl.clickedCancel = function() { ctrl.editMode = false; var element = $j('.js-first-item'); if (element.length > 0) { element.focus(); } }; ctrl.clickedTeachers = function() { if (ctrl.isTeachers() || ctrl.pending) { return; } ctrl.clickedEdit(); }; ctrl.clickedEdit = function() { if (ctrl.teachers != null) { ctrl.setEditDisplay(); } else { folderService.getTeachers(ctrl.folder.id).then( function (response) { ctrl.teachers = response.data; ctrl.setEditDisplay(); }, function (reason) { console.log(reason); messageHandler.publishError('There was a problem getting the list of teachers for your school.'); } ); } }; ctrl.setEditDisplay = function() { for (var counter=0;counter < ctrl.teachers.length;counter++) { ctrl.teachers[counter].newSelected = ctrl.teachers[counter].selected; } ctrl.folder.new_shared_with = "teachers"; ctrl.editMode = true; }; // Recursively marks all subfolders with share status ctrl.markAllSubfolders = function(children, isShared) { for (var counter = 0; counter < children.length; counter++) { var oneFolder = children[counter]; oneFolder.shared_with = isShared; var newChildren = oneFolder.children; if (newChildren != null && newChildren.length > 0) { ctrl.markAllSubfolders(newChildren, isShared); } } }; // Save list of teachers ctrl.pressedShare = function() { if (ctrl.pending) { return; } var anySelected = false; if (ctrl.teachers != null) { for (var counter = 0;counter < ctrl.teachers.length;counter++) { if (ctrl.teachers[counter].newSelected) { anySelected = true; break; } } } if (!anySelected) { ctrl.showMessage("You must select at least one teacher."); return; } ctrl.saveSharedFolder(); }; ctrl.showMessage = function(myMessage) { if (ctrl.messageBoxOpen) { return; } ctrl.messageBoxOpen = true; MessageBox.show({ message: myMessage, responses: [ { id: 'continueRename', confirm: true, label: 'Continue' } ] }).then(function (response) { ctrl.messageBoxOpen = false; }); }; ctrl.clearTeacherSelections = function() { if (ctrl.teachers == null) { return; } for (var counter = 0;counter < ctrl.teachers.length;counter++) { ctrl.teachers[counter].selected = ctrl.teachers[counter].newSelected = false; } }; ctrl.saveSharedFolder = function() { ctrl.pending = true; var data = { folder_id: ctrl.folder.id, shared_with: ctrl.folder.new_shared_with }; if (ctrl.folder.new_shared_with == 'teachers' && ctrl.teachers != null) { var teacherMemberIDString = ''; for (var counter = 0;counter < ctrl.teachers.length;counter++) { ctrl.teachers[counter].selected = ctrl.teachers[counter].newSelected; if (ctrl.teachers[counter].selected) { teacherMemberIDString = teacherMemberIDString + ctrl.teachers[counter].member_id + ","; } } teacherMemberIDString = teacherMemberIDString.substring(0, teacherMemberIDString.length-1); data = { folder_id: ctrl.folder.id, shared_with: ctrl.folder.new_shared_with, teacher_member_ids: teacherMemberIDString }; } folderService.shareFolder(data).then( function (response) { var result = response.data; if (result == "1") { ctrl.close(); if (ctrl.folder.shared_with != 'teachers') { ctrl.clearTeacherSelections(); } ctrl.editMode = false; var children = [ctrl.folder]; var isShared = ctrl.folder.new_shared_with; ctrl.markAllSubfolders(children, isShared); var message = "This folder is no longer shared and can only be viewed by you."; switch (isShared) { case "district": message = "This folder is now shared and can be viewed by all members of your district."; break; case "school": message = "This folder is now shared and can be viewed by all members in your school."; break; case "teachers": message = "This folder is now shared and can be viewed by all selected teachers."; break; } messageHandler.publishSuccess(message); } else { messageHandler.publishError('Could not share or unshare folder.'); } ctrl.pending = false; }, function (reason) { ctrl.pending = false; messageHandler.publishError('Could not share or unshare folder.'); } ); }; } self.show = function (folder) { self.folder = folder; LazModalService.showModal({ controller: ['folderService', 'MessageBox', 'messageHandler', 'close', ShareFolderController], controllerAs: '$ctrl', overrideStyle: 'width: 650px;', templateUrl: '/shared/js/angular/file-cabinet/share-folder.html' }); } } return new ShareFolder(); }]); }());