data); } else { $packet = array( 'agentnum' => variable_get('freeside_agentnum',''), 'promo_code' => '', 'reg_code' => '', 'keys' => $keys, ); $freeside = new FreesideSelfService(); $freeside->clear_signup_cache(); $info = $freeside->signup_info($packet); cache_set($cid, $info, 'cache', CACHE_TEMPORARY); return($info); } } function subextract($array, $key) { // map { $_->{$key} } (...) $out = array(); foreach ($array as $i) { $out[] = $i[$key]; } return $out; } function freeside_signup_form($form_state) { dkpr($form_state); $agentnum = variable_get('freeside_agentnum',''); if( !$agentnum || !(variable_get('freeside_hostname','')) ) { drupal_set_message(t('Freeside self-service is not yet configured.'),'error'); return array(); } $freeside = new FreesideSelfService(); $keys = array( // all the signup_info that we need 'part_referral', 'refnum', 'emailinvoiceonly', 'payby', 'payby_longname', 'part_pkg', 'default_pkgpart', 'signup_service', ); $signup_info = signup_info($keys); dkpr($signup_info); $form = array(); $refs = $signup_info['part_referral']; $form['refnum'] = count($refs) > 1 ? array( '#type' => 'select', '#title' => t('How did you hear about us?'), '#options'=> array_combine( subextract($refs, 'refnum'), subextract($refs, 'referral') ), '#default_value'=>$signup_info['refnum'], ) : array ( '#type' => 'hidden', '#value' => $refs[0]['refnum'], ); $form['contact'] = array( '#type' => 'fieldset', '#title' => t('Contact Information'), 'last' => array( '#prefix' => '
', '#type' => 'textfield', '#title' => t('Contact name (last, first)'), '#size' => 20, '#required' => 1, ), 'first' => array( '#type' => 'textfield', '#size' => 20, '#required' => 1, '#suffix' => '
', ), 'company' => array( '#type' => 'textfield', '#title' => t('Company'), '#size' => 20, ), 'address1'=> array( '#type' => 'textfield', '#title' => t('Address'), '#size' => 30, '#required'=>1, ), 'address2'=> array( '#type' => 'textfield', '#size' => 30, ), 'city' => array( '#prefix' => '
', '#type' => 'textfield', '#title' => t('City'), '#size' => 15, '#required'=>1, ), 'state' => array( '#type' => 'textfield', '#title' => t('State'), '#size' => 2, '#required'=>1, '#default_value'=>$info['statedefault'], ), 'zip' => array( '#type' => 'textfield', '#title' => t('Zip'), '#size' => 10, '#required'=>1, '#suffix' => '
', ), 'daytime' => array( '#type' => 'textfield', '#title' => t('Daytime Phone'), '#size' => 18, ), 'night' => array( '#type' => 'textfield', '#title' => t('Night Phone'), '#size' => 18, ), ); $emailinvoiceonly = $signup_info['emailinvoiceonly']; $form['billing'] = array( 'invoicing_list' => array( '#type' => 'textfield', '#title' => t('Email invoice to'), '#size' => '40', '#required'=>$emailinvoiceonly, ), '#type' => 'fieldset', '#title' => t('Billing Information'), 'invoicing_list_POST' => array( '#type' => $emailinvoiceonly ? 'hidden' : 'checkbox', '#title' => t('Send a paper invoice'), '#default_value' => 0, ), ); if( count($signup_info['payby']) > 1 ) { $form['billing']['payby'] = array( '#type' => 'select', '#title' => t('Payment method'), '#options'=> array_combine( $signup_info['payby'], $signup_info['payby_longname'] ), ); } else { $form['billing']['payby'] = array( '#type' => 'hidden', '#value' => $signup_info['payby'][0], ); } $form['billing']['payby_CARD'] = array( '#type' => 'fieldset', 'cardnum' => array( '#prefix' => '
', '#type' => 'textfield', '#title' => t('Credit card number'), '#size' => 20, '#maxlength'=>20, '#required'=>1, '#suffix' => '
', ), 'expmonth' => array( '#prefix' => '
', '#type' => 'textfield', '#title' => t('Expiration date'), '#size' => 2, '#required'=>1, '#maxlength' => 2, ), 'expyear' => array( '#field_prefix' => '/', '#type' => 'textfield', '#size' => 2, '#maxlength' => 2, '#required'=>1, '#suffix' => '
', ), 'paycvv' => array( '#prefix' => '
', '#type' => 'textfield', '#title' => 'CVV', '#size' => 3, '#maxlength' => 3, '#required'=>1, '#suffix' => '
', ), 'cardname'=> array( '#prefix' => '
', '#type' => 'textfield', '#title' => t('Exact name on card'), '#size' => 40, '#maxlength'=>60, '#suffix' => '
', ), ); $pkgs = $signup_info['part_pkg']; $form['package'] = array( '#type' => 'fieldset', '#title' => t('First Package'), 'pkgpart' => (count($pkgs) > 1 ? array( '#type' => 'select', '#title' => '', '#options'=> array_combine( subextract($pkgs, 'pkgpart'), subextract($pkgs, 'pkg') ), '#default_value'=>$signup_info['default_pkgpart'], ) : array ( '#type' => 'hidden', '#value' => $pkgs[0]['pkgpart'], ) ), ); switch($signup_info['signup_service']) { case 'svc_acct': $form['package'] += array( 'username'=> array( '#type' => 'textfield', '#title' => t('Username'), '#size' => 20, '#required'=>1, ), 'password'=> array( '#type' => 'password_confirm', '#size' => 20, '#required'=>1, '#process'=> array('freeside_expand_password_confirm'), ) ); break; case 'svc_pbx': break; // nothing yet implemented } $form['package']['pkgpart']['#default_value'] = $signup_info['default_pkgpart']; $form['submit'] = array( '#type' => 'submit', '#value' => 'Sign me up!', ); return $form; } /* workaround for silly Drupal behavior */ function freeside_expand_password_confirm($element) { $element = expand_password_confirm($element); $element['pass1']['#attributes']['value'] = $element['#value']['pass1']; $element['pass2']['#attributes']['value'] = $element['#value']['pass2']; return $element; } function freeside_signup_form_submit($form, &$form_state) { $freeside = new FreesideSelfService(); $values = $form_state['values']; dkpr($values); $customer = array(); $customer['agentnum'] = variable_get('freeside_agentnum',''); foreach( array( 'first', 'last', 'address1', 'address2', 'city', 'state', 'zip', 'daytime', 'night', 'fax', 'payby', 'refnum', 'invoicing_list', 'pkgpart', 'username' ) as $field ) { $customer[$field] = $values[$field]; } if($values['invoicing_list_POST']) { $customer['invoicing_list'] = implode(',', array($customer['invoicing_list'], 'POST')); } $customer['_password'] = $values['password']; $customer['country'] = 'US'; if($customer['payby'] == 'CARD') { $customer['payinfo'] = preg_replace('/\D/','',$values['cardnum']); $customer['paydate'] = $values['expmonth'] . '/' . $values['expyear']; $customer['payname'] = isset($values['cardname']) ? $values['cardname'] : ($values['first'] . ' ' . $values['last']); $customer['paycvv'] = $values['paycvv']; } /* other paybys not implemented */ dkpr($customer); $response = $freeside->new_customer($customer); dkpr($response); error_log("[new_customer] received response from Freeside: $response"); $error = $response['error']; if ( $error ) { drupal_set_message(t("Signup error: $error"), 'error'); $form_state['redirect'] = FALSE; } else { drupal_set_message(t("Signup successful!"),'status'); $form_state['redirect'] = array( variable_get('freeside_redirect_after_signup','/'), //query string would go here //'custnum='.$response['custnum'].'&svcnum='.$response['svcnum'], ); } } ?>