(function () { "use strict"; angular .module('shared') .factory('AssignResources', ['ModalService' , function (ModalService) { function AssignResources() { var self = this; function AssignResourcesController( folders, fileCabinetRibbonService, resourceList, close, studentList, MessageBox, $http, messageHandler, $window, Authorization, SiteHelper, subjects, FileCabinetConstants, ActivityTypeConstants, SazConstants, _, FeatureCheck, memberInfo ) { var ctrl = this; var closeCalled = false; var vocabGroupIds = []; var initializeStart = function() { ctrl.startDate = 'No Due Date'; ctrl.message = ''; ctrl.title = resourceList.getAssignmentTitle(); ctrl.customAssignment = resourceList.getCustomAssignment(); ctrl.canRead = false; ctrl.canListen = false; ctrl.canQuiz = false; ctrl.canWatch = false; ctrl.canWorksheet = false; ctrl.canFormativeWorksheet = false; ctrl.canIsl = false; ctrl.canVocabVocabulary = false; ctrl.canVocabPhonics = false; ctrl.canVocabSpelling = false; ctrl.canExistingAssignmentVocabVocabulary = false; ctrl.canExistingAssignmentVocabPhonics = false; ctrl.canExistingAssignmentVocabSpelling = false; ctrl.disableActivitySelection = false; ctrl.read = false; ctrl.listen = false; ctrl.quiz = false; ctrl.watch = false; ctrl.worksheet = false; ctrl.formativeWorksheet = false; ctrl.isl = false; ctrl.vocabVocabulary = false; ctrl.vocabPhonics = false; ctrl.vocabSpelling = false; ctrl.resourceCount = 0; ctrl.maxAssignableResources = 100; ctrl.resourceTypes = { BOOK : FileCabinetConstants.BOOK_RESOURCE_TYPE, NON_BOOK : FileCabinetConstants.NON_BOOK_RESOURCE_TYPE, PACK : FileCabinetConstants.PACK_RESOURCE_TYPE, MATERIAL : FileCabinetConstants.MATERIAL_RESOURCE_TYPE, RAZ_VIDEO : FileCabinetConstants.RAZ_VIDEO_RESOURCE_TYPE }; ctrl.activityTypeIds = { LISTEN : ActivityTypeConstants.LISTEN_ACTIVITY_ID, READ : ActivityTypeConstants.READ_ACTIVITY_ID, QUIZ : ActivityTypeConstants.QUIZ_ACTIVITY_ID, WATCH : ActivityTypeConstants.WATCH_ACTIVITY_ID, WORKSHEET : ActivityTypeConstants.WORKSHEET_ACTIVITY_ID, FORMATIVE_WORKSHEET : ActivityTypeConstants.FORMATIVE_WORKSHEET_ACTIVITY_ID, ISL : ActivityTypeConstants.INTERACTIVE_LESSON_ACTIVITY_ID }; ctrl.showReadingLevels = false; ctrl.showISLLevels = false; ctrl.showSITNLevels = false; ctrl.chosenReadingLevel = null; ctrl.chosenISLLevel = null; ctrl.chosenSITNLevel = null; ctrl.defaultReadingLevel = null; ctrl.defaultISLLevel = null; ctrl.defaultSITNLevel = null; ctrl.constructedResponseEnabled = ctrl.customAssignment ? ctrl.customAssignment.constructed_response_enabled : false; ctrl.showUnitSazLanguages = false; ctrl.sazEnglishSelected = false; ctrl.sazSpanishSelected = false; ctrl.sazLanguagesDisabled = false; ctrl.requiredAddOnSiteAbbrevs = []; ctrl.isAllowSharedEllAssingingEnabled = FeatureCheck.isFeatureEnabled('ALLOW_SHARED_ELL_ASSIGNING'); initializeStudentList(); initializeResources(); initializeActivities(); prepareNewCustomAssignment(); function initializeStudentList() { studentList.get().$promise.then(function (students) { if (ctrl.customAssignment && ctrl.customAssignment.students) { setSelectedAndCompletedStudentsFromCustomAssignment() } else { studentList.clearSelected(); } }).then(function () { annotateSelectableStudents(); }); } function initializeResources() { var mainResourceList = resourceList.getResources(); var currentCustomAssignmentResources = initializeCurrentCustomAssignment(); var resourceID = null; if (mainResourceList != null && currentCustomAssignmentResources != null) { for (var i = 0; i < mainResourceList.length; ++i) { var resourcedIDs = mainResourceList[i].resourceIDs; var relatedResourceIds = mainResourceList[i].hasOwnProperty('related_resource_ids') ? mainResourceList[i].related_resource_ids : null; if (!ctrl.isAllowSharedEllAssingingEnabled && mainResourceList[i].hasOwnProperty('titleHref') && mainResourceList[i].titleHref.indexOf('/ell/') !== -1) { ctrl.requiredAddOnSiteAbbrevs.push(SiteHelper.RAZ_ELL_SITE_ABBREVIATION); } for (var j = 0; j < resourcedIDs.length; ++j) { resourceID = resourcedIDs[j]; if (currentCustomAssignmentResources[resourceID.id] && currentCustomAssignmentResources[resourceID.id][resourceID.cbtype]) { resourceID.checked = true; mainResourceList[i].isChecked = true; setActivityTypeAvailability(resourceID); if (ctrl.customAssignment != null && mainResourceList[i].resource_type === FileCabinetConstants.UNIT_PACK_OPTION) { setDefaultUnitPackLevels(resourceID); setSazLanguages(resourceID, true); } if (ctrl.customAssignment != null && mainResourceList[i].resource_type === FileCabinetConstants.ISL_PACK_OPTION) { setDefaultISlLevel(resourceID); } if (ctrl.customAssignment != null && mainResourceList[i].resource_type === FileCabinetConstants.STORYLINE_LESSON_PACK_OPTION) { setDefaultStorylineLessonPackLevels(resourceID); } } if (ctrl.customAssignment != null && relatedResourceIds !== null) { _.each(relatedResourceIds, function (element, index) { var relatedResourceId = element.id; if (currentCustomAssignmentResources[relatedResourceId] && currentCustomAssignmentResources[relatedResourceId][resourceID.cbtype]) { resourceID.checked = true; mainResourceList[i].isChecked = true; setActivityTypeAvailability(resourceID); if (hasDefaultReadingLevel(index)) { ctrl.defaultReadingLevel = index; } if (hasDefaultSITNLevel(index)) { ctrl.defaultSITNLevel = index; } } }); } } } } } function initializeActivities() { var resources = resourceList.getResources(); for (var k = 0; k < resources.length; ++k) { var resource = resources[k]; if (resource.vocabGameTypeIds !== undefined && resource.vocabGameTypeIds !== null && resource.group_id !== undefined && resource.group_id !== null && resource.vocabGameTypeIds.length > 0) { vocabGroupIds.push(resource.group_id); _.each(resource.vocabGameTypeIds, function(gameType) { ctrl.canVocabVocabulary = ctrl.canVocabVocabulary || gameType['gameTypeId']==1; ctrl.canVocabSpelling = ctrl.canVocabSpelling || gameType['gameTypeId']==2; ctrl.canVocabPhonics = ctrl.canVocabPhonics || gameType['gameTypeId']==3; }); } if (resource.existingGameTypeIds !== undefined && resource.existingGameTypeIds !== null && resource.existingGameTypeIds.length > 0) { _.each(resource.existingGameTypeIds, function(gameType) { ctrl.canExistingAssignmentVocabVocabulary = ctrl.canExistingAssignmentVocabVocabulary || gameType['gameTypeId']==1; ctrl.canExistingAssignmentVocabPhonics = ctrl.canExistingAssignmentVocabPhonics || gameType['gameTypeId']==3; ctrl.canExistingAssignmentVocabSpelling = ctrl.canExistingAssignmentVocabSpelling || gameType['gameTypeId']==2; }); } var resourceIDs = resource.resourceIDs; if (resource.rtype !== ctrl.activityTypeIds.QUIZ) { ++ctrl.resourceCount; } if (resourceIDs == null) { continue; } var thisHave = haveActivityTypeForResource(resource, resourceIDs); resource.canRead = thisHave.read; resource.canListen = thisHave.listen; resource.canQuiz = thisHave.quiz; resource.canWatch = thisHave.watch; resource.canWorksheet = thisHave.worksheet; resource.canFormativeWorksheet = thisHave.formativeWorksheet; resource.canIsl = thisHave.isl; canActivityType(thisHave); if (resource.rtype === ctrl.resourceTypes.PACK && resource.resource_type === FileCabinetConstants.UNIT_PACK_OPTION) { ctrl.showReadingLevels = true; ctrl.showUnitSazLanguages = ctrl.showUnitSazLanguages ? ctrl.showUnitSazLanguages : hasMultipleSazLanguages(resourceIDs); ctrl.sazEnglishSelected = !(ctrl.sazEnglishSelected || ctrl.sazSpanishSelected) ? true : ctrl.sazEnglishSelected } if (resource.rtype === ctrl.resourceTypes.PACK && resource.resource_type === FileCabinetConstants.STORYLINE_LESSON_PACK_OPTION) { _.each(resource.resourceIDs, function(element) { lookForShowReadingLevels(element) }); } lookForShowReadingLevels(resource); if (ctrl.canIsl && hasLowMidLevelParts(resourceIDs) && hasHighLevelParts(resourceIDs)) { ctrl.showISLLevels = true; } if (ctrl.canRead && resource.material_content_type && resource.material_content_type === 'sitn') { ctrl.showSITNLevels = true; } } setDisableActivitySelection(); } function initializeCurrentCustomAssignment() { var resources = []; if (ctrl.customAssignment != null) { if (ctrl.customAssignment.assignment_name != null) { ctrl.title = ctrl.customAssignment.assignment_name; } if (ctrl.customAssignment.message != null) { ctrl.message = ctrl.customAssignment.message; } if (ctrl.customAssignment.due_on != null) { ctrl.startDate = ctrl.customAssignment.due_on; } if (ctrl.customAssignment.resources != null) { resources = ctrl.customAssignment.resources; } } return resources; } function assignmentCompletedChecker(student) { if (student.completed) { return 'Student has completed the assignment' } } function setSelectedAndCompletedStudentsFromCustomAssignment() { _.each(studentList.get(), function (student) { var assignmentStudent; switch (folders.getSubjectName()) { case subjects.SCIENCE_SUBJECT_NAME: assignmentStudent = student.science_student_account_id ? ctrl.customAssignment.students[student.science_student_account_id] : null; break; case subjects.READING_SUBJECT_NAME: default: assignmentStudent = student.reading_student_account_id ? ctrl.customAssignment.students[student.reading_student_account_id] : null; break; } if (assignmentStudent) { student.selected = true; student.completed = !!assignmentStudent.completed_at; } else { student.selected = false; student.completed = false; } }) } function annotateSelectableStudents() { var license_type = Authorization.getLicenseTypeForResourceCollection(getResourceLicenseTypes()); var resourceDescription = ctrl.resourceCount === 1 ? 'this resource' : 'these resources'; var siteAbbreviation = ''; switch (folders.getSubjectName()) { case subjects.SCIENCE_SUBJECT_NAME: siteAbbreviation = SiteHelper.SAZ_SITE_ABBREVIATION; break; case subjects.READING_SUBJECT_NAME: default: siteAbbreviation = memberInfo.subjects.reading.site_abbrev; break; } var studentSelectionDisabledChecker = [ Authorization.studentWithoutPrivilegeCheckerFactory(siteAbbreviation), assignmentCompletedChecker, Authorization.studentWithoutResourceLicenseCheckerFactory(license_type, resourceDescription) ]; ctrl.requiredAddOnSiteAbbrevs.forEach(function(siteAbbrev) { studentSelectionDisabledChecker.push(Authorization.studentWithoutPrivilegeCheckerFactory(siteAbbrev)); }); studentList.annotateSelectableStudents(studentSelectionDisabledChecker); } function getResourceLicenseTypes() { if (ctrl.customAssignment) { return [ { license_type: ctrl.customAssignment.license_type } ]; } else { return _.reduce(ctrl.getCurrentAssignableResources(), function (memo, resource) { if ('license_type' in resource) { memo.push(resource) } else if ('resourceIDs' in resource) { _.reduce(resource.resourceIDs, function (memo, subresource) { if ('license_type' in subresource) { memo.push(subresource) } return memo; }, memo) } return memo; }, []) } } function setActivityTypeAvailability(resourceID) { ctrl.listen = ctrl.listen || resourceID.cbtype === ctrl.activityTypeIds.LISTEN; ctrl.read = ctrl.read || resourceID.cbtype === ctrl.activityTypeIds.READ; ctrl.quiz = ctrl.quiz || resourceID.cbtype === ctrl.activityTypeIds.QUIZ; ctrl.watch = ctrl.watch || resourceID.cbtype === ctrl.activityTypeIds.WATCH; ctrl.worksheet = ctrl.worksheet || resourceID.cbtype === ctrl.activityTypeIds.WORKSHEET; ctrl.formativeWorksheet = ctrl.formativeWorksheet || resourceID.cbtype === ctrl.activityTypeIds.FORMATIVE_WORKSHEET; ctrl.isl = ctrl.isl || resourceID.cbtype === ctrl.activityTypeIds.ISL; } function setDefaultUnitPackLevels(resourceID) { switch (parseInt(resourceID.material_type_id)) { case SazConstants.UNIT_NONFICTION_BOOK_MATERIAL_TYPE_ID: case SazConstants.QUICK_READS_MATERIAL_TYPE_ID: setDefaultReadingLevel(resourceID); break; case SazConstants.ISL_MATERIAL_TYPE_ID: setDefaultISlLevel(resourceID); break; } } function setDefaultStorylineLessonPackLevels(resourceID) { switch (parseInt(resourceID.material_type_id)) { case SazConstants.UNIT_NONFICTION_BOOK_MATERIAL_TYPE_ID: case SazConstants.QUICK_READS_MATERIAL_TYPE_ID: setDefaultReadingLevel(resourceID); break; } } function setDefaultReadingLevel(resourceID) { ctrl.defaultReadingLevel = 'material-' + resourceID.level; } function setDefaultISlLevel(resourceID) { ctrl.defaultISLLevel = resourceID.level === SazConstants.MID_READING_LEVEL ? FileCabinetConstants.ISL_LOW_MID_BUTTON_CHOICE : FileCabinetConstants.ISL_HIGH_BUTTON_CHOICE; } function hasDefaultReadingLevel(index) { return ( index === FileCabinetConstants.MATERIAL_LOW_BUTTON_CHOICE || index === FileCabinetConstants.MATERIAL_MID_BUTTON_CHOICE || index === FileCabinetConstants.MATERIAL_HIGH_BUTTON_CHOICE ); } function hasDefaultSITNLevel(index) { return ( index === FileCabinetConstants.SITN_EARLY_BUTTON_CHOICE || index === FileCabinetConstants.SITN_MIDDLE_BUTTON_CHOICE || index === FileCabinetConstants.SITN_UPPER_BUTTON_CHOICE ); } function hasMultipleSazLanguages(resourceIDs) { var hasMultiple = false; _.each(resourceIDs, function(element) { if (parseInt(element.saz_language_id) > 0) { hasMultiple = true; } }); return hasMultiple; } function setSazLanguages(resourceID, doDisable) { var languageId = parseInt(resourceID.saz_language_id); if (_.isNaN(languageId) || languageId === 0) { ctrl.sazEnglishSelected = true; } else if (languageId === 1) { ctrl.sazSpanishSelected = true; } ctrl.sazLanguagesDisabled = doDisable; } function haveActivityTypeForResource(resource, resourceIDs) { var thisHaveListen = false; var thisHaveRead = false; var thisHaveQuiz = false; var thisHaveWatch = false; var thisHaveWorksheet = false; var thisHaveFormativeWorksheet = false; var thisHaveIsl = false; for (var i = 0; i < resourceIDs.length; ++i) { if (resource.rtype === ctrl.activityTypeIds.QUIZ) { ++ctrl.resourceCount; } var resourceID = resourceIDs[i]; switch (resourceID.cbtype) { case ctrl.activityTypeIds.LISTEN: thisHaveListen = true; break; case ctrl.activityTypeIds.READ: thisHaveRead = true; break; case ctrl.activityTypeIds.QUIZ: thisHaveQuiz = true; thisHaveFormativeWorksheet = true; break; case ctrl.activityTypeIds.WATCH: thisHaveWatch = true; break; case ctrl.activityTypeIds.WORKSHEET: thisHaveWorksheet = true; break; case ctrl.activityTypeIds.FORMATIVE_WORKSHEET: thisHaveFormativeWorksheet = true; thisHaveQuiz = true; break; case ctrl.activityTypeIds.ISL: thisHaveIsl = true; break; default: break; } } return { listen : thisHaveListen, read : thisHaveRead, quiz : thisHaveQuiz, watch : thisHaveWatch, worksheet : thisHaveWorksheet, formativeWorksheet : thisHaveFormativeWorksheet, isl : thisHaveIsl }; } function canActivityType(thisHave) { ctrl.canRead = ctrl.canRead || thisHave.read; ctrl.canListen = ctrl.canListen || thisHave.listen; ctrl.canQuiz = ctrl.canQuiz || thisHave.quiz; ctrl.canWatch = ctrl.canWatch || thisHave.watch; ctrl.canWorksheet = ctrl.canWorksheet || thisHave.worksheet; ctrl.canFormativeWorksheet = ctrl.canFormativeWorksheet || thisHave.formativeWorksheet; ctrl.canIsl = ctrl.canIsl || thisHave.isl; } function setDisableActivitySelection() { var availableActivities = [ ctrl.canListen, ctrl.canRead, ctrl.canQuiz || ctrl.canFormativeWorksheet, ctrl.canWatch, ctrl.canWorksheet, ctrl.canIsl ]; var availableActivitiesCount = 0; _.each(availableActivities, function(element) { if (element) { ++availableActivitiesCount; } }); ctrl.disableActivitySelection = availableActivitiesCount <= 1; } function prepareNewCustomAssignment() { if (ctrl.customAssignment == null) { if (ctrl.canListen) { ctrl.listen = true; ctrl.markActivityType(ctrl.activityTypeIds.LISTEN, true); } if (ctrl.canRead) { ctrl.read = true; ctrl.markActivityType(ctrl.activityTypeIds.READ, true); } if (ctrl.canQuiz) { ctrl.quiz = true; ctrl.markActivityType(ctrl.activityTypeIds.QUIZ, true); } if (ctrl.canWatch) { ctrl.watch = true; ctrl.markActivityType(ctrl.activityTypeIds.WATCH, true); } if (ctrl.canWorksheet) { ctrl.worksheet = true; ctrl.markActivityType(ctrl.activityTypeIds.WORKSHEET, true); } if (ctrl.canFormativeWorksheet) { ctrl.formativeWorksheet = true; ctrl.markActivityType(ctrl.activityTypeIds.FORMATIVE_WORKSHEET, true); // Considered quizzes } if (ctrl.canIsl) { ctrl.isl = true; ctrl.markActivityType(ctrl.activityTypeIds.ISL, true); } } } function lookForShowReadingLevels(resource) { if (resource.material_type_id) { switch (parseInt(resource.material_type_id)) { case SazConstants.UNIT_NONFICTION_BOOK_MATERIAL_TYPE_ID: case SazConstants.QUICK_READS_MATERIAL_TYPE_ID: ctrl.showReadingLevels = true; break; } } } }; ctrl.markQuizCheckbox = function(isChecked) { ctrl.markActivityType(ctrl.activityTypeIds.QUIZ, isChecked); ctrl.markActivityType(ctrl.activityTypeIds.FORMATIVE_WORKSHEET, isChecked); }; ctrl.markActivityType = function(type, isChecked) { var resources = resourceList.getResources(); for (var counter = 0; counter < resources.length; ++counter) { var resource = resources[counter]; var resourceIDs = resource.resourceIDs; if (resourceIDs == null) { continue; } for (var counter2 = 0; counter2 < resourceIDs.length; ++counter2) { var resourceID = resourceIDs[counter2]; if (resourceID.cbtype === type) { resourceID.checked = isChecked; } } } }; initializeStart(); // *Must* follow the 'markActivityType' function above ctrl.getLocked = function() { return resourceList.getCustomAssignment() != null; }; ctrl.shouldShowQuizCheckbox = function() { return ctrl.canQuiz && (!ctrl.getLocked() || ctrl.quiz) || (ctrl.canFormativeWorksheet && ctrl.formativeWorksheet); }; ctrl.isQuizChecked = function() { return ctrl.quiz || ctrl.formativeWorksheet; }; ctrl.doDisplayResourceCount = function() { switch (folders.getSubjectName()) { case subjects.SCIENCE_SUBJECT_NAME: return false; case subjects.READING_SUBJECT_NAME: default: return true; } }; ctrl.qualifierText = function(resourceRecord) { if ((ctrl.canRead && !resourceRecord.canRead) || (ctrl.canListen && !resourceRecord.canListen) || (ctrl.canQuiz && !resourceRecord.canQuiz) || (ctrl.canWatch && !resourceRecord.canWatch) || (ctrl.canWorksheet && !resourceRecord.canWorksheet) || (ctrl.canFormativeWorksheet && !resourceRecord.canFormativeWorksheet) || (ctrl.canIsl && !resourceRecord.canIsl)) { var ret = ""; if (resourceRecord.canRead) { ret = ret + 'Read/'; } if (resourceRecord.canListen) { ret = ret + 'Listen/'; } if (resourceRecord.canQuiz || resourceRecord.canFormativeWorksheet) { ret = ret + 'Quiz/'; } if (resourceRecord.canWatch) { ret = ret + 'Watch/'; } if (resourceRecord.canWorksheet) { ret = ret + 'Worksheet/'; } if (resourceRecord.canIsl) { ret = ret + 'Interactive Lesson/'; } ret = ret.slice(0, -1); return "(" + ret + " Only)"; } return ""; }; ctrl.buttonText = function() { return ctrl.customAssignment == null ? 'Assign e-Resources' : 'Update Assignment' }; ctrl.htmlToPlaintext = function(text) { return text ? String(text).replace(/<[^>]+>/gm, '') : ''; }; ctrl.close = function () { close(); closeCalled = true; }; ctrl.getCurrentAssignableResources = function() { return resourceList.getResources(); }; ctrl.displayPack = function (pack) { if (isPackToDisplayAlternatively(pack)) { return Object.values(pack.alternate_display_list); } return pack.resourceIDs; }; ctrl.displayListOfAssignableResources = function() { return ctrl.getCurrentAssignableResources(); }; ctrl.getResourceStyle = function() { return resourceList.getResources().length > 7 ? "overflow:auto; height:155px;" : ""; }; ctrl.checkedResource = function(resourceRecord) { for (var counter = 0; counter < resourceRecord.resourceIDs.length; ++counter) { var r = resourceRecord.resourceIDs[counter]; r.checked = resourceRecord.isChecked; } }; ctrl.checkedResourceOption = function(resourceRecord) { var totOptions = 0; var totChecked = 0; for (var counter = 0; counter < resourceRecord.resourceIDs.length; ++counter) { var r = resourceRecord.resourceIDs[counter]; totOptions++; if (r.checked) { totChecked++; } } resourceRecord.isChecked = totChecked > 0; }; ctrl.isNewlySelectedStudent = function(studentAccountID) { var originalList = []; if (ctrl.customAssignment != null && ctrl.customAssignment.students != null) { originalList = ctrl.customAssignment.students; } return originalList[studentAccountID] == null; }; ctrl.clickedShowDetails = function() { ctrl.showDetails = !ctrl.showDetails; }; ctrl.keyDown = function(event) { var keyCodes = { enter : 13 }; if (typeof modalKeyDown === 'function') { switch (event.keyCode) { case keyCodes.enter: hitEnterKey(event); break; default: modalKeyDown(event, ctrl.close,'js-assign-resources'); break; } } }; ctrl.showDetailsClass = function() { return ctrl.showDetails ? 'arrowUp' : 'arrowDown'; }; ctrl.showDetailsLinkText = function() { return ctrl.showDetails ? 'Hide Assignment Resources' : 'Show Assignment Resources'; }; ctrl.setAssignedResources = function() { if (ctrl.savingData) { return; } ctrl.savingData = true; var studentIDsAsDelimitedString = ''; var selectedStudents = []; var selectedStudentIDs = []; var selectedStudentAccounts = []; var allStudents = []; var selStudent = studentList.get(); if (selStudent != null) { for (var i = 0; i < selStudent.length; ++i) { var student = selStudent[i]; var studentAccountType = ''; var studentAccountId = ''; switch (folders.getSubjectName()) { case subjects.SCIENCE_SUBJECT_NAME: studentAccountType = 'science_student_account_id'; studentAccountId = student.science_student_account_id; break; case subjects.READING_SUBJECT_NAME: default: studentAccountType = 'reading_student_account_id'; studentAccountId = student.reading_student_account_id; break; } if (student.hasOwnProperty(studentAccountType)) { allStudents.push(student.student_id); if (student.hasOwnProperty('selected') && student.selected == true) { selectedStudents.push(student); selectedStudentIDs.push(student.student_id); selectedStudentAccounts.push(studentAccountId); studentIDsAsDelimitedString = studentIDsAsDelimitedString + student.student_id + ','; } } } } studentIDsAsDelimitedString = studentIDsAsDelimitedString.length < 1 ? 0 : studentIDsAsDelimitedString.slice(0, -1); var url = "/api/resources/getAssignedResourceCount/" + studentIDsAsDelimitedString; $http.get(url).then(function successCallback(response) { validateAssignedResources(response, allStudents, selectedStudentIDs, selectedStudents, selectedStudentAccounts) }, onError); }; ctrl.generateErrorByResource = function (selectedResourcesWithActivities) { var resourceError = ""; for (var i = 0; i < selectedResourcesWithActivities.length; ++i) { var selectedResource = selectedResourcesWithActivities[i]; if (selectedResource.thisHasQuiz && (!selectedResource.thisHasListen && selectedResource.resource.canListen) && (!selectedResource.thisHasRead && selectedResource.resource.canRead)) { resourceError = " and select a Read or Listen activity, in order to assign a quiz"; } } return resourceError; }; ctrl.assignmentRedirect = function () { $window.location.href = folders.getKaz_http_server(); }; ctrl.fileCabinetRedirect = function () { $window.location.href = '/file-cabinet?id=' + resourceList.getFolderID(); }; ctrl.showMessage = function(errorMessage) { MessageBox.show({ message: errorMessage, responses: [ { id: 'ok', confirm: true, label: 'OK' } ] }).then(function (response) { ctrl.messageBoxOpen = false; },function (reason) { alert(errorMessage); }); }; function isPackToDisplayAlternatively(pack) { return pack.resource_type === FileCabinetConstants.UNIT_PACK_OPTION || pack.resource_type === FileCabinetConstants.ISL_PACK_OPTION || pack.resource_type === FileCabinetConstants.STORYLINE_LESSON_PACK_OPTION || pack.resource_type === FileCabinetConstants.TEXT_SET_PACK_OPTION || pack.resource_type === FileCabinetConstants.HIGH_LOW_TEXT_SET_PACK_OPTION } function hasLowMidLevelParts(resourceIDs) { return !!_.find(resourceIDs, function(resource) { return ( parseInt(resource.material_type_id) === SazConstants.ISL_MATERIAL_TYPE_ID && resource.level === SazConstants.MID_READING_LEVEL ); }); } function hasHighLevelParts(resourceIDs) { return !!_.find(resourceIDs, function(resource) { return ( parseInt(resource.material_type_id) === SazConstants.ISL_MATERIAL_TYPE_ID && resource.level === SazConstants.HIGH_READING_LEVEL ); }); } function chooseSelectedResources() { var thisHasRead = false; var thisHasListen = false; var thisHasQuiz = false; var thisHasWatch = false; var thisHasWorksheet = false; var thisHasFormativeWorksheet = false; var thisHasIsl = false; var selectedResources = []; var selectedResourcesWithActivities = []; var resources = resourceList.getResources(); for (var i = 0; i < resources.length; ++i) { var resource = resources[i]; var resourceIDs = resource['resourceIDs']; for (var x = 0; x < resourceIDs.length; ++x) { var resourceID = resourceIDs[x]; if (resourceID.checked) { var myObj = createSelectedResource(resource, resourceID); if (myObj === null) { continue; } selectedResources.push(myObj); thisHasListen = thisHasListen || resourceID.cbtype === ctrl.activityTypeIds.LISTEN; thisHasRead = thisHasRead || resourceID.cbtype === ctrl.activityTypeIds.READ; thisHasQuiz = thisHasQuiz || resourceID.cbtype === ctrl.activityTypeIds.QUIZ; thisHasWatch = thisHasWatch || resourceID.cbtype === ctrl.activityTypeIds.WATCH; thisHasWorksheet = thisHasWorksheet || resourceID.cbtype === ctrl.activityTypeIds.WORKSHEET; thisHasFormativeWorksheet = thisHasFormativeWorksheet || resourceID.cbtype === ctrl.activityTypeIds.FORMATIVE_WORKSHEET; thisHasIsl = thisHasIsl || resourceID.cbtype === ctrl.activityTypeIds.ISL; var selectedResourceObj = { resource : resource, thisHasListen : thisHasListen, thisHasRead : thisHasRead, thisHasQuiz : thisHasQuiz || thisHasFormativeWorksheet, thisHasWatch : thisHasWatch, thisHasWorksheet : thisHasWorksheet, thisHasFormativeWorksheet : thisHasFormativeWorksheet || thisHasQuiz, thisHasIsl : thisHasIsl }; selectedResourcesWithActivities.push(selectedResourceObj); } } } return {selectedResources: selectedResources, selectedResourcesWithActivities: selectedResourcesWithActivities}; } function getSelectedVocabGameTypes() { var vocabTypes = []; if (ctrl.getLocked()) { if (ctrl.canExistingAssignmentVocabVocabulary) { vocabTypes.push(1); } if (ctrl.canExistingAssignmentVocabSpelling) { vocabTypes.push(2); } if (ctrl.canExistingAssignmentVocabPhonics) { vocabTypes.push(3); } } else { if (ctrl.vocabVocabulary) { vocabTypes.push(1); } if (ctrl.vocabSpelling) { vocabTypes.push(2); } if (ctrl.vocabPhonics) { vocabTypes.push(3); } } return vocabTypes; } function validateAssignedResources(response, allStudents, selectedStudentIDs, selectedStudents, selectedStudentAccounts) { var limitLookup = JSON.parse(response.data); var selectedResourcesObject = chooseSelectedResources(); var selectedResources = selectedResourcesObject.selectedResources; var selectedResourcesWithActivities = selectedResourcesObject.selectedResourcesWithActivities; var allStudentsStr = JSON.stringify(allStudents); var selectedStudentsStr = JSON.stringify(selectedStudentIDs); var selectedResourcesStr = JSON.stringify(selectedResources); var title = detectAssignOption(ctrl.title); var message = detectAssignOption(ctrl.message); var startDate = detectAssignOption(ctrl.startDate); var errorMessage = formAssigningErrorMessage( title, selectedResources, selectedResourcesWithActivities, selectedStudents, selectedStudentIDs, selectedStudentAccounts, startDate, limitLookup ); if (errorMessage.length > 0) { ctrl.savingData = false; ctrl.showMessage(errorMessage); } else { doAssignResources( allStudentsStr, selectedStudentsStr, selectedResourcesStr, title, message, startDate ); } } function createUnitPackResource(resource, resourceID) { var myObj = createGeneralResource(resource, resourceID); var languageId = parseInt(resourceID.saz_language_id); if (!ctrl.sazEnglishSelected && (_.isNaN(languageId) || languageId === SazConstants.ENGLISH_LANGUAGE_ID)) { return null; } if (!ctrl.sazSpanishSelected && languageId === SazConstants.SPANISH_LANGUAGE_ID) { return null; } if (! (ctrl.sazEnglishSelected || ctrl.sazSpanishSelected)) { return null; } switch (parseInt(resourceID.material_type_id)) { case SazConstants.UNIT_NONFICTION_BOOK_MATERIAL_TYPE_ID: case SazConstants.QUICK_READS_MATERIAL_TYPE_ID: if (('material-' + resourceID.level) !== ctrl.chosenReadingLevel) { return null; } break; case SazConstants.ISL_MATERIAL_TYPE_ID: if (ctrl.showISLLevels) { var level = resourceID.level === SazConstants.MID_READING_LEVEL ? FileCabinetConstants.ISL_LOW_MID_BUTTON_CHOICE : FileCabinetConstants.ISL_HIGH_BUTTON_CHOICE; if (level !== ctrl.chosenISLLevel) { return null; } } break; } return myObj; } function createISLPackResource(resource, resourceID) { var myObj = createGeneralResource(resource, resourceID); if (myObj.cbtype === ctrl.activityTypeIds.ISL && ctrl.showISLLevels) { var level = resourceID.level === SazConstants.MID_READING_LEVEL ? FileCabinetConstants.ISL_LOW_MID_BUTTON_CHOICE : FileCabinetConstants.ISL_HIGH_BUTTON_CHOICE; if (level !== ctrl.chosenISLLevel) { return null; } } return myObj; } function createSITNResource(resource, resourceID) { var myObj = createGeneralResource(resource, resourceID); if (ctrl.showSITNLevels) { if (resource['related_resource_ids'] && resource['related_resource_ids'][ctrl.chosenSITNLevel] && resource['related_resource_ids'][ctrl.chosenSITNLevel]['id']) { myObj.id2 = resource['related_resource_ids'][ctrl.chosenSITNLevel]['id']; } else { return null; } } return myObj; } function createStorylineLessonPackResource(resource, resourceID) { var myObj = createGeneralResource(resource, resourceID); switch (parseInt(resourceID.material_type_id)) { case SazConstants.UNIT_NONFICTION_BOOK_MATERIAL_TYPE_ID: case SazConstants.QUICK_READS_MATERIAL_TYPE_ID: if (('material-' + resourceID.level) !== ctrl.chosenReadingLevel) { return null; } break; case SazConstants.ISL_COMPONENT_MATERIAL_TYPE_ID: myObj.cbtype = ActivityTypeConstants.INTERACTIVE_COMPONENT_ACTIVITY_ID; break; } return myObj; } function createSAZReadingLevelResource(resource, resourceID) { var myObj = createGeneralResource(resource, resourceID); if (ctrl.showReadingLevels && ctrl.chosenReadingLevel && resource.material_type_id) { switch (parseInt(resource.material_type_id)) { case SazConstants.UNIT_NONFICTION_BOOK_MATERIAL_TYPE_ID: case SazConstants.QUICK_READS_MATERIAL_TYPE_ID: if (resource['related_resource_ids'] && resource['related_resource_ids'][ctrl.chosenReadingLevel] && resource['related_resource_ids'][ctrl.chosenReadingLevel]['id']) { myObj.id2 = resource['related_resource_ids'][ctrl.chosenReadingLevel]['id']; } else { return null; } break; } } return myObj; } function createGeneralResource(resource, resourceID) { return { id2 : resourceID.id, cbtype : resourceID.cbtype }; } function createSelectedResource(resource, resourceID) { if (resource['resource_type'] === FileCabinetConstants.UNIT_PACK_OPTION) { return createUnitPackResource(resource, resourceID); } if (resource['resource_type'] === FileCabinetConstants.ISL_PACK_OPTION) { return createISLPackResource(resource, resourceID); } if (resource['material_content_type'] === 'sitn') { return createSITNResource(resource, resourceID); } if (resource['resource_type'] === FileCabinetConstants.STORYLINE_LESSON_PACK_OPTION) { return createStorylineLessonPackResource(resource, resourceID); } if (resource.material_type_id) { return createSAZReadingLevelResource(resource, resourceID); } return createGeneralResource(resource, resourceID); } function detectAssignOption(option) { if (option == null || option.trim().length < 1) { option = ''; } return option; } function formAssigningErrorMessage(title, selectedResources, selectedResourcesWithActivities, selectedStudents, selectedStudentIDs, selectedStudentAccounts, startDate, limitLookup) { var errorMessage = ''; var date = new Date((new Date()).toString().substring(0,15)); if (title.trim().length < 1) { errorMessage = errorMessage + " and enter a title"; } if (selectedResources.length < 1) { errorMessage = errorMessage + " and choose at least one activity"; } else { errorMessage = errorMessage + ctrl.generateErrorByResource(selectedResourcesWithActivities); } if (selectedStudents.length < 1) { errorMessage = errorMessage + " and choose at least one student"; } if (ctrl.showUnitSazLanguages && !(ctrl.sazEnglishSelected || ctrl.sazSpanishSelected)) { errorMessage = errorMessage + " and select a language"; } if (startDate != 'No Due Date'){ var submittedDate = startDate.split("/"); var dueDate = new Date(submittedDate[2], submittedDate[0] - 1, submittedDate[1]); errorMessage = date > dueDate ? errorMessage + " and select a valid due date" : errorMessage; } if (errorMessage.length < 1 && selectedStudents != null) { for (var i = 0; i < selectedStudents.length; ++i) { var studentID = selectedStudentIDs[i]; var studentAccount = selectedStudentAccounts[i]; var limit = limitLookup[studentID]; if (ctrl.isNewlySelectedStudent(studentAccount) && (limit + ctrl.resourceCount) >= ctrl.maxAssignableResources) { errorMessage = errorMessage + ', ' + selectedStudents[i].student_name; } } if (errorMessage.length > 0) { errorMessage = errorMessage.trim() + "."; errorMessage = errorMessage.substr(2); errorMessage = "The following students have exceeded their assignment limit: " + errorMessage; } } else { errorMessage = errorMessage.trim() + "."; errorMessage = errorMessage.substr(3); errorMessage = "Please" + errorMessage; } return errorMessage; } function updateExistingGameTypeIds() { var newGameTypes=[]; var selectedVocabGameTypes = getSelectedVocabGameTypes(); if (selectedVocabGameTypes.indexOf(1) >= 0) { newGameTypes.push({gameTypeId:1}); } if (selectedVocabGameTypes.indexOf(2) >= 0) { newGameTypes.push({gameTypeId:2}); } if (selectedVocabGameTypes.indexOf(3) >= 0) { newGameTypes.push({gameTypeId:3}); } _.each(resourceList.getResources(),function(resource) { resource.existingGameTypeIds=newGameTypes; }) } function doAssignResources(allStudentsStr, selectedStudentsStr, selectedResourcesStr, title, message, startDate) { var custom_assignment_id = ctrl.customAssignment == null ? 0 : ctrl.customAssignment.custom_assignment_id; updateExistingGameTypeIds(); var data = { subjectName : folders.getSubjectName(), custom_assignment_id : custom_assignment_id, allStudentsStr : allStudentsStr, selectedStudentsStr : selectedStudentsStr, selectedResourcesStr : selectedResourcesStr, resource_collection_id : resourceList.getFolderID(), message : btoa(message), title : btoa(title), startDate : btoa(startDate), constructedResponseEnabled : ctrl.constructedResponseEnabled, selectedVocabGameTypes : getSelectedVocabGameTypes(), vocabGroupIds : vocabGroupIds }; var url = "/api/resources/assignResources"; $http.post(url,JSON.stringify(data)).then(onRepos, onError); } function hitEnterKey(event) { if (event.target != null) { var element = $j(event.target); var titleId = 'title-for-students-to-see'; var messageId = 'message-to-students'; var dateId = 'start-date-input'; var assignButtonId = 'assignResourceButton'; var allowedToAssign = ( element.attr('id') === titleId || element.attr('id') === messageId || element.attr('id') === dateId || element.attr('id') === assignButtonId ); if (allowedToAssign) { ctrl.setAssignedResources(); return; } } modalKeyDown(event, ctrl.close,'js-assign-resources') } var onRepos = function(response) { close(); ctrl.savingData = false; if (response.data) { var parentcontroller = resourceList.getParentcontroller(); if (parentcontroller != null) { parentcontroller.customAssignmentSaved(); } if (fileCabinetRibbonService.ribbonActive()) { fileCabinetRibbonService.closeFileCabinetRibbon(); } messageHandler.publishSuccess('Assignment created. Track progress on the ','assignments page.',ctrl.assignmentRedirect); } else { messageHandler.publishError('Could not assign resources. Please refresh and try again.'); } }; var onError = function(reason) { ctrl.savingData = false; messageHandler.publishError('Failed Assigning Resources. Please refresh and try again.'); }; } /* Outside of AssignResourcesController */ self.show = function () { ModalService.showModal({ controller: [ 'folders', 'fileCabinetRibbonService', 'resourceList','close','studentList','MessageBox', '$http', 'messageHandler', '$window', 'Authorization', 'SiteHelper', 'subjects', 'FileCabinetConstants', 'ActivityTypeConstants', 'SazConstants', '_', 'FeatureCheck', 'memberInfo', AssignResourcesController ], controllerAs: '$ctrl', templateUrl: '/shared/js/angular/ui/assign-students.html' }); } } return new AssignResources(); }]); })();