def path_program(request, path_id, uri): if request.user.is_authenticated(): s = SimpleSequencing() try: requested_activity = UserLearningActivity.objects.get(learning_activity__id=path_id, user=request.user) except ObjectDoesNotExist as e: return HttpResponseNotFound("<h1>Learning Activity not found</h1>") root = None try: root = UserLearningActivity.objects.get( learning_activity=requested_activity.learning_activity.get_root(), user=request.user ) except (ObjectDoesNotExist, IndexError) as e: return HttpResponseNotFound("<h1>Path not found</h1>") if request.method == "GET": # Exits last activity, and sets requested activity as current # if choice_exit consider complete _set_current(request, requested_activity, root, s) # Gets the current navegation tree as XML _XML = get_nav(root) # Escape for javascript XML = ET.tostring(_XML, "utf-8").replace('"', r"\"") breadcrumbs = s.get_current_path(requested_activity) program_quiz = Activity.get(requested_activity.learning_activity.uri) rating_totals = LearningActivityRating.objects.filter( learning_activity__uri=requested_activity.learning_activity.uri ).aggregate(Count("rating"), Avg("rating")) if program_quiz["lang"] == "javascript": template = "activitytree/programjs.html" else: template = "activitytree/program.html" return render_to_response( template, { "program_quiz": Activity.get(requested_activity.learning_activity.uri), "activity_uri": requested_activity.learning_activity.uri, "uri_id": "%s" % requested_activity.learning_activity.id, "uri": requested_activity.learning_activity.uri, "breadcrumbs": breadcrumbs, "root": requested_activity.learning_activity.get_root().uri, "root_id": "/%s" % requested_activity.learning_activity.get_root().id, "XML_NAV": XML, "rating_totals": rating_totals, }, context_instance=RequestContext(request), ) else: return HttpResponseRedirect("/login/?next=%s" % request.path)
def javascript_result(request): if request.method == "POST": rpc = json.loads(request.body) code = rpc["params"][0] activity_uri = rpc["method"] program_test = Activity.get(activity_uri) if request.user.is_authenticated() and "id" in rpc: ula = None try: ula = UserLearningActivity.objects.get(learning_activity__id=rpc["id"], user=request.user) s = SimpleSequencing() if rpc["result"] == "Success": s.update( ula, progress_status="completed", objective_status="satisfied", objective_measure=30, attempt=True, ) else: s.update(ula, attempt=True) # s.update(ula) ## Mouse Dynamics event = ULA_Event.objects.create(ULA=ula, context=rpc) event.save() except ObjectDoesNotExist: # Assume is a non assigned program pass return HttpResponse(json.dumps({}), content_type="application/javascript")
def execute_queue(request): if request.method == "POST": rpc = json.loads(request.body) print rpc code = rpc["params"][0] activity_uri = rpc["method"] program_test = Activity.get(activity_uri) unit_test = program_test["unit_test"] server = Cola(program_test["lang"]) task = {"id": None, "method": "exec", "params": {"code": code, "test": unit_test}} task_id = server.enqueue(**task) if request.user.is_authenticated() and "id" in rpc: ula = None try: ula = UserLearningActivity.objects.get(learning_activity__id=rpc["id"], user=request.user) s = SimpleSequencing() s.update(ula) ## Mouse Dynamics event = ULA_Event.objects.create(ULA=ula, context=rpc) event.save() except ObjectDoesNotExist: # Assume is a non assigned program pass rpc["task_id"] = task_id result = {"result": "added", "error": None, "id": task_id} return HttpResponse(json.dumps(result), content_type="application/javascript")
def program(request, uri): program_quiz = Activity.get(request.path) if program_quiz: if program_quiz["lang"] == "javascript": template = "activitytree/programjs.html" else: template = "activitytree/program.html" return render_to_response( template, { "program_quiz": program_quiz, "activity_uri": request.path, "breadcrumbs": None, "root": None, "XML_NAV": None, }, context_instance=RequestContext(request), ) else: return HttpResponseNotFound("<h1>Activity not found</h1>")
def activity(request, uri=None): if request.method == "GET": # Check if public, all public for now if False: return HttpResponseRedirect("/login/?next=%s" % request.path) activity_content = Activity.get("/%s" % uri) if activity_content and "content" in activity_content: content = activity_content["content"] else: content = "" if (uri).split("/")[1] == "video": return render_to_response( "activitytree/video.html", {"XML_NAV": None, "uri": uri, "video": activity_content, "breadcrumbs": None}, context_instance=RequestContext(request), ) else: return render_to_response( "activitytree/activity.html", {"XML_NAV": None, "uri": uri, "content": content, "breadcrumbs": None}, context_instance=RequestContext(request), )
def path_test(request, path_id, uri): if request.user.is_authenticated(): s = SimpleSequencing() try: requested_activity = UserLearningActivity.objects.get(learning_activity__id=path_id, user=request.user) except ObjectDoesNotExist as e: return HttpResponseNotFound("<h1>Learning Activity not found</h1>") root = None try: root = UserLearningActivity.objects.get( learning_activity=requested_activity.learning_activity.get_root(), user=request.user ) except (ObjectDoesNotExist, IndexError) as e: return HttpResponseNotFound("<h1>Path not found</h1>") feedback = None attempts_left = requested_activity.learning_activity.attempt_limit - requested_activity.num_attempts if request.method == "GET": # Exits last activity, and sets requested activity as current # if choice_exit consider complete _set_current(request, requested_activity, root, s, objective_status=None, progress_status=None) elif request.method == "POST": if "check" in request.POST and attempts_left: # quiz = activities[requested_activity.learning_activity.uri] quiz = Activity.get(requested_activity.learning_activity.uri) feedback = _check_quiz(request.POST, quiz) # Updates the current Learning Activity objective_measure = float(feedback["total_correct"]) / len(quiz["questions"]) * 100 if feedback["total_correct"] >= quiz["satisfied_at_least"]: objective_status = "satisfied" else: objective_status = "notSatisfied" s.update( requested_activity, objective_status=objective_status, objective_measure=objective_measure, attempt=True, ) attempts_left -= 1 # Gets the current navegation tree as HTML _XML = get_nav(root) # Escape for javascript XML = ET.tostring(_XML, "utf-8").replace('"', r"\"") # navegation_tree = s.nav_to_html(nav) rating_totals = LearningActivityRating.objects.filter( learning_activity__uri=requested_activity.learning_activity.uri ).aggregate(Count("rating"), Avg("rating")) breadcrumbs = s.get_current_path(requested_activity) test = Activity.get(requested_activity.learning_activity.uri) if feedback: for q in test["questions"]: if q["id"] in feedback: q["feedback"] = feedback[q["id"]] if q["interaction"] in ["choiceInteraction", "simpleChoice"]: q["feedback_options"] = zip( q["options"], feedback[q["id"]]["user_answer"], feedback[q["id"]]["checked"] ) return render_to_response( "activitytree/" + (requested_activity.learning_activity.uri).split("/")[1] + ".html", { "XML_NAV": XML, "uri": requested_activity.learning_activity.uri, "content": test, "feedback": feedback, "breadcrumbs": breadcrumbs, "uri_id": "/%s" % requested_activity.learning_activity.id, "attempt_limit": requested_activity.learning_activity.attempt_limit, "num_attempts": requested_activity.num_attempts, "attempts_left": attempts_left, "root_id": "/%s" % requested_activity.learning_activity.get_root().id, "root": requested_activity.learning_activity.get_root().uri, }, context_instance=RequestContext(request), ) else: return HttpResponseRedirect("/login/?next=%s" % request.path)
def path_activity(request, path_id, uri): learning_activity = None try: learning_activity = LearningActivity.objects.get(pk=path_id) except ObjectDoesNotExist: return HttpResponseNotFound("<h1>Learning Activity not found</h1>") if request.user.is_authenticated(): root = None s = SimpleSequencing() requested_activity = None if request.method == "GET": try: requested_activity = UserLearningActivity.objects.get(learning_activity__id=path_id, user=request.user) except (ObjectDoesNotExist, IndexError) as e: requested_activity = None # The requested_activity was NOT FOUND if not requested_activity: # The requested_activity was not found # Maybe a # 'start' REQUEST? # if 'nav' in request.GET and request.GET['nav'] == 'start': if learning_activity and learning_activity.root is None: s.assignActivityTree(request.user, learning_activity) requested_activity = UserLearningActivity.objects.get( learning_activity__id=path_id, user=request.user ) _set_current(request, requested_activity, requested_activity, s) return HttpResponseRedirect("/%s%s" % (path_id, uri)) # If is not a root learning activity then sorry, not found else: return HttpResponseNotFound("<h1>Activity not found</h1>") # Else NOT FOUND # else: # return HttpResponseNotFound('<h1>Activity not found</h1>') # We have a valid requested_activity, lets handle OTHER NAVIGATION REQUEST # Get root of activity tree root = UserLearningActivity.objects.filter( learning_activity=requested_activity.learning_activity.get_root(), user=request.user )[0] # 'continue' REQUEST? if requested_activity.is_root() and "nav" in request.GET and request.GET["nav"] == "continue": current_activity = s.get_current(requested_activity) if current_activity: requested_activity = current_activity return HttpResponseRedirect( "/%s%s" % (requested_activity.learning_activity.id, requested_activity.learning_activity.uri) ) else: _set_current(request, requested_activity, root, s, objective_status=None, progress_status=None) # Else is a # 'choice' REQUEST else: _set_current(request, requested_activity, root, s) if request.method == "POST" and "nav_event" in request.POST: # Get root of activity tree root = None try: root = UserLearningActivity.objects.get(learning_activity__id=path_id, user=request.user) except (ObjectDoesNotExist, IndexError) as e: root = None if not root or not root.is_root(): return HttpResponseNotFound("<h1>Activity not found</h1>") current_activity = s.get_current(root) if current_activity.learning_activity.choice_exit: objective_status = "satisfied" progress_status = "complete" else: progress_status = None objective_status = None # 'next' REQUEST if request.POST["nav_event"] == "next": # Go TO NEXT ACTIVITY s.exit(current_activity, progress_status=progress_status, objective_status=objective_status) next_uri = s.get_next(root, current_activity) # 'prev' REQUEST elif request.POST["nav_event"] == "prev": # Go TO PREV ACTIVITY s.exit(current_activity, progress_status=progress_status, objective_status=objective_status) next_uri = s.get_prev(root, current_activity) # No more activities ? if next_uri is None: return HttpResponseRedirect("/%s%s" % (root.learning_activity.id, root.learning_activity.uri)) else: next_activity = UserLearningActivity.objects.get(learning_activity__id=next_uri, user=request.user) return HttpResponseRedirect( "/%s%s" % (next_activity.learning_activity.id, next_activity.learning_activity.uri) ) _XML = get_nav(root) # Escape for javascript XML = ET.tostring(_XML, "utf-8").replace('"', r"\"") breadcrumbs = s.get_current_path(requested_activity) rating_totals = LearningActivityRating.objects.filter( learning_activity__uri=requested_activity.learning_activity.uri ).aggregate(Count("rating"), Avg("rating")) activity_content = Activity.get(requested_activity.learning_activity.uri) if activity_content and "content" in activity_content: content = activity_content["content"] else: content = "" update_pool(requested_activity.learning_activity.uri) if (requested_activity.learning_activity.uri).split("/")[2] == "video": return render_to_response( "activitytree/video.html", { "XML_NAV": XML, "uri": requested_activity.learning_activity.uri, "uri_id": requested_activity.learning_activity.id, "video": activity_content, "breadcrumbs": breadcrumbs, "root": requested_activity.learning_activity.get_root().uri, "root_id": "/%s" % requested_activity.learning_activity.get_root().id, "rating_totals": rating_totals, }, context_instance=RequestContext(request), ) elif requested_activity.learning_activity.is_container: return render_to_response( "activitytree/container.html", { "XML_NAV": XML, "children": requested_activity.get_children(), "uri": requested_activity.learning_activity.uri, "uri_id": "/%s" % requested_activity.learning_activity.id, "content": content, "root": requested_activity.learning_activity.get_root().uri, "root_id": "/%s" % requested_activity.learning_activity.get_root().id, "breadcrumbs": breadcrumbs, }, context_instance=RequestContext(request), ) else: return render_to_response( "activitytree/activity.html", { "XML_NAV": XML, "uri": requested_activity.learning_activity.uri, "uri_id": "/%s" % requested_activity.learning_activity.id, "content": content, "root": requested_activity.learning_activity.get_root().uri, "root_id": "/%s" % requested_activity.learning_activity.get_root().id, "breadcrumbs": breadcrumbs, "rating_totals": rating_totals, }, context_instance=RequestContext(request), ) else: return HttpResponseRedirect("/login/?next=%s" % request.path)
def get_activities(request): activities = Activity.get_all_programming() json_docs = [doc for doc in activities] return HttpResponse(json.dumps(json_docs), content_type="application/javascript")