Commit 4e2908eea9a882c5f44d596efb4226be61e0c4c0

Authored by Nikita Kulshreshtha
1 parent 75263b72

added back-end code fro lab execrice save

400-SOURCECODE/AIAHTML5.API/AIAHTML5.API.csproj
@@ -130,6 +130,7 @@ @@ -130,6 +130,7 @@
130 <DependentUpon>Global.asax</DependentUpon> 130 <DependentUpon>Global.asax</DependentUpon>
131 </Compile> 131 </Compile>
132 <Compile Include="Models\DBModel.cs" /> 132 <Compile Include="Models\DBModel.cs" />
  133 + <Compile Include="Models\LabExercise.cs" />
133 <Compile Include="Models\PixelLocator.cs" /> 134 <Compile Include="Models\PixelLocator.cs" />
134 <Compile Include="Models\User.cs" /> 135 <Compile Include="Models\User.cs" />
135 <Compile Include="Models\UserUtility.cs" /> 136 <Compile Include="Models\UserUtility.cs" />
400-SOURCECODE/AIAHTML5.API/Controllers/LabExerciseController.cs
1 -using Newtonsoft.Json.Linq; 1 +using Newtonsoft.Json;
  2 +using Newtonsoft.Json.Linq;
2 using System; 3 using System;
3 using System.Collections.Generic; 4 using System.Collections.Generic;
4 using System.Linq; 5 using System.Linq;
5 using System.Net; 6 using System.Net;
6 using System.Net.Http; 7 using System.Net.Http;
7 using System.Web.Http; 8 using System.Web.Http;
  9 +using log4net;
  10 +using AIAHTML5.API.Constants;
  11 +using AIAHTML5.API.Models;
  12 +using System.Collections;
8 13
  14 +using System.Data.SqlClient;
9 namespace AIAHTML5.API.Controllers 15 namespace AIAHTML5.API.Controllers
10 { 16 {
11 public class LabExerciseController : ApiController 17 public class LabExerciseController : ApiController
12 { 18 {
13 - // GET api/<controller> 19 + // GET api/authenticate
14 public IEnumerable<string> Get() 20 public IEnumerable<string> Get()
15 { 21 {
16 return new string[] { "value1", "value2" }; 22 return new string[] { "value1", "value2" };
17 } 23 }
18 24
19 - // GET api/<controller>/5 25 + // GET api/authenticate/5
20 public string Get(int id) 26 public string Get(int id)
21 { 27 {
22 return "value"; 28 return "value";
23 } 29 }
24 30
25 - // POST api/<controller>  
26 - public void Post([FromBody]JObject labExerciseUserAttemptData) 31 + // POST api/authenticate
  32 + public HttpResponseMessage Post([FromBody]JArray labExerciseUserAttemptData)
27 { 33 {
  34 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  35 + logger.Debug("inside insertLabExerciseAttempt Post LabExerciseController");
  36 +
  37 + try
  38 + {
  39 + LabExercise le = new LabExercise();
  40 + le.labExercise = new List<LabEcerciseDetails>();
  41 +
  42 + foreach (var item in labExerciseUserAttemptData.Children())
  43 + {
  44 + var itemProperties = item.Children<JProperty>();
  45 + //you could do a foreach or a linq here depending on what you need to do exactly with the value
  46 + var userId = itemProperties.FirstOrDefault(x => x.Name == "userId");
  47 + le.userId = Convert.ToInt32(userId.Value); ////This is a JValue type
  48 +
  49 + var labExerciseIdentifier = itemProperties.FirstOrDefault(x => x.Name == "labExerciseIdentifier");
  50 + le.labExerciseIdentifier = labExerciseIdentifier.Value.ToString(); ////This is a JValue type
  51 +
  52 + var lastQuestion = itemProperties.FirstOrDefault(x => x.Name == "LastQuestion");
  53 + le.lastQuestion = Convert.ToInt32(lastQuestion.Value); ////This is a JValue type
  54 +
  55 + var totalQuestions = itemProperties.FirstOrDefault(x => x.Name == "TotalQuestions");
  56 + le.totalQuestions = Convert.ToInt32(totalQuestions.Value); ////This is a JValue type
  57 +
  58 + var LabExerciseUserData = itemProperties.FirstOrDefault(x => x.Name == "LabExerciseUserData");
  59 + foreach (var labQuiz in LabExerciseUserData.Children())
  60 + {
  61 + var labQuizProperties = labQuiz.Children();
  62 + foreach (var lb in labQuizProperties)
  63 + {
  64 + var itemProperties1 = lb.Children<JProperty>();
  65 +
  66 + LabEcerciseDetails labExDetails = new LabEcerciseDetails();
  67 +
  68 + var MaxScore = itemProperties1.FirstOrDefault(x => x.Name == "MaxScore");
  69 + labExDetails.MaxScore = Convert.ToInt32(MaxScore.Value);
  70 +
  71 + var UserAnswer = itemProperties1.FirstOrDefault(x => x.Name == "UserAnswer");
  72 + labExDetails.UserAnswer = UserAnswer.Value.ToString();
  73 +
  74 + var QuestionNo = itemProperties1.FirstOrDefault(x => x.Name == "QuestionNo");
  75 + labExDetails.QuestionNo = Convert.ToInt32(QuestionNo.Value);
  76 +
  77 + var CorrectAnswer = itemProperties1.FirstOrDefault(x => x.Name == "CorrectAnswer");
  78 + labExDetails.CorrectAnswer = CorrectAnswer.Value.ToString();
  79 +
  80 + var DragItems = itemProperties1.FirstOrDefault(x => x.Name == "DragItems");
  81 + labExDetails.DragItems = DragItems.Value.ToString();
  82 +
  83 + var Score = itemProperties1.FirstOrDefault(x => x.Name == "Score");
  84 + labExDetails.Score = Convert.ToInt32(Score.Value);
  85 +
  86 +
  87 +
  88 + le.labExercise.Add(labExDetails);
  89 +
  90 + }
  91 + }
  92 + }
  93 + return new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent("insertyed") };
  94 +
  95 + }
  96 + catch (SqlException e)
  97 + {
  98 +
  99 + //logger.Fatal("SqlException occured for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
  100 +
  101 + //ArrayList supportMailList = UserUtility.GetSupportMailList();
  102 + //string mailSubject = AIAConstants.SQL_CONNECTION_ERROR_MAIL_SUBJECT;
  103 + //string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
  104 + //UserUtility.SendEmail(credentials, supportMailList, "", mailSubject, mailBody);
  105 +
  106 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
  107 + }
  108 + catch (Exception e)
  109 + {
  110 +
  111 + //logger.Fatal("Exception occured for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
  112 +
  113 + //ArrayList supportMailList = UserUtility.GetSupportMailList();
  114 + //string mailSubject = AIAConstants.EXCEPTION_IN_AIAHTML5_MAIL_SUBJECT;
  115 + //string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
  116 + //UserUtility.SendEmail(credentials, supportMailList, "", mailSubject, mailBody);
  117 +
  118 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.EXCEPTION_OCCURED) };
  119 +
  120 + }
  121 +
  122 +
  123 +
28 } 124 }
29 125
30 - // PUT api/<controller>/5 126 +
  127 +
  128 +
  129 +
  130 +
  131 +
  132 + // PUT api/authenticate/5
31 public void Put(int id, [FromBody]string value) 133 public void Put(int id, [FromBody]string value)
32 { 134 {
33 } 135 }
34 136
35 - // DELETE api/<controller>/5 137 + // DELETE api/authenticate/5
36 public void Delete(int id) 138 public void Delete(int id)
37 { 139 {
38 } 140 }
400-SOURCECODE/AIAHTML5.API/Models/DBModel.cs
@@ -861,5 +861,18 @@ namespace AIAHTML5.API.Models @@ -861,5 +861,18 @@ namespace AIAHTML5.API.Models
861 861
862 return result; 862 return result;
863 } 863 }
  864 +
  865 + internal int InsertLabExerciseData(int userId, string labExerciseIdentifier, int lastQusetion, int totalQuestions, List<> labExDetails )
  866 + {
  867 + return 1;
  868 +
  869 + }
  870 +
  871 +
  872 + internal int InsertLabExerciseDetails(int userId, string labExerciseIdentifier, int lastQusetion, int totalQuestions, List<> labExDetails )
  873 + {
  874 + return 1;
  875 +
  876 + }
864 } 877 }
865 } 878 }
866 \ No newline at end of file 879 \ No newline at end of file
400-SOURCECODE/AIAHTML5.API/Models/LabExercise.cs 0 → 100644
  1 +using log4net;
  2 +using System;
  3 +using System.Collections.Generic;
  4 +using System.Linq;
  5 +using System.Web;
  6 +
  7 +namespace AIAHTML5.API.Models
  8 +{
  9 + public class LabExercise
  10 + {
  11 +
  12 + public int userId { get; set; }
  13 + public string labExerciseIdentifier { get; set; }
  14 + public int lastQuestion { get; set; }
  15 + public int totalQuestions { get; set; }
  16 + public List<LabEcerciseDetails> labExercise;
  17 +
  18 +
  19 + internal static int insertLabExerciseAttempt(int userId, string labExerciseIdentifier, int LastQuestion, int TotalQuestions, List<LabEcerciseDetails> labExercise)
  20 + {
  21 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  22 + logger.Debug("inside insertLabExerciseAttempt for UserId =" + userId + ",labExerciseIdentifier= " + labExerciseIdentifier + ",LastQuestion= " + LastQuestion+ "TotalQuestions =" + TotalQuestions);
  23 +
  24 +
  25 + int result = 0;
  26 +
  27 + DBModel objModel = new DBModel();
  28 +
  29 + result = objModel.InsertLoginDetails(userId);
  30 +
  31 + return result;
  32 + }
  33 +
  34 + }
  35 +
  36 + public class LabEcerciseDetails
  37 + {
  38 +
  39 + public int MaxScore { get; set; }
  40 + public string UserAnswer { get; set; }
  41 + public int QuestionNo { get; set; }
  42 + public string CorrectAnswer { get; set; }
  43 + public string DragItems { get; set; }
  44 + public int Score { get; set; }
  45 + }
  46 +}
0 \ No newline at end of file 47 \ No newline at end of file
400-SOURCECODE/AIAHTML5.Web/app/controllers/LabExercController.js
@@ -10,10 +10,12 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -10,10 +10,12 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
10 $scope.Title = ""; 10 $scope.Title = "";
11 $scope.Imagepath = ""; 11 $scope.Imagepath = "";
12 $scope.DraggedList = []; 12 $scope.DraggedList = [];
13 - $scope.AnswerList = []; 13 + $scope.UserAttempt = [];
14 $scope.UserAnswersForAllQuestions = []; 14 $scope.UserAnswersForAllQuestions = [];
  15 + $scope.LabExerciseUserData = [];
15 $scope.LabExercise = []; 16 $scope.LabExercise = [];
16 $scope.dragableId = ""; 17 $scope.dragableId = "";
  18 + $scope.UserAttempt = [];
17 $scope.blReviewAttempt = false; 19 $scope.blReviewAttempt = false;
18 $scope.$on('$viewContentLoaded', function (event) { 20 $scope.$on('$viewContentLoaded', function (event) {
19 // code that will be executed ... 21 // code that will be executed ...
@@ -84,6 +86,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -84,6 +86,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
84 if (title != null) { 86 if (title != null) {
85 $scope.LabExerciseQuiz = title; 87 $scope.LabExerciseQuiz = title;
86 $scope.LabExerciseName = title.Topic; 88 $scope.LabExerciseName = title.Topic;
  89 + $scope.LabExerciseUserData = [];
87 $location.url("/lab-exercises-detail?labexercise=" + (title.Slug || "")); 90 $location.url("/lab-exercises-detail?labexercise=" + (title.Slug || ""));
88 } 91 }
89 92
@@ -95,6 +98,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -95,6 +98,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
95 $scope.LabExerciseName = keywords.labexercise; 98 $scope.LabExerciseName = keywords.labexercise;
96 $scope.LabExerciseModules = null; 99 $scope.LabExerciseModules = null;
97 $scope.LabExerciseBoxes = null; 100 $scope.LabExerciseBoxes = null;
  101 +
98 //alert($scope.LabExerciseName) 102 //alert($scope.LabExerciseName)
99 var labExerciseModulePath = '~/../content/data/json/le/' + $scope.LabExerciseName + '.json'; 103 var labExerciseModulePath = '~/../content/data/json/le/' + $scope.LabExerciseName + '.json';
100 104
@@ -109,6 +113,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -109,6 +113,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
109 $scope.TotalNumberofQuiz = result.LabExercise[index].NumberofQuestions; 113 $scope.TotalNumberofQuiz = result.LabExercise[index].NumberofQuestions;
110 $.each(result.LabExercise[index].Questions, function (index1, value1) { 114 $.each(result.LabExercise[index].Questions, function (index1, value1) {
111 if (result.LabExercise[index].Questions[index1].Number == $scope.quiznumber) { 115 if (result.LabExercise[index].Questions[index1].Number == $scope.quiznumber) {
  116 + $scope.MaxScore = result.LabExercise[index].Questions[index1].Options.length;
112 if (result.LabExercise[index].Questions[index1].ImagePath == "") { 117 if (result.LabExercise[index].Questions[index1].ImagePath == "") {
113 $("#imgblock").css("display", "none"); 118 $("#imgblock").css("display", "none");
114 //$("#imgblock").remove(); 119 //$("#imgblock").remove();
@@ -150,14 +155,16 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -150,14 +155,16 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
150 155
151 $scope.nextQuiz = function () { 156 $scope.nextQuiz = function () {
152 //need to save all questions till the current question number when user clicks on save 157 //need to save all questions till the current question number when user clicks on save
153 - if ($scope.dragableId!="") {  
154 - $scope.UserAnswersForAllQuestions.push({'QuestionNo':$scope.quiznumber,'UserAnswer':$scope.AnswerList}) 158 + //if ($scope.dragableId!="") {
  159 + // $scope.UserAnswersForAllQuestions.push({'QuestionNo':$scope.quiznumber,'UserAnswer':$scope.UserAttempt})
  160 +
  161 + //}
  162 + //else {
  163 + // //need to anattampted question means user ahs not dragged, dropped options so save blank
  164 + // $scope.UserAnswersForAllQuestions.push({ 'QuestionNo': $scope.quiznumber, 'UserAnswer': "" })
  165 + //}
  166 + $scope.CreateLabExerciseDataToSave();
155 167
156 - }  
157 - else {  
158 - //need to anattampted question means user ahs not dragged, dropped options so save blank  
159 - $scope.UserAnswersForAllQuestions.push({ 'QuestionNo': $scope.quiznumber, 'UserAnswer': "" })  
160 - }  
161 $scope.dragableId = ""; 168 $scope.dragableId = "";
162 if ($scope.quiznumber == $scope.TotalNumberofQuiz) 169 if ($scope.quiznumber == $scope.TotalNumberofQuiz)
163 return; 170 return;
@@ -168,7 +175,11 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -168,7 +175,11 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
168 } 175 }
169 176
170 $scope.prevQuiz = function () { 177 $scope.prevQuiz = function () {
  178 +
  179 + $scope.CreateLabExerciseDataToSave();
  180 +
171 $scope.dragableId = ""; 181 $scope.dragableId = "";
  182 + $scope.UserAttempt = [];
172 if ($scope.quiznumber == 1) 183 if ($scope.quiznumber == 1)
173 return; 184 return;
174 else 185 else
@@ -184,6 +195,21 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -184,6 +195,21 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
184 e.dataTransfer.setData('text/plain', this.innerHTML); 195 e.dataTransfer.setData('text/plain', this.innerHTML);
185 $scope.dragableId = $(this).attr("Id"); 196 $scope.dragableId = $(this).attr("Id");
186 197
  198 + //if user drag already selected answer from one blankbox to another than it gets id of blank box so need to get answer
  199 + if ($scope.dragableId.indexOf('T') != -1) {
  200 + var optionText = document.getElementById($scope.dragableId).innerHTML;
  201 + var currentQuizData = new jinqJs()
  202 + .from($scope.LabExData.LabExercise[0].Questions)
  203 + .where('Number == ' + $scope.quiznumber)
  204 + .select();
  205 + var optionData = new jinqJs()
  206 + .from(currentQuizData[0].Options)
  207 + .where('OptionTitle == ' + optionText)
  208 + .select();
  209 + var option = optionData[0].OptionNumber;
  210 + $scope.dragableId = optionText + '-' + option;
  211 + }
  212 +
187 }; 213 };
188 214
189 $scope.handleDragEnd = function (e) { 215 $scope.handleDragEnd = function (e) {
@@ -214,15 +240,15 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -214,15 +240,15 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
214 $.each(result.LabExercise[index].Questions, function (index1, value1) { 240 $.each(result.LabExercise[index].Questions, function (index1, value1) {
215 if (result.LabExercise[index].Questions[index1].Number == $scope.quiznumber) { 241 if (result.LabExercise[index].Questions[index1].Number == $scope.quiznumber) {
216 var Options = result.LabExercise[index].Questions[index1].Options; 242 var Options = result.LabExercise[index].Questions[index1].Options;
217 - $scope.maxScore = Options.length; 243 +
218 244
219 $.each(Options, function (inx, value2) { 245 $.each(Options, function (inx, value2) {
220 if (Options[inx].OptionTitle == item) { 246 if (Options[inx].OptionTitle == item) {
221 if ($scope.DraggedList != null) { 247 if ($scope.DraggedList != null) {
222 $.each($scope.DraggedList, function (inx1, value3) { 248 $.each($scope.DraggedList, function (inx1, value3) {
223 - // $scope.AnswerList.push({ "optionName": id.split('-')[1], "AnswerName": $scope.dragableId.split('-')[1] });  
224 - var balnkBox=id.split('-')[1];  
225 - $scope.UserAttempt.push({balnkBox :+ $scope.dragableId.split('-')[1] }); 249 + $scope.UserAttempt.push({ "BlankBoxName": id.split('-')[1], "OptionName": $scope.dragableId.split('-')[1] });
  250 + //var balnkBox=id.split('-')[1];
  251 + //$scope.UserAttempt.push({balnkBox :+ $scope.dragableId.split('-')[1] });
226 if ($scope.DraggedList[inx1].Value == item) { 252 if ($scope.DraggedList[inx1].Value == item) {
227 $scope.DraggedList.splice(inx1, 1); 253 $scope.DraggedList.splice(inx1, 1);
228 $('#block-' + Options[inx].OptionNumber).css("display", "block"); 254 $('#block-' + Options[inx].OptionNumber).css("display", "block");
@@ -264,8 +290,9 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -264,8 +290,9 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
264 } 290 }
265 }); 291 });
266 } 292 }
267 -  
268 - $scope.AnswerList.push({ "optionName": id.split('-')[1], "AnswerName": $scope.dragableId.split('-')[1] }); 293 + //var balnkBox = id.split('-')[1];
  294 + //$scope.UserAttempt.push({ balnkBox: +$scope.dragableId.split('-')[1] });
  295 + $scope.UserAttempt.push({ "BlankBoxName": id.split('-')[1], "OptionName": $scope.dragableId.split('-')[1] });
269 $scope.DraggedList.push({ "id": id.split('-')[1], "optionName": id.split('-')[1], "Value": dataText, "topcoord": Options[inx].topcoord, "leftcoord": Options[inx].leftcoord }); 296 $scope.DraggedList.push({ "id": id.split('-')[1], "optionName": id.split('-')[1], "Value": dataText, "topcoord": Options[inx].topcoord, "leftcoord": Options[inx].leftcoord });
270 //$('#' + $scope.dragableId).remove(); 297 //$('#' + $scope.dragableId).remove();
271 $('#' + $scope.dragableId).css("display", "none"); 298 $('#' + $scope.dragableId).css("display", "none");
@@ -291,7 +318,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -291,7 +318,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
291 //{ 318 //{
292 // $("#divoptions").html("<br><br><br><br>") 319 // $("#divoptions").html("<br><br><br><br>")
293 //} 320 //}
294 - //alert(JSON.stringify($scope.AnswerList)); 321 + //alert(JSON.stringify($scope.UserAttempt));
295 }; 322 };
296 323
297 $scope.handleDragOver = function (e) { 324 $scope.handleDragOver = function (e) {
@@ -302,6 +329,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -302,6 +329,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
302 329
303 $scope.resetQuiz = function () { 330 $scope.resetQuiz = function () {
304 $scope.DraggedList = []; 331 $scope.DraggedList = [];
  332 + $scope.UserAttempt = [];
305 $scope.GetQuizByTopic(); 333 $scope.GetQuizByTopic();
306 }; 334 };
307 335
@@ -362,8 +390,84 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -362,8 +390,84 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
362 }; 390 };
363 391
364 $scope.SaveAnswer = function () { 392 $scope.SaveAnswer = function () {
  393 + $scope.CreateLabExerciseDataToSave();
  394 +
  395 +
  396 + //LabExerciseService.saveLabExerciseAttempt("superadmin", $scope.LabExerciseAttemptedData)
  397 + $scope.labExerciseAttempt = [];
  398 + $scope.labExerciseAttempt.push({ 'LabExerciseUserData': $scope.LabExerciseUserData, 'userId': $scope.userId, 'labExerciseIdentifier': $scope.labExerciseIdentifier, 'LastQuestion': $scope.LastQuestion, 'TotalQuestions': $scope.TotalQuestions });
  399 + LabExerciseService.saveLabExerciseAttempt($scope.labExerciseAttempt)
  400 + .then(
  401 + function (result) {
  402 + alert("Successfully updated");
  403 + },
  404 + function (error) {
  405 + console.log(' Error in authentication = ' + error.statusText);
  406 + alert("Error");
  407 + });
  408 + };
365 409
  410 +
  411 + $scope.CreateLabExerciseDataToSave = function () {
  412 +
  413 + $scope.LabExerciseAttemptedData = [];
  414 + $scope.lb = [];
366 //get user answers 415 //get user answers
  416 + $scope.getUserAnswers();
  417 +
  418 +
  419 + //get correct response
  420 + $scope.getCorrectResponse();
  421 +
  422 + // $scope.correctResponseForSavingDatabaseArray = $scope.correctResponseForSavingDatabase.split(',');
  423 +
  424 + //get dragItems
  425 + $scope.getDragItems();
  426 +
  427 + //get score
  428 + $scope.getScore();
  429 +
  430 + $scope.userId = JSON.parse(localStorage.getItem('loggedInUserDetails')).Id;
  431 + $scope.labExerciseIdentifier = $scope.labExercideIdentifier;
  432 + $scope.LastQuestion = $scope.quiznumber;
  433 + $scope.TotalQuestions = $scope.TotalNumberofQuiz;
  434 +
  435 + $scope.LabExerciseAttemptedData = {
  436 +
  437 + MaxScore: $scope.MaxScore,
  438 + UserAnswer: $scope.commaSeperatedUserAnswers,
  439 + QuestionNo: $scope.quiznumber,
  440 + CorrectAnswer: JSON.stringify($scope.correctResponseForSavingDatabase),
  441 + DragItems: $scope.DragItems,
  442 + Score: $scope.Score
  443 + }
  444 +
  445 + var thisQuestiondataInLabExerciseUserData = new jinqJs()
  446 + .from($scope.LabExerciseUserData)
  447 + .where('QuestionNo == ' + $scope.LabExerciseAttemptedData.QuestionNo)
  448 + .select();
  449 + if (thisQuestiondataInLabExerciseUserData.length>0) {
  450 +
  451 + angular.forEach($scope.LabExerciseUserData, function (value, key) {
  452 + if (value.QuestionNo == $scope.LabExerciseAttemptedData.QuestionNo) {
  453 +
  454 + }
  455 + else {
  456 + $scope.lb.push(value);
  457 + }
  458 + })
  459 + $scope.LabExerciseUserData = [];
  460 +
  461 + $scope.lb.push($scope.LabExerciseAttemptedData);
  462 + angular.forEach($scope.lb,function(value1,key1){
  463 + $scope.LabExerciseUserData.push(value1);
  464 + })
  465 + }
  466 + else
  467 + $scope.LabExerciseUserData.push($scope.LabExerciseAttemptedData);
  468 + }
  469 +
  470 + $scope.getUserAnswers = function () {
367 var userAnswers = []; 471 var userAnswers = [];
368 var blockBoxes = $("div[id*='blockbox']"); 472 var blockBoxes = $("div[id*='blockbox']");
369 var blockBoxesInTextBlock = $("#textblock").children(); 473 var blockBoxesInTextBlock = $("#textblock").children();
@@ -373,80 +477,78 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -373,80 +477,78 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
373 for (var i = 0; i < blockAnswers.length; i++) { 477 for (var i = 0; i < blockAnswers.length; i++) {
374 478
375 var id = (blockAnswers[i].id).split('-')[1]; 479 var id = (blockAnswers[i].id).split('-')[1];
376 - userAnswers[id.replace('T','')] = blockAnswers[i].innerHTML; 480 + userAnswers[id.replace('T', '')] = blockAnswers[i].innerHTML;
377 } 481 }
378 482
379 - var commaSeperatedUserAnswers = '';  
380 - for (var i = 1; i <=blockBoxLength; i++) {  
381 -  
382 - var userAns = userAnswers[i];  
383 - if(userAns!=undefined){  
384 - commaSeperatedUserAnswers +=userAns + ',';  
385 - }  
386 - else{  
387 - commaSeperatedUserAnswers +=''+',';  
388 - } 483 + $scope.commaSeperatedUserAnswers = '';
  484 + for (var i = 1; i <= blockBoxLength; i++) {
  485 +
  486 + var userAns = userAnswers[i];
  487 + if (userAns != undefined) {
  488 + $scope.commaSeperatedUserAnswers += userAns + ',';
  489 + }
  490 + else {
  491 + $scope.commaSeperatedUserAnswers += '' + ',';
  492 + }
389 } 493 }
390 //remove last comma 494 //remove last comma
391 - commaSeperatedUserAnswers = commaSeperatedUserAnswers.replace(/,$/, '');  
392 - 495 + $scope.commaSeperatedUserAnswers = $scope.commaSeperatedUserAnswers.replace(/,$/, '');
  496 + }
393 497
394 - //get correct response  
395 - $scope.correctResponse ='';  
396 - $scope.correctResponseForSavingDatabase ='';  
397 - var cr = new jinqJs() 498 + $scope.getCorrectResponse = function () {
  499 + $scope.correctResponse = '';
  500 + $scope.correctResponseForSavingDatabase = '';
  501 + var cr = new jinqJs()
398 .from($scope.LabExData.LabExercise[0].Questions) 502 .from($scope.LabExData.LabExercise[0].Questions)
399 .where('Number == ' + $scope.quiznumber) 503 .where('Number == ' + $scope.quiznumber)
400 .select(); 504 .select();
401 for (var i = 0; i < cr[0].correctResponse.length; i++) { 505 for (var i = 0; i < cr[0].correctResponse.length; i++) {
402 var blankBox = cr[0].correctResponse[i].OptionBox; 506 var blankBox = cr[0].correctResponse[i].OptionBox;
403 - var options = cr[0].correctResponse[i].Answer;  
404 - $scope.correctResponse += blankBox + ' ' + options + ',';  
405 - $scope.correctResponseForSavingDatabase += parseInt(blankBox.replace('T',''))-1 + ':' + options + ','; 507 + var option = cr[0].correctResponse[i].Answer;
  508 +
  509 + var options = new jinqJs()
  510 + .from(cr[0].Options)
  511 + .where('OptionNumber == ' + option)
  512 + .select();
  513 + var optionText = options[0].OptionTitle;
  514 + $scope.correctResponse += blankBox + ' ' + option + ',';
  515 + $scope.correctResponseForSavingDatabase += parseInt(blankBox.replace('T', '')) - 1 + ':' + optionText + ',';
406 } 516 }
407 517
408 $scope.correctResponse = $scope.correctResponse.replace(/,$/, ''); 518 $scope.correctResponse = $scope.correctResponse.replace(/,$/, '');
409 $scope.correctResonseKeyValue = $scope.correctResponse.split(','); 519 $scope.correctResonseKeyValue = $scope.correctResponse.split(',');
410 520
411 $scope.correctResponseForSavingDatabase = $scope.correctResponseForSavingDatabase.replace(/,$/, ''); 521 $scope.correctResponseForSavingDatabase = $scope.correctResponseForSavingDatabase.replace(/,$/, '');
412 - // $scope.correctResponseForSavingDatabaseArray = $scope.correctResponseForSavingDatabase.split(','); 522 + }
413 523
414 - //get dragItems 524 +
  525 + $scope.getDragItems = function () {
415 var OptionBoxes = $("div[id*='block-']"); 526 var OptionBoxes = $("div[id*='block-']");
416 $scope.DragItems = ''; 527 $scope.DragItems = '';
417 for (var i = 0; i < OptionBoxes.length; i++) { 528 for (var i = 0; i < OptionBoxes.length; i++) {
418 $scope.DragItems += OptionBoxes[i].id.replace('block-', '') + ',' + OptionBoxes[i].innerHTML + ';'; 529 $scope.DragItems += OptionBoxes[i].id.replace('block-', '') + ',' + OptionBoxes[i].innerHTML + ';';
419 } 530 }
420 - $scope.DragItems = DragItems.replace(/;$/, ''); 531 + $scope.DragItems = $scope.DragItems.replace(/;$/, '');
421 532
  533 + }
422 534
423 - //get score 535 + $scope.getScore = function () {
424 536
425 - $scope.LabExerciseAttemptedData = {  
426 - userId: localStorage.getItem('loggedInUserDetails').id,  
427 - //Attemptnumber: 1,  
428 - labExerciseIdentifier: $scope.labExercideIdentifier,  
429 - LastQuestion: $scope.quiznumber,  
430 - TotalQuestions: $scope.TotalNumberofQuiz,  
431 - MaxScore: $scope.maxScore,  
432 - UserAnswer: commaSeperatedUserAnswers,  
433 - QuestionNo: $scope.quiznumber,  
434 - CorrectAnswer: JSON.stringify($scope.correctResponseForSavingDatabase),  
435 - DragItems: $scope.DragItems,  
436 - Score: 1  
437 - }  
438 - var abc = $scope.AnswerList;  
439 - //LabExerciseService.saveLabExerciseAttempt("superadmin", $scope.LabExerciseAttemptedData)  
440 - LabExerciseService.saveLabExerciseAttempt($scope.LabExerciseAttemptedData)  
441 - .then(  
442 - function (result) {  
443 - alert("Successfully updated");  
444 - },  
445 - function (error) {  
446 - console.log(' Error in authentication = ' + error.statusText);  
447 - alert("Error");  
448 - });  
449 - }; 537 + var abc = $scope.UserAttempt;
  538 + $scope.Score = 0;
  539 + angular.forEach($scope.UserAttempt, function (value, key) {
  540 +
  541 + var userOptedAnswer = value.BlankBoxName + ' ' + value.OptionName;
  542 + for(var i=0;i<$scope.correctResonseKeyValue.length;i++) {
  543 + if (userOptedAnswer == $scope.correctResonseKeyValue[i]) {
  544 + $scope.Score += 1;
  545 + }
  546 +
  547 + }
  548 +
  549 +
  550 + })
  551 + }
450 }] 552 }]
451 553
452 ); 554 );
400-SOURCECODE/AIAHTML5.Web/app/services/LabExerciseService.js
1 -AIA.factory('LabExerciseService', function ($http, $q) { 1 +AIA.factory('LabExerciseService', function ($http, $q,$rootScope) {
2 return { 2 return {
3 - saveLabExerciseAttempt: function (username, labExercieObj) { 3 + saveLabExerciseAttempt: function (labExercieObj) {
4 var deferred = $q.defer(); 4 var deferred = $q.defer();
5 -  
6 - $http.post('/API/api/Authenticate', JSON.stringify(userInfo), {  
7 - headers: {  
8 - 'Content-Type': 'application/json'  
9 - }  
10 - }) 5 + $http.post('/API/api/LabExercise', JSON.stringify(labExercieObj), {
  6 + headers: {
  7 + 'Content-Type': 'application/json'
  8 + }
  9 + })
  10 + //$http.post('/API/api/LabExercise', JSON.stringify(labExercieObj, userId, labExerciseIdentifier, LastQuestion, TotalQuestions), {
  11 + // headers: {
  12 + // 'Content-Type': 'application/json'
  13 + // }
  14 + //})
11 .success(function (data, status, headers, config) { 15 .success(function (data, status, headers, config) {
12 console.log('success') 16 console.log('success')
13 deferred.resolve(data); 17 deferred.resolve(data);