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')
)
);
}
}