From e3a726129ed31913368cb2eac1b389c4476c058f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20G=C3=A4rtner?= <andreas.gaertner@mni.thm.de>
Date: Mon, 26 Sep 2016 18:47:26 +0200
Subject: [PATCH] Add flashcard feature option to addons panel and feature
 controller

---
 src/main/webapp/app/controller/Feature.js     | 45 +++++++++++++------
 .../webapp/app/view/diagnosis/AddOnsPanel.js  |  5 ++-
 2 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/src/main/webapp/app/controller/Feature.js b/src/main/webapp/app/controller/Feature.js
index 28d62357b..a6713b1ce 100644
--- a/src/main/webapp/app/controller/Feature.js
+++ b/src/main/webapp/app/controller/Feature.js
@@ -146,6 +146,7 @@ Ext.define("ARSnova.controller.Feature", {
 			jitt: this.applyJittFeature,
 			lecture: this.applyLectureFeature,
 			feedback: this.applyFeedbackFeature,
+			flashcardFeature: this.applyFlashcardsFeature,
 			interposed: this.applyInterposedFeature,
 			learningProgress: this.applyLearningProgressFeature,
 			slides: this.applySlidesFeature
@@ -175,6 +176,7 @@ Ext.define("ARSnova.controller.Feature", {
 		if (!useCases.custom && !useCases.total) {
 			features.jitt = false;
 			features.learningProgress = false;
+			features.flashcardFeature = false;
 			features.interposed = false;
 			features.feedback = false;
 			features.lecture = false;
@@ -182,7 +184,7 @@ Ext.define("ARSnova.controller.Feature", {
 			features.slides = false;
 
 			if (useCases.flashcard) {
-				features.lecture = true;
+				features.flashcardFeature = true;
 			}
 
 			if (useCases.liveFeedback) {
@@ -260,12 +262,32 @@ Ext.define("ARSnova.controller.Feature", {
 		if (ARSnova.app.userRole === ARSnova.app.USER_ROLE_SPEAKER) {
 			inClassPanel = tP.speakerTabPanel.inClassPanel;
 			container = inClassPanel.inClassButtons;
-			this.applyButtonChange(container, inClassPanel.liveFeedbackButton, enable, 3);
+			this.applyButtonChange(container, inClassPanel.liveFeedbackButton, enable, 4);
 		} else {
 			inClassPanel = tP.userTabPanel.inClassPanel;
 			container = inClassPanel.actionButtonPanel;
-			this.applyButtonChange(container, inClassPanel.voteButton, enable, 3);
+			this.applyButtonChange(container, inClassPanel.voteButton, enable, 4);
+		}
+	},
+
+	/**
+	 * apply changes affecting the "flashcards" feature
+	 */
+	applyFlashcardsFeature: function (enable) {
+		var tP = ARSnova.app.mainTabPanel.tabPanel;
+		var inClassPanel, container, position;
+
+		if (ARSnova.app.userRole === ARSnova.app.USER_ROLE_SPEAKER) {
+			inClassPanel = tP.speakerTabPanel.inClassPanel;
+			container = inClassPanel.inClassButtons;
+			position = 3;
+		} else {
+			inClassPanel = tP.userTabPanel.inClassPanel;
+			container = inClassPanel.inClassButtons;
+			position = 2;
 		}
+
+		this.applyButtonChange(container, inClassPanel.flashcardQuestionButton, enable, position);
 	},
 
 	/**
@@ -379,17 +401,17 @@ Ext.define("ARSnova.controller.Feature", {
 			inClass.updateActionButtonElements();
 
 			if (features.jitt && !features.lecture) {
-				inClass.changeActionButtonsMode(features);
 				tabPanel.showcaseQuestionPanel.setPreparationMode();
 				tabPanel.newQuestionPanel.setVariant('preparation');
+			} else if (features.flashcardFeature) {
+				tabPanel.showcaseQuestionPanel.setFlashcardMode();
+				tabPanel.newQuestionPanel.setVariant('flashcard');
 			} else {
-				inClass.changeActionButtonsMode(features);
 				tabPanel.showcaseQuestionPanel.setLectureMode();
 				tabPanel.newQuestionPanel.setVariant('lecture');
 			}
-			if (features.slides) {
-				inClass.changeActionButtonsMode(features);
-			}
+
+			inClass.changeActionButtonsMode(features);
 		} else {
 			// hide questionsPanel tab when session has no question features active
 			tP.userQuestionsPanel.tab.setHidden(!hasQuestionFeatures);
@@ -413,8 +435,6 @@ Ext.define("ARSnova.controller.Feature", {
 			if (features.slides) {
 				lectureButtonText = Messages.PRESENTATION;
 				questionsButtonText = Messages.MY_QUESTIONS;
-			} else if (features.flashcard) {
-				lectureButtonText = Messages.FLASHCARDS;
 			} else if (features.peerGrading) {
 				lectureButtonText = Messages.EVALUATION_QUESTIONS;
 			}
@@ -543,15 +563,11 @@ Ext.define("ARSnova.controller.Feature", {
 		if (features.slides && !features.lecture && !features.jitt) {
 			panel.questionOptions.setPressedButtons([indexMap[Messages.SLIDE]]);
 			panel.optionsToolbar.setHidden(true);
-		} else if (features.flashcard) {
-			panel.questionOptions.setPressedButtons([indexMap[Messages.FLASHCARD]]);
-			panel.optionsToolbar.setHidden(true);
 		} else if (features.peerGrading) {
 			panel.questionOptions.setPressedButtons([indexMap[Messages.EVALUATION]]);
 			panel.optionsToolbar.setHidden(true);
 		} else if (features.clicker) {
 			options[indexMap[Messages.FREETEXT]].hide();
-			options[indexMap[Messages.FLASHCARD]].hide();
 			options[indexMap[Messages.EVALUATION]].hide();
 			options[indexMap[Messages.SCHOOL]].hide();
 			options[indexMap[Messages.GRID]].hide();
@@ -559,6 +575,7 @@ Ext.define("ARSnova.controller.Feature", {
 		} else {
 			panel.optionsToolbar.setHidden(false);
 			panel.questionOptions.config.showAllOptions();
+			options[indexMap[Messages.FLASHCARD]].hide();
 			if (features.slides) {
 				panel.questionOptions.setPressedButtons([indexMap[Messages.SLIDE]]);
 			}
diff --git a/src/main/webapp/app/view/diagnosis/AddOnsPanel.js b/src/main/webapp/app/view/diagnosis/AddOnsPanel.js
index d7b310a91..26a230778 100644
--- a/src/main/webapp/app/view/diagnosis/AddOnsPanel.js
+++ b/src/main/webapp/app/view/diagnosis/AddOnsPanel.js
@@ -113,6 +113,9 @@ Ext.define('ARSnova.view.diagnosis.AddOnsPanel', {
 				}, {
 					name: 'jitt',
 					label: Messages.PREPARATION_QUESTIONS_LONG
+				}, {
+					name: 'flashcardFeature',
+					label: Messages.FLASHCARDS
 				}, {
 					name: 'interposed',
 					label: Messages.QUESTIONS_FROM_STUDENTS
@@ -177,7 +180,7 @@ Ext.define('ARSnova.view.diagnosis.AddOnsPanel', {
 
 	validateSelection: function (button) {
 		var selection = this.getFeatureValues();
-		if (!selection.lecture && !selection.interposed && !selection.jitt && !selection.feedback && !selection.slides) {
+		if (!selection.lecture && !selection.interposed && !selection.jitt && !selection.flashcardFeature && !selection.feedback && !selection.slides) {
 			Ext.Msg.alert(Messages.NOTIFICATION, Messages.FEATURE_SAVE_ERROR, function () {
 				button.enable();
 			});
-- 
GitLab