Esempio n. 1
0
def users(request, user_id=None, course_id=None):
    if user_id == None or user_id == "":
        users = User.objects.all()

        return render_to_response("activitytree/users.html", {"users": users}, context_instance=RequestContext(request))
    elif course_id == None or course_id == "":
        user = User.objects.get(pk=user_id)
        cursos = user.activitytree_set.all()

        return render_to_response(
            "activitytree/user.html", {"user": user, "cursos": user}, context_instance=RequestContext(request)
        )

    else:
        user = User.objects.get(pk=user_id)
        # Gets the current navegation tree as HTML
        root = None

        try:
            root = UserLearningActivity.objects.get(learning_activity__id=course_id, user=user_id)
        except (ObjectDoesNotExist, IndexError) as e:
            root = None
        _XML = get_nav(root)
        # Escape for javascript
        XML = ET.tostring(_XML, "utf-8").replace('"', r"\"")
        return render_to_response(
            "activitytree/dashboard.html", {"user": user, "XML_NAV": XML}, context_instance=RequestContext(request)
        )
Esempio n. 2
0
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)
Esempio n. 3
0
def dashboard(request, path_id):
    if request.user.is_authenticated():
        if request.method == "GET":

            s = SimpleSequencing()

            # First, the requested_activity  exists??
            # Gets the Learning Activity object from uri
            requested_activity = None
            try:
                requested_activity = UserLearningActivity.objects.get(learning_activity__id=path_id, user=request.user)
            except (ObjectDoesNotExist, IndexError) as e:
                requested_activity = None

            if not requested_activity:
                return HttpResponseNotFound("<h1>Activity not found</h1>")

            # Gets the root of the User Learning Activity
            root = UserLearningActivity.objects.get(learning_activity_id=path_id, user=request.user)

            # Exits last activity, and sets requested activity as current
            # if choice_exit consider complete

            _XML = get_nav(root)
            # Escape for javascript
            XML = ET.tostring(_XML, "utf-8").replace('"', r"\"")  # navegation_tree = s.nav_to_html(nav)

            return render_to_response(
                "activitytree/dashboard.html",
                {
                    "XML_NAV": XML,
                    "children": requested_activity.get_children(),
                    "uri": requested_activity.learning_activity.uri,
                    "root": requested_activity.learning_activity.get_root().uri,
                    "root": requested_activity.learning_activity.get_root().uri,
                },
                context_instance=RequestContext(request),
            )
Esempio n. 4
0
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)
Esempio n. 5
0
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)