Project

General

Profile

Υποστήριξη δημιουργίας αντιγράφου και ανάκτησης μαθήματος (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 περιέχει έναν πίνακα με τις ενέργειες που πρέπει να γίνουν για τον πίνακα αυτό. Οι δυνατές ενέργειες είναι οι εξής:

  • set: Θέτει την τιμή ενός πεδίου των δεδομένων. Χρησιμοποιείται συχνά για την αλλαγή του course_id. Παράδειγμα:
    array('set' => array('course_id' => $course_id), ...)
  • delete: Διαγράφει την τιμή ενός πεδίου. Χρησιμοποιείται συχνά για την αλλαγή του id του πίνακα, το οποίο κατά την ανάκτηση παίρνει αυτόματα αύξουσες τιμές, στην περίπτωση που δεν υπάρχουν αναφορές στα id του συγκεκριμένου πίνακα. Παράδειγμα:
    array('delete' => array('id'), ...)
  • return_mapping: Φροντίζει ένα πεδίο auto increment να πάρει νέα τιμή, και επιστρέφει έναν πίνακα που απεικονίζει την παλιά τιμή σε αυτή που πήρε κατά την εισαγωγή. Χρησιμοποιείται στην περίπτωση που υπάρχουν αναφορές στο id. Παράδειγμα:
    $collection_map = restore_table($restoreThis, 'collection', array('return_mapping' => 'id', ...));
  • map: Χρησιμοποιεί τον πίνακα απεικόνισης από το return_mapping για τη μετατροπή των τιμών ενός πεδίου. Χρησιμοποιείται για τη διόρθωση των αναφορών στο id ενός άλλου πίνακα. Παράδειγμα:
    restore_table($restoreThis, 'collection_item', array('map' => array('collection_id' => ), ...));