예제 #1
0
파일: views.py 프로젝트: ikicic/skoljka
def detail(request, id):
    task = get_object_or_404(Task, id=id)

    perm = task.get_user_permissions(request.user)
    if VIEW not in perm:
        return (403, "Not allowed to view this task!")
    if not check_prerequisites_for_task(task, request.user, perm):
        return (403, "Prerequisites not met, not allowed to view the task!")

    # Remember my solution.
    try:
        solution = Solution.objects.get(author_id=request.user.id, task_id=task.id)
    except:
        solution = None
    task.cache_solution = solution

    data = {"task": task, "can_edit": EDIT in perm, "solution": solution}

    featured_folder_id = getattr(settings, "FEATURED_LECTURES_FOLDER_ID", None)
    if task.is_lecture and featured_folder_id and can_edit_featured_lectures(request.user):
        # The case where task is hidden is handled in the template.
        data["can_select_as_featured"] = True
        data["is_featured"] = FolderTask.objects.filter(folder_id=featured_folder_id, task_id=id).exists()

    folder_data = get_task_folder_data(task, request.user)
    if folder_data:
        data.update(folder_data)

    return data
예제 #2
0
파일: models.py 프로젝트: ikicic/skoljka
    def is_allowed_to_solve(self, user):
        """
        Check if the user is allowed to solve current problem.

        User is allowed to solve the task if it is solvable, visible and all
        the prerequisites are met.
        """
        if not self.solvable:
            return False

        perm = self.get_user_permissions(user)
        if VIEW not in perm:
            return False

        from task.utils import check_prerequisites_for_task
        return check_prerequisites_for_task(self, user, perm)