diff --git a/materio_user.module b/materio_user.module index 70d8aac1..2e169175 100755 --- a/materio_user.module +++ b/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'); + $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 - + */ } /**