Generic Platform
Project aangeboden door Denis Debacker voor het behalen van de graad van Bachelor in de New Media and Communication Technology Academiejaar 2012-2013 Stageplaats :TrendsCo Stagementor :Dieter De Weirdt Stagebegeleider :Angelo Fallein
I
Denis Debacker
Generic Platform
Woord vooraf Als laatstejaarsstudent NMCT aan de Hogeschool West-Vlaanderen heb ik mijn stage gevolgd in opdracht van TrendsCo. Deze bachelor proef is dan ook geschreven in het kader van deze stage die ik in het laatste semester van het 3de jaar heb gelopen. De inhoud van deze bachelor proef is dan ook gericht naar een publiek die een bepaalde kennis heeft van de IT-wereld en web development in het algemeen. Basis PHP begrippen zullen niet worden uitgelegd, terwijl iets specifiekere zaken dan weer wel worden uitgelicht. Met dit document is het de bedoeling om de werking van het opzetten van een sociale netwerksite verder toe te lichten, ook zullen steeds mijn voorgelegde keuzes worden aangeduid en dan ook de keuze die ik heb genomen met de nodige redenering hier achter. Als laatste zal ik ook het eerste project bespreken die gebaseerd is op dit platform. Via deze scriptie wil ik mijn stagebedrijf, TrendsCo, ook bedanken voor de kans die ze mij gaven daar stage te lopen en dat ze vertrouwen hadden in mij om dit project tot een goed einde te brengen. Zo had ik een positieve en leerrijke werkervaring in het echte bedrijfsleven. Ook wil ik de medewerkers van TrendsCo en mijn stagebegeleider, Dieter De Weirdt, bedanken. Hij heeft me steeds geholpen om mijn weg te vinden en alles zo vlot en aangenaam mogelijk te laten verlopen. Dankzij de input van al mijn collega’s kon ik mijn kennis uitbreiden. Ook mijn coach tijdens de stage, Angelo Fallein, wil ik bedanken voor de feedback bij het schrijven van de verslagen.
I
Denis Debacker
Generic Platform
Samenvatting Met dit document is het de bedoeling om de werking van het opzetten van een sociale netwerksite verder toe te lichten, ook zullen steeds mijn voorgelegde keuzes worden aangeduid en dan ook de keuze die ik heb genomen met de nodige redenering hier achter. Als laatste zal ik ook het eerste project bespreken die gebaseerd is op dit platform. Het opzetten van een sociale community heeft steeds dezelfde trefpunten. De manier waarop mijn stagebedrijf zich wil richten op deze markt maakt het net zo dat nog meer gelijkenissen kunnen worden gezien. Het design van de website zal steeds anders zijn, net als de benaming van enkele functies. Het ‘liken’ van een persoon op de ene site, wordt omgevormd naar het plaatsen in mijn tuin op de andere site. De werking achter deze twee acties zijn grotendeels gelijk enkel de benaming veranderd. Om deze soort sites snel op te zetten moet er dus een algemeen platform komen waarop kan worden verder gebouwd. In dit geval wordt er onderzocht of er al een software pakket bestaat die de fundering zou kunnen vormen van het generische platform. Het gezochte pakket moet gericht zijn op social networking, in tegenstelling tot CMS pakketten die een plug-in beschikbaar stellen om community sites op te zetten (zoals buddypress voor wordpress). Op het eerste zicht boden zich een aantal professioneel lijkende pakketten aan. Die allemaal worden besproken. Uiteindelijk bleek Elgg uitermate geschikt om dienst te doen voor de noden van TrendsCo. De professionaliteit van het Elgg-team en -product komt de bruikbaarheid zeker ten goede. Nieuwe content kan zeer snel worden aangemaakt en heeft steeds een consistente architectuur. Designen kan gemakkelijk worden overgedaan eens men zijn weg weet in het Elgg-pakket.
II
Denis Debacker
Generic Platform
Woordenlijst Gebruikt woord Generic platform
Open source
User management core-modificatie csrf
Verklaring Starttoestand van een softwarepakket die dienst moet doen als basis om een volwaardige oplossing uit op te bouwen. Beschrijft de praktijk die in productie en ontwikkeling vrije toegang geeft tot de bronmaterialen van het eindproduct Beheren van bestaande gebruikers of bezoekers die in het proces zitten om zich in te schrijven. Aanpassen van het aangeleverde systeem. Cross-site request forgery, misbruik maken van bestaande sessies die de website reeds vertrouwd.
III
Denis Debacker
Generic Platform
Inhoudsopgave Woord vooraf .................................................................................................................................................... I Samenvatting ................................................................................................................................................... II Woordenlijst ................................................................................................................................................... III Inhoudsopgave................................................................................................................................................ IV 1
Inleiding ................................................................................................................................................... 6
2
Voorbereidend onderzoek ....................................................................................................................... 7
3
2.1
Social Engine .......................................................................................................................................... 7
2.2
Elgg ........................................................................................................................................................ 7
2.3
Boonex Dolphin ...................................................................................................................................... 7
2.4
PHPFox ................................................................................................................................................... 8
2.5
Anahita .................................................................................................................................................. 8
2.6
Onesite ................................................................................................................................................... 8
2.7
PHPIzabi ................................................................................................................................................. 8
2.8
Telligent ................................................................................................................................................. 9
2.9
Oxwall .................................................................................................................................................... 9
2.10
Kootali, Ning, Insoshi, Jcow.................................................................................................................... 9
Het Elgg-pakket ...................................................................................................................................... 10 3.1 Hoofdfunctionaliteit............................................................................................................................. 10 3.1.1 Het profiel ....................................................................................................................................... 10 3.1.2 De River ........................................................................................................................................... 10 3.1.3 Notificaties ...................................................................................................................................... 11 3.1.4 Content delen .................................................................................................................................. 11 3.2 De Elgg engine ..................................................................................................................................... 11 3.2.1 User management ........................................................................................................................... 11 3.2.2 Tags en Comments .......................................................................................................................... 11 3.3 Plug-in framework ............................................................................................................................... 12 3.3.1 Theming........................................................................................................................................... 12 3.3.2 Translation strings ........................................................................................................................... 12
4
Inleiding tot het Elgg pakket .................................................................................................................. 13 4.1
Systeemvereisten ................................................................................................................................. 13
4.2
Installatie ............................................................................................................................................. 13
4.3
Initiële instellingen ............................................................................................................................... 15
4.4
De eerste plug-in .................................................................................................................................. 15
IV
Denis Debacker 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6
Generic Platform
Mappenstructuur ............................................................................................................................ 15 Manifest bestand ............................................................................................................................ 16 Start.php.......................................................................................................................................... 16 Page handler.................................................................................................................................... 17 Paginas en views ............................................................................................................................. 18 Menu items ..................................................................................................................................... 19
4.5 Aanpassen van inhoud ......................................................................................................................... 19 4.5.1 Overriden van content .................................................................................................................... 19 4.5.2 Extenden van content ..................................................................................................................... 20 4.6
Widgets ................................................................................................................................................ 21
4.7 Opslaan van data ................................................................................................................................. 22 4.7.1 Formulieren ..................................................................................................................................... 23 4.7.2 Database.......................................................................................................................................... 24 5
Het project ............................................................................................................................................. 26 5.1
Datamodule ......................................................................................................................................... 26
5.2 Twitter bootstrap ................................................................................................................................. 26 5.2.1 Init functies...................................................................................................................................... 27 5.3 6
Select2 ................................................................................................................................................. 30
Pratijk toepassing: Bierpassie ................................................................................................................ 31 6.1 Brouwerijen ......................................................................................................................................... 31 6.1.1 Brouwerij menu items ..................................................................................................................... 31 6.1.2 Brouwerij page handler ................................................................................................................... 32 6.1.3 Brouwerij entiteit registreren ......................................................................................................... 34 6.1.4 Importeren van brouwerijen ........................................................................................................... 34 6.1.5 Brouwerij Object View .................................................................................................................... 36 6.2 Bieren ................................................................................................................................................... 37 6.2.1 Bier menu items .............................................................................................................................. 37 6.2.2 Beer Page handler ........................................................................................................................... 37 6.2.3 Bier Object View .............................................................................................................................. 38
7
Conclusie ............................................................................................................................................... 41
Literatuurlijst ................................................................................................................................................. 42 Lijst van figuren en tabellen ........................................................................................................................... 43 Bijlagen .......................................................................................................................................................... 46 Bijlage 1: Gezochte features ............................................................................................................................. 46 Bijlage 2: Systeemvereisten .............................................................................................................................. 46
V
Denis Debacker
1
Generic Platform
Inleiding
Mijn stagebedrijg, TrendsCo, is een jong bedrijf dat zich toespitst op een groot aantal zaken, van webdesign tot het verrijken van E-books met diverse multimediale functies. Net voor ik met mijn stage begon is het bedrijf gefuseerd met Heymans & Vanhove die de naam TrendsCo overnam. De afdeling waar ik werd tewerk gesteld werd TrendsCo Solutions gedoopt. Het diverse aanbod van het bedrijf heeft mij dan ook laten kennismaken met een breed gamma verschillende technologieën aan de hand van zeer gevarieerde opdrachten. Het hoofdproject bestaat uit het opzetten van een softwarepakket dat dienst zal doen als een soort template. Hieruit moet gemakkelijk en snel een community site kunnen worden opgezet. Dit maakt het mogelijk om de werkduur te verkorten wat op zich ook een aangenamere prijs voor toekomstige klanten met zich meebrengt. De community sites hebben niet als bedoeling om als de zoveelste Facebook-clone dienst te doen, maar moeten zich juist toespitsen op een bepaald onderwerp. TrendsCo zelf is ontstaan uit de MijnTuin.org website. Deze website werd volledig van de grond af opgebouwd in PHP en wordt nog steeds door het TrendsCo-team onderhouden en uitgebreid. Daarnaast werden nog enkele aanvragen ingediend van andere bedrijven om niche-community sites te maken. Pasar wou een website voor wandelaars en momenteel wordt er onderhandeld om een community rond bieren op te richten. Door de grote vraag naar community-sites met een bepaalde niche zou het daarom zeer voordelig zijn indien dit snel en gemakkelijk kan worden gegenereerd. Planten krijgen andere data mee dan bijvoorbeeld fietsroutes, door via automatische processen de nodige objecten aan te maken die op dynamische manier verschillende meta-data toegewezen krijgen, moet in theorie enkel nog de grafische opmaak manueel worden aangepast. Dit brengt met zich mee dat zowel TrendsCo als de klant geld en tijd uitsparen. De hoofdopdracht bestond er uit om een soort van ‘generic platform’ op te bouwen. Dit zou een blauwdruk worden waar in de (niet zo verre) toekomst snel een niche community website vanuit kan worden opgebouwd. Deze websites zullen steeds draaien rond één of meerdere objecten. Een voorbeeld die voor het ontstaan van TrendsCo als bedrijf heeft gezorgd is de niche community site MijnTuin.org, hier is het centrale onderwerp steeds planten. Men kan zich ‘inschrijven’ (of in facebook termen: liken) op deze planten door ze zogezegd in hun tuin te plaatsen, er kunnen artikelen worden gelinkt aan een plant om bijvoorbeeld meer te weten te komen welke bepaalde ziektes er juist voorkomen, iedere plant heeft een kalender die laat weten wanneer bepaalde taken moeten worden uitgevoerd, enzovoort. Hoe het stage-project zal verlopen is als volgt: in eerste plaats zal er moeten onderzocht worden of er reeds pakketten bestaan die de nodige functionaliteit bevatten. Twee belangrijke voorwaarden waaraan deze pakketten moeten voldoen is dat ze open-source moeten zijn om gemakkelijk en snel de gewenste code aan te passen naar eigen wens en de juiste licentie verlenen om doorverkoop toe te laten. Het aanwezig zijn van een grote community en vlug bereikbare documentatie is een goed meegenomen pluspunt. Na het onderzoek zal het ontwikkelen van de nodige functionaliteit dan ook nodig zijn en het meest leerrijke zijn van mijn project.
6
Denis Debacker
2
Generic Platform
Voorbereidend onderzoek
Bij het opstarten van ieder groot project moet er natuurlijk een voorbereidende studie aan vooraf gaan. De verdeling van de markt, de mogelijke vraag naar een product, enz. In mijn geval moest er onderzocht worden of er al een software pakket bestond die de fundering zou vormen van het generic platform. Het gezochte pakket moest gericht zijn op social networking, in tegenstelling tot CMS pakketten die een plug-in beschikbaar stellen om community sites op te zetten (zoals buddypress voor wordpress). Op het eerste zicht boden zich een aantal professioneel lijkende pakketten aan.
2.1
Social Engine
Bij het zoeken naar referenties en voorbeelden bleek dit een pakket te zijn dat veel werd gebruikt. De populariteit van dit project blijkt zich echter niet te weerspiegelen in de ratings die het krijgt bij reviews. Enkele hardnekkige bugs zorgen voor zeer frustrerende developing van uitbreidingen. Dit pakket komt in 2 versies: de PHP en de Cloud versie. Het cloud pakket komt inclusief hosting maar is zeer beperkt in wat het aanpassen betreft. De PHP versie daarentegen, kan zelf gehost worden maar is op het moment van schrijven een verouderde versie van het software pakket. Er werd reeds duidelijk gemaakt dat er wordt gemikt om in de toekomst enkel nog het door social Engine zelf gehoste Cloud-pakket te ondersteunen. De reden is vanzelfsprekend, een hogere winstmarge en controle zorgt voor de keuze van het meer gesloten systeem.
2.2
Elgg
Een andere bekende naam is Elgg, een pakket volledig gebaseerd op PHP en staat bekend om zeer modulair opgebouwd te zijn. Het uitbreiden en overschrijven van core-functies is steeds mogelijk op een consistente manier. Elgg wordt ook geleverd met een groot aantal features out-of-the-box. Het beschikbaar stellen van een bepaalde functie om aangesproken te worden via een API is in een 3-tal regels code te regelen. Dit pakket werd ook naar voor geschoven door het TrendsCo team als meest belovend. Het pakket is daar bovenop gratis en volledig open-source.
2.3
Boonex Dolphin
De feature lijst lijkt veel belovend, een groot aantal features die als prioriteit 1 kregen (zie bijlage 1) zitten reeds standaard in het pakket. Bij het iets verder rondkijken op fora en recensies blijkt ook dit pakket veel last te hebben van bugs die steeds opnieuw desondanks nieuwe versies niet worden opgelost. Het Boonex team krijgt veel kritiek over het feit dat ze steeds meer nieuwe features uitbrengen zonder eerst de reeds bestaande bugs op te lossen. Een tweede struikelblok is het zelfgemaakte template systeem die weinig blijk toont van consistentie. Betalende leden krijgen een betere support aangeboden, waardoor het lijkt dat enkele bugs opzettelijk niet worden opgelost om hier nog extra geld uit te halen.
7
Denis Debacker
2.4
Generic Platform
PHPFox
PHPFox lijkt op het eerste zicht een zeer net uiterlijk te hebben. Processen zoals inschrijven op de site zijn snel en gemakkelijk net als het aanpassen van het profiel of het gebruiken van de site in het algemeen. Ook deze keer is een zeer uitgebreid aantal features meteen bij installatie beschikbaar. Ook is er meteen een mobiele versie van de site beschikbaar, dit maakt het zeer interessant om meteen verschillende platformen te ondersteunen. Reviews zijn zeer lovend over deze software net als de community die geen onoverkomelijke problemen meldt. De licentie met een prijs vanaf $299 is iets hoger dan andere pakketten maar ligt met gemak nog in de marge van het aanvaardbare budget vooropgesteld door TrendsCo.
2.5
Anahita
Anahita is een project gebaseerd op het populaire Joomla. Anahita is oorspronkelijk ontstaan als een Joomla plug-in en is zo geleidelijk aan een zelfstandige koers beginnen varen, hierdoor deelt Anahita nog steeds veel core code met het Joomla pakket. Dit betekent wel dat het een robuust en goed gecodeerd systeem is. Het krijgt echter wel het verwijt dat het een zeer zwaar en log systeem is. Niet te min kan een Anahita website veel rollen aannemen, door zich te focussen op relaties tussen objecten is een sociaal netwerk maar één van de vele toepassingen die kunnen worden verwezenlijkt. Andere toepassingen zijn eLearning platformen, sociale intranets, en alle ideeën die gebaseerd zijn op relaties tussen verschillende entiteiten. Dit gezegd zijnde levert Anahita weinig functies out of the box voor social network sites. De filosofie bestaat er uit dat Anahita de basis levert van het software pakket en is het de community die alle uitbreidingen zou moeten maken, dit zorgt ervoor dat er al snel veel meer tijd zal moeten worden uitgetrokken om alle benodigde functies aan te maken.
2.6
Onesite
Een pakket dat in veel reviews wordt gezien als een stabiel en goed werkend systeem. Veel functies die nodig zijn zijn reeds aanwezig in het pakket. De verschillende prijsopties maken al snel duidelijk dat de basis versie echter weinig features biedt. Als het goedkoopste pakket is er een limiet aan het aantal users die zich kunnen inschrijven en kan de software niet worden aangepakt. Om ook maar de kleinste aanpassingen te kunnen doen moet er worden overgeschakeld op de ‘advanced’ versie die met een kostprijs van 1000 USD per maand per licentie een zeer hoog prijskaartje krijgt.
2.7
PHPIzabi
Op het moment dat ik mijn stage begon was dit een naam die veel terugkwam in mijn zoekopdrachten. Dit pakket was echter nog niet uitgebracht en zou nog enkele weken op zich laten wachten. De bedoeling was natuurlijk om meteen te kunnen beginnen aan het project.
8
Denis Debacker
2.8
Generic Platform
Telligent
Een veelbesproken pakket die enkele keren in de Amerikaanse media is voorgekomen met veel belovende kritiek. De bedoeling van Telligent is echter niet om een community site op te zetten die voor iedereen toegankelijk is. Telligent mikt op grote bedrijven die een platform willen bieden aan zijn werknemers, om onderling te kunnen afspreken, of aan de klanten, om support te bieden en in contact te blijven met elkaar. Dit is niet wat gezocht werd voor mijn stageproject en kwam dus niet in aanmerking.
2.9
Oxwall
Een pakket met lovende vooruitzichten en een veel belovende toekomst. Oxwall heeft op dit moment echter weinig functies en staat nog steeds in zijn kinderschoenen. Het pakket is momenteel zeer bruikbaar voor kleine hobby projecten, ik ben echter op zoek naar een meer uitgebreid systeem dat gemakkelijk aan te vullen valt.
2.10
Kootali, Ning, Insoshi, Jcow
Wat deze pakketten steeds gemeen hebben is het ontbreken van uitgebreide documentatie, support en/of een community. Deze pakketten focussen zich meer om een copy te zijn van facebook en hebben een veel hoger hobbyist gehalte en zijn dus minder aan te raden voor professionele projecten. Dat gezegd zijnde heb ik toch even de tijd genomen om deze pakketten van dichterbij te bekijken, er kan altijd wel een interessante functie geïntegreerd zijn die in de toekomst handig blijkt te zijn.
9
Denis Debacker
3
Generic Platform
Het Elgg-pakket
Na het onderzoeken van de verschillende mogelijkheden en het afwegen van de voor- en nadelen van ieder pakket zijn we tot het besluit gekomen dat Elgg het beste pakket is dat bij TrendsCo aansluit. Elgg is een gratis open source pakket, wat er op neer komt dat de software gratis is om te gebruiken, aan te passen en te herdistribueren. Een non-profit genaamd “Elgg foundation” zit achter het onderhouden van de code, samen met de community die door het open source gegeven actief meewerkt aan uitbreidingen van het product. Het software pakket bestaat uit twee grote onderverdelingen, de Elgg engine langs de ene kant die het framework aanbiedt die voor de basisfunctionaliteit zorgt (weergeven van paginas, afhandelen van database requests,…) en de plug-ins die de core engine complementeren en zelfs kunnen overschrijven.
3.1
Hoofdfunctionaliteit
3.1.1
Het profiel
Iedere gebruiker die zich inschrijft op een Elgg-website maakt meteen zijn profiel aan. Een profiel beschrijft de gebruiker over wie ze precies zijn. Data zoals geboortedatum, woonplaats of geslacht kunnen opgeslaan en weergegeven worden aan andere gebruikers zodat ook zij zich een beeld kunnen vormen met wie ze precies in contact zijn gekomen. Het profiel van een gebruiker kan zo uitgebreid worden gemaakt als gewenst. Een community voor dokters kan bijvoorbeeld vragen om een specialisatie in te geven, een community voor voetballiefhebbers kan vragen wie hun favoriete speler is, de mogelijkheden zijn theoretisch gezien eindeloos.
3.1.2
De River
Een van de hoofdfuncties van Elgg is het gebruikmaken van de ‘river’. Kort samengevat is de river een centrale pagina waar alle activiteiten worden weergegeven van iedere individuele gebruiker. Bij het toevoegen van een nieuwe vriend of het plaatsen van een comment wordt de river geupdate om deze nieuwe activiteiten te melden. Door de structuur waarin Elgg werkt zijn relaties tussen objecten zeer belangrijk, dit wordt dan ook weerspiegelt in de river zelf. Relaties worden snel zichtbaar bij de acties die vrienden ondernemen. Heeft jouw vriend een nieuw artikel ontdekt en geeft hij dit artikel een ‘like’ dan zie je meteen wie de actie heeft ondernomen, wat het artikel is en wie er nog dezelfde actie heeft ondernomen. Ongetwijfeld is dit een zeer krachtige tool om de participatie van de volledige gemeenschap uit te lokken.
10
Denis Debacker
3.1.3
Generic Platform
Notificaties
Een tweede manier om op de hoogte gehouden te worden is via het notificatie systeem dat ingebakken zit in Elgg. Gebruikers kunnen een melding krijgen die enkel zij zien om hun erop te wijzen dat bepaalde elementen onder de aandacht moeten worden gebracht. Als een vriend reageert op een blogpost wordt je bijvoorbeeld automatisch hiervan verwittigd. Ook kunnen gebruikers privé berichten sturen naar elkaar, deze berichten worden dan opgeslaan in de persoonlijke ‘inbox’. Deze manier van communiceren wordt dan ook aangemoedigd door een gemakkelijke interface die snel toegankelijk moet zijn.
3.1.4
Content delen
Een groot onderdeel van sociale netwerksites is het delen van content. Enkele community sites zijn zelfs volledig rond dit concept opgebouwd, websites zoals Flickr of Instagram bijvoorbeeld tonen aan dat bijna iedereen wel iets te delen heeft, denk maar aan een vakantiefoto of jouw favoriete liedje. Mensen delen niet enkel deze zaken maar geven ook hun mening via ‘likes’ of door te reageren op bestaande discussies, ook deze zaken kunnen als content worden gezien en kunnen zeer waardevol zijn voor zowel de eigenaar van de content als voor derden.
3.2
De Elgg engine
De engine bestaat uit 2 grote delen, namelijk de core engine en de plug-ins die de core engine verder uitbreiden qua functionaliteit. De core engine zelf zorgt voor de basis die voor elke social media website nodig is, enkele daarvan zijn: User management, Tags en comments en Theming.
3.2.1
User management
User management zorgt ervoor dat een nieuwe bezoeker van de website zich kan inschrijven en een profiel kan aanmaken. Het zorgt ervoor dat alles netjes wordt opgeslaan in de database zodat geen gegevens verloren gaan. Ook zorgt het voor de authenticatie van bestaande gebruikers die zich willen inloggen. De inlog procedure gebeurt door middel van gebruikersnaam en wachtwoord. Plug-ins kunnen dit gedrag aanpassen en kunnen er bijvoorbeeld voor zorgen dat men zich via hun Facebook of Twitter account kan inloggen.
3.2.2
Tags en Comments
De functionaliteit van tagging is meteen beschikbaar bij het installeren. Bij het aanmaken van een blogpost bijvoorbeeld kan men enkele tags invullen. Meestal is dit meta-data die de gegevens beschrijven, het hoofdonderwerp of locatie bijvoorbeeld. Alle data met dezelfde tag kan zo worden opgeroepen en vertoond worden in lijstvorm door maar enkel een klik op een knop. Dit kan een zeer eenvoudige functionaliteit lijken maar is zeer krachtig in het navigeren van inhoud die steeds relevant is met de gebruiker zijn voorkeuren. Het comment systeem is ook één van de vele basisfuncties van Elgg, één enkele lijn code volstaat om een uitgebreid comment systeem te voorzien voor welke entiteit dan ook. Comments worden automatisch opgeslaan en opgeladen door Elgg.
11
Denis Debacker
3.3
Generic Platform
Plug-in framework
De standaard Elgg installatie geeft de gebruikers een groot aantal functionaliteit, meestal zal dit nog worden uitgebreid met extra functies. Denk maar aan een community website voor muziekliefhebbers. In dit geval is het meer dan redelijk om te verwachten dat gebruikers playlists zullen willen uitwisselen en weergeven. Elgg biedt deze functionaliteit niet standaard aan out of the box. Men zou op zoek kunnen gaan in de community of iemand reeds een soortgelijke plug-in heeft geschreven en deze aanbiedt. Als dit niet het geval is kan deze feature zelf worden voorzien op de muziek community. Om dit te verwezenlijken kan de huidige Elgg installatie worden uitgebreid door bijvoorbeeld de blog plug-in aan te passen om een extra pagina te voorzien waar het sharen van muziek kan plaatsvinden. Dit kan op 2 manieren, ten eerste zou de blog plug-in kunnen worden aangepast, dit brengt echter problemen met zich mee moest een update van deze module wenselijk zijn. Een andere manier is het schrijven van een extra plug-in die de Blog module ‘extend’. Zo kan alles nog steeds worden geupdate en kan ook de extra functionaliteit gemakkelijk worden in- of uitgeschakeld. Dit alles geldt ook voor core-functionaliteit, praktisch alles kan worden overschreven of uitgebreid. Dit zorgt dan ook voor een zeer krachtig plug-in framework waar de opties eindeloos lijken, zonder dat de Elgginstallatie wordt gecompromitteerd en dus gemakkelijk updatebaar blijft.
3.3.1
Theming
Een belangrijk onderdeel om een website te personaliseren is theming. Door consistente benamingen en aanduidingen kan gemakkelijk door middel van niet alleen CSS, maar ook php veel van het uiterlijk worden bepaald. Door het systeem van overriden en extenden wordt ook voor theming aangeraden om alles uit te werken via een plug-in.
3.3.2
Translation strings
Met het zicht op het uitbreiden van welk community site dan ook moet er ondersteuning zijn voor meerdere talen. Elgg ondersteunt dit aan de hand van translation strings. Iedere string die getoond wordt aan de eindgebruiker moet worden voorafgegaan door de functie elgg_echo(). Deze string wordt opgevraagd in een php bestand die de ISO-code van de gekozen taal heeft.
12
Denis Debacker
4
Generic Platform
Inleiding tot het Elgg pakket
Bij het opzetten van het Elgg pakket lijkt alles ietwat kaal. Het moment dat je iets dieper duikt in het systeem merk je al snel de enorme mogelijkheden van het pakket. Een groot aantal features zijn reeds beschikbaar out-of-the-box en moeten enkel nog geactiveerd worden. Functies zoals Twitter login of de mogelijkheid om widgets weer te geven in het gebruikersprofiel zullen praktisch dagelijks gebruikt worden door de users zelf.
4.1
Systeemvereisten
Het belangrijkste gegeven dat te controleren is voor het aanvangen van de installatie is om zeker te zijn dat de server aan de minimumvereisten voldoet. Elgg maakt echter geen gebruik van exotische technologie en heeft dan ook redelijke vereisten die op de dag van vandaag zeer gemakkelijk te halen zouden moeten zijn (zie bijlage 2).
4.2
Installatie
De installatie van Elgg gebeurt via een script die snel en efficiënt de eerste werkomgeving opzet.
Figuur 1 Installatie welkomscherm
Eerst en vooral wordt gecontroleerd of de server voldoet aan de minimum vereisten, dit houdt bijvoorbeeld de PHP versie in, er wordt ook onderzocht of URL rewriting ingeschakeld is. De volgende opgaves zijn de database gegevens (username, wachtwoord, host en tabel prefix), zodat de nodige tabellen kunnen worden gegenereerd. Deze gegevens worden daarnaast ook opgeslaan in het configuratiebestand zodat deze installatie van Elgg verbinding kan maken met de server.
13
Denis Debacker
Generic Platform
Figuur 2 Installatie database instellingen
Nadat de verbinding met de database wordt bevestigd zijn nog enkele gegevens nodig, zoals de weergave naam van de website en de admin account gegevens. Daarna krijg je de standaard en, in dit geval, de lege Elgg homepagina te zien.
Figuur 3 Elgg homepage
14
Denis Debacker
4.3
Generic Platform
Initiële instellingen
Voor we beginnen met het developen van de eerste plug-in moeten er enkele aanpassingen gebeuren aan de instellingen. Met het Elgg pakket wordt een handige plug-in geleverd: Elgg Developer Tools. Deze module maakt het leven van de developer iets gemakkelijker door enkele handige opties aan te bieden. Enkele voorbeelden zijn het loggen naar het scherm van alle php output. Ook het ‘wrappen’ van views is gemakkelijk om uit te vinden welke plug-in nu welke code weergeeft. Als laatste optie is de optie om het cachen af te leggen, zodat aanpassingen direct worden weergegeven op het scherm.
4.4
De eerste plug-in
Bij het schrijven van plug-ins die niet als bedoeling hebben om functionaliteit te testen heb ik voorgesteld om een vaste benaming te gebruiken. Door ‘tc_’ voor iedere plug-in te schrijven kan alles snel worden teruggevonden zowel in de mappenstructuur als in het administratie gedeelte van de website.
4.4.1
Mappenstructuur Iedere plug-in heeft een aan te raden structuur, zodat Elgg de module zoveel mogelijk kan automatiseren. Deze structuur moet niet gevolgd worden maar moet dan wel expliciet worden verklaard in het start.php bestand, die samen met het manifest.xml bestand de enige twee bestanden zijn die wel verplicht zijn.
Figuur 4 Plug-in standaard structuur
15
Denis Debacker
4.4.2
Generic Platform
Manifest bestand
Dit bestand geeft Elgg extra informatie over de aangemaakte plug-in. Deze gegevens worden gebruikt om weer te geven in de backend. Gegevens zoals de module naam, de auteur, versie, licentie en omschrijving worden hier ingevuld. Figuur 5 Manifest.xml module Gegevens
Een voorbeeld van extra meta-data zijn de ‘dependencies’. Dit wordt letterlijk vertaald door afhankelijkheden. Er kunnen dus voorwaarden worden meegegeven die moeten worden voldaan vooraleer de plug-in kan worden geactiveerd. Ook kan hier een categorie naam worden opgegeven zodat modules in de backend kunnen worden gesorteerd op categorie.
Figuur 6 Manifest.xml dependencies
4.4.3
Start.php
Dit PHP bestand wordt gezien als het start script en moet verplicht aanwezig zijn om de module te kunnen activeren. In dit script worden alle uit te voeren functies geschreven die op hun beurt de verdere bestanden kunnen inladen die bij deze module behoren. Iedere keer een pagina wordt opgevraagd wordt het Elgg start script uitgevoerd (dit bevindt zich op engine/start.php). Dit bestand geeft de volgorde van de in te laden gegevens aan en gaat als volgt: 1. Elgg libraries en configuraties inladen 2. Alle plug-ins overlopen en hun start scripts inladen 3. Het init, system event afvuren De eerste 2 stappen laden alle nodige Elgg code in en verbindt met de database. De derde stap heeft aan dat het laden compleet is en alle modules nu kunnen worden geladen. Een module kan bijvoorbeeld zeggen dat een bepaald CSS bestand moet worden overschreven, of dat een extra menu item moet worden toegevoegd aan de standaard knoppen. Om de module te laten uitvoeren moet deze enkel reageren op het afgevuurde event.
16
Denis Debacker
Generic Platform
Figuur 7 Luisteren naar het init, system event
Dit is maar één van de vele events in Elgg. Een plug-in kan op zijn beurt ook nieuwe events afvuren en zo verder inspelen op de gebeurtenissen.
4.4.4
Page handler
Het toevoegen van een nieuwe webpagina wordt afgehandeld door de page handlers. Page handlers ontvangen de opgevraagde URL van de gebruiker en geven de correcte pagina weer.
Figuur 8 Page handler
In bovenstaand voorbeeld wordt iedere URL die begint met de identifier “/hello” opgevangen door deze page handler. Deze functie geeft meteen ook mee welke functie deze code verder zal afhandelen, namelijk: hello_page_handler(). Verder wordt de php functie explode() gebruikt om het overige gedeelte van de ontvangen URL op te delen en op te slaan in een array. Verschillende plug-ins kunnen dezelfde identifier gebruiken maar dit zorgt er voor dat de deze elkaar volledig overschrijven.
Figuur 9 Page handler afhandeling
Bovenstaande functie wordt opgevraagd bij het ontvangen van de correcte URL. Hier wordt de rest van de URL doorgegeven als de array variabele “$page”. Deze eerste waarde in deze array wordt opgeroepen en vergeleken met de eerste case, “world”. Als dit het geval is wordt het bestand “hello_world/pages/world.php” ingeladen en weergegeven op de huidige pagina.
17
Denis Debacker
4.4.5
Generic Platform
Paginas en views
Bij het oproepen van een pagina moet deze “gewrapped” worden in het Elgg-systeem. Voor formulieren zorgt dit voor extra veiligheid. Voor gewone pagina’s brengt dit consistentie met zich mee en kan er in de toekomst bijvoorbeeld een plug-in worden geschreven die alle views overschrijft.
Figuur 10 View Page
In bovenstaand voorbeeld ziet u de code in het “pages/world.php” bestand. Eerst wordt de huidige ingelogde gebruiker opgehaald via de door Elgg aangeleverde functie “elgg_get_logged_in_user_entity()”. Daarna wordt via de “elgg_view()” functie een volgende pagina ingeladen die de effectieve content zal bevatten. Deze content wordt geparsed via de template handler en gereturned als een string. Hier komt de Elgg structuur meteen duidelijk. Door enkel ‘hello_world/greetings’ mee te geven aan deze functie gaat Elgg automatisch kijken of er een mapje ‘views/default’ bestaat in de plug-in map zonder dat hier extra code moet worden toegevoegd. Deze functie geeft ook steeds een speciale variabele mee, namelijk de $vars variabele. Dit is opnieuw een array die kan worden aangevuld met zelf gekozen waarden maar bevat ook steeds volgende essentiële gegevens:
“$vars[‘config’]”: bevat de globale $CONFIG variabele “$vars[‘url’]”: de huidige URL “$vars[‘full_view’]”: boolean die aangeeft of een volledige pagina moet worden getoond of enkel een samenvatting.
In dit geval wordt de content van de pagina die werd opgeslaan in de $content variabele meegegeven als een waarde in de $vars array. Alle gegevens die nu werden opgeladen worden meegegeven aan elgg_view_page() die ervoor zorgt dat alles op het scherm wordt getoverd.
18
Denis Debacker
4.4.6
Generic Platform
Menu items
Men zou steeds de URL’s kunnen gebruiken om te navigeren op de website. Dit is echter zeker niet praktisch naar usability toe. Daarom zorgen we er steeds best voor dat menu-items beschikbaar zijn die verwijzen naar de correcte URL. In Elgg kan dit zeer snel worden opgelost door enkele regels code die alles voor ons zal afhandelen.
Figuur 11 Menu item toevoegen
Hier wordt een nieuw ElggMenuItem object aangemaakt, deze krijgt een naam mee als identifier, een translationstring als tekst en de URL als 3de parameter. Optioneel kan er nog voor gekozen worden om extra waardes mee te geven. Zo kan een submenu worden aangemaakt met verschillende secties. In dit voorbeeld zorgen we echter voor één enkele knop in het hoofdmenu. Daarna wordt de elgg_register_menu_item() functie opgeroepen die een menu naam als identifier meekrijgt en het net aangemaakte menuitem.
4.5
Aanpassen van inhoud
Het aanpassen van bestaande content kan in Elgg op twee manieren, men kan bestaande content uitbreiden, of ze gewoon volledig overschrijven.
4.5.1
Overriden van content
Het overriden van bestaande content kan gemakkelijk worden gedaan via een plug-in. Men moet er enkel voor zorgen dat dezelfde mappenstructuur wordt aangehouden als het origineel. Wil men bijvoorbeeld het logo aanpassen op de voorpagina die kan worden gevonden in volgende bestand: ‘views/default/page/elements/header_logo.php’ dan merkt u meteen al dezelfde mappenstructuur als in onze vorige plug-in. Door enkel een nieuwe plug-in aan te maken die in zijn “views” folder dezelfde structuur behoudt wordt deze automatisch opgeladen door Elgg eens deze plug-in op actief wordt geplaatst.
Figuur 12 mappenstructuur bij het overriden
19
Denis Debacker Generic Platform Door de volgorde van plug-ins aan te passen in de backend weet het Elgg-framework welke plug-in prioriteit krijgt in het overschrijven. Meerdere plug-ins kunnen dus dezelfde waardes overschrijven maar enkel de plug-in die als laatste wordt geladen wordt uiteindelijk getoond.
4.5.2
Extenden van content
Het extenden van een bepaalde view werkt op een iets andere manier dan het overschrijven. Aangezien alles steeds op de Elgg-manier gebeurd is er toch steeds een gevoel van vertrouwen. Bij de custom logo plug-in zou je er bijvoorbeeld voor kunnen zorgen met een enkele regel code dat er CSS wordt toegevoegd aan het bestaande Elgg-stylesheet. Deze methode geldt dan ook voor welk welk element op de pagina dan ook.
Figuur 13 Extenden van het standaard CSS-stylesheet
Deze enkele lijn code zorgt ervoor dat onze CSS die te vinden is in het bestand “views/default/custom_logo/CSS.php” wordt toegevoegd aan het reeds bestaande CSS-bestand. Moet deze zelf geschreven CSS-sheet worden toegevoegd aan de backend van de website dan volstaat het om enkel “css/elgg” te veranderen in “css/admin”.
Figuur 14 Extenden van de admin CSS-stylesheet
Het “custom_logo/css.php” is een gewoon PHP bestand waar de CSS in wordt geschreven.
Figuur 15 CSS.php inhoud
20
Denis Debacker
4.6
Generic Platform
Widgets
Een widget is een klein element dat een gebruiker kan kiezen om toe te voegen aan zijn gebruikers pagina. Momenteel ziet een profielpagina er zeer kaal uit.
Figuur 16 Standaard profielpagina
Om een widget aan te maken kan dit opnieuw zeer eenvoudig via een nieuwe plug-in. Enkel een nieuwe view is nodig die moet geregistreerd worden met de specifieke functie “elgg_register_widget_type()”.
Figuur 17 Registreren van een nieuwe widget
21
Denis Debacker Deze functie krijgt de volgende parameters mee:
Generic Platform
Naam: een identifier voor de widget handler Widget type: de naam van het type widget (doet meteen ook dienst als titel) Omschrijving: omschrijving van de widget Context (optioneel): geeft aan in welke contexten deze widget mag worden getoond Meerdere instanties (optioneel): boolean die aangeeft of meerdere instanties van de widget kunnen worden weergegeven
De eerste parameter die wordt meegegeven geeft meteen ook aan waar de content van de widget moet worden opgehaald. Elgg legt namelijk direct het verband met het volgende bestand: “views/default/widgets/welcome/content.php”.
Figuur 18 widget mappenstructuur
Ook ondersteunt ieder widget een zogenaamde ‘edit view’. De bedoeling hiervan is om een aantal instellingen te laten wijzigen door de gebruiker en kan gemakkelijk worden teruggevonden door het tandwiel icoontje rechtsboven iedere widget.
4.7
Opslaan van data
Figuur 19 Widget edit view
De manier om data op te slaan draait in Elgg volledig rond entities. Entities zijn object die 3 standaard velden hebben. Een GUID, een titel en een beschrijving. Overige gegevens kunnen gemakkelijk worden toegevoegd aan een object en wordt opgeslaan als metadata. Metadata bestaat uit een naam en een waarde. Één manier om entities met hun metadata op te slaan is via een formulier.
22
Denis Debacker
4.7.1
Generic Platform
Formulieren
Formulieren zijn waarschijnlijk de meest gebruikte manier in Elgg om nieuwe data op te geven. Via een speciale functie worden ze opgeroepen en gerenderd op het scherm: elgg_view_form().
Figuur 20 form gegevens
Wat er hier gebeurd is een titel opgeven via een translation string zodat deze kan worden omgezet naar een andere taal als dit nodig is. Daarna worden de formulier variabelen vastgesteld. ‘enctype’ wordt hier meegegeven met de waarde ‘multipart/form-data’ zodat upgeloade bestanden kunnen worden opgeslaan en terug uitgelezen uit de $_FILES variabele. Daarna weet Elgg automatisch waar het opgevraagde bestand in de elgg_view_form() functie zich bevindt door de constante structuur die wordt behouden. De Elgg engine zet ‘tc_picturealbums/savealbums’ om naar het volledige pad: ‘/views/default/forms/tc_picturealbums/savealbums.php’ Dit bestand bestaat uit enkele elgg_echo() en elgg_view() functies.
Figuur 21 Elgg formulier
Doordat dit formulier werd opgeroepen door de elgg_view_form() functie wordt alles gewrapped in een html