Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1419 ariadna 1
<?php
2
defined('MOODLE_INTERNAL') || die();
3
 
4
require_once($CFG->libdir . '/externallib.php');
5
require_once($CFG->libdir . '/completionlib.php');
6
require_once($CFG->libdir . '/accesslib.php');
7
require_once($CFG->dirroot . '/lib/classes/context/course.php');
8
 
9
use core_external\external_api;
10
use core_external\external_function_parameters;
11
use core_external\external_value;
12
use core_external\external_single_structure;
13
 
14
/**
15
 * External API for format_remuiformat
16
 *
17
 * @package    format_remuiformat
18
 * @copyright  2024
19
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
20
 */
21
class format_remuiformat_external extends external_api
22
{
23
 
24
    /**
25
     * Describes the parameters for course_progress_data function.
26
     *
27
     * @return external_function_parameters
28
     */
29
    public static function course_progress_data_parameters()
30
    {
31
        return new external_function_parameters(
32
            array(
33
                'courseid' => new external_value(PARAM_INT, 'Course ID')
34
            )
35
        );
36
    }
37
 
38
    /**
39
     * Get course progress data
40
     *
41
     * @param int $courseid The course ID
42
     * @return array Course progress information
43
     */
44
    public static function course_progress_data($courseid)
45
    {
46
        global $USER, $DB;
47
 
48
        $params = self::validate_parameters(
49
            self::course_progress_data_parameters(),
50
            array('courseid' => $courseid)
51
        );
52
 
53
        $context = context_course::instance($params['courseid']);
54
        self::validate_context($context);
55
 
56
        // Basic course progress data
57
        $course = $DB->get_record('course', array('id' => $params['courseid']), '*', MUST_EXIST);
58
 
59
        // Get completion info
60
        $completion = new completion_info($course);
61
        $activities = $completion->get_activities();
62
 
63
        $total_activities = count($activities);
64
        $completed_activities = 0;
65
 
66
        if ($total_activities > 0) {
67
            foreach ($activities as $activity) {
68
                $completion_data = $completion->get_data($activity, false, $USER->id);
69
                if ($completion_data->completionstate != COMPLETION_INCOMPLETE) {
70
                    $completed_activities++;
71
                }
72
            }
73
        }
74
 
75
        $progress_percentage = $total_activities > 0 ? round(($completed_activities / $total_activities) * 100) : 0;
76
 
77
        return array(
78
            'courseid' => $params['courseid'],
79
            'total_activities' => $total_activities,
80
            'completed_activities' => $completed_activities,
81
            'progress_percentage' => $progress_percentage,
82
            'progress_text' => $completed_activities . '/' . $total_activities
83
        );
84
    }
85
 
86
    /**
87
     * Describes the course_progress_data return value.
88
     *
89
     * @return external_single_structure
90
     */
91
    public static function course_progress_data_returns()
92
    {
93
        return new external_single_structure(
94
            array(
95
                'courseid' => new external_value(PARAM_INT, 'Course ID'),
96
                'total_activities' => new external_value(PARAM_INT, 'Total activities'),
97
                'completed_activities' => new external_value(PARAM_INT, 'Completed activities'),
98
                'progress_percentage' => new external_value(PARAM_INT, 'Progress percentage'),
99
                'progress_text' => new external_value(PARAM_TEXT, 'Progress text')
100
            )
101
        );
102
    }
103
 
104
    /**
105
     * Describes the parameters for show_activity_in_row function.
106
     *
107
     * @return external_function_parameters
108
     */
109
    public static function show_activity_in_row_parameters()
110
    {
111
        return new external_function_parameters(
112
            array(
113
                'courseid' => new external_value(PARAM_INT, 'Course ID'),
114
                'sectionid' => new external_value(PARAM_INT, 'Section ID'),
115
                'activityid' => new external_value(PARAM_INT, 'Activity ID')
116
            )
117
        );
118
    }
119
 
120
    /**
121
     * Toggle activity display format
122
     *
123
     * @param int $courseid The course ID
124
     * @param int $sectionid The section ID
125
     * @param int $activityid The activity ID
126
     * @return array Display type information
127
     */
128
    public static function show_activity_in_row($courseid, $sectionid, $activityid)
129
    {
130
        $params = self::validate_parameters(
131
            self::show_activity_in_row_parameters(),
132
            array(
133
                'courseid' => $courseid,
134
                'sectionid' => $sectionid,
135
                'activityid' => $activityid
136
            )
137
        );
138
 
139
        $context = context_course::instance($params['courseid']);
140
        self::validate_context($context);
141
        require_capability('moodle/course:manageactivities', $context);
142
 
143
        // For now, just return alternating display types
144
        // In a real implementation, this would toggle and store the preference
145
        $display_types = array('row', 'col');
146
        $current_type = $display_types[rand(0, 1)];
147
 
148
        return array(
149
            'type' => $current_type,
150
            'courseid' => $params['courseid'],
151
            'sectionid' => $params['sectionid'],
152
            'activityid' => $params['activityid']
153
        );
154
    }
155
 
156
    /**
157
     * Describes the show_activity_in_row return value.
158
     *
159
     * @return external_single_structure
160
     */
161
    public static function show_activity_in_row_returns()
162
    {
163
        return new external_single_structure(
164
            array(
165
                'type' => new external_value(PARAM_TEXT, 'Display type (row or col)'),
166
                'courseid' => new external_value(PARAM_INT, 'Course ID'),
167
                'sectionid' => new external_value(PARAM_INT, 'Section ID'),
168
                'activityid' => new external_value(PARAM_INT, 'Activity ID')
169
            )
170
        );
171
    }
172
}