| 1 | = Opbouw SCC = |
| 2 | |
| 3 | De sourcecode van de SCC vind je hier: source:trunk/npl/syn3/webint/src |
| 4 | |
| 5 | Je hebt speciale rechten nodig in svn om hier bij te kunnen. |
| 6 | |
| 7 | Hieronder volgt een korte opsomming van de werking van de SCC, maar voor voorbeelden moet je in de destbetreffende files kijken. |
| 8 | |
| 9 | == Modules == |
| 10 | |
| 11 | Iedere Syn-3 module bevind zich in een apparte directory. Doordat er files met een bepaalde naam in deze directory staan komt de module in 'het systeem'. |
| 12 | |
| 13 | Op het moment dat je inlogt word het menu opgebouwd door alle '''menuman.php''' files te includen. Deze file bevat de menukeuzes van de destbetreffende module. Sommige menukeuzes zijn afhankelijk van een bepaalde optie in je licentie. Deze optie staat er dan ook achter. |
| 14 | |
| 15 | == Wizard == |
| 16 | |
| 17 | De wizard kijkt bij het inloggen, updaten en veranderen van de licentie automatich of er nog dingen 'gewizard' moeten worden. Dit doet de wizard door alle '''wizardman.php''' files te includen. |
| 18 | |
| 19 | == Multilanguage == |
| 20 | |
| 21 | Meertalige ondersteuning is zeer eenvoudig: In plaats van een stuk tekst ergens neer te zetten, roep je een functie aan die je een logische label geeft. Deze functies worden vervolgens door de ''handige scripts'' gegenereerd. (zie hieronder) Later als je klaar bent met coden of als je zin hebt kun je met de Language editor op www.syn3.nl de taal labels invullen. |
| 22 | |
| 23 | Een taal label heeft het volgende formaat om herkent te worden door het systeem: |
| 24 | {{{ |
| 25 | echo _HelloWorld($parameter1,$parameter2...); |
| 26 | }}} |
| 27 | |
| 28 | De parameters zijn optioneel, en komen terug in de langauge editor als $a en $b enz. |
| 29 | |
| 30 | Met de language editor kun je dan de juiste tekst voor de HelloWorld label in iedere taal defineren. Er zijn ook mensen die de zooi voor ons van het nederlands naar engels en duits vertalen, dus dit hoef je zelfs niet eens verplicht te doen! |
| 31 | |
| 32 | == Scheiding van layout en functionaliteit == |
| 33 | |
| 34 | Om een scheiding aan te brengen tussen model/view/controller hebben we de volgende afspraak: De logica (model) komt in een file ''model.php'' in de module directory. '''Let op:''' Veel modules hebben hun model nog in een phpfile met een andere naam zitten, maar doen we vanaf nu niet meer! |
| 35 | |
| 36 | Hierin maak je functies als volgt: |
| 37 | |
| 38 | {{{ |
| 39 | /** Korte omschrijving van de functie |
| 40 | * |
| 41 | * Detail omschrijving...blabla... |
| 42 | * @param $in[parameter1] Omschrijving van parameter1 |
| 43 | * @param $in[parameter2] Omschrijving van parameter2 |
| 44 | */ |
| 45 | function modulenaam_FunctieNaam($in) |
| 46 | { |
| 47 | ...fix die shit... |
| 48 | return ($ret) |
| 49 | } |
| 50 | }}} |
| 51 | |
| 52 | Hierbij is $in een hasharray met de benodigde parameters. Dit doen we om de sourcecode leesbaar te houden. |
| 53 | |
| 54 | Het commentaar is in dit formaat, zodat we automatisch API documentatie kunnen genereren. |
| 55 | |
| 56 | De frontend (controller/view) zet je in logische verschillende php files. De indeling hiervan kun je wederom halen uit bestaande voorbeelden. TODO: Welke is een GOED voorbeeld? |
| 57 | |
| 58 | De naamgeving is ongeveer als volgt: |
| 59 | * list''bla''.php Een lijst van items waar de user uit kan kiezen door ergens op te klikken. |
| 60 | * edit''bla''.php Als de user ergens op klikt kom hij in de edit-file. |
| 61 | * show''bla''.php Soms is het nodig om 1 ding te tonen in plaats van een lijst. Dan begint hij met show. |
| 62 | * add''bla''.php Voor het toevoegen van nieuwe items aan de lijst. Vaak gebruik je hiervoor edit''bla''.php zonder een get-parameter. |
| 63 | * del''bla''.php Pagina om verwijderen te bevestigen indien nodig. |
| 64 | * Probeer voor de rest zelf logische namen te verzinnen. Let erop dat het overeenkomt en past bij de bestaande naamgeving. Dus niet ineens hoofdletters of streepjes gebruiken. |
| 65 | |
| 66 | == API documentatie == |
| 67 | |
| 68 | Als je de functies op de juiste manier documenteert zullen deze uiteindelijk in de api documentatie komen. |
| 69 | |
| 70 | Het basis framework is reeds gedocumenteert. Die hier: source:trunk/npl/syn3/webint/docs . Deze kun je openen in je browser als je de SVN tree hebt. |
| 71 | |
| 72 | Hierin vind je documentatie voor: |
| 73 | * Globale include file met handige functies: '''common.php''' '''Deze altijd includen! ''' |
| 74 | * Error check functies om data te checken op input geldigheid '''error.php''' |
| 75 | * Form afhandeling '''form.php''' |
| 76 | * File afhandeling, lezen, schrijven, bewerken van files '''file.php''' |
| 77 | * Process beheer, starten stoppen van services. '''proc.php''' |
| 78 | * Logging van gebreurtenissen en visuele terugkopelling aan de user: '''log.php''' |
| 79 | * Monitoren van de status van een bepaald iets (deze mailed ook): '''../monitoring/state.php''' |
| 80 | * Controleren van licentie opties '''reg.php''' |
| 81 | * Functies aanroepen die op shop.syn-3.nl draaien: '''rpcclient.php''' |
| 82 | |
| 83 | '''Het is essentieel dat je deze functies zoveel mogelijk gebruikt! ''' Het is niet toegestaan om zelf textfiles te openen of commandos uit te voeren met normale php-functies zoals fopen() of system()! Ook |
| 84 | emails sturen is uit den boze omdat we hier het monitoring en logging systeem voor hebben. |
| 85 | |
| 86 | Om de user te vertellen dat iets 'gelukt' of 'gebeurd' is nadat men op Opslaan klikt gebruik je LogInfo() of LogWarn(). Als iets misgaat gebruik je LogError(). |
| 87 | |
| 88 | Dingen executen die niet mogen mislukken doe je met SafeExec(). Uitgebreidere opties om te executen heb je met Cmd(). |
| 89 | |
| 90 | Opbouw van formulieren etc. kun je halen uit de reeds bestaande modules. |
| 91 | |
| 92 | Controleren of de user een bepaalde licentie optie heeft: ModuleMatch() en ModuleNeeded(). |
| 93 | |
| 94 | == GET en POST == |
| 95 | |
| 96 | Het uitlezen van GET en POST variabellen moet altijd via $_REQUEST gebeuren. |
| 97 | |
| 98 | Verder is er een duidelijk onderscheid wanneer je GET of POST moet gebruiken. |
| 99 | * GET: Dit doe je om een bepaalde pagina op te vragen, bijvoorbeeld: ''useradmin/edituser.php?name=geert'' |
| 100 | * POST: Dit doe je om data op de server op te slaan. Bijvoorbeeld als men een user gewijzigd heeft en op Opslaan drukt. |
| 101 | |
| 102 | Soms word een get echter wel gebruikt om dingen te verwijderen via een Icoontje. Bijvoorbeeld een prullebak je die linkt naar ''useradmin/edituser.php?name=test&del=1''. Hier zijn overigens ook speciale functie voor. LinkIcon_Del() in dit geval. |
| 103 | |
| 104 | |
| 105 | == Coding standaard == |
| 106 | |
| 107 | De volgende regels gelden (deze is nog niet compleet!): |
| 108 | * De php files moeten ten alle tijde netjes en overzichtelijk zijn. |
| 109 | * Alle functies documenteren |
| 110 | * Constantes: $HOOFDLETTERS |
| 111 | * Functie namen: FunctieNaam() |
| 112 | * Model functie: module_FunctieNaam() |
| 113 | * Variabellen: foreach ($users as $user). Gebruik dus een '''s''' als het een array is. |
| 114 | * De gegenereerde HTML code moet geldig zijn maar '''niet netjes'''! Het is veel belangrijker dat htmlcode op een nette manier in je php-file staat, met eventueel commentaar. Of je hiervoor echo's of ?> of tabs en spaties gebruikt maakt niet uit, als het maar netjes is. Dat de browser een slordige bende krijgt boeit niemand! (zolang het maar geldige html is). Als ik iemand tijd zie besteden aan het genereren van 'nette' html code gaat hij aan de galg! |
| 115 | * Een model-functie die tekst echo't moet beginnen met Print. dus modulenaam_PrintBla(). |
| 116 | |
| 117 | = Handige scripts = |
| 118 | |
| 119 | == Genereren language labels == |
| 120 | |
| 121 | Het genereren van de langaguage labels gaat als volgt: |
| 122 | {{{ |
| 123 | psy /home/psy/syn3/npl/syn3/webint # php updatelang.php |
| 124 | _voorbeeldlabel1 in examplemodule/selectmode.php is NEW |
| 125 | Adding _VoorbeeldLabel1 to central database... |
| 126 | |
| 127 | Downloading and executing updated language file for examplemodule: |
| 128 | Generating examplemodule/lang_nlD.php |
| 129 | Generating examplemodule/lang_nl.php |
| 130 | Generating examplemodule/lang_enD.php |
| 131 | Generating examplemodule/lang_en.php |
| 132 | Generating examplemodule/lang_deD.php |
| 133 | Generating examplemodule/lang_de.php |
| 134 | Generating examplemodule/lang_plD.php |
| 135 | Generating examplemodule/lang_pl.php |
| 136 | Generating examplemodule/lang_ptD.php |
| 137 | Generating examplemodule/lang_pt.php |
| 138 | }}} |
| 139 | |
| 140 | Hierna is alles 'gefixed'. |
| 141 | |
| 142 | '''Let op: Je moet vanaf kantoor.datux.nl komen. Het toevoegen van labels kan namelijk zonder authenticatie :)''' |
| 143 | |
| 144 | Nu kun je de labels invullen op www.syn3.nl met de language editor. Hiervoor heb een Mambo account en rechten in de database nodig, anders komen je wijzigingen in de review-queue en worden ze nog niet actief. |
| 145 | |
| 146 | Mocht je labels online gewijzigd hebben of wil je de nieuwste vertalingen: |
| 147 | {{{ |
| 148 | psy /home/psy/syn3/npl/syn3/webint # php updatelang.php all |
| 149 | Downloading and executing updated language file for .: |
| 150 | Generating ./lang_nlD.php |
| 151 | ...enz...enz... |
| 152 | }}} |
| 153 | |
| 154 | Hierna zijn alle taallabels van alle modules bijgewerkt. Met svn status zie je hoeveel er veranderd is. Deze zooi kun je dan weer committen. |
| 155 | |
| 156 | == Uploaden naar testserver == |
| 157 | |
| 158 | Om je wijzigingen snel en handig uit te testen gebruik je upload.sh. Dit script voert automatisch de updatelang.php uit en upload daarna de files naar de server. Het script ziet automatisch wanneer je wijzigingen gemaakt hebt: |
| 159 | {{{ |
| 160 | psy /home/psy/syn3/npl/syn3/webint # ./upload.sh 192.168.0.150 |
| 161 | Checking ssh key on 192.168.0.150...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
| 162 | @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ |
| 163 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
| 164 | IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! |
| 165 | Someone could be eavesdropping on you right now (man-in-the-middle attack)! |
| 166 | It is also possible that the RSA host key has just been changed. |
| 167 | The fingerprint for the RSA key sent by the remote host is |
| 168 | 09:09:34:00:b8:b5:84:f4:60:9a:56:8f:56:bc:94:15. |
| 169 | Please contact your system administrator. |
| 170 | Add correct host key in /root/.ssh/known_hosts to get rid of this message. |
| 171 | Offending key in /root/.ssh/known_hosts:4 |
| 172 | Password authentication is disabled to avoid man-in-the-middle attacks. |
| 173 | Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks. |
| 174 | Permission denied (publickey,password,keyboard-interactive). |
| 175 | SSHKEYFIX: Removing hostkey of 192.168.0.150...OK |
| 176 | Warning: Permanently added '192.168.0.150' (RSA) to the list of known hosts. |
| 177 | root@192.168.0.150's password: |
| 178 | Installing public key...OK |
| 179 | Disabling _voorbeeldlabel in central database. |
| 180 | building file list ... done |
| 181 | |
| 182 | sent 18924 bytes received 20 bytes 37888.00 bytes/sec |
| 183 | total size is 3349858 speedup is 176.83 |
| 184 | ...systeem wacht op wijzigingen |
| 185 | }}} |
| 186 | |
| 187 | Nadat je op 'Save' drukt in je editor onderneemt het script gelijk actie: |
| 188 | {{{ |
| 189 | voorbeeldlabel5 in examplemodule/selectmode.php is NEW |
| 190 | Adding _VoorbeeldLabel5 to central database... |
| 191 | |
| 192 | Downloading and executing updated language file for examplemodule: |
| 193 | Generating examplemodule/lang_nlD.php |
| 194 | Generating examplemodule/lang_nl.php |
| 195 | Generating examplemodule/lang_enD.php |
| 196 | Generating examplemodule/lang_en.php |
| 197 | Generating examplemodule/lang_deD.php |
| 198 | Generating examplemodule/lang_de.php |
| 199 | Generating examplemodule/lang_plD.php |
| 200 | Generating examplemodule/lang_pl.php |
| 201 | Generating examplemodule/lang_ptD.php |
| 202 | Generating examplemodule/lang_pt.php |
| 203 | |
| 204 | Disabling _voorbeeldlabel in central database. |
| 205 | Disabling _voorbeeldlabel4 in central database. |
| 206 | building file list ... done |
| 207 | examplemodule/lang_de.php |
| 208 | examplemodule/lang_deD.php |
| 209 | examplemodule/lang_en.php |
| 210 | examplemodule/lang_enD.php |
| 211 | examplemodule/lang_nl.php |
| 212 | examplemodule/lang_nlD.php |
| 213 | examplemodule/lang_pl.php |
| 214 | examplemodule/lang_plD.php |
| 215 | examplemodule/lang_pt.php |
| 216 | examplemodule/lang_ptD.php |
| 217 | examplemodule/selectmode.php |
| 218 | |
| 219 | sent 26566 bytes received 364 bytes 53860.00 bytes/sec |
| 220 | total size is 3349888 speedup is 124.39 |
| 221 | Disabling _voorbeeldlabel4 in central database. |
| 222 | building file list ... done |
| 223 | |
| 224 | sent 18928 bytes received 20 bytes 37896.00 bytes/sec |
| 225 | total size is 3349888 speedup is 176.79 |
| 226 | ....script wacht weer |
| 227 | }}} |
| 228 | |
| 229 | |
| 230 | == Installeren op echte server == |
| 231 | |
| 232 | Om je wijzigingen snel bij een klant of op een live server te installeren moet je ze eerst encrypten en packagen. (zodat men de sourcecode niet ziet) |
| 233 | |
| 234 | Dit kan volgens het systeem beschreven bij SynPackaging. Hier een voorbeeld: |
| 235 | {{{ |
| 236 | psy /home/psy/syn3/npl # ./remoteinstall webint 192.168.0.150 rebuild |
| 237 | * Build check: |
| 238 | |REBUILD REQUIRED: ./src/examplemodule/selectmode.php has changed! |
| 239 | |REBUILDING /home/psy/syn3/npl/syn3/webint/webint.SlackBuild: |
| 240 | (....build output...) |
| 241 | * install: |
| 242 | Checking ssh key on 192.168.0.150...OK |
| 243 | 192.168.0.150: Uploading and installing |
| 244 | 192.168.0.150: Running installpkg /tmp/webint-4.0-noarch-3593mod.tgz |
| 245 | 192.168.0.150: Installing package webint-4.0-noarch-3593mod... |
| 246 | 192.168.0.150: PACKAGE DESCRIPTION: |
| 247 | 192.168.0.150: Executing install script for webint-4.0-noarch-3593mod... |
| 248 | 192.168.0.150: |
| 249 | 192.168.0.150: Running etc-update... |
| 250 | 192.168.0.150: Running ldconfig...DONE |
| 251 | 192.168.0.150: Syncing changes to disk...DONE |
| 252 | 192.168.0.150: Postinstall check... |
| 253 | 192.168.0.150: >> Bezig met configureren van post.webint |
| 254 | 192.168.0.150: OK |
| 255 | 192.168.0.150: Installed /tmp/webint-4.0-noarch-3593mod.tgz. |
| 256 | 192.168.0.150: Install on 192.168.0.150 OK |
| 257 | All installs done |
| 258 | psy /home/psy/syn3/npl # |
| 259 | }}} |
| 260 | |
| 261 | Dit zijn dus DE 2 manieren om je SCC wijzigingen op een server te trappen. |
| 262 | |
| 263 | = Commit regels = |
| 264 | |
| 265 | Wanneer mag je je wijzigingen aan de SCC committen in de SVN tree? |
| 266 | |
| 267 | Zorg er voor dat je je commits opdeelt in logische stukken: Dus bugfixes los van nieuwe features en uitbreidingen. Als je 2 modules wijzigd, commit dan ook PER module. |
| 268 | |
| 269 | De volgende regels gelden, voordat je mag comitten: |
| 270 | * Er mag niks 'stuk' gaan aan het reeds bestaande systeem. |
| 271 | * De eindgebruiker mag niet bij een module kunnen komen die nog niet af is: Meestal hoort bij een nieuwe module een extra licentie optie. Hier kun je dan op controleren in de menuman.php of andere files,zodat mensen zonder deze optie jou module of uitbreiding niet zien. |
| 272 | * Uitbreidingen moeten backwards compatible zijn met het oude systeem. |
| 273 | * De code moet reeds voldoen aan alle regels op deze pagina. Daarom is het handig om je gelijk vanaf het begin hieraan te houden en je niet voor te nemen achteraf nog alles aan te passen of te 'fixen'. |
| 274 | |