Menu

Tree [9a809f] default tip /
 History

Read Only access


File Date Author Commit
 .metadata 2012-07-24 wvd_vegt wvd_vegt [354bbd] 1) Added File Upload to relpies.
 .settings 2013-02-05 veg veg [96aac4] Starting 'LR612_UPGRADE' branch
 docroot 2014-05-08 wvd_vegt wvd_vegt [9a809f] 1) Fixed edit view back_to_view url
 .classpath 2014-04-23 harriemartens harriemartens [712939] Fix for #3877 (Liferay security fix) upgraded l...
 .hgignore 2013-10-24 wvd_vegt wvd_vegt [0e038e] 1) Styled the titlebar of the popup dialogs
 .hgtags 2012-08-15 wvd_vegt wvd_vegt [e37f4c] Added tag test for changeset 1923ec1a053e
 .project 2014-04-23 harriemartens harriemartens [712939] Fix for #3877 (Liferay security fix) upgraded l...
 COPYING 2013-01-07 wvd_vegt wvd_vegt [d0c494] 1) Added GPL and LGPL3 text to project.
 COPYING.LESSER 2013-01-07 wvd_vegt wvd_vegt [d0c494] 1) Added GPL and LGPL3 text to project.
 build.xml 2013-09-17 wvd_vegt wvd_vegt [67b641] 1) Fixed build.xml (missing version info)
 readme 2013-11-13 wvd_vegt wvd_vegt [beb8e4] 1) Renamed readme.txt to readme.

Read Me

Opbouw van het Groupwall Portlet

De Groupwall is een alternatieve userinterface voor het standaard Liferay MessageBoard en gebruikt MBMessage en MBCategory classes.

De Groupwall heeft, om te starten, een page-scoped MessageBoard nodig op dezelfde pagina en zal daarin een MessageBoard Categorie (MBCategory) aanmaken met de 'GROUPWALL'. Via de preferences kunnen hieronder meer subcategorieŽn aangemaakt worden.  

Centraal in de code staat de methode doGetAndFilterMessages() die een HashSet oplevert met daarin als keys de thread messages (dus de MBMessage die het begin van een discussie is) en als value een List van MBMessage, de reacties op deze thread. Deze lijst wordt 
gefiltert zodat alleen berichten overblijven die zich in de onder een bepaald punt in de categorieŽn hiŽrarchie bevinden (er wordt dus gefilterd op een categorie + onderliggende subcategorieŽn).   

Een andere belangrijke methode is doAddNewMessage(), die zowel threads als replies aanmaakt, voorziet van correcte categorieŽn en de status correct zet (draft voor threads en approved voor replies).

Qua mailing wordt gebruik gemaakt van de standaard optie van liferay om qua mailen te abonneren op een MBCategory. Deze functionaliteit is iets uitgebreid met de mogelijkheid om berichten na posten een instelbaar aantal minuten in draft te laten en daarna automatisch te publiceren, wat de mailing zal triggeren. Zolang een bericht de draft status heeft, is het niet zichtbaar voor andere gebruikers en zal editbaar zijn.

Voting is een-op-een gemapt op de standaard Liferay voting die ook in het MessageBoard beschikbaar is.

Tags worden ook geÔmplementeerd maar de code is gedisabled vanwege mogelijke verwarring met categorieŽn en tag beheer problemen. 
 
De categorieŽn bepalen ook met een eenvoudig algoritme wie waar mag posten. Standaard moet er tijdens de configuratie m.b.v. het MessageBoard rechten gezet worden voor begeleiders. Studenten kan alleen toegang ontnomen worden om in bepaalde categorieŽn een nieuwe thread te beginnen. Reacties plaatsen is door iedere ingelogde gebruiker die de Groupwall kan zien mogelijk.

De lijst met categorieŽn worden op een aantal manier gefilterd, o.a.:

	1) De volledige lijst die gebruikt wordt voor de filter combobox.
	2) Een lijst met categorieŽn waarin men mag posten voor de categorie combobox in het edit scherm
	3) De huidige categorie (en subcategorieŽn) waarop gefilterd wordt.  
   
Er is voor het uit draft halen van berichten een service ingebouwd omdat de methode om MBMessages
te updaten veel informatie nodig heeft van de oorspronkelijke pagina (bv de url).
 
De view.xhtml pagina bestaat uit een datatable (met threads) waarbij een kolom een geneste datatable bevat met reacties op telkens een thread. Boven deze datatable bevind zich (standaard verborgen) de thread editor. Onder elke geneste datatable bevind zich telkens een reply editor. De editors zijn onderwater textearea's die m.b.v. JavascriptContext.addJavascriptCall() en een stuk client-zijde javascript omgevormd worden tot een CKEditor.  

Omdat het totaal een nogal grote pagina is geworden en er vooral oor de file upload eisen gesteld worden aan Ajax gebruik of niet, is er voor gekozen om het geheel op te delen in een aantal kleinere formulieren die niet overlappen.

Omdat er constante problemen waren met de ingebouwde liferay html CKEditor (en het MessageBoard eigenlijk BBcode verwacht) is er voor gekozen om de ingebouwde liferay BBcode CKEditor direct aan te roepen en te integreren in de jspx code. Dit heeft tot gevolg dat we keurig dezelfde editor gebruiken maar zelf de configuratie iets kunnen aanpassen/corrigeren. Op een iPad/iPod werkt overigens de CKEditor niet en wordt alleen het onderliggende textarea getoond. Het is daarin wel mogelijk om BBcode in te geven.

Er waren nogal wat problemen met de BBcode naar html vertaling door Liferay, in BBCodeUtil.getHTML(), en nodig voor o.a. mail en rendering, veelal veroorzaakt door leading/trailing whitespace. Het is dus absoluut noodzakelijk de input die uit de editor komt te trimmen. Ook zijn wat andere fixup nodig m.b.t. url's die verschillende vormen kunnen aannemen afhankelijk van de methode van invoer (direct intypen in de editor of de dialoog gebruiken). Aangezien BBCodeUtil.getHTML() 
niet public is wordt deze d.m.v. een PortalClassInvoker.invoke() aanroep uitgevoerd.
                    

GeŁploade files komen eerst in de Groupwall Portlet directory terecht en worden na verplaatsing door Liferay gewist door de Groupwall.

De paginering heeft nog wat speciale features om het correcte bericht bovenaan te laten zien als een link waarop geklikt werd. Het standaard gedrag van liferay is om het MessageBoard te gebruiken voor een deel van de navigatie. In getMessageIdFromUrl() worden een aantal typen url's ondersteund die geparst worden voor een messageId en hetgeen uiteindelijk uitmonden in tonen van dit bericht bovenaan de Groupwall. De ondersteunde url's zijn

	1) Notificatie E-mail links (view_message)
	2) Message Url's in de activity stream (find_message)
	3) Category Url's in de activity stream (find__category)

Let op dat deze url parsing methode alleen goed werkt als er vanaf een andere pagina gesprongen wordt! 
      
De rest van de methoden zijn veelal getters en setters nodig om de diverse onderdelen van de view.xhtml 
te tonen of te verbergen.  

De help.xhtml pagina bevat informatie over de versie van enige libraries doe gebruikt wordt (Icefaces/Liferay bridge).

Het Groupwall portlet heeft veel last gehad van bugs in het MessageBoard, de Liferay bridge en ICEfaces. Niet alle deze bugs zijn verholpen of waren te verhelpen.