From: mark Date: Tue, 28 Sep 2010 23:12:52 +0000 (+0000) Subject: assorted drupal self-service fixes, RT#9380 X-Git-Tag: TORRUS_1_0_9~260 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=e478bc4589a34d49ec01cfbc9a3be4d972d3c849 assorted drupal self-service fixes, RT#9380 --- diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index 2eefcf8d9..d6f5f1418 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -395,9 +395,14 @@ sub signup_info { my $agent_signup_info = { %$signup_info }; delete $agent_signup_info->{agentnum2part_pkg}; $agent_signup_info->{'agent'} = $session->{'agent'}; - $agent_signup_info; - } else { - $signup_info; + return $agent_signup_info; + } + elsif ( exists $packet->{'keys'} ) { + my @keys = @{ $packet->{'keys'} }; + return { map { $_ => $signup_info->{$_} } @keys }; + } + else { + return $signup_info; } } diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 628462ef4..b3e54778b 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -1787,6 +1787,7 @@ and customer address. Include units.', 'select_hash' => [ 'svc_acct' => 'Account (svc_acct)', 'svc_phone' => 'Phone number (svc_phone)', + 'svc_pbx' => 'PBX (svc_pbx)', ], }, diff --git a/fs_selfservice/drupal/admin.inc b/fs_selfservice/drupal/admin.inc index 45d83d530..1fb792516 100644 --- a/fs_selfservice/drupal/admin.inc +++ b/fs_selfservice/drupal/admin.inc @@ -18,7 +18,11 @@ function freeside_admin_form() { if($hostname) { $freeside = new FreesideSelfService(); - $signup_info = $freeside->signup_info(); // no agent in this request + $signup_info = $freeside->signup_info( + array( + 'keys' => array('agent') + ) + ); // no agent in this request $agents = array(); foreach((array)$signup_info['agent'] as $a) { @@ -38,6 +42,12 @@ function freeside_admin_form() { '#title' => t('Enable debugging'), '#default_value'=>variable_get('freeside_debug',0), ); + + $form['freeside_redirect_after_signup'] = array( + '#type' => 'textfield', + '#title' => t('Success page (URL or Drupal path)'), + '#default_value'=>variable_get('freeside_redirect_after_signup','/'), + ); } return system_settings_form($form); diff --git a/fs_selfservice/drupal/signup.inc b/fs_selfservice/drupal/signup.inc index 13ed37999..9e9443a1b 100644 --- a/fs_selfservice/drupal/signup.inc +++ b/fs_selfservice/drupal/signup.inc @@ -7,30 +7,34 @@ function dkpr($var) { /* "debug kpr": Krumo-print $var if debugging is on */ static $debug; if(empty($debug)) $debug = variable_get('freeside_debug',''); - if($debug) kpr($var); + if($debug) { + kpr($var); + } } -function signup_info($packet) { +function signup_info($keys) { /* local cache, because transporting the entire signup_info through XML-RPC is incredibly slow. If you change the config, you can flush the local cache with the "Clear cached data" button on the Drupal "Performance" menu. */ - if(1) { // change to 0 to disable local cache - $cid = 'FS_signup'.serialize($packet); - $info = cache_get($cid); - if($info) { - return($info->data); - } - else { - $freeside = new FreesideSelfService(); - $info = $freeside->signup_info($packet); - cache_set($cid, $info, 'cache', CACHE_TEMPORARY); - return($info); - } + $cid = 'FS_signup_info'; + $info = cache_get($cid); + if($info) { + return($info->data); } else { - $freeside = new FreesideSelfService(); - return $freeside->signup_info($packet); + $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); } } @@ -44,6 +48,7 @@ function subextract($array, $key) { } function freeside_signup_form($form_state) { + dkpr($form_state); $agentnum = variable_get('freeside_agentnum',''); if( !$agentnum || !(variable_get('freeside_hostname','')) ) { @@ -52,12 +57,17 @@ function freeside_signup_form($form_state) { } $freeside = new FreesideSelfService(); - $packet = array( - 'agentnum' => $agentnum, - 'promo_code' => '', - 'reg_code' => '', + $keys = array( + // all the signup_info that we need + 'part_referral', + 'refnum', + 'emailinvoiceonly', + 'payby', + 'payby_longname', + 'part_pkg', + 'default_pkgpart', ); - $signup_info = signup_info($packet); + $signup_info = signup_info($keys); dkpr($signup_info); $form = array(); @@ -249,6 +259,7 @@ function freeside_signup_form($form_state) { '#type' => 'password_confirm', '#size' => 20, '#required'=>1, + '#process'=> array('freeside_expand_password_confirm'), ), ); $form['package']['pkgpart']['#default_value'] = $signup_info['default_pkgpart']; @@ -260,6 +271,14 @@ function freeside_signup_form($form_state) { 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']; @@ -278,6 +297,7 @@ function freeside_signup_form_submit($form, &$form_state) { 'night', 'fax', 'payby', + 'refnum', 'invoicing_list', 'pkgpart', 'username' @@ -306,12 +326,14 @@ function freeside_signup_form_submit($form, &$form_state) { 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'] = variable_get('freeside_redirect_after_signup','/'); } }