AutorÃa | Ultima modificación | Ver Log |
<?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/>.
/**
* Step definitions to add enrolment.
*
* @package availability_relativedate
* @copyright 2022 eWallah.net
* @author Renaat Debleu <info@eWallah.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php.
// For that reason, we can't even rely on $CFG->admin being available here.
require_once(__DIR__ . '/../../../../../lib/behat/behat_base.php');
/**
* Step definitions to add enrolment.
*
* @package availability_relativedate
* @copyright 2022 eWallah.net
* @author Renaat Debleu <info@eWallah.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class behat_availability_relativedate extends behat_base {
/**
* See a relative date
* @Then /^I should see relativedate "([^"]*)"$/
* @param string $date
*/
public function i_should_see_relativedate($date) {
global $USER;
$times = array_filter(explode('##', $date));
$time = reset($times);
$stime = userdate($time, get_string('strftimedate', 'langconfig'), $USER->timezone);
$this->execute("behat_general::assert_element_contains_text", [$stime, '.course-content', 'css_element']);
}
/**
* Add a self enrolment method starting
* @Given /^selfenrolment exists in course "(?P<course>[^"]*)" starting "(?P<date>[^"]*)"$/
* @param string $course
* @param string $date
*/
public function selfenrolment_exists_in_course_starting($course, $date) {
$this->config_self_enrolment($course, $date, '');
}
/**
* Add a self enrolment method ending
* @Given /^selfenrolment exists in course "(?P<course>[^"]*)" ending "(?P<date>[^"]*)"$/
* @param string $course
* @param string $date
*/
public function selfenrolment_exists_in_course_ending($course, $date) {
$this->config_self_enrolment($course, '', $date);
}
/**
* Make one activity available after another
* @Given /^I make "(?P<activity2>[^"]*)" relative date depending on "(?P<activity1>[^"]*)"$/
* @param string $activity1
* @param string $activity2
*/
public function i_make_activity_relative_date_depending_on($activity1, $activity2) {
global $DB;
$cm1 = $this->get_course_module_for_identifier($activity1);
$cm2 = $this->get_course_module_for_identifier($activity2);
if ($cm1 && $cm2) {
$str = '{"op":"|","c":[{"type":"relativedate","n":1,"d":1,"s":7,"m":' . $cm1->id . '}],"show":true}';
$DB->set_field('course_modules', 'availability', $str, ['id' => $cm2->id]);
}
$this->execute('behat_general::i_run_all_adhoc_tasks');
core_courseformat\base::reset_course_cache(0);
get_fast_modinfo(0, 0, true);
}
/**
* Configure self enrolment
* @param string $course
* @param string $start
* @param string $end
*/
private function config_self_enrolment($course, $start, $end) {
global $CFG, $DB;
require_once($CFG->dirroot . '/enrol/self/lib.php');
$courseid = $this->get_course_id($course);
$selfplugin = enrol_get_plugin('self');
$instance = $DB->get_record('enrol', ['courseid' => $courseid, 'enrol' => 'self'], '*', MUST_EXIST);
$instance->customint6 = 1;
$instance->enrolstartdate = $this->get_transformed_timestamp($start);
$instance->enrolenddate = $this->get_transformed_timestamp($end);
$DB->update_record('enrol', $instance);
$selfplugin->update_status($instance, ENROL_INSTANCE_ENABLED);
}
/**
* Return timestamp for the time passed.
*
* @param string $time time to convert
* @return string
*/
protected function get_transformed_timestamp($time) {
if ($time === '') {
return 0;
}
if (intval($time) > 0) {
return $time;
}
$timepassed = array_filter(explode('##', $time));
$first = reset($timepassed);
$sfirst = strtotime($first);
return ($sfirst == '') ? $first : $sfirst;
}
}