Improved Deprecated core_course_get_activities_overview for Moodle 3.7

Improved Deprecated core_course_get_activities_overview for Moodle 3.7

by Syed Nayab Bukhari -
Number of replies: 0
Picture of Core developers

Hi Everyone,

I noticed, that core_course_get_activities_overview is deprecated since Moodle v3.2 and I did found any reason why Moodle team deprecated this web services.

I also notice that many web services required cmid (Course Module ID) but I can't able to fetch cmid from web service. 

I customized this web service and it is return cmid include default response (print_overview).

I believe, we should create a tracker for this web service for improvement. Please vote

and let me know if any improvement I can do.

improved code in course/externallib.php

public static function get_activities_overview($courseids) {
        global $USER;

        // Parameter validation.
        $params = self::validate_parameters(self::get_activities_overview_parameters(), array('courseids' => $courseids));
        $courseoverviews = array();

        list($courses, $warnings) = external_util::validate_courses($params['courseids']);

        if (!empty($courses)) {
            // Add lastaccess to each course (required by print_overview function).
            // We need the complete user data, the ws server does not load a complete one.
            $user = get_complete_user_data('id', $USER->id);
            foreach ($courses as $course) {
                if (isset($user->lastcourseaccess[$course->id])) {
                    $course->lastaccess = $user->lastcourseaccess[$course->id];
                } else {
                    $course->lastaccess = 0;
                }
            }
            
            $overviews = array();
            if ($modules = get_plugin_list_with_function('mod', 'print_overview')) {
                foreach ($modules as $fname) {
                    $fname($courses, $overviews);
                }
            }
            // Format output.
            foreach ($overviews as $courseid => $modules) {    
                $courseoverviews[$courseid]['id'] = $courseid;
                $courseoverviews[$courseid]['cmids'] = array();
                $courseoverviews[$courseid]['overviews'] = array();
                
                // Get all list of activities in the course
                $activities = get_array_of_activities($courseid);
                
                // Get all course module ids
                foreach ($activities as $activity) {
                    $courseoverviews[$courseid]['cmids'][] = array(
                        'cmid' => $activity->cm
                    );
                }
                
                foreach ($modules as $modname => $overviewtext) {
                    $courseoverviews[$courseid]['overviews'][] = array(
                        'module' => $modname,
                        'overviewtext' => $overviewtext // This text doesn't need formatting.
                    );
                }
            }
        }
        
        $result = array(
            'courses' => $courseoverviews,
            'warnings' => $warnings
        );
        return $result;
    }

    /**
     * Returns description of method result value
     *
     * @deprecated since 3.3
     * @todo The final deprecation of this function will take place in Moodle 3.7 - see MDL-57487.
     * @return external_description
     * @since Moodle 3.2
     */
    public static function get_activities_overview_returns() {
        return new external_single_structure(
            array(
                'courses' => new external_multiple_structure(
                    new external_single_structure(
                        array(
                            'id' => new external_value(PARAM_INT, 'Course id'),
                            'cmids' => new external_multiple_structure(
                                new external_single_structure(
                                    array(
                                        'cmid' => new external_value(PARAM_INT, 'Module id'),
                                    )
                                )
                            ),
                            'overviews' => new external_multiple_structure(
                                new external_single_structure(
                                    array(
                                        'module' => new external_value(PARAM_PLUGIN, 'Module name'),
                                        'overviewtext' => new external_value(PARAM_RAW, 'Overview text'),
                                    )
                                )
                            )
                        )
                    ), 'List of courses'
                ),
               'warnings' => new external_warnings()
            )
        );
    }

// Note: remove overridden method of get_activities_overview

improved code in db/lib/services.php

'core_course_get_activities_overview' => array(
        'classname' => 'core_course_external',
        'methodname' => 'get_activities_overview',
        'classpath' => 'course/externallib.php',
        'description' => 'Return activities overview for the given courses.',
        'type' => 'read',
        'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
    ),

Attachment moodle-update-web-service.PNG
Average of ratings: -