Commit 706b78796932a8d3f12143be898fc12d67943788
merged Develop
Showing
20 changed files
with
1159 additions
and
79 deletions
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 | |
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