Exemplo n.º 1
0
    def GET_AUTH(self, courseid, taskid):  # pylint: disable=arguments-differ
        """ Edit a task """
        if not id_checker(taskid):
            raise Exception("Invalid task id")

        course, __ = self.get_course_and_check_rights(courseid,
                                                      allow_all_staff=False)

        try:
            task_data = self.task_factory.get_task_descriptor_content(
                courseid, taskid)
        except:
            task_data = None
        if task_data is None:
            task_data = {}

        environments = self.containers

        current_filetype = None
        try:
            current_filetype = self.task_factory.get_task_descriptor_extension(
                courseid, taskid)
        except:
            pass
        available_filetypes = self.task_factory.get_available_task_file_extensions(
        )

        return self.template_helper.get_renderer().course_admin.task_edit(
            course, taskid, self.task_factory.get_problem_types(), task_data,
            environments, json.dumps(task_data.get('problems', {})),
            self.contains_is_html(task_data), current_filetype,
            available_filetypes, AccessibleTime,
            CourseTaskFiles.get_task_filelist(self.task_factory, courseid,
                                              taskid))
Exemplo n.º 2
0
    def API_GET(self):
        """
        Returns a list of files and directories as a JSON list.
        Each entry of the output is an object (representing a file or directory) with the following
        properties:
        - "level": Integer. Indicates the depth level of this entry.
        - "is_directory": Boolean. Indicates whether the current entry is a directory. If False, it
        is a file.
        - "name": The file or directory name.
        - "complete_name": The full path of the entry.
        """
        parameters = web.input()

        courseid = get_mandatory_parameter(parameters, "course_id")
        taskid = get_mandatory_parameter(parameters, "task_id")

        self.get_course_and_check_rights(courseid)

        file_list = CourseTaskFiles.get_task_filelist(self.task_factory,
                                                      courseid, taskid)
        result = [{
            "level":
            level,
            "is_directory":
            is_directory,
            "name":
            name,
            "complete_name":
            complete_name[1:]
            if complete_name.startswith("/") else complete_name
        } for level, is_directory, name, complete_name in file_list]

        return 200, result
Exemplo n.º 3
0
    def GET_AUTH(self, courseid, taskid):  # pylint: disable=arguments-differ
        """ Edit a task """
        if not id_checker(taskid):
            raise Exception("Invalid task id")

        course, __ = self.get_course_and_check_rights(courseid,
                                                      allow_all_staff=False)

        try:
            task_data = self.task_factory.get_task_descriptor_content(
                courseid, taskid)
        except:
            task_data = None
        if task_data is None:
            task_data = {}

        # Sorting to asure that multilang is always the first option
        environments = self.containers
        if "multiple_languages" in environments:
            environments = list(environments)
            environments.remove("multiple_languages")
            environments.insert(0, "multiple_languages")
            environments = tuple(environments)

        current_filetype = None
        try:
            current_filetype = self.task_factory.get_task_descriptor_extension(
                courseid, taskid)
        except:
            pass
        available_filetypes = self.task_factory.get_available_task_file_extensions(
        )

        additional_tabs = self.plugin_manager.call_hook(
            'task_editor_tab',
            course=course,
            taskid=taskid,
            task_data=task_data,
            template_helper=self.template_helper)

        additional_footer = self.plugin_manager.call_hook(
            'task_editor_footer',
            course=course,
            taskid=taskid,
            task_data=task_data,
            template_helper=self.template_helper)

        return self.template_helper.get_renderer().course_admin.task_edit(
            course, taskid, self.task_factory.get_problem_types(), task_data,
            environments, task_data.get('problems', {}),
            self.contains_is_html(task_data), current_filetype,
            available_filetypes, AccessibleTime,
            CourseTaskFiles.get_task_filelist(self.task_factory, courseid,
                                              taskid), additional_tabs,
            additional_footer)
Exemplo n.º 4
0
    def GET_AUTH(self, courseid, taskid):  # pylint: disable=arguments-differ
        """ Edit a task """
        if not id_checker(taskid):
            raise NotFound(description=_("Invalid task id"))

        course, __ = self.get_course_and_check_rights(courseid,
                                                      allow_all_staff=False)

        try:
            task_data = self.task_factory.get_task_descriptor_content(
                courseid, taskid)
        except TaskNotFoundException:
            raise NotFound()

        # Ensure retrocompatibility
        task_data = _migrate_from_v_0_6(task_data)

        environment_types = self.environment_types
        environments = self.environments

        current_filetype = None
        try:
            current_filetype = self.task_factory.get_task_descriptor_extension(
                courseid, taskid)
        except:
            pass
        available_filetypes = self.task_factory.get_available_task_file_extensions(
        )

        additional_tabs = self.plugin_manager.call_hook(
            'task_editor_tab',
            course=course,
            taskid=taskid,
            task_data=task_data,
            template_helper=self.template_helper)

        return self.template_helper.render(
            "course_admin/task_edit.html",
            course=course,
            taskid=taskid,
            problem_types=self.task_factory.get_problem_types(),
            task_data=task_data,
            environment_types=environment_types,
            environments=environments,
            problemdata=json.dumps(task_data.get('problems', {})),
            contains_is_html=self.contains_is_html(task_data),
            current_filetype=current_filetype,
            available_filetypes=available_filetypes,
            AccessibleTime=AccessibleTime,
            file_list=CourseTaskFiles.get_task_filelist(
                self.task_factory, courseid, taskid),
            additional_tabs=additional_tabs)
Exemplo n.º 5
0
    def GET_AUTH(self, courseid, taskid):  # pylint: disable=arguments-differ
        """ Edit a task """
        if not id_checker(taskid):
            raise Exception("Invalid task id")

        course, __ = self.get_course_and_check_rights(courseid, allow_all_staff=False)

        try:
            task_data = self.task_factory.get_task_descriptor_content(courseid, taskid)
        except:
            task_data = None
        if task_data is None:
            task_data = {}

        environments = self.containers

        current_filetype = None
        try:
            current_filetype = self.task_factory.get_task_descriptor_extension(courseid, taskid)
        except:
            pass
        available_filetypes = self.task_factory.get_available_task_file_extensions()

        # custom problem-type:
        for pid in task_data.get("problems", {}):
            problem = task_data["problems"][pid]
            if (problem["type"] == "code" and "boxes" in problem) or problem["type"] not in (
                    "code", "code_single_line", "file", "match", "multiple_choice"):
                problem_copy = copy.deepcopy(problem)
                for i in ["name", "header"]:
                    if i in problem_copy:
                        del problem_copy[i]
                problem["custom"] = inginious.common.custom_yaml.dump(problem_copy)

        return self.template_helper.get_renderer().course_admin.task_edit(
            course,
            taskid,
            self.task_factory.get_problem_types(),
            task_data,
            environments,
            json.dumps(
                task_data.get(
                    'problems',
                    {})),
            self.contains_is_html(task_data),
            current_filetype,
            available_filetypes,
            AccessibleTime,
            CourseTaskFiles.get_task_filelist(self.task_factory, courseid, taskid))
Exemplo n.º 6
0
    def GET_AUTH(self, courseid, taskid):  # pylint: disable=arguments-differ
        """ Edit a task """
        if not id_checker(taskid):
            raise Exception("Invalid task id")

        course, __ = self.get_course_and_check_rights(courseid,
                                                      allow_all_staff=False)

        try:
            task_data = self.task_factory.get_task_descriptor_content(
                courseid, taskid)
        except:
            task_data = None
        if task_data is None:
            task_data = {}

        # Ensure retrocompatibility
        task_data = _migrate_from_v_0_6(task_data)

        environment_types = self.environment_types
        environments = self.environments

        current_filetype = None
        try:
            current_filetype = self.task_factory.get_task_descriptor_extension(
                courseid, taskid)
        except:
            pass
        available_filetypes = self.task_factory.get_available_task_file_extensions(
        )

        additional_tabs = self.plugin_manager.call_hook(
            'task_editor_tab',
            course=course,
            taskid=taskid,
            task_data=task_data,
            template_helper=self.template_helper)
        sectionid = web.input().get("sectionid", None)

        return self.template_helper.get_renderer().course_admin.task_edit(
            course, taskid, self.task_factory.get_problem_types(), task_data,
            environment_types, environments, task_data.get('problems', {}),
            self.contains_is_html(task_data), current_filetype,
            available_filetypes, AccessibleTime,
            CourseTaskFiles.get_task_filelist(self.task_factory, courseid,
                                              taskid), additional_tabs,
            sectionid)
Exemplo n.º 7
0
    def GET_AUTH(self, courseid, taskid):  # pylint: disable=arguments-differ
        """ Edit a task """
        if not id_checker(taskid):
            raise Exception("Invalid task id")

        course, __ = self.get_course_and_check_rights(courseid, allow_all_staff=False)

        try:
            task_data = self.task_factory.get_task_descriptor_content(courseid, taskid)
        except:
            task_data = None
        if task_data is None:
            task_data = {}

        environments = self.containers

        current_filetype = None
        try:
            current_filetype = self.task_factory.get_task_descriptor_extension(courseid, taskid)
        except:
            pass
        available_filetypes = self.task_factory.get_available_task_file_extensions()

        additional_tabs = self.plugin_manager.call_hook('task_editor_tab', course=course, taskid=taskid,
                                                        task_data=task_data, template_helper=self.template_helper)

        return self.template_helper.get_renderer().course_admin.task_edit(
            course,
            taskid,
            self.task_factory.get_problem_types(),
            task_data,
            environments,
            task_data.get('problems',{}),
            self.contains_is_html(task_data),
            current_filetype,
            available_filetypes,
            AccessibleTime,
            CourseTaskFiles.get_task_filelist(self.task_factory, courseid, taskid),
            additional_tabs
        )