Browse Source

Add script to delete removed exercises see BT#15534

Julio Montoya 5 years ago
parent
commit
1d2d463aa8
1 changed files with 67 additions and 0 deletions
  1. 67 0
      tests/scripts/delete_deleted_exercises_with_questions.php

+ 67 - 0
tests/scripts/delete_deleted_exercises_with_questions.php

@@ -0,0 +1,67 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+exit;
+
+require_once __DIR__ . '/../../main/inc/global.inc.php';
+
+$sql = 'SELECT iid, c_id, title 
+        FROM c_quiz 
+        WHERE active = -1 
+        ORDER BY iid';
+
+$result = Database::query($sql);
+$data = Database::store_result($result);
+$counter = 1;
+$total = count($data);
+echo 'Exercises to delete: '.$total.PHP_EOL;
+
+foreach ($data as $row) {
+    $id = $row['iid'];
+    $courseId = $row['c_id'];
+    //$exercise = new Exercise($courseId);
+    //$exercise->read($id);
+
+    $courseInfo = api_get_course_info_by_id($row['c_id']);
+
+    $sql = "SELECT question_id, c_id 
+            FROM c_quiz_rel_question
+            WHERE exercice_id = $id
+            ORDER BY iid";
+    $result = Database::query($sql);
+    $questions = Database::store_result($result);
+    $totalQuestions = count($questions);
+
+    echo PHP_EOL.'-------';
+    echo PHP_EOL.'Deleting exercise "'.$row['title'].'" -  #'.$row['iid'].PHP_EOL;
+    echo '-------'.PHP_EOL.PHP_EOL;
+
+    if (!empty($questions)) {
+        $counter = 1;
+        foreach ($questions as $questionData) {
+            $questionId = $questionData['question_id'];
+            // Check if question is used in another exercise:
+            $sql = "SELECT count(iid) 
+                    FROM c_quiz_rel_question
+                    WHERE exercice_id != $id AND question_id = $questionId";
+            $result = Database::query($sql);
+            $dataQuestion = Database::fetch_array($result);
+
+            $count = $dataQuestion['count'];
+            if (empty($count)) {
+                $question = Question::read($questionId, $courseInfo);
+                $question->delete();
+                echo 'Deleting question '.$counter.'/'.$totalQuestions.' -  #'.$questionId.PHP_EOL;
+            } else {
+                echo 'Cannot delete question, it\'s been used by another exercise'.$counter.'/'.$totalQuestions.' -  #'.$questionId.PHP_EOL;
+            }
+            $counter++;
+        }
+    }
+
+    $sql = "DELETE FROM c_quiz WHERE iid = $id";
+    $result = Database::query($sql);
+
+    $sql = "DELETE FROM c_item_property WHERE ref = $id AND c_id = $courseId and tool = 'quiz' ";
+    $result = Database::query($sql);
+}