Réalisation d'un enchaînement d'actions

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Pour un site de dépôt d'annonces payantes, je voudrais créer le flux suivant :

  • l'utilisateur clique sur un bouton "Déposer une annonce"
  • si l'utilisateur n'est pas déjà connecté, s'ouvre alors un pop-up lui présentant un formulaire d'identification.
  • si l'utilisateur n'a pas de compte existant, il clique sur "Créer un compte" et le formulaire de demande de création d'un nouveau compte s'affiche.
  • après s'être authentifié ou avoir créé son compte, s'affiche l'interface du choix d'abonnement
  • l'utilisateur choisit le type d'abonnement et s'affiche l'interface (le noeud) permettant de déposer une annonce.
  • une fois l'annonce complétée, l'interface de paiement s'affiche
  • l'utilisateur effectue le paiement
  • l'annonce n'est publiée qu'après réception du paiement et acceptation de l'annonce par un administrateur

J'ai déjà créé un noeud de type 'Annonce' et une vue permettant de rechercher une annonce. Cependant,je ne sais pas comment m'y prendre pour réaliser tout l'enchaînement précité.

Merci d'avance pour votre aide.

Version de Drupal : 

Je viens de découvrir le module 'Drupal Commerce' et je me demandais si il pouvait convenir pour effectuer ceci. N'est-ce pas une peu utiliser un bazooka pour tuer une mouche? Ce module me semble énorme...

Je voudrais simplement afficher un module de paiement au moment de la création d'une annonce. Le module 'Drupal Commerce' me semble être fait surtout pour créer une boutique. Est-ce que je me trompe? Mon Anglais étant nul, j'ai beaucoup de mal à me rendre compte de son fonctionnement, vu qu'il n'existe pas (ou du moins je n'ai pas trouvé) de documentation en Français.

Si je venais quand même à utiliser ce module, est-ce que tout le travail effectué précédemment (noeud de type annonce, vue avec critères de recherches, etc...) devra être recommencé?

Merci d'avance pour vos commentaires.

Bonjour,

Je vais te détailler ce que j'ai déjà réalisé et le problème sur lequel je bute.

A l'aide de webform, j'ai créé un formulaire présentant les différentes formules d'abonnement et permettant d'en choisir une. Dans un module perso, j'ai modifié l'action de ce formulaire en fonction du fait que l'utilisateur est authentifié ou non pour qu'il aboutisse soit sur la création d'une annonce, soit sur le formulaire d'authentification (il devra cliquer sur créer un nouveau compte si il n'en dispose pas encore) :

//---------------------------------------------------------------------------------------------------------------------------------------------------

    /**
      * Modification du webform de présentation des choix d'abonnement
      */        
   
    case 'webform-client-form-4':
   
     //Rediriger l'action du formulaire du choix d'abonnement en fonction du fait que l'utilisateur est authentifié ou non
    
     if($GLOBALS['user']->roles[1] == "anonymous user")
      $form['#action'] = url("user");
     else
      $form['#action'] = url('node/add/annonce');
    break;
   
//---------------------------------------------------------------------------------------------------------------------------------------------------

Ensuite, toujours via le module, si l'utilisateur se trouve dans le processus de dépôt d'une annonce, je modifie la redirection du formulaire soit d'authentification, soit de création de compte :

//---------------------------------------------------------------------------------------------------------------------------------------------------

/**
* Modification du formulaire d'identification
*/

case 'user-login':

if(!empty($_POST['submitted']['votre_choix_dabonnement']))
{
//Conserver le choix de l'abonnement

$_SESSION['abonnement_choisi'] = $_POST['submitted']['votre_choix_dabonnement'];

//Après authentification, si le compte existe, diriger l'utilisateur sur la création d'une annonce

$form['#submit'][] = 'user_form_redirect_annonce';
}

break;

//---------------------------------------------------------------------------------------------------------------------------------------------------

function user_form_redirect_annonce($form, &$form_state)
{
$form_state['redirect'] = 'node/add/annonce';
}
//---------------------------------------------------------------------------------------------------------------------------------------------------

Au niveau du node annonce, je récupère l'abonnement choisi grâce à :

     if(isset($_POST['submitted']['votre_choix_dabonnement']))    
      $abonnement_choisi = $_POST['submitted']['votre_choix_dabonnement'];
     else    
      $abonnement_choisi = $_SESSION['abonnement_choisi'];

A ce moment, je fais apparaître ou non certains champs en fonction du type d'abonnement choisi.

Via le module rules, après création de l'annonce, je redirige l'utilisateur vers la création d'une commande (type de contenu créé personellement). A ce moment, pour je ne sais quelle raison, je ne suis pas parvenu à utiliser la même méthode qu'auparavant ($form['#submit'][] = fonction_de_redirection).

Dans ce type de contenu, je récupère le type d'abonnement et ajoute les différents champs nécessaires à un paiement via Ogone. Je modifie l'action du formulaire pour le diriger vers l'url de paiement indiquée par Ogone :

<?php

// $Id$

/
* @file
*
*
*/

  /
  * Etablissement du prix de chaque abbobnnement.
  *
  *
  */
 
session_start();
 
define("BASIQUE", 199);
define("PREMIUM", 249);
define("GOLD", 299);
define("TVA", 21);

/
  * Implementation des constantes nécessaire au traitement du paiement par Ogone.
  *
  *
  /

define("URL", "l'url de ton site");
define("URLOGONE", "l'url fournie par Ogone");
define("PSPID", "ton identifiant");     // identifiant du marchand = login du compte Ogone
define("SHASIG", "ta signature");    // chaine de car. pour construire la sig. SHA-1
/

/
  * Implementation of hook_form_alter().
  *
  * The function is named ogone_form_alter.
  */

function ogone_form_alter(&$form, &$form_state, $form_id)
{
  switch($form['#id'])
   {
    case 'commande-node-form':   
    
     $form['title'] = '';
    
     switch($_SESSION['abonnement_choisi'])
      {
       case 'abonnement_basique':
        $total = BASIQUE;
        $typeAbonnement = 'Abonnement de base';
       break;
      
       case 'abonnement_premium':
        $total = PREMIUM;
        $typeAbonnement = 'Abonnement Premium';
       break;
      
       case 'abonnement_gold':
        $total = GOLD;
        $typeAbonnement = 'Abonnement Gold';
       break;
      }
    
     /
      *     affecter le prix, la tva et le prix total aux champs adéquats*/
     
      $form['field_type_abonnement']['und'][0]['value']['#default_value'] = $typeAbonnement;
      $form['field_prix']['und'][0]['value']['#default_value'] = $total;
      $form['field_tva']['und'][0]['value']['#default_value'] = $total * (TVA / 100);
      $form['field_total']['und'][0]['value']['#default_value'] = round($total + ($total * (TVA / 100)), 2);
    
     /

      *     ajouter les champs nécessaires au traitement du paiement par Ogone*/
    
     // numéro unique (clé primaire) représentant la commande
     $form['orderID'] = array('#type' => 'hidden',
                              '#title' => 'orderID',
                              '#value' => $form['created']['#value']
                             );
                            
     $form['pspid'] = array('#type' => 'hidden',
                            '#title' => 'pspid',
                            '#value' => PSPID
                           );
                            
     $form['RL'] = array('#type' => 'hidden',
                         '#title' => 'RL',
                         '#value' => 'ncol_2.0'
                        );
                            
     $form['currency'] = array('#type' => 'hidden',
                               '#title' => 'currency',
                               '#value' => 'EUR'
                              );
                            
     $form['language'] = array('#type' => 'hidden',
                               '#title' => 'language',
                               '#value' => 'fr_FR'
                              );
    
     $total += $total * (TVA / 100);
    
     $form['amount'] = array('#type' => 'hidden',
                             '#title' => 'amount',
                             '#value' => round($total, 2) * 100
                            );
                           
    //Bouton submit
    $form['submit']['#value'] = 'Payer';
    $form['#action'] = URLOGONE;
   
   
    break;
   }
  
  //dsm($form);
}

Je n'ai pas encore travaillé sur la réponse d'Ogone suite à une demande de paiement.

Le problème qui subsiste, c'est que les contenus créés par l'utilisateur (annonce et commande), malgré la procédure de création d'un compte, le sont avec un utilisateur anonyme. J'avais d'ailleurs du configurer dans la gestion des droits le fait qu'un utilisateur anonyme pouvait créer un contenu de type annonce et un contenu de type commande, sinon j'arrivais à un message de type "Vous n'avez pas le droit d'accéder à ce type de contenu". Je dois donc arriver à attribuer l'utilisateur au contenu créé. J'ai déposé la question sur ce forum depuis pas mal de temps...