Bladeren bron

materio_user : membership form auto fill profil2 adherent fields, checkout form prepopulated with profile2 adherent fields

Bachir Soussi Chiadmi 11 jaren geleden
bovenliggende
commit
0799729429
1 gewijzigde bestanden met toevoegingen van 179 en 20 verwijderingen
  1. 179 20
      materio_user.module

+ 179 - 20
materio_user.module

@@ -194,6 +194,10 @@ function materio_user_form_alter(&$form, &$form_state, $form_id) {
   //   //dsm($form, '$form');
   //   $form['account']['pass']['#type'] = "new_password_confirm";
   // }
+
+  if( $form_id == "uc_cart_checkout_form" ){
+    materio_user_uc_cart_checkout_form_alter($form, $form_state, $form_id);
+  }
 }
 
 // function materio_user_user_register_form_submit($form, &$form_state){
@@ -234,32 +238,50 @@ function materio_user_webform_client_11186_validate($form, &$form_state){
   # test if collaborators are filled in case of membership option is 3
   $values = $form_state['values']['submitted'];
   if ($values['column_left']['membership_options'] == 3) {
-    foreach ($values['collaborators'] as $coll_key => $coll) {
+    foreach ($values['column_right']['collaborators'] as $collab_key => $coll) {
       foreach ($coll as $field_key => $field_value) {
+        
+        $form_field = $form['submitted']['column_right']['collaborators'][$collab_key][$field_key];
+        
         if($field_value == ''){
-          $human_field_name = $form['submitted']['collaborators'][$coll_key]['#title'] . " : " . $form['submitted']['collaborators'][$coll_key][$field_key]['#title'];
-          $field_name = 'submitted][collaborators]['.$coll_key.']['.$field_key;
-          // dsm($field_name, 'field_name');
-
-          // TODO : tester si les email ne sont pas deja inscrit sur le site
-
-          form_set_error($field_name, t('You must provide a value for the !name field.', array('!name'=>$human_field_name)));      
+          $collab_label = $form['submitted']['column_right']['collaborators'][$collab_key]['#title'];
+          $field_label = $form_field['#title'];
+          $human_field_name =  $collab_label. " : " .$field_label;
+          form_error($form_field, t('You must provide a value for the !name field.', array('!name'=>$human_field_name)));      
+        }
+        
+        # validate the emails
+        # see https://api.drupal.org/api/drupal/modules!user!user.module/function/user_account_form_validate/7
+        if($form_field['#type'] == 'webform_email'){
+          // dsm($form_field, 'form_field');
+          $u = db_select('users')
+                    ->fields('users', array('uid'))
+                    // ->condition('uid', $account->uid, '<>')
+                    ->condition('mail', db_like($field_value), 'LIKE')
+                    ->range(0, 1)
+                    ->execute()->fetchField();
+
+          if ((bool) $u ) {
+            form_error($form_field, t('The e-mail address %email is already taken.', array('%email' => $field_value)));
+          }
         }
       }
-    }
-  } 
+    } 
+  }
 }
 
 function materio_user_webform_client_11186_submit($form, &$form_state){
   // dsm($form, 'form');
   // dsm($form_state, 'form_state');
   $values = $form_state['values']['submitted_tree'];
+  // dsm($values, '$values');
 
-  # redirect memebership form to checkout with good option selected
-  
-  $subscription_level = 3;//$values['membership_options'];
+  $flat_values = array();
+  materio_user_flatenize_form_values($values, $flat_values);
+  // dsm($flat_values, 'flat_values');
 
-  // to redirect to 'node/123?foo=bar#baz':
+  # redirect memebership form to checkout with good option selected
+  $subscription_level = $flat_values['membership_options'];
   // http://www.ubercart.org/node/1427
   $form_state['redirect'] = array(
     'cart/add/e-p11786_q1_a1o'.$subscription_level.'-membershipform',
@@ -271,11 +293,150 @@ function materio_user_webform_client_11186_submit($form, &$form_state){
     ),
   );
 
-# create collaborators users account incase of membership option is 3
-/*
+  # records values in member profile
+  materio_user_record_member_profile($flat_values);
+
+  # create collaborators users account incase of membership option is 3
+  # NO wait for checkout for that
+  //materio_user_create_collaborators_users();
+
+  // enregistrer le type d'adonnement chez les user
+}
+
+function materio_user_record_member_profile($values) {
+  // dsm($values, 'values');
+
+  global $user;
+  // dsm($user, 'user');
+  
+  $member_profile = profile2_load_by_user($user, 'adherent');
+  if (empty($member_profile)) {
+    profile2_create(array("type" => 'adherent', "uid" => $user->uid));
+  }
+  // dsm($member_profile, '$member_profile');
+
+  $correspondances = array(
+    "firstname"=>"field_first_name",
+    "name"=>"field_name",
+    "company"=>"field_organization",
+    "activity_sector"=>"field_activity_sector",
+    "website"=>"field_user_website",
+    "administrative_e_mail"=>"field_administrative_email",
+    "vat_number_intra_ce"=>"field_vat_number_intra_ce",
+    "location"=>"field_adresse",
+  );
+
+  foreach ($correspondances as $form_field => $field_name) {
+    switch($form_field){
+      case "website":
+        $value = array("url" => $values[$form_field]);
+        break;
+      case "administrative_e_mail":
+        $value = array("email" => $values[$form_field]);
+        break;
+      case "location":
+        $value = unserialize($values[$form_field]);
+        // dsm($value, 'location value');
+        break;
+      default:
+        $value = array("value" => $values[$form_field]);
+        break;
+    }
+
+    $member_profile->{$field_name} = array(
+      "und"=>array( 0 => $value,)
+    );
+  }
+
+  // save the profile2 new contents
+  profile2_save($member_profile);
+
+  // Indicate success to the user.
+  // drupal_set_message(t('Your member profile has been created.'));
+}
+
+function materio_user_flatenize_form_values($ar_src, &$flat_ar){
+  foreach ($ar_src as $key => $value) {
+    if(is_array($value)){
+      materio_user_flatenize_form_values($value, $flat_ar);
+    }else{
+      $flat_ar[$key] = $value;
+    }
+  }
+}
+
+/**
+ * Implements hook_form_alter().
+ */
+function materio_user_uc_cart_checkout_form_alter(&$form, &$form_state, $form_id) {
+  // dsm($form_id, 'form_id');
+  // dsm($form, "form");
+  // dsm($form_state, "form_state");
+
+  // Load an order from the session, if available.
+  if (isset($_SESSION['cart_order'])) {
+    $order = uc_order_load($_SESSION['cart_order']);
+    if ($order) {
+      // dsm($order, 'order');
+
+      global $user;
+      // dsm($user, 'user');
+      $member_profile = profile2_load_by_user($user, 'adherent');
+      // dsm($member_profile, "member_profile");
+    
+      $location = (object) $member_profile->field_adresse['und'][0];
+      // dsm($location, "location");
+
+      $phone_field = field_get_items('profile2', $member_profile, 'field_private_phone');
+      $phone = field_view_value('profile2', $member_profile, 'field_private_phone', $phone_field[0]);
+
+      $correspondances = array(
+        "billing_first_name" => $member_profile->field_first_name['und'][0]['value'], 
+        "billing_last_name" => $member_profile->field_name['und'][0]['value'], 
+        "billing_phone" => $phone, 
+        "billing_company" => $member_profile->field_organization['und'][0]['value'], 
+        "billing_street1" => $location->thoroughfare, 
+        "billing_street2" => $location->premise, 
+        "billing_city" => $location->locality, 
+        // "billing_zone" => ,
+        "billing_postal_code" => $location->postal_code, 
+        "billing_country" => $location->country,
+      );
+
+      foreach ($correspondances as $order_field => $value) {
+        $order->{$order_field} = $value;
+      }
+
+      $form['panes']['billing']['address']['#default_value'] = $order;
+    }
+  } 
+  
+
+}
+
+/**
+ * Implements hook_uc_order(); 
+ */
+function materio_user_order($op, $order, $arg2) {
+  dsm($op, "matyerio_user_uc_order | op");
+  // dsm($order, "order");
+  // dsm($arg2, "arg2");
+
+  switch ($op) {
+    case 'save':
+      // Do something to save payment info!
+      break;
+  }
+}
+
+
+# not used yet
+function materio_user_create_collaborators_users(){
+
+  /*
   if ($values['membership_options'] == 3) {
     $i = 1;
-    foreach ($values['collaborators'] as $coll_key => $coll) {
+    foreach ($values['collaborators'] as $collab_key => $coll) {
       // foreach ($coll as $field_key => $field_value) {
       //   if($field_value == ''){
       //     $human_field_name = $form['submitted']['collaborators'][$coll_key]['#title'] . " : " . $form['submitted']['collaborators'][$coll_key][$field_key]['#title'];
@@ -301,9 +462,7 @@ function materio_user_webform_client_11186_submit($form, &$form_state){
       $i++;
     }
   } 
-*/
-  // enregistrer le type d'adonnement chez les user
-
+  */
 }
 
 /**