Ik ben bezig met een systeem waarin meerdere gebruikers aan een draaiboek met daarin onderwerpen kunnen werken.
Nu is het niet de bedoeling dat als iemand in een onderwerp aan het werken is, iemand anders het onderwerp tegelijkertijd bewerkt.
Dan zou informatie verloren kunnen gaan.
Hoe kan ik ervoor zorgen dat maar een iemand tegelijkertijd een pagina (met daarin het formulier) kan bezoeken?
Bijhouden welke pagina is opgevraagd en als iemand anders die pagina op wil vragen binnen x-tijd dan blokkeren met een melding. Als degene die bewerkt kiest voor opslaan, dan de blokkade opheffen.
Vragen zijn wel: hoe lang kan/mag iemand aan een onderwerp werken? Stel je hier een max aan? Want wat als iemand, om welke reden ook, wel een pagina opvraagt, maar daarna de browser afsluit.
Je kan natuurlijk in plaats van updaten de nieuwe INSERTEN. En als de begintijd die je bij het open eerst opslaat, bij het submitten niet meer de nieuwste is (iemand wad jou dus voor met wijzigen) kan je een formulier tonen die beide versies kan zien en de verschillen.
Ik zou zelf niet een bericht gaan locken. Maar wel gebruik maken van een INSERT-query om steeds de wijziging mee op te slaan. Zoals ik al zei kan je bij het openen van de bewerkpagina de huidige datum opslaan. En bij het versturen kijken of deze datum de nieuwste is. Als dit niet zo is, dan is iemand je voor gegaan.
Dit zou je kunnen bereiken door bij de resource wat extra informatie op te slaan:
- het user id van de eerste persoon die het formulier van deze resource bezoekt
- het tijdstip waarop dit gebeurt
Als iemand de resource inhoudelijk wil wijzigen (de persoon klikt op een edit-icoon o.i.d.) wordt eerst gekeken of iemand die al in gebruik heeft (en mogelijk hoe lang). Is er niemand bezig dan "claimt" deze gebruiker de resource. Indien dit wel het geval is toon je een melding.
Vervolgens heb je verschillende strategieën voor het weer vrijgeven van de resource:
- een timeout (maar dan heb je nog steeds kans op dataverlies), je zou evt nog een bevestiging in kunnen bouwen en kunnen controleren of de desbetreffende gebruiker "online" is om de kans dat je werk overschrijft te verkleinen
- het handmatig vrijgeven wanneer je klaar bent
Het is waarschijnlijk wel handiger wanneer niet iedereen op hetzelfde moment bezig is in 1 document. Je zou ook kunnen nadenken over alternatieve oplossingen.
De vraag is of locken wel gewenst is? Het klinkt erg veilig, maar is het ook gebruiksvriendelijk?
Conflicten tussen twee versies kan je prima herkennen met mijn aangedragen oplossing, en er gaat gaan fysieke data verloren. En een extra voordeel: Je hebt een perfecte geschiedenis om op terug te vallen als je een aanpassing van iemand wilt undo'en.
Feitelijk spreek je dan gewoon van een vereenvoudigd versiebeheer systeem.
Ik zou het toch fijn vinden om te locken.
Alleen de vraag is: hoe unlock je als iemand het browser afsluit.
Voor de rest denk ik dat ik met php-sessies kan werken?
Heeft iemand misschien een aardig voorbeeld? Of opzetje?