Changes between Initial Version and Version 1 of SynControlCenter


Ignore:
Timestamp:
08/08/08 00:10:41 (16 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SynControlCenter

    v1 v1  
     1= Opbouw SCC =
     2
     3De sourcecode van de SCC vind je hier: source:trunk/npl/syn3/webint/src
     4
     5Je hebt speciale rechten nodig in svn om hier bij te kunnen.
     6
     7Hieronder volgt een korte opsomming van de werking van de SCC, maar voor voorbeelden moet je in de destbetreffende files kijken.
     8
     9== Modules ==
     10
     11Iedere 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
     13Op 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
     17De 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
     21Meertalige 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
     23Een taal label heeft het volgende formaat om herkent te worden door het systeem:
     24{{{
     25echo _HelloWorld($parameter1,$parameter2...);
     26}}}
     27
     28De parameters zijn optioneel, en komen terug in de langauge editor als $a en $b enz.
     29
     30Met 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
     34Om 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
     36Hierin 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 */
     45function modulenaam_FunctieNaam($in)
     46{
     47   ...fix die shit...
     48   return ($ret)
     49}
     50}}}
     51
     52Hierbij is $in een hasharray met de benodigde parameters. Dit doen we om de sourcecode leesbaar te houden.
     53
     54Het commentaar is in dit formaat, zodat we automatisch API documentatie kunnen genereren.
     55
     56De 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
     58De 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
     68Als je de functies op de juiste manier documenteert zullen deze uiteindelijk in de api documentatie komen.
     69
     70Het 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
     72Hierin 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
     84emails sturen is uit den boze omdat we hier het monitoring en logging systeem voor hebben.
     85
     86Om 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
     88Dingen executen die niet mogen mislukken doe je met SafeExec(). Uitgebreidere opties om te executen heb je met Cmd().
     89
     90Opbouw van formulieren etc. kun je halen uit de reeds bestaande modules.
     91
     92Controleren of de user een bepaalde licentie optie heeft: ModuleMatch() en ModuleNeeded().
     93
     94== GET en POST ==
     95
     96Het uitlezen van GET en POST variabellen moet altijd via $_REQUEST gebeuren.
     97
     98Verder 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
     102Soms 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
     107De 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
     121Het genereren van de langaguage labels gaat als volgt:
     122{{{
     123psy /home/psy/syn3/npl/syn3/webint # php updatelang.php
     124_voorbeeldlabel1 in examplemodule/selectmode.php is NEW
     125Adding _VoorbeeldLabel1 to central database...
     126
     127Downloading and executing updated language file for examplemodule:
     128Generating examplemodule/lang_nlD.php
     129Generating examplemodule/lang_nl.php
     130Generating examplemodule/lang_enD.php
     131Generating examplemodule/lang_en.php
     132Generating examplemodule/lang_deD.php
     133Generating examplemodule/lang_de.php
     134Generating examplemodule/lang_plD.php
     135Generating examplemodule/lang_pl.php
     136Generating examplemodule/lang_ptD.php
     137Generating examplemodule/lang_pt.php
     138}}}
     139
     140Hierna is alles 'gefixed'.
     141
     142'''Let op: Je moet vanaf kantoor.datux.nl komen. Het toevoegen van labels kan namelijk zonder authenticatie :)'''
     143
     144Nu 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
     146Mocht je labels online gewijzigd hebben of wil je de nieuwste vertalingen:
     147{{{
     148psy /home/psy/syn3/npl/syn3/webint # php updatelang.php all
     149Downloading and executing updated language file for .:
     150Generating ./lang_nlD.php
     151...enz...enz...
     152}}}
     153
     154Hierna 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
     158Om 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{{{
     160psy /home/psy/syn3/npl/syn3/webint # ./upload.sh 192.168.0.150
     161Checking ssh key on 192.168.0.150...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     162@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
     163@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     164IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
     165Someone could be eavesdropping on you right now (man-in-the-middle attack)!
     166It is also possible that the RSA host key has just been changed.
     167The fingerprint for the RSA key sent by the remote host is
     16809:09:34:00:b8:b5:84:f4:60:9a:56:8f:56:bc:94:15.
     169Please contact your system administrator.
     170Add correct host key in /root/.ssh/known_hosts to get rid of this message.
     171Offending key in /root/.ssh/known_hosts:4
     172Password authentication is disabled to avoid man-in-the-middle attacks.
     173Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
     174Permission denied (publickey,password,keyboard-interactive).
     175SSHKEYFIX: Removing hostkey of 192.168.0.150...OK
     176Warning: Permanently added '192.168.0.150' (RSA) to the list of known hosts.
     177root@192.168.0.150's password:
     178Installing public key...OK
     179Disabling _voorbeeldlabel in central database.
     180building file list ... done
     181
     182sent 18924 bytes  received 20 bytes  37888.00 bytes/sec
     183total size is 3349858  speedup is 176.83
     184...systeem wacht op wijzigingen
     185}}}
     186
     187Nadat je op 'Save' drukt in je editor onderneemt het script gelijk actie:
     188{{{
     189voorbeeldlabel5 in examplemodule/selectmode.php is NEW
     190Adding _VoorbeeldLabel5 to central database...
     191
     192Downloading and executing updated language file for examplemodule:
     193Generating examplemodule/lang_nlD.php
     194Generating examplemodule/lang_nl.php
     195Generating examplemodule/lang_enD.php
     196Generating examplemodule/lang_en.php
     197Generating examplemodule/lang_deD.php
     198Generating examplemodule/lang_de.php
     199Generating examplemodule/lang_plD.php
     200Generating examplemodule/lang_pl.php
     201Generating examplemodule/lang_ptD.php
     202Generating examplemodule/lang_pt.php
     203
     204Disabling _voorbeeldlabel in central database.
     205Disabling _voorbeeldlabel4 in central database.
     206building file list ... done
     207examplemodule/lang_de.php
     208examplemodule/lang_deD.php
     209examplemodule/lang_en.php
     210examplemodule/lang_enD.php
     211examplemodule/lang_nl.php
     212examplemodule/lang_nlD.php
     213examplemodule/lang_pl.php
     214examplemodule/lang_plD.php
     215examplemodule/lang_pt.php
     216examplemodule/lang_ptD.php
     217examplemodule/selectmode.php
     218
     219sent 26566 bytes  received 364 bytes  53860.00 bytes/sec
     220total size is 3349888  speedup is 124.39
     221Disabling _voorbeeldlabel4 in central database.
     222building file list ... done
     223
     224sent 18928 bytes  received 20 bytes  37896.00 bytes/sec
     225total size is 3349888  speedup is 176.79
     226....script wacht weer
     227}}}
     228
     229
     230== Installeren op echte server ==
     231
     232Om 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
     234Dit kan volgens het systeem beschreven bij SynPackaging. Hier een voorbeeld:
     235{{{
     236psy /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:
     242Checking ssh key on 192.168.0.150...OK
     243192.168.0.150: Uploading and installing
     244192.168.0.150: Running installpkg /tmp/webint-4.0-noarch-3593mod.tgz
     245192.168.0.150: Installing package webint-4.0-noarch-3593mod...
     246192.168.0.150: PACKAGE DESCRIPTION:
     247192.168.0.150: Executing install script for webint-4.0-noarch-3593mod...
     248192.168.0.150:
     249192.168.0.150: Running etc-update...
     250192.168.0.150: Running ldconfig...DONE
     251192.168.0.150: Syncing changes to disk...DONE
     252192.168.0.150: Postinstall check...
     253192.168.0.150: >> Bezig met configureren van post.webint
     254192.168.0.150:  OK
     255192.168.0.150: Installed /tmp/webint-4.0-noarch-3593mod.tgz.
     256192.168.0.150: Install on 192.168.0.150 OK
     257All installs done
     258psy /home/psy/syn3/npl #
     259}}}
     260
     261Dit zijn dus DE 2 manieren om je SCC wijzigingen op een server te trappen.
     262
     263= Commit regels =
     264
     265Wanneer mag je je wijzigingen aan de SCC committen in de SVN tree?
     266
     267Zorg 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
     269De 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