Pour pallier le problème du blocage infini, il suffirait de limiter le nombre de reports de la fin du blocage dans une variable de session. Via le script Ajax, ce refus de reporter le blocage est détecté : on désactive le textarea et on affiche une erreur dans un div par exemple.
Je propose la forme suivante pour la variable de session :
Pour chaque article modifié durant la session, on crée une clé dans ce tableau qui est réinitialisée à 0 chaque fois que l'utilisateur commence à modifier une page. Chaque Ajax incrémente la valeur de cette clé. Ainsi, plusieurs articles peuvent être édités simultanément.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $_SESSION['blocages']=array();
Au début d'une modification d'article :
Le script ajax (lui fournir un paramètre $_GET['articleid']:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $_SESSION['blocages'][$_GET['articleid']] = 0; mysql_query("METTRE LA DATE À JOUR POUR L'ARTICLE");
Il y a même possibilité d'envoyer chaque fois le texte à ajax qui met son md5 dans une variable $_SESSION['memoire'][articleid]. Si l'article est encore en cours de modification (le md5 a changé), on n'incrémente pas la variable $_SESSION['blocage'][articleid].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if($_SESSION['blocages'][$_GET['articleid']]<720){#une heure d'inactivité $_SESSION['blocages'][$_GET['articleid']]++; mysql_query("METTRE LA DATE À JOUR POUR L'ARTICLE id=".$_GET['articleid']); echo 'ok'; #lu par ajax } else echo 'erreur!'; #lu par ajax qui désactive le textarea et les boutons Save.
Louperivois
Partager