mirror of
https://github.com/moodle/moodle.git
synced 2025-08-08 02:16:41 +02:00
Merge branch 'MDL-55157_m32v6' of https://github.com/sbourget/moodle
This commit is contained in:
commit
fa8f88095c
4 changed files with 175 additions and 33 deletions
|
@ -23,6 +23,8 @@ relateditemsdeleted,mod_feedback
|
|||
separator_decimal,mod_feedback
|
||||
separator_thousand,mod_feedback
|
||||
saving_failed_because_missing_or_false_values,mod_feedback
|
||||
start,mod_feedback
|
||||
stop,mod_feedback
|
||||
switch_group,mod_feedback
|
||||
viewcompleted,mod_feedback
|
||||
viewcompleted_help,mod_feedback
|
||||
|
|
|
@ -37,6 +37,8 @@ $string['autonumbering'] = 'Auto number questions';
|
|||
$string['autonumbering_help'] = 'Enables or disables automated numbers for each question';
|
||||
$string['average'] = 'Average';
|
||||
$string['bold'] = 'Bold';
|
||||
$string['calendarend'] = 'Feedback {$a} closes';
|
||||
$string['calendarstart'] = 'Feedback {$a} opens';
|
||||
$string['cannotaccess'] = 'You can only access this feedback from a course';
|
||||
$string['cannotsavetempl'] = 'saving templates is not allowed';
|
||||
$string['captcha'] = 'Captcha';
|
||||
|
@ -238,9 +240,7 @@ $string['show_entry'] = 'Show response';
|
|||
$string['show_nonrespondents'] = 'Show non-respondents';
|
||||
$string['site_after_submit'] = 'Site after submit';
|
||||
$string['sort_by_course'] = 'Sort by course';
|
||||
$string['start'] = 'Start';
|
||||
$string['started'] = 'started';
|
||||
$string['stop'] = 'End';
|
||||
$string['subject'] = 'Subject';
|
||||
$string['switch_item_to_not_required'] = 'Set as not required';
|
||||
$string['switch_item_to_required'] = 'Set as required';
|
||||
|
@ -296,3 +296,6 @@ $string['relateditemsdeleted'] = 'All responses for this question will also be d
|
|||
$string['radiorated'] = 'Radiobutton (rated)';
|
||||
$string['radiobutton'] = 'Multiple choice - single answer allowed (radio buttons)';
|
||||
$string['radiobutton_rated'] = 'Radiobutton (rated)';
|
||||
// Deprecated since Moodle 3.2.
|
||||
$string['start'] = 'Start';
|
||||
$string['stop'] = 'End';
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
|
||||
/** Include eventslib.php */
|
||||
require_once($CFG->libdir.'/eventslib.php');
|
||||
/** Include calendar/lib.php */
|
||||
require_once($CFG->dirroot.'/calendar/lib.php');
|
||||
// Include forms lib.
|
||||
require_once($CFG->libdir.'/formslib.php');
|
||||
|
||||
|
@ -633,6 +631,12 @@ function feedback_reset_userdata($data) {
|
|||
'error'=>false);
|
||||
}
|
||||
|
||||
// Updating dates - shift may be negative too.
|
||||
if ($data->timeshift) {
|
||||
$shifterror = !shift_course_mod_dates('feedback', array('timeopen', 'timeclose'), $data->timeshift, $data->courseid);
|
||||
$status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => $shifterror);
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
|
@ -731,57 +735,111 @@ function feedback_get_editor_options() {
|
|||
* @return void
|
||||
*/
|
||||
function feedback_set_events($feedback) {
|
||||
global $DB;
|
||||
global $DB, $CFG;
|
||||
|
||||
// adding the feedback to the eventtable (I have seen this at quiz-module)
|
||||
$DB->delete_records('event', array('modulename'=>'feedback', 'instance'=>$feedback->id));
|
||||
// Include calendar/lib.php.
|
||||
require_once($CFG->dirroot.'/calendar/lib.php');
|
||||
|
||||
// Get CMID if not sent as part of $feedback.
|
||||
if (!isset($feedback->coursemodule)) {
|
||||
$cm = get_coursemodule_from_id('feedback', $feedback->id);
|
||||
$cm = get_coursemodule_from_instance('feedback', $feedback->id, $feedback->course);
|
||||
$feedback->coursemodule = $cm->id;
|
||||
}
|
||||
|
||||
// the open-event
|
||||
if ($feedback->timeopen > 0) {
|
||||
// Feedback start calendar events.
|
||||
$eventid = $DB->get_field('event', 'id',
|
||||
array('modulename' => 'feedback', 'instance' => $feedback->id, 'eventtype' => 'open'));
|
||||
|
||||
if (isset($feedback->timeopen) && $feedback->timeopen > 0) {
|
||||
$event = new stdClass();
|
||||
$event->name = get_string('start', 'feedback').' '.$feedback->name;
|
||||
$event->name = get_string('calendarstart', 'feedback', $feedback->name);
|
||||
$event->description = format_module_intro('feedback', $feedback, $feedback->coursemodule);
|
||||
$event->courseid = $feedback->course;
|
||||
$event->groupid = 0;
|
||||
$event->userid = 0;
|
||||
$event->modulename = 'feedback';
|
||||
$event->instance = $feedback->id;
|
||||
$event->eventtype = 'open';
|
||||
$event->timestart = $feedback->timeopen;
|
||||
$event->visible = instance_is_visible('feedback', $feedback);
|
||||
if ($feedback->timeclose > 0) {
|
||||
$event->timeduration = ($feedback->timeclose - $feedback->timeopen);
|
||||
$event->timeduration = 0;
|
||||
if ($eventid) {
|
||||
// Calendar event exists so update it.
|
||||
$event->id = $eventid;
|
||||
$calendarevent = calendar_event::load($event->id);
|
||||
$calendarevent->update($event);
|
||||
} else {
|
||||
$event->timeduration = 0;
|
||||
// Event doesn't exist so create one.
|
||||
$event->courseid = $feedback->course;
|
||||
$event->groupid = 0;
|
||||
$event->userid = 0;
|
||||
$event->modulename = 'feedback';
|
||||
$event->instance = $feedback->id;
|
||||
$event->eventtype = 'open';
|
||||
calendar_event::create($event);
|
||||
}
|
||||
|
||||
calendar_event::create($event);
|
||||
} else if ($eventid) {
|
||||
// Calendar event is on longer needed.
|
||||
$calendarevent = calendar_event::load($eventid);
|
||||
$calendarevent->delete();
|
||||
}
|
||||
|
||||
// the close-event
|
||||
if ($feedback->timeclose > 0) {
|
||||
// Feedback close calendar events.
|
||||
$eventid = $DB->get_field('event', 'id',
|
||||
array('modulename' => 'feedback', 'instance' => $feedback->id, 'eventtype' => 'close'));
|
||||
|
||||
if (isset($feedback->timeclose) && $feedback->timeclose > 0) {
|
||||
$event = new stdClass();
|
||||
$event->name = get_string('stop', 'feedback').' '.$feedback->name;
|
||||
$event->name = get_string('calendarend', 'feedback', $feedback->name);
|
||||
$event->description = format_module_intro('feedback', $feedback, $feedback->coursemodule);
|
||||
$event->courseid = $feedback->course;
|
||||
$event->groupid = 0;
|
||||
$event->userid = 0;
|
||||
$event->modulename = 'feedback';
|
||||
$event->instance = $feedback->id;
|
||||
$event->eventtype = 'close';
|
||||
$event->timestart = $feedback->timeclose;
|
||||
$event->visible = instance_is_visible('feedback', $feedback);
|
||||
$event->timeduration = 0;
|
||||
|
||||
calendar_event::create($event);
|
||||
if ($eventid) {
|
||||
// Calendar event exists so update it.
|
||||
$event->id = $eventid;
|
||||
$calendarevent = calendar_event::load($event->id);
|
||||
$calendarevent->update($event);
|
||||
} else {
|
||||
// Event doesn't exist so create one.
|
||||
$event->courseid = $feedback->course;
|
||||
$event->groupid = 0;
|
||||
$event->userid = 0;
|
||||
$event->modulename = 'feedback';
|
||||
$event->instance = $feedback->id;
|
||||
$event->eventtype = 'close';
|
||||
calendar_event::create($event);
|
||||
}
|
||||
} else if ($eventid) {
|
||||
// Calendar event is on longer needed.
|
||||
$calendarevent = calendar_event::load($eventid);
|
||||
$calendarevent->delete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 feedback event in the site is checked, else
|
||||
* only feedback 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 feedback_refresh_events($courseid = 0) {
|
||||
global $DB;
|
||||
|
||||
if ($courseid) {
|
||||
if (! $feedbacks = $DB->get_records("feedback", array("course" => $courseid))) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (! $feedbacks = $DB->get_records("feedback")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($feedbacks as $feedback) {
|
||||
feedback_set_events($feedback);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* this function is called by {@link feedback_delete_userdata()}
|
||||
* it drops the feedback-instance from the course_module table
|
||||
|
|
79
mod/feedback/tests/lib_test.php
Normal file
79
mod/feedback/tests/lib_test.php
Normal file
|
@ -0,0 +1,79 @@
|
|||
<?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/>.
|
||||
/**
|
||||
* Unit tests for (some of) mod/feedback/lib.php.
|
||||
*
|
||||
* @package mod_feedback
|
||||
* @copyright 2016 Stephen Bourget
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot . '/mod/feedback/lib.php');
|
||||
|
||||
/**
|
||||
* Unit tests for (some of) mod/feedback/lib.php.
|
||||
*
|
||||
* @copyright 2016 Stephen Bourget
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class mod_feedback_lib_testcase extends advanced_testcase {
|
||||
|
||||
/**
|
||||
* Tests for mod_feedback_refresh_events.
|
||||
*/
|
||||
public function test_feedback_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_feedback');
|
||||
$params['course'] = $course->id;
|
||||
$params['timeopen'] = $timeopen;
|
||||
$params['timeclose'] = $timeclose;
|
||||
$feedback = $generator->create_instance($params);
|
||||
$cm = get_coursemodule_from_instance('feedback', $feedback->id);
|
||||
$context = context_module::instance($cm->id);
|
||||
|
||||
// Normal case, with existing course.
|
||||
$this->assertTrue(feedback_refresh_events($course->id));
|
||||
$eventparams = array('modulename' => 'feedback', 'instance' => $feedback->id, 'eventtype' => 'open');
|
||||
$openevent = $DB->get_record('event', $eventparams, '*', MUST_EXIST);
|
||||
$this->assertEquals($openevent->timestart, $timeopen);
|
||||
|
||||
$eventparams = array('modulename' => 'feedback', 'instance' => $feedback->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(feedback_refresh_events('' . $course->id));
|
||||
// Course ID not provided.
|
||||
$this->assertTrue(feedback_refresh_events());
|
||||
$eventparams = array('modulename' => 'feedback');
|
||||
$events = $DB->get_records('event', $eventparams);
|
||||
foreach ($events as $event) {
|
||||
if ($event->modulename === 'feedback' && $event->instance === $feedback->id && $event->eventtype === 'open') {
|
||||
$this->assertEquals($event->timestart, $timeopen);
|
||||
}
|
||||
if ($event->modulename === 'feedback' && $event->instance === $feedback->id && $event->eventtype === 'close') {
|
||||
$this->assertEquals($event->timestart, $timeclose);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue