Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

<?php
defined('MOODLE_INTERNAL') || die();

require_once($CFG->libdir . '/externallib.php');
require_once($CFG->libdir . '/completionlib.php');
require_once($CFG->libdir . '/accesslib.php');
require_once($CFG->dirroot . '/lib/classes/context/course.php');

use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_value;
use core_external\external_single_structure;

/**
 * External API for format_remuiformat
 *
 * @package    format_remuiformat
 * @copyright  2024
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class format_remuiformat_external extends external_api
{

    /**
     * Describes the parameters for course_progress_data function.
     *
     * @return external_function_parameters
     */
    public static function course_progress_data_parameters()
    {
        return new external_function_parameters(
            array(
                'courseid' => new external_value(PARAM_INT, 'Course ID')
            )
        );
    }

    /**
     * Get course progress data
     *
     * @param int $courseid The course ID
     * @return array Course progress information
     */
    public static function course_progress_data($courseid)
    {
        global $USER, $DB;

        $params = self::validate_parameters(
            self::course_progress_data_parameters(),
            array('courseid' => $courseid)
        );

        $context = context_course::instance($params['courseid']);
        self::validate_context($context);

        // Basic course progress data
        $course = $DB->get_record('course', array('id' => $params['courseid']), '*', MUST_EXIST);

        // Get completion info
        $completion = new completion_info($course);
        $activities = $completion->get_activities();

        $total_activities = count($activities);
        $completed_activities = 0;

        if ($total_activities > 0) {
            foreach ($activities as $activity) {
                $completion_data = $completion->get_data($activity, false, $USER->id);
                if ($completion_data->completionstate != COMPLETION_INCOMPLETE) {
                    $completed_activities++;
                }
            }
        }

        $progress_percentage = $total_activities > 0 ? round(($completed_activities / $total_activities) * 100) : 0;

        return array(
            'courseid' => $params['courseid'],
            'total_activities' => $total_activities,
            'completed_activities' => $completed_activities,
            'progress_percentage' => $progress_percentage,
            'progress_text' => $completed_activities . '/' . $total_activities
        );
    }

    /**
     * Describes the course_progress_data return value.
     *
     * @return external_single_structure
     */
    public static function course_progress_data_returns()
    {
        return new external_single_structure(
            array(
                'courseid' => new external_value(PARAM_INT, 'Course ID'),
                'total_activities' => new external_value(PARAM_INT, 'Total activities'),
                'completed_activities' => new external_value(PARAM_INT, 'Completed activities'),
                'progress_percentage' => new external_value(PARAM_INT, 'Progress percentage'),
                'progress_text' => new external_value(PARAM_TEXT, 'Progress text')
            )
        );
    }

    /**
     * Describes the parameters for show_activity_in_row function.
     *
     * @return external_function_parameters
     */
    public static function show_activity_in_row_parameters()
    {
        return new external_function_parameters(
            array(
                'courseid' => new external_value(PARAM_INT, 'Course ID'),
                'sectionid' => new external_value(PARAM_INT, 'Section ID'),
                'activityid' => new external_value(PARAM_INT, 'Activity ID')
            )
        );
    }

    /**
     * Toggle activity display format
     *
     * @param int $courseid The course ID
     * @param int $sectionid The section ID
     * @param int $activityid The activity ID
     * @return array Display type information
     */
    public static function show_activity_in_row($courseid, $sectionid, $activityid)
    {
        $params = self::validate_parameters(
            self::show_activity_in_row_parameters(),
            array(
                'courseid' => $courseid,
                'sectionid' => $sectionid,
                'activityid' => $activityid
            )
        );

        $context = context_course::instance($params['courseid']);
        self::validate_context($context);
        require_capability('moodle/course:manageactivities', $context);

        // For now, just return alternating display types
        // In a real implementation, this would toggle and store the preference
        $display_types = array('row', 'col');
        $current_type = $display_types[rand(0, 1)];

        return array(
            'type' => $current_type,
            'courseid' => $params['courseid'],
            'sectionid' => $params['sectionid'],
            'activityid' => $params['activityid']
        );
    }

    /**
     * Describes the show_activity_in_row return value.
     *
     * @return external_single_structure
     */
    public static function show_activity_in_row_returns()
    {
        return new external_single_structure(
            array(
                'type' => new external_value(PARAM_TEXT, 'Display type (row or col)'),
                'courseid' => new external_value(PARAM_INT, 'Course ID'),
                'sectionid' => new external_value(PARAM_INT, 'Section ID'),
                'activityid' => new external_value(PARAM_INT, 'Activity ID')
            )
        );
    }
}