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

This commit is contained in:
Bachir Soussi Chiadmi 2013-12-08 20:02:06 +01:00
parent 3fe3dde8c2
commit 0799729429

View File

@ -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');
$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();
// 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)));
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');
$flat_values = array();
materio_user_flatenize_form_values($values, $flat_values);
// dsm($flat_values, 'flat_values');
# redirect memebership form to checkout with good option selected
$subscription_level = 3;//$values['membership_options'];
// to redirect to 'node/123?foo=bar#baz':
$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
*/
}
/**