2

I have already created a course using moodle RestAPI(function name : core_course_create_courses). then i want to upload a scorm package in moodle course module/activity. i have write some code for that,this code will create a module in that course. i don't know how to upload scorm package in that course module.

here is my code

  1. Add function core_course_create_modules in lib/db/services.php at line no : 327

    'core_course_create_modules' => array( 'classname' => 'core_course_external', 'methodname' => 'create_modules', 'classpath' => 'course/externallib.php', 'description' => 'Creates modules in a course', 'type' => 'write', 'capabilities' => 'moodle/course:manageactivities', )

  2. Add 3 method in Courses/externallib.php file

2.1)create_modules_parameters

=> `public static function create_modules_parameters() {
        $courseconfig = get_config('moodlecourse'); //needed for many default values
        return new external_function_parameters(
            array(
                'courseid' => new external_value(PARAM_INT, 'ID of the course'),
                'modules' => new external_multiple_structure(
                    new external_single_structure(
                        array(
                            'modulename' => new external_value(PARAM_TEXT, 'Name of the module'),
                            'section' => new external_value(PARAM_INT, 'Sectionnumber'),
                            'name' => new external_value(PARAM_TEXT, "Title of the module", VALUE_OPTIONAL),
                            'visible' => new external_value(PARAM_INT, '1: available to student, 0:not available', VALUE_OPTIONAL),
                            'description' => new external_value(PARAM_TEXT, 'the new module description', VALUE_OPTIONAL),
                            'descriptionformat' => new external_format_value(PARAM_INT, 'description', VALUE_DEFAULT),
                            'groupmode' => new external_value(PARAM_INT, 'no group, separate, visible', VALUE_DEFAULT, $courseconfig->groupmode),
                            'groupmembersonly' => new external_value(PARAM_INT, '1: yes, 0: no', VALUE_DEFAULT, 0),
                            'groupingid' => new external_value(PARAM_INT, 'grouping id',VALUE_DEFAULT, 0)
                        )
                    )
                )
            )
        );
    }`

2.2) create_modules

`public static function create_modules($courseid, $modules) {
    global $CFG, $DB;

    require_once($CFG->dirroot . "/course/lib.php");
    require_once($CFG->dirroot . "/course/modlib.php");

    $moduleinfo = new stdClass();
    $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);

    // Clean the parameters.
    $params = self::validate_parameters(self::create_modules_parameters(), array('courseid' => $courseid,'modules' => $modules));

    $context = context_course::instance($course->id);
    require_capability('moodle/course:manageactivities', $context);

    foreach ($params['modules'] as $mod) {
        $module = (object) $mod;
        $moduleobject = $DB->get_record('modules', array('name'=>$module->modulename), '*', MUST_EXIST);

        if(trim($module->modulename) == ''){
            throw new invalid_parameter_exception('Invalid module name');
        }

        if (!course_allowed_module($course, $module->modulename)){
            throw new invalid_parameter_exception('Module "'.$module->modulename.'" is disabled');
        }

        if(is_null($module->visible)){
            $module->visible = 1;
        }

        if(is_null($module->description)){
            $module->description = '';
        }

        if(!is_null($module->name) && trim($module->name) != ''){
            $moduleinfo->name = $module->name;
        }

        $moduleinfo->modulename = $module->modulename;

        $moduleinfo->visible = $module->visible;
        $moduleinfo->course = $courseid;
        $moduleinfo->section = $module->section;
        $moduleinfo->introeditor = array('text' => $module->description, 'format' => $module->descriptionformat, 'itemid' => 0);
        $moduleinfo->quizpassword = '';
        $moduleinfo->groupmode = $module->groupmode;
        $moduleinfo->groupmembersonly = $module->groupmembersonly;
        $moduleinfo->groupingid = $module->groupingid;
        $retVal = create_module($moduleinfo);

        $result[] = array('id'=>$retVal->id);
    }
    return $result;
}`

2.3)create_modules_returns
`public static function create_modules_returns() {
    return new external_multiple_structure(
        new external_single_structure(
            array(
                'id' => new external_value(PARAM_INT, 'new module id')
            )
        )
    );
}`

Parameters to call function

$module['courseid'] = 1; //course id
    $module['modules'][] = array(
    "section" => 2,//PARAM_INT, 'Sectionnumber'
    "modulename" => "scorm",//PARAM_TEXT, 'Name of the module'
    "name" => "Testing1",// OPTIONAL PARAM_TEXT, "Title of the module",
    "visible" => 1,// OPTIONAL PARAM_INT, '1: available to student, 0:not available',
    "description"=>"testing module using rest api", // OPTIONAL PARAM_TEXT, 'the new module description',
    "descriptionformat"=>1,//PARAM_INT, 'description', VALUE_DEFAULT
    //"groupmode" => "",//PARAM_INT, 'no group, separate, visible', VALUE_DEFAULT, $courseconfig->groupmode
    //"groupmembersonly" => "",//PARAM_INT, '1: yes, 0: no', VALUE_DEFAULT, 0
    //"groupingid" => "",//PARAM_INT, 'grouping id',VALUE_DEFAULT, 0
  );

as per above code , its take name field as a scorm packages, in the admin side its display name as a scorm, when i was click on that its display errors:

screenshot for error

so, i don't know how to upload scorm package in course module using moodle Rest api, how can i do ?

Thank you.

0 Answers0