/**
* This function is used by the reset_course_userdata function in moodlelib.
* This function will remove all posts from the specified assignment
* and clean up any related data.
* @param $data the data submitted from the reset course.
* @return array status array
*/
function assignment_reset_userdata($data)
{
global $CFG;
$status = array();
foreach (core_component::get_plugin_list('assignment') as $type => $dir) {
require_once "{$dir}/assignment.class.php";
$assignmentclass = "assignment_{$type}";
$ass = new $assignmentclass();
$status = array_merge($status, $ass->reset_userdata($data));
}
// Updating dates - shift may be negative too.
if ($data->timeshift) {
shift_course_mod_dates('assignment', array('timedue', 'timeavailable'), $data->timeshift, $data->courseid);
$status[] = array('component' => get_string('modulenameplural', 'assignment'), 'item' => get_string('datechanged'), 'error' => false);
}
return $status;
}
/**
* Actual implementation of the reset course functionality, delete all the
* quiz attempts for course $data->courseid, if $data->reset_quiz_attempts is
* set and true.
*
* Also, move the quiz open and close dates, if the course start date is changing.
*
* @global stdClass
* @global object
* @param object $data the data submitted from the reset course.
* @return array status array
*/
function quiz_reset_userdata($data) {
global $CFG, $DB;
require_once($CFG->libdir.'/questionlib.php');
$componentstr = get_string('modulenameplural', 'quiz');
$status = array();
/// Delete attempts.
if (!empty($data->reset_quiz_attempts)) {
$quizzes = $DB->get_records('quiz', array('course' => $data->courseid));
foreach ($quizzes as $quiz) {
quiz_delete_all_attempts($quiz);
}
// remove all grades from gradebook
if (empty($data->reset_gradebook_grades)) {
quiz_reset_gradebook($data->courseid);
}
$status[] = array('component' => $componentstr, 'item' => get_string('attemptsdeleted', 'quiz'), 'error' => false);
}
/// updating dates - shift may be negative too
if ($data->timeshift) {
shift_course_mod_dates('quiz', array('timeopen', 'timeclose'), $data->timeshift, $data->courseid);
$status[] = array('component' => $componentstr, 'item' => get_string('openclosedatesupdated', 'quiz'), 'error' => false);
}
return $status;
}
开发者ID:nfreear,项目名称:moodle,代码行数:41,代码来源:lib.php
示例8: glossary_reset_userdata
//.........这里部分代码省略.........
$componentstr = get_string('modulenameplural', 'glossary');
$status = array();
$allentriessql = "SELECT e.id\n FROM {$CFG->prefix}glossary_entries e\n INNER JOIN {$CFG->prefix}glossary g ON e.glossaryid = g.id\n WHERE g.course = {$data->courseid}";
$allglossariessql = "SELECT g.id\n FROM {$CFG->prefix}glossary g\n WHERE g.course={$data->courseid}";
// delete entries if requested
if (!empty($data->reset_glossary_all) or !empty($data->reset_glossary_types) and in_array('main', $data->reset_glossary_types) and in_array('secondary', $data->reset_glossary_types)) {
delete_records_select('glossary_ratings', "entryid IN ({$allentriessql})");
delete_records_select('glossary_comments', "entryid IN ({$allentriessql})");
delete_records_select('glossary_entries', "glossaryid IN ({$allglossariessql})");
if ($glossaries = get_records_sql($allglossariessql)) {
foreach ($glossaries as $glossaryid => $unused) {
fulldelete($CFG->dataroot . "/{$data->courseid}/moddata/glossary/{$glossaryid}");
}
}
// remove all grades from gradebook
if (empty($data->reset_gradebook_grades)) {
glossary_reset_gradebook($data->courseid);
}
$status[] = array('component' => $componentstr, 'item' => get_string('resetglossariesall', 'glossary'), 'error' => false);
} else {
if (!empty($data->reset_glossary_types)) {
$mainentriessql = "{$allentries} AND g.mainglossary=1";
$secondaryentriessql = "{$allentries} AND g.mainglossary=0";
$mainglossariessql = "{$allglossariessql} AND g.mainglossary=1";
$secondaryglossariessql = "{$allglossariessql} AND g.mainglossary=0";
if (in_array('main', $data->reset_glossary_types)) {
delete_records_select('glossary_ratings', "entryid IN ({$mainentriessql})");
delete_records_select('glossary_comments', "entryid IN ({$mainentriessql})");
delete_records_select('glossary_entries', "glossaryid IN ({$mainglossariessql})");
if ($glossaries = get_records_sql($mainglossariessql)) {
foreach ($glossaries as $glossaryid => $unused) {
fulldelete("{$CFG->dataroot}/{$data->courseid}/moddata/glossary/{$glossaryid}");
}
}
// remove all grades from gradebook
if (empty($data->reset_gradebook_grades)) {
glossary_reset_gradebook($data->courseid, 'main');
}
$status[] = array('component' => $componentstr, 'item' => get_string('resetglossaries', 'glossary'), 'error' => false);
} else {
if (in_array('secondary', $data->reset_glossary_types)) {
delete_records_select('glossary_ratings', "entryid IN ({$secondaryentriessql})");
delete_records_select('glossary_comments', "entryid IN ({$secondaryentriessql})");
delete_records_select('glossary_entries', "glossaryid IN ({$secondaryglossariessql})");
// remove exported source flag from entries in main glossary
execute_sql("UPDATE {$CFG->prefix}glossary_entries\n SET sourceglossaryid=0\n WHERE glossaryid IN ({$mainglossariessql})", false);
if ($glossaries = get_records_sql($secondaryglossariessql)) {
foreach ($glossaries as $glossaryid => $unused) {
fulldelete("{$CFG->dataroot}/{$data->courseid}/moddata/glossary/{$glossaryid}");
}
}
// remove all grades from gradebook
if (empty($data->reset_gradebook_grades)) {
glossary_reset_gradebook($data->courseid, 'secondary');
}
$status[] = array('component' => $componentstr, 'item' => get_string('resetglossaries', 'glossary') . ': ' . get_string('secondaryglossary', 'glossary'), 'error' => false);
}
}
}
}
// remove entries by users not enrolled into course
if (!empty($data->reset_glossary_notenrolled)) {
$entriessql = "SELECT e.id, e.userid, e.glossaryid, u.id AS userexists, u.deleted AS userdeleted\n FROM {$CFG->prefix}glossary_entries e\n INNER JOIN {$CFG->prefix}glossary g ON e.glossaryid = g.id\n LEFT OUTER JOIN {$CFG->prefix}user u ON e.userid = u.id\n WHERE g.course = {$data->courseid} AND e.userid > 0";
$course_context = get_context_instance(CONTEXT_COURSE, $data->courseid);
$notenrolled = array();
if ($rs = get_recordset_sql($entriessql)) {
while ($entry = rs_fetch_next_record($rs)) {
if (array_key_exists($entry->userid, $notenrolled) or !$entry->userexists or $entry->userdeleted or !has_capability('moodle/course:view', $course_context, $entry->userid)) {
delete_records('glossary_ratings', 'entryid', $entry->id);
delete_records('glossary_comments', 'entryid', $entry->id);
delete_records('glossary_entries', 'id', $entry->id);
fulldelete("{$CFG->dataroot}/{$data->courseid}/moddata/glossary/{$entry->glossaryid}");
$notenrolled[$entry->userid] = true;
}
}
rs_close($rs);
$status[] = array('component' => $componentstr, 'item' => get_string('deletenotenrolled', 'glossary'), 'error' => false);
}
}
// remove all ratings
if (!empty($data->reset_glossary_ratings)) {
delete_records_select('glossary_ratings', "entryid IN ({$allentriessql})");
// remove all grades from gradebook
if (empty($data->reset_gradebook_grades)) {
glossary_reset_gradebook($data->courseid);
}
$status[] = array('component' => $componentstr, 'item' => get_string('deleteallratings'), 'error' => false);
}
// remove all comments
if (!empty($data->reset_glossary_comments)) {
delete_records_select('glossary_comments', "entryid IN ({$allentriessql})");
$status[] = array('component' => $componentstr, 'item' => get_string('deleteallcomments'), 'error' => false);
}
/// updating dates - shift may be negative too
if ($data->timeshift) {
shift_course_mod_dates('glossary', array('assesstimestart', 'assesstimefinish'), $data->timeshift, $data->courseid);
$status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false);
}
return $status;
}
/**
* Actual implementation of the reset course functionality, delete all the
* lesson attempts for course $data->courseid.
*
* @global stdClass
* @global object
* @param object $data the data submitted from the reset course.
* @return array status array
*/
function lesson_reset_userdata($data)
{
global $CFG, $DB;
$componentstr = get_string('modulenameplural', 'lesson');
$status = array();
if (!empty($data->reset_lesson)) {
$lessonssql = "SELECT l.id\n FROM {lesson} l\n WHERE l.course=:course";
$params = array("course" => $data->courseid);
$lessons = $DB->get_records_sql($lessonssql, $params);
// Get rid of attempts files.
$fs = get_file_storage();
if ($lessons) {
foreach ($lessons as $lessonid => $unused) {
if (!($cm = get_coursemodule_from_instance('lesson', $lessonid))) {
continue;
}
$context = context_module::instance($cm->id);
$fs->delete_area_files($context->id, 'mod_lesson', 'essay_responses');
}
}
$DB->delete_records_select('lesson_timer', "lessonid IN ({$lessonssql})", $params);
$DB->delete_records_select('lesson_grades', "lessonid IN ({$lessonssql})", $params);
$DB->delete_records_select('lesson_attempts', "lessonid IN ({$lessonssql})", $params);
$DB->delete_records_select('lesson_branch', "lessonid IN ({$lessonssql})", $params);
// remove all grades from gradebook
if (empty($data->reset_gradebook_grades)) {
lesson_reset_gradebook($data->courseid);
}
$status[] = array('component' => $componentstr, 'item' => get_string('deleteallattempts', 'lesson'), 'error' => false);
}
// Remove user overrides.
if (!empty($data->reset_lesson_user_overrides)) {
$DB->delete_records_select('lesson_overrides', 'lessonid IN (SELECT id FROM {lesson} WHERE course = ?) AND userid IS NOT NULL', array($data->courseid));
$status[] = array('component' => $componentstr, 'item' => get_string('useroverridesdeleted', 'lesson'), 'error' => false);
}
// Remove group overrides.
if (!empty($data->reset_lesson_group_overrides)) {
$DB->delete_records_select('lesson_overrides', 'lessonid IN (SELECT id FROM {lesson} WHERE course = ?) AND groupid IS NOT NULL', array($data->courseid));
$status[] = array('component' => $componentstr, 'item' => get_string('groupoverridesdeleted', 'lesson'), 'error' => false);
}
/// updating dates - shift may be negative too
if ($data->timeshift) {
$DB->execute("UPDATE {lesson_overrides}\n SET available = available + ?\n WHERE lessonid IN (SELECT id FROM {lesson} WHERE course = ?)\n AND available <> 0", array($data->timeshift, $data->courseid));
$DB->execute("UPDATE {lesson_overrides}\n SET deadline = deadline + ?\n WHERE lessonid IN (SELECT id FROM {lesson} WHERE course = ?)\n AND deadline <> 0", array($data->timeshift, $data->courseid));
shift_course_mod_dates('lesson', array('available', 'deadline'), $data->timeshift, $data->courseid);
$status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false);
}
return $status;
}
/**
* This function is used by the reset_course_userdata function in moodlelib.
* This function will remove all assignment submissions and feedbacks in the database
* and clean up any related data.
* @param $data the data submitted from the reset course.
* @return array status array
*/
function assign_reset_userdata($data) {
global $CFG, $DB;
require_once($CFG->dirroot . '/mod/assign/locallib.php');
$status = array();
$params = array('courseid'=>$data->courseid);
$sql = "SELECT a.id FROM {assign} a WHERE a.course=:courseid";
$course = $DB->get_record('course', array('id'=>$data->courseid), '*', MUST_EXIST);
if ($assigns = $DB->get_records_sql($sql, $params)) {
foreach ($assigns as $assign) {
$cm = get_coursemodule_from_instance('assign',
$assign->id,
$data->courseid,
false,
MUST_EXIST);
$context = context_module::instance($cm->id);
$assignment = new assign($context, $cm, $course);
$status = array_merge($status, $assignment->reset_userdata($data));
}
}
// Updating dates - shift may be negative too.
if ($data->timeshift) {
shift_course_mod_dates('assign',
array('duedate', 'allowsubmissionsfromdate', 'cutoffdate'),
$data->timeshift,
$data->courseid);
$status[] = array('component' => get_string('modulenameplural', 'assign'),
'item' => get_string('datechanged'),
'error' => false);
}
return $status;
}
开发者ID:verbazend,项目名称:AWFA,代码行数:40,代码来源:lib.php
示例12: certificate_reset_userdata
/**
* This function is used by the reset_course_userdata function in moodlelib.
* This function will remove all posts from the specified certificate
* and clean up any related data.
*
* Written by Jean-Michel Vedrine
*
* @param $data the data submitted from the reset course.
* @return array status array
*/
function certificate_reset_userdata($data)
{
global $DB;
$componentstr = get_string('modulenameplural', 'certificate');
$status = array();
if (!empty($data->reset_certificate)) {
$sql = "SELECT cert.id\n FROM {certificate} cert\n WHERE cert.course = :courseid";
$params = array('courseid' => $data->courseid);
$certificates = $DB->get_records_sql($sql, $params);
$fs = get_file_storage();
if ($certificates) {
foreach ($certificates as $certid => $unused) {
if (!($cm = get_coursemodule_from_instance('certificate', $certid))) {
continue;
}
$context = context_module::instance($cm->id);
$fs->delete_area_files($context->id, 'mod_certificate', 'issue');
}
}
$DB->delete_records_select('certificate_issues', "certificateid IN ({$sql})", $params);
$status[] = array('component' => $componentstr, 'item' => get_string('removecert', 'certificate'), 'error' => false);
}
// Updating dates - shift may be negative too
if ($data->timeshift) {
shift_course_mod_dates('certificate', array('timeopen', 'timeclose'), $data->timeshift, $data->courseid);
$status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false);
}
return $status;
}
/**
* This function is used by the reset_course_userdata function in moodlelib.
* This function will remove all posts from the specified certificate
* and clean up any related data.
* Written by Jean-Michel Vedrine
*
* @param $data the data submitted from the reset course.
* @return array status array
*/
function simplecertificate_reset_userdata($data)
{
global $CFG, $DB;
$componentstr = get_string('modulenameplural', 'simplecertificate');
$status = array();
if (!empty($data->reset_certificate)) {
$timedeleted = time();
$certificates = $DB->get_records('simplecertificate', array('course' => $data->courseid));
foreach ($certificates as $certificate) {
$issuecertificates = $DB->get_records('simplecertificate_issues', array('certificateid' => $certificate->id, 'timedeleted' => null));
foreach ($issuecertificates as $issuecertificate) {
$issuecertificate->timedeleted = $timedeleted;
if (!$DB->update_record('simplecertificate_issues', $issuecertificate)) {
print_error(get_string('cantdeleteissue', 'simplecertificate'));
}
}
}
$status[] = array('component' => $componentstr, 'item' => get_string('modulenameplural', 'simplecertificate'), 'error' => false);
}
// Updating dates - shift may be negative too
if ($data->timeshift) {
shift_course_mod_dates('simplecertificate', array('timeopen', 'timeclose'), $data->timeshift, $data->courseid);
$status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false);
}
return $status;
}
/**
* Actual implementation of the rest coures functionality, delete all the
* quiz attempts for course $data->courseid, if $data->reset_quiz_attempts is
* set and true.
*
* Also, move the quiz open and close dates, if the course start date is changing.
* @param $data the data submitted from the reset course.
* @return array status array
*/
function quiz_reset_userdata($data)
{
global $CFG, $QTYPES;
// TODO: this should use the delete_attempt($attempt->uniqueid) function in questionlib.php
// require_once($CFG->libdir.'/questionlib.php');
$componentstr = get_string('modulenameplural', 'quiz');
$status = array();
/// Delete attempts.
if (!empty($data->reset_quiz_attempts)) {
$stateslistsql = "SELECT s.id\n FROM {$CFG->prefix}question_states s\n INNER JOIN {$CFG->prefix}quiz_attempts qza ON s.attempt=qza.uniqueid\n INNER JOIN {$CFG->prefix}quiz q ON qza.quiz=q.id\n WHERE q.course={$data->courseid}";
$attemptssql = "SELECT a.uniqueid\n FROM {$CFG->prefix}quiz_attempts a, {$CFG->prefix}quiz q\n WHERE q.course={$data->courseid} AND a.quiz=q.id";
$quizessql = "SELECT q.id\n FROM {$CFG->prefix}quiz q\n WHERE q.course={$data->courseid}";
if ($states = get_records_sql($stateslistsql)) {
//TODO: not sure if this works
$stateslist = implode(',', array_keys($states));
foreach ($QTYPES as $qtype) {
$qtype->delete_states($stateslist);
}
}
delete_records_select('question_states', "attempt IN ({$attemptssql})");
delete_records_select('question_sessions', "attemptid IN ({$attemptssql})");
delete_records_select('question_attempts', "id IN ({$attemptssql})");
// remove all grades from gradebook
if (empty($data->reset_gradebook_grades)) {
quiz_reset_gradebook($data->courseid);
}
delete_records_select('quiz_grades', "quiz IN ({$quizessql})");
$status[] = array('component' => $componentstr, 'item' => get_string('gradesdeleted', 'quiz'), 'error' => false);
delete_records_select('quiz_attempts', "quiz IN ({$quizessql})");
$status[] = array('component' => $componentstr, 'item' => get_string('attemptsdeleted', 'quiz'), 'error' => false);
}
/// updating dates - shift may be negative too
if ($data->timeshift) {
shift_course_mod_dates('quiz', array('timeopen', 'timeclose'), $data->timeshift, $data->courseid);
$status[] = array('component' => $componentstr, 'item' => get_string('openclosedatesupdated', 'quiz'), 'error' => false);
}
return $status;
}
开发者ID:e-rasvet,项目名称:reader,代码行数:47,代码来源:lib.php
示例16: choice_reset_userdata
/**
* Actual implementation of the reset course functionality, delete all the
* choice responses for course $data->courseid.
*
* @global object
* @global object
* @param object $data the data submitted from the reset course.
* @return array status array
*/
function choice_reset_userdata($data) {
global $CFG, $DB;
$componentstr = get_string('modulenameplural', 'choice');
$status = array();
if (!empty($data->reset_choice)) {
$choicessql = "SELECT ch.id
FROM {choice} ch
WHERE ch.course=?";
$DB->delete_records_select('choice_answers', "choiceid IN ($choicessql)", array($data->courseid));
$status[] = array('component'=>$componentstr, 'item'=>get_string('removeresponses', 'choice'), 'error'=>false);
}
/// updating dates - shift may be negative too
if ($data->timeshift) {
shift_course_mod_dates('choice', array('timeopen', 'timeclose'), $data->timeshift, $data->courseid);
$status[] = array('component'=>$componentstr, 'item'=>get_string('datechanged'), 'error'=>false);
}
return $status;
}
请发表评论