Crayons : validation des saisies

Code work in progress

Avec la révision 32274 un système de validation de saisie est introduit dans le plugin crayons.

Avant de mettre à jour la base de donnée la fonction verifier_type_modele($modifs) est chargée si présente.

Le modèle peut être un champ ou un contrôleur regroupant plusieurs champs.

Par exemple pour vérifier la saisie des crayons titres il faudra créer une fonction
verifier_article_titre()

Pour une base distante : verifier_basedistante__table_modele()

Si la fonction de vérification détecte une saisie invalide, elle renvoie un message et les caractères invalides. Le crayons refuse alors la mise à jour de la base de donnée, applique la classe crayon-invalide au champ, affiche les caractères invalides et le message.

Exemple de fonction qui interdit la saisie de chiffre dans le champ nom de la table profs de la base educ:

$modifs= array ( 0 =>
  array (
    0 => 'educ__prof',        //basedistante__table
    1 => 'nom',        //champ
    2 => '6',        //id_prof
    3 =>
    array (
      'nom' => 'nommodifier',
    ),
    4 => 'wid4ae01b0a85b2a7_70591198',
  )

function verifier_educ__prof_nom($modifs) {
        $reg='/[\d]+/';
        $r=preg_match_all($reg,$modifs[0][3]['nom'],$matches);
        if(  $r>0 ) {
           $invalides[$modifs[0][4].'_nom']['msg']=_T('chiffres_minuscules_interdits');
           $invalides[$modifs[0][4].'_nom']['retour']=implode(',',$matches[0]);
         }
        return $invalides;
 } 

Discussion

3 discussions

  • Petite trouvaille de Pierrox : il existe un pipeline « crayons_verifier » qui permet de modifier la valeur soumise, si une valeur est retournée dans normaliser.

    Voir https://zone.spip.org/trac/spip-zone/browser/_plugins_/crayons/action/crayons_store.php?rev=100962#L138

    Reply to this message

  • 3

    Est-ce qu’il serait possible de fournir un exemple plus simple du tableau que peut renvoyer la fonction “verifier” ? Ou alors la structure du tableau ?

    Chouette nouvelle en tout cas :)

    • La fonction doit s’appeler

      function verifier_chat_nom($modifs)

      si le fichier controleur s’appelle chat_nom.html ou plus généralement si le crayon modifie le champ nom de l’objet chat.

      Si on utilise le crayon hyperlien pour modifier lien_nom et lien_url dans les breves, par exemple, la fonction sera:

      function verifier_breve_hyperlien($modifs)

      Le paramètre $modifs contient une seule cellule qui contient elle-même 5 cellules:

      • $modifs[0][0]: le nom de l’objet (ex: chat ou breve)
      • $modifs[0][1]: le nom du crayon (ex: nom ou hyperlien)
      • $modifs[0][2]: index de l’objet (ex: 12 - valeur de id_chat ou id_breve)
      • $modifs[0][3]: nouvelle valeur à vérifier (ex: array('nom' => ''Efia",) ou dans le cas de hyperlien: array('lien_titre'=>'Google','lien_url'=>'http://www.google.fr',)
      • $modifs[0][4]: un identifiant bizarre (ex: wid4e30852faf2683_70025054)

      Donc, pour résumer:

      • dans la fonction verifier_chat_nom:
          0 => 
          array (
            0 => 'chat',
            1 => 'nom',
            2 => '12',
            3 => 
            array (
              'nom' => 'Efia',
            ),
            4 => 'wid4e30852faf2683_70025054',
          ),
        )
      • dans la fonction verifier_breve_hyperlien:
          0 => 
          array (
            0 => 'breve',
            1 => 'hyperlien',
            2 => '12',
            3 => 
            array (
              'lien_titre' => 'Google',
              'lien_url' => 'http://www.google.fr',
            ),
            4 => 'wid4e30852faf2683_70025054',
          ),
        )

      Ensuite pour le tableau de retour, si on se fie au code des crayons (action/crayons_store.php, fonction crayons_store):

          /* aiguillage pour verification de la saisie
          Pour traitement ulterieur les fonctions de verifications doivent renvoyer $invalides :
          $invalides[wid_champ]['msg'] -> message de saisie invalide
          $invalides[wid_champ]['retour'] -> caracteres invalides */

      Il faut donc rendre (si on veut signaler une erreur) un tableau $invalides non vide:

          $crayon=$modifs[0][2]
          $wid=$modifs[0][4]
          $invalides[$wid.'_'.$crayon]['retour']='premier message';
          $invalides[$wid.'_'.$crayon]['msg']='deuxieme message;
          return $invalides;

      Le résultat est un cadre rouge, sous le crayon, qui contient “premier message deuxieme message”.

    • Et d’après mes essais, il faut définir cette fonction dans un fichier _options.php:

      • config/mes_options.php
      • pour un plugin: prefixe_options.php

      Ca ne marche pas en la définissant dans un fichier _fonctions.php.

    • Petite trouvaille de Pierrox : il existe un pipeline “crayons_verifier” qui permet de modifier la valeur soumise, si une valeur est retournée dans normaliser.

      Voir https://zone.spip.org/trac/spip-zone/browser/_plugins_/crayons/action/crayons_store.php?rev=100962#L138

    Reply to this message

  • Bonjour

    Je cherche à réaliser un couple Controleur/vue pour une DATE (champ: date_app)

    La date étant entrée “à la française” elle nécessite un traitement avant stockage.
    Ma fonction verifier_approche_date_app est appelée, mais sans la valeur modifiée. que puis-je essayer ?

    Merci d’avance

    Michel

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom