JaliosXperience
fr en
Path > Home > Forums > French Forum
Link

Champs requis lors de la publication d'un avis

Arnaud Jacquemin - on 6/29/09 at 2:22 PM

Bonjour,

Nous avons constaté un comportement inattendu lors de l'enregistrement d'un avis sur une publication.

Le champ "titre" est requis, bien que cela ne soit pas précisé dans l'interface (pas d'astérisque rouge). De plus, si ce champ n'est pas renseigné, nos utilisateurs sont redirigés sur une page "Edition d'une publication Avis" dans le back-end (/work/).

Ce dernier point est problématique car certains utilisateurs habilités à poster des avis n'ont pas accès au back-end. Ils se retrouvent alors bloqués face à un avertissement "Votre habilitation ne vous permet pas d'accéder à cette page".

Quelle serait la solution à ce problème ?

D'avance merci pour votre aide.

Jean-Emmanuel Roux - on 6/30/09 at 11:28 AM

Bonjour Arnaud,

L'anomalie JCMS-1942 vient d'être saisie dans notre base d'anomalies.
Nous vous tiendrons informés de sa correction.

Arnaud Jacquemin - on 6/30/09 at 3:42 PM

Merci Jean-Emmanuel pour ce retour.

Ce problème est assez bloquant pour nous. Tout d'abord, au vu des logs, plusieurs avis ont déjà été perdus. De plus, les utilisateurs confrontés à ce problème vont avoir l'impression erronée de ne pas avoir le droit de commenter, alors qu'à l'inverse il s'agit d'un des principaux cas d'utilisations.

Nous aimerions donc mettre place un contournement dans les plus brefs délais, pour limiter l'impact négatif dans l'attente de votre correctif.

Une première idée serait d'implémenter une méthode checkIntegrity() dans un DataController, qui ajouterait un titre par défaut dans le cas où celui-ci ne serait pas renseigné. Qu'en pensez-vous ?

Jean-Emmanuel Roux - on 6/30/09 at 4:46 PM

Arnaud,

Cette problématique d'ergonomie va être revue pour les prochaines versions de JCMS. En attendant je vous propose la solution suivante, à savoir de modifier le formulaire des avis, afin que ce champ :

  • ne soit plus présenté en tant que champ de saisi
  • soit automatiquement renseigné par les éléments suivants :
Avis de <%= loggedMember.getFullName()%> sur <%= publication.getTitle(userLang) %>

Si cela vous convient vous pouvez télécharger la jsp doReviewFooterDisplay.jspf ici et l'installer sous le répertoire /front de votre application.

Cordialement.

Arnaud Jacquemin - on 6/30/09 at 6:16 PM

Merci pour cette solution que vous nous proposez. Hélas, nous n'allons pas la choisir car elle retire la possibilité de choisir un titre pour l'avis rédigé. Aujourd'hui il y a plus d'utilisateurs qui renseignent le titre que d'utilisateurs qui l'omettent (par chance, vu le bug...), j'en conclu que cette information leur semble utile.

Voici le contournement que j'envisage de mettre en place :

public class ReviewDataController extends BasicDataController implements PluginComponent {
	
	@Override
	public ControllerStatus checkIntegrity(Data data) {
		
		Review avis = (Review) data;		
		String titre = avis.getTitle(avis.getMainLanguage());
		
		// Si le titre n'a pas été renseigné, on lui met une valeur par défaut
		// (celui de la publication)
		if (titre == null || titre.trim().length() == 0) {
			Publication pub = avis.getReviewedPublication();
			String titrePub = pub.getTitle(pub.getMainLanguage());
			avis.setTitle(titrePub);
		}
		
		return super.checkIntegrity(data);
	}
}

Cette solution vous semble-t-elle correcte ?

Sinon, j'ai constaté un comportement qui contredit mon premier diagnostique (selon lequel l'affichage de l'avertissement était lié au fait que les utilisateurs impactés, qui ne sont pas rédacteurs, ne pouvaient pas accéder au back-end).
En effet, lorsque les mêmes utilisateurs cliquent sur le bouton "Editez votre avis", ils accèdent à la page "Edition d'une publication Avis" située sur le back-end, sans avertissement cette fois.

Jean-Emmanuel Roux - on 7/1/09 at 10:38 AM

Bonjour Arnaud,

Ce n'est pas une bonne solution.
La méthode checkIntegrity() ne doit pas être un lieu de modification de la donnée.
Cette méthode sert à vérifier l'intégrité d'un objet et ceci dans de nombreuses interfaces de JCMS, pas uniquement lors de la saisie d'un formulaire.
Afin de ne pas impacter les performance de JCMS, les DataController implémentant checkIntegrity() doivent être très efficaces.

Je vous suggère donc un autre solution.

  • Garder la jsp doReviewFooterDisplay.jspf d'origine
  • Modifier le code HTML gérant le titre, pour que ce dernier soit automatiquement renseigné avec un titre par défaut, libre à l'utilisateur de le modifier par la suite.

à savoir, modifier le bloc

          <%-- TITLE ------------------------------------------------------------ --%>
          <tr> 
            <td>
              <label class='formLabel' for='reviewTitleInput'><% /* %>Title<% */ %><%= glp("ui.com.lbl.title") %></label><br />
              <input id='reviewTitleInput' class='formTextfield' type="text" name="title" size="70" />
            </td>
          </tr>

par celui-ci (vous pouvez bien entendu, choisir votre propre texte par défaut)

          <%-- TITLE ------------------------------------------------------------ --%>
          <tr> 
            <td>
              <label class='formLabel' for='reviewTitleInput'><% /* %>Title<% */ %><%= glp("ui.com.lbl.title") %></label><br />
              <input id='reviewTitleInput' class='formTextfield' type="text" name="title" size="70" value="Avis de <%= loggedMember.getFullName()%> sur <%= publication.getTitle(userLang) %>" />
            </td>
          </tr>

J'espère que cette solution vous conviendra, sinon j'ai une troisième solution un peu plus complexe à mettre en oeuvre cependant :) !

Concernant, l' "Edition d'une publication Avis" en back-office, ce comportement sera également revu lors de la refonte des avis dans JCMS 6.1.

Merci pour toutes ces remontées qui concourent à l'amélioration de notre solution.

Arnaud Jacquemin - on 7/2/09 at 10:37 AM

Bonjour Jean-Emmanuel,

Merci pour ces explications à propos de la méthode checkIntegrity().

La deuxième solution nous convient. J'ai ajouté une astérisque dans le gabarit pour indiquer le caractère obligatoire du champ, ainsi qu'un javascript qui intercepte l'évènement de soumission et rempli le champ s'il a été vidé. Deux précautions valent mieux qu'une :-)

Par curiosité, en quoi consistait la troisième solution, celle qui est plus complexe à mettre en œuvre ?

Jean-Emmanuel Roux - on 7/2/09 at 5:17 PM

Bonjour Arnaud,

La troisième solution consiste à écrire un CustomFormHandler héritant du generated.EditReviewHandler et de surcharger la méthode getAvailableTitle() pour que celle-ci retourne une chaîne de caractères non vide.

eg :

public String getAvailableTitle() {
    if (isEmpty(super.getAvailableTitle()) {
        return "<my-default-title>"
    }
}

Il faut ensuite rattacher ce CustomFormHandler au type Review de base pour déclencher l'appel de la méthode lors de la soumission de l'avis.

Voilà ! :)

Login   Home   fr en
JALIOS SA - SIREN 440 126 035