2012-04-13 20 views
3

In einem meiner Projekte dürfen Benutzer die gleiche Datei bearbeiten. Es ist Gruppenarbeit und maximale Anzahl der Benutzer in der Gruppe ist 4. Es ist selten, dass sie zur gleichen Zeit bearbeiten werden, aber es gibt die Möglichkeit dazu. Ich benutze ckeditor, der den Inhalt anzeigt. Wie kann ich den Inhalt während der Bearbeitung sperren? Für den obigen Fall was passiert, wenn ein Benutzer den Inhalt zum Bearbeiten öffnet und dann nie speichert und das Fenster geöffnet bleibt. Ist es möglich, den Inhalt zu speichern, die Sperre für die Bearbeitung durch andere Benutzer freizugeben? Wenn der erste Benutzer zum Arbeitsplatz zurückkehrt, sollte er die Meldung "Inhalt wurde geändert, bitte aktualisieren" sehen.Datei/Inhalt während der Bearbeitung im Browser sperren.

Ich verwende PHP, MySQL.

Dank

+0

gute Frage.Ich werde daran arbeiten.+1 –

Antwort

9

Sie sortieren müssen aus drei Teilen, diese Arbeit zu machen.

  1. Sie müssen Ihrer Datenbank ein Feld hinzufügen, um anzuzeigen, wenn die Datei bearbeitet wird. Erstellen Sie ein Feld namens "LastUsed" und zeichnen Sie einen Zeitstempel auf, wann die Datei zum Bearbeiten geöffnet wurde. Wenn jemand versucht, die Datei zu öffnen, überprüfen Sie den Zeitstempel. Wenn der Zeitstempel aktuell ist (sagen wir die letzten 5 Minuten), lassen Sie ihn nicht von einem zweiten Benutzer öffnen.

  2. Auf der Seite, auf der die Datei bearbeitet werden kann, muss alle paar Minuten eine Ajax-Anfrage ausgeführt werden. Sie müssen lediglich den Zeitstempel für die zu bearbeitende Datei auf das aktuelle Datum und die aktuelle Uhrzeit aktualisieren.

  3. Sie könnten dann einen Timer ausführen lassen, der die Ajax-Anfragen stoppt, sobald ein bestimmter Punkt erreicht ist, sodass der Zeitstempel in der Datenbank ablaufen kann. Dieser Timer muss jedoch jedes Mal zurückgesetzt werden, wenn der Benutzer eine Aktion ausführt. Solange der Benutzer etwas unternimmt, wird der Timer zurückgesetzt und die Ajax-Anforderung kann den Zeitstempel in der Datenbank weiter aktualisieren. Wenn der Benutzer für eine bestimmte Zeit nichts unternimmt, läuft der Timer hoch, die Ajax-Anfrage wird gestoppt, der Zeitstempel läuft ab und jemand anders kann ihn zur Bearbeitung öffnen. Sie können auch den gleichen Timer verwenden, um Ihre Nachricht anzuzeigen, dass die Bearbeitungssitzung abgelaufen ist oder was auch immer.

Es funktioniert im Grunde wie folgt:

  • Wenn Benutzer bearbeitet eine Datei ein Ajax-Request kontinuierlich die „Lastused“ Zeitstempel aktualisiert.

  • Solange diese Seite geöffnet ist, um die Datei zu bearbeiten, wird die Ajax-Anfrage den Zeitstempel in der Datenbank auf dem neuesten Stand halten.

  • Wenn die Person die Seite offen lässt, aber nichts unternimmt, wird der Timer gestartet und stoppt die Ajax-Anfragen, wodurch jemand anders die Datei bearbeiten kann.

  • Sobald die Person die Seite verlässt, kann die Ajax-Anfrage den Zeitstempel nicht mehr aktualisieren. Wenn eine Person die Seite verlässt, können andere die Datei bearbeiten.

  • Wenn der zweite Benutzer versucht, die Datei zu bearbeiten, wenn der Zeitstempel "LastUsed" innerhalb der letzten 5 Minuten liegt, wissen Sie, dass jemand anders die Datei bearbeitet. Wenn der Zeitstempel größer als 5 Minuten ist, wissen Sie, dass derzeit niemand die Datei zur Bearbeitung geöffnet hat, sodass der zweite Benutzer sie bearbeiten kann.

+1

Danke. Ich habe die Idee, wie es weitergeht. Werde wiederkommen, wenn irgendein Problem auftritt. – codescope

+0

Kein Problem. Wenn Sie der Meinung sind, dass dies Ihre Frage beantwortet hat, können Sie diese als akzeptierte Antwort markieren. –

+0

nützlich für mich auch. +1 –

Verwandte Themen