## Podręcznik programisty

Ten dokument częściowo opisuje strukturę Moodle, oraz sposób w jaki możesz się włączyć w jego rozwój.

Na chwilę obecną nie jest on zbyt imponujący. Docelowo powinna się pojawić lepsza dokumentacja!

Spis treści:

1. Architektura Moodle
2. Jak możesz się włączyć w rozwój
   - Składowe kursów
   - Tematy
   - Języki
   - Schematy dla baz danych
   - Formaty kursów
   - Dokumentacja i artykuły
   - Wyszukiwanie błędów

### 1. Architektura Moodle

> Z punktu widzenia administratora, platforma Moodle została zaprojektowania zgodnie z następującymi kryteriami :

> 1. Moodle powinno dać się uruchomić na jak największej ilości platform
>    Platforma aplikacji sieciowych najbardziej przenośna to PHP połączone z MySQL. Właśnie w tym środowisku Moodle zostało stworzone (pod Linuksem, Windowsem oraz Mac OS X). Do abstrakcji baz danych Moodle korzysta z biblioteki ADOdb. Oznacza to, że Moodle może wykorzystywać ponad dziesięć różnych rodzajów baz danych. (niestety Moodle nie potrafi jeszcze tworzyć tabel we wszystkich z tych baz danych. Więcej szczegółów znajdziesz w dalszej części tego podręcznika)
> 2. Moodle powinno być łatwe w instalacji, nauce obsługi i modyfikacji
>    Wczesne prototypy Moodle (1999) były tworzone z pomocą Zope - wysokopoziomowego, zorientowanego obiektowo serwera aplikacji sieciowych. Niestety okazało się, iż pomimo że technologia sama w sobie była bardzo fajna, to ciężko było ją opanować i nie była elastyczna z punktu widzenia administracji. Z drugiej strony do języka skryptowego PHP można bardzo łatwo się przyzwyczaić (szczególnie jeśli już programowałeś z wykorzystaniem języków skryptowych). Stosunkowo wcześnie zdecydowałem się na nie używanie projektowania zorientowanego na klasy - znów po to, by całość pozostała łatwa i zrozumiała dla początkujących. Ponowne wykorzystywanie kodu (code reuse) jest osiągane przez system bibliotek z jasno nazwanymi funkcjami i ściśle określonym położeniem plików z skryptami. Język PHP jest również łatwy w instalacji i jest na tyle powszechnie dostępne, że większość serwerów dostarcza go jako standard.
> 3. Przejścia między kolejnymi wersjami Moodle powinny być łatwe
>    Platforma Moodle zawiera informacje o swoim wersji (jak i o wersjach wszystkich modułów zewnętrznych). Został też w nią wbudowany mechanizm pozwalający Moodle na poprawną aktualizację do nowszych wersji (przykładowo Moodle potrafi zmieniać nazwy tabel albo dodawać nowe pola do już istniejących). Jeśli na przykład korzystasz z CVS w Uniksie, to wystarczy jedynie wydać polecenie "cvs update -d", a następnie wejść na stronę główną serwisu by zakończyć proces uaktualniania.
> 4. Moodle powinno mieć budowę modułową, aby umożliwić rozbudowę systemu
>    Moodle ma szereg funkcji modularnych takich jak tematy, składowe kursów, interfejs języków, schematy baz danych i formaty kursów. Pozwala to na dodawanie nowych funkcji do głównego kodu, lub nawet na ich oddzielną dystrybucję. Więcej na ten temat przeczytasz w sekcji poniżej.
> 5. Powinna istnieć możliwość używania Moodle w połączeniu z innymi systemami
>    Moodle trzyma wszystkie pliki danego kursu w zwykłym katalogu na serwerze. Daje to administratorowi systemu możliwość udostępnienia ich na poziomie plikowym każdemu z nauczycieli, na przykład przez Appletalk, SMB, NFS, FTP, WebDAV itd. Moduły uwierzytelniania pozwalają Moodle korzystać z LDAP, IMAP, POP3, NNTP, oraz z innych baz danych jako ze źródła informacji o użytkownikach. W przyszłości Moodle ma mieć możliwość importowania i eksportowania danych za pomocą formatów opartych na XML (w tym IMS i SCORM), oraz zwiększoną możliwość korzystania z wzorców formatowania interfejsu (dzięki temu łatwiej będzie można zintegrować Moodle z innymi stronami WWW)

### 2. Jak możesz się włączyć w rozwój

> Jak już wspomniano powyżej Moodle ma szereg funkcji, które mają budowę modułową. Nawet jeśli nie jesteś programistą istnieją dziedziny w których możesz pomóc.

> Składowe kursów

> > Są to tak na prawdę najistotniejsze moduły. Są one ulokowane w katalogu 'mod'. Istnieje siedem podstawowych modułów tego typu : Zadanie, wybór, forum, dziennik, quiz, zasób, oraz ankieta. Każdy z tych modułów zawiera oddzielny podkatalog który zawiera następujące niezbędne elementy (plus dodatkowe skrypty, właściwe tylko dla danego modułu) :

> > - mod.html: służy do umieszczania lub uaktualniania instancji tego modułu
> > - version.php: definiuje informacje (meta-info) i umożliwia aktualizację
> > - icon.gif: ikona o rozmiarze 16x16, symbolizująca moduł
> > - db/: db rables i dane dla SQL (dla każdego typu bazy danych)
> > - index.php: zawiera listę instancji w kursie
> > - view.php: strona służąca do oglądania wybranej instancji
> > - lib.php: Jeśli moduł definiuje jakieś funkcje, to powinny one się tu znajdować. Jeśli moduł nazywa się np. widget, wtedy niezbędne jest zamieszczenie następujących funkcji:
> >   - widget_add_instance() - kod służący do dodawania nowych instancji
> >   - widget_update_instance() - Kod służący do uaktualniania już istniejących instancji
> >   - widget_delete_instance() - Kod służący do usuwania instancji
> >   - widget_user_outline() - mając daną instancję zwróć podsumowanie wkładu użytkownika
> >   - widget_user_complete() - mając daną instancję wypisz szczegóły wkładu użytkownika
> >   - aby uniknąć ewentualnych konfliktów każda z funkcji modułu powinna zaczynać się na widget_ . Każda stała którą zdefiniujesz powinna zaczynać się na WIDGET_
> > - Wreszcie każdy moduł będzie posiadał plik zawierający łańcuchy znaków dla danego języka. Szczegóły znajdziesz poniżej.

> > Najprostszą metodą zbudowania nowej składowej kursu jest wykorzystanie wzorca, zapisanego w pliku mod/newmodule_template.zip. Rozpakuj go, a następnie przeczytaj plik README

> > Dobrym pomysłem jest też wzięcie udziału w Forum poświęconym składowym kursów. (Activities modules forum on Using Moodle).

> Tematy

> > Tematy (Themes / skins) określają wygląd całego serwisu. Wraz z główną dystrybucją dostarczanych jest kilka prostych tematów, ale możesz stworzyć własny, dobierając kolory, style i grafiki, a także zamieszczając swoje logo

> > Każdy temat umieszczany jest w podkatalogu katalogu "theme" i zawiera przynajmniej następujące pliki:

> > - config.php: definiuje kolory tematu, używane w całym serwisie
> > - styles.php: zawiera informacje o stylach, w tym definicje CSS dla standardowych elementów HTML, a także dla wielu modułów Moodle
> > - header.html: Jest umieszczany u góry każdej strony. Możesz go wykorzystać przykładowo do zamieszczenia logo na stronach.
> > - footer.html: Umieszczany na spodzie każdej strony

> > Aby utworzyć własny temat dla Moodle w obecnej wersji:

> > 1. Skopiuj któryś z już istniejących tematów do folderu o innej nazwie. Proponuję, byś zaczął od któregoś ze standardowych tematów.
> > 2. Zmodyfikuj config.php i umieść w nim własne kolory.
> > 3. Zmodyfikuj styles.php i zmień style CSS.
> > 4. Zmodyfikuj header.html i footer.html aby dodać logo i wizualny układ strony.

> > Pamiętaj, że każdy z tych kroków jest opcjonalny. Możesz diametralnie zmienić wygląd serwisu zmieniając jedynie kolory w config.php

> > Kolejne wersje Moodle mogą nieco zmieniać tematy więc czytaj zawsze uwagi do nowego wydania jeśli używasz niestandardowego tematu.

> > W szczególności Moodle 2.0 będzie posiadał zupełnie nowy system wyświetlania, najprawdopodobniej oparty na transformacjach XSL wejścia XML z Moodle. Prawdopodobnie tematy będą miału zupełnie inny format, ale za to będą o wiele bardziej modyfikowalne. (przykładowo będą umożliwiać przemieszczanie elementów w obrębie strony

> > Więcej informacji na forum poświęconym tematom (Themes forum on Using Moodle). Jeśli stworzysz ładny temat którym chciałbyś się podzielić prześlij spakowany plik na forum poświęcone tematom

> Języki

> > Moodle zostało zaprojektowane jako platforma międzynarodowa. Każdy łańcuch znaków czy strona tekstu wyświetlana jako część interfejsu jest popierana z zestawu plików językowych. Każdy język jest przechowywany w podkatalogu katalogu 'lang'. Struktura katalogu lang jest następująca:

> > lang/pl - katalog zawierający wszystkie pliki dla danego języka (w tym wypadku dla Polskiego)

> > - moodle.php - łańcuchy znaków (stringi) dla głównego interfejsu
> > - assignment.php - łańcuchy znaków dla modułu zadań
> > - choice.php - łańcuchy znaków dla modułu wyboru
> > - forum.php - łańcuchy znaków dla modułu forum
> > - journal.php - łańcuchy znaków dla modułu dziennik
> > - quiz.php - łańcuchy znaków dla modułu quiz
> > - resource.php - łańcuchy znaków dla modułu zasobów
> > - survey.php - łańcuchy znaków dla modułu ankiet
> > - .... i do tego łańcuchy znaków dla wszelakich dodatkowych modułów
> >   Łańcuch znaków jest pobierany z tych plików za pomocą funkcji get_string() lub print_string() . Każdy łańcuch znaków zastępuje odpowiadający sobie łańcuch w innym języku.
> >   przykładowo : $strdueby = get_string("assignmentdueby", "assignment", userdate($date));
> >   Jeśli dany łańcuch znaków nie istnieje w którymś z języków, to jest automatycznie zastępowany swoim angielskim odpowiednikiem.

> > lang/pl/help - zawiera wszystkie strony pomocy (dla pomocy w wyskakujących okienkach)

> > > Główne pliki pomocy znajdują się bezpośrednio w tym katalogu, natomiast pliki pomocy dla poszczególnych modułów są umieszczone w podkatalogach z nazwami będącymi nazwami modułów.

> > > Możesz umieścić przycisk pomocy na stronie posługując się funkcją helpbutton

> > > np. helpbutton("tekst", "Kliknij aby otrzymać pomoc na temat tekstu");

> > > a w przypadku modułów:

> > > helpbutton("typyforum", "Typy forum", "forum");

> > UWAGA : możesz edytować języki on-line, korzystając z narzędzia administracji "Sprawdź język". Dzięki temu można nie tylko łatwo dodawać nowe języki, ale także modyfikować te już zaimplementowane. Jeśli rozpoczynasz tłumaczenie na nowy język, skontaktuj się proszę ze mną : Martin Dougiamas.

> > Możesz również skorzystać z Forum poświęconego językom (Languages forum on Using Moodle).

> > Mogę też udostępnić Ci prawa zapisu CVS do kodu źródłowego Moodle byś mógł bezpośrednio zarządzać plikami.

> Schematy dla baz danych

> > Jeśli Moodle otrzyma działającą bazę danych wraz z zdefiniowanymi tabelami, to celowo proste zapytania SQL wykorzystane w Moodle powinny prawidłowo współpracować z wieloma rodzajami baz danych.

> > Problem tkwi w automatycznym tworzeniu nowych tabeli w bazach danych. Moodle próbuje to zrobić podczas instalacji. Ponieważ bazy danych znacząco się różnią, nie istnieje jeszcze metoda robienia tego niezależnie od platformy. Aby wesprzeć ten proces można tworzyć sekwencje poleceń SQL, służące do utworzenia tabel Moodle w konkretnej bazie danych. Pliki te znajdują się w katalogu lib/db oraz w podkatalogu db każdego modułu.

> > Obecnie jedynie MySQL i PostgreSQL są w pełni obsługiwane przez ten mechanizm (nikt nie napisał schematów dla innych baz).

> > Moodle 1.1 będzie używać nowej metody opartej na XML, która sprawi, że wszystkie te komplikacje staną się niepotrzebne.

> Formaty Kursu

> > Moodle w chwili obecnej obsługuje trzy różne formaty kursów : tygodniowy, tematyczny, oraz towarzyski.

> > Są one nieco bardziej zagnieżdżone w kodzie (a przez to mniej "elastyczne")niż inne moduły, ale i tak można stosunkowo łatwo dodać nowe formaty.

> > Jeśli masz jakieś pomysły na inne formaty, które potrzebujesz, lub chciałbyś zobaczyć, skontaktuj się ze mną, a zrobię wszystko co w mojej mocy, aby zawrzeć je w przyszłych dystrybucjach.

> Dokumentacja i artykuły

> > Jeśli czujesz się na siłach, żeby napisać przewodnik, artykuł, pracę naukową (lub dowolną inną) na temat Moodle, zrób to!

> > Umieść swoją pracę na sieci i pamiętaj, aby zamieścić też link do http://moodle.org/

> Udział w szukaniu błędów

> > Wreszcie chciałbym Cię zachęcić, abyś zapisał się do "wyszukiwania błędów" (bug tracker); na stronie http://moodle.org/bugs żebyś mógł zgłaszać wszelki błędy jakie znajdziesz i być może uczestniczył w dyskusji nad ich usunięciem.

> > Termin "Błędy" dotyczy tu nie tylko błędów w oprogramowaniu ale także nowych pomysłów, wymagań co do funkcji, czy nawet konstruktywnej krytyki istniejących funkcji. Piękno oprogramowania open-source polega na tym, iż każdy może brać udział i pomagać w tworzeniu lepszego produktu. W tym projekcie twój wkład powitamy z otwartymi ramionami!

> > > Dziękuję za korzystanie z Moodle!

> > > Pozdrowienia,
> > > Martin Dougiamas

Dokumentacja Moodle

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