Commit f63480a5a45d2a881aa9fdfc9b177597d075947c

Authored by Nikita Kulshreshtha
1 parent fa9a03ff

Getting saved data and showing first question as per saved data,

Need to jump to the last opted questionan and show as per saved data
400-SOURCECODE/AIAHTML5.API/Constants/AIAConstants.cs
@@ -43,6 +43,6 @@ namespace AIAHTML5.API.Constants @@ -43,6 +43,6 @@ namespace AIAHTML5.API.Constants
43 public const string UNBLOCK_USER_EMAIL_SUBJECT = "Unblock user request mail for:"; 43 public const string UNBLOCK_USER_EMAIL_SUBJECT = "Unblock user request mail for:";
44 public const string LAB_EXERCISE_SAVE_SUCCESS = "Your lab exercise attempt is saved successfully."; 44 public const string LAB_EXERCISE_SAVE_SUCCESS = "Your lab exercise attempt is saved successfully.";
45 public const string LAB_EXERCISE_SAVE_FAILURE = "We are unable to save your lab exercise attempt, please try again."; 45 public const string LAB_EXERCISE_SAVE_FAILURE = "We are unable to save your lab exercise attempt, please try again.";
46 - 46 + public const string SAVED_LAB_EXERCISE_NOT_FOUND = "Saved Lab Exercise not found.";
47 } 47 }
48 } 48 }
49 \ No newline at end of file 49 \ No newline at end of file
400-SOURCECODE/AIAHTML5.API/Constants/DBConstants.cs
@@ -28,5 +28,7 @@ namespace AIAHTML5.API.Constants @@ -28,5 +28,7 @@ namespace AIAHTML5.API.Constants
28 public const string GET_BLOCKED_USER_BY_USER_ID = "GetBlockedUserByUserId"; 28 public const string GET_BLOCKED_USER_BY_USER_ID = "GetBlockedUserByUserId";
29 public const string GET_BLOCKED_USERS_BY_USER_TYPE = "GetBlockedUserByUserType"; 29 public const string GET_BLOCKED_USERS_BY_USER_TYPE = "GetBlockedUserByUserType";
30 public const string SAVE_LAB_EXERCISE_ATTEMPT = "usp_SaveLabExerciseAttempts"; 30 public const string SAVE_LAB_EXERCISE_ATTEMPT = "usp_SaveLabExerciseAttempts";
  31 + public const string GET_LAB_EXERCISE = "GetLabExcerciseByUserId";
  32 +
31 } 33 }
32 } 34 }
33 \ No newline at end of file 35 \ No newline at end of file
400-SOURCECODE/AIAHTML5.API/Controllers/LabExerciseController.cs
@@ -19,15 +19,54 @@ namespace AIAHTML5.API.Controllers @@ -19,15 +19,54 @@ namespace AIAHTML5.API.Controllers
19 public class LabExerciseController : ApiController 19 public class LabExerciseController : ApiController
20 { 20 {
21 // GET api/LabExercise 21 // GET api/LabExercise
22 - public IEnumerable<string> Get()  
23 - {  
24 - return new string[] { "value1", "value2" };  
25 - } 22 + //public IEnumerable<string> Get()
  23 + //{
  24 + // return new string[] { "value1", "value2" };
  25 + //}
26 26
27 // GET api/LabExercise/5 27 // GET api/LabExercise/5
28 - public string Get(int id) 28 + public HttpResponseMessage Get([FromUri] int userId, string labExerciseIdentifier)
29 { 29 {
30 - return "value"; 30 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  31 + logger.Debug("inside Get LabExerciseController");
  32 +
  33 + try
  34 + {
  35 + DBModel db = new DBModel();
  36 + LabExercise labEx = db.GetLabExercise(userId, labExerciseIdentifier);
  37 +
  38 + if (labEx!=null)
  39 + return new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonConvert.SerializeObject(labEx)) };
  40 + else
  41 + return new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(AIAConstants.SAVED_LAB_EXERCISE_NOT_FOUND) };
  42 +
  43 + }
  44 +
  45 + catch (SqlException ex)
  46 + {
  47 + logger.Fatal("SqlException occured for UserId =" + userId.ToString() + " and LabExerciseIdentifier= " + labExerciseIdentifier + "Exception= " + ex.Message + ", STACKTRACE: " + ex.StackTrace);
  48 +
  49 + ArrayList supportMailList = UserUtility.GetSupportMailList();
  50 + string mailSubject = AIAConstants.SQL_CONNECTION_ERROR_MAIL_SUBJECT;
  51 + string mailBody = "MESSAGE: " + ex.Message + ", STACKTRACE: " + ex.StackTrace;
  52 + UserUtility.SendEmailForException(userId, supportMailList, "", mailSubject, mailBody);
  53 +
  54 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
  55 +
  56 + }
  57 + catch (Exception e)
  58 + {
  59 + logger.Fatal("SqlException occured for UserId =" + userId.ToString() + " and LabExerciseIdentifier= " + labExerciseIdentifier + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
  60 +
  61 + ArrayList supportMailList = UserUtility.GetSupportMailList();
  62 + string mailSubject = AIAConstants.SQL_CONNECTION_ERROR_MAIL_SUBJECT;
  63 + string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
  64 + UserUtility.SendEmailForException(userId, supportMailList, "", mailSubject, mailBody);
  65 +
  66 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
  67 +
  68 + }
  69 +
31 } 70 }
32 71
33 // POST api/LabExercise 72 // POST api/LabExercise
@@ -96,6 +135,7 @@ namespace AIAHTML5.API.Controllers @@ -96,6 +135,7 @@ namespace AIAHTML5.API.Controllers
96 135
97 DataTable labExerciseDetailsDataTable = new UserUtility().ToDataTable(le.labExercise); 136 DataTable labExerciseDetailsDataTable = new UserUtility().ToDataTable(le.labExercise);
98 int result = le.insertLabExerciseAttempt(le, labExerciseDetailsDataTable); 137 int result = le.insertLabExerciseAttempt(le, labExerciseDetailsDataTable);
  138 +
99 if (result == -1) 139 if (result == -1)
100 { 140 {
101 return new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(AIAConstants.LAB_EXERCISE_SAVE_SUCCESS) }; 141 return new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(AIAConstants.LAB_EXERCISE_SAVE_SUCCESS) };
400-SOURCECODE/AIAHTML5.API/Models/DBModel.cs
@@ -862,10 +862,8 @@ namespace AIAHTML5.API.Models @@ -862,10 +862,8 @@ namespace AIAHTML5.API.Models
862 return result; 862 return result;
863 } 863 }
864 864
865 - // internal int SaveLabExerciseAttempt(int userId, string labExerciseIdentifier, int lastQusetion, int totalQuestions, DataTable labExeciseQuizAttemptedData )  
866 internal int SaveLabExerciseAttempt(LabExercise le, DataTable labExeciseQuizAttemptedData) 865 internal int SaveLabExerciseAttempt(LabExercise le, DataTable labExeciseQuizAttemptedData)
867 -  
868 - { 866 + {
869 867
870 logger.Debug(" inside InsertUserLoginLog for userId= " + le.userId + ", labExerciseIdentifier= " + le.labExerciseIdentifier + ",lastQusetion= " + le.lastQuestion + ",totalQuestions=" + le.totalQuestions); 868 logger.Debug(" inside InsertUserLoginLog for userId= " + le.userId + ", labExerciseIdentifier= " + le.labExerciseIdentifier + ",lastQusetion= " + le.lastQuestion + ",totalQuestions=" + le.totalQuestions);
871 869
@@ -900,7 +898,68 @@ namespace AIAHTML5.API.Models @@ -900,7 +898,68 @@ namespace AIAHTML5.API.Models
900 898
901 } 899 }
902 900
903 - 901 + internal LabExercise GetLabExercise(int userId, string labIdentifier)
  902 + {
  903 +
  904 +
  905 + logger.Debug(" Inside GetUserDetailsByEmailId for userId = " + userId + "and labIdentifier= " + labIdentifier);
  906 +
  907 + LabExercise le = new LabExercise();
  908 + le.labExercise = new List<LabEcerciseDetails>();
  909 + DBModel objModel = new DBModel();
  910 +
  911 + SqlConnection conn = new SqlConnection(dbConnectionString);
  912 + SqlCommand cmd = new SqlCommand();
  913 + SqlDataAdapter adapter;
  914 + SqlParameter param;
  915 + DataSet ds = new DataSet();
  916 +
  917 + cmd.Connection = conn;
  918 + cmd.CommandText = DBConstants.GET_LAB_EXERCISE;
  919 + cmd.CommandType = CommandType.StoredProcedure;
  920 +
  921 + //cmd.Parameters.AddWithValue("@UserId", userId);
  922 + //cmd.Parameters.AddWithValue("@Identifier", labIdentifier);
  923 + cmd.Parameters.Add("@UserId", SqlDbType.Int).Value = userId;
  924 + cmd.Parameters.Add("@Identifier", SqlDbType.NVarChar).Value = labIdentifier;
  925 +
  926 +
  927 + adapter = new SqlDataAdapter(cmd);
  928 + adapter.Fill(ds);
  929 +
  930 +
  931 + if (ds != null && ds.Tables.Count > 0)
  932 + {
  933 + DataTable dt = ds.Tables[0];
  934 +
  935 + if (dt.Rows.Count > 0)
  936 + {
  937 + foreach (DataRow dr in dt.Rows)
  938 + {
  939 + le.userId = Convert.ToInt32(dr["UserId"]);
  940 + le.labExerciseIdentifier = dr["labExerciseIdentifier"].ToString();
  941 +
  942 + le.lastQuestion = Convert.ToInt32(dr["LastQuestion"]);
  943 + le.totalQuestions = Convert.ToInt32(dr["TotalQuestions"]);
  944 +
  945 + LabEcerciseDetails led = new LabEcerciseDetails();
  946 + led.StateObject = dr["StateObject"].ToString();
  947 + led.UserAnswers = dr["UserAnswers"].ToString();
  948 + led.Score = Convert.ToInt32(dr["Score"]);
  949 + led.MaxScore = Convert.ToInt32(dr["MaxScore"]);
  950 + led.QuestionNo = Convert.ToInt32(dr["QuestionNo"]);
  951 + led.CorrectAnswers = dr["CorrectAnswers"].ToString();
  952 + led.DragItems = dr["DragItems"].ToString();
  953 + le.labExercise.Add(led);
  954 + }
  955 + }
  956 + }
  957 +
  958 + return le;
  959 +
  960 +
  961 +
  962 + }
904 //internal int InsertLabExerciseDetails(int userId, string labExerciseIdentifier, int lastQusetion, int totalQuestions, List<> labExDetails ) 963 //internal int InsertLabExerciseDetails(int userId, string labExerciseIdentifier, int lastQusetion, int totalQuestions, List<> labExDetails )
905 //{ 964 //{
906 // return 1; 965 // return 1;
400-SOURCECODE/AIAHTML5.API/Models/LabExercise.cs
@@ -32,6 +32,16 @@ namespace AIAHTML5.API.Models @@ -32,6 +32,16 @@ namespace AIAHTML5.API.Models
32 return result; 32 return result;
33 } 33 }
34 34
  35 + internal LabExercise GetLabExercise(int userId, string labExIdentifier)
  36 + {
  37 + DBModel objModel = new DBModel();
  38 +
  39 + LabExercise le = objModel.GetLabExercise(userId, labExIdentifier);
  40 +
  41 + return le;
  42 +
  43 + }
  44 +
35 45
36 } 46 }
37 47
@@ -44,5 +54,6 @@ namespace AIAHTML5.API.Models @@ -44,5 +54,6 @@ namespace AIAHTML5.API.Models
44 public string CorrectAnswers { get; set; } 54 public string CorrectAnswers { get; set; }
45 public string DragItems { get; set; } 55 public string DragItems { get; set; }
46 public int Score { get; set; } 56 public int Score { get; set; }
  57 + public string StateObject { get; set; }
47 } 58 }
48 } 59 }
49 \ No newline at end of file 60 \ No newline at end of file
400-SOURCECODE/AIAHTML5.Web/app/controllers/LabExercController.js
1 ๏ปฟ/// <reference path="../../content/data/json/le/LabExercise.js" /> 1 ๏ปฟ/// <reference path="../../content/data/json/le/LabExercise.js" />
2 -AIA.controller("LabExercController", ["$scope", "$rootScope", "pages", "$log", '$http', 'DataService', '$filter', '$location', '$document', '$sce', "$compile", "$location", "LabExerciseService",  
3 -function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location, $document, $sce, $compile, $location, LabExerciseService) { 2 +AIA.controller("LabExercController", ["$scope", "$rootScope", "pages", "$log", '$http', 'DataService', '$filter', '$location', '$document', '$sce', "$compile", "$location", "LabExerciseService","AIAConstants",
  3 +function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location, $document, $sce, $compile, $location, LabExerciseService,AIAConstants) {
4 $scope.$sce = $sce; 4 $scope.$sce = $sce;
5 $scope.LabExerciseName; 5 $scope.LabExerciseName;
6 $scope.LabExerciseQuiz = null; 6 $scope.LabExerciseQuiz = null;
@@ -138,6 +138,8 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -138,6 +138,8 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
138 $scope.Imagepath = keywords.labexercise + "/" + result.LabExercise[index].Questions[index1].ImagePath; 138 $scope.Imagepath = keywords.labexercise + "/" + result.LabExercise[index].Questions[index1].ImagePath;
139 } 139 }
140 $scope.ShowHideDiv(result.LabExercise[index].Questions[index1].Options[0].textalign); 140 $scope.ShowHideDiv(result.LabExercise[index].Questions[index1].Options[0].textalign);
  141 +
  142 + $scope.GetSavedLabExerciseFromDatabase();
141 } 143 }
142 }); 144 });
143 //$scope.quiznumber++; 145 //$scope.quiznumber++;
@@ -220,7 +222,6 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -220,7 +222,6 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
220 e.preventDefault(); 222 e.preventDefault();
221 e.stopPropagation(); 223 e.stopPropagation();
222 var x = $("#droppable").offset(); 224 var x = $("#droppable").offset();
223 - //alert(x.left + "," + $("#droppable").clientWidth + "," + x.top);  
224 225
225 var id = $(this).attr("id"); 226 var id = $(this).attr("id");
226 227
@@ -229,6 +230,8 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -229,6 +230,8 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
229 230
230 var dataText = e.dataTransfer.getData('text/plain'); 231 var dataText = e.dataTransfer.getData('text/plain');
231 if (id == "divoptions" || id == "divleft" || id == "divright") { 232 if (id == "divoptions" || id == "divleft" || id == "divright") {
  233 + alert('if')
  234 +
232 var item = $('#' + $scope.dragableId).html(); 235 var item = $('#' + $scope.dragableId).html();
233 var rindex = $scope.DraggedList.indexOf(item); 236 var rindex = $scope.DraggedList.indexOf(item);
234 var labExerciseModulePath = '~/../content/data/json/le/' + keywords.labexercise + '.json'; 237 var labExerciseModulePath = '~/../content/data/json/le/' + keywords.labexercise + '.json';
@@ -271,7 +274,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -271,7 +274,7 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
271 ) 274 )
272 } 275 }
273 else { 276 else {
274 - 277 + alert('else')
275 var labExerciseModulePath = '~/../content/data/json/le/' + keywords.labexercise + '.json'; 278 var labExerciseModulePath = '~/../content/data/json/le/' + keywords.labexercise + '.json';
276 DataService.getAnotherJson(labExerciseModulePath).then( 279 DataService.getAnotherJson(labExerciseModulePath).then(
277 function (result) { 280 function (result) {
@@ -555,6 +558,76 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location @@ -555,6 +558,76 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
555 558
556 }) 559 })
557 } 560 }
  561 +
  562 + $scope.GetSavedLabExerciseFromDatabase = function () {
  563 +
  564 + var labExerciseInfo = {
  565 + userId: 1,
  566 + identifier: 'di'
  567 + };
  568 +
  569 + LabExerciseService.GetLabExercise(labExerciseInfo)
  570 + .then(
  571 +
  572 + function (result) {
  573 + if (result != undefined && result != AIAConstants.SAVED_LAB_EXERCISE_NOT_FOUND) {
  574 + $scope.SavedLabExercise = result;
  575 +
  576 + $scope.ShowSavedLabExercise();
  577 + }
  578 + },
  579 + function(error){
  580 + console.log(' Error in getting LabExercise = ' + error.statusText);
  581 + $rootScope.errorMessage = AdminConstants.ERROR_IN_FECTHING_DETAILS;
  582 + $("#messageModal").modal('show');
  583 + })
  584 +
  585 + }
  586 +
  587 + $scope.ShowSavedLabExercise = function () {
  588 +
  589 + var lastQuestion = 1;//$scope.SavedLabExercise.lastQuestion;
  590 + var lastQuestionDetails = new jinqJs()
  591 + .from($scope.SavedLabExercise.labExercise)
  592 + .where('QuestionNo == ' + lastQuestion)
  593 + .select();
  594 +
  595 + $scope.QustionAnsKeyValue =[];
  596 + var lastQuestionAnswers = lastQuestionDetails[0].UserAnswers.split(',');
  597 + for (var i = 0; i < lastQuestionAnswers.length; i++) {
  598 + var num = i + 1;
  599 + $scope.QustionAnsKeyValue.push({ blockbox: 'T' + num, text: lastQuestionAnswers[i] });
  600 +
  601 + if (lastQuestionAnswers[i] != "") {
  602 + var blocks = $("div[id*='block-']");
  603 + for (var j = 0; j < blocks.length; j++) {
  604 +
  605 + if ((blocks[j].innerHTML).toString() == lastQuestionAnswers[i]) {
  606 + $('#' + blocks[j].id).css("display", "none");
  607 + };
  608 + // userAnswers[id.replace('T', '')] = blockAnswers[i].innerHTML;
  609 + }
  610 +
  611 + }
  612 + }
  613 +
  614 +
  615 + var labQuestionData = new jinqJs()
  616 + .from($scope.LabExData.LabExercise[0].Questions)
  617 + .where('Number == ' + lastQuestion)
  618 + .select();
  619 +
  620 + angular.forEach($scope.QustionAnsKeyValue,function(value,key){
  621 + var questionOptionBox = new jinqJs()
  622 + .from(labQuestionData[0].OptionBox)
  623 + .where('BoxName == ' + value.blockbox)
  624 + .select();
  625 +
  626 + $scope.DraggedList.push({ "id": 'blockbox-' + value.blockbox, "optionName": value.blockbox, "Value": value.text, "topcoord": questionOptionBox[0].topcoord, "leftcoord": questionOptionBox[0].leftcoord });
  627 +
  628 + })
  629 +
  630 + }
558 }] 631 }]
559 632
560 ); 633 );
400-SOURCECODE/AIAHTML5.Web/app/main/AIA.js
@@ -497,6 +497,8 @@ AIA.constant(&quot;AIAConstants&quot;, { @@ -497,6 +497,8 @@ AIA.constant(&quot;AIAConstants&quot;, {
497 "NO_BODY_SYSTEM_AVAILABLE": "Selected body system is not available on this layer.", 497 "NO_BODY_SYSTEM_AVAILABLE": "Selected body system is not available on this layer.",
498 "COOKIES_MESSAGE": "You need to enable your browser's cookies to run this application.", 498 "COOKIES_MESSAGE": "You need to enable your browser's cookies to run this application.",
499 "current_year": 2018, 499 "current_year": 2018,
  500 + "SAVED_LAB_EXERCISE_NOT_FOUND": "Saved Lab Exercise not found.",
  501 + "ERROR_IN_FECTHING_DETAILS": "Error in fecthing details.",
500 }) 502 })
501 503
502 504
400-SOURCECODE/AIAHTML5.Web/app/services/LabExerciseService.js
@@ -25,5 +25,29 @@ @@ -25,5 +25,29 @@
25 }); 25 });
26 return deferred.promise; 26 return deferred.promise;
27 }, 27 },
  28 +
  29 + GetLabExercise: function (labExerciseInfo) {
  30 + var deferred = $q.defer();
  31 +
  32 +
  33 + $http({
  34 + url: "/API/api/LabExercise",
  35 + method: "GET",
  36 + params: {userId:1, labExerciseIdentifier:'di'}
  37 + })
  38 +
  39 + .success(function (data, status, headers, config) {
  40 + console.log('success')
  41 + deferred.resolve(data);
  42 + }).error(function (data, status, headers, config) {
  43 + console.log('error')
  44 + deferred.reject(data);
  45 + $rootScope.isVisibleLogin = true;
  46 + $rootScope.errorMessage = data;
  47 + $("#messageModal").modal('show');
  48 +
  49 + });
  50 + return deferred.promise;
  51 + },
28 } 52 }
29 }) 53 })
30 \ No newline at end of file 54 \ No newline at end of file