(function() { "use strict"; angular .module('shared') .component('moveFolder', { templateUrl: '/shared/js/angular/file-cabinet/move-folder.html', controller: 'MoveFolder', bindings: { disablelocked: '<', popover: '<', popover2: '<', copyfolder: '<', movefolder: '<', moveresource: '<', copyresource: '<' } }) .controller('MoveFolder', ['folderService', 'folders', 'currentSubFolders', 'MessageBox', 'messageHandler', 'fileCabinetRibbonService','folderTreeViewService', '$timeout', function MoveFolderCtrl(folderService, folders, currentSubFolders, MessageBox, messageHandler, fileCabinetRibbonService, folderTreeViewService, $timeout) { var ctrl = this; ctrl.pending = true; ctrl.MAX_STARTING_DEPTH = 2; var keyboardKeys = { up: 38, down: 40, home: 36, end: 35 }; ctrl.$onInit = function () { if (ctrl.copyfolder != null || ctrl.movefolder != null) { this.folder = ctrl.copyfolder || ctrl.movefolder; } else if (ctrl.moveresource != null || ctrl.copyresource != null) { this.folder = currentSubFolders.getCurrentFolder(); } currentSubFolders.setMovePopoverOpen(true); ctrl.showFolders = {}; ctrl.createFolderList(); ctrl.markAllFolders(ctrl.folderList, false, false); $timeout(function () { var element = $j('.js-copy--1'); // the 'my files' element if (element != null && element.length > 0) { element.focus(); } }); }; ctrl.openMoreFolders = function(event, folder) { ctrl.showFolders[folder.id] = !ctrl.showFolders[folder.id]; if (!ctrl.showFolders[folder.id]) { closeAllSubFolders(folder); } event.stopPropagation(); }; function closeAllSubFolders(folder) { _.each(folder.children, function(childFolder) { ctrl.showFolders[childFolder.id] = false; closeAllSubFolders(childFolder); }); } ctrl.doShowFolders = function(folder) { return ctrl.showFolders[folder.id]; }; ctrl.getAriaExpanded = function(folder) { if (!folder.children || folder.children.length < 1) { return undefined; } return folder.folderOpen == true ? 'true' : 'false'; }; ctrl.getAriaSelected = function(folder) { if (folder.isChecked == undefined || !folder.isChecked) { return undefined; } return 'true'; }; function getHamburgerMenuClass() { if (ctrl.movefolder != null) { return 'js-hamburger-menu-' + ctrl.movefolder.id; } if (ctrl.copyfolder != null) { return 'js-hamburger-menu-' + ctrl.copyfolder.id; } if (ctrl.moveresource != null) { return 'js-hamburger-menu-r-' + ctrl.moveresource.id; } if (ctrl.copyresource != null) { return 'js-hamburger-menu-r-' + ctrl.copyresource.id; } } ctrl.keyDown = function(event, folder) { var functionToPass = folderTreeViewService.isTargetButton(event) ? ctrl.openMoreFolders : ctrl.moveFolder; folderTreeViewService.keyDown( event, folder, ctrl.folderList, ctrl.pressedCancel, ctrl.setCurrentSubFolders, functionToPass, getHamburgerMenuClass() ); }; ctrl.moveFolder = function() { ctrl.closeFolderList(); ctrl.applyMoveFolder(); }; ctrl.hasMoveResource = function () { return ctrl.moveresource != null; }; ctrl.getClassNames = function(folder) { var className = 'js-copy-' + folder.id; if (folder.isChecked) { className = className + ' is-selected'; } return className; }; ctrl.hasCopyResource = function () { return ctrl.copyresource != null; }; ctrl.hasMoveFolder = function () { return ctrl.movefolder != null; }; ctrl.hasCopyFolder = function () { return ctrl.copyfolder != null; }; ctrl.$onDestroy = function () { currentSubFolders.setMovePopoverOpen(false); }; ctrl.getAreFoldersPublic = function () { return currentSubFolders.getAreFoldersPublic(); }; ctrl.markAllFolders = function (folderList, markCheck, markOpen) { if (folderList == null) { return; } for (var counter = 0; counter < folderList.length; counter++) { var f = folderList[counter]; if (markOpen) { f.folderOpen = true; // Initially they are all open. } f.showFolders = folders.getDepth(f) < ctrl.MAX_STARTING_DEPTH; if (markCheck) { f.isChecked = false; // designates that the folder has been selected } if (f.children != null && f.children.length > 0) { ctrl.markAllFolders(f.children, markCheck, markOpen); } } }; ctrl.findCheckedFolder = function (folderList) { if (folderList == null) { return null; } for (var counter = 0; counter < folderList.length; counter++) { var f = folderList[counter]; if (f.isChecked) { return f; } if (f.children != null && f.children.length > 0) { var foundFolder = ctrl.findCheckedFolder(f.children); if (foundFolder != null) { return foundFolder; } } } return null; }; ctrl.setCurrentSubFolders = function (folder) { if (ctrl.disablelocked && folder.locked) { return; } ctrl.markAllFolders(ctrl.folderList, true, false); ctrl.hasSelectedFolder = true; folder.isChecked = true; }; ctrl.pressedCancel = function () { currentSubFolders.setSkipSelect(true); ctrl.closeFolderList(); }; ctrl.createFolderList = function () { ctrl.folderList = folders.getIsLiteracyEditor() ? prepareFolderList(folders.getEveryoneFolders(), folders.getLiteracyTypeName(), true,true) : prepareFolderList(folders.getMyFolders(), folders.getMyFoldersTypeName(), !currentSubFolders.getAreFoldersForEveryone(),false); }; function prepareFolderList(folders, name, skipCurrentFolder, markAsEveryoneFolder) { var allFolders = Array.from(folders); var nf = {}; nf.id = -1; nf.name = name; nf.folderOpen = true; nf.children = []; nf.hideFolderToggle = true; ctrl.showFolders[nf.id] = true; ctrl.computeFolderList(nf, allFolders, skipCurrentFolder,markAsEveryoneFolder); var result = []; result.push(nf); return result; } ctrl.computeFolderList = function (parent, children, skipCurrentFolder, markAsEveryoneFolder) { ctrl.pending = true; var parentID = this.folder.id; if (ctrl.moveresource == null && ctrl.copyresource == null) { parentID = parent.id; } for (var counter = 0; counter < children.length; counter++) { var f = children[counter]; if (skipCurrentFolder && ctrl.moveresource == null && ctrl.copyresource == null && f.id == this.folder.id) { // skip current folder continue; } var nf = {}; nf.everyoneFolder = markAsEveryoneFolder; nf.skipInScrollView = ctrl.disablelocked && f.locked; nf.locked = f.locked; nf.id = f.id; nf.name = f.name; nf.folderOpen = true; nf.isChecked = false; nf.parent_resource_collection_id = parentID; nf.parent_folder_id = parent.id; nf.children = []; nf.hideFolderToggle = true; parent.children.push(nf); ctrl.showFolders[nf.id] = false; if (f.children != null && f.children.length > 0) { nf.hideFolderToggle = false; ctrl.computeFolderList(nf, f.children, skipCurrentFolder, markAsEveryoneFolder); } } ctrl.pending = false; }; ctrl.displayMessage = function(message) { ctrl.messageBoxOpen = true; MessageBox.show({ message: message, responses: [ { id: 'continueMove', confirm: true, label: 'OK' } ] }).then(function (response) { ctrl.messageBoxOpen = false; }); }; ctrl.applyMoveResource = function () { if (ctrl.moveresource != null) { var f = folderService.getCurrentFolder(); if (f.locked) { ctrl.displayMessage('You cannot move any resource from this folder because the associated custom assignment is in progress.'); return; } } var resource = ctrl.moveresource || ctrl.copyresource; var checkedFolder = ctrl.findCheckedFolder(ctrl.folderList); var everyonedest = checkedFolder.everyoneFolder; if (checkedFolder.id < 1) { ctrl.displayMessage('You cannot select \'MY FILES\' when moving or copying resources.'); return; } else { if (!everyonedest) { var f = folders.findFolderForID(folders.getMyFolders(),checkedFolder.id); if (f.locked) { ctrl.displayMessage('You cannot move or copy any resource to this folder because the associated custom assignment is in progress.'); return; } } } if (currentSubFolders.getCurrentFolder().id == checkedFolder.id) { ctrl.closeFolderList(); return; } var language_id = resource.book_language_id === null ? 0 : resource.book_language_id; var book_id = resource.book_id === null ? 0 : resource.book_id; var non_book_id = resource.non_book_id === null ? 0 : resource.non_book_id; var material_id = resource.material_id === null ? 0 : resource.material_id; var pack_id = resource.pack_id === null ? 0 : resource.pack_id; var raz_video_id = resource.video_id === null ? 0 : resource.raz_video_id; var source_folder_id = resource.resource_collection_id; var dest_folder_id = checkedFolder.id; var copy = ctrl.copyresource ? 1 : 0; var data = { book_id : book_id, non_book_id : non_book_id, material_id : material_id, pack_id : pack_id, raz_video_id : raz_video_id, source_folder_id : source_folder_id, dest_folder_id : dest_folder_id, language_id : language_id, copy : copy, position : 0, everyonedest : everyonedest, everyonesource : currentSubFolders.getAreFoldersForEveryone() }; folderService.applyMoveResource(data).then( function (response) { var returnFolder = response.data; if (!returnFolder) { messageHandler.publishError('Could not copy/move resource.'); } else { var allFolders = everyonedest ? folders.getEveryoneFolders() : folders.getMyFolders(); var sFolder = folders.findFolderForID(allFolders, source_folder_id); if (sFolder != null && ctrl.moveresource != null) { var ar = sFolder.resources.all; for (var counter=0;counter < ar.length;counter++) { if (ar[counter].group_id == resource.group_id) { sFolder.resources.all.splice(counter,1); break; } } var ar = sFolder.resources.assignable; for (var counter=0;counter < ar.length;counter++) { if (ar[counter].group_id == resource.group_id) { sFolder.resources.assignable.splice(counter,1); break; } } } var dFolder = folders.findFolderForID(allFolders, dest_folder_id); if (dFolder != null) { dFolder.resources = null; } if (ctrl.moveresource != null) { messageHandler.publishSuccess("Resource moved to folder '" + dFolder.name + "'"); } else { messageHandler.publishSuccess("Resource copied to folder '" + dFolder.name + "'"); fileCabinetRibbonService.incrementResourceCount(); } ctrl.closeFolderList(); } }, function (reason) { messageHandler.publishError('Could not copy/move resource.'); } ); }; ctrl.closeFolderList = function () { if (ctrl.popover2) { ctrl.popover2.close(); } else if (ctrl.popover) { ctrl.popover.close(); } }; ctrl.applyMoveFolder = function () { var checkedFolder = ctrl.findCheckedFolder(ctrl.folderList); if (checkedFolder == null) { ctrl.displayMessage('No destination folder selected.'); return; } if (ctrl.moveresource != null || ctrl.copyresource != null) { ctrl.applyMoveResource(); return; } var isCopy = currentSubFolders.getAreFoldersPublic() || ctrl.copyfolder != null; folders.moveFolder(ctrl.folder.id, checkedFolder.id,0, isCopy, currentSubFolders.getAreFoldersPublic(), currentSubFolders.getAreFoldersForEveryone(), this, folders.getIsLiteracyEditor()); }; ctrl.setSkipSelect = function (val) { currentSubFolders.setSkipSelect(val); }; var onError = function (reason) { console.error("An error occured in applyMoveFolder"); console.error(reason); messageHandler.publishError('Could not move folder. Please refresh and try again.'); }; ctrl.getFolder = function () { return this.folder; }; }]); }());