Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement new delete_instance callback. #228

Open
wants to merge 1 commit into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 52 additions & 7 deletions lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,60 @@ function capquiz_update_instance(stdClass $capquiz) {
*
* @param int $cmid Course module id for the instance to be deleted
*/
function capquiz_delete_instance(int $cmid) {
$capquiz = new capquiz($cmid);
if ($capquiz) {
$user = $capquiz->user();
if ($user) {
$quba = $user->question_usage();
\question_engine::delete_questions_usage_by_activity($quba->get_id());
function capquiz_delete_instance($id) {
global $CFG, $DB;
require_once($CFG->dirroot . '/mod/capquiz/locallib.php');
if (! $capquiz = $DB->get_record('capquiz', array('id' => $id))) {
return false;
}
// Delete question usage from core question.
question_engine::delete_questions_usage_by_activities(new qubaids_for_capquiz($capquiz->id));
// Delete any dependent records here.
$records = array();
if($records = $DB->get_records('capquiz_question_list', array('capquiz_id' => $capquiz->id))) {
foreach($records as $record) {
$recordsquestion = $DB->get_records('capquiz_question', array('question_list_id' => $record->id));
foreach($recordsquestion as $recordquestion) {
if (! $DB->delete_records('capquiz_question_rating', array('capquiz_question_id' => $recordquestion->id))) {
return false;
}
}
if (! $DB->delete_records('capquiz_question', array('question_list_id' => $record->id))) {
return false;
}
}
}
$records = array();
if($records = $DB->get_records('capquiz_user', array('capquiz_id' => $capquiz->id))) {
foreach($records as $record) {
if (! $DB->delete_records('capquiz_attempt', array('user_id' => $record->id))) {
return false;
}
if (! $DB->delete_records('capquiz_user_rating', array('capquiz_user_id' => $record->id))) {
return false;
}
}
}
if (! $DB->delete_records('capquiz', array('id' => $capquiz->id))) {
return false;
}
if (! $DB->delete_records('capquiz_question_list', array('capquiz_id' => $capquiz->id))) {
return false;
}
if (! $DB->delete_records('capquiz_user', array('capquiz_id' => $capquiz->id))) {
return false;
}
if (! $DB->delete_records('capquiz_question_selection', array('capquiz_id' => $capquiz->id))) {
return false;
}
if (! $DB->delete_records('capquiz_rating_system', array('capquiz_id' => $capquiz->id))) {
return false;
}
if (! $DB->delete_records('event', array('modulename' => 'capquiz', 'instance' => $capquiz->id))) {
return false;
}

return true;
}

/**
Expand Down
17 changes: 17 additions & 0 deletions locallib.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,20 @@
*/
class capquiz_exception extends moodle_exception {
}

/**
* A {@link qubaid_condition} for finding all the question usages belonging to
* a particular capquiz.
*
* @author sumaiya Javed <sumaiya.javed@catalyst.net.nz>
* @copyright 2023 Catalyst IT Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class qubaids_for_capquiz extends qubaid_join {
public function __construct($capquizid) {
$where = 'capquiza.capquiz_id = :quizaquiz';
$params = array('quizaquiz' => $capquizid);

parent::__construct('{capquiz_user} capquiza', 'capquiza.question_usage_id', $where, $params);
}
}