Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Module perso hook_form_submit

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

Je développe actuellement un module perso pour s'inscrire à une newsletter. L'idée, j'affiche un bloc avec un formulaire où l'internaute indique son adresse email et de quel type de client il fait partie.

Jusque la pas de problème, j'ai bien réussi à afficher le bloc et à enregistrer la saisie dans une table.

Mon problème se situe au niveau de la page d'administration. Je me suis beaucoup inspirée du module simplenews avec la gestion des abonnés.

J'ai réussi à créer une page avec des filtres, à afficher le tableau des résultats par contre pour filtrer mes résultats j'aurais besoin de récupérer la valeur des filtres.
En déboguant avec Eclipse et en mettant un point d'arrêt dans mes fonctions qui me permettent d'enregistrer les valeurs de Session, je ne passe pas dedans, il s'agit de la fonction
function subNewsletter_subscription_filter_form_submit($form, &$form_state) {

Auriez-vous une idée ?

D'avance merci

Mon code ci-dessous

<?php
//tableau des droits
function subNewsletter_permission() {
  return array(
   
'administer SubNewsletter subscriptions' => array(
    
'title' => t('Administer SubNewsletters subscriptions')
       )
    );
}


/<
strong>
 * Implements
hook_menu().
 *
Création chemin page de résultats
 
*/
function
subNewsletter_menu() {
  
$items['admin/subNewsletter/list'] = array(
     
'title' => 'Newsletter subscriptions',
     
'title callback' => '_subNewsletter_title',
    
'description' => 'Newsletter subscription management.',
    
'page callback' => '_subNewsletter_results',
      
'access arguments' => array('administer SubNewsletter subscriptions'),
    
'type' => MENU_LOCAL_TASK,
      );
  
   return
$items;
}


//creation du titre de la page de résultats
function _subNewsletter_title (){
   return
t('Subscriptions list');
}

//page qui liste les inscriptions à la newsletter
function _subNewsletter_results() {
 
$content =_subNewsletter_admin_subscription();
 return
$content;
}

function
_subNewsletter_admin_subscription() {

 
$form['filter'] = subNewsletter_subscription_filter_form();                 //formulaire qui affiche les filtres
 
$form['#submit'][] = 'subNewsletter_subscription_filter_form_submit';        // fonction qui recupere valeur des filtres et cree variable session
  //$form['filter']['#theme'] = 'subNewsletter_filter_form';             // theme du formulaire
 
$form['admin'] = subNewsletter_subscription_list_form();                 //fonction qui affiche le tableau et bouton export

 
return $form;
}

//formulaire qui affiche les filtres
function subNewsletter_subscription_filter_form() {
 
// Current filter selections in $session var; stored at form submission
 
$session = isset($_SESSION['subNewsletter_subscriptions_filter']) ? $_SESSION['subNewsletter_subscriptions_filter'] : '';
 
$session = is_array($session) ? $session : _subNewsletter_subscription_filter_default();
 
$filters = subNewsletter_subscription_filters();
 
 
 
$form['filters'] = array(
   
'#type' => 'fieldset',
   
'#title' => t('Show only subscription which'),
   
'#collapsible' => FALSE,
  );

 
// Filtre langue
 
$langues = array (
              
'FR'      => t("French"),
              
'EN'      => t("English"),
  );
 
$form['filters']['langue'] = array(
   
'#type' => 'select',
   
'#title' => t("Language"),
   
'#options' => $langues
     
'#default_value' => $session['langue'], 
  );

 
 
//Filtre type
 
$options = array(  
              
'BP'      => t("Baker, Confectioner, Chocolate maker, Caterer..."),
            
'SCHOOL'  => t("School or Training Center"),
               
'GMS'         => t("A Supermarket or an Hypermarket"),
             
'INDUSTRIAL'=> t("Industrial or Semi-industrial companie"),
            
'CHAINS'  => t("Bakery and Pastry chain")
       );
 
     
 
$form['filters']['type'] = array(
   
'#type' => 'select',
   
'#title' => t("Type"),
   
'#options' => $options,
   
'#default_value' => $session['type'],
  );
 
 
 
$form['filters']['submit'] = array(
   
'#type' => 'submit',
   
'#value' => t('Filter'),
   
'#prefix' => '<span class="spacer" />',
  );
 
 
// Add Reset button if filter is in use
 
if ($session != _subNewsletter_subscription_filter_default()) {
   
$form['filters']['reset'] = array(
     
'#type' => 'submit',
     
'#value' => t('Reset'),
    );
  }

  return
$form;
}

/</
strong>
 *
Helper function: returns subscription filter default settings
 
*/
function
_subNewsletter_subscription_filter_default() {
  return array(
   
'langue' => 'FR',
   
'type' => 'BP',
  );
}

/**
 * Generate subscription filters
 */
function subNewsletter_subscription_filters() {
 
// langue filter
 
$filters['langue'] = array(
   
'title' => t('Language'),
   
'options' => array (
                 
'FR'      => t("French"),
              
'EN'      => t("English"),
                  ),   
  );
 
 
// type filter
 
$filters['type'] = array(
   
'title' => t('Type'),
    
'options' => array(   
              
'BP'      => t("Baker, Confectioner, Chocolate maker, Caterer..."),
            
'SCHOOL'  => t("School or Training Center"),
               
'GMS'         => t("A Supermarket or an Hypermarket"),
             
'INDUSTRIAL'=> t("Industrial or Semi-industrial companie"),
            
'CHAINS'  => t("Bakery and Pastry chain")
       ),
  );

  return
$filters;
}


function
subNewsletter_subscription_filter_form_submit($form, &$form_state) {
 
$langue = $form_state['values']['langue'];
 
$type = $form_state['values']['type'];
   
   switch (
$form_state['values']['op']) {
     case
t('Filter'):
         
$_SESSION['subNewsletter_subscriptions_filter'] = array(
          
'langue' => $form_state['values']['langue'],
         
'type' => $form_state['values']['type'],
        );
         break;
       case
t('Reset'):
      
$_SESSION['subNewsletter_subscriptions_filter'] = _subNewsletter_subscription_filter_default();
          break;
   }
}

function
subNewsletter_subscription_list_form() {
 
// Build an 'Update options' form.
 
$form['options'] = array(
   
'#type' => 'fieldset',
   
'#title' => t('Export'),
   
'#prefix' => '<div class="container-inline">',
   
'#suffix' => '</div>',
  );
 
 
$form['options']['submit'] = array(
   
'#type' => 'submit',
   
'#value' => t('Export'),
   
'#submit' => array('subNewsletter_subscription_list_form_submit'),   
  );

 
// Table header. Used as tablesort default
 
$header = array(
   
'mail' => array('data' => t('Email'), 'field' => 'sn.email', 'sort' => 'asc'),
   
'type' => array('data' => t('type'), 'field' => 'sn.type'),
   
'language' => array('data' => t('Language'), 'field' => 'sn.code_langue'),
   
'date' => array('data' => t("Date"), 'field' => 'sn.date'),
  );

 
// requete pour selectionner resultats
  //TODO rajouter condition pour prendre en compte les filtres
 
$query = db_select('subNewsletter', 'sn')->extend('TableSort');

 
 
$result = $query
   
->fields('sn', array('id', 'email', 'type', 'code_langue', 'date'))
    ->
orderByHeader($header)
    ->
execute();

 
$options = array();
 
$destination = drupal_get_destination();

  foreach (
$result as $subscriber) {
   
$options[$subscriber->id] = array(
     
'email' => check_plain($subscriber->email),
     
'type' => check_plain($subscriber->type),
     
'language' => check_plain($subscriber->code_langue),
    
'date' => check_plain($subscriber->date),
    );
  }
 
 
$form['table'] = array(
     
'#markup' => theme('table', array('header' => $header, 'rows' => $options)),
    );

  return
$form;

}

//TODO modifier pour exporter en CSV
function subNewsletter_subscription_list_form_submit($form, &$form_state) {
   
drupal_set_message('Export OK');
}




//en dessous code qui affiche le bloc ...
?>
Fichier attachéTaille
Icône image subnewsletter.png51.46 Ko
Forum : 
Version de Drupal :