==== Υποστήριξη δημιουργίας αντιγράφου και ανάκτησης μαθήματος (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' => ), ...));