# Porosi pėr kodimin e Moodle

Ēēdo projekt bashkpunimi ka nevojė pėr konsistencė dhe stabilitet pėr tė qėnė i fortė.

Kėto porosi jepen pėr tė treguar synimin e kodit Moodle. Disa nga kodet e vjetra mbulojnė pak fusha, por kjo do tė rregullohet eventualisht. Tė gjitha kodet e reja duhet duhet tu afrohen sa tė jetė e mundur kėtyre standarteve.

## Rregulla tė pėrgjithėshme

1. Tė gjithė skedarėt e kodeve duhet tė kenė ekstenksionin (prapashtesėn): .php .
2. Tė gjithė skedarėt template duhet tė pėrdorin ekstenksionin: .html .
3. Tė gjithė skedarėt tekst duhet tė pėrdorin formatin Unix-style (shumica e editorėve tė tekstit e kanė kėtė opsion).
4. Tė gjitha etiketat (tags) php duhet tė jenė 'full' sikurse <?php ?> ... jo 'short' sikurse <? ?>.
5. Tė gjitha shėnimet ekzistuse tė copyright duhet tė mbahen. Ju mund tė shtoni kėrkesat tuaja.
6. Ēdo skedar duhet tė inkludojė skedrain kryesor config.php .
7. Ēdo skedar duhet tė kontrollojė qė identiteti i pėrdoruesit ėshtė i saktė, duke pėrdorur funksionet: require_login() dhe isadmin(), isteacher(), iscreator() ose isstudent().
8. Aksesimet e databazės duhet tė pėrdorin funksionet nė lib/datalib.php gjithmonė e mundėshme - kjo mundėson kompatibilitetin ndėrmjet njė game tė gjerė databazash. Ju duhet tė kuptoni se thuajse ēdo gjė ėshtė e mundur duke pėrdorur kėto funksione. Nėse duhet tė shkruani njė kod SQL , sigurohuni qė kodi ėshtė: cross-platform; i kufizuar pėr funksione specifikė brenda kodit (zakonisht njė skedar lib.php); dhe i shėnuar qartėsisht.
9. Mos krijoni dhe pėrdorni variabla globale me pėrjashtim tė artyre standarte $CFG, $SESSION,$THEME dhe $USER.
10. Tė gjitha variablat duhet tė iniciohen dhe tė testohen duke pėrdorur: isset() ose empty() para se ato tė pėrdoren.
11. Tė gjitha stringjet duhet tė jenė tė pėrkthyeshėm - krijo tekste tė reja nė skedarėt "lang/en" dhe thėrriti ato duke pėrdorur funksionin get_string() ose print_string().
12. Tė gjithė skedarėt help duhet tė jenė tė pėrkthyeshėm - krijo tekste tė reja nė direktorinė "en/help" dhe thėrriti ato duke pėrdorur: helpbutton().
13. Tė dhėnat qė hyjnė nga browser-i (nėpėrmjet GET ose POST) automatikisht zbatojnė magic_quotes (pavarėsisht parametrave tė PHP) kėshtu qė ju mund ta fusni atė nė mėnyrė tė sigurtė drejtpėrdrejt nė databazė. Tė gjitha tė dhėnat e tjera (nga skedarė, ose nga databaza) duhet tė mėnjanohen me: addslashes() para se tė futen nė databazė.

## Coding Style

E di qė ėshtė pak e mėrzitshme tė ndryshosh stilin nėse jeni mėsuar me njė tjetėr, por vini nė balancė kėtė mėrzitje me mėrzitjen e tė gjithė njerzve tė tjerė qė do pėrpiqen mė vonė tė kuptojnė kodet Moodle me stile tė pėrziera . Ka shumė arsye pro dhe kundėr ēdo stili qė pėrdorin njerzit, por stili korent strong>ėshtė, prandaj mbetuni nė tė.

1. Indent-imi duhet tė jetė me 4 hapsira. Mos pėrdorni tab-et FARE.
2. Emrat e variablave duhet tė jenė lehtėsisht tė lexueshėm, me kuptim tė fjalės nė Anglisht. Nėse keni nevojė pėr mė shumė se njė fjalė atė here bashkojini ato, por mbaji sa mė shkurt. Pėrdor emrat nė shumės pėr tabelat e objekteve.

   GOOD: $quiz
   GOOD: $errorstring
   GOOD: $assignments (pėr njė tabelė objektesh)
   GOOD: $i (por vetėm pak cikle)
   BAD: $Quiz
   BAD: $aReallyLongVariableNameWithoutAGoodReason
   BAD: $error_string

3. Konstantet duhet tė jenė gjithmonė me germa tė mėdha, dhe gjithmonė fillo me emrin e modulit. Ato duhet ti kenė fjalėt tė ndara me underscore.

   define("FORUM_MODE_FLATOLDEST", 1);

4. Emrat e funksioneve duhet tė jenė fjalė tė thjeshta nė Anglisht, dhe tė fillojnė me emrin e modulit pėr tė shmangur konfliktet midis moduleve. Fjalėt duhet tė ndahen me underscore. Parametrat duhet tė kenė gjithmonė defaults nėse ėshtė e mundur. Vini re se nuk ka hapėsira midis emrit tė funksionit dhe kllapave qė e pasojnė ().

   funksion forum_set_display_mode($mode=0) {
   global $USER, $CFG;
   if ($mode) {
   $USER->mode = $mode;
   } else if (empty($USER->mode)) {
   $USER->mode = $CFG->forum_displaymode;
   }
   }

5. Blloqet gjithmonė duhet tė mbyllen nė kllapa gjarpėrushe (edhe kur ka vetėm njė rresht). Moodle pėrdor kėtė stil:

   if ($quiz->attempts) {
   if ($numattempts > $quiz->attempts) {
   error($strtoomanyattempts, "view.php?id=$cm->id");
   }
   }

6. Stringjet duhet tė pėrcaktohen duke pėrdorur thonjėza njėshe aty ku ėshtė e mundur, pėr tė rritur shpejtėsinė.

   $var = 'ca tekst pa ndonjė variabėl';
   $var = "me karaktere speciale si njė rresht i ri \n";
   $var = 'njė variabėl shumė, shumė i gjatė me njė '.$single.' variabėl nė tė';
   $var = "ca $tekst me $shumė variabla $brenda tij";

7. Komentet duhet tė pėrdorin dy ose tre slashe dhe nė rresht me kodin.

   function forum_get_ratings_mean($postid, $scale, $ratings=NULL) {
   /// Kthen mesataren klasifikimeve tė njė postimi qė i jepet pėrdoruesit corent nga tė tjerė.
   /// Shkalla ėshtė njė tabelė e klasifikimeve tė mundėshme
   ///Ratings ėshtė njė tabelė e thjeshtė e notave aktuale (numra tė plotė)
   if (!$ratings) {
   $ratings = array(); // Inicializon njė tabelė bosh
   if ($rates = get_records("forum_ratings", "post", $postid)) {
   // Proceson ēdo klasifikim me rradhė
   foreach ($rates as $rate) {
   ....etc

8. Hapsirat duhet tė pėrdoren lirisht - mos hezitoni ti hapni gjėrat pėr tė qenė sa mė tė qarta. Pėrgjithėsisht, duhet njė spacio midis kllapave dhe komandave normale, por jo spacio midis kllapave dhe variablave ose funksioneve:

   foreach ($objects as $key => $thing) {
   process($thing);
   }
   if ($x == $y) {
   $a = $b;
   } else if ($x == $z) {
   $a = $c;
   } else {
   $a = $d;
   }

## Strukturat e Databazave

1. ēdo tabelė duhet tė ketė meauto-rritje njėid fushe (INT10) si indeks primar.
2. Tabela kryesore qė pėrmban shembujt e ēdo moduli duhet tė ketė tė njėjtin emėr simoduli (psh widget) dhe t?7 pėrmbajė minimumi fushat e mėposhtme:
   - id - siē pėrshkruhen mė lart
   - kurse - id e kursit tė cilit i pėrket ēdo shembull
   - emri - emri i plotė i ēdo shembulli tė modulit
3. Tabelat e tjera tė shoqėruara me njė modul qė pėrmbajnė informacion mbi 'things' duhet tė emėrtohen widget_things (shilo shumsin).
4. Emrat e kolonave duhet tė jenė tė thjeshta dhe tė shkurtėr, duke ndjekur po ato rregulla sikurse emrat e variablave.
5. Aty ku ėshtė e mundur, kolonat qė pėrmbajnė njė referencė pėr id e fushės sė njė tabele tjetėr(psh widget) duhet tė thirret widgetid. (Shiko se kjo marveshje ėshtė e re dhe nuk gjendet nė tabelat e vjetra)
6. Fushat Boolean duhet tė futen si fusha me numėr tė plotė tė vogėl (psh INT4) qė pėrmban 0 os 1, pėr tė lejuar mė vonė zgjerimin e vlerave nėse ėshtė e nevojshme.
7. Shumica e tabelave duhet tė kenė njė fushė timemodified (INT10) e cila updetohet me njė timestamp korente e pėrftuar nga njė funksion PHP time() .

Dokumentacioni i Moodle

Version: $Id$