Commit 706b78796932a8d3f12143be898fc12d67943788

Authored by Nikita Kulshreshtha
2 parents 0e02647c a3f0825d

merged Develop

400-SOURCECODE/AIAHTML5.API/Constants/DBConstants.cs
... ... @@ -33,6 +33,6 @@ namespace AIAHTML5.API.Constants
33 33 public const string GET_LICENSE_BY_SITE_ID = "GetLicenseBySiteId";
34 34 public const string GET_LICENSE_EDITIONS_FOR_MODESTY = "GetLicenseEditionsForModesty";
35 35 public const string GET_PRODUCT_FEATURES = "GetProductFeatures";
36   -
  36 + public const string GET_MODESTY_FOR_THIS_LICENSE = "usp_GetModestyForThisLicense";
37 37 }
38 38 }
39 39 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Controllers/AuthenticateController.cs
... ... @@ -11,7 +11,8 @@ using AIAHTML5.API.Constants;
11 11 using AIAHTML5.API.Models;
12 12 using System.Collections;
13 13  
14   -using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
  14 +using System.Data.SqlClient;
  15 +namespace AIAHTML5.API.Controllers
15 16 {
16 17 public class AuthenticateController : ApiController
17 18 {
... ... @@ -139,12 +140,12 @@ using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
139 140 userInfo.IsBlocked = true;
140 141 userInfo.LoginFailureCauseId = ErrorHelper.E_USER_ID_BLOCKED_24_HRS;
141 142 }
142   -
  143 +
143 144  
144 145 }
145   -
  146 +
146 147 authenticationRepsonse = JsonConvert.SerializeObject(userInfo);
147   -
  148 +
148 149 }
149 150  
150 151 else
... ... @@ -153,7 +154,8 @@ using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
153 154 }
154 155 return new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(authenticationRepsonse) };
155 156 }
156   - catch(SqlException e){
  157 + catch (SqlException e)
  158 + {
157 159  
158 160 logger.Fatal("SqlException occured for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
159 161  
... ... @@ -162,7 +164,7 @@ using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
162 164 string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
163 165 UserUtility.SendEmail(credentials, supportMailList, "", mailSubject, mailBody);
164 166  
165   - return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
  167 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
166 168 }
167 169 catch (Exception e)
168 170 {
... ... @@ -173,9 +175,9 @@ using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
173 175 string mailSubject = AIAConstants.EXCEPTION_IN_AIAHTML5_MAIL_SUBJECT;
174 176 string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
175 177 UserUtility.SendEmail(credentials, supportMailList, "", mailSubject, mailBody);
176   -
177   - return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.EXCEPTION_OCCURED) };
178   -
  178 +
  179 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.EXCEPTION_OCCURED) };
  180 +
179 181 }
180 182  
181 183 }
... ... @@ -191,7 +193,7 @@ using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
191 193 userInfo.EditionId = editionId;
192 194  
193 195 //if (userInfo.UserType == AIAHTML5.API.Models.User.SUPER_ADMIN)
194   - if(userInfo.LicenseId == 0)
  196 + if (userInfo.LicenseId == 0)
195 197 {
196 198 userInfo.Modules = AIAHTML5.API.Models.Users.getAllModulesList();
197 199  
... ... @@ -202,8 +204,9 @@ using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
202 204 {
203 205 CheckLicenseStatus(userInfo);
204 206  
205   - if(!userInfo.IsSubscriptionExpired){
206   - GetModulesBasedOnLicense(userInfo,false);
  207 + if (!userInfo.IsSubscriptionExpired)
  208 + {
  209 + GetModulesBasedOnLicense(userInfo, false);
207 210 }
208 211 }
209 212 }
... ... @@ -235,50 +238,58 @@ using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
235 238 isLicenseExpired = AIAHTML5.API.Models.Users.checkIfLicenseExpired(userInfo.LicenseSubscriptions, out expirationDate);
236 239 }
237 240  
238   - if (isLicenseExpired)
  241 + if (isLicenseExpired)
239 242 {
240 243 userInfo.IsSubscriptionExpired = isLicenseExpired;
241 244 userInfo.SubscriptionExpirationDate = expirationDate;
242 245 }
  246 + else
  247 + {
  248 + //check Modesty settings for this license
  249 +
  250 + userInfo.IsModestyOn = AIAHTML5.API.Models.Users.IsModestyActiveForThisLicense(userInfo.LicenseId);
  251 +
  252 +
  253 + }
243 254 }
244   -
  255 +
245 256 else
246 257 {
247   - ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
248   - logger.Debug("userInfo.LicenseInfo is null for userInfo.LicenseId= "+userInfo.LicenseId);
  258 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  259 + logger.Debug("userInfo.LicenseInfo is null for userInfo.LicenseId= " + userInfo.LicenseId);
249 260 }
250 261 }
251 262  
252 263 private static void GetModulesBasedOnLicense(User userInfo, bool isLicenseExpired)
253 264 {
254   -
255   - //05.6.1
256   - if (userInfo.LicenseInfo.IsActive)
  265 +
  266 + //05.6.1
  267 + if (userInfo.LicenseInfo.IsActive)
  268 + {
  269 + if (!userInfo.LicenseInfo.IsTermAccepted)
257 270 {
258   - if (!userInfo.LicenseInfo.IsTermAccepted)
  271 + ArrayList termsList = AIAHTML5.API.Models.Users.getTermsAndConditions();
  272 + foreach (Hashtable item in termsList)
259 273 {
260   - ArrayList termsList = AIAHTML5.API.Models.Users.getTermsAndConditions();
261   - foreach (Hashtable item in termsList)
262   - {
263   - userInfo.TermsAndConditionsTitle = item[AIAConstants.KEY_TITLE].ToString();
264   - userInfo.TermsAndConditionsText = item[AIAConstants.KEY_CONTENT].ToString();
265   - }
266   - }
267   - else
268   - {
269   - userInfo.Modules = AIAHTML5.API.Models.Users.getModuleListByLicenseId(userInfo.LicenseId);
270   -
271   - //Insert user login detail
272   - AIAHTML5.API.Models.Users.insertLoginDetails(userInfo.Id);
  274 + userInfo.TermsAndConditionsTitle = item[AIAConstants.KEY_TITLE].ToString();
  275 + userInfo.TermsAndConditionsText = item[AIAConstants.KEY_CONTENT].ToString();
273 276 }
274 277 }
275 278 else
276 279 {
277   - userInfo.LoginFailureCauseId = ErrorHelper.E_LICENCE_IS_INACTIVE;
  280 + userInfo.Modules = AIAHTML5.API.Models.Users.getModuleListByLicenseId(userInfo.LicenseId);
278 281  
  282 + //Insert user login detail
  283 + AIAHTML5.API.Models.Users.insertLoginDetails(userInfo.Id);
279 284 }
280   - }
281   -
  285 + }
  286 + else
  287 + {
  288 + userInfo.LoginFailureCauseId = ErrorHelper.E_LICENCE_IS_INACTIVE;
  289 +
  290 + }
  291 + }
  292 +
282 293  
283 294  
284 295 // PUT api/authenticate/5
... ...
400-SOURCECODE/AIAHTML5.API/Controllers/AuthenticateController.cs.orig 0 → 100644
  1 +using Newtonsoft.Json;
  2 +using Newtonsoft.Json.Linq;
  3 +using System;
  4 +using System.Collections.Generic;
  5 +using System.Linq;
  6 +using System.Net;
  7 +using System.Net.Http;
  8 +using System.Web.Http;
  9 +using log4net;
  10 +using AIAHTML5.API.Constants;
  11 +using AIAHTML5.API.Models;
  12 +using System.Collections;
  13 +
  14 +<<<<<<< HEAD
  15 +using System.Data.SqlClient;namespace AIAHTML5.API.Controllers
  16 +=======
  17 +using System.Data.SqlClient;
  18 +namespace AIAHTML5.API.Controllers
  19 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  20 +{
  21 + public class AuthenticateController : ApiController
  22 + {
  23 + // GET api/authenticate
  24 + public IEnumerable<string> Get()
  25 + {
  26 + return new string[] { "value1", "value2" };
  27 + }
  28 +
  29 + // GET api/authenticate/5
  30 + public string Get(int id)
  31 + {
  32 + return "value";
  33 + }
  34 +
  35 + // POST api/authenticate
  36 + public HttpResponseMessage Post([FromBody]JObject credentials)
  37 + {
  38 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  39 + logger.Debug("inside POST");
  40 +
  41 + dynamic authenticationRepsonse;
  42 + DateTime blockTime;
  43 + bool isUserBlocked;
  44 +
  45 + try
  46 + {
  47 +
  48 + //01.get the user detail to autheticate the user
  49 + User userInfo = AIAHTML5.API.Models.Users.getUserDetails(credentials);
  50 +
  51 + if (userInfo != null)
  52 + {
  53 + // 02 Check user is authenticated or not by login credential match
  54 + bool isUserAuthenticated = AIAHTML5.API.Models.Users.checkUserAuthenticity(credentials, userInfo);
  55 +
  56 + if (isUserAuthenticated)
  57 + {
  58 + if (userInfo.IsActive)
  59 + {
  60 + //03. check if user is blocked
  61 + isUserBlocked = AIAHTML5.API.Models.Users.checkUserBlockStatus(userInfo.Id, out blockTime);
  62 +
  63 + if (!isUserBlocked)
  64 + {
  65 + //04.delete past wrong login attempts of user
  66 + int wrongAttemptDeteledCount = AIAHTML5.API.Models.Users.deletePastWrongAttempts(userInfo.Id);
  67 + if (wrongAttemptDeteledCount < 0)
  68 + {
  69 + logger.Fatal("Unable to delete past wrong login attempts for userId= " + userInfo.Id);
  70 + }
  71 + //05.
  72 + GetModulesBasedOnUserType(userInfo);
  73 +
  74 + // authenticationRepsonse = JsonConvert.SerializeObject(userInfo);
  75 + }
  76 +
  77 + else
  78 + {
  79 +
  80 + //compare block time of user with current time if user is blocked
  81 + DateTime blockDuration = blockTime.AddDays(1);
  82 + var difference = DateTime.Compare(DateTime.Now, blockDuration);
  83 +
  84 + //check if credentials are valid credentials
  85 + //bool isCorrectLoginId, isCorrectPassword;
  86 + //AIAHTML5.API.Models.Users.isCredentialCorrect(credentials, userInfo, out isCorrectLoginId, out isCorrectPassword);
  87 +
  88 + if (difference >= 0)
  89 + {
  90 + //means 24 hours block time is finished
  91 + userInfo.IsBlocked = false;
  92 +
  93 + int wrongAttemptDeteledCount = AIAHTML5.API.Models.Users.deletePastWrongAttempts(userInfo.Id);
  94 + if (wrongAttemptDeteledCount < 0)
  95 + {
  96 + logger.Fatal("Unable to delete past wrong login attempts for userId= " + userInfo.Id);
  97 + }
  98 +
  99 + //05. Now get the module list- for ADMIN (superadmin/ general admin) by default all module loads
  100 + GetModulesBasedOnUserType(userInfo);
  101 +
  102 + }
  103 + else
  104 + {
  105 + userInfo.LoginFailureCauseId = ErrorHelper.E_USER_ID_BLOCKED_24_HRS;
  106 + }
  107 + }
  108 + }
  109 + else
  110 + {
  111 + //CODE REVIW: validate that is this tarnslated by UI because we need to show message to user if he is inactive
  112 + userInfo.LoginFailureCauseId = ErrorHelper.E_USER_NOT_ACTIVE;
  113 +
  114 + //05.4 check the License expiration irespective of either user is active
  115 + //or not because on AIA, we shows the License expiration message
  116 + //for inactive users too
  117 +
  118 + CheckLicenseStatus(userInfo);
  119 +
  120 + }
  121 + }
  122 +
  123 + else
  124 + {
  125 + //this come in picture when user input wrong passowrd
  126 +
  127 + //get wrong attempt count of user
  128 + int previousIncorrectLoginAttempts = AIAHTML5.API.Models.Users.checkNoOfWrongAttempts(userInfo.Id);
  129 + userInfo.IncorrectLoginAttemptCount = previousIncorrectLoginAttempts + 1;
  130 + userInfo.LoginFailureCauseId = ErrorHelper.E_PASSWORD_NOT_MATCH;
  131 +
  132 + //01. insert wrong attempt in dtabase
  133 + int updateCount = AIAHTML5.API.Models.Users.saveWrongAttemptOfUser(userInfo.Id, previousIncorrectLoginAttempts);
  134 +
  135 + if (updateCount < 0)
  136 + {
  137 + //Put the log in log file
  138 + logger.Fatal("Unable to Update past wrong login attempts for userId= " + userInfo.Id);
  139 + }
  140 + //else
  141 + //{
  142 + if (userInfo.IncorrectLoginAttemptCount > 4)
  143 + {
  144 + userInfo.IsBlocked = true;
  145 + userInfo.LoginFailureCauseId = ErrorHelper.E_USER_ID_BLOCKED_24_HRS;
  146 + }
  147 +<<<<<<< HEAD
  148 +
  149 +
  150 + }
  151 +
  152 + authenticationRepsonse = JsonConvert.SerializeObject(userInfo);
  153 +
  154 +=======
  155 +
  156 +
  157 + }
  158 +
  159 + authenticationRepsonse = JsonConvert.SerializeObject(userInfo);
  160 +
  161 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  162 + }
  163 +
  164 + else
  165 + {
  166 + authenticationRepsonse = AIAConstants.USER_NOT_FOUND;
  167 + }
  168 + return new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(authenticationRepsonse) };
  169 + }
  170 +<<<<<<< HEAD
  171 + catch(SqlException e){
  172 +=======
  173 + catch (SqlException e)
  174 + {
  175 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  176 +
  177 + logger.Fatal("SqlException occured for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
  178 +
  179 + ArrayList supportMailList = UserUtility.GetSupportMailList();
  180 + string mailSubject = AIAConstants.SQL_CONNECTION_ERROR_MAIL_SUBJECT;
  181 + string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
  182 + UserUtility.SendEmail(credentials, supportMailList, "", mailSubject, mailBody);
  183 +
  184 +<<<<<<< HEAD
  185 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
  186 +=======
  187 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
  188 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  189 + }
  190 + catch (Exception e)
  191 + {
  192 +
  193 + logger.Fatal("Exception occured for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
  194 +
  195 + ArrayList supportMailList = UserUtility.GetSupportMailList();
  196 + string mailSubject = AIAConstants.EXCEPTION_IN_AIAHTML5_MAIL_SUBJECT;
  197 + string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
  198 + UserUtility.SendEmail(credentials, supportMailList, "", mailSubject, mailBody);
  199 +<<<<<<< HEAD
  200 +
  201 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.EXCEPTION_OCCURED) };
  202 +
  203 +=======
  204 +
  205 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.EXCEPTION_OCCURED) };
  206 +
  207 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  208 + }
  209 +
  210 + }
  211 +
  212 + private static void GetModulesBasedOnUserType(User userInfo)
  213 + {
  214 + //based on old .net code(AIA flex), we get modules based on licenseId if licenseid>0.
  215 + //we verified in database that only superadmin has no licenseid so getting all modules for supeadmin
  216 + int licenseId, editionId;
  217 + AIAHTML5.API.Models.Users.getLicenseIdForThisUser(userInfo.Id, out licenseId, out editionId);
  218 +
  219 + userInfo.LicenseId = licenseId;
  220 + userInfo.EditionId = editionId;
  221 +
  222 + //if (userInfo.UserType == AIAHTML5.API.Models.User.SUPER_ADMIN)
  223 +<<<<<<< HEAD
  224 + if(userInfo.LicenseId == 0)
  225 +=======
  226 + if (userInfo.LicenseId == 0)
  227 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  228 + {
  229 + userInfo.Modules = AIAHTML5.API.Models.Users.getAllModulesList();
  230 +
  231 + //Insert user login detail
  232 + AIAHTML5.API.Models.Users.insertLoginDetails(userInfo.Id);
  233 + }
  234 + else
  235 + {
  236 + CheckLicenseStatus(userInfo);
  237 +
  238 +<<<<<<< HEAD
  239 + if(!userInfo.IsSubscriptionExpired){
  240 + GetModulesBasedOnLicense(userInfo,false);
  241 +=======
  242 + if (!userInfo.IsSubscriptionExpired)
  243 + {
  244 + GetModulesBasedOnLicense(userInfo, false);
  245 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  246 + }
  247 + }
  248 + }
  249 +
  250 + private static void CheckLicenseStatus(User userInfo)
  251 + {
  252 + //05.1 For normal user need to get the license details, get the license id for authenticated user
  253 + //int licenseId, editionId;
  254 + //AIAHTML5.API.Models.Users.getLicenseIdForThisUser(userInfo.Id, out licenseId, out editionId);
  255 +
  256 + //userInfo.LicenseId = licenseId;
  257 + //userInfo.EditionId = editionId;
  258 +
  259 + //05.2 get license details
  260 + userInfo.LicenseInfo = AIAHTML5.API.Models.Users.getLicenseDetails(userInfo.LicenseId);
  261 +
  262 + if (userInfo.LicenseInfo != null)
  263 + {
  264 + //05.3 get licenseSubscription details
  265 + userInfo.LicenseSubscriptions = AIAHTML5.API.Models.Users.getLicenseSubscriptionDetails(userInfo.LicenseId);
  266 +
  267 + //05.4 check the License expiration irespective of either user is active or not because on AIA
  268 + //we shows the License expiration message for inactive users too
  269 + string expirationDate = null;
  270 + bool isLicenseExpired = false;
  271 +
  272 + if (userInfo.LicenseSubscriptions != null)
  273 + {
  274 + isLicenseExpired = AIAHTML5.API.Models.Users.checkIfLicenseExpired(userInfo.LicenseSubscriptions, out expirationDate);
  275 + }
  276 +
  277 +<<<<<<< HEAD
  278 + if (isLicenseExpired)
  279 +=======
  280 + if (isLicenseExpired)
  281 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  282 + {
  283 + userInfo.IsSubscriptionExpired = isLicenseExpired;
  284 + userInfo.SubscriptionExpirationDate = expirationDate;
  285 + }
  286 +<<<<<<< HEAD
  287 + }
  288 +
  289 + else
  290 + {
  291 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  292 + logger.Debug("userInfo.LicenseInfo is null for userInfo.LicenseId= "+userInfo.LicenseId);
  293 +=======
  294 + else
  295 + {
  296 + //check Modesty settings for this license
  297 +
  298 + userInfo.IsModestyOn = AIAHTML5.API.Models.Users.IsModestyActiveForThisLicense(userInfo.LicenseId);
  299 +
  300 +
  301 + }
  302 + }
  303 +
  304 + else
  305 + {
  306 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  307 + logger.Debug("userInfo.LicenseInfo is null for userInfo.LicenseId= " + userInfo.LicenseId);
  308 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  309 + }
  310 + }
  311 +
  312 + private static void GetModulesBasedOnLicense(User userInfo, bool isLicenseExpired)
  313 + {
  314 +<<<<<<< HEAD
  315 +
  316 + //05.6.1
  317 + if (userInfo.LicenseInfo.IsActive)
  318 + {
  319 + if (!userInfo.LicenseInfo.IsTermAccepted)
  320 + {
  321 + ArrayList termsList = AIAHTML5.API.Models.Users.getTermsAndConditions();
  322 + foreach (Hashtable item in termsList)
  323 + {
  324 + userInfo.TermsAndConditionsTitle = item[AIAConstants.KEY_TITLE].ToString();
  325 + userInfo.TermsAndConditionsText = item[AIAConstants.KEY_CONTENT].ToString();
  326 + }
  327 + }
  328 + else
  329 + {
  330 + userInfo.Modules = AIAHTML5.API.Models.Users.getModuleListByLicenseId(userInfo.LicenseId);
  331 +
  332 + //Insert user login detail
  333 + AIAHTML5.API.Models.Users.insertLoginDetails(userInfo.Id);
  334 +=======
  335 +
  336 + //05.6.1
  337 + if (userInfo.LicenseInfo.IsActive)
  338 + {
  339 + if (!userInfo.LicenseInfo.IsTermAccepted)
  340 + {
  341 + ArrayList termsList = AIAHTML5.API.Models.Users.getTermsAndConditions();
  342 + foreach (Hashtable item in termsList)
  343 + {
  344 + userInfo.TermsAndConditionsTitle = item[AIAConstants.KEY_TITLE].ToString();
  345 + userInfo.TermsAndConditionsText = item[AIAConstants.KEY_CONTENT].ToString();
  346 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  347 + }
  348 + }
  349 + else
  350 + {
  351 +<<<<<<< HEAD
  352 + userInfo.LoginFailureCauseId = ErrorHelper.E_LICENCE_IS_INACTIVE;
  353 +
  354 + }
  355 + }
  356 +
  357 +=======
  358 + userInfo.Modules = AIAHTML5.API.Models.Users.getModuleListByLicenseId(userInfo.LicenseId);
  359 +
  360 + //Insert user login detail
  361 + AIAHTML5.API.Models.Users.insertLoginDetails(userInfo.Id);
  362 + }
  363 + }
  364 + else
  365 + {
  366 + userInfo.LoginFailureCauseId = ErrorHelper.E_LICENCE_IS_INACTIVE;
  367 +
  368 + }
  369 + }
  370 +
  371 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  372 +
  373 +
  374 + // PUT api/authenticate/5
  375 + public void Put(int id, [FromBody]string value)
  376 + {
  377 + }
  378 +
  379 + // DELETE api/authenticate/5
  380 + public void Delete(int id)
  381 + {
  382 + }
  383 + }
  384 +}
0 385 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Controllers/LabExerciseController.cs
... ... @@ -217,7 +217,58 @@ namespace AIAHTML5.API.Controllers
217 217  
218 218  
219 219  
  220 + //[HttpPost]
  221 + //public HttpResponseMessage Hi(int userId)
  222 + //{
  223 + // return Request.CreateResponse(HttpStatusCode.OK, userId.ToString());
  224 + //}
  225 + [Route("GetUserProfile/{userId}")]
  226 + [HttpGet]
  227 + public IHttpActionResult GetUserProfile(int userId)
  228 + {
  229 + //dbContext.Configuration.ProxyCreationEnabled = false;
  230 + try
  231 + {
  232 + return Ok("Hello");
  233 + }
  234 + catch (Exception ex)
  235 + {
  236 + throw ex;
  237 + }
  238 + //return ToJson(dbContext.AIAUsers.Where(u => u.Id == userId).AsEnumerable());
220 239  
  240 + }
  241 + [Route("api/LabExercise/SendEmail")]
  242 + [HttpPost]
  243 + public HttpResponseMessage SendEmail([FromBody]JObject User)
  244 + {
  245 + ArrayList aar = new ArrayList();
  246 + if (User["EmailTo"].ToString().ToLower().Contains(';'))
  247 + {
  248 + string[] words = User["EmailTo"].ToString().Split(';');
  249 + foreach (string word in words)
  250 + {
  251 + Console.WriteLine(word);
  252 + aar.Add(word);
  253 + }
  254 + }
  255 + else
  256 + {
  257 + aar.Add(User["EmailTo"].ToString());
  258 + }
  259 + if (Convert.ToBoolean(User["ReportCheck"]) == true)
  260 + {
  261 + aar.Add(User["EmailAdd"].ToString());
  262 + }
  263 + AIAHTML5.API.Models.UserUtility.SendEmail(User, aar, User["EmailAdd"].ToString(), User["reportTitle"].ToString(), User["reportImage"].ToString(), true);
  264 + return Request.CreateResponse(HttpStatusCode.OK);
  265 + }
  266 + [Route("api/LabExercise/GetParameter")]
  267 + [HttpGet]
  268 + public IEnumerable<string> GetParameter()
  269 + {
  270 + return new string[] { "val1", "val2" };
  271 + }
221 272  
222 273  
223 274  
... ...
400-SOURCECODE/AIAHTML5.API/Models/DBModel.cs
... ... @@ -1126,5 +1126,42 @@ namespace AIAHTML5.API.Models
1126 1126  
1127 1127 return objFeatures;
1128 1128 }
  1129 +
  1130 + internal Boolean GetModestyInfo(int LicenseId)
  1131 + {
  1132 + logger.Debug(" inside GetModestyInfo for licenseId= " + LicenseId);
  1133 +
  1134 + Boolean isModestyOn = false;
  1135 +
  1136 + DataTable dt = null;
  1137 +
  1138 + SqlConnection conn = new SqlConnection(dbConnectionString);
  1139 + SqlCommand cmd = new SqlCommand();
  1140 + cmd.Connection = conn;
  1141 + cmd.CommandText = DBConstants.GET_MODESTY_FOR_THIS_LICENSE;
  1142 + cmd.CommandType = CommandType.StoredProcedure;
  1143 + cmd.Parameters.AddWithValue("@licenseId", LicenseId);
  1144 + SqlDataAdapter da = new SqlDataAdapter();
  1145 + da.SelectCommand = cmd;
  1146 + dt = new DataTable();
  1147 + da.Fill(dt);
  1148 +
  1149 + if (dt != null && dt.Rows.Count > 0)
  1150 + {
  1151 + string IsModesty = dt.Rows[0]["IsModesty"].ToString();
  1152 + if (IsModesty == "True")
  1153 + {
  1154 + isModestyOn = true;
  1155 + }
  1156 + else
  1157 + {
  1158 + isModestyOn = false;
  1159 + }
  1160 + }
  1161 +
  1162 +
  1163 + return isModestyOn;
  1164 + }
  1165 +
1129 1166 }
1130 1167 }
1131 1168 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Models/User.cs
... ... @@ -35,7 +35,7 @@ namespace AIAHTML5.API.Models
35 35 public int LicenseId { get; set; }
36 36 public int EditionId { get; set; }
37 37 public Int16 LoginFailureCauseId { get; set; }
38   -
  38 + public bool IsModestyOn { get; set; }
39 39 public ArrayList Modules { get; set; }
40 40  
41 41 public License LicenseInfo { get; set; }
... ...
400-SOURCECODE/AIAHTML5.API/Models/UserUtility.cs
... ... @@ -283,7 +283,7 @@ namespace AIAHTML5.API.Models
283 283 }
284 284 }
285 285  
286   - public static bool SendEmail(Newtonsoft.Json.Linq.JObject userInfo, ArrayList mailToList, string sender, string mailSubject = "", string mailBody = "")
  286 + public static bool SendEmail(Newtonsoft.Json.Linq.JObject userInfo, ArrayList mailToList, string sender, string mailSubject = "", string mailBody = "", bool isCalForLabExerciseReport=false)
287 287 {
288 288 ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
289 289 logger.Debug("Inside SendEmail with UserInfo =" + userInfo);
... ... @@ -301,9 +301,10 @@ namespace AIAHTML5.API.Models
301 301 {
302 302 lstToAddress.Add(email);
303 303 }
304   -
305   - emailMessage = "Unable to process request for ";
306   -
  304 + if (!isCalForLabExerciseReport)
  305 + emailMessage = "Unable to process request for ";
  306 + else
  307 + emailMessage = " ";
307 308 if (UserUtility.CheckIfPropertyExists(userInfo, "username") && !string.IsNullOrEmpty(userInfo["username"].ToString()))
308 309 emailMessage += "username: <b>" + userInfo["username"].ToString() + "</b>";
309 310 if (UserUtility.CheckIfPropertyExists(userInfo, "password") && !string.IsNullOrEmpty(userInfo["password"].ToString()))
... ... @@ -316,24 +317,26 @@ namespace AIAHTML5.API.Models
316 317 if (string.IsNullOrEmpty(sender))
317 318 senderEmailId = Convert.ToString(ConfigurationManager.AppSettings["SenderEmailAddress"]);
318 319 else
319   - senderEmailId = sender;
  320 + senderEmailId = sender;
320 321  
321 322 emailMessage += mailBody;
322 323  
323 324 emailMessage = emailMessage.Replace("\n", "<br/>");
324 325  
325   - emailMessage += "<br/><br/>";
326   -
  326 + // emailMessage += "<br/><br/>";
  327 + emailMessage = "<html><head></head><body>" + emailMessage + "</body></html>";
327 328 emailUtility.sHostName = Convert.ToString(ConfigurationManager.AppSettings["HostAddress"]);
328 329 emailUtility.sFromAddress = senderEmailId;
329 330 emailUtility.bIsBodyHtml = true;
330   - emailUtility.bEnableSsl = false;
  331 + // emailUtility.bEnableSsl = false;
  332 + emailUtility.bEnableSsl = true;
331 333 emailUtility.sSubject = mailSubject;
332 334 emailUtility.sBodyText = emailMessage;
333   - emailUtility.iPort = 25;
  335 + //emailUtility.iPort = 25;
  336 + emailUtility.iPort = 587;
334 337 emailUtility.sToAddresses = lstToAddress;
335 338 emailUtility.sBccAddresses = lstBccAddress;
336   -
  339 + emailUtility.sUserName = senderEmailId;
337 340 emailUtility.SendSmtpEmail();
338 341 return true;
339 342 }
... ...
400-SOURCECODE/AIAHTML5.API/Models/Users.cs
... ... @@ -598,5 +598,12 @@ namespace AIAHTML5.API.Models
598 598 //return intUserId;
599 599 return userInfo;
600 600 }
  601 +
  602 + internal static Boolean IsModestyActiveForThisLicense(int LicenseId)
  603 + {
  604 + DBModel objModel = new DBModel();
  605 + bool IsModestyOn = objModel.GetModestyInfo(LicenseId);
  606 + return IsModestyOn;
  607 + }
601 608 }
602 609 }
603 610 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Utility/EmailUtility.cs
... ... @@ -39,7 +39,7 @@ namespace AIAHTML5.API.Utility
39 39 System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential(mm.From.ToString(), ConfigurationManager.AppSettings["SenderPassword"]);
40 40 smtp.Credentials = NetworkCred;
41 41 smtp.Port = Convert.ToInt32(ConfigurationManager.AppSettings["SMTPPort"]);
42   -
  42 + smtp.EnableSsl = false;
43 43 smtp.Send(mm);
44 44 }
45 45 catch (Exception e)
... ...
400-SOURCECODE/AIAHTML5.API/Web.config
... ... @@ -32,13 +32,22 @@
32 32  
33 33 <appSettings>
34 34 <add key="Copyrightyear" value="2018" />
35   - <add key="SenderEmailAddress" value="support@interactiveanatomy.com" />
  35 +
  36 + <add key="SenderEmailAddress" value="ayush.jain@ebix.com" />
  37 + <add key="ErrorNotificationEmailAddress" value="ayush.jain@ebix.com" />
  38 + <add key="SenderPassword" value="Change1t" />
  39 + <add key="SMTPAddress" value="smtp.emailsrvr.com" />
  40 + <add key="SMTPPort" value="587" />
  41 + <add key="EnableSSL" value="true" />
  42 +
  43 + <!--<add key="SenderEmailAddress" value="support@interactiveanatomy.com" />
36 44 <add key="SenderEmailAddress" value="support@interactiveanatomy.com" />
37 45 <add key="ErrorNotificationEmailAddress" value="support@interactiveanatomy.com" />
38 46 <add key="SenderPassword" value="" />
39 47 <add key="SMTPAddress" value="10.100.12.13" />
40 48 <add key="SMTPPort" value="25" />
41   - <add key="EnableSSL" value="false" />
  49 + <add key="EnableSSL" value="false" />-->
  50 +
42 51 <add key="Site_Url" value ="http://qa.beta.interactiveanatomy.com/"/>
43 52 <add key ="HostAddress" value="10.100.12.13" />
44 53 <add key="AdminSupport" value="amrita.vishnoi@ebix.com,nikita.kulshreshtha@ebix.com"/>
... ...
400-SOURCECODE/AIAHTML5.Web/AIAHTML5.Web.csproj
... ... @@ -39,6 +39,7 @@
39 39 <WarningLevel>4</WarningLevel>
40 40 </PropertyGroup>
41 41 <ItemGroup>
  42 + <Content Include="AdobePlayerDownloadLink.html" />
42 43 <Content Include="app\controllers\3dAController.js" />
43 44 <Content Include="app\controllers\ADAMImgController.js" />
44 45 <Content Include="app\controllers\LinkController.js" />
... ...
400-SOURCECODE/AIAHTML5.Web/AdobePlayerDownloadLink.html 0 → 100644
  1 +<!doctype html>
  2 +<html lang="en">
  3 +<head>
  4 + <!-- Required meta tags -->
  5 + <meta charset="utf-8">
  6 + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  7 + <title>Ebix</title>
  8 +</head>
  9 +<style>
  10 + .wrapper .container-fluid {
  11 + width: 100%;
  12 + background: #818d43;
  13 + }
  14 +
  15 + .wrapper .container {
  16 + width: 980px;
  17 + margin: 0 auto;
  18 + }
  19 +
  20 + .wrapper h3 {
  21 + background: #818d43;
  22 + margin: 0;
  23 + padding: 20px 0;
  24 + color: #fff;
  25 + font-size: 20px;
  26 + }
  27 +
  28 + dl dt {
  29 + font-size: 18px;
  30 + font-weight: bold;
  31 + padding: 10px 0 5px 0;
  32 + }
  33 +
  34 + dl dd {
  35 + font-size: 16px;
  36 + font-weight: 500;
  37 + line-height: 28px;
  38 + padding: 5px 0;
  39 + margin-left: 0;
  40 + }
  41 +
  42 + dl dd a {
  43 + color: #084d6c;
  44 + }
  45 +</style>
  46 +<body style="font-family:arial; margin:0;">
  47 + <div class="wrapper">
  48 + <div class="container-fluid">
  49 + <div class="container">
  50 + <h3>CURRICULUM BUILDER</h3>
  51 + </div>
  52 + </div>
  53 + <div class="container">
  54 + <div style="font-size:16px; margin-top:40px; margin-bottom:40px; line-height:26px;">
  55 + Adobe Flash will still be needed to access Curriculum Builder module for now.
  56 + In order to utilize this aspect of AIA you will need to enable Adobe Flash Player to be used within your browser.
  57 + Below please find the appropriate browser that you are using and follow the
  58 + instructions to enable Flash Player and return back to
  59 + the Curriculum Builder module to access the module.
  60 + </div>
  61 + <dl>
  62 + <dt>Chrome –</dt>
  63 + <dd><a href="https://support.google.com/chrome/answer/6258784">https://support.google.com/chrome/answer/6258784</a></dd>
  64 + <dt>FireFox –</dt>
  65 + <dd><a href="https://support.mozilla.org/en-US/kb/set-adobe-flash-click-play-firefox">https://support.mozilla.org/en-US/kb/set-adobe-flash-click-play-firefox</a></dd>
  66 + <dt>Safari –</dt>
  67 + <dd><a href="https://helpx.adobe.com/flash-player/kb/enabling-flash-player-safari.html">https://helpx.adobe.com/flash-player/kb/enabling-flash-player-safari.html</a></dd>
  68 + <dt>Edge –</dt>
  69 + <dd><a href="https://helpx.adobe.com/flash-player/kb/flash-player-issues-windows-10-edge.html">https://helpx.adobe.com/flash-player/kb/flash-player-issues-windows-10-edge.html</a></dd>
  70 + <dt>Internet Explorer –</dt>
  71 + <dd><a href="https://helpx.adobe.com/flash-player/kb/flash-player-issues-windows-10-ie.html">https://helpx.adobe.com/flash-player/kb/flash-player-issues-windows-10-ie.html</a></dd>
  72 + </dl>
  73 + </div>
  74 + </div>
  75 +</body>
  76 +</html>
0 77 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/3dAController.js
... ... @@ -10,8 +10,9 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
10 10 var selectedModuleName = '';
11 11 //set module title
12 12 angular.forEach($rootScope.userModules, function (value, key) {
13   - if (value.slug === currentURL.replace('/', '')) {
14   - selectedModuleName = value.name;
  13 + // if (value.slug === currentURL.replace('/', '')) {
  14 + if (value.slug === "3d-anatomy-list") {
  15 + selectedModuleName = value.name;
15 16 }
16 17 $rootScope.currentActiveModuleTitle = selectedModuleName;
17 18 })
... ... @@ -114,30 +115,31 @@ function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location
114 115 //once you get id in scope push detail in jspanel content
115 116  
116 117 var openViews;
117   - if ($rootScope.openViews.length > 0) {
118   - openViews = new jinqJs()
119   - .from($rootScope.openViews)
120   - .where("BodyViewId==" + $scope.voId3D)
121   - .select();
122   - }
123   - var counter = 1;
  118 + //if ($rootScope.openViews.length > 0) {
  119 + // openViews = new jinqJs()
  120 + // .from($rootScope.openViews)
  121 + // .where("BodyViewId==" + $scope.voId3D)
  122 + // .select();
  123 + //}
  124 + //var counter = 1;
124 125 var tittle = $rootScope.getLocalStorageValue("currentViewTitleFromJson");
125   -
126   - if (openViews != null && openViews.length > 0) {
127   - angular.forEach(openViews, function (value, key) {
128   -
129   - if (value.body - views == tittle) {
130   - tittle = $rootScope.getLocalStorageValue("currentViewTitleFromJson") + counter++;
131   - $rootScope.currentActiveViewTitle = tittle;
132   - localStorage.setItem("currentViewTitle", tittle);
133   - }
134   -
135   - });
136   - }
137   - else {
138   - localStorage.setItem("currentViewTitle", tittle);
139   -
140   - }
  126 + $rootScope.currentActiveViewTitle = tittle;
  127 + localStorage.setItem("currentViewTitle", tittle);
  128 + //if (openViews != null && openViews.length > 0) {
  129 + // angular.forEach(openViews, function (value, key) {
  130 +
  131 + // if (value.body - views == tittle) {
  132 + // tittle = $rootScope.getLocalStorageValue("currentViewTitleFromJson") + counter++;
  133 + // $rootScope.currentActiveViewTitle = tittle;
  134 + // localStorage.setItem("currentViewTitle", tittle);
  135 + // }
  136 +
  137 + // });
  138 + //}
  139 + //else {
  140 + // localStorage.setItem("currentViewTitle", tittle);
  141 +
  142 + //}
141 143  
142 144 // alert($rootScope.getLocalStorageValue("currentViewTitle"));
143 145  
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/3dAController.js.orig 0 → 100644
  1 +AIA.controller("3dAController", ["$scope", "$rootScope", "pages", "$log", '$http', 'DataService', '$filter', '$location', '$document', '$sce', "$compile",
  2 +function ($scope, $rootScope, pages, log, $http, DataService, $filter, $location, $document, $sce, $compile) {
  3 +
  4 +
  5 + $scope.showTabButton = false;
  6 + $scope.threeDAnatomyData;
  7 + $scope.Id;
  8 + $scope.$on('$viewContentLoaded', function (event) {
  9 + var currentURL = $location.path();
  10 + var selectedModuleName = '';
  11 + //set module title
  12 + angular.forEach($rootScope.userModules, function (value, key) {
  13 +<<<<<<< HEAD
  14 + if (value.slug === currentURL.replace('/', '')) {
  15 + selectedModuleName = value.name;
  16 +=======
  17 + // if (value.slug === currentURL.replace('/', '')) {
  18 + if (value.slug === "3d-anatomy-list") {
  19 + selectedModuleName = value.name;
  20 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  21 + }
  22 + $rootScope.currentActiveModuleTitle = selectedModuleName;
  23 + })
  24 + if ($rootScope.refreshcheck == null) {
  25 + $location.path('/');
  26 + }
  27 + $scope.scroll();
  28 + var promise = DataService.getJson('~/../content/data/json/3da/3da_dat_contentlist.json')
  29 + promise.then(
  30 + function (result) {
  31 + $scope.threeDAnatomyData = result;
  32 +
  33 + // $scope.selectedThreeDAdata = $scope.threeDAnatomyData.root.ThreeDAData;
  34 +
  35 + $scope.selectedThreeDAdata = new jinqJs()
  36 + .from($scope.threeDAnatomyData.root.ThreeDAData)
  37 + .orderBy([{ field: '_Title', sort: 'asc' }])
  38 + .select();
  39 +
  40 + // console.log($scope.selectedCIListViewData);
  41 + $('#grid-view').empty();
  42 + angular.forEach($scope.selectedThreeDAdata, function (value, key) {
  43 + $scope.imagePath = "~/../content/images/3da/thumbnails/" + value._ThumbnailImage;
  44 +
  45 + var $el = $('<div id="3dView' + value._id + '" class="col-sm-3 col-md-2" title = "' + value._Title + '">'
  46 + + '<div class="thumbnail">'
  47 + + '<img id="' + value._id + '"ng-src="' + $scope.imagePath + '" alt="" title="' + value._Title + '" data-ng-click="Open3DModel($event)" >'
  48 + + '<div class="caption"><p>' + value._Title + '</p></div></div></div>').appendTo('#grid-view');
  49 +
  50 +
  51 + $compile($el)($scope);
  52 +
  53 + $(".sidebar").mCustomScrollbar({
  54 + autoHideScrollbar: true,
  55 + //theme:"rounded"
  56 + });
  57 +
  58 + });
  59 +
  60 + },
  61 + function (error) {
  62 + // handle errors here
  63 + console.log(' $scope.threeDAnatomyData = ' + error.statusText);
  64 + }
  65 + );
  66 +
  67 + });
  68 + $scope.scroll = function () {
  69 + // $window.scrollTo(0, 0);
  70 + $("html,body").scrollTop(0);
  71 + //alert("scroll");
  72 + }
  73 + $scope.IsVisible = function () {
  74 + //$scope.scroll();
  75 +
  76 + $location.url("/3dAnatomy");
  77 +
  78 + }
  79 +
  80 +
  81 + $scope.Open3DModel = function ($event) {
  82 + $rootScope.currentBodyViewId = $event.currentTarget.id;
  83 + if ($event.currentTarget.textContent !== null && typeof ($event.currentTarget.textContent) !== "undefined") {
  84 + var ThreeDTitle = [];
  85 + ThreeDTitle = new jinqJs()
  86 + .from($scope.selectedThreeDAdata)
  87 + .where('_id = ' + $event.currentTarget.id)
  88 + .select('_Title');
  89 +
  90 + $rootScope.ViewTitle = ThreeDTitle[0]._Title;
  91 + }
  92 + else {
  93 + $rootScope.ViewTitle = $event.currentTarget.textContent;
  94 +
  95 + }
  96 +
  97 +
  98 + localStorage.setItem("currentViewTitleFromJson", $rootScope.ViewTitle);
  99 + localStorage.setItem("currentBodyViewId", $event.currentTarget.id);
  100 +
  101 + var u = $location.url();
  102 + $location.url('/3d-anatomy-details');
  103 +
  104 + }
  105 +
  106 + $scope.Open3DModelBody = function () {
  107 +
  108 + if ($rootScope.refreshcheck == null) {
  109 + $location.path('/');
  110 +
  111 + }
  112 + $rootScope.isLoading = true;
  113 + $('#spinner').css('visibility', 'visible');
  114 + //alert($rootScope.getLocalStorageValue("currentBodyViewId"));
  115 + $scope.voId3D = $rootScope.getLocalStorageValue("currentBodyViewId");
  116 +
  117 + //alert($scope.voId3D);
  118 +
  119 +
  120 + //once you get id in scope push detail in jspanel content
  121 +
  122 + var openViews;
  123 +<<<<<<< HEAD
  124 + if ($rootScope.openViews.length > 0) {
  125 + openViews = new jinqJs()
  126 + .from($rootScope.openViews)
  127 + .where("BodyViewId==" + $scope.voId3D)
  128 + .select();
  129 + }
  130 + var counter = 1;
  131 + var tittle = $rootScope.getLocalStorageValue("currentViewTitleFromJson");
  132 +
  133 + if (openViews != null && openViews.length > 0) {
  134 + angular.forEach(openViews, function (value, key) {
  135 +
  136 + if (value.body - views == tittle) {
  137 + tittle = $rootScope.getLocalStorageValue("currentViewTitleFromJson") + counter++;
  138 + $rootScope.currentActiveViewTitle = tittle;
  139 + localStorage.setItem("currentViewTitle", tittle);
  140 + }
  141 +
  142 + });
  143 + }
  144 + else {
  145 + localStorage.setItem("currentViewTitle", tittle);
  146 +
  147 + }
  148 +=======
  149 + //if ($rootScope.openViews.length > 0) {
  150 + // openViews = new jinqJs()
  151 + // .from($rootScope.openViews)
  152 + // .where("BodyViewId==" + $scope.voId3D)
  153 + // .select();
  154 + //}
  155 + //var counter = 1;
  156 + var tittle = $rootScope.getLocalStorageValue("currentViewTitleFromJson");
  157 + $rootScope.currentActiveViewTitle = tittle;
  158 + localStorage.setItem("currentViewTitle", tittle);
  159 + //if (openViews != null && openViews.length > 0) {
  160 + // angular.forEach(openViews, function (value, key) {
  161 +
  162 + // if (value.body - views == tittle) {
  163 + // tittle = $rootScope.getLocalStorageValue("currentViewTitleFromJson") + counter++;
  164 + // $rootScope.currentActiveViewTitle = tittle;
  165 + // localStorage.setItem("currentViewTitle", tittle);
  166 + // }
  167 +
  168 + // });
  169 + //}
  170 + //else {
  171 + // localStorage.setItem("currentViewTitle", tittle);
  172 +
  173 + //}
  174 +>>>>>>> a3f0825d877d83f47a713081fef2e780c2d2c693
  175 +
  176 + // alert($rootScope.getLocalStorageValue("currentViewTitle"));
  177 +
  178 + var promise = DataService.getJson('~/../content/data/json/3da/3da_dat_contentlist.json')
  179 + promise.then(
  180 + function (result) {
  181 + $scope.threeDAnatomyData = result;
  182 +
  183 + var clicked3dAview = [];
  184 + clicked3dAview = new jinqJs().from($scope.threeDAnatomyData.root.ThreeDAData)
  185 + .where('_id == ' + $scope.voId3D)
  186 + .select('_Title', '_3dimagepath');
  187 + $scope.Selected3DImagePath = clicked3dAview[0]._3dimagepath;
  188 + $scope.threeDBodySystemTitle = clicked3dAview[0]._Title;
  189 +
  190 + if (clicked3dAview.length > 0) {
  191 +
  192 + $rootScope.isLoading = false;
  193 + $('#spinner').css('visibility', 'hidden');
  194 +
  195 + $.jsPanel({
  196 + id: '3DImagePanel',
  197 + selector: '.threeDView',
  198 + theme: 'success',
  199 + currentController: '3dAController',
  200 + parentSlug: '3d-anatomy-list',
  201 + content: '<div class="col-sm-12">' +
  202 + '<object data="' + $scope.Selected3DImagePath + '" width="100%" height="800px" type="image/svg+xml"></object>' +
  203 + '</div><script>$(document).ready(function(){var $ua = navigator.userAgent; if (($ua.match(/(iPod|iPhone|iPad|android)/i))) {var threeDivWidth = $("#ThreeDView").css("width");$("#ThreeDView").css({"left":"0px","width":"100%","min-idth": threeDivWidth}); var jspanelContainerWidth = $(".jsPanel-content").css("width"); $(".jsPanel-content").css({ "width": "100%", "min-width": jspanelContainerWidth}); $("#3DImagePanel").css("width", "100%"); }});</script>',
  204 + title: $rootScope.getLocalStorageValue("currentViewTitle"),
  205 + position: {
  206 + top: 70,
  207 + left: 1,
  208 + },
  209 +
  210 + size: { width: $(window).outerWidth() - 20, height: $(window).outerHeight() - 10 },
  211 +
  212 + });
  213 +
  214 + $rootScope.currentSlug = '3d-anatomy-details';
  215 +
  216 + $rootScope.openViews.push(
  217 + {
  218 + "module": $rootScope.currentActiveModuleTitle, "bodyView": tittle, "state": 'max', "BodyViewId": $rootScope.currentBodyViewId,
  219 + "slug": $rootScope.currentSlug
  220 + });
  221 +
  222 +
  223 + }
  224 +
  225 +
  226 + },
  227 + function (error) {
  228 + // handle errors here
  229 + console.log(' $scope.CIllustrationData = ' + error.statusText);
  230 + }
  231 +
  232 + );
  233 + $('#ThreeDView').css("height", $(window).outerHeight());
  234 +
  235 + $('#ThreeDView').css("width", $(window).outerWidth());
  236 +
  237 + }
  238 +
  239 +
  240 +
  241 +}]
  242 +
  243 +
  244 +
  245 +);
0 246 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/HomeController.js
... ... @@ -227,6 +227,41 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
227 227 }
228 228 else {
229 229  
  230 + //code for modesty setting
  231 + if (result.LicenseInfo != null) {
  232 + if (result.IsModestyOn) {
  233 + $rootScope.isModestyOn = true;
  234 + $rootScope.isModestyOff = false;
  235 + localStorage.setItem("globalModesty", "Y");
  236 + $rootScope.formsetting = {
  237 + ethnicity: null,
  238 + modesty: "Y"
  239 + }
  240 + $rootScope.UpdateAndCloseSetting($rootScope.formsetting)
  241 + }
  242 + else {
  243 + $rootScope.isModestyOn = false;
  244 + $rootScope.isModestyOff = true;
  245 + localStorage.setItem("globalModesty", "N");
  246 + $rootScope.formsetting = {
  247 + ethnicity: null,
  248 + modesty: "N"
  249 + }
  250 + $rootScope.UpdateAndCloseSetting($rootScope.formsetting)
  251 + }
  252 + }
  253 + else {
  254 + $rootScope.isModestyOn = true;
  255 + $rootScope.isModestyOff = false;
  256 + localStorage.setItem("globalModesty", "Y");
  257 + $rootScope.formsetting = {
  258 + ethnicity: null,
  259 + modesty: "Y"
  260 + }
  261 + $rootScope.UpdateAndCloseSetting($rootScope.formsetting)
  262 + }
  263 + //code for modesty setting
  264 +
230 265 if (typeof result.LoginId != undefined || result.LoginId != "" || result.LoginId != null) {
231 266  
232 267 if ($("#messageModal").length > 0) {
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/LabExercController.js
... ... @@ -1288,8 +1288,55 @@ function ($scope, $rootScope, pages, log, $http, $timeout, DataService, $filter,
1288 1288 }
1289 1289  
1290 1290 }
  1291 + $scope.reportCopyStatus = false;
  1292 + $scope.SendLabEXMailToUser = function (User) {
  1293 + var reportHtml = '';
  1294 + reportHtml += '<table style="width:100%;"><thead><th style="padding:15px;border:1px solid #cccccc"><strong>Question</strong></th><th style="padding:15px;border:1px solid #cccccc"><strong>Activity Title</strong></th><th style="padding:15px;border:1px solid #cccccc"><strong>Status</strong></th></thead><tbody>';
  1295 + $("#resultLabData tr").each(function () {
  1296 + reportHtml += '<tr>';
  1297 + $(this).children("td").each(function () {
  1298 + if ($(this).text() == " Review") {
  1299 + }
  1300 + else{
  1301 + reportHtml += '<td style="border:1px solid #cccccc;padding:15px;">' + $(this).text() + '</td>';
  1302 + }
  1303 + });
  1304 + reportHtml += '</tr>';
1291 1305  
  1306 + });
  1307 + reportHtml += '</tbody></table>';
  1308 + $scope.reportImage = "<table style='width:100%;'><tr><td style='padding:15px;'><strong>"+$("#submitResultHtml .panel-heading .row div:nth-child(1)").text()+"</strong></td><td style='padding:15px;'>Performance Report</td><td style='padding:15px;text-align:right;'><span>" + $("#submitResultHtml .panel-heading .row div:nth-child(3)").text() + "</span></td></tr></table><table style='width:100%;'><thead><th style='text-align:center;padding:15px;border:1px solid #cccccc;'><strong>Total Question</strong></th><th style='border:1px solid #cccccc;text-align:center;padding:15px;'><strong>Correct Answers</strong></th><th style='border:1px solid #cccccc;padding:15px;text-align:center;'><strong>Incorrect Answers</strong></th></thead><tr><td style='border:1px solid #cccccc;padding:15px;text-align:center;'><span>" + $("#questionStatus tbody tr td:nth-child(1)").text() + "</span></td><td style='text-align:center;border:1px solid #cccccc;padding:15px;'><span>" + $("#questionStatus tbody tr td:nth-child(2)").text() + "</span></td><td style='text-align:center;border:1px solid #cccccc;padding:15px;'><span>" + $("#questionStatus tbody tr td:nth-child(3)").text() + "</span></td></tr></table><br/><br/>" + reportHtml + "";
  1309 + $scope.reportTitle = "Lab Exercise Report for " + $("#submitResultHtml .panel-heading .row div:nth-child(1)").text();
  1310 + $scope.senderEmails = $("#emailTo").val();
  1311 +
  1312 +
  1313 + LabExerciseService.LabExerciseReport(User, $scope.reportImage, $scope.reportTitle, $scope.reportCopyStatus, $scope.senderEmails).then(
1292 1314  
  1315 + function (result) {
  1316 + console.log(result);
  1317 + },
  1318 + function (error) {
  1319 + console.log(error.statusText);
  1320 + }
  1321 + )
  1322 + // for closing email popup
  1323 + $rootScope.closeLabExEmailModel();
  1324 + }
  1325 + $rootScope.closeLabExEmailModel = function () {
  1326 + document.getElementById("LabExerciseForm").reset();
  1327 + $scope.LabExForm.$setPristine();
  1328 + $scope.LabExForm.$setUntouched();
  1329 + document.body.style.overflow = "scroll";
  1330 + document.getElementById('labExModalbackground').style.display = "none";
  1331 + document.getElementById('labExModalID').style.display = "none";
  1332 + $scope.reportCopyStatus = false;
  1333 + }
  1334 + $rootScope.sendMail = function () {
  1335 + window.scrollTo(0, 0);
  1336 + document.body.style.overflow = "hidden";
  1337 + document.getElementById('labExModalbackground').style.display = "block";
  1338 + document.getElementById('labExModalID').style.display = "block";
  1339 + }
1293 1340  
1294 1341 }]
1295 1342  
... ...
400-SOURCECODE/AIAHTML5.Web/app/services/LabExerciseService.js
... ... @@ -49,5 +49,34 @@
49 49 });
50 50 return deferred.promise;
51 51 },
  52 +
  53 + // code of email report
  54 + LabExerciseReport: function (User, reportImage, reportTitle, reportCopyStatus, senderEmail) {
  55 + User.reportImage = reportImage;
  56 + User.reportTitle = reportTitle;
  57 + User.ReportCheck = reportCopyStatus;
  58 + User.EmailTo = senderEmail;
  59 + var deferred = $q.defer();
  60 + // var jsonData = { 'EmailTo': User.EmailTo, 'EmailAdd': User.EmailAdd };
  61 + $http.post('/API/api/LabExercise/SendEmail', JSON.stringify(User), {
  62 +
  63 + headers: {
  64 + 'Content-Type': 'application/json'
  65 + },
  66 + // data: { Users: JSON.stringify(jsonData) }
  67 + })
  68 +
  69 + .success(function (data, status, headers, config) {
  70 +
  71 + console.log('success')
  72 + deferred.resolve(data);
  73 + }).error(function (data, status, headers, config) {
  74 +
  75 + console.log('error')
  76 + deferred.reject(data);
  77 + });
  78 + return deferred.promise;
  79 + }
  80 +
52 81 }
53 82 })
54 83 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/app/views/LabExerc/lab-exercises-detail.html
... ... @@ -11,6 +11,111 @@
11 11 <div class="clearfix"></div>
12 12 </div>
13 13  
  14 +
  15 +
  16 + <!--report email pop up code-->
  17 +
  18 +
  19 +
  20 +
  21 + <div id="labExModalbackground"></div>
  22 + <!-- Lab Ex -->
  23 + <div class="labExModal" id="labExModalID">
  24 + <div class="modal-content">
  25 + <div class="modal-header">
  26 + <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="closeLabExEmailModel()"><span aria-hidden="true">×</span></button>
  27 + <h4 class="modal-title" id="myModalLabel">Email your performance report</h4>
  28 + </div>
  29 +
  30 + <div class="modal-body paddTop15">
  31 + <div class="modal-body paddTop15">
  32 +
  33 + <form class="form-horizontal" name="LabExForm" id="LabExerciseForm" ng-submit="SendLabEXMailToUser(User)">
  34 + <div class="form-group">
  35 + <div class="col-sm-5 control-label">
  36 + <label>*Email To: (Email address)</label>
  37 + </div>
  38 +
  39 + <div class="col-sm-7">
  40 + <!--<input type="email" class="form-control" name="senderEmail" ng-model="User.EmailTo" required="required" />-->
  41 + <input type="email" name="usremail" class="form-control" required="required" id="emailTo" multiple />
  42 + <div class="help-block">*Use ',' to separate multiple email ids. </div>
  43 + <!--<div class="help-block" style="color:red;" ng-if="LabExForm.senderEmail.$error.pattern">Please Enter valid Email Address</div>-->
  44 + </div>
  45 + </div>
  46 +
  47 + <div class="form-group">
  48 + <div class="col-sm-5 control-label">
  49 + <label>*Your name:</label>
  50 + </div>
  51 + <div class="col-sm-7">
  52 + <input type="text" name="name" class="form-control" ng-model="User.Name" ng-pattern="/^([a-zA-Z]+\s?)*$/" required="required" />
  53 + <div class="help-block" style="color:red;" ng-if="LabExForm.name.$error.pattern"> Please enter your Name</div>
  54 + <!--<div class="help-block" style="color:red;" id="nameHelpBlock"> Please Enter your Name </div>-->
  55 + </div>
  56 + </div>
  57 +
  58 + <div class="form-group">
  59 + <div class="col-sm-5 control-label">
  60 + <label for="">*Your Email Address:</label>
  61 + </div>
  62 + <div class="col-sm-7">
  63 + <!--<input type="text" class="form-control" name="receiverEmail" ng-model="User.EmailAdd" ng-pattern="/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/" required="required" />-->
  64 + <input type="email" class="form-control" name="receiverEmail" ng-model="User.EmailAdd" required="required" />
  65 +
  66 + <!--<div class="help-block" style="color:red;" id="emailHelpBlock"> Please Enter your Email Address </div>-->
  67 + <!--<div class="help-block" style="color:red;" ng-if="LabExForm.receiverEmail.$error.pattern"> Please Enter valid Email Address</div>-->
  68 + </div>
  69 + </div>
  70 +
  71 + <div class="form-group">
  72 + <div class="col-sm-5 control-label">
  73 + <label for="">Send me a copy of the report</label>
  74 + </div>
  75 + <div class="col-sm-7">
  76 + <input type="checkbox" style="margin-top: 12px;" ng-model="reportCopyStatus" />
  77 + </div>
  78 + </div>
  79 +
  80 + <div class="form-group">
  81 + <div class="col-sm-5 control-label">
  82 + <label for="">Note(optional)</label>
  83 + </div>
  84 + <div class="col-sm-7">
  85 + <textarea name="" id="" class="form-control" cols="30" rows="5" ng-model="User.comments"></textarea>
  86 + <div class="help-block">255 character limit </div>
  87 + </div>
  88 + </div>
  89 +
  90 +
  91 + <div class="form-group">
  92 + <div class="col-sm-5 control-label">
  93 +
  94 + </div>
  95 + <div class="col-sm-7">
  96 + <button type="submit" class="btn btn-primary btn-block">Send Mail</button>
  97 +
  98 + </div>
  99 + </div>
  100 +
  101 + </form>
  102 +
  103 + </div>
  104 +
  105 + </div>
  106 +
  107 + </div>
  108 + </div>
  109 +
  110 +
  111 +
  112 +
  113 +
  114 +
  115 +
  116 +
  117 +
  118 +
14 119 <div class="col-sm-12">
15 120 <div class="pull-left btn-group LabEx-Panel-state-minimized" id="LabExMinimizedId">
16 121 <p class="pull-left" style="color:#fff">LAB Ex ...</p>
... ... @@ -100,7 +205,7 @@
100 205 <div class="panel-body no-padding">
101 206 <div class="row">
102 207 <div class="col-sm-12 table-responsive ">
103   - <table class="table table-hover table-condensed bg-white">
  208 + <table class="table table-hover table-condensed bg-white" id="questionStatus">
104 209 <thead>
105 210 <tr class="active">
106 211 <th class="text-center">Total Question</th>
... ... @@ -135,7 +240,7 @@
135 240 </div>
136 241 <div class="panel-footer">
137 242 <div class="text-center">
138   - <button class="btn btn-sm btn-primary">
  243 + <button class="btn btn-sm btn-primary" ng-click="sendMail()">
139 244 Email
140 245 </button>
141 246  
... ...
400-SOURCECODE/AIAHTML5.Web/themes/default/css/bootstrap/3.3.6/main.css
... ... @@ -1281,4 +1281,42 @@ footer .browserIcons
1281 1281 #UserPassword
1282 1282 {
1283 1283 -webkit-text-security: disc;
1284   - }
1285 1284 \ No newline at end of file
  1285 + }
  1286 +
  1287 +/*email pop up css*/
  1288 +
  1289 +#labExModalID {
  1290 + display: none;
  1291 + position: absolute;
  1292 + z-index: 12000001;
  1293 + margin: auto;
  1294 + top: 50px;
  1295 + left: 0;
  1296 + right: 0;
  1297 + bottom: 0;
  1298 + width: 50%;
  1299 +}
  1300 +#labExModalbackground
  1301 +{
  1302 + background-color: black;
  1303 + bottom: 0px;
  1304 + display: none;
  1305 + height: 100%; left: 0px;
  1306 + opacity: 0.5;
  1307 + position: fixed;
  1308 + right: 0px; top: 0px;
  1309 + width: 100%;
  1310 + z-index: 12000000;
  1311 +}
  1312 +#nameHelpBlock
  1313 + {
  1314 + display:none;
  1315 +}
  1316 +#emailHelpBlock
  1317 +{
  1318 + display:none;
  1319 +}
  1320 +#emailToHelpBlock
  1321 +{
  1322 + display:none;
  1323 +}
1286 1324 \ No newline at end of file
... ...
500-DBDump/AIA-StoredProcedures/usp_GetModestyForThisLicense.sql 0 → 100644
1 1 Binary files /dev/null and b/500-DBDump/AIA-StoredProcedures/usp_GetModestyForThisLicense.sql differ
... ...