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
def featured_lecture(request): if not can_edit_featured_lectures(request.user): return (403, "Not allowed to modify featured lectures.") folder_id = getattr(settings, "FEATURED_LECTURES_FOLDER_ID", None) if not folder_id: return (400, "Featured lectures not enabled.") featured = request.POST["featured"] if featured not in ["yes", "no"]: return (400, "Argument `featured` should be 'yes' or 'no'.") task = get_object_or_404(Task, id=request.POST["task_id"]) if featured == "yes" and (task.hidden or not task.is_lecture): return (403, "Task hidden or not a lecture.") # Allow to remove. add = True if featured == "yes" else False add_or_remove_folder_task(folder_id, task.id, add) return (task.get_absolute_url(),)