(function() { "use strict"; angular.module('shared') .service('folderService', ['$http', '$q', 'messageHandler', '$rootScope', function ($http, $q, messageHandler, $rootScope) { var self = this; var currentAssignment = null; var currentResources = null; var currentAssignableResources = null; var currentFolder = null; var readingResources = false; var readingAssignment = false; var readingFolders = false; var initializeFolders = false; var FOLDER_UPDATE_EVENT = 'folderUpdated'; function registerOnFolderUpdated(scope, callback) { var eventListenerDestructor = $rootScope.$on(FOLDER_UPDATE_EVENT, callback); scope.$on('$destory', eventListenerDestructor); } function emitFolderUpdate() { $rootScope.$emit(FOLDER_UPDATE_EVENT); } function ansiOnly(message) { if (message === null) { return message; } return message.replace(/[^\x00-\xFF]/g, ""); } function saveFolderOrder(parentFolder) { if (parentFolder == null || parentFolder.children == null || parentFolder.children.length < 1) { return; } var data = new Array(); for (var counter = 0; counter < parentFolder.children.length; counter++) { var rec = { folder_id: parentFolder.children[counter].id, sort_order: counter }; data.push(rec); } var url = "/api/filecabinet/saveFolderOrder"; $http.put(url,JSON.stringify(data)).then( function onReposMyFolders(response) { }, function onError(reason) { console.log(error); } ); } function getCurrentResourcesForFolder(folder_id,literacy_editor,fromRibbon) { var url = "/api/filecabinet/ribbonResource/" + folder_id; if (fromRibbon == undefined || fromRibbon !== true) { url = "/api/filecabinet/resource/" + folder_id; if (literacy_editor) { var url = "/api/filecabinet/literacyResource/" + folder_id; } } return $http.get(url) .then(function onReposMyFolders(response) { var currentResources = response.data.all; return currentResources; }).catch(function onError(reason) { return $q.reject(reason); }); } function getCurrentAssignableResourcesForFolder(folder_id) { var url = "/api/filecabinet/resource/" + folder_id; return $http.get(url) .then(function onReposMyFolders(response) { var currentAssignableResources = response.data.assignable; return currentAssignableResources; }).catch(function onError(reason) { return $q.reject(reason); }); } function getResourceTypes() { return { BOOK: "book", DBL_SIDED_BOOK: "dbl-sided-book", LANDINGPAGE: "landingpage", DISCUSSION_CARD: "discussion-card", QUIZ: "quiz", WORDLESS_book: "wordless-book", POCKET_BOOK: "pocket-book", LESSON_PLAN: "lesson-plan", WORKSHEET: "worksheet", PHONOLOGICAL_AWARENESS_LESSON: "phonological-awareness-lesson", NON_BOOK: "non-book", READ_COLOR_DBL_BOOK: "read-color-dbl-book", READ_COLOR_BOOK: "read-color-book", PHONICS_LESSON: "phonics-lesson", DBL_COLOR_COVER: "dbl-color-cover", CLOSE_READING_PACK: "close-reading-pack", COLOR_COVER: "color-cover", PROJECT_BASED_LEARNING_PACK: "project-based-learning-pack", RECORD_FORM: "record-form", SUMMER_SCHOOL_PACK: "summer-school-pack", WORD_CARD: "word-card", ELL_VOCABULARY_POWER_PACK: "ell-vocabulary-power-pack", SAZ_MATERIAL: 'saz-material', ISL_PACK: 'isl-pack', RAZ_VIDEO: "raz-video" }; } function addResourceToFolder(folder_id, folder_name, resource_id, resource_type, language_id, worksheet_type, worksheet_subtype_id, phonics_lesson_id,everyoneFolder) { var myPromise = $q(function (resolve, reject) { var data = { everyone_folder: everyoneFolder === true, folder_id: folder_id, folder_name: folder_name, resource_id: resource_id, resource_type: resource_type, language_id: language_id, worksheet_type:worksheet_type, worksheet_subtype_id:worksheet_subtype_id, phonics_lesson_id:phonics_lesson_id }; var url = "/api/filecabinet/resource"; $http.post(url,JSON.stringify(data)).then( function onReposMyFolders(response) { var returnFolder = response.data; if (!returnFolder) { reject('an error occured'); } else { resolve(returnFolder); } }, function onError(reason) { reject(reason); } ); }); return myPromise; } function getCurrentAssignment() { return currentAssignment; } function getCurrentResources() { return currentResources; } function getCurrentAssignableResources() { return currentAssignableResources; } function getCurrentFolder() { return currentFolder; } function getReadingResources() { return readingResources || readingAssignment || readingFolders || initializeFolders; } function getCurrentFolderName() { if (currentFolder === null) { return null; } return currentFolder.name; } function getCurrentFolderID() { if (currentFolder === null) { return null; } return currentFolder.id; } function readAssignment(folder) { readingAssignment = true; currentAssignment = null; if (folder !== null && folder.id > 0 && folder.assignment != null) { currentAssignment = folder.assignment; readingAssignment = false; } else if (folder !== null && folder.id > 0) { var url = "/api/resources/getCustomAssignment/" + folder.id; $http.get(url).then(onReposAssignment,onError); } else { readingAssignment = false; } } var onReposAssignment = function(response) { var data = response.data; // Ignore any completed assignments if (data.students != null) { var allCompleted = true; var keys = Object.keys(data.students); for (var counter = 0;counter < keys.length;counter++) { var student = data.students[keys[counter]]; if (student.completed_at == null) { allCompleted = false; break; } } if (allCompleted) { data = new Array(); } } currentFolder.assignment = data; currentAssignment = data; readingAssignment = false; }; function readResources(folder,everyonedest) { everyonedest = everyonedest != undefined && everyonedest; readAssignment(folder); readingResources = true; currentResources = currentAssignableResources = null; currentFolder = null; if (folder !== null && folder.id > 0 && folder.resources != null) { currentFolder = folder; currentResources = folder.resources.all; currentAssignableResources = folder.resources.assignable; readingResources = false; } else if (folder !== null && folder.id > 0) { var url = everyonedest ? "/api/filecabinet/literacyResource/" + folder.id : "/api/filecabinet/resource/" + folder.id; currentFolder = folder; return $http.get(url).then(onRepos,onError); } else { readingResources = false; } return $q.resolve(true); } function removeResource(resourceID, languageID) { var counter = 0; var newResources = new Array(); for (counter = 0; counter < currentResources.length; counter++) { if (resourceID !== currentResources[counter]['group_id'] || languageID !== currentResources[counter]['group_language_id']) { newResources.push(currentResources[counter]); } } currentResources = newResources; newResources = new Array(); for (counter = 0; counter < currentAssignableResources.length; counter++) { if (resourceID !== currentAssignableResources[counter]['group_id'] || languageID !== currentAssignableResources[counter]['group_language_id']) { newResources.push(currentAssignableResources[counter]); } } currentAssignableResources = newResources; if (currentFolder != null) { currentFolder.resources = null; // force read from db } } var onRepos = function(response) { currentFolder.resources = response.data; currentResources = response.data.all; currentAssignableResources = response.data.assignable; readingResources = false; return true; }; var onError = function(reason) { currentResources = currentAssignment = null; readingResources = readingAssignment = false; messageHandler.publishError('Could not read resources or assignments.'); return true; }; var removeResourcesActionP = function(folder_id, group_id, type_id, language_id, literacy_editor) { language_id = language_id == null ? '1' : language_id; var url = "/api/filecabinet/resource/" + folder_id + "/group/" + group_id + "/type/" + type_id + "/language/" + language_id + '/everyone/' + (literacy_editor ? 'y' : 'n'); return serviceCall(url, null, false, "delete"); }; var removeFolder = function(folder_id,everyonesource) { var url = "/api/filecabinet/folder/" + folder_id; if (everyonesource != undefined && everyonesource === true) { url = "/api/filecabinet/literacyFolder/" + folder_id; } return serviceCall(url, null, false, "delete"); }; var removeResourceFromFolder = function(folder_id, group_id, type_id, language_id,isEveryoneFolder) { language_id = language_id == null ? '1' : language_id; var url = "/api/filecabinet/resource/" + folder_id + "/group/" + group_id + "/type/" + type_id + "/language/" + language_id + "/everyone/" + (isEveryoneFolder ? "y" : "n"); return serviceCall(url, null, false, "delete"); }; var shareFolder = function(data) { return serviceCall("/api/filecabinet/folder", data, false, "put"); }; var applyMoveResource = function(data) { return serviceCall("/api/filecabinet/resource", data, false, "put"); }; var completeSaveEditedFolderName = function(data) { return serviceCall("/api/filecabinet/folder", data, false, "put"); }; var editFolderDescription = function(data) { return serviceCall("/api/filecabinet/folder", data, false, "put"); }; var addStandardsToFolder = function(data) { return serviceCall("/api/filecabinet/standards", data, false, "post"); }; var removeStandardsFromFolder = function(folderId, stateStandardIds,everyoneFolder) { var url = "/api/filecabinet/folder/" + folderId + "/standards/" + stateStandardIds + "/" + (everyoneFolder ? "y" : "n"); return serviceCall(url, null, false, "delete"); }; var addCustomStandardsToFolder = function(data) { return serviceCall("/api/filecabinet/customStandards", data, false, "post"); }; var removeCustomStandardsFromFolder = function(folderIds, customStandardIds, everyoneFolders) { var url = "/api/filecabinet/folder/" + folderIds + "/customStandards/" + customStandardIds + "/" + (everyoneFolders ?"y" : "n"); return serviceCall(url, null, false, "delete"); }; var getStandardsForFolder = function(folderId,everyoneFolders) { var url = "/api/filecabinet/standards/" + folderId + "/" + (everyoneFolders ? "y" : "n"); return serviceCall(url, null, false, "get"); }; var getCustomStandardsForFolder = function(folderId,everyoneFolders) { var url = "/api/filecabinet/customStandards/" + folderId + "/" + (everyoneFolders ? "y" : "n"); return serviceCall(url, null, false, "get"); }; var getFoldersByCustomStandardId = function(customStandardId, everyone_folder) { var url = "/api/filecabinet/folders/" + customStandardId + "/" + (everyone_folder ? "y" : "n"); return serviceCall(url, null, false, "get"); }; var getLastStrand = function(folderId) { var url = "/api/filecabinet/strand/" + folderId; return serviceCall(url, null, false, "get"); }; var saveNewFolder = function(data) { return serviceCall("/api/filecabinet/folder", data, false, "post"); }; var getMyFoldersForBundleBar = function() { return serviceCall("/api/filecabinet/myFolders", null, true, "get"); }; var readMyFolders = function() { return serviceCall("/api/filecabinet/myFolders", null, false, "get"); }; var readPublicFolders = function() { return serviceCall("/api/filecabinet/sharedFolders", null, false, "get"); }; var readEveryoneFolders = function(literacyTypeId) { return serviceCall("/api/filecabinet/everyoneFolders/" + literacyTypeId, null, false, "get"); }; var readTeacherInfo = function() { return serviceCall("/api/filecabinet/teacherInfo", null, false, "get"); }; var dbMoveFolder = function(data) { return serviceCall("/api/filecabinet/folder", data, false, "put"); }; var setLastFolderID = function(data) { return serviceCall("/api/filecabinet/setLastFolderID", data, false, "put"); }; var getLastFolderID = function() { return serviceCall("/api/filecabinet/getLastFolderID", null, false, "get"); }; var setLastPopoutFolderID = function(data) { return serviceCall("/api/filecabinet/setLastPopoutFolderID", data, false, "put"); }; var getLastPopoutFolderID = function() { return serviceCall("/api/filecabinet/getLastPopoutFolderID", null, false, "get"); }; var getTeachers = function(folder_id) { return serviceCall("/api/filecabinet/getTeachers/" + folder_id, null, false, "get"); }; var serviceCall = function(serviceURL, data, resolveData, verb) { if (verb === "get") { return serviceCallGet(serviceURL, resolveData); } else if (verb === "delete") { return serviceCallDelete(serviceURL, resolveData); } else if (verb === "put") { return serviceCallPut(serviceURL, resolveData, data); } else if (verb === "post") { return serviceCallPost(serviceURL, resolveData, data); } }; var serviceCallGet = function(serviceURL, resolveData) { return $q(function (resolve, reject) { $http.get(serviceURL).then( function (response) { if (resolveData) { resolve(response.data); } else { resolve(response); } }, function (reason) { reject(reason); } ); }); }; var serviceCallDelete = function(serviceURL, resolveData) { return $q(function (resolve, reject) { $http.delete(serviceURL).then( function (response) { if (resolveData) { resolve(response.data); } else { resolve(response); } }, function (reason) { reject(reason); } ); }); }; var serviceCallPut = function(serviceURL, resolveData, data) { return $q(function (resolve, reject) { $http.put(serviceURL, data).then( function (response) { if (resolveData) { resolve(response.data); } else { resolve(response); } }, function (reason) { reject(reason); } ); }); }; var serviceCallPost = function(serviceURL, resolveData, data) { return $q(function (resolve, reject) { $http.post(serviceURL, data).then( function (response) { if (resolveData) { resolve(response.data); } else { resolve(response); } }, function (reason) { reject(reason); } ); }); }; var getReadingFolders = function() { return readingFolders; }; var setReadingFolders = function(val) { readingFolders = val; }; var getInitializeFolders = function() { return initializeFolders; }; var setInitializeFolders = function(val) { initializeFolders = val; }; var folderDescriptionMode = "display"; var setFolderDescriptionMode = function(mode) { if (mode === "display" || mode === "edit") { folderDescriptionMode = mode; } }; var getFolderDescriptionMode = function () { return folderDescriptionMode; }; return { registerOnFolderUpdated: registerOnFolderUpdated, emitFolderUpdate: emitFolderUpdate, getResourceTypes: getResourceTypes, getInitializeFolders: getInitializeFolders, setInitializeFolders: setInitializeFolders, removeFolder: removeFolder, removeResourceFromFolder: removeResourceFromFolder, shareFolder: shareFolder, applyMoveResource: applyMoveResource, completeSaveEditedFolderName: completeSaveEditedFolderName, editFolderDescription: editFolderDescription, addStandardsToFolder: addStandardsToFolder, removeStandardsFromFolder: removeStandardsFromFolder, addCustomStandardsToFolder: addCustomStandardsToFolder, removeCustomStandardsFromFolder: removeCustomStandardsFromFolder, getStandardsForFolder: getStandardsForFolder, getCustomStandardsForFolder: getCustomStandardsForFolder, getFoldersByCustomStandardId: getFoldersByCustomStandardId, getLastStrand: getLastStrand, saveNewFolder: saveNewFolder, getMyFoldersForBundleBar: getMyFoldersForBundleBar, dbMoveFolder: dbMoveFolder, readTeacherInfo: readTeacherInfo, getReadingFolders: getReadingFolders, setReadingFolders: setReadingFolders, readMyFolders: readMyFolders, readPublicFolders: readPublicFolders, readEveryoneFolders: readEveryoneFolders, removeResourcesActionP: removeResourcesActionP, ansiOnly: ansiOnly, readAssignment: readAssignment, getCurrentAssignment: getCurrentAssignment, getReadingResources: getReadingResources, saveFolderOrder: saveFolderOrder, getCurrentFolder: getCurrentFolder, removeResource: removeResource, getCurrentResources: getCurrentResources, getCurrentResourcesForFolder: getCurrentResourcesForFolder, getCurrentAssignableResourcesForFolder: getCurrentAssignableResourcesForFolder, getCurrentAssignableResources: getCurrentAssignableResources, getCurrentFolderID: getCurrentFolderID, getCurrentFolderName: getCurrentFolderName, addResourceToFolder: addResourceToFolder, readResources: readResources, setLastFolderID: setLastFolderID, getLastFolderID: getLastFolderID, setLastPopoutFolderID: setLastPopoutFolderID, getLastPopoutFolderID: getLastPopoutFolderID, getTeachers: getTeachers, setFolderDescriptionMode: setFolderDescriptionMode, getFolderDescriptionMode: getFolderDescriptionMode } }]); }());