diff --git a/frontend/static/js/challenge.js b/frontend/static/js/challenge.js index f64cd499..22595e29 100644 --- a/frontend/static/js/challenge.js +++ b/frontend/static/js/challenge.js @@ -219,18 +219,49 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"]) o.found = $scope.my.exercices[$rootScope.current_exercice].solved_matrix[kid]; this.push(o); }, $scope.flags); + + $scope.mcqs = []; + angular.forEach($scope.my.exercices[$rootScope.current_exercice].mcqs, function(mcq,qid) { + var o = { + title: mcq.title, + kind: mcq.kind, + solved: mcq.solved, + choices: {} + }; + angular.forEach(mcq["choices"], function(choice,cid) { + this[cid] = { + label: choice, + value: false + }; + }, o["choices"]); + this.push(o); + }, $scope.mcqs); } } waitMy(); $scope.ssubmit = function() { - var flgs = {} + var resp = {} - angular.forEach($scope.flags, function(flag,kid) { - flgs[flag.name] = flag.value; - }); + if ($scope.flags && $scope.flags.length) + { + resp["flags"] = {}; + angular.forEach($scope.flags, function(flag,kid) { + resp["flags"][flag.name] = flag.value; + }); + } - $http({ url: "/submit/" + $rootScope.current_exercice, method: "POST", data: flgs }).then(function(response, status, header, config) { + if ($scope.mcqs && $scope.mcqs.length) + { + resp["mcqs"] = {}; + angular.forEach($scope.mcqs, function(mcq) { + angular.forEach(mcq.choices, function(choice, cid) { + if (choice.value) resp["mcqs"][cid] = choice.value; + }) + }); + } + + $http({ url: "/submit/" + $rootScope.current_exercice, method: "POST", data: resp }).then(function(response, status, header, config) { $rootScope.messageClass = {"text-success": true}; $rootScope.message = response.data.errmsg; $rootScope.sberr = ""; @@ -242,7 +273,7 @@ angular.module("FICApp", ["ngRoute", "ngSanitize"]) var checkDiff = function() { $http.get("/my.json").then(function(response) { var my = response.data; - if ($scope.my.exercices[$rootScope.current_exercice].solved_time != my.exercices[$rootScope.current_exercice].solved_time) { + if ($scope.my.exercices[$rootScope.current_exercice].tries != my.exercices[$rootScope.current_exercice].tries || $scope.my.exercices[$rootScope.current_exercice].solved_time != my.exercices[$rootScope.current_exercice].solved_time) { $rootScope.refresh(); $scope.my = my; waitMy(); diff --git a/frontend/static/views/theme.html b/frontend/static/views/theme.html index d5dadd63..abcd4508 100644 --- a/frontend/static/views/theme.html +++ b/frontend/static/views/theme.html @@ -67,6 +67,17 @@ + +
+

+ +
+
+
diff --git a/libfic/team_my.go b/libfic/team_my.go index 406c8416..60b4b2c5 100644 --- a/libfic/team_my.go +++ b/libfic/team_my.go @@ -17,22 +17,29 @@ type myTeamFile struct { type myTeamHint struct { HintId int64 `json:"id"` Title string `json:"title"` - Content *string `json:"content"` - File *string `json:"file"` + Content *string `json:"content,omitempty"` + File *string `json:"file,omitempty"` Cost int64 `json:"cost"` } +type myTeamMCQ struct { + Title string `json:"title"` + Kind string `json:"kind"` + Choices map[int64]string `json:"choices,omitempty"` + Solved *time.Time `json:"solved,omitempty"` +} type myTeamExercice struct { ThemeId int `json:"theme_id"` Statement string `json:"statement"` - Hints []myTeamHint `json:"hints"` + Hints []myTeamHint `json:"hints,omitempty"` Gain float64 `json:"gain"` - Files []myTeamFile `json:"files"` - Keys []string `json:"keys"` - SolvedMat []bool `json:"solved_matrix"` - SolvedTime time.Time `json:"solved_time"` - SolvedRank int64 `json:"solved_rank"` - Tries int64 `json:"tries"` - VideoURI string `json:"video_uri"` + Files []myTeamFile `json:"files,omitempty"` + Keys []string `json:"keys,omitempty"` + SolvedMat []bool `json:"solved_matrix,omitempty"` + MCQs []myTeamMCQ `json:"mcqs,omitempty"` + SolvedTime time.Time `json:"solved_time,omitempty"` + SolvedRank int64 `json:"solved_rank,omitempty"` + Tries int64 `json:"tries,omitempty"` + VideoURI string `json:"video_uri,omitempty"` } type myTeam struct { Id int64 `json:"team_id"` @@ -121,6 +128,22 @@ func MyJSONTeam(t *Team, started bool) (interface{}, error) { } } + // Expose exercice MCQs + + exercice.MCQs = []myTeamMCQ{} + + if mcqs, err := e.GetMCQ(); err != nil { + return nil, err + } else { + for _, mcq := range mcqs { + choices := map[int64]string{} + for _, e := range mcq.Entries { + choices[e.Id] = e.Label + } + exercice.MCQs = append(exercice.MCQs, myTeamMCQ{mcq.Title, mcq.Kind, choices, t.HasPartiallyRespond(mcq)}) + } + } + // Expose exercice keys exercice.Keys = []string{}