Discussion Gestion:Tâches/Liste/291

À propos de ce flux de discussion

Non modifiable

Antoine Mercier-Linteau (discussioncontributions)

Voici le plan pour le Front-end:

  • Développement en tant que gadget (MediaWiki-Gadget-edit-conflict-prevention.js)
  • Une page est considérée mise en mode édition lorsqu'un URL d'édition est affiché ou un certain bouton est cliqué
  • Les items qui seront surveillés:
    • Édition par l'Éditeur Visuel (?veaction=edit)
    • Édition par l'ancien éditeur de Wikicode et le nouvel éditeur de Wikicode (?action=edit)
    • Édition d'une publication dans le système de discussion (?action=edit-post)
    • Modification d'une page avec un formulaire (Spécial:AjouterDonnées)

Pour l'éditeur voulant éditer une page

  1. Le code surveille les actions sus-mentionnées
  2. Fait une requête d'API pour confirmer que quelqu'un n'est pas en train d'éditer la page
    1. Si c'est le cas, un message d'avertissement est envoyé (avec le nom de l'éditeur qui est en train d'éditer)
      1. L'éditeur peut forcer l'édition de la page
        1. Lorsque l'éditeur fera sa première modification sur la page, un message de perte de contrôle sera envoyé à l'éditeur d'origine
      2. L'éditeur peut demander à être informé lorsque la page ne sera plus en mode édition (feature futur)
      3. L'éditeur peut soit annuler, soit poursuivre pour voir le wikicode ou l'éditeur visuel (sans pouvoir sauvegarder)

Pour l'éditeur éditant une page

  1. Lorsqu'un premier changement est fait au contenu de la page, une requête est envoyée à l'API avec comme information:
    1. L'heure GMT
    2. Le nom de l'utilisateur
    3. L'ID de la page
  2. Cette requête est envoyée à tous les 2 minutes
  3. Le système répond indiquant si
    1. tout va bien
    2. un autre éditeur a pris le contrôle de la page et la sauvegarde entraînera probablement un conflit d'édition
Charles-Éric Noël Laflamme (discussioncontributions)

J'ai effectuer un premier jet du front end.

Si je comprends bien, tu aimerais que l'éditeur voulant éditer une page (si elle est déjà en train d'être éditer) soit offert 3 options différentes soit:

  1. forcer l'édition de la page (et un message sera envoyé aux autres éditeurs concomittans à la premère modification);
  2. poursuivre l'ouverture de l'éditeur, mais en lecture seulement en désactivant l'option de sauvegarde;
  3. annuler l'ouverture de l'éditeur.

Pour l'instant, j'ai programmé une fenêtre contextuel qui apparaît lorsqu'une page voulant être édité est déjà en train d'être éditer par quelqu'un d'autre et qui offre l'option "Ok", soit l'option #1 et l'option annuler, soit l'option #3.

Bien que je n'ai pas prévu de bouton à l'heure actuelle, j'ai tout de même laissé en commentaire le code pour désactiver la sauvegarde, soit option #2.

J'ai par ailleurs seulement fait l'exercice pour le Visual Editor.

J'ai par ailleurs actuellement complètement omis la fonctionnalité d'être informé lorsque la page ne sera plus en mode édition.


Bref, fais-moi savoir si j'ai bien compris la fonctionnalité et si cela fonctionne bien de ton côté.

Côté Back end, je crois qu'il resterait à:

  1. vérifier si une page est déjà en train d'être modifiée pour l'éditeur voulant éditer une page;
  2. envoyer périodiquement aux Back end différents paramètres (temps, utilisateur, page) lorsqu'une page est en train d'être éditée;
  3. envoyer une notification aux utilisateurs étant déjà en train d'éditer une page lorsque le nombre total d'utilisateur change (1 utilisateur de plus ou de moins).
Antoine Mercier-Linteau (discussioncontributions)

Tu as bien compris pour les options.

Concernant la fonctionnalité d'être informé lorsque la page ne sera plus en mode édition, fais juste garder ça en tête dans ton design, mais ne fais pas d'implantation car je ne prévois pas développer ce feature tout suite.

Il n'y aura non plus qu'un seul autre éditeur qui sera en train d'éditer la page (mais il existe du code expérimental dans l'Éditeur Visuel pour de l'édition simultanée comme sur Google Docs [mais ça se prête mal au versionnage des pages]).

Comment je fais pour tester ton code ?

Michaël St-Gelais (discussioncontributions)

Est-ce nécessaire de pouvoir forcer l'édition ? Je comprends pourquoi on le ferait (un éditeur qui a oublié une page ouverte dans son navigateur depuis 1 semaine et qui ne fout rien), mais ça l'a le risque quand même d'être irritant si jo-blo modifie une page que je suis en train d'écrire et qu'il force la fin de ma rédaction.

Si qqn veut ABSOLUMENT commencer à éditer STAT, ce serait possible d'obliger la personne en cours d'édition à enregistrer ? Que le système enregistre la version qui est en cours automatiquement et ferme l'interface d'édition de la personne qui modifiait initialement pour laisser l'opportunité à la personne qui veut modifier la page ?

Antoine Mercier-Linteau (discussioncontributions)

On peut limiter la capacité de forcer l'éditon aux administrateurs. Il faut quand même prévoir cette option. Pour la sauvegarde automatique, c'est quelque chose qui serait quand même difficile à implanter car ça demanderait de coordonner les états de l'éditeur visuel entre les deux utilisateurs.

Antoine Mercier-Linteau (discussioncontributions)

@Charles-Éric Noël Laflamme j'ai vérifié ton prototype et ça me semble un excellent départ. Je te recontacte lorsque j'aurais implanté le back-end.

Entre-temps, j'ai pensé à une manière de facilement implanter le mécanisme de sécurité ailleurs que dans l'éditeur visuel. On pourrait l'attacher directement aux boutons de l'interface. Voici une démo:

$("#ca-ve-edit").on('click', function(ev) { 
    ev.stopImmediatePropagation();  // Do not run the following events
    ev.preventDefault();// Do not follow the link
});
jQuery._data($("#ca-ve-edit")[0]).events.click.reverse(); // Invert the event processing order so our event is run fists.


Dans les faits, la fonction n'a pas besoin d'être super sécuritaire. Un utilisateur qui veut délibérément créer des conflits pourra toujours passer par l'API. On travaille avec de la bonne foi ici.

Antoine Mercier-Linteau (discussioncontributions)

Voici le plan sur le Back-end:

  1. Mise en mode édition (POST) avec l'ID de la page et le nom de l'utilisateur avec comme retour
    1. Si la requête s'est fait avec succès
  2. Polling (GET) avec comme argument l'ID de la page avec comme retour
    1. Si la page est en mode édition
    2. Qui est en train d'éditer la page

Points importants:

  • Le système vérifie bien sûr si l'utilisateur a les droits pour modifier la dite page.
  • Une page qui n'a pas été modifiée après un certain timeout (15 minutes?) est considérée comme ayant été abandonnée.
  • Le stockage des pages en mode édition se fait dans un fichier JSON dans /tmp.
  • Le fichier de stockage doit être bloqué lorsque modifié.
Michaël St-Gelais (discussioncontributions)
  • Qu'est-ce qui se passe si la page n'a pas été soumis après 15 minutes ? (Je mettrais le délai à 60 min d'ailleurs, au minimum !)
  • Ça pourrait arriver aussi que qqn aille se chercher un café mais soit en train de faire des modifications majeures. Ne serait-il pas possible d'afficher un message d'erreur sur la page qui est en train d'être modifié qu'une autre personne tente de modifier la même page et que la sauvegarde est encouragée pour permettre à l'autre utilisateur d'amener les modifs qu'il souhaite faire ? Un truc du genre ?
Antoine Mercier-Linteau (discussioncontributions)

On peut augmenter le délai à 60 minutes. On peut aussi barrer la page tant que le navigateur est ouvert. C'est certain qu'on va afficher un message de"avertissement si un certain laps de temps sans modifications s'est écoulé et que l'éditeur peut avoir perdu le verrou sur sa page.

On pourrait effectivement afficher un petit message d'avertissement si quelqu'un tente de modifier la page, mais ce sera un feature pour développement ultérieur.

Gardons ça simple pour le moment.

Formulaire Accès Savoirs

2
Résumé par Antoine Mercier-Linteau

Nous ne passerons pas par Accès Savoir.

Maude Allard (discussioncontributions)
Antoine Mercier-Linteau (discussioncontributions)

Parfait pour moi. Merci!

Résumé par Antoine Mercier-Linteau

Les extensions existantes ne peuvent pas être réutilisées.

Mattéo Delabre (discussioncontributions)

En parcourant les extensions, j’ai pu trouver les deux candidats suivants qui remplissent assez bien le cahier des charges mais ne sont plus maintenus depuis un bout de temps. Si le code n’est pas trop ancien, ça pourrait constituer un point de départ qu’on pourrait forker et maintenir pour Wikimedica.

Antoine Mercier-Linteau (discussioncontributions)

Merci ! J'ai regardé ces deux extensions et aucune n'est intégrée avec l'éditeur visuel. Il va falloir en développer une from scratch.

Il n’y a aucun sujet plus ancien