#if XAPI_REGISTRY_EXISTS using System; using System.Collections.Generic; using System.Linq; using OmiLAXR.xAPI.Extensions; using TinCan; using xAPI.Registry; namespace OmiLAXR.xAPI { [Obsolete("Try to use composer instead.")] public static class xAPIv1 { public static Agent CreateAgent(xAPI_Actor actor) => CreateAgent(actor.Name, actor.Email); /// /// Create the actor parameter of xAPI statement identified by email address. /// /// /// /// public static Agent CreateAgent(string name, string mail) { return new Agent { //account = new AgentAccount(new Uri("https://learninglocker.net"), name), name = name, mbox = "mailto:" + mail }; } private static Verb CreateVerb(string uri, xAPI_Verb verb) { var v = new Verb { id = new Uri(verb.CreateValidId(uri)), display = new LanguageMap() }; foreach (var name in verb.Names) v.display.Add(name.Key, name.Value); return v; } private static Activity CreateActivity(string uri, xAPI_Activity activity, xAPI_Extensions extensions = null) { var a = new Activity { id = activity.CreateValidId(uri), definition = activity.ToTinCanActivityDefinition() }; a.definition.extensions = extensions?.ToTinCanExtensions(uri); return a; } public static (xAPI_Extensions_Activity, xAPI_Extensions_Context, xAPI_Extensions_Result) SplitExtensions( xAPI_Extensions extensions) { if (extensions == null) return (null, null, null); var activityExtensions = new xAPI_Extensions_Activity(); var contextExtensions = new xAPI_Extensions_Context(); var resultExtensions = new xAPI_Extensions_Result(); foreach (var ext in extensions) { if (activityExtensions.ExtensionType == ext.Key.extensionType) activityExtensions.Add(ext); else if (contextExtensions.ExtensionType == ext.Key.extensionType) contextExtensions.Add(ext); else if (resultExtensions.ExtensionType == ext.Key.extensionType) resultExtensions.Add(ext); } return (activityExtensions, contextExtensions, resultExtensions); } public static Statement CreateStatement( string uri, xAPI_Actor actor, xAPI_Verb verb, xAPI_Activity activity, xAPI_Extensions_Activity activityExtensions = null, xAPI_Extensions_Context contextExtensions = null, xAPI_Extensions_Result resultExtensions = null, Score score = null, bool? completion = null, bool success = true, string response = null, xAPI_Actor? instructor = null, xAPI_Actor? team = null ) { var s = new Statement { actor = CreateAgent(actor), verb = CreateVerb(uri, verb), target = CreateActivity(uri, activity, activityExtensions), context = CreateContext(uri, contextExtensions, instructor, team), result = CreateResult(uri, score, completion, success, response, resultExtensions), //add timestamp to statement timestamp = DateTime.Now, version = TCAPIVersion.latest() }; return s; } public static Group CreateGroup(xAPI_Actor group, IEnumerable members) => CreateGroup(group.Name, group.Email, members); public static Group CreateGroup(string name, string mail, IEnumerable actors) { var members = actors.Select(a => CreateAgent(a.Name, a.Email)); return new Group { name = name, mbox = "mailto:" + mail, member = members.ToList() }; } public static Statement CreateStatement( string uri, xAPI_Actor group, xAPI_Actor[] groupMembers, xAPI_Verb verb, xAPI_Activity activity, xAPI_Extensions_Activity activityExtensions = null, xAPI_Extensions_Context contextExtensions = null, xAPI_Extensions_Result resultExtensions = null, Score score = null, bool? completion = null, bool success = true, string response = null, xAPI_Actor? instructor = null, xAPI_Actor? team = null ) { var s = new Statement { actor = CreateGroup(group, groupMembers), verb = CreateVerb(uri, verb), target = CreateActivity(uri, activity, activityExtensions), context = CreateContext(uri, contextExtensions, instructor, team), result = CreateResult(uri, score, completion, success, response, resultExtensions), //add timestamp to statement timestamp = DateTime.Now, version = TCAPIVersion.latest() }; return s; } /// /// https://learningpool.com/xapi-statement-101-context-element/ /// https://xapi.com/blog/deep-dive-context/?utm_source=google&utm_medium=natural_search /// /// /// /// /// /// public static TinCan.Context CreateContext(string uri, xAPI_Extensions_Context extensions = null, xAPI_Actor? instructor = null, xAPI_Actor? team = null) { return new TinCan.Context() { instructor = instructor.HasValue ? CreateAgent(instructor.Value) : null, extensions = extensions?.ToTinCanExtensions(uri), registration = null, team = team.HasValue ? CreateAgent(team.Value) : null, }; } public static Result CreateResult(string uri, Score score = null, bool? completion = null, bool? success = null, string response = null, xAPI_Extensions_Result extensions = null) { return new Result { score = score, completion = completion, success = success, extensions = extensions?.ToTinCanExtensions(uri), response = response }; } public static Statement CreateStatement(string uri, xAPI_Actor actor, xAPI_Verb verb, xAPI_Activity activity, xAPI_Extensions extensions = null, Score score = null, bool completion = true, bool success = true) { var (activityExtensions, contextExtensions, resultExtensions) = SplitExtensions(extensions); return CreateStatement(uri, actor, verb, activity, activityExtensions, contextExtensions, resultExtensions, score, completion, success); } } } #endif