eZ Publish : rajouter des contrôles sur les données via les content edit handler

Guillaume Kulakowski par Guillaume Kulakowski dans eZ Publish 6 décembre 2009 1
eZ Publish

La possibilité de rajouter des contrôles sur les données saisies lors du processus de publication d’un objet eZ Publish est une nouveauté introduite dans eZ Publish 4.1. Jusqu’alors, si on voulait rajouter des règles métiers dans un formulaire eZ Publish, il fallait passer par la création d’un datatype héritant plus ou moins d’un datatype déjà existant et implémentant ces règles. Maintenant le content edit handler se dote d’un validateInput permettant enfin de contrôler les données saisies.

Concrètement à quoi ça sert ? Dans mon cas, lors de la création d’un compte par les administrateurs sur le planet de Fedora-Fr (géré bien évidement par eZ Publish), je veux être sûr que le login renseigné correspond à un GauffrUser (utilisateur de la Gestion de Authentification Unifiée de Fedora-FR, Gauffr fera l’objet d’un prochain billet). Pour cela, j’ai donc rajouté un petit contrôle :

function validateInput( $http, &$module, &$class, $object, &$version, $contentObjectAttributes, $editVersion, $editLanguage, $fromLanguage, $validationParameters )
    {
        $result = array( 'is_valid' => true, 'warnings' => array() );
        $isValid =& $result['is_valid'];
        $warnings =& $result['warnings'];

        $contentClassIdentifier = $class->Identifier;
        $gauffrIni = eZIni::instance('gauffr.ini');

        switch( $contentClassIdentifier )
        {
            case $gauffrIni->variable('eZUser', 'UserClassIdentifier'):

                /* get user login */
                $user_account = $object->dataMap();
                $user_account = $user_account['user_account'];
                $user_accountID = $user_account->ID;
                $http_login = 'ContentObjectAttribute_data_user_login_' . $user_accountID;
                if ( $http->postVariable( $http_login ) )
                {
                    $login = $http->postVariable( $http_login );
                    /* Fetch GauffrUser */
                    if ( !isset($GLOBALS['GAUFFR_INIT']) || !$GLOBALS['GAUFFR_INIT'] )
                        include 'Gauffr/gauffr.php';

                    if ( !empty($login) && $gauffrIni->variable('GauffrSettings', 'StricMode') == 'enabled' && !GauffrUser::unique(GauffrUser::fetchUserByLogin( $login ) ) )
                    {
                        $warnings[] = array( 'text' => ezi18n( 'gauffr/validate', 'No GauffrUser "%user" in GauffrMaster. Please add account on GauffrMaster first.', null, array('%user' => $login) ) );
                        $isValid = false;
                    }
                }
                break;
        }

        return $result;
    }

Commentaires

Neolas

Le rajout de cette méthode dans le edit handler est vraiment une très bonne chose.

Cela permet comme tu dis d'éviter la création d'un datatype dédié. Petite évolution très pratique :)

Les commentaires pour ce poste sont fermés.

Réseaux sociaux