mirror of
https://github.com/moodle/moodle.git
synced 2025-04-25 10:26:17 +02:00
Merge branch 'MDL-55158_m32v3' of https://github.com/sbourget/moodle
This commit is contained in:
commit
2f8da1e814
@ -54,6 +54,8 @@ $string['availabletodatevalidation'] = 'The available to date cannot be before t
|
||||
$string['blank'] = 'Blank';
|
||||
$string['buttons'] = 'Actions';
|
||||
$string['bynameondate'] = 'by {$a->name} - {$a->date}';
|
||||
$string['calendarend'] = 'Database {$a} closes';
|
||||
$string['calendarstart'] = 'Database {$a} opens';
|
||||
$string['cancel'] = 'Cancel';
|
||||
$string['cannotaccesspresentsother'] = 'You are not allowed to access presets from other users';
|
||||
$string['cannotadd'] = 'Can not add entries!';
|
||||
|
@ -904,7 +904,8 @@ function data_tags_check($dataid, $template) {
|
||||
* @return int intance id
|
||||
*/
|
||||
function data_add_instance($data, $mform = null) {
|
||||
global $DB;
|
||||
global $DB, $CFG;
|
||||
require_once($CFG->dirroot.'/mod/data/locallib.php');
|
||||
|
||||
if (empty($data->assessed)) {
|
||||
$data->assessed = 0;
|
||||
@ -919,6 +920,9 @@ function data_add_instance($data, $mform = null) {
|
||||
|
||||
$data->id = $DB->insert_record('data', $data);
|
||||
|
||||
// Add calendar events if necessary.
|
||||
data_set_events($data);
|
||||
|
||||
data_grade_item_update($data);
|
||||
|
||||
return $data->id;
|
||||
@ -932,7 +936,8 @@ function data_add_instance($data, $mform = null) {
|
||||
* @return bool
|
||||
*/
|
||||
function data_update_instance($data) {
|
||||
global $DB, $OUTPUT;
|
||||
global $DB, $CFG;
|
||||
require_once($CFG->dirroot.'/mod/data/locallib.php');
|
||||
|
||||
$data->timemodified = time();
|
||||
$data->id = $data->instance;
|
||||
@ -952,6 +957,9 @@ function data_update_instance($data) {
|
||||
|
||||
$DB->update_record('data', $data);
|
||||
|
||||
// Add calendar events if necessary.
|
||||
data_set_events($data);
|
||||
|
||||
data_grade_item_update($data);
|
||||
|
||||
return true;
|
||||
@ -992,6 +1000,13 @@ function data_delete_instance($id) { // takes the dataid
|
||||
$DB->delete_records('data_records', array('dataid'=>$id));
|
||||
$DB->delete_records('data_fields', array('dataid'=>$id));
|
||||
|
||||
// Remove old calendar events.
|
||||
$events = $DB->get_records('event', array('modulename' => 'data', 'instance' => $id));
|
||||
foreach ($events as $event) {
|
||||
$event = calendar_event::load($event);
|
||||
$event->delete();
|
||||
}
|
||||
|
||||
// Delete the instance itself
|
||||
$result = $DB->delete_records('data', array('id'=>$id));
|
||||
|
||||
@ -3965,3 +3980,33 @@ function data_process_submission(stdClass $mod, $fields, stdClass $datarecord) {
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* This standard function will check all instances of this module
|
||||
* and make sure there are up-to-date events created for each of them.
|
||||
* If courseid = 0, then every data event in the site is checked, else
|
||||
* only data events belonging to the course specified are checked.
|
||||
* This function is used, in its new format, by restore_refresh_events()
|
||||
*
|
||||
* @param int $courseid
|
||||
* @return bool
|
||||
*/
|
||||
function data_refresh_events($courseid = 0) {
|
||||
global $DB, $CFG;
|
||||
require_once($CFG->dirroot.'/mod/data/locallib.php');
|
||||
|
||||
if ($courseid) {
|
||||
if (! $data = $DB->get_records("data", array("course" => $courseid))) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (! $data = $DB->get_records("data")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($data as $datum) {
|
||||
data_set_events($datum);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -578,3 +578,93 @@ class data_file_info_container extends file_info {
|
||||
return $this->browser->get_file_info($this->context);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This creates new calendar events given as timeavailablefrom and timeclose by $data.
|
||||
*
|
||||
* @param stdClass $data
|
||||
* @return void
|
||||
*/
|
||||
function data_set_events($data) {
|
||||
global $DB, $CFG;
|
||||
|
||||
require_once($CFG->dirroot.'/calendar/lib.php');
|
||||
|
||||
// Get CMID if not sent as part of $data.
|
||||
if (!isset($data->coursemodule)) {
|
||||
$cm = get_coursemodule_from_instance('data', $data->id, $data->course);
|
||||
$data->coursemodule = $cm->id;
|
||||
}
|
||||
// Data start calendar events.
|
||||
$event = new stdClass();
|
||||
if ($event->id = $DB->get_field('event', 'id',
|
||||
array('modulename' => 'data', 'instance' => $data->id, 'eventtype' => 'open'))) {
|
||||
if ($data->timeavailablefrom > 0) {
|
||||
// Calendar event exists so update it.
|
||||
$event->name = get_string('calendarstart', 'data', $data->name);
|
||||
$event->description = format_module_intro('data', $data, $data->coursemodule);
|
||||
$event->timestart = $data->timeavailablefrom;
|
||||
$event->visible = instance_is_visible('data', $data);
|
||||
$event->timeduration = 0;
|
||||
$calendarevent = calendar_event::load($event->id);
|
||||
$calendarevent->update($event);
|
||||
} else {
|
||||
// Calendar event is on longer needed.
|
||||
$calendarevent = calendar_event::load($event->id);
|
||||
$calendarevent->delete();
|
||||
}
|
||||
} else {
|
||||
// Event doesn't exist so create one.
|
||||
if (isset($data->timeavailablefrom) && $data->timeavailablefrom > 0) {
|
||||
$event->name = get_string('calendarstart', 'data', $data->name);
|
||||
$event->description = format_module_intro('data', $data, $data->coursemodule);
|
||||
$event->courseid = $data->course;
|
||||
$event->groupid = 0;
|
||||
$event->userid = 0;
|
||||
$event->modulename = 'data';
|
||||
$event->instance = $data->id;
|
||||
$event->eventtype = 'open';
|
||||
$event->timestart = $data->timeavailablefrom;
|
||||
$event->visible = instance_is_visible('data', $data);
|
||||
$event->timeduration = 0;
|
||||
calendar_event::create($event);
|
||||
}
|
||||
}
|
||||
|
||||
// Data end calendar events.
|
||||
$event = new stdClass();
|
||||
if ($event->id = $DB->get_field('event', 'id',
|
||||
array('modulename' => 'data', 'instance' => $data->id, 'eventtype' => 'close'))) {
|
||||
if ($data->timeavailableto > 0) {
|
||||
// Calendar event exists so update it.
|
||||
$event->name = get_string('calendarend', 'data', $data->name);
|
||||
$event->description = format_module_intro('data', $data, $data->coursemodule);
|
||||
$event->timestart = $data->timeavailableto;
|
||||
$event->visible = instance_is_visible('data', $data);
|
||||
$event->timeduration = 0;
|
||||
$calendarevent = calendar_event::load($event->id);
|
||||
$calendarevent->update($event);
|
||||
} else {
|
||||
// Calendar event is on longer needed.
|
||||
$calendarevent = calendar_event::load($event->id);
|
||||
$calendarevent->delete();
|
||||
}
|
||||
} else {
|
||||
// Event doesn't exist so create one.
|
||||
if (isset($data->timeavailableto) && $data->timeavailableto > 0) {
|
||||
$event = new stdClass();
|
||||
$event->name = get_string('calendarend', 'data', $data->name);
|
||||
$event->description = format_module_intro('data', $data, $data->coursemodule);
|
||||
$event->courseid = $data->course;
|
||||
$event->groupid = 0;
|
||||
$event->userid = 0;
|
||||
$event->modulename = 'data';
|
||||
$event->instance = $data->id;
|
||||
$event->eventtype = 'close';
|
||||
$event->timestart = $data->timeavailableto;
|
||||
$event->visible = instance_is_visible('data', $data);
|
||||
$event->timeduration = 0;
|
||||
calendar_event::create($event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -623,4 +623,47 @@ class mod_data_lib_testcase extends advanced_testcase {
|
||||
$this->assertTrue(mod_data_rating_can_see_item_ratings($params1));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for mod_data_refresh_events.
|
||||
*/
|
||||
public function test_data_refresh_events() {
|
||||
global $DB;
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$timeopen = time();
|
||||
$timeclose = time() + 86400;
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('mod_data');
|
||||
$params['course'] = $course->id;
|
||||
$params['timeavailablefrom'] = $timeopen;
|
||||
$params['timeavailableto'] = $timeclose;
|
||||
$data = $generator->create_instance($params);
|
||||
|
||||
// Normal case, with existing course.
|
||||
$this->assertTrue(data_refresh_events($course->id));
|
||||
$eventparams = array('modulename' => 'data', 'instance' => $data->id, 'eventtype' => 'open');
|
||||
$openevent = $DB->get_record('event', $eventparams, '*', MUST_EXIST);
|
||||
$this->assertEquals($openevent->timestart, $timeopen);
|
||||
|
||||
$eventparams = array('modulename' => 'data', 'instance' => $data->id, 'eventtype' => 'close');
|
||||
$closeevent = $DB->get_record('event', $eventparams, '*', MUST_EXIST);
|
||||
$this->assertEquals($closeevent->timestart, $timeclose);
|
||||
// In case the course ID is passed as a numeric string.
|
||||
$this->assertTrue(data_refresh_events('' . $course->id));
|
||||
// Course ID not provided.
|
||||
$this->assertTrue(data_refresh_events());
|
||||
$eventparams = array('modulename' => 'data');
|
||||
$events = $DB->get_records('event', $eventparams);
|
||||
foreach ($events as $event) {
|
||||
if ($event->modulename === 'data' && $event->instance === $data->id && $event->eventtype === 'open') {
|
||||
$this->assertEquals($event->timestart, $timeopen);
|
||||
}
|
||||
if ($event->modulename === 'data' && $event->instance === $data->id && $event->eventtype === 'close') {
|
||||
$this->assertEquals($event->timestart, $timeclose);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user