Mambo Open Source

**Mambo** (også kalt *Mambo Open Source* eller *MOS*) er et publiseringsverktøy (engelsk: Content Management System, CMS) som er basert på åpen kildekode. Det brukes til å opprette, vedlikeholde og presentere innhold, og kjører på Apache/PHP/MySQL-plattformen.

Det er lisensiert under GNU/GPL, og er gratis å bruke og modifisere.

## Historie

### Prosjektet
Mambo ble utviklet som et kommersielt produkt av Miro International i 2000. I april 2001 ble versjon 3 utgitt, og Miro utgir en GNU GPL-utgave av Mambo som kalles Mambo Open Source (MOS). Frem til midten av 2002 er Miro de eneste som vedlikeholder og oppdaterer MOS, mens de parallelt med dette videreutvikler den kommersielle versjonen. De blir så kontaktet av Robert Castley, og det ender med at han tar over prosjektlederstatusen fra Miro. Castley videreutvikler versjon 3 av MOS, og slipper versjon 4 beta. Andrew Eddie blir med Castley, men faller snart ut av tidsmessige grunner.

I mai 2003 kunngjør Miro at de ønsker å trekke tilbake MOS-koden for fiksing av feil og sikkerhetshull, og gir to av deres egne programmerere jobben. De uttaler også at de ønsker å endre lisensen til noe annet en GPL, på grunn av det hyppige misbruket av denne. Etter stort trykk fra miljøet rundt MOS blir de fort ferdig med oppgraderingen, og faller bort fra sin uttalelse om lisens, for å få MOS-prosjektet i gang igjen.

I kjølvannet av dette kommer MOS 4.5, og skillet mellom Mamboo CMS (Miro sin kommersielle versjon) blir betydelig større.

I 2005 foretok Miro et navneskifte, fra Mambo CMS til Jango. Dette førte til at Mambo Open Source også byttet navn, nemlig til Mambo. Dette hadde ingen juridiske følger, men var en formalitet fra Miro sin side.

Samme år ble også Mambo Foundation inc stiftet. Det ble foretatt en organisatorisk restrukturering for å gjøre Mambo-prosjektet mer oversiktlig og tilgjengelig, og for å forbedre koordinasjonen mellom de ulike teamene. Det førte til mange diskusjoner om hva Miro egentlig ville med dette, og mange mente at Miro nå forsøkte å ta over Mambo igjen, og fjerne det fra open-source-lilensen. Dette førte til at utviklerne av Mambo startet Open Source Matters.

### Furthermore-saken

I 2004 ble Mambo stilt overfor et krav fra Brian Connolly hos Furthermore Inc., som gikk ut på at Mambo-prosjektet etter sigende brukte kode som han hadde opphavsretten til.

Saken begynte med at Connolly engasjerte en av Mambo-teamets utviklere, Emir Shakic, til å lage en utvidelse til hans eget innholdsbehandlingssystem. Etter å ha gjort dette, la Shakic til en liknende funksjon til Mambo. Connolly observerte dette, og skrev et i åpent brev til Mambo-samfunnet:

*Hvis du per i dag bruker programvaren Mambo OS i en hvilken som helst utgivelse etter 3. oktober 2003, kan du og din organisasjon risikert å bli utsatt for en rettstvist og muligens en sivil rettsforfølgelse.*

Connolly mente at Shakic hadde brukt koden han laget under ham i Mambo. Dette førte ifølge Connolly til at hans konkurrenter nå fikk tilgang til kode som var hans egen eiendom, og at han ikke lenger kunne tjene penger på Shakics arbeid, da det nå ble tilgjengelig for alle gjennom Mambo Open Source.

Shacik på sin side påstod at han ikke en gang hadde skrevet under arbeidskontrakten mellom ham og Connolly, og dermed ikke var pålagt å hemmeligholde koden han skrev for Connolly. Shakic påstod også at han ikke hadde brukt koden han skrev for Connolly, men at han hadde skrevet en helt ny kode for MOS, som hadde det samme resultatet, men hvor koden altså ikke var den samme.

Connolly ville ikke vise koden Shakic hadde skrevet for ham, og Shakic ville heller ikke vise en kopi av arbeidskontrakten.

Etter massive protester fra hele Mambo-miljøet, inkludert Miro International, gikk i mot Connolly, og det endte med at ingen ble anmeldt eller rettsforfulgt.

## Teknisk

Mambo er konstruert for å operere under webserveren Apache. Det sies at den også virker under andre servertyper, men da noe ustabil. Den krever også at PHP og MySQL er installert i Apache, da den bruker PHP som språk og til kompilering, og MySQL til all databehandling.

### Maler
En mal definerer utseendet til et Mambo-drevet nettsted, og er bygd opp av HTML og eventuell CSS-kode. Det finnes mange gratis maler som kan lastes ned fra ulike nettsteder, mens det også finnes firmaer som selger maler.

#### Filene
En mal består som regel av følgende filer:

*
**template_css.css
*
**All grafikk legges her
*index.php
*template_details.xml
*template_thumbnail.png

*Template_css.css* brukes til all CSS-kode. I *images*-mappen legges alle bilder og all grafikk. *Index.php* er hovedfilen til malen, og det er den mambo laster når malen lastes. Her er all HTML- og PHP-kode. *Template_details.xml* brukes under installasjonen av malen, og inneholder all informasjon om filnavn og filenes plasseringer. Dette bruker installasjonssystemet til mambo under flyttingen av filene fra cachen etter dekomprimering. Her er også informasjon om hvem som har laget malen og når det ble laget. *Template_thumbnail.png* er et bilde av malen som brukes til forhåndsvisning av det.

Det er ingen bestemte regler for hvordan maler skal være lagt opp, annet enn at CSS-filen skal ligge i CSS-katalogen, og at index.php, template_details.xml og template_thumbnail.php skal være der. For eksempel han CSS-filen inneholde linker til andre CSS filer, index.php kan bestå av et skript som viser ulike filer avhengig av itemid og option osv.

#### Systemet
Mambo har innebygde funksjoner man setter inn i disse malene, som definerer hvor innhold skal vises, hvor ulike modulposisjoner skal være osv. Se på dette eksempelet:

Dette er et eksempel på en struktur på et nettsted, basert på vanlige HTML-tabeller. For å få mambo til å vise innhold, bytter man ut de ulike tekstfrasene med korresponderende kode, som f.eks.  i stedet for "SITE NAME",  i stedet for "Left modules" osv.

Man kan bruke flere maler på samme nettsted, men bare ett om gangen. Man kan definere en mal for hver link i hovedmenyen. Vanlig fremgangsmåte er å ha en meget lik mal for alle sidene, men f.eks. ulik farger/grafikk til de forskjellige seksjonene.

### Komponenter

Komponenter er det som genererer innhold i MOS. Det lastes med **'-funksjonen, og innholdet vises ut ifra det som er i itemid eller option-variabelen (se [[#Index.php|index.php]]).

====Content-komponentet====
MOS kommer med en rekke komponenter ferdig installert. Det mest sentrale er «content»-komponentet. Dette er integrert med en rekke andre komponenter og moduler som følger med mambo som standard, og det er dette som brukes til å lage grunnleggende innhold.

Det er to hoveddeler i «content»-komponentet: **Content Sections** og **Static Content**. ''Content Sections'' består av kategorier, som igjen består av ''Content Items'', altså enkeltsider. ''Static Content'' er også slike enkeltsider, men de blir ikke kategorisert slik som enkeltsidene i ''Content Sections''.

En enkeltside består av mange ulike felter: navn, tittel, dato for opprettelse, dato for siste endring, hven den er skrevet av, et felt for selve innholdet med flere.

====Frontpage-komponentet====
Dette er ment som forsiden i Mambo, og er det som vanligvis brukes – men man kan bruke et hvilket som helst komponent som forside.

Denne viser alle enkeltsidene som er satt til å vises i dette komponentet, man kan hake av for «show on frontpage» for hver enkeltside. Innholdet vises ved at har enkeltsidene to separate felt: **Intro text** og **Main text**. ''Intro Text'' er en ingressfunksjon. Dersom en tekst vises i Frontpage-komponentet, vises innholdet i ''Intro Text''-feltet. Velger man å lese hele enkeltsiden med "les mer"-funksjonen, vises først ''Intro Text''-feltet, og deretter vises ''Main Text'' feltet. Dette hindrer lange tekster på forsiden.

====Tilleggskomponenter====

Mambo kan utvides med en rekke tilleggskomponenter som utvider mambos funksjonalitet ut over de komponentene som følger med. Det er et eget installsjonsgrensesnitt for dette, som laster opp en zip- eller gzip-fil, dekomprimerer denne og flytter filene på de representative stedene i mambo-installasjonen.

Disse komponentene kan være forum, gjestebøker, gallerier, filarkiver etc. – det er ingen grense for hva man kan gjøre med et komponent annet en tekniske begrensningene i rammeverket, Apache/PHP/MySql.

===Moduler===
Moduler er innhold utenfor hovedinholdet. Dette omfatter bl.a. menyen, innlogging, søkeboks o.l., altså boksene som vises rundt hoveddelen av siden.

I malen definerer en de ulike posisjonene. Man har standardposisjoner som «left» (venstre) og «right» (høyre), og disse defineres i malen (se ovenfor). Utvikleren av malen bestemer selv hvor de ulike posisjonene skal være i malen, så for eksempel «left»-posisjonen må ikke være til venstre i malen.

Modulene kan settes opp til å vises over alt, eller noen ganger. Man velger hvilke menylinker modulen skal være synlig på, eller at den skal være synlig over alt. Hovedmenyen bør vises på alle sidene, men en modul som viser de siste innleggene i forumet kan for eksempel kun vises på forsiden og i selve forumet.

===Index.php===

Index.php er hovedfilen i Mambo, og gjennom den gjøres alle operasjoner i systemet. Dette skjer da index.php lastes:

# **Definer _VALID_MOS** – I det filen lastes defineres _VALID_MOS, og settes til "1". Dette er en [[variabel]] som finnes i alle filene i Mambo-systemet. Dersom en fil forsøker å få tilgang til en annen fil, sjekkes _VALID_MOS.  Dersom denne ikke er "1" eller ikke finnes, avbrytes operasjonen. Dette gjør at bare Mambo får tilgang til å bruke koden i filene. Dette gjelder ikke for index.php som alle har tilgang til, det er denne filen man bruker for å få tilgang til Mambos funksjoner.
# **Finnes configuration.php?** – Dersom denne filen ikke finnes, sendes man til Mambos installasjonsdel. Dette er fordi en uinstallert versjon av Mambo ikke har denne filen, den lages under installasjonen. Finnes den, regnes det med at mambo er installert.
# **Last configuration.php** – Denne filen inneholder all grunnleggende konfigurasjon av Mambo, og trengs til de aller fleste grunnleggende operasjoner.
# **Last mambo.php** – Inneholder alle basisfunksjonene og -klassene i Mambo.
# **Last database.php** – Denne lastes indirekte gjennom mambo.php, og brukes til å koble til databasen, og til å bruke denne koblingen.
# **Last frontend.php** – Initialiserer og definerer funksjonene som brukes til å vise innhold/moduler. Disse funksjonene er de som brukes i maler (eks ''mosLoadModules'' og ''mosMainBody'').
# **Finn "option" og "itemid"?** – Disse to variablene bestemmer innholdet som index.php viser, og er en del av URL-en. Option er hvilket komponent/hvilken funksjon som skal lastes, mens itemid er hvilket element i dette komponentet/denne funksjonen som skal lastes. Dersom disse ikke finnes, går Mambo videre til neste steg. 
# **Koble til databasen** – Bruker informasjonen i "configuration.php" til å koble til databasen.
# **Motta "itemid" om det ikke var i punkt 7** – Mambo bruker den første linken i menyen til å finne ut hva som skal vises. Dette betyr at forsiden blir den menylinken øverst i hovedmenyen, da denne lastes om idemid ikke finnes.
# **Lag mosMainFrame-objektet** – Denne inneholder enda flere basisfunksjoner, som å sette opp path o.l. ut ifra configuration.php, finne ut hviklen mal som skal vises og å lage metadataen.
# **Lag $_MOS_OPTION-arrayet** – Inneholder resultatet av option og itemid i punkt 7 eller 9. Man bruker dette arrayet til å laste dataene ved en senere anledning.
# **Last mal* – Laster selve malen, og samsvarer det med punkt 6. En mal inneholder vanligvis funksjoner herfra, som hvor innholdet skal vises, lasting av metadata etc.
# *'Last frontend.html.php** – I samsvar med punktet ovenfor inneholder denne filen selve HTML-koden som Mambo trenger for å vise innhold
# **mosShowHead** – En funksjon i frontend.php som viser diverse innhold i head-delen av malen, deriblant metadate
# **mosLoadModules** –  Viser "modul"-delen av $_MOS_OPTION-arrayet i punkt 11. Denne kommandoen kan bli kjørt flere ganger, da den har mange ulike parametere. Disse parameterne definerer ulike plasseringer i malen, som «left», «right», «top», «inset», «banner» osv. Mambo henter så alle modulene som hører til den definerte posisjonen. mosLoadModules har også en "stilparameter", som definerer hvordan kode modulen skal vises med. En parameter fjerner all omslagende kode, et annet viser de med div-tags, et tredje med tabeller osv.
# **mosMainBody** – Viser "component"-delen av $_MOS_OPTION-arrayet i punkt 11. Dette er selve innholdet.
# **Siden vises''' – Alt dette resulterer i en ferdig side, og denne sendes via http til brukeren.

## Eksterne lenker
* 
* http://www.mamboserver.com – Det offisielle nettstedet
* http://www.mamboforge.net – Utvidelser og oppgraderinger
* https://web.archive.org/web/20160109223644/http://portalmambo.com/ – Portal Mambo