Gérer les conflits de versions

Le problème exposé dans ce sujet a été résolu.

Salut les zestes ! Aujourd'hui je suis venu vous demander de l'aide ! En effet, un problème récurrent, quand on modifie un document à plusieurs, est la gestion des conflits de version. Imaginons le scénario suivant : Clem modifie un texte (sur un wiki ?) et commence à rédiger. Pendant ce temps, Zozor modifie le texte original. Clem enregistre ses modifications. Zozor enregistre, faisant perdre le travail de Clem.

Comment avertir Clem que Zozor a enregistré un truc ?

J'avais pensé faire une variable $time gardant en mémoire le début des travaux, puis avec un appel en ajax régulier pour vérifier qu'il y a pas de modifications entre temps. Malheureusement, je suis assez nul en javascript donc je ne sais pas par quel bout m'y prendre. De plus, j'ai peur que ça mette à rude épreuve le serveur par ses appels réguliers (même si c'est tout les 5s). Avez-vous une meilleure idée ? Un bout de code ultra light !

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
$time = time();
if(isset($_POST['textarea'])) {
$query = $bdd->prepare('SELECT time FROM text WHERE id=? ORDER BY time DESC LIMIT 1');
$query->execute(array($_GET['id']));
$data = $query->fetch();
if($time > $data['time']) {
//éxecution
}
else {
//Problème, fuyons !
}
}
+0 -0

Hello,

C'est pour ça que quand on travaille à plusieurs sur un document, on utilise git/subversion/cvs/whatever qui vérifie que la version que tu veux enregistrer est bien partie de celle que tu vas écraser (en gros).

Bref, concrètement, tu veux que ça passe par un navigateur et en live? la mise à jour "en live" peut être faite via un websocket, non? les deux (ou n) intervenants modifient un document temporaire qui peut être enregistré par l'un ou l'autre, non?

+0 -0

Google gère ça en inscrivant automatiquement les modifications que tu ajoutes, en temps réel. Mais en même temps, il gèrent où apparaissent les modifications, donc si tu rajoutes un mot à l'endroit x, ils rajoutent un mot à l'endroit x, et n'effacent pas le document pour enregistrer le nouveau.

+0 -0

En effet, mon script se comporte comme GIT : on garde en mémoire chaque version. Néanmoins, il es difficile de faire merger deux versions, car il n'existe pas de fonction PHP adéquate. Une idée ?

L'idéal serait un framapad, néanmoins il n'y a pas un gestionnaire de version, et donc il est difficile de voir les modifications. Voici mon script (il suffit de renommer en index.php et l'exécuter).

J'explique ma problématique : je m'en sert pour corriger des textes, mais le problème, c'est quand plusieurs personnes travaillent, si deux personnes bossent en même temps, chacun faisant des corrections différentes, il est difficile (à moins de faire à la main) d'unifier les deux trucs quand on travail en même temps. Autant en asynchrone, ça marche nickel, autant en synchrone…

Si vous avez une idée, même autre à celle proposée, pour résoudre ce problème (et non, pas GIT, les personnes concernés sont pas des geeks !) Sinon, j'ai vu que Zds indiquait le message suivant : " Au moins un nouveau message a été posté dans la discussion pendant que vous rédigiez le votre.". Comment cela est géré ?

+0 -0

Tu peux mettre un place un sémaphore : pas de modification possible si une modification est en cours. Parce que si tu as un avertissement pour te dire "tu peux pas enregistrer, y a eu des modifs", tu es bien embêté, tu as déjà modifier les choses.

Avec les problèmes des sémaphores :

  • si la personne qui a le droit de modifier le document ne l'enregistre pas, quand est-ce que l'on considère qu'une autre personne peut enregistrer?
+0 -0

Bon, j'ai fait des tests et j'ai procédé de la manière suivante : je récupère le dernier id et je compare une fois postée. Grace à une librairy (finediff, bien foutu) je peux comparer ce qui a changé. Pour l'instant, aucun bug.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte