mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 12:40:01 +01:00
MDL-23271 - missing completion on submit for feedback
This commit is contained in:
parent
db04866591
commit
8a41eb4fa8
@ -51,7 +51,8 @@ class backup_feedback_activity_structure_step extends backup_activity_structure_
|
||||
'publish_stats',
|
||||
'timeopen',
|
||||
'timeclose',
|
||||
'timemodified'));
|
||||
'timemodified',
|
||||
'completionsubmit'));
|
||||
|
||||
|
||||
$completeds = new backup_nested_element('completeds');
|
||||
|
@ -237,6 +237,12 @@
|
||||
$tracking->completed = $new_completed_id;
|
||||
$DB->insert_record('feedback_tracking', $tracking);
|
||||
unset($SESSION->feedback->is_started);
|
||||
|
||||
// Update completion state
|
||||
$completion = new completion_info($course);
|
||||
if ($completion->is_enabled($cm) && $feedback->completionsubmit) {
|
||||
$completion->update_state($cm, COMPLETION_COMPLETE);
|
||||
}
|
||||
|
||||
}else {
|
||||
$savereturn = 'failed';
|
||||
@ -320,10 +326,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Mark activity viewed for completion-tracking
|
||||
$completion=new completion_info($course);
|
||||
$completion->set_module_viewed($cm);
|
||||
|
||||
if($feedback->site_after_submit) {
|
||||
echo $OUTPUT->continue_button(feedback_encode_target_url($feedback->site_after_submit));
|
||||
}else {
|
||||
@ -500,5 +502,9 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Mark activity viewed for completion-tracking
|
||||
$completion=new completion_info($course);
|
||||
$completion->set_module_viewed($cm);
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
|
@ -21,7 +21,8 @@
|
||||
<FIELD NAME="publish_stats" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="page_after_submitformat" NEXT="timeopen"/>
|
||||
<FIELD NAME="timeopen" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="publish_stats" NEXT="timeclose"/>
|
||||
<FIELD NAME="timeclose" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="timeopen" NEXT="timemodified"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="timeclose"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="timeclose" NEXT="completionsubmit"/>
|
||||
<FIELD NAME="completionsubmit" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" COMMENT="If this field is set to 1, then the activity will be automatically marked as 'complete' once the user submits their choice." PREVIOUS="timemodified"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for feedback"/>
|
||||
|
@ -289,6 +289,21 @@ function xmldb_feedback_upgrade($oldversion) {
|
||||
upgrade_mod_savepoint(true, 2010051601, 'feedback');
|
||||
}
|
||||
|
||||
if ($oldversion < 2010102300) {
|
||||
|
||||
// Define field completionsubmit to be added to feedback
|
||||
$table = new xmldb_table('feedback');
|
||||
$field = new xmldb_field('completionsubmit', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'timemodified');
|
||||
|
||||
// Conditionally launch add field completionsubmit
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
// feedback savepoint reached
|
||||
upgrade_mod_savepoint(true, 2010102300, 'feedback');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,7 @@ $string['captchanotset'] = 'Captcha hasn\'t been set.';
|
||||
$string['completed'] = 'completed';
|
||||
$string['completed_feedbacks'] = 'Submitted answers';
|
||||
$string['complete_the_form'] = 'Answer the questions...';
|
||||
$string['completionsubmit'] = 'View as completed if the feedback is submitted';
|
||||
$string['configallowfullanonymous'] = 'If this option is set yes so the feedback can be completed without any preceding logon. It only affects feedbacks on the homepage.';
|
||||
$string['confirmdeleteentry'] = 'Are you sure you want to delete this entry?';
|
||||
$string['confirmdeleteitem'] = 'Are you sure you want to delete this element?';
|
||||
|
@ -28,6 +28,8 @@
|
||||
require_once($CFG->libdir.'/eventslib.php');
|
||||
/** Include calendar/lib.php */
|
||||
require_once($CFG->dirroot.'/calendar/lib.php');
|
||||
/** Include completionlib.php */
|
||||
require_once($CFG->libdir . '/completionlib.php');
|
||||
|
||||
|
||||
define('FEEDBACK_ANONYMOUS_YES', 1);
|
||||
@ -58,6 +60,7 @@ function feedback_supports($feature) {
|
||||
case FEATURE_GROUPMEMBERSONLY: return true;
|
||||
case FEATURE_MOD_INTRO: return true;
|
||||
case FEATURE_COMPLETION_TRACKS_VIEWS: return true;
|
||||
case FEATURE_COMPLETION_HAS_RULES: return true;
|
||||
case FEATURE_GRADE_HAS_GRADE: return false;
|
||||
case FEATURE_GRADE_OUTCOMES: return false;
|
||||
case FEATURE_BACKUP_MOODLE2: return true;
|
||||
@ -419,6 +422,31 @@ function feedback_print_recent_mod_activity($activity, $courseid, $detail, $modn
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains the automatic completion state for this feedback based on the condition
|
||||
* in feedback settings.
|
||||
*
|
||||
* @param object $course Course
|
||||
* @param object $cm Course-module
|
||||
* @param int $userid User ID
|
||||
* @param bool $type Type of comparison (or/and; can be used as return value if no conditions)
|
||||
* @return bool True if completed, false if not, $type if conditions not set.
|
||||
*/
|
||||
function feedback_get_completion_state($course, $cm, $userid, $type) {
|
||||
global $CFG, $DB;
|
||||
|
||||
// Get feedback details
|
||||
$feedback = $DB->get_record('feedback', array('id'=>$cm->instance), '*', MUST_EXIST);
|
||||
|
||||
// If completion option is enabled, evaluate it and return true/false
|
||||
if($feedback->completionsubmit) {
|
||||
return $DB->record_exists('feedback_tracking', array('userid'=>$userid, 'feedback'=>$feedback->id));
|
||||
} else {
|
||||
// Completion option is not enabled so just return $type
|
||||
return $type;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print a detailed representation of what a user has done with
|
||||
@ -1037,6 +1065,7 @@ function feedback_items_from_template($feedback, $templateid, $deleteold = false
|
||||
//files in the template_item are in the context of the current course
|
||||
//files in the feedback_item are in the feedback_context of the feedback
|
||||
$c_context = get_context_instance(CONTEXT_COURSE, $feedback->course);
|
||||
$course = $DB->get_record('course', array('id'=>$feedback->course));
|
||||
$cm = get_coursemodule_from_instance('feedback', $feedback->id);
|
||||
$f_context = get_context_instance(CONTEXT_MODULE, $cm->id);
|
||||
|
||||
@ -1050,7 +1079,17 @@ function feedback_items_from_template($feedback, $templateid, $deleteold = false
|
||||
}
|
||||
//delete tracking-data
|
||||
$DB->delete_records('feedback_tracking', array('feedback'=>$feedback->id));
|
||||
$DB->delete_records('feedback_completed', array('feedback'=>$feedback->id));
|
||||
|
||||
if($completeds = $DB->get_records('feedback_completed', array('feedback'=>$feedback->id))) {
|
||||
$completion = new completion_info($course);
|
||||
foreach($completeds as $completed) {
|
||||
// Update completion state
|
||||
if ($completion->is_enabled($cm) && $feedback->completionsubmit) {
|
||||
$completion->update_state($cm, COMPLETION_INCOMPLETE, $completed->userid);
|
||||
}
|
||||
$DB->delete_records('feedback_completed', array('id'=>$completed->id));
|
||||
}
|
||||
}
|
||||
$DB->delete_records('feedback_completedtmp', array('feedback'=>$feedback->id));
|
||||
}
|
||||
$positionoffset = 0;
|
||||
@ -1331,14 +1370,38 @@ function feedback_delete_item($itemid, $renumber = true){
|
||||
function feedback_delete_all_items($feedbackid){
|
||||
global $DB;
|
||||
|
||||
if(!$feedback = $DB->get_record('feedback', array('id'=>$feedbackid))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$cm = get_coursemodule_from_instance('feedback', $feedback->id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!$course = $DB->get_record('course', array('id'=>$feedback->course))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!$items = $DB->get_records('feedback_item', array('feedback'=>$feedbackid))) {
|
||||
return;
|
||||
}
|
||||
foreach($items as $item) {
|
||||
feedback_delete_item($item->id, false);
|
||||
}
|
||||
// $DB->delete_records('feedback_completed', array('feedback'=>$feedbackid));
|
||||
if($completeds = $DB->get_records('feedback_completed', array('feedback'=>$feedback->id))) {
|
||||
$completion = new completion_info($course);
|
||||
foreach($completeds as $completed) {
|
||||
// Update completion state
|
||||
if ($completion->is_enabled($cm) && $feedback->completionsubmit) {
|
||||
$completion->update_state($cm, COMPLETION_INCOMPLETE, $completed->userid);
|
||||
}
|
||||
$DB->delete_records('feedback_completed', array('id'=>$completed->id));
|
||||
}
|
||||
}
|
||||
|
||||
$DB->delete_records('feedback_completedtmp', array('feedback'=>$feedbackid));
|
||||
$DB->delete_records('feedback_completed', array('feedback'=>$feedbackid));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2275,6 +2338,19 @@ function feedback_delete_completed($completedid) {
|
||||
if (!$completed = $DB->get_record('feedback_completed', array('id'=>$completedid))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$feedback = $DB->get_record('feedback', array('id'=>$completed->feedback))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$course = $DB->get_record('course', array('id'=>$feedback->course))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$cm = get_coursemodule_from_instance('feedback', $feedback->id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//first we delete all related values
|
||||
$DB->delete_records('feedback_value', array('completed'=>$completed->id));
|
||||
|
||||
@ -2283,6 +2359,11 @@ function feedback_delete_completed($completedid) {
|
||||
$DB->delete_records('feedback_tracking', array('completed'=>$completed->id));
|
||||
}
|
||||
|
||||
// Update completion state
|
||||
$completion = new completion_info($course);
|
||||
if ($completion->is_enabled($cm) && $feedback->completionsubmit) {
|
||||
$completion->update_state($cm, COMPLETION_INCOMPLETE, $completed->userid);
|
||||
}
|
||||
//last we delete the completed-record
|
||||
return $DB->delete_records('feedback_completed', array('id'=>$completed->id));
|
||||
}
|
||||
|
@ -119,7 +119,17 @@ class mod_feedback_mod_form extends moodleform_mod {
|
||||
if ($data) {
|
||||
$data->page_after_submitformat = $data->page_after_submit['format'];
|
||||
$data->page_after_submit = $data->page_after_submit['text'];
|
||||
|
||||
// Turn off completion settings if the checkboxes aren't ticked
|
||||
$autocompletion = !empty($data->completion) && $data->completion==COMPLETION_TRACKING_AUTOMATIC;
|
||||
if(empty($data->completion) || !$autocompletion) {
|
||||
$data->completionsubmit=0;
|
||||
}
|
||||
if(empty($data->completionsubmit)) {
|
||||
$data->completionsubmit=0;
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
@ -128,4 +138,14 @@ class mod_feedback_mod_form extends moodleform_mod {
|
||||
return $errors;
|
||||
}
|
||||
|
||||
function add_completion_rules() {
|
||||
$mform =& $this->_form;
|
||||
|
||||
$mform->addElement('checkbox', 'completionsubmit', '', get_string('completionsubmit', 'feedback'));
|
||||
return array('completionsubmit');
|
||||
}
|
||||
|
||||
function completion_rule_enabled($data) {
|
||||
return !empty($data['completionsubmit']);
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
*/
|
||||
|
||||
|
||||
$module->version = 2010080300; // The current module version (Date: YYYYMMDDXX)
|
||||
$module->version = 2010102300; // The current module version (Date: YYYYMMDDXX)
|
||||
$module->requires = 2010080300; // Requires this Moodle version
|
||||
$feedback_version_intern = 1; //this version is used for restore older backups
|
||||
$module->cron = 0; // Period for cron to check this module (secs)
|
||||
|
Loading…
x
Reference in New Issue
Block a user