Υποστήριξη δημιουργίας αντιγράφου και ανάκτησης μαθήματος (course archive-restore)

Για τις ενέργειες αντιγράφου ασφαλείας και ανάκτησης μαθήματος, πρέπει για κάθε υποσύστημα να υπάρχει ο σχετικός κώδικας στα αρχεία modules/course_info/archive_course.php και modules/course_info/restore_course.php. Επίσης, σε κάθε αλλαγή στη δομή των πινάκων της βάσης δεδομένων θα πρέπει να γίνονται οι αντίστοιχες αλλαγές και στα παραπάνω αρχεία, αν χρειάζεται.


Archive Course

Οι προσθήκες που χρειάζονται εδώ είναι γενικά απλές. Τα δεδομένα στο αντίγραφο ασφαλείας περιέχονται σε αρχεία που έχουν το ίδιο όνομα με τους πίνακες στη βάση, τα οποία περιέχουν σε μορφή serialized PHP array τα αποτελέσματα ενός query από τη βάση με τα δεδομένα για το τρέχον μάθημα. Στο αρχείο archive_course.php ορίζεται ο πίνακας archive_conditions που περιέχει τους όρους WHERE του ερωτήματος SQL για κάθε πίνακα:

$archive_conditions = array(
    'course' => "id = $course_id",
    'user' => "id IN (SELECT user_id FROM course_user
                        WHERE course_id = $course_id)",
    'course_user' => "course_id = $course_id",
    'course_department' => "course = $course_id",
    'course_module' => $sql_course,
[...]
    'exercise' => $sql_course,
    'exercise_question' => $sql_course,
    'exercise_answer' => "question_id IN (SELECT id FROM exercise_question
                                            WHERE course_id = $course_id)",
    'exercise_user_record' => "eid IN (SELECT id FROM exercise WHERE course_id = $course_id)",
    'exercise_with_questions' => "question_id IN (SELECT id FROM exercise_question
                                                    WHERE course_id = $course_id) OR
                                  exercise_id IN (SELECT id FROM exercise
                                                    WHERE course_id = $course_id)");

Όπως φαίνεται στο παραπάνω υπόδειγμα, στους όρους γενικά χρησιμοποιείται η μεταβλητή $course_id ενώ καθώς σε πολλές περιπτώσεις ο όρος είναι WHERE course_id = $course_id, είναι προκαθορισμένη η μεταβλητή $sql_course με τον περιορισμό αυτό.


Restore Course

Στο αρχείο restore_course.php γίνονται όλες οι κλήσεις που χρειάζονται για την μεταφορά των δεδομένων ξανά στη βάση από τα αρχεία όπου είχαν αποθηκευτεί. Για το σκοπό αυτό, χρησιμοποιείται γενικά η συνάρτηση restore_table($basedir, $table, $options) που διευκολύνει όλες τις αλλαγές που μπορεί να χρειαστούν τα δεδομένα κατά τη μεταφορά τους. Το όρισμα $basedir παίρνει παντού την τιμή $restoreThis και είναι το προκαθορισμένο path του καταλόγου με τα αρχεία προς ανάκτηση. Το $table περιέχει το όνομα του πίνακα. Τέλος, το $options περιέχει έναν πίνακα με τις ενέργειες που πρέπει να γίνουν για τον πίνακα αυτό. Οι δυνατές ενέργειες είναι οι εξής: