--- /dev/null
+(function() {
+ "use strict";
+
+ angular
+ .module("nero.app.cdt")
+ .directive("homeworkDetailsDirective", homeworkDetailsDirective);
+
+ /*
+ Directive that represent a homework in the interface
+ */
+ function homeworkDetailsDirective() {
+ return {
+ restrict: "E",
+ scope: {
+ isToDoHomework: "=",
+ homeworks: "=",
+ header: "=",
+ isOpen: "="
+ },
+ templateUrl: contextPath + "/js/homework-details/homework-details.html?t="+cdtTimestamp,
+ controller: HomeworkDetailsController,
+ controllerAs: "HomeworkDetailsCtrl",
+ bindToController: true
+ };
+ }
+
+ HomeworkDetailsController.$inject = ["cdtProperties", "panelService", "homeworkService", "edxService",
+ "role_constants", "homeworkType_constants", "toastr", "$uibModal", "$filter", "$translate", "$rootScope"];
+
+ function HomeworkDetailsController(cdtProperties, panelService, homeworkService, edxService,
+ roles, homeworkTypes, toastr, $uibModal, $filter, $translate, $rootScope) {
+ var vm = this;
+ vm.estimationValues = getEstimationValues();
+ vm.roles = roles;
+ vm.userProfile = -1;
+ vm.isTeacher = isTeacher;
+ vm.isStudent = isStudent;
+ vm.isParent = isParent;
+ vm.getNextSessions = getNextSessions;
+ vm.isEditionMode = cdtProperties.getIsEditor;
+ vm.setToDate = setToDate;
+ vm.getDateFormat = getDateFormat;
+ vm.getIdProperties = getIdProperties;
+ vm.isLesson = isLesson;
+ vm.isRevision = isRevision;
+ vm.onSave = onSaveHomework;
+ vm.onDelete = onDeleteHomework;
+ vm.createNewHomework = createNewHomework;
+ vm.isAddHomeworkOpen = false;
+ vm.isDispayedAddHomework = isDispayedAddHomework;
+ vm.isDiplayDeliverButton = isDiplayDeliverButton;
+ vm.onToggleHomeworkDone = onToggleHomeworkDone;
+ vm.onDeliverHomework = onDeliverHomework;
+ vm.displayEdxWindow = displayEdxWindow;
+ vm.runEdxContent = runEdxContent;
+ vm.getHomeworkTimeInfos = getHomeworkTimeInfos;
+ vm.goToSession = goToSession;
+
+ // See http://myforce.github.io/angularjs-dropdown-multiselect/#/ for option details
+ vm.studentSettings = {
+ displayProp: 'lastName',
+ idProp: 'userId',
+ externalIdProp: '',
+ keyboardControls: true,
+ //selectionLimit: ??,
+ //enableSearch: true,
+ template: '{{option.lastName}} {{option.firstName}}',
+ scrollableHeight: '300px',
+ scrollable: true,
+ styleActive: true
+ };
+
+ //<i class="glyphicon glyphicon-user"></i>
+ vm.translations = {};
+
+ $translate.onReady().then( function() {
+ vm.translations = {
+ buttonDefaultText: $filter("translate")("nero.cdt.homework-details.button-default-text-label"),
+ checkAll: $filter("translate")("nero.cdt.homework-details.check-all-label"),
+ uncheckAll: $filter("translate")("nero.cdt.homework-details.uncheck-all-label"),
+ dynamicButtonTextSuffix: $filter("translate")("nero.cdt.homework-details.button-label-students")
+ };
+ });
+
+ if (vm.userProfile == -1) {
+ cdtProperties.getCurrentUserProfile().then(function(profile) {
+ vm.userProfile = profile;
+ });
+ }
+
+ /*
+ Redirect to homework target session
+ */
+ function goToSession(targetSessionId) {
+ if (targetSessionId > 0) {
+ var session = {
+ sessionId: targetSessionId
+ };
+ var isSummarySession = true;
+ //isPersonalGroup
+ cdtProperties.setSelectedSession(session, isSummarySession, vm.userProfile);
+ var forceRefresh = true;
+ $rootScope.$broadcast("refresh-calendar", {forceRefresh: forceRefresh});
+ }
+ }
+
+ /*
+ Display the list of target sessions for homework
+ */
+ function getNextSessions() {
+ return cdtProperties.getSelectedSession().nextSessions;
+ }
+
+ /*
+ Toggle homework done value
+ */
+ function onToggleHomeworkDone(homework) {
+ vm.myPromise = homeworkService.markHomeworkAsDone(homework)
+ .then(function(data) {
+ toastr.success(data.message);
+ })
+ ["catch"](function(message) {
+ homework.isDone = !homework.isDone;
+ toastr.error(message);
+ });
+ }
+
+ /*
+ Create and display a new homework
+ */
+ function createNewHomework(type) {
+ var session = cdtProperties.getSelectedSession();
+
+ vm.myPromise = homeworkService.createNewHomeworkForSession(session, homeworkTypes[type])
+ .then(function(data) {
+ //to open the homework after added
+ data.homework.isOpen = true;
+ session.givenHomework.push(data.homework);
+ data.homework.edxWorkAssignments = [];
+ $rootScope.$broadcast("refresh-homeworks");
+ toastr.success(data.message);
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ }
+
+ /*
+ Update modified homework
+ handle date format if toDate is picked up freely
+ */
+ function onSaveHomework(homework) {
+ if (homework.targetSessionId == null) {
+ homework.toDate += " 00:00";
+ }
+ vm.myPromise = homeworkService.updateHomework(homework)
+ .then(function(data) {
+ toastr.success(data.message);
+ homework.isDescriptionEditMode = false;
+ $rootScope.$broadcast("refresh-homeworks");
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ }
+
+ /*
+ Calling deletion service and update current session
+ */
+ function onDeleteHomework(homework, index) {
+ vm.myPromise = homeworkService.deleteHomework(homework, index)
+ .then(function(data) {
+ if (vm.isToDoHomework) {
+ cdtProperties.getSelectedSession().toDoHomework.splice(index, 1);
+ }
+ else {
+ cdtProperties.getSelectedSession().givenHomework.splice(index, 1);
+ }
+ $rootScope.$broadcast("refresh-homeworks");
+ toastr.success(data.message);
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ }
+
+ /*
+ Change date format if the target is a session or a date picked up
+ */
+ function getDateFormat(homework) {
+ if (homework.targetSessionId == null || homework.targetSessionId == 0) {
+ return "DD/MM/YYYY";
+ }
+ else {
+ return "DD/MM/YYYY HH:mm";
+ }
+ }
+
+ /**
+ Return the homework session time info
+ */
+ function getHomeworkTimeInfos(homework) {
+ var label = "";
+ var tagetDate = moment(homework.toDate, "DD/MM/YYYY HH:mm");
+ if (!vm.isToDoHomework) {
+ label = " pour le " + tagetDate.format('DD/MM');
+ }
+ if (tagetDate.hours() != 0 && ( panelService.isHomeworksPanelActive() || !vm.isToDoHomework)) {
+ label += " à " + tagetDate.format('HH:mm');
+ }
+ return label;
+ }
+
+ function setToDate(homework, toDate, sessionId) {
+ if (toDate != undefined && sessionId != undefined) {
+ homework.targetSessionId = sessionId;
+ homework.toDate = toDate;
+ }
+ else {
+ homework.targetSessionId = null;
+ }
+ }
+
+ function getIdProperties(homework) {
+ if (homework.idProperties == undefined) {
+ homework.idProperties = {
+ propertyName: "homeworkId",
+ propertyValue: homework.homeworkId
+ };
+ }
+
+ return homework.idProperties;
+ }
+
+ /*
+ Open the file selector
+ */
+ function onDeliverHomework(homework) {
+ var modalInstance = $uibModal.open({
+ templateUrl: Global.Theme.getURLPortal() + Liferay.ThemeDisplay.getPathJavaScript() + "/angularjs/file-selector/file-selector.html?t="+Liferay.extTimestamp,
+ controller: "FileSelectorController",
+ controllerAs: "FileSelectorCtrl",
+ resolve: {
+ parameters : function() {
+ return {
+ maxFileNumber : 1
+ }
+ },
+ }
+ });
+
+ modalInstance.result.then(function(attachFiles) {
+ if (attachFiles.length > 0) {
+ homeworkService.sendHomeworkToDropbox(homework, attachFiles[0])
+ .then(function(data) {
+ homework.isDone = true;
+ toastr.success(data.message);
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ }
+ }, function() {
+ // Cancel file selection so don't do anything
+ });
+ }
+
+ /*
+ If user is the session teacher then he can add new homework
+ */
+ function isDispayedAddHomework() {
+ return (vm.isEditionMode() && !vm.isToDoHomework);
+ }
+
+ /*
+ If the teacher expects a delivery then display button to students
+ */
+ function isDiplayDeliverButton(toSentBack) {
+ return (vm.isStudent() && toSentBack);
+ }
+
+ /*
+ Return true if current user is a teacher
+ */
+ function isTeacher() {
+ return (vm.userProfile == roles["TEACHER"]);
+ }
+
+ /*
+ Return true if current user is a student
+ */
+ function isStudent() {
+ return (vm.userProfile == roles["STUDENT"]);
+ }
+
+ /*
+ Return true if current user is a parent
+ */
+ function isParent() {
+ return (vm.userProfile == roles["PARENT"]);
+ }
+
+ /*
+ Return true if homework is a lesson
+ */
+ function isLesson(homework) {
+ return (homework.type === homeworkTypes['LESSON']);
+ }
+
+ /*
+ Return true if homework is a revision
+ */
+ function isRevision(homework) {
+ return (homework.type === homeworkTypes['REVISION']);
+ }
+
+ /*
+ Return estimation values array to display with an id that represent the duration in minutes
+ */
+ function getEstimationValues() {
+ return [{
+ id: 10,
+ name: "10 min"
+ }, {
+ id: 20,
+ name: "20 min"
+ }, {
+ id: 30,
+ name: "30 min"
+ }, {
+ id: 45,
+ name: "45 min"
+ }, {
+ id: 60,
+ name: "1h"
+ }, {
+ id: 120,
+ name: "2h"
+ }, {
+ id: 150,
+ name: "plus de 2h"
+ }];
+ }
+
+
+ function displayEdxWindow(homework) {
+ var modalInstance = $uibModal.open({
+ templateUrl: contextPath + "/js/edx/edx.html?t="+cdtTimestamp,
+ controller: "EdxController",
+ controllerAs: "EdxCtrl",
+ resolve: {
+ session: function() {
+ return null;
+ },
+ homework: function() {
+ return homework;
+ },
+ groupId: function() {
+ return homework.groupId;
+ },
+ edxWorkAssignments: function() {
+ return homework.edxWorkAssignments;
+ }
+ }
+ });
+
+ // selectedItems is a table of pairs courses/sections/subSections/units/items title/urls
+ modalInstance.result.then(function(selectedItems) {
+ homework.edxWorkAssignments = selectedItems;
+// for (var i=0 ; i < selectedItems.length ; i++) {
+
+// // Check if the edx has not already been given
+// var isNew = true;
+// for (var i = 0 ; i < homework.edxWorkAssignments.length ; i++) {
+// var existingEdxWorkAssignment = homework.edxWorkAssignments[i];
+// if (existingEdxWorkAssignment.title == selectedItems[i].title) {
+// isNew = false;
+// }
+// }
+// if (isNew) {
+// homework.edxWorkAssignments.push(selectedItems[i]);
+// }
+// }
+ }, function() {
+ // cancel
+ });
+ }
+
+ function runEdxContent(edxAssignment) {
+ var modalInstance = $uibModal.open({
+ templateUrl: contextPath + "/js/edx/edxRunner.html?t="+cdtTimestamp,
+ controller: "EdxRunnerController",
+ controllerAs: "EdxRunnerCtrl",
+ size: "nero-large",
+ //windowClass: "edt-modal",
+ resolve: {
+ url: function() {
+ return edxAssignment.url
+ },
+ title: function() {
+ return edxAssignment.title;
+ }
+ },
+ backdrop: 'static', /* this prevent user interaction with the background (we have to stop the conversion) */
+ keyboard: false
+ });
+
+ modalInstance.result.then(function() {
+ //No return value expected
+ }, function() {
+ });
+
+ }
+
+
+ }
+})();