## Εγχειρίδιο Ανάπτυξης

Το κείμενο αυτό περιγράφει μερικός την σχεδίαση του Moodle και πως μπορείτε να συνεισφέρετε.

Τομείς αυτού του κειμένου:

1. Αρχιτεκτονική του Moodle
2. Πως μπορείτε να συνεισφέρετε
   - Διαδικασίες Μάθησης
   - Θέματα
   - Γλώσσες
   - Σχήμα Βάσης Δεδομένων
   - Τυποποίηση Μαθηματών
   - Τεκμηρίωση και άρθρα
   - Παίρνοντας Μέρος Στον Εντοπιστή Προβλημάτων

### 1. Αρχιτεκτονική του Moodle

Απο την οπτική γωνία του διαχειριστή, το Moodle έχει σχεδιαστεί σύμφωνα με τα παρακάτω κριτήρια:

1. Το Moodle πρέπει να τρέχει σε μια ευρεία γκάμα απο πλατφόρμες
   Η πλατφόρμα της δικτυακής εφαρμογής που τρέχει στα περισσότερα συστήματα είναι υλοποιημένη με PHP σε συνδιασμό με MySQL, και αυτό είναι το περιβάλλον πάνω στο οποίο έχει αναπτυχθεί το Moodle (για Linux, Windows, και Mac OS X). Το Moodle χρησιμοποιεί επίσης και την βιβλιοθήκη ADOdb για αφαίρεση βάσης δεδομένων, που σημαίνει οτι το Moodle μπορεί να χρησιμοποιήσει περισσότερες απο δέκα διαφορετικές βάσεις δεδομένων (δυστηχώς, αν και, δεν μπορεί ακόμα να δημιουργήσει πίνακες σε όλες αυτές τις βάσεις δεδομένων - περισσότερα για αυτό αργότερα).
2. Το Moodle είναι εύκολο να το εγκαταστήσεις, να το μάθεις και να το τροποποιήσεις
   Τα πρώτα προτότυπα του Moodle (1999) είχαν χτιστεί χρησιμοποιόντας τοZope - ε΄να προχωρημένο object-oriented server για δικτυακές εφαρμογές. Δυστηχώς ανακάλυψα οτι να και η τεχνολογία ήταν αρκετά καλή, είχε μια πολλή απότομη καμπύλη μάθησης και δεν ήταν πολύ ευλύγιστοcurve με όρους διαχείρισης συστήματος. Η γλώσσα προγραμματισμού PHP, ήταν πολύ εύκολο να την μάθει κάποιος (ειδικά αν υπήρχε εμπειρία προγραμματισμού σε κάποια άλλη scripting language). Σχετικά σύντομα πήρα την απόφαση να αποφύγω την χρησιμοποίηση της class-oriented σχεδίασης - ξανά, για να κρατήσω την εφαρμογή απλή ώστε να την καταλαβαίνουν και οι αρχάριοι. Η επαναχρησιμοποίηση του κώδικα έχει επιτευχθεί απο βιβλιοθήκες με καθαρά ονόματα συναρτήσεων και σύμφωνη διάταξη απο αρχεία κώδικα. Η PHP είναι επίσης εύκολο να εγκατασταθεί (binaries είναι διαθέσιμα για κάθε πλατφόρμα) και είναι ευρέως διαθέσιμη, σε σημείο όπου πολλές υπηρεσίες φιλοξενίας δικτυακών τόπων την παρέχουν σαν μια βασική υπηρεσία.
3. Πρέπει να είναι εύκολο να γίνει αναβάθμιση απο την μια έκδοση στην άλλη
   Το Moodle ξέρει τη έκδοση είναι (επιπρόσθετα και οι εκδόσεις απο όλα τα plug-in modules) και μηχανισμός έχει ενσοματωθεί έτσι ώστε το Moodle να μπορεί να αναβαθμίζεται μόνο του χωρίς λάθη σε ποιο καινούργια έκδοση (για παράδειγμα μπορεί να μετονομάσει πίνακες σε μια βάση δεδομένων ή να προσθέσει καινούργια πεδία). Εαν χρησιμοποιείται CVS στο Unix για παράδειγμα, μπορεί κάποιος να κάνει απλά ένα "cvs update -d" και μετά να επισκεφτεί τον αρχική σελίδα του δικτυακού τόπου ώστε να ολοκληρώσει την αναβάθμιση.
4. Πρέπει να αποτελείτε απο υπομονάδες ώστε να επιτρέπετε η επέκταση του
   Το Moodle έχει έναν αριθμό απο χαρακτηριστικά τα οποία αποτελούνται απο υπομονάδες, τα οποία είναι τα θέματα, δραστηριότητες, γλώσσες, σχήμα βάσεων δεδομένων και τυποποίηση μαθημάτων. Αυτό επιτρέπει σε όλους να προσθέτουν χαρακτηριστικά στο κύριο κομμάτι του κώδικα ή ακόμα και να διανέμονται αυτά ξεχωριστά. Περισσότερα απο αυτά στον επόμενο τομέα.
5. Πρέπει να μπορεί να χρησιμοποείτε και να συνδέεται με άλλα συστήματα
   Ένα πράγμα που κάνει το Moodle είναι οτι κρατάει όλα τα αρχεία ενός μαθήματος μέσα σε ένα directory πάνω στο server. Αυτό επιτρέπει σε ένα διαχειριστή συστήματος να παρέχει seamless φόρμες για πρόσβαση σε επίπεδο φακέλου για κάθε καθηγητή, όπως οι Appletalk, SMB, NFS, FTP, WebDAV κτλ. Το σύστημα της πιστοποίησης επιτρέπει στο Moodle να χρησιμοποιεί LDAP, IMAP, POP3, NNTP και άλλες βάσεις δεδομένων σαν πηγές για την πληροφορία των χρηστών. Διαφορετικά, υπάρχει ακόμα αρκετή δουλεία να γίνει. Τα μελλοντικά σχέδια για το Moodle σε μελλοντικές εκδόσεις περιλαμβάνουν: Εισαγωγή και εξαγωγή δεδομένων απο το Moodle χρησιμοποιόντας τυποποίηση βασισμένη σε XML (συμπεριλαμβανομένου IMS and SCORM); και αύξηση της χρησιμοποίησης των style sheets για παραμετροποίηση του interface της εφαρμογής.

### 2. Πως μπορείτε να συνεισφέρετε

Όπως αναφέρθηκε παραπάνω, το Moodle έχει έναν αριθμό χαρακτηριστικών τα οποία είναι modular. Ακόμα και εαν δεν είστε προγραμματιστής υπάρχουν πράγματα που μπορείς να αλάξεις ή να βοηθήσεις.

Δραστηριότητες Εκμάθησης

> Αυτά είναι μακράν τα πιο συμαντικά modules, και βρίσκονται στο 'mod' directory. Υπάρχουν εφτά βασικά χαρακτηριστικά: assignment, choice, forum, journal, quiz, resource, και survey. Κάθε module βρίσκεται σε ένα διαφορετικό subdirectory και αποτελείτε απο τα ακόλουθα υποχρεωτικά στοιχεία (συν έξτρα αρχεία κώδικα μοναδικά για το καθένα module):

> - mod.html: Μια φόρμα για αρχικοποίηση ή αναβάθμιση αυτού του module
> - version.php: Ορίζει κάποια meta-info και παρέχει κώδικα για αναβάθμιση
> - icon.gif: μια εικόνα 16x16 για το module
> - db/: SQL dumps για όλα τα απαιτούμενα δεδομένα και πίνακες (για κάθε τύπο βάσης δεδομένων)
> - index.php: μια σελίδα που περιέχει όλες παραδείγματα κάθε μαθήματος
> - view.php: Μια σελίδα για να δείχνει ένα συγκεκριμένο παράδειγμα
> - lib.php: όλες οι συναρτήσεις που ορίζονται απο το module πρέπει να βρίσκονται εδώ. Εάν το όνομα του module λέγετε widget, τότε οι απαιτούμενες συναρτήσεις περιέχουν:
>   - widget_add_instance() - κώδικας για να προσθέτει ένα καινούργιο βήμα στο widget
>   - widget_update_instance() - κώδικας για να αναβαθμίζει ένα υπάρχον βήμα
>   - widget_delete_instance() - κώδικας για να διαγράφει ένα βήμα
>   - widget_user_outline() - δωθέντος ενός βήματος, επιστρέφει μια περίληψη απο την συνεισφορά του χρήστη
>   - widget_user_complete() - δωθέντος ενός βήματος, τυπώνει λεπτομέρειες για την συνεισφορά του χρήστη
>   - Για την αποφυγή πιθανών συγκρούσεων, οποιαδήποτε συνάρτηση του module πρέπει το όνομα της να αρχίζει με widget_ και οποιαδήποτε σταθερά ορίζεται πρέπει να αρχίζει με WIDGET_
> - Τελικά, κάθε module θα έχειμερικά αρχεία για την γλώσσα τα οποία θα περιέχουν strings για αυτό το module. Δες παρακάτω.

> Ο πιο έυκολος τρόπος να αρχίσει ένα module μιας καινούργιας διαδικασίας μάθησης είναι να χρησιμοποιήσουμε ένα template στο mod/newmodule_template.zip. Αποσυμπιέστε το και ακολουθήστε τις οδηγίες του README.

> Μπορεί επίσης να θέλετε να δημοσιεύσετε πρώτα στο Forum δραστηριοτήτων modules χρησιμοποιόντας το Moodle.

Θέματα

> Τα θέματα (ή skins) καθορίζουν την εξωτερική εμφάνιση της ιστοσελίδας σας. Ένας αριθμός από απλά θέματα παρέχεται στο κύριο αρχείο διανομής, αλλά μπορεί να θέλετε να δημιουργήσετε το δικό σας θέμα με τα δικά σας χρώματα, λογότυπα, στύλ και γραφικά.

> Κάθε θέμα βρίσκεται σε έν υποφάκελο στον φάκελο "theme", και περιέχει τουλάχιστον τους ακόλουθους φακέλους:

> - config.php: καθορίζει τα χρώματα του θέματος που χρησιμοποιούνται σε κάθε σημείο του site
> - styles.php: το style sheet, περιέχει οριμούς CSS για βασικά στοιχεία της HTML καθώς και για πάρα πολλά στοιχεια του Moodle.
> - header.html: Περιλαμβάνεται στην αρχή κάθε σελίδας. Αυτό είναι ότι χρειάζεσται για να αλλάξετε ένα λογότυπο ή να προσθέσετε κάποιο στο πάνω μέρος της σελίδας, για παράδειγμα.
> - footer.html: Περιλαμβάνεται στο τέλος κάθε σελίδας.

> Για να δημιουργήσετε τα δικά σας θέματα στην τρέχουσα έκδοση του Moodle:

> 1. Αντιγράψτε έναν απο τους υπάρχοντες φακέλους που περιέχουν τα αρχεία των θεμάτων σε ένα φάκελο με καινούργιο όνομα. Προτείνω να αρχίσετε με κάποιο απο τα βασικά θέματα.
> 2. Αλλάξτε το config.php και εισάγετε τα δικά σας χρώματα.
> 3. Αλλάξτε το styles.php και αλλάξτε τις CSS κλάσεις.
> 4. Αλλάξτε το header.html και το footer.html για να προσθέσετε καινούργια λογότυπα, ή για να αλλάξετε την εμφάνιση.

> Σημειώστε ότι όλα αυτά τα βήματα είναι προαιρετικά - μπορείτε να δημιουργήσετε μια ριζοσπαστική διαφορά στην εμφάνιση της ιστοσελίδα σας απλά αλλάζοντας τα χρώματα στο config.php

> Σημειώστε επίσης ότι αναβαθμίσεις του Moodle μπορεί να χαλάσουν κάποιο θέμα, γιαυτό να ελέγξετε προσεκτικά τις σημειώσεις εάν χρησιμοποιείται έν αδικό σας θέμα.

> Ειδικότερα, το Moodle 2.0 θα έχει ένα τελείος διαφορετικό σύστημα εμφάνισης, το οποίο είναι πιθανό οτι θα βασίζεται σε XSL μετασχηματισμούς των XML εξόδων απο το Moodle. Είναι πιθανό οτι τα θέματα για αυτό τον τρόπο θα είναι σε ένα τελείως διαφορετικό σχήμα, αλλά το πλεονέκτημα θα είναι πιθανά ένας πολύ καλύτερος βαθμός προσαρμογής (συμπεριλαμβανωμένου να κεινούνται τα στοιχεία μιας σελίδας ελέυθερα μέσα σε αυτή).

> Περισσότερη συζήτηση για αυτό στο Ομάδα Συζητήσεων Θέματων στην χρησιμοποίηση του Moodle. Εαν δημιουργήσετε ένα ωραίο θέμα που πιστεύετε οτι μπορούν να το χρησιμοποιήσουν και άλλοι, παρακαλούμε στείλτε το μας σε ένα συμπιεσμένο αρχείο στην ομάδα συζητήσεων για θέματα!

Γλώσσες

> Το Moodle έχει σχεδιαστεί για να χρησιμοποιείται σε όλο τον κόσμο. Κάθε 'string' ή 'σελίδα' κειμένου που εμφανίζεται σαν μέρος της επιφάνειας σχεδιάζετε από ένα σύνολο αρχείων που περιέχουν διαφορετικές γλώσσεες. Κάθε γλώσσα είναι ένας υποφάκελος του φακέλου 'lang'. Η δομή του φακέλου 'lang' περιγράφετε παρακάτω:

> lang/en - Ο φάκελος που περιέχει όλα τα αρχεία για μια γλώσσα (π.χ. Αγγλικά)

> - moodle.php - strings για την κεντρική επιφάνεια εργασίας
> - assignment.php - strings για το module των εργασιών
> - choice.php - strings για το module των επιλογών
> - forum.php - strings για το module των ομάδων συζητήσεων
> - journal.php - strings για το module των journal
> - quiz.php - strings για το module των ερωτημάτων
> - resource.php - strings για το module των πηγών
> - survey.php - strings για το module της έρευνας
> - .... συν άλλα modules αν υπάρχουν.
>   Ένα string καλείται απο αυτά τα αρχεία χρησιμοποιόντας την συνάρτηση get_string() ή την print_string() . Κάθε string υποστηρίζει αντικατάσταση μεταβλητών, για να υποστηρίζει την αποστολή μεταβλητών σε διαφορετικές γλώσσες.
>   π.χ. $strdueby = get_string("assignmentdueby", "assignment", userdate($date));
>   Εάν κάποιο string δεν υπάρχει σε μια συγκεκριμένη γλώσσα, τότε αυτόματα θα χρησιμοποιηθεί το αντίστοιχο στα Αγγλικά αντί για αυτό.

> lang/en/help - περιέχει όλα τις σελίδες της βοήθειας (για popup βοήθεια ευαίσθητου περιεχομένου)

> > Οι κύριες σελίδες της βοήθειας βρίσκονται εδώ, ενώ οι σελίδες με την βοήθεια για κάθε module βρίσκονται στους υποφάκελους με το όνομα του module.

> > Μπορείτε να εισάγετε ένα κουμπί βοήθειας σε μια σελίδα μέσω της συνάρτησης helpbutton.

> > π.χ. helpbutton("κείμενο", "Κάντε Click εδώ για σχετική βοήθεια με το κείμενο");

> > και για modules:

> > helpbutton("Τύποι Ομάδων Συζητήσεων", "Τύποι Ομάδων Συζητήσεων", "Ομάδα Συζητήσεων");

> Σημειώστε ότι μπορείτε να αλλάξετε τις γλώσσες διαδικτυακά μέσα απο την εφαρμογή, χρησιμοποιόντας τα δικτυακά εργαλεία του διαχειριστή κάτω από την επιλογή "Ελέγξτε Αυτή Την Γλώσσα". Αυτό κάνει εύκολο όχι μόνο το να δημιουργήσετε καινούργιεσ γλώσσες αλλά και να βελτιώσετε τις είδη υπάρχουσες. Εαν ξεκινάτε μια καινούργια γλώσσα, παρακαλώ απικοινωνήστε μαζί μου, Martin Dougiamas.

> Επίσης μπορείτε να την δημοσιεύστε και στην Ομάδα Συζητήσεων για Γλώσσες Χρησιμοποιόντας το Moodle.

> Εάν συντηρείται μια γλώσσα σε ένα εξελισόμενη βάση, μπορώ να σας δώσω CVS διακιώματα εγγραφής στον πηγαίο κώδικα του Moodle έτσι ώστε να μπορείτε να αλλάζετε απευθείας τα αρχεία.

Σχήμα Βάσης Δεδομένων

> Έχοντας μια βάση δεδομένων που δουλεύει με ορισμένους πίνακες, η σκόπιμα απλή SQL που έχει χρησιμοποιηθεί στο Moodle θα δουλεύει μια χαρά με μια μεγάλη ποικιλία από εμπορικά συστήματα βάσεων δεδομένων.

> Υπάρχει ένα πρόβλημα με την αυτοματοποιημένη δημιουργία καινούργιων πινάκων σε μια βάση δεδομένων, όπου αυτό προσπαθεί να κάνει το Moodle πάνω σε μια αρχική εγκατάσταση. Επειδή κάθε βάση δεδομένων είναι αρκετά διαφορετική, δεν υπάρχει ακόμα κάποιος τρόπος για να γίνεται αυτό με μέθοδο ανεξάρτητη της πλατφόρμας. Για την υποστήριξη αυτού του αυτοματισμού σε κάθε βάση δεδομένων, μπορεί να δημιουργηθεί ένα σχήμα που να έχει μια λίστα με τις απαιτήσεις σε SQL που χρείαζονται για να δημιουργηθούν οι πίνακες του Moodle σε μια συγκεκριμένη βάση δεδομένων. Αυτά τα αρχεία είναι στο lib/db και μέσα στο db υποφάκελ του κάθε module.

> Προς το παρών, μόνο η MySQL και η PostgreSQL υποστηρίζονται πλήρως με αυτό τον τρόπο. Εαν είστε εξοικοιωμένος με κάποιο άλλο σύστημα βάσεων δεδομένων(ειδικότερα open source βάση δεδομένων) και έιστε πρόθυμος να βοηθήσετε να εισάγουμε το υπάρχον σχήμα, παρακαλώ επικοινωνήστε μαζί μου (Martin Dougiamas).

Τυποποίηση Μαθημάτων

> Το Moodle προς το παρών υποστηρίζει τρία διαφορετικά σχήματα μαθημάτων: εβδομαδιαία, θεμάτων και κοινωνικά.

> Αυτά είναι λίγο περισσότερο συνδεδεμένα με τον υπόλοιπο κώδικα (και για αυτό τον λόγο, λιγότερο "pluggable") bαλλά είναι ακόμα αρκετά εύκολο να προστεθούν καινούργια.

> Εαν έχετε κάποια ιδέα για διαφορετικά σχήματα που χρειάζεστε ή θα θέλατε να δείτε, ελάτε σε επαφή μαζί μου κα θα κάνω οτι καλύτερο μπορώ για να τα διαθέσω σε μελλοντικές εκδόσεις.

Τεκμηρίωση και άρθρα

> Αν αισθάνεστε οτι θέλετε να γράψετε ένα έγγραφο εκπαιδευτικού περιεχομένου, ένα άρθρο, μια ακαδημαϊκή διατριβή ή οτιδήποτε άλλο γύρω απο το Moodle, παρακαλώ να το κάνετε!

> Βάλτε το στο δίκτυο και βεβαιωθείτε οτί συμπεριλάβατε συνδέσμους στο http://moodle.com/

Παίρνοντας Μέρος Στον Εντοπιστή Προβλημάτων

> Τέλος, θα ήθελα να σας καλέσω να γραφτείτε στον "εντοπιστή προβλημάτων" στην διεύθυνση bugs.moodle.org έτσι ώστε να μας ενημερώνετε για οποιοδήποτε λάθος βρίσκεται και πιθανά να συμμετέχετ και στην λύση του.

> Τα "λάθη" δεν περιλαμβάνουν μόνο λάθη λογισμικού στην τρέχουσα έκδοση του Moodle, αλλά επίσης καινούργιες ιδέες, μελλοντικές απαιτήσεις ακόμα και εποικοδομητική κριτική στα υπάρχοντα χαρακτηριστικά. Η ομορφιά του open source είναι ότι ο καθένας μπορεί να συμμετέχει με κάποιο τρόπο και να βοηθήσει ώστε να βγεί ένα καλύτερο προϊόν που θα απολαμβάνουμε όλοι μας. Σε αυτή την προσπάθεια η ενεργή συμμετοχή σας είναι καλοδεχούμενη!

> > > Ευχαριστώ που χρησιμοποιήσατε το Moodle!

> > > Χαιρετίσματα,
> > > Martin Dougiamas

Τεκμηρίωση του Moodle

Version: $Id: developer.html,v 1.2 2001/12/09 10:34:19 martin Exp $