Proyectos de Subversion Moodle

Rev

Rev 380 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
header('Content-type: application/json');
require_once('../../config.php');

global $CFG, $USER, $DB, $PAGE;
require_once($CFG->libdir . '/completionlib.php');


// Parameters
$modid = optional_param('modid', 0, PARAM_INT);
$courseid = optional_param('courseid', 0, PARAM_INT);
$parent = optional_param('parent', 0, PARAM_INT);

if (!$modid && !$courseid) {
    echo json_encode([
        'success' => false,
        'data' => 'invalid arguments'
    ]);
}

$PAGE->set_url(new moodle_url('/local/cesanavigation/terminacion.php', array('course' => $courseid, 'cmid' => $modid, 'parent' => $parent)));


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

$completion = new completion_info($course);
if (!$completion->is_enabled()) {
    echo json_encode([
        'success' => false,
        'data' => 'completion not enabled'
    ]);
    exit;
}


function terminacion_get_section_availability_locked($section, $canviewhidden)
{
    global $CFG;
    $o = 0;
    if (!$section->uservisible) {
        if ($section->availableinfo) {
            $o = 1;
        }
    } else if ($canviewhidden && !empty($CFG->enableavailability)) {
        // Check if there is an availability restriction.
        $ci = new \core_availability\info_section($section);
        $fullinfo = $ci->get_full_information();
        if ($fullinfo) {
            $o = 1;
        }
    }
    return $o;
}


// Get course-modules entry
$modules = get_fast_modinfo($course->id)->get_cms();


if (!$parent) {
    $mods = [];

    foreach ($modules as $module) {
        if (!$module->uservisible || $module->is_stealth() || empty($module->url)) {
            continue;
        }
        $mods[$module->id] = $module;
    }

    $nummods = count($mods);

    $modids = array_keys($mods);
    $position = array_search($modid, $modids);   //array_search($this->page->cm->id, $modids);

    if ($position === false) {
        echo json_encode([
            'success' => false,
            'data' => 'module not exists'
        ]);
        exit;
    }

    $currentmod = $mods[$modids[$position]];

    if ($position < ($nummods - 1)) {
        $nextmod = $mods[$modids[$position + 1]];
        $redirectlink = new \moodle_url($nextmod->url, array('forceview' => 1, 'parent' => $parent));
    } else {
        $redirectlink = new \moodle_url('/my');
    }
}


// Check user is logged in
require_login($course, false, $currentmod);
if (isguestuser()) {
    echo json_encode([
        'success' => false,
        'data' => 'login is required'
    ]);
    exit;
}



// Check completion state is manual
if ($currentmod->completion != COMPLETION_TRACKING_MANUAL) {
    echo json_encode([
        'success' => false,
        'data' => 'cannot manual track'
    ]);
    exit;
}

$completion->update_state($currentmod, COMPLETION_COMPLETE);
echo json_encode([
    'success' => true,
    'data' => trim($redirectlink)
]);
exit;