░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/var/www/moodle/public/mod/scorm/tests/generator
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: lib.php
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * mod_scorm data generator. * * @package mod_scorm * @category test * @copyright 2013 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); /** * mod_scorm data generator class. * * @package mod_scorm * @category test * @copyright 2013 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class mod_scorm_generator extends testing_module_generator { public function create_instance($record = null, ?array $options = null) { global $CFG, $USER; require_once($CFG->dirroot.'/mod/scorm/lib.php'); require_once($CFG->dirroot.'/mod/scorm/locallib.php'); $cfgscorm = get_config('scorm'); // Add default values for scorm. $record = (array)$record + array( 'scormtype' => SCORM_TYPE_LOCAL, 'packagefile' => '', 'packageurl' => '', 'updatefreq' => SCORM_UPDATE_NEVER, 'popup' => 0, 'width' => $cfgscorm->framewidth, 'height' => $cfgscorm->frameheight, 'skipview' => $cfgscorm->skipview, 'hidebrowse' => $cfgscorm->hidebrowse, 'displaycoursestructure' => $cfgscorm->displaycoursestructure, 'hidetoc' => $cfgscorm->hidetoc, 'nav' => $cfgscorm->nav, 'navpositionleft' => $cfgscorm->navpositionleft, 'navpositiontop' => $cfgscorm->navpositiontop, 'displayattemptstatus' => $cfgscorm->displayattemptstatus, 'timeopen' => 0, 'timeclose' => 0, 'grademethod' => GRADESCOES, 'maxgrade' => $cfgscorm->maxgrade, 'maxattempt' => $cfgscorm->maxattempt, 'whatgrade' => $cfgscorm->whatgrade, 'forcenewattempt' => $cfgscorm->forcenewattempt, 'lastattemptlock' => $cfgscorm->lastattemptlock, 'forcecompleted' => $cfgscorm->forcecompleted, 'masteryoverride' => $cfgscorm->masteryoverride, 'auto' => $cfgscorm->auto ); if (!empty($record['timeopen']) && !is_int($record['timeopen'])) { $record['timeopen'] = strtotime($record['timeopen']); } if (!empty($record['timeclose']) && !is_int($record['timeclose'])) { $record['timeclose'] = strtotime($record['timeclose']); } if (empty($record['packagefilepath'])) { $record['packagefilepath'] = $CFG->dirroot.'/mod/scorm/tests/packages/singlescobasic.zip'; } if (strpos($record['packagefilepath'], $CFG->dirroot) !== 0) { $record['packagefilepath'] = "{$CFG->dirroot}/{$record['packagefilepath']}"; } // The 'packagefile' value corresponds to the draft file area ID. If not specified, create from packagefilepath. if (empty($record['packagefile']) && $record['scormtype'] === SCORM_TYPE_LOCAL) { if (!isloggedin() || isguestuser()) { throw new coding_exception('Scorm generator requires a current user'); } if (!file_exists($record['packagefilepath'])) { throw new coding_exception("File {$record['packagefilepath']} does not exist"); } $usercontext = context_user::instance($USER->id); // Pick a random context id for specified user. $record['packagefile'] = file_get_unused_draft_itemid(); // Add actual file there. $filerecord = array('component' => 'user', 'filearea' => 'draft', 'contextid' => $usercontext->id, 'itemid' => $record['packagefile'], 'filename' => basename($record['packagefilepath']), 'filepath' => '/'); $fs = get_file_storage(); $fs->create_file_from_pathname($filerecord, $record['packagefilepath']); } return parent::create_instance($record, (array)$options); } /** * Create an attempt for the current user in the given SCORM activity. * * @param stdClass|array $record * @return int the attempt ID */ public function create_attempt(stdClass|array $record): int { global $USER; if (is_array($record)) { $record = (object) $record; } $scormid = $record->scormid ?? null; if (empty($scormid)) { throw new coding_exception('The "scormid" field is required to create an attempt.'); } else { // Check if the SCORM activity exists. get_coursemodule_from_instance('scorm', $scormid, 0, false, MUST_EXIST); } if (!empty($record->userid)) { \core_user::get_user($record->userid, '*', MUST_EXIST); } $userid = $record->userid ?? $USER->id; $scoes = scorm_get_scoes($scormid); if (empty($scoes)) { throw new coding_exception('No SCOs found for the specified SCORM activity.'); } if (!empty($record->scoeident)) { foreach ($scoes as $sco) { if ($sco->identifier === $record->scoeidentifier) { break; } } } else { $sco = array_shift($scoes); } $attemptcount = $record->attempt ?? null; if (empty($record->attempt)) { // If attempt is not specified, get the last attempt count for the user and increment it. $attempts = scorm_get_all_attempts($scormid, $userid); $attemptcount = count($attempts) + 1; } return scorm_insert_track( $userid, $scormid, $sco->id, $attemptcount, $record->element ?? 'cmi.core.lesson_status', $record->value ?? 'completed' ); } }
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 behat_mod_scorm_generator.php
PHP
2.1 KB
2026-02-11 01:44
EDIT
📄 lib.php
PHP
6.4 KB
2026-02-11 01:44
EDIT