CPE_learningsite
This repository has no backups
This repository's network speed is throttled to 100KB/sec
Upgrade your account to fix these warnings, or use backups.vc for automated backups
4cd176a439ea516368a5d8827cdf8726027259a6
CPE_learningsite / CPE / CPE.App / CPE.App.Api / Helpers / TinCanHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
using CPE.App.Api.Models; using CPE.App.Web.Code; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace CPE.App.Api.Helpers { public class TinCanHelper { public static bool HandleStatement(TinCanStatementModel statement) { // statement.Verb.Id=http://adlnet.gov/expapi/verbs/answered // statement.Verb.Id=http://adlnet.gov/expapi/verbs/experienced if (statement.Verb.Id.IndexOf("passed")>-1) { Utilities.LogWrapper.Info("[TinCanHelper][HandleStatement] {0} statement.Verb.Id={1}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), statement.Verb.Id); //parse statement to db variables var email = statement.Actor.Mbox.Substring(7); var fname = statement.Actor.Name.Substring(0, statement.Actor.Name.IndexOf(" ") + 1); var lname = statement.Actor.Name.Substring(statement.Actor.Name.LastIndexOf(" ") + 1); var courseUrl = statement.Object.Id.Substring(statement.Object.Id.LastIndexOf("/") + 1); var courseName = statement.Object.Definition.Name.EnUs; //cpe has test data with multiple, currently valid purchases of the same course for one user, which causes problems but is not a real-world problem. //elucidat tracks all users globally by email address so a tincan statement won't identify a specific purchase here //unless we create unique email addy (e.g. email+ticket@mail.com) when originally logging them in to content var course = BaseController.Database.PurchasedCourses.FirstOrDefault(c => c.Email == email && c.ContentUrl == courseUrl && c.CertificateDate == null); if (course == null) { Utilities.LogWrapper.Info("[TinCanHelper][HandleStatement] {0} no action, cert already earned email={1} courseName={2}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), email, courseName); //no action, cert already earned return true; } course.CertificateDate = Convert.ToDateTime(statement.Timestamp); try { BaseController.Database.SubmitChanges(); } catch (Exception exception) { Utilities.LogWrapper.Error("[TinCanHelper][HandleStatement] {0} email={1} courseName={2} exception={3}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), email, courseName, exception.ToString()); } var done = SendEmailHelper.SendCertificateEmail(course); Utilities.LogWrapper.Info("[TinCanHelper][HandleStatement] {0} cert sent email={1} courseName={2}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), email, courseName); //umm why am i not returning done here? return true; } if (statement.Verb.Id.IndexOf("failed") > -1) { Utilities.LogWrapper.Info("[TinCanHelper][HandleStatement] {0} statement.Verb.Id={1}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), statement.Verb.Id); //parse statement to db variables var email = statement.Actor.Mbox.Substring(7); var fname = statement.Actor.Name.Substring(0, statement.Actor.Name.IndexOf(" ") + 1); var lname = statement.Actor.Name.Substring(statement.Actor.Name.LastIndexOf(" ") + 1); var courseUrl = statement.Object.Id.Substring(statement.Object.Id.LastIndexOf("/") + 1); var courseName = statement.Object.Definition.Name.EnUs; //only logging failed attempts prior to earning a cert //selecting first record for a user for a course that is not expired. To allow for if a user fails to earn a cert within a year and re-purchases course var course = BaseController.Database.PurchasedCourses.FirstOrDefault(c => c.Email == email && c.ContentUrl == courseUrl && c.CertificateDate == null && ((c.PurchaseDate).AddYears(1)) > DateTime.UtcNow); if (course == null) { //no action, cert already earned return true; } Utilities.LogWrapper.Info("[TinCanHelper][HandleStatement] {0} course.Ticket={1}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), course.Ticket); if (!course.FailedAttempts.HasValue) { course.FailedAttempts = 0; } course.FailedAttempts++; try { BaseController.Database.SubmitChanges(); } catch (Exception exception) { Utilities.LogWrapper.Error("[TinCanHelper][HandleStatement] {0} email={1} courseName={2} exception={3}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), email, courseName, exception.ToString()); } Utilities.LogWrapper.Info("[TinCanHelper][HandleStatement] {0} failure recorded email={1} courseName={2}", DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"), email, courseName); return true; } return true; } } } |
Commits for CPE_learningsiteCPE/CPE.App/CPE.App.Api/Helpers/TinCanHelper.cs
Revision | Author | Commited | Message |
---|---|---|---|
4cd176 ... | v.shishlov | Fri 27 Aug, 2021 14:33:17 +0000 | initial commit |