From 32db3ad86bcf04e4f34705a396b718061d333f20 Mon Sep 17 00:00:00 2001 From: jeff Date: Tue, 10 Mar 2009 16:14:11 +0000 Subject: merge webpay support in with autoselection of old realtime_bop and realtime_refund_bop --- fs_selfservice/FS-SelfService/SelfService.pm | 2 + fs_selfservice/FS-SelfService/cgi/change_pay.html | 3 +- .../cgi/make_thirdparty_payment.html | 38 +++++ fs_selfservice/FS-SelfService/cgi/myaccount.html | 6 +- .../FS-SelfService/cgi/myaccount_menu.html | 36 ++++- fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 11 +- fs_selfservice/FS-SelfService/cgi/signup.cgi | 97 +++++++++++- fs_selfservice/FS-SelfService/cgi/signup.html | 2 +- fs_selfservice/FS-SelfService/cgi/verify.cgi | 175 +++++++++++++++++++++ 9 files changed, 353 insertions(+), 17 deletions(-) create mode 100755 fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html create mode 100755 fs_selfservice/FS-SelfService/cgi/verify.cgi (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index 580ca7334..3ede27cd9 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -39,6 +39,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'process_payment_order_pkg' => 'MyAccount/process_payment_order_pkg', 'process_payment_order_renew' => 'MyAccount/process_payment_order_renew', 'process_prepay' => 'MyAccount/process_prepay', + 'realtime_collect' => 'MyAccount/realtime_collect', 'list_pkgs' => 'MyAccount/list_pkgs', #add to ss (added?) 'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?) 'list_svc_usage' => 'MyAccount/list_svc_usage', @@ -58,6 +59,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'signup_info' => 'Signup/signup_info', 'domain_select_hash' => 'Signup/domain_select_hash', # expose? 'new_customer' => 'Signup/new_customer', + 'capture_payment' => 'Signup/capture_payment', 'agent_login' => 'Agent/agent_login', 'agent_logout' => 'Agent/agent_logout', 'agent_info' => 'Agent/agent_info', diff --git a/fs_selfservice/FS-SelfService/cgi/change_pay.html b/fs_selfservice/FS-SelfService/cgi/change_pay.html index 2bea9550b..7283cb850 100644 --- a/fs_selfservice/FS-SelfService/cgi/change_pay.html +++ b/fs_selfservice/FS-SelfService/cgi/change_pay.html @@ -51,10 +51,11 @@ 'LECB' => qq/Phone Bill Billing/, 'BILL' => qq/Billing/, 'COMP' => qq/Complimentary/, + 'PREP' => qq/Prepaid Card/, 'PREPAY' => qq/Prepaid Card/, ); tie my %options, 'Tie::IxHash', (); - foreach my $payby_option ( @paybys ) { + foreach my $payby_option ( grep { exists( $payby_index{$_} ) } @paybys ) { $options{$payby_option} = $payby_index{$payby_option}; } $options{$payby} = $payby_index{$payby} diff --git a/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html new file mode 100755 index 000000000..042b8b37c --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html @@ -0,0 +1,38 @@ +My Account +MyAccount

+ + + + + + +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> + +Pay now

+ +<%= if ( $error ) { + $OUT .= qq!$error

!; +}else{ + $OUT .= <
+ Your transaction reference number is $reference

+
+EOF + + my %itemhash = @collectitems; + foreach my $input (keys %itemhash) { + $OUT .= qq!!; + } + + $OUT .= qq!!; + $OUT .= qq!
!; +} +%> + + diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount.html b/fs_selfservice/FS-SelfService/cgi/myaccount.html index cb5ed352e..c9ca0c5f0 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount.html @@ -8,7 +8,11 @@ Hello <%= $name %>!

<%= $small_custview %>
<%= if ( $balance > 0 ) { - $OUT .= qq! Make a payment

!; + if (scalar(grep $_, @hide_payment_field)) { + $OUT .= qq! Make a payment

!; + } else { + $OUT .= qq! Make a payment

!; + } } %> <%= if ( @open_invoices ) { diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html index ec5a8fa42..cc9f255ce 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html @@ -18,14 +18,34 @@ my @menu = ( if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eventually per-pkg or something really fancy - push @menu, ( - { title=>'Recharge my account with a credit card', - url=>'make_payment', indent=>2 }, - { title=>'Recharge my account with a check', - url=>'make_ach_payment', indent=>2 }, - { title=>'Recharge my account with a prepaid card', - url=>'recharge_prepay', indent=>2 }, - ); + #XXXFIXME still a bit sloppy for multi-gateway of differing namespace + my $i = 0; + while($i < scalar(@cust_paybys)) { last if $cust_paybys[$i] =~ /^CARD/; $i++ } + if ( $cust_paybys[$i] =~ /^CARD/ ) { + push @menu, { title => 'Recharge my account with a credit card', + url => $hide_payment_fields[$i] + ? 'make_thirdparty_payment&payby_method=CC' + : 'make_payment', + indent => 2, + } + } + + $i = 0; + while($i < scalar(@cust_paybys)) { last if $cust_paybys[$i] =~ /^CHEK/; $i++ } + if ( $cust_paybys[$i] =~ /^CHEK/ ) { + push @menu, { title => 'Recharge my account with a check', + url => $hide_payment_field[$i] + ? 'make_thirdparty_payment&payby_method=ECHECK' + : 'make_ach_payment', + indent => 2, + } + } + + push @menu, { title => 'Recharge my account with a prepaid card', + url => 'recharge_prepay', + indent => 2, + } + if grep(/^PREP/, @cust_paybys); } diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 865b5cecd..bb3db12c6 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -10,7 +10,7 @@ use HTML::Entities; use Date::Format; use Number::Format 1.50; use FS::SelfService qw( login_info login customer_info edit_info invoice - payment_info process_payment + payment_info process_payment realtime_collect process_prepay list_pkgs order_pkg signup_info order_recharge part_svc_info provision_acct provision_external @@ -72,7 +72,7 @@ $session_id = $cgi->param('session'); #order|pw_list XXX ??? $cgi->param('action') =~ - /^(myaccount|view_invoice|make_payment|make_ach_payment|payment_results|ach_payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|change_pay|process_change_bill|process_change_ship|process_change_pay|customer_order_pkg|process_order_pkg|customer_change_pkg|process_change_pkg|process_order_recharge|provision|provision_svc|process_svc_acct|process_svc_external|delete_svc|view_usage|view_usage_details|view_support_details|change_password|process_change_password)$/ + /^(myaccount|view_invoice|make_payment|make_ach_payment|make_thirdparty_payment|payment_results|ach_payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|change_pay|process_change_bill|process_change_ship|process_change_pay|customer_order_pkg|process_order_pkg|customer_change_pkg|process_change_pkg|process_order_recharge|provision|provision_svc|process_svc_acct|process_svc_external|delete_svc|view_usage|view_usage_details|view_support_details|change_password|process_change_password)$/ or die "unknown action ". $cgi->param('action'); my $action = $1; @@ -98,6 +98,7 @@ warn "processing template $action\n" do_template($action, { 'session_id' => $session_id, 'action' => $action, #so the menu knows what tab we're on... + %{ payment_info( 'session_id' => $session_id ) }, # cust_paybys for the menu %{$result} }); @@ -472,6 +473,12 @@ sub ach_payment_results { } +sub make_thirdparty_payment { + $cgi->param('payby_method') =~ /^(CC|ECHECK)$/ + or die "illegal payby method"; + realtime_collect( 'session_id' => $session_id, 'method' => $1 ); +} + sub recharge_prepay { customer_info( 'session_id' => $session_id ); } diff --git a/fs_selfservice/FS-SelfService/cgi/signup.cgi b/fs_selfservice/FS-SelfService/cgi/signup.cgi index 47857f0a7..12452e686 100755 --- a/fs_selfservice/FS-SelfService/cgi/signup.cgi +++ b/fs_selfservice/FS-SelfService/cgi/signup.cgi @@ -8,11 +8,12 @@ use vars qw( @payby $cgi $init_data $ieak_file $ieak_template $signup_html $signup_template $success_html $success_template + $collect_html $collect_template $decline_html $decline_template ); use subs qw( print_form print_okay print_decline - success_default decline_default + success_default collect_default decline_default ); use CGI; #use CGI::Carp qw(fatalsToBrowser); @@ -35,6 +36,9 @@ $signup_html = -e 'signup.html' $success_html = -e 'success.html' ? 'success.html' : '/usr/local/freeside/success.html'; +$collect_html = -e 'collect.html' + ? 'collect.html' + : '/usr/local/freeside/collect.html'; $decline_html = -e 'decline.html' ? 'decline.html' : '/usr/local/freeside/decline.html'; @@ -97,6 +101,24 @@ if ( -e $success_html ) { or die $Text::Template::ERROR; } +if ( -e $collect_html ) { + my $collect_txt = Text::Template::_load_text($collect_html) + or die $Text::Template::ERROR; + $collect_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $collect_txt = $1; + $collect_template = new Text::Template ( TYPE => 'STRING', + SOURCE => $collect_txt, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} else { + $collect_template = new Text::Template ( TYPE => 'STRING', + SOURCE => &collect_default, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} + if ( -e $decline_html ) { my $decline_txt = Text::Template::_load_text($decline_html) or die $Text::Template::ERROR; @@ -122,9 +144,10 @@ $init_data = signup_info( 'agentnum' => $agentnum, 'reg_code' => uc(scalar($cgi->param('reg_code'))), ); -if ( ( defined($cgi->param('magic')) && $cgi->param('magic') eq 'process' ) - || ( defined($cgi->param('action')) && $cgi->param('action') eq 'process_signup' ) - ) { +my $magic = $cgi->param('magic') || ''; +my $action = $cgi->param('action') || ''; + +if ( $magic eq 'process' || $action eq 'process_signup' ) { $error = ''; @@ -218,6 +241,10 @@ if ( ( defined($cgi->param('magic')) && $cgi->param('magic') eq 'process' ) if ( $error eq '_decline' ) { print_decline(); + } elsif ( $error eq '_collect' ) { + map { $cgi->param($_, $rv->{$_}) } + qw( popup_url reference collectitems amount ); + print_collect(); } elsif ( $error ) { #fudge the snarf info no strict 'refs'; @@ -230,6 +257,16 @@ if ( ( defined($cgi->param('magic')) && $cgi->param('magic') eq 'process' ) ); } +} elsif ( $magic eq 'success' || $action eq 'success' ) { + + $cgi->param('username', 'username'); #hmmm temp kludge + $cgi->param('_password', 'password'); + print_okay( map { /^([\w ]+)$/ ? ( $_ => $1 ) : () } $cgi->param ); #hmmm + +} elsif ( $magic eq 'decline' || $action eq 'decline' ) { + + print_decline(); + } else { $error = ''; print_form; @@ -258,6 +295,27 @@ sub print_form { ); } +sub print_collect { + + $error = "Error: $error" if $error; + + my $r = { + $cgi->Vars, + %{$init_data}, + 'error' => $error, + }; + + $r->{pkgpart} ||= $r->{default_pkgpart}; + + $r->{referral_custnum} = $r->{'ref'}; + $r->{self_url} = $cgi->self_url; + + print $cgi->header( '-expires' => 'now' ), + $collect_template->fill_in( PACKAGE => 'FS::SelfService::_signupcgi', + HASH => $r + ); +} + sub print_decline { print $cgi->header( '-expires' => 'now' ), $decline_template->fill_in(); @@ -369,6 +427,37 @@ Package: <%= $pkg %>
END } +sub collect_default { #html to use if there is a collect phase + <<'END'; +Pay now +Pay now

+ + + + + + +You are about to contact our payment processor to pay <%= $amount %> for +<%= $pkg %>.

+Your transaction reference number is <%= $reference %>

+
+<%= + my %itemhash = @collectitems; + foreach my $input (keys %itemhash) { + $OUT .= qq!!; + } +%> + +
+ +END +} + sub decline_default { #html to use if there is a decline <<'END'; Processing error diff --git a/fs_selfservice/FS-SelfService/cgi/signup.html b/fs_selfservice/FS-SelfService/cgi/signup.html index 1b97121c6..ae7b2226a 100755 --- a/fs_selfservice/FS-SelfService/cgi/signup.html +++ b/fs_selfservice/FS-SelfService/cgi/signup.html @@ -245,7 +245,7 @@ HTML::Widgets::SelectLayers->new( form_name => 'dummy', html_between => '', form_action => 'dummy.cgi', - layer_callback => sub { my $layer = shift; return $paybychecked{$layer}. ''; }, + layer_callback => sub { my $layer = shift; return ( shift @hide_payment_fields ? '' : $paybychecked{$layer} ) . ''; }, )->html; diff --git a/fs_selfservice/FS-SelfService/cgi/verify.cgi b/fs_selfservice/FS-SelfService/cgi/verify.cgi new file mode 100755 index 000000000..0f8bfccc8 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/verify.cgi @@ -0,0 +1,175 @@ +#!/usr/bin/perl -T +#!/usr/bin/perl -Tw + +use strict; +use vars qw( $cgi $self_url $error + $verify_html $verify_template + $success_html $success_template + $decline_html $decline_template + ); + +use subs qw( print_verify print_okay print_decline + verify_default success_default decline_default + ); +use CGI; +use Text::Template; +use FS::SelfService qw( capture_payment ); + +$verify_html = -e 'verify.html' + ? 'verify.html' + : '/usr/local/freeside/verify.html'; +$success_html = -e 'verify_success.html' + ? 'success.html' + : '/usr/local/freeside/success.html'; +$decline_html = -e 'verify_decline.html' + ? 'decline.html' + : '/usr/local/freeside/decline.html'; + + +if ( -e $verify_html ) { + my $verify_txt = Text::Template::_load_text($verify_html) + or die $Text::Template::ERROR; + $verify_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $verify_txt = $1; + $verify_template = new Text::Template ( TYPE => 'STRING', + SOURCE => $verify_txt, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} else { + $verify_template = new Text::Template ( TYPE => 'STRING', + SOURCE => &verify_default, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} + +if ( -e $success_html ) { + my $success_txt = Text::Template::_load_text($success_html) + or die $Text::Template::ERROR; + $success_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $success_txt = $1; + $success_template = new Text::Template ( TYPE => 'STRING', + SOURCE => $success_txt, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} else { + $success_template = new Text::Template ( TYPE => 'STRING', + SOURCE => &success_default, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} + +if ( -e $decline_html ) { + my $decline_txt = Text::Template::_load_text($decline_html) + or die $Text::Template::ERROR; + $decline_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $decline_txt = $1; + $decline_template = new Text::Template ( TYPE => 'STRING', + SOURCE => $decline_txt, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} else { + $decline_template = new Text::Template ( TYPE => 'STRING', + SOURCE => &decline_default, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} + +$cgi = new CGI; + +my $rv = capture_payment( + data => { map { $_ => scalar($cgi->param($_)) } $cgi->param }, + url => $cgi->self_url, +); + +$error = $rv->{error}; + +if ( $error eq '_decline' ) { + print_decline(); +} elsif ( $error ) { + print_verify(); +} else { + print_okay(%$rv); +} + + +sub print_verify { + + $error = "Error: $error" if $error; + + my $r = { $cgi->Vars, 'error' => $error }; + + $r->{self_url} = $cgi->self_url; + + print $cgi->header( '-expires' => 'now' ), + $verify_template->fill_in( PACKAGE => 'FS::SelfService::_signupcgi', + HASH => $r + ); +} + +sub print_decline { + print $cgi->header( '-expires' => 'now' ), + $decline_template->fill_in(); +} + +sub print_okay { + my %param = @_; + + my @success_url = split '/', $cgi->url(-path); + pop @success_url; + + my $success_url = join '/', @success_url; + if ($param{session_id}) { + my $session_id = lc($param{session_id}); + $success_url .= "/selfservice.cgi?action=myaccount&session=$session_id"; + } else { + $success_url .= '/signup.cgi?action=success'; + } + + print $cgi->header( '-expires' => 'now' ), + $success_template->fill_in( HASH => { success_url => $success_url } ); +} + +sub success_default { #html to use if you don't specify a success file + <<'END'; +Signup successful +Signup successful

+Thanks for signing up! +

+ + +END +} + +sub verify_default { #html to use for verification response + <<'END'; +Processing error +Processing error

+There has been an error processing your account. Please contact customer +support. + +END +} + +sub decline_default { #html to use if there is a decline + <<'END'; +Processing error +Processing error

+There has been an error processing your account. Please contact customer +support. + +END +} + +# subs for the templates... + +package FS::SelfService::_signupcgi; +use HTML::Entities; + -- cgit v1.2.1 From 106bc3bf631b49daafa890bd092a3f8c5084adb3 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 17 Mar 2009 20:41:06 +0000 Subject: add SG stuff --- fs_selfservice/FS-SelfService/SelfService.pm | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index 3ede27cd9..fda3e8596 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -37,6 +37,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'payment_info' => 'MyAccount/payment_info', 'process_payment' => 'MyAccount/process_payment', 'process_payment_order_pkg' => 'MyAccount/process_payment_order_pkg', + 'process_payment_change_pkg' => 'MyAccount/process_payment_change_pkg', 'process_payment_order_renew' => 'MyAccount/process_payment_order_renew', 'process_prepay' => 'MyAccount/process_prepay', 'realtime_collect' => 'MyAccount/realtime_collect', @@ -68,6 +69,16 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'call_time' => 'PrepaidPhone/call_time', 'call_time_nanpa' => 'PrepaidPhone/call_time_nanpa', 'phonenum_balance' => 'PrepaidPhone/phonenum_balance', + #sg + 'decompify_pkgs' => 'SGNG/decompify_pkgs', + 'previous_payment_info' => 'SGNG/previous_payment_info', + 'previous_process_payment' => 'SGNG/previous_process_payment', + 'previous_process_payment_order_pkg' + => 'SGNG/previous_process_payment_order_pkg', + 'previous_process_payment_change_pkg' + => 'SGNG/previous_process_payment_change_pkg', + 'previous_process_payment_order_renew' + => 'SGNG/previous_process_payment_order_renew', ); @EXPORT_OK = ( keys(%autoload), @@ -570,6 +581,16 @@ as parameter with the keys of both methods. Returns a hash reference with a single key, B, empty on success, or an error message on errors. +=item process_payment_change_pkg + +Combines the B and B functions in one step. If the +payment processes sucessfully, the package is ordered. Takes a hash reference +as parameter with the keys of both methods. + +Returns a hash reference with a single key, B, empty on success, or an +error message on errors. + + =item process_payment_order_renew Combines the B and B functions in one step. If @@ -851,6 +872,31 @@ Returns a hash reference with a single key, B, empty on success, or an error message on errors. The special error '_decline' is returned for declined transactions. +=item change_pkg + +Changes a package for this customer. + +Takes a hash reference as parameter with the following keys: + +=over 4 + +=item session_id + +Session identifier + +=item pkgnum + +Existing customer package. + +=item pkgpart + +New package to order (see L). + +=back + +Returns a hash reference with a single key, B, empty on success, or an +error message on errors. + =item renew_info Provides useful info for early renewals. -- cgit v1.2.1 From c72e127acc79a61703223e6c8b504abd234ca8b3 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 17 Mar 2009 21:38:39 +0000 Subject: add payment_info_renew_info method to ClientAPI/MyAccount and SG-equivalent previous_payment_info_renew_info to ClientAPI/SGNG --- fs_selfservice/FS-SelfService/SelfService.pm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index fda3e8596..b4b9ecf29 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -944,6 +944,20 @@ Specified as a integer UNIX timestamp. Renewal date as a human-readable string. (Convenience for display; subject to change, so best not to parse for the date.) +=item pkgnum + +Package that will be renewed. + +=item expire_date + +Expiration date of the package that will be renewed. + +=item expire_date_pretty + +Expiration date of the package that will be renewed, as a human-readable +string. (Convenience for display; subject to change, so best not to parse for +the date.) + =back =item order_renew -- cgit v1.2.1 From e61679ab66b5e1e2db39791117440d7dfce41045 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 17 Mar 2009 22:02:36 +0000 Subject: add payment_info_renew_info method to ClientAPI/MyAccount and SG-equivalent previous_payment_info_renew_info to ClientAPI/SGNG --- fs_selfservice/FS-SelfService/SelfService.pm | 3 +++ 1 file changed, 3 insertions(+) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index b4b9ecf29..fef211580 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -35,6 +35,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'list_invoices' => 'MyAccount/list_invoices', #? 'cancel' => 'MyAccount/cancel', #add to ss cgi! 'payment_info' => 'MyAccount/payment_info', + 'payment_info_renew_info' => 'MyAccount/payment_info_renew_info', 'process_payment' => 'MyAccount/process_payment', 'process_payment_order_pkg' => 'MyAccount/process_payment_order_pkg', 'process_payment_change_pkg' => 'MyAccount/process_payment_change_pkg', @@ -72,6 +73,8 @@ $socket .= '.'.$tag if defined $tag && length($tag); #sg 'decompify_pkgs' => 'SGNG/decompify_pkgs', 'previous_payment_info' => 'SGNG/previous_payment_info', + 'previous_payment_info_renew_info' + => 'SGNG/previous_payment_info_renew_info', 'previous_process_payment' => 'SGNG/previous_process_payment', 'previous_process_payment_order_pkg' => 'SGNG/previous_process_payment_order_pkg', -- cgit v1.2.1 From 4ebee65fbbd3855b3f3d3cd5c8805a615d7de957 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 28 Apr 2009 22:38:42 +0000 Subject: UI --- fs_selfservice/FS-SelfService/cgi/bill.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/cgi/bill.html b/fs_selfservice/FS-SelfService/cgi/bill.html index 1b5902740..a3884e0f2 100644 --- a/fs_selfservice/FS-SelfService/cgi/bill.html +++ b/fs_selfservice/FS-SelfService/cgi/bill.html @@ -5,10 +5,10 @@ Attention + Postal mail invoice > - Postal mail invoice Email address(es) -- cgit v1.2.1 From aab3bdd971c21f6d422b7708ecf8ba7cb5ec0fea Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 18 May 2009 09:55:30 +0000 Subject: basic CDR viewing from self-service, RT#4018 --- fs_selfservice/FS-SelfService/SelfService.pm | 1 + fs_selfservice/FS-SelfService/cgi/header.html | 9 +++ fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 16 ++++- .../FS-SelfService/cgi/view_cdr_details.html | 54 +++++++++++++++++ fs_selfservice/FS-SelfService/cgi/view_usage.html | 68 +++++++++++++++------- 5 files changed, 125 insertions(+), 23 deletions(-) create mode 100644 fs_selfservice/FS-SelfService/cgi/header.html create mode 100644 fs_selfservice/FS-SelfService/cgi/view_cdr_details.html (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index fef211580..47f312ac0 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -45,6 +45,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'list_pkgs' => 'MyAccount/list_pkgs', #add to ss (added?) 'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?) 'list_svc_usage' => 'MyAccount/list_svc_usage', + 'list_cdr_usage' => 'MyAccount/list_cdr_usage', 'list_support_usage' => 'MyAccount/list_support_usage', 'order_pkg' => 'MyAccount/order_pkg', #add to ss cgi! 'change_pkg' => 'MyAccount/change_pkg', diff --git a/fs_selfservice/FS-SelfService/cgi/header.html b/fs_selfservice/FS-SelfService/cgi/header.html new file mode 100644 index 000000000..cf8fd2bd9 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/header.html @@ -0,0 +1,9 @@ + + + MyAccount + + + MyAccount +

+ <%= include('myaccount_menu') %> + diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index bb3db12c6..ecf2553a3 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -15,7 +15,8 @@ use FS::SelfService qw( login_info login customer_info edit_info invoice list_pkgs order_pkg signup_info order_recharge part_svc_info provision_acct provision_external unprovision_svc change_pkg domainselector - list_svcs list_svc_usage list_support_usage + list_svcs + list_svc_usage list_cdr_usage list_support_usage myaccount_passwd ); @@ -72,7 +73,7 @@ $session_id = $cgi->param('session'); #order|pw_list XXX ??? $cgi->param('action') =~ - /^(myaccount|view_invoice|make_payment|make_ach_payment|make_thirdparty_payment|payment_results|ach_payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|change_pay|process_change_bill|process_change_ship|process_change_pay|customer_order_pkg|process_order_pkg|customer_change_pkg|process_change_pkg|process_order_recharge|provision|provision_svc|process_svc_acct|process_svc_external|delete_svc|view_usage|view_usage_details|view_support_details|change_password|process_change_password)$/ + /^(myaccount|view_invoice|make_payment|make_ach_payment|make_thirdparty_payment|payment_results|ach_payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|change_pay|process_change_bill|process_change_ship|process_change_pay|customer_order_pkg|process_order_pkg|customer_change_pkg|process_change_pkg|process_order_recharge|provision|provision_svc|process_svc_acct|process_svc_external|delete_svc|view_usage|view_usage_details|view_cdr_details|view_support_details|change_password|process_change_password)$/ or die "unknown action ". $cgi->param('action'); my $action = $1; @@ -564,7 +565,7 @@ sub delete_svc { sub view_usage { list_svcs( 'session_id' => $session_id, - 'svcdb' => 'svc_acct', + 'svcdb' => [ 'svc_acct', 'svc_phone' ], 'ncancelled' => 1, ); } @@ -578,6 +579,15 @@ sub view_usage_details { ); } +sub view_cdr_details { + list_cdr_usage( + 'session_id' => $session_id, + 'svcnum' => $cgi->param('svcnum'), + 'beginning' => $cgi->param('beginning') || '', + 'ending' => $cgi->param('ending') || '', + ); +} + sub view_support_details { list_support_usage( 'session_id' => $session_id, diff --git a/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html b/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html new file mode 100644 index 000000000..32bd632b4 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html @@ -0,0 +1,54 @@ +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('header') %> + +Call usage for +<%= Date::Format::time2str('%b %o %Y', $beginning) %> - +<%= Date::Format::time2str('%b %o %Y', $ending) %> +

+ +<%= if ( $error ) { + $OUT .= qq!$error

!; +} ''; %> + + + + + + +
+<%= if ($previous < $beginning) { + $OUT .= qq!Previous period!; + }else{ + ''; + } %> + +<%= if ($next > $ending) { + $OUT .= qq!Next period!; + }else{ + ''; + }%> +
+ + +<%= foreach my $header (@header) { + $OUT .= qq(); + } +%> + +<%= my $total = 0; + my $utotal = 0; + my $dtotal = 0; + foreach my $usage ( @usage ) { + $OUT .= ''; + $OUT .= qq() foreach @{$usage}; + $OUT .= ''; + } +%> + +
$header
$_
+
+ + +<%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage.html b/fs_selfservice/FS-SelfService/cgi/view_usage.html index b78f9975b..b492102ce 100644 --- a/fs_selfservice/FS-SelfService/cgi/view_usage.html +++ b/fs_selfservice/FS-SelfService/cgi/view_usage.html @@ -1,24 +1,30 @@ -MyAccount -MyAccount

-<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Service usage

+<%= $url = "$selfurl?session=$session_id;action="; + @svc_acct = grep { $_->{svcdb} eq 'svc_acct' } @svcs; + @svc_phone = grep { $_->{svcdb} eq 'svc_phone' } @svcs; + ''; +%> +<%= include('header') %> <%= if ( $error ) { $OUT .= qq!$error

!; } ''; %> - - - - - - - - -<%= foreach my $svc ( @svcs ) { +<%= if ( @svc_acct ) { + $OUT.= 'Account usage

+
AccountTime remainingUpload remainingDownload remainingTotal remaining
+ + + + + + + '; + } else { + $OUT .= ''; + } +%> + +<%= foreach my $svc ( @svc_acct ) { my $link = "${url}view_usage_details;". "svcnum=$svc->{'svcnum'};beginning=0;ending=0"; $OUT .= ''; } - } %> + } +%> -
AccountTime remainingUpload remainingDownload remainingTotal remaining
'; @@ -48,11 +54,33 @@ $OUT .= $svc->{'recharge_totalbytes'} if $svc->{'recharge_totalbytes'}; $OUT .= '
-
+<%= scalar(@svc_acct) ? '

' : '' %> - +<%= if ( @svc_phone ) { + $OUT.= 'Call usage

+ + + '; #"Account" ? + #what else? + $OUT .= ''; + } else { + $OUT .= ''; + } +%> +<%= foreach my $svc_phone ( @svc_phone ) { + my $link = "${url}view_cdr_details;". + "svcnum=$svc_phone->{'svcnum'};beginning=0;ending=0"; + $OUT .= ''; + } +%> + +<%= scalar(@svc_phone) ? '
Number
'; + $OUT .= qq!!. $svc_phone->{'label'}. ': '. $svc_phone->{'value'}.''; + $OUT .= '


' : '' %> + + <%= include('footer') %> -- cgit v1.2.1 From d6b6f81e383f9d876e67e9704914e887a331012e Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 25 May 2009 01:49:34 +0000 Subject: international self-service payments, RT#1592 --- fs_selfservice/FS-SelfService/SelfService.pm | 55 +++++++++++++++++++++- fs_selfservice/FS-SelfService/cgi/card.html | 50 +++++--------------- .../FS-SelfService/cgi/make_payment.html | 16 +++---- .../FS-SelfService/cgi/misc/counties.cgi | 18 +++++++ fs_selfservice/FS-SelfService/cgi/misc/states.cgi | 18 +++++++ fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 2 +- 6 files changed, 110 insertions(+), 49 deletions(-) create mode 100755 fs_selfservice/FS-SelfService/cgi/misc/counties.cgi create mode 100755 fs_selfservice/FS-SelfService/cgi/misc/states.cgi (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index 47f312ac0..058955037 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -86,8 +86,9 @@ $socket .= '.'.$tag if defined $tag && length($tag); ); @EXPORT_OK = ( keys(%autoload), - qw( regionselector regionselector_hashref - expselect popselector domainselector didselector ) + qw( regionselector regionselector_hashref location_form + expselect popselector domainselector didselector + ) ); $ENV{'PATH'} ='/usr/bin:/usr/ucb:/bin'; @@ -550,6 +551,10 @@ State Zip or postal code +=item country + +Two-letter country code + =item payinfo Card number @@ -1436,6 +1441,52 @@ sub regionselector_hashref { }; } +=item location_form HASHREF | LIST + +Takes as input a hashref or list of key/value pairs with the following keys: + +=over 4 + +=item session_id + +Current customer session_id + +=item no_asterisks + +Omit red asterisks from required fields. + +=item address1_label + +Label for first address line. + +=back + +Returns an HTML fragment for a location form (address, city, state, zip, +country) + +=cut + +sub location_form { + my $param; + if ( ref($_[0]) ) { + $param = shift; + } else { + $param = { @_ }; + } + + my $session_id = delete $param->{'session_id'}; + + my $rv = mason_comp( 'session_id' => $session_id, + 'comp' => '/elements/location.html', + 'args' => [ %$param ], + ); + + #hmm. + $rv->{'error'} || $rv->{'output'}; + +} + + #=item expselect HASHREF | LIST # #Takes as input a hashref or list of key/value pairs with the following keys: diff --git a/fs_selfservice/FS-SelfService/cgi/card.html b/fs_selfservice/FS-SelfService/cgi/card.html index cf6d20d8d..c7db2b398 100644 --- a/fs_selfservice/FS-SelfService/cgi/card.html +++ b/fs_selfservice/FS-SelfService/cgi/card.html @@ -1,11 +1,11 @@ - Card number - + Card number + - + - - - - - - - - - - - + + + +<%= location_form( 'session_id' => $session_id, + 'no_asterisks' => 1, + #'address1_label' => 'Card billing address', + 'address1_label' => 'Card billing address', + ) +%> diff --git a/fs_selfservice/FS-SelfService/cgi/make_payment.html b/fs_selfservice/FS-SelfService/cgi/make_payment.html index a468d998a..da6e67ed2 100644 --- a/fs_selfservice/FS-SelfService/cgi/make_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_payment.html @@ -22,23 +22,23 @@
Exp.Exp.
Exact name on card
Card billing address - -
Address line 2 - -
City - - - - - - - - -
- - State - - Zip - -
-
Exact name on card
- - + - - + - - + <%= include('card') %> - - diff --git a/fs_selfservice/FS-SelfService/cgi/misc/counties.cgi b/fs_selfservice/FS-SelfService/cgi/misc/counties.cgi new file mode 100755 index 000000000..476fe09a4 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/misc/counties.cgi @@ -0,0 +1,18 @@ +#!/usr/bin/perl -w + +use strict; +use CGI; +use FS::SelfService qw( mason_comp ); + +my $cgi = new CGI; + +my $rv = mason_comp( 'comp' => '/misc/counties.cgi', + 'query_string' => $cgi->query_string, #pass CGI params... + ); + +#hmm. +my $output = $rv->{'error'} || $rv->{'output'}; + +print $cgi->header( '-expires' => 'now' ). + $output; + diff --git a/fs_selfservice/FS-SelfService/cgi/misc/states.cgi b/fs_selfservice/FS-SelfService/cgi/misc/states.cgi new file mode 100755 index 000000000..f75f2ae1d --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/misc/states.cgi @@ -0,0 +1,18 @@ +#!/usr/bin/perl -w + +use strict; +use CGI; +use FS::SelfService qw( mason_comp ); + +my $cgi = new CGI; + +my $rv = mason_comp( 'comp' => '/misc/states.cgi', + 'query_string' => $cgi->query_string, #pass CGI params... + ); + +#hmm. +my $output = $rv->{'error'} || $rv->{'output'}; + +print $cgi->header( '-expires' => 'now' ). + $output; + diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index ecf2553a3..4c7b1d86a 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -664,7 +664,7 @@ package FS::SelfService::_selfservicecgi; #use FS::SelfService qw(regionselector expselect popselector); use HTML::Entities; -use FS::SelfService qw(regionselector popselector domainselector); +use FS::SelfService qw(regionselector popselector domainselector location_form); #false laziness w/agent.cgi sub include { -- cgit v1.2.1 From 9e8452ef043446036fa27d3cf668ebf25bade7b8 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 25 May 2009 03:59:22 +0000 Subject: international self-service payments, RT#1592 --- fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 4c7b1d86a..148fc4ddc 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -366,12 +366,15 @@ sub payment_results { $cgi->param('city') =~ /^(.{0,80})$/ or die "illegal city"; my $city = $1; - $cgi->param('state') =~ /^(.{2})$/ or die "illegal state"; + $cgi->param('state') =~ /^(.{80})$/ or die "illegal state"; my $state = $1; $cgi->param('zip') =~ /^(.{0,10})$/ or die "illegal zip"; my $zip = $1; + $cgi->param('country') =~ /^(.{0,2})$/ or die "illegal country"; + my $country = $1; + my $save = 0; $save = 1 if $cgi->param('save'); @@ -395,6 +398,7 @@ sub payment_results { 'city' => $city, 'state' => $state, 'zip' => $zip, + 'country' => $country, 'save' => $save, 'auto' => $auto, 'paybatch' => $paybatch, -- cgit v1.2.1 From 12ec6818dfd015042f516821c35ac68846b6baa0 Mon Sep 17 00:00:00 2001 From: jeff Date: Tue, 26 May 2009 12:32:12 +0000 Subject: include overlib in selfservice --- .../FS-SelfService/cgi/iframecontentmws.js | 59 ++ fs_selfservice/FS-SelfService/cgi/overlibmws.js | 620 +++++++++++++++++++++ .../FS-SelfService/cgi/overlibmws_crossframe.js | 53 ++ .../FS-SelfService/cgi/overlibmws_draggable.js | 85 +++ .../FS-SelfService/cgi/overlibmws_iframe.js | 93 ++++ 5 files changed, 910 insertions(+) create mode 100644 fs_selfservice/FS-SelfService/cgi/iframecontentmws.js create mode 100644 fs_selfservice/FS-SelfService/cgi/overlibmws.js create mode 100644 fs_selfservice/FS-SelfService/cgi/overlibmws_crossframe.js create mode 100644 fs_selfservice/FS-SelfService/cgi/overlibmws_draggable.js create mode 100644 fs_selfservice/FS-SelfService/cgi/overlibmws_iframe.js (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/cgi/iframecontentmws.js b/fs_selfservice/FS-SelfService/cgi/iframecontentmws.js new file mode 100644 index 000000000..f2a91d21b --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/iframecontentmws.js @@ -0,0 +1,59 @@ +/* + iframecontentmws.js - Foteos Macrides (author and copyright holder) + Initial: October 10, 2004 - Last Revised: January 26, 2008 + Scripts for using HTML documents as iframe content in overlibmws popups. + + See http://www.macridesweb.com/oltest/IFRAME.html + and http://www.macridesweb.com/oltest/AJAX.html#ajaxex3 + for more information. +*/ + +/* + Use as lead argument in overlib or overlb2 calls. Include WRAP and + TEXTPADDING,0 in the call to ensure that the width arg is respected (unless + the CAPTION plus CLOSETEXT widths add up to more than the width arg, in which + case you should increase the width arg). The name arg should be a unique + string for each popup with iframe content in the document. The frameborder + arg should be 1 (browser default if omitted) or 0. The scrolling arg should + be 'auto' (default if omitted), 'yes' or 'no'. +*/ +function OLiframeContent(src, width, height, name, frameborder, scrolling) { + + /* stupid safari iframe location caching... */ + var d = new Date(); + var unique = d.getTime() + '' + Math.floor(1000 * Math.random()); + name = name + '' + unique; + + return (''); +} + +/* + Swap the src if we are iframe content. The name arg should be the same + string as in the OLiframeContent function for the popup. The src arg is + a partial, relative, or complete URL for the document to be swapped in. +*/ +function OLswapIframeSrc(name, src){ + if(parent==self){ + alert(src+'\n\n is only for iframe content'); + return; + } + var o=parent.OLgetRef(name); + if(o)o.src=src; + else alert(src+'\n\n is not available'); +} + +/* + Emulate the Back button if we are iframe content. Use only in documents + which are swapped in by using the OLswapIframeSrc function. +*/ +function OLiframeBack(){ + if(parent==self){ + alert('This feature is only for iframe content'); + return; + } + history.back(); +} diff --git a/fs_selfservice/FS-SelfService/cgi/overlibmws.js b/fs_selfservice/FS-SelfService/cgi/overlibmws.js new file mode 100644 index 000000000..df2bd1db7 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/overlibmws.js @@ -0,0 +1,620 @@ +/* + Do not remove or change this notice. + overlibmws.js core module - Copyright Foteos Macrides 2002-2008. All rights reserved. + Initial: August 18, 2002 - Last Revised: March 22, 2008 + This module is subject to the same terms of usage as for Erik Bosrup's overLIB, + though only a minority of the code and API now correspond with Erik's version. + See the overlibmws Change History and Command Reference via: + + http://www.macridesweb.com/oltest/ + + Published under an open source license: http://www.macridesweb.com/oltest/license.html + Give credit on sites that use overlibmws and submit changes so others can use them as well. + You can get Erik's version via: http://www.bosrup.com/web/overlib/ +*/ + +// PRE-INIT -- Ignore these lines, configuration is below. +var OLloaded=0,OLbubblePI=0,OLcrossframePI=0,OLdebugPI=0,OLdraggablePI=0,OLexclusivePI=0,OLfilterPI=0, +OLfunctionPI=0,OLhidePI=0,OLiframePI=0,OLmodalPI=0,OLovertwoPI=0,OLscrollPI=0,OLshadowPI=0,OLprintPI=0, +pmCnt=1,pMtr=new Array(),OLcmdLine=new Array(),OLrunTime=new Array(),OLv,OLudf,OLrefXY, +OLpct=new Array("83%","67%","83%","100%","117%","150%","200%","267%");if(typeof OLgateOK=='undefined')var OLgateOK=1; +var OLp1or2c='inarray,caparray,caption,closetext,right,left,center,autostatuscap,padx,pady,below,above,vcenter,donothing', +OLp1or2co='nofollow,background,offsetx,offsety,fgcolor,bgcolor,cgcolor,textcolor,capcolor,width,wrap,wrapmax,height,border,' ++'base,status,autostatus,snapx,snapy,fixx,fixy,relx,rely,midx,midy,ref,refc,refp,refx,refy,fgbackground,bgbackground,' ++'cgbackground,fullhtml,capicon,textfont,captionfont,textsize,captionsize,timeout,delay,hauto,vauto,nojustx,nojusty,fgclass,' ++'bgclass,cgclass,capbelow,textpadding,textfontclass,captionpadding,captionfontclass,sticky,noclose,mouseoff,offdelay,' ++'closecolor,closefont,closesize,closeclick,closetitle,closefontclass,decode',OLp1or2o='text,cap,close,hpos,vpos,padxl,' ++'padxr,padyt,padyb',OLp1co='label',OLp1or2=OLp1or2co+','+OLp1or2o,OLp1=OLp1co+','+'frame'; +OLregCmds(OLp1or2c+','+OLp1or2co+','+OLp1co); +function OLud(v){return eval('typeof ol_'+v+'=="undefined"')?1:0;} + +// DEFAULT CONFIGURATION -- See overlibConfig.txt for descriptions +if(OLud('fgcolor'))var ol_fgcolor="#ccccff"; +if(OLud('bgcolor'))var ol_bgcolor="#333399"; +if(OLud('cgcolor'))var ol_cgcolor="#333399"; +if(OLud('textcolor'))var ol_textcolor="#000000"; +if(OLud('capcolor'))var ol_capcolor="#ffffff"; +if(OLud('closecolor'))var ol_closecolor="#eeeeff"; +if(OLud('textfont'))var ol_textfont="Verdana,Arial,Helvetica"; +if(OLud('captionfont'))var ol_captionfont="Verdana,Arial,Helvetica"; +if(OLud('closefont'))var ol_closefont="Verdana,Arial,Helvetica"; +if(OLud('textsize'))var ol_textsize=1; +if(OLud('captionsize'))var ol_captionsize=1; +if(OLud('closesize'))var ol_closesize=1; +if(OLud('fgclass'))var ol_fgclass=""; +if(OLud('bgclass'))var ol_bgclass=""; +if(OLud('cgclass'))var ol_cgclass=""; +if(OLud('textpadding'))var ol_textpadding=2; +if(OLud('textfontclass'))var ol_textfontclass=""; +if(OLud('captionpadding'))var ol_captionpadding=2; +if(OLud('captionfontclass'))var ol_captionfontclass=""; +if(OLud('closefontclass'))var ol_closefontclass=""; +if(OLud('close'))var ol_close="Close"; +if(OLud('closeclick'))var ol_closeclick=0; +if(OLud('closetitle'))var ol_closetitle="Click to Close"; +if(OLud('text'))var ol_text="Default Text"; +if(OLud('cap'))var ol_cap=""; +if(OLud('capbelow'))var ol_capbelow=0; +if(OLud('background'))var ol_background=""; +if(OLud('width'))var ol_width=200; +if(OLud('wrap'))var ol_wrap=0; +if(OLud('wrapmax'))var ol_wrapmax=0; +if(OLud('height'))var ol_height= -1; +if(OLud('border'))var ol_border=1; +if(OLud('base'))var ol_base=0; +if(OLud('offsetx'))var ol_offsetx=10; +if(OLud('offsety'))var ol_offsety=10; +if(OLud('sticky'))var ol_sticky=0; +if(OLud('nofollow'))var ol_nofollow=0; +if(OLud('noclose'))var ol_noclose=0; +if(OLud('mouseoff'))var ol_mouseoff=0; +if(OLud('offdelay'))var ol_offdelay=300; +if(OLud('hpos'))var ol_hpos=RIGHT; +if(OLud('vpos'))var ol_vpos=BELOW; +if(OLud('status'))var ol_status=""; +if(OLud('autostatus'))var ol_autostatus=0; +if(OLud('snapx'))var ol_snapx=0; +if(OLud('snapy'))var ol_snapy=0; +if(OLud('fixx'))var ol_fixx= -1; +if(OLud('fixy'))var ol_fixy= -1; +if(OLud('relx'))var ol_relx=null; +if(OLud('rely'))var ol_rely=null; +if(OLud('midx'))var ol_midx=null; +if(OLud('midy'))var ol_midy=null; +if(OLud('ref'))var ol_ref=""; +if(OLud('refc'))var ol_refc='UL'; +if(OLud('refp'))var ol_refp='UL'; +if(OLud('refx'))var ol_refx=0; +if(OLud('refy'))var ol_refy=0; +if(OLud('fgbackground'))var ol_fgbackground=""; +if(OLud('bgbackground'))var ol_bgbackground=""; +if(OLud('cgbackground'))var ol_cgbackground=""; +if(OLud('padxl'))var ol_padxl=1; +if(OLud('padxr'))var ol_padxr=1; +if(OLud('padyt'))var ol_padyt=1; +if(OLud('padyb'))var ol_padyb=1; +if(OLud('fullhtml'))var ol_fullhtml=0; +if(OLud('capicon'))var ol_capicon=""; +if(OLud('frame'))var ol_frame=self; +if(OLud('timeout'))var ol_timeout=0; +if(OLud('delay'))var ol_delay=0; +if(OLud('hauto'))var ol_hauto=0; +if(OLud('vauto'))var ol_vauto=0; +if(OLud('nojustx'))var ol_nojustx=0; +if(OLud('nojusty'))var ol_nojusty=0; +if(OLud('label'))var ol_label=""; +if(OLud('decode'))var ol_decode=0; +// ARRAY CONFIGURATION - See overlibConfig.txt for descriptions. +if(OLud('texts'))var ol_texts=new Array("Text 0","Text 1"); +if(OLud('caps'))var ol_caps=new Array("Caption 0","Caption 1"); +// END CONFIGURATION -- Don't change anything below, all configuration is above. + +// INIT -- Runtime variables. +var o3_text="",o3_cap="",o3_sticky=0,o3_nofollow=0,o3_background="",o3_noclose=0,o3_mouseoff=0,o3_offdelay=300,o3_hpos=RIGHT, +o3_offsetx=10,o3_offsety=10,o3_fgcolor="",o3_bgcolor="",o3_cgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="", +o3_width=200,o3_wrap=0,o3_wrapmax=0,o3_height= -1,o3_border=1,o3_base=0,o3_status="",o3_autostatus=0,o3_snapx=0,o3_snapy=0, +o3_fixx= -1,o3_fixy= -1,o3_relx=null,o3_rely=null,o3_midx=null,o3_midy=null,o3_ref="",o3_refc='UL',o3_refp='UL',o3_refx=0, +o3_refy=0,o3_fgbackground="",o3_bgbackground="",o3_cgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0, +o3_vpos=BELOW,o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="",o3_closefont="",o3_textsize=1,OLcC=null, +o3_captionsize=1,o3_closesize=1,o3_frame=self,o3_timeout=0,o3_delay=0,o3_hauto=0,o3_vauto=0,o3_nojustx=0,o3_nojusty=0, +o3_close="",o3_closeclick=0,o3_closetitle="",o3_fgclass="",o3_bgclass="",o3_cgclass="",o3_textpadding=2,o3_textfontclass="", +o3_captionpadding=2,o3_captionfontclass="",o3_closefontclass="",o3_capbelow=0,o3_label="",o3_decode=0, +CSSOFF=DONOTHING,CSSCLASS=DONOTHING,over=null,OLdelayid=0,OLtimerid=0,OLshowid=0,OLndt=0,OLfnRef="",OLhover=0,OLx=0,OLy=0, +OLshowingsticky=0,OLallowmove=0,OLoverHTML="",OLover2HTML="",OLifRef="",OLo2Ref="",OLifX=0,OLifY=0, +OLua=(OLv=navigator.userAgent)?OLv.toLowerCase():'', +OLns4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4)?1:0, +OLns6=(document.getElementById)?1:0, +OLie4=(document.all)?1:0, +OLgek=(OLv=OLua.match(/gecko\/(\d{8})/i))?parseInt(OLv[1]):0, +OLmac=(OLua.indexOf('mac')>=0)?1:0, +OLsaf=(OLua.indexOf('safari')>=0)?1:0, +OLkon=(OLua.indexOf('konqueror')>=0)?1:0, +OLkht=(OLsaf||OLkon)?1:0, +OLopr=(OLua.indexOf('opera')>=0)?1:0, +OLop7=(OLopr&&document.createTextNode)?1:0; +if(OLopr){OLns4=OLns6=OLgek=0;OLie4=(OLop7)?1:0;} +var OLieM=((OLie4&&OLmac)&&!(OLkht||OLopr))?1:0, +OLie5=0,OLie55=0;OLie7=0;if(OLie4&&!OLop7){ +if((OLv=OLua.match(/msie (\d\.\d+)\.*/i))&&(OLv=parseFloat(OLv[1]))>=5.0){ +OLie5=1;OLns6=0;if(OLv>=5.5)OLie55=1;if(OLv>=7.0)OLie7=1;}if(OLns6)OLie4=0;} +if(OLns4)window.onresize=function(){location.reload();};var OLchkMh=1,OLdw; +if(OLns4||OLie4||OLns6){OLmh();if(window.addEventListener)window.addEventListener("unload", +OLulCl,false);}else{overlib=nd=cClick=OLpageDefaults=no_overlib;} +function OLulCl(){if(over)cClick();window.removeEventListener("unload",OLulCl,false);} + +/* + PUBLIC FUNCTIONS +*/ +// Loads defaults then args into runtime variables. +function overlib(){ +if(!(OLloaded&&OLgateOK))return;if((OLexclusivePI)&&OLisExclusive(arguments))return true;if(OLchkMh)OLmh(); +if(OLndt&&!OLtimerid)OLndt=0;if(over)cClick();if(parent!=self){if(parent.OLo2Ref){parent.OLeval(parent.OLo2Ref); +parent.OLo2Ref="";}if(parent.OLifRef){parent.OLeval(parent.OLifRef);parent.OLifRef="";}}if(OLo2Ref){eval(OLo2Ref); +OLo2Ref="";}if(OLifRef){eval(OLifRef);OLifRef="";}OLload(OLp1or2);OLload(OLp1);OLfnRef="";OLifX=0;OLifY=0;OLhover=0; +OLsetRunTimeVar();OLparseTokens('o3_',arguments);if(!(over=OLmkLyr()))return false;if(o3_decode)OLdecode();if(OLprintPI) +OLchkPrint();if(OLbubblePI)OLchkForBubbleEffect();if(OLdebugPI)OLsetDebugCanShow();if(OLshadowPI)OLinitShadow(); +if(OLiframePI)OLinitIfs();if(OLfilterPI)OLinitFilterLyr();if(OLexclusivePI&&o3_exclusive&&o3_exclusivestatus!="") +o3_status=o3_exclusivestatus;else if(o3_autostatus==2&&o3_cap!="")o3_status=o3_cap;else if(o3_autostatus==1&&o3_text!="") +o3_status=o3_text;if(!o3_delay){return OLmain();}else{OLdelayid=setTimeout("OLmain()",o3_delay);if(o3_status!=""){ +self.status=o3_status;return true;}else if(!(OLop7&&event&&event.type=='mouseover'))return false;} +} +function OLeval(s){eval(s);} + +// Clears popups if appropriate +function nd(time){ +if(OLloaded&&OLgateOK){if(!((OLexclusivePI)&&OLisExclusive())){if(time&&over&&!o3_delay){ +if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=(OLhover&&o3_frame==self&&!OLcursorOff())?0: +setTimeout("cClick()",(o3_timeout=OLndt=time));}else{if(!OLshowingsticky){OLallowmove=0; +if(over)OLhideObject(over);}}}}return false; +} + +// Close function for stickies +function cClick(){ +if(OLloaded&&OLgateOK){OLhover=0;if(over){if(OLo2Ref){eval(OLo2Ref);OLo2Ref="";}if(OLovertwoPI&&over==over2)cClick2(); +OLhideObject(over);OLshowingsticky=0;OLallowmove=0;}if(OLmodalPI)OLclearModal();}return false; +} + +// Sets page-specific defaults. +function OLpageDefaults(){ +OLparseTokens('ol_',arguments); +} + +// Gets object referenced by its id or name +function OLgetRef(l,d){var r=OLgetRefById(l,d);return (r)?r:OLgetRefByName(l,d);} + +// For unsupported browsers. +function no_overlib(){return false;} + +/* + OVERLIB MAIN FUNCTION SET +*/ +function OLmain(){ +o3_delay=0;if(parent!=self&&o3_frame==parent&&parent.OLscrollPI&&parent.over)parent.OLclearScroll();if(o3_frame==self){ +if(o3_noclose)OLoptMOUSEOFF(0);else if(o3_mouseoff)OLoptMOUSEOFF(1);}if(o3_sticky){OLshowingsticky=1;if(OLfnRef&& +parent!=self&&o3_frame==parent&&parent.overlib){parent.OLifRef=OLfnRef+'cClick()';}}OLdoLyr();OLallowmove=0;if(o3_timeout>0){ +if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("cClick()",o3_timeout);}OLchkRef();OLdisp(o3_status); +if(OLdraggablePI)OLcheckDrag();if(o3_status!="")return true;else if(!(OLop7&&event&&event.type=='mouseover'))return false; +} +function OLchkRef(){ +if(o3_ref){OLrefXY=OLgetRefXY(o3_ref);if(OLrefXY[0]==null&&OLcrossframePI)OLchkIfRef(); +if(OLrefXY[0]==null){o3_ref="";o3_midx=0;o3_midy=0;}} +} + +// Loads o3_ variables +function OLload(c){var i,m=c.split(',');for(i=0;i');d=fd.all[id];}else{d=fd.createElement('div'); +if(d){d.id=id;fd.body.appendChild(d);}}if(!d)return null;if(OLns4)d.zIndex=z;else{var o=d.style;o.position='absolute'; +o.visibility='hidden';o.zIndex=z;}}return d; +} + +// Creates and writes layer content +function OLdoLyr(){ +if(o3_sticky&&OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}if(o3_background==''&&!o3_fullhtml){ +if(o3_fgbackground!='')o3_fgbackground=' background="'+o3_fgbackground+'"'; +if(o3_bgbackground!='')o3_bgbackground=' background="'+o3_bgbackground+'"'; +if(o3_cgbackground!='')o3_cgbackground=' background="'+o3_cgbackground+'"'; +if(o3_fgcolor!='')o3_fgcolor=' bgcolor="'+o3_fgcolor+'"';if(o3_bgcolor!='')o3_bgcolor=' bgcolor="'+o3_bgcolor+'"'; +if(o3_cgcolor!='')o3_cgcolor=' bgcolor="'+o3_cgcolor+'"';if(o3_height>0)o3_height=' height="'+o3_height+'"'; +else o3_height='';}if(!OLns4)OLrepositionTo(over,(OLns6?20:0),0);var lyrHtml=OLdoLGF(); +if(o3_wrap&&!o3_fullhtml){OLlayerWrite(lyrHtml);o3_width=(OLns4?over.clip.width:over.offsetWidth);if(OLie4){ +var w=OLfd().clientWidth;if(o3_width>=w){if(OLop7){if(OLovertwoPI&&over==over2){var z=over2.style.zIndex; +o3_frame.document.body.removeChild(over);over2=OLmkLyr('overDiv2',o3_frame,z);over=over2;}else{ +o3_frame.document.body.removeChild(over);over=OLmkLyr();}}o3_width=w-20;}} +if(o3_wrapmax<1&&o3_frame.innerWidth)o3_wrapmax=o3_frame.innerWidth-40; +if(o3_wrapmax>0&&o3_width>o3_wrapmax)o3_width=o3_wrapmax;o3_wrap=0;lyrHtml=OLdoLGF();}OLlayerWrite(lyrHtml); +o3_width=(OLns4?over.clip.width:over.offsetWidth);if(OLbubblePI)OLgenerateBubble(lyrHtml); +} + +/* + LAYER GENERATION FUNCTIONS +*/ +// Makes simple table without caption +function OLcontentSimple(txt){ +var t=OLbgLGF()+OLfgLGF(txt)+OLbaseLGF();OLsetBackground('');return t; +} + +// Makes table with caption and optional close link +function OLcontentCaption(txt,title,close){ +var closing=(OLprintPI?OLprintCapLGF():''),closeevent='onmouseover',caption,t,cC='javascript:return '+OLfnRef ++(OLovertwoPI&&over==over2?'cClick2();':'cClick();');if(o3_closeclick)closeevent=(o3_closetitle?'title="' ++o3_closetitle+'" ':'')+'onclick';if(o3_capicon!=''&&o3_capicon.indexOf(' ';if(close){closing+='';}caption='
Amount Due + Amount Due
$<%=sprintf("%.2f",$balance)%>
Payment amount + Payment amount
$">
Card type + Card type
+ Remember this information
+ NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }"> Charge future payments to this card automatically ':(OLns4?'><':'')+OLlgfUtil(0,1,'','a',o3_closecolor,o3_closefont,o3_closesize))+close+ +(o3_closefontclass?'':(OLns4?OLlgfUtil(1,1,'','a'):''))+'
':'>')+(o3_captionfontclass?'':OLlgfUtil(0,1,'','div', +o3_capcolor,o3_captionfont,o3_captionsize))+o3_capicon+title+OLlgfUtil(1,1,'','div')+''+closing+'
'; +t=OLbgLGF()+(o3_capbelow?OLfgLGF(txt)+caption:caption+OLfgLGF(txt))+OLbaseLGF();OLsetBackground('');return t; +} + +// For BACKGROUND and FULLHTML commands +function OLcontentBackground(txt,image,hasfullhtml){ +var t;if(hasfullhtml){t=txt;}else{t=''+OLlgfUtil(0,0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+txt+OLlgfUtil(1,0,'','div') ++'';} +OLsetBackground(image);return t; +} + +// LGF utilities +function OLbgLGF(){ +return ''; +} +function OLfgLGF(t){ +return '' ++OLlgfUtil(0,0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+t+(OLprintPI?OLprintFgLGF():'') ++OLlgfUtil(1,0,'','div')+''; +} +function OLlgfUtil(end,stg,tfc,ele,col,fac,siz){ +if(end)return('');else return(tfc?'': +((ele=='a'?'':'<')+(OLns4?(stg?'strong><':'')+'font color="'+col+'" face="'+OLquoteMultiNameFonts(fac)+'" size="' ++siz:(ele=='a'?'':ele)+' style="'+((ele=='div')?OLhL(0):'')+'color:'+col+(stg?';font-weight:bold':'')+';font-family:' ++OLquoteMultiNameFonts(fac)+';font-size:'+siz+';'+(ele=='span'?'text-decoration:underline;':''))+'">')); +} +function OLquoteMultiNameFonts(f){ +var i,v,pM=f.split(',');for(i=0;i0&&!o3_wrap)?('
'):'')+''; +} +function OLwd(a){return(o3_wrap?'':' width="'+(!a?'100%':(a==1?o3_width:(o3_width-o3_padxl-o3_padxr)))+'"');} +function OLhL(s){return(s?' style="width:100%;"':'width:100%;');} + +// Loads image into the div. +function OLsetBackground(i){ +if(i==''){if(OLns4)over.background.src=null;else{if(OLns6)over.style.width='';over.style.backgroundImage='none';}} +else{if(OLns4)over.background.src=i;else{if(OLns6)over.style.width=o3_width+'px';over.style.backgroundImage='url('+i+')';}} +} + +/* + HANDLING FUNCTIONS +*/ +// Displays layer +function OLdisp(s){ +if(OLmodalPI&&!o3_modalscroll)OLchkModal();if(!OLallowmove){if(OLshadowPI)OLdispShadow();if(OLiframePI)OLdispIfs(); +OLplaceLayer();if(OLmodalPI&&o3_modalscroll)OLchkModal();if(OLndt)OLshowObject(over); +else OLshowid=setTimeout("OLshowObject(over)",1);OLallowmove=(o3_sticky||o3_nofollow)?0:1;}OLndt=0;if(s!="")self.status=s; +} + +// Decides placement of layer. +function OLplaceLayer(){ +var snp,X,Y,pgLeft,pgTop,pWd=o3_width,pHt,iWd=100,iHt=100,SB=0,LM=0,CX=0,TM=0,BM=0,CY=0,o=OLfd(), +nsb=(OLgek>=20010505&&!o3_frame.scrollbars.visible)?1:0; +if(!OLkht&&o&&o.clientWidth)iWd=o.clientWidth; +else if(o3_frame.innerWidth){SB=Math.ceil(1.4*(o3_frame.outerWidth-o3_frame.innerWidth)); +if(SB>20)SB=20;iWd=o3_frame.innerWidth;} +pgLeft=(OLie4)?o.scrollLeft:o3_frame.pageXOffset; +if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)SB=CX=5;else +if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){SB+=((o3_shadowx>0)?o3_shadowx:0); +LM=((o3_shadowx<0)?Math.abs(o3_shadowx):0);CX=Math.abs(o3_shadowx);} +if(o3_ref!=""||o3_fixx> -1||o3_relx!=null||o3_midx!=null){ +if(o3_ref!=""){X=OLrefXY[0];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){ +if(o3_refp=='UR'||o3_refp=='LR')X-=5;} +else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){ +if(o3_shadowx<0&&(o3_refp=='UL'||o3_refp=='LL'))X-=o3_shadowx;else +if(o3_shadowx>0&&(o3_refp=='UR'||o3_refp=='LR'))X-=o3_shadowx;} +}else{if(o3_midx!=null){ +X=parseInt(pgLeft+((iWd-pWd-SB-LM)/2)+o3_midx); +}else{if(o3_relx!=null){ +if(o3_relx>=0)X=pgLeft+o3_relx+LM;else X=pgLeft+o3_relx+iWd-pWd-SB; +}else{X=o3_fixx+LM;}}} +}else{ +if(o3_hauto){ +if(o3_hpos==LEFT&&OLx-pgLeft+OLifXiWd/2&&OLx+pWd+o3_offsetx+OLifX>pgLeft+iWd-SB)o3_hpos=LEFT;} +X=(o3_hpos==CENTER)?parseInt(OLx-((pWd+CX)/2)+o3_offsetx): +(o3_hpos==LEFT)?OLx-o3_offsetx-pWd:OLx+o3_offsetx; +if(o3_snapx>1){ +snp=X % o3_snapx; +if(o3_hpos==LEFT){X=X-(o3_snapx+snp);}else{X=X+(o3_snapx-snp);}}X+=OLifX;} +if(!o3_nojustx&&X+pWd>pgLeft+iWd-SB) +X=iWd+pgLeft-pWd-SB;if(!o3_nojustx&&X-LM0)?o3_shadowy:0;CY=Math.abs(o3_shadowy);} +if(o3_ref!=""||o3_fixy> -1||o3_rely!=null||o3_midy!=null){ +if(o3_ref!=""){Y=OLrefXY[1];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){ +if(o3_refp=='LL'||o3_refp=='LR')Y-=5;}else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){ +if(o3_shadowy<0&&(o3_refp=='UL'||o3_refp=='UR'))Y-=o3_shadowy;else +if(o3_shadowy>0&&(o3_refp=='LL'||o3_refp=='LR'))Y-=o3_shadowy;} +}else{if(o3_midy!=null){ +Y=parseInt(pgTop+((iHt-pHt-CY)/2)+o3_midy); +}else{if(o3_rely!=null){ +if(o3_rely>=0)Y=pgTop+o3_rely+TM;else Y=pgTop+o3_rely+iHt-pHt-BM;}else{ +Y=o3_fixy+TM;}}} +}else{ +if(o3_vauto){ +if(o3_vpos==ABOVE&&OLy-pgTop+OLifYiHt/2&&OLy+pHt+o3_offsety+((OLns4||OLkht)?17:0)+OLifY>pgTop+iHt-BM) +o3_vpos=ABOVE;}Y=(o3_vpos==VCENTER)?parseInt(OLy-((pHt+CY)/2)+o3_offsety): +(o3_vpos==ABOVE)?OLy-(pHt+o3_offsety+BM):OLy+o3_offsety+TM; +if(o3_snapy>1){ +snp=Y % o3_snapy; +if(pHt>0&&o3_vpos==ABOVE){Y=Y-(o3_snapy+snp);}else{Y=Y+(o3_snapy-snp);}}Y+=OLifY;} +if(!o3_nojusty&&Y+pHt+BM>pgTop+iHt)Y=pgTop+iHt-pHt-BM;if(!o3_nojusty&&Y-TM1){ob=o[0];rXY[0]+=o[0].x+o[1].pageX;rXY[1]+=o[0].y+o[1].pageY;}else{ +if((o.toString().indexOf('Image')!= -1)||(o.toString().indexOf('Anchor')!= -1)){rXY[0]+=o.x;rXY[1]+=o.y;} +else{rXY[0]+=o.pageX;rXY[1]+=o.pageY;}}}else{rXY[0]+=OLpageLoc(o,'Left');rXY[1]+=OLpageLoc(o,'Top');} +of=OLgetRefOffsets(ob);rXY[0]+=of[0];rXY[1]+=of[1];return rXY; +} + +// Seeks REFerence by id +function OLgetRefById(l,d){ +l=(l||'overDiv');d=(d||o3_frame.document);var j,r;if(d.getElementById)return d.getElementById(l); +if(OLie4&&d.all)return d.all[l];if(d.layers&&d.layers.length>0){if(d.layers[l])return d.layers[l]; +for(j=0;j0)for(j=0;j0)return r;else if(r)return [r,d.layers[j]];}return null; +} + +// Gets layer vs REFerence offsets +function OLgetRefOffsets(o){ +var c=o3_refc.toUpperCase(),p=o3_refp.toUpperCase(),W=0,H=0,pW=0,pH=0,of=[0,0];pW=(OLbubblePI&&o3_bubble)? +o3_width:OLns4?over.clip.width:over.offsetWidth;pH=(OLbubblePI&&o3_bubble)?OLbubbleHt:OLns4? +over.clip.height:over.offsetHeight;if((!OLop7)&&o.toString().indexOf('Image')!= -1){W=o.width;H=o.height;} +else if((!OLop7)&&o.toString().indexOf('Anchor')!= -1){c=o3_refc='UL';}else{W=(OLns4)?o.clip.width:o.offsetWidth; +H=(OLns4)?o.clip.height:o.offsetHeight;}if((OLns4||(OLns6&&OLgek))&&o.border){W+=2*parseInt(o.border); +H+=2*parseInt(o.border);}if(c=='UL'){of=(p=='UR')?[-pW,0]:(p=='LL')?[0,-pH]:(p=='LR')?[-pW,-pH]:[0,0];}else if(c=='UR'){ +of=(p=='UR')?[W-pW,0]:(p=='LL')?[W,-pH]:(p=='LR')?[W-pW,-pH]:[W,0];}else if(c=='LL'){of=(p=='UR')?[-pW,H]:(p=='LL')?[0,H-pH]: +(p=='LR')?[-pW,H-pH]:[0,H];}else if(c=='LR'){of=(p=='UR')?[W-pW,H]:(p=='LL')?[W,H-pH]:(p=='LR')?[W-pW,H-pH]:[W,H];}return of; +} + +// Gets x or y location of object +function OLpageLoc(o,t){ +var l=0,s=o;while(o.offsetParent&&o.offsetParent.tagName.toLowerCase()!='html'){l+=o['offset'+t];o=o.offsetParent;} +l+=o['offset'+t];while(s=s.parentNode){if((s['scroll'+t]>0)&&s.tagName.toLowerCase()=='div')l-=s['scroll'+t];}return l; +} + +// Moves layer +function OLmouseMove(e){ +var e=(e||event);OLcC=(OLovertwoPI&&over2&&over==over2?cClick2:cClick);OLx=(e.pageX||e.clientX+OLfd().scrollLeft); +OLy=(e.pageY||e.clientY+OLfd().scrollTop);if((OLallowmove&&over)&&(o3_frame==self||over==OLgetRefById()||(OLovertwoPI&& +over2==over&&over==OLgetRefById('overDiv2')))){OLplaceLayer();if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}if(OLhover&&over&& +o3_frame==self&&OLcursorOff())if(o3_offdelay<1)OLcC();else{if(OLtimerid>0)clearTimeout(OLtimerid); +OLtimerid=setTimeout("OLcC()",o3_offdelay);} +} + +// Capture mouse and chain other scripts. +function OLmh(){ +var fN,f,j,k,s,mh=OLmouseMove,w=(OLns4&&window.onmousemove),re=/function[ ]*(\w*)\(/;OLdw=document;if(document.onmousemove|| +w){if(w)OLdw=window;f=OLdw.onmousemove.toString();fN=f.match(re);if(!fN||fN[1]=='anonymous'||fN[1]=='OLmouseMove'){OLchkMh=0; +return;}if(fN[1])s=fN[1]+'(e)';else{j=f.indexOf('{');k=f.lastIndexOf('}')+1;s=f.substring(j,k);}s+=';OLmouseMove(e);'; +mh=new Function('e',s);}OLdw.onmousemove=mh;if(OLns4)OLdw.captureEvents(Event.MOUSEMOVE); +} + +/* + PARSING +*/ +function OLparseTokens(pf,ar){ +var i,v,md= -1,par=(pf!='ol_'),p=OLpar,q=OLparQuo,t=OLtoggle;OLudf=(par&&!ar.length?1:0); +for(i=0;i=0)?1:0');} +function OLhasDims(s){return /[%\-a-z]+$/.test(s);} +function OLfontSize(){ +var i;if(OLhasDims(o3_textsize)){if(OLns4)o3_textsize="2";}else +if(!OLns4){i=parseInt(o3_textsize);o3_textsize=(i>0&&i<8)?OLpct[i]:OLpct[0];} +if(OLhasDims(o3_captionsize)){if(OLns4)o3_captionsize="2";}else +if(!OLns4){i=parseInt(o3_captionsize);o3_captionsize=(i>0&&i<8)?OLpct[i]:OLpct[0];} +if(OLhasDims(o3_closesize)){if(OLns4)o3_closesize="2";}else +if(!OLns4){i=parseInt(o3_closesize);o3_closesize=(i>0&&i<8)?OLpct[i]:OLpct[0];} +if(OLprintPI)OLprintDims(); +} +function OLdecode(){ +var re=/%[0-9A-Fa-f]{2,}/,t=o3_text,c=o3_cap,u=unescape,d=!OLns4&&(!OLgek||OLgek>=20020826)&&typeof decodeURIComponent? +decodeURIComponent:u;if(typeof(window.TypeError)=='function'){if(re.test(t)){eval(new Array('try{','o3_text=d(t);', +'}catch(e){','o3_text=u(t);','}').join('\n'))};if(c&&re.test(c)){eval(new Array('try{','o3_cap=d(c);','}catch(e){', +'o3_cap=u(c);','}').join('\n'))}}else{if(re.test(t))o3_text=u(t);if(c&&re.test(c))o3_cap=u(c);} +} + +/* + LAYER FUNCTIONS +*/ +// Writes to layer +function OLlayerWrite(t){ +t+="\n";if(OLns4){over.document.write(t);over.document.close();}else if(typeof over.innerHTML!='undefined'){ +if(OLieM)over.innerHTML='';over.innerHTML=t;}else{var range=o3_frame.document.createRange();range.setStartAfter(over); +var domfrag=range.createContextualFragment(t);while(over.hasChildNodes()){over.removeChild(over.lastChild);} +over.appendChild(domfrag);}if(OLovertwoPI&&over==over2)OLover2HTML=t;else OLoverHTML=t; +if(OLprintPI)over.print=o3_print?t:null; +} + +// Makes object visible +function OLshowObject(o){ +OLshowid=0;o=(OLns4)?o:o.style;if(((OLfilterPI)&&!OLchkFilter(o))||!OLfilterPI)o.visibility="visible"; +if(OLshadowPI)OLshowShadow();if(OLiframePI)OLshowIfs();if(OLhidePI)OLhideUtil(1,1,0); +} + +// Hides object +function OLhideObject(o){ +if(OLshowid>0){clearTimeout(OLshowid);OLshowid=0;}if(OLtimerid>0)clearTimeout(OLtimerid); +if(OLdelayid>0)clearTimeout(OLdelayid);OLtimerid=0;OLdelayid=0;self.status="";o3_label=ol_label; +if(o3_frame!=self)o=OLgetRefById();if(o){if(o.onmouseover)o.onmouseover=null;if(OLscrollPI&&o==over)OLclearScroll(); +if(OLdraggablePI)OLclearDrag();if(OLfilterPI)OLcleanupFilter(o);if(OLshadowPI)OLhideShadow();var os=(OLns4)?o:o.style; +if(((OLfilterPI)&&!OLchkFadeOut(os))||!OLfilterPI){os.visibility="hidden";if(!OLie55||!OLfilterPI||!o3_filter|| +o3_fadeout<0)o.innerHTML='';}if(OLhidePI&&o==over)OLhideUtil(0,0,1);if(OLiframePI)OLhideIfs(o);} +} + +// Moves layer +function OLrepositionTo(o,xL,yL){ +o=(OLns4)?o:o.style;o.left=(OLns4?xL:xL+'px');o.top=(OLns4?yL:yL+'px'); +} + +// Handle NOCLOSE-MOUSEOFF +function OLoptMOUSEOFF(c){ +if(!c)o3_close=""; +over.onmouseover=function(){OLhover=1;if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}} +} +function OLcursorOff(){ +var o=(OLns4?over:over.style),pHt=OLns4?over.clip.height:over.offsetHeight,left=parseInt(o.left),top=parseInt(o.top), +right=left+o3_width,bottom=top+((OLbubblePI&&o3_bubble)?OLbubbleHt:pHt); +if(OLxright||OLybottom)return true;return false; +} + +/* + REGISTRATION +*/ +function OLsetRunTimeVar(){ +if(OLrunTime.length)for(var k=0;k-1){i=j;break;}}}return i; +} +function OLregCmds(c){ +if(typeof c!='string')return;var pM=c.split(',');pMtr=pMtr.concat(pM); +for(var i=0;i0)))&&(((OLns4))|| +((OLie4)&&(v=thisFrame[i].document.all.tags('iframe'))!=null&&v.length==0)|| +((OLns6)&&(v=thisFrame[i].document.getElementsByTagName('iframe'))!=null&&v.length==0))){ +retVal=OLgetFrameRef(thisFrame[i],ofrm);if(retVal=='')continue;} +else if(thisFrame[i]!=ofrm)continue;retVal='['+i+']'+retVal;break;} +return retVal; +} + +function OLoptFRAME(frm){ +o3_frame=OLmkLyr('overDiv',frm)?frm:self;if(o3_frame!=self){var l,tFrm=OLgetFrameRef(top.frames,o3_frame), +sFrm=OLgetFrameRef(top.frames,ol_frame);if(sFrm.length==tFrm.length) {l=tFrm.lastIndexOf('[');if(l){ +while(sFrm.substring(0,l)!=tFrm.substring(0,l))l=tFrm.lastIndexOf('[',l-1);tFrm=tFrm.substr(l);sFrm=sFrm.substr(l);}} +var i,k,cnt=0,p='',str=tFrm;while((k=str.lastIndexOf('['))!= -1){cnt++;str=str.substring(0,k);} +for(i=0;i Date: Wed, 27 May 2009 07:50:40 +0000 Subject: bulk provisioning via ftp and SOAP #5202 --- fs_selfservice/FS-SelfService/MANIFEST | 1 + fs_selfservice/FS-SelfService/Makefile.PL | 1 + fs_selfservice/FS-SelfService/SelfService.pm | 2 + .../FS-SelfService/freeside-selfservice-clientd | 149 ++++++++++++++++++--- .../freeside-selfservice-soap-server | 53 ++++++++ .../FS-SelfService/iZoomOnlineProvisionService.pm | 75 +++++++++++ 6 files changed, 259 insertions(+), 22 deletions(-) create mode 100644 fs_selfservice/FS-SelfService/freeside-selfservice-soap-server create mode 100644 fs_selfservice/FS-SelfService/iZoomOnlineProvisionService.pm (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/MANIFEST b/fs_selfservice/FS-SelfService/MANIFEST index a619b2b6c..2e4d3fec4 100644 --- a/fs_selfservice/FS-SelfService/MANIFEST +++ b/fs_selfservice/FS-SelfService/MANIFEST @@ -5,4 +5,5 @@ SelfService.pm SelfService/XMLRPC.pm test.pl freeside-selfservice-clientd +freeside-selfservice-soap-server freeside-selfservice-xmlrpc-server diff --git a/fs_selfservice/FS-SelfService/Makefile.PL b/fs_selfservice/FS-SelfService/Makefile.PL index c078f0865..600c9d5f5 100644 --- a/fs_selfservice/FS-SelfService/Makefile.PL +++ b/fs_selfservice/FS-SelfService/Makefile.PL @@ -5,6 +5,7 @@ WriteMakefile( 'NAME' => 'FS::SelfService', 'VERSION_FROM' => 'SelfService.pm', # finds $VERSION 'EXE_FILES' => [ 'freeside-selfservice-clientd', + 'freeside-selfservice-soap-server', 'freeside-selfservice-xmlrpc-server', ], 'INSTALLSCRIPT' => '/usr/local/sbin', diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index 058955037..322782a3f 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -71,6 +71,8 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'call_time' => 'PrepaidPhone/call_time', 'call_time_nanpa' => 'PrepaidPhone/call_time_nanpa', 'phonenum_balance' => 'PrepaidPhone/phonenum_balance', + 'bulk_processrow' => 'Bulk/processrow', + 'check_username' => 'Bulk/check_username', #sg 'decompify_pkgs' => 'SGNG/decompify_pkgs', 'previous_payment_info' => 'SGNG/previous_payment_info', diff --git a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd b/fs_selfservice/FS-SelfService/freeside-selfservice-clientd index bdc8e1547..0819d9d67 100644 --- a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd +++ b/fs_selfservice/FS-SelfService/freeside-selfservice-clientd @@ -13,6 +13,7 @@ use Storable 2.09 qw(nstore_fd fd_retrieve); use IO::Handle qw(_IONBF); use IO::Select; use IO::File; +use Text::CSV_XS; #STDOUT->setbuf(''); @@ -36,6 +37,7 @@ my $lock_file = "/usr/local/freeside/selfservice$tag.writelock"; $|=1; $SIG{__WARN__} = \&_logmsg; +#$SIG{__DIE__} = sub { &_logmsg(@_); exit }; #read data to be cached or something #warn "$me Reading init data\n" if $Debug; @@ -75,6 +77,8 @@ nstore_fd( { _packet => '_enable_keepalive' } , \*STDOUT ); warn "entering main loop\n" if $Debug; my %kids; +my %ftp_scan_dir; +my %ftp_scan_map; my $s = new IO::Select; $s->add(\*STDIN); @@ -124,7 +128,18 @@ while (1) { : '' ) if $Debug; - if ( exists($kids{$token}) ) { + if ( $token eq '_ftp_scan' ) { + if ( $ftp_scan_dir{$packet->{dir}} ) { + warn "already processing ". $packet->{dir}. "\n" if $Debug; + } else { + $ftp_scan_dir{$packet->{dir}} = 1; + spawn \&ftp_scan, $packet; + } + $undisp = 1; + next; + } + + if ( exists($kids{$token}) ) { warn "sending return packet to $token via $kids{$token}\n" if $Debug; nstore_fd($packet, $kids{$token}); @@ -158,29 +173,11 @@ while (1) { #handle some commands weirdly? $packet->{_token}=$$; - warn "[child-$$] locking write stream\n" if $Debug > 1; - lock_write; - - warn "[child-$$] sending packet to remote server\n" if $Debug > 1; - nstore_fd($packet, \*STDOUT) or die "FATAL: can't send response: $!"; - - warn "[child-$$] flushing write stream\n" if $Debug > 1; - STDOUT->flush or die "FATAL: can't flush: $!"; - - warn "[child-$$] releasing write lock\n" if $Debug > 1; - unlock_write; + my $rv = send_and_wait( $packet ); warn "[child-$$] closing write stream\n" if $Debug > 1; close STDOUT or die "FATAL: can't close write stream: $!"; #??! - warn "[child-$$] waiting for response from parent\n" if $Debug > 1; - my $w = new IO::Select; - $w->add(\*STDIN); - until ( $w->can_read ) { - warn "[child-$$] WARNING: interrupted select: $!\n"; - } - my $rv = fd_retrieve(\*STDIN); - #close STDIN; warn "[child-$$] sending response to local client" if $Debug > 1; @@ -210,13 +207,17 @@ sub reap_kids { if ( $kid > 0 ) { close $kids{$kid}; delete $kids{$kid}; + if ( $ftp_scan_map{$kid} ) { + delete($ftp_scan_dir{$ftp_scan_map{$kid}}); + delete($ftp_scan_map{$kid}); + } } } #warn "done reaping\n"; } sub spawn { - my $coderef = shift; + my ( $coderef, $packet ) = ( shift, shift ); unless (@_ == 0 && $coderef && ref($coderef) eq 'CODE') { use Carp; @@ -231,6 +232,7 @@ sub spawn { return; } elsif ($pid) { warn "begat $pid" if $Debug; + $ftp_scan_map{$pid} = $packet->{dir} if $coderef == \&ftp_scan; $kids{$pid} = $kid; #$kids{$pid}->autoflush; return; # I'm the parent @@ -240,7 +242,7 @@ sub spawn { # open(STDIN, "<&Client") || die "can't dup client to stdin"; # open(STDOUT, ">&Client") || die "can't dup client to stdout"; # open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr"; - exit &$coderef(); + exit &$coderef($packet); } sub _logmsg { @@ -254,6 +256,31 @@ sub _logmsg { close $log; } +sub send_and_wait { + my $packet = shift; + + warn "[child-$$] locking write stream\n" if $Debug > 1; + lock_write; + + warn "[child-$$] sending packet to remote server\n" if $Debug > 1; + nstore_fd($packet, \*STDOUT) or die "FATAL: can't send response: $!"; + + warn "[child-$$] flushing write stream\n" if $Debug > 1; + STDOUT->flush or die "FATAL: can't flush: $!"; + + warn "[child-$$] releasing write lock\n" if $Debug > 1; + unlock_write; + + warn "[child-$$] waiting for response from parent\n" if $Debug > 1; + my $w = new IO::Select; + $w->add(\*STDIN); + until ( $w->can_read ) { + warn "[child-$$] WARNING: interrupted select: $!\n"; + } + + fd_retrieve(\*STDIN); +} + sub lock_write { #broken on freebsd? #flock(STDOUT, LOCK_EX) or die "FATAL: can't lock write stream: $!"; @@ -270,3 +297,81 @@ sub unlock_write { flock(LOCKFILE, LOCK_UN) or die "FATAL: can't unlock $lock_file: $!"; } + +sub ftp_scan { + my $packet = shift; + + warn "[child-$$] performing ftp scan" if $Debug > 1; + + warn "[child-$$] packet received:\n". + join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) + if $Debug > 2; + + $packet->{_token}=$$; + + my $dir; + $packet->{dir} =~ /^(.*)$/ && ($dir = $1); # we trust ourselves + opendir(DIR, $dir) or die "failed to open directory $dir: $!\n"; + my @files = grep(/\.csv$/, readdir(DIR)); + closedir(DIR); + + foreach my $file ( @files ) { + warn "Processing $file ...\n"; + my $csv = Text::CSV_XS->new(); + my $err = ""; + my @records = (); + open(CSV, "<$dir/$file") or die "can't open input file for $file: $!\n"; + open(RESULT, ">$dir/result/$file") + or die "can't open result file for $file: $!\n"; + + while () { + if ( $csv->parse($_) ) { + my @columns = $csv->fields(); + push(@records, \@columns); + } else { + $err = $csv->error_input; + last; + } + } + close(CSV); + if ( $err ) { + rename("$dir/$file", "$dir/rejected/$file"); + } else { + foreach my $record ( @records ) { + + $packet->{row} = $record; + $packet->{_packet} = 'Bulk/processrow'; + my $result = send_and_wait( $packet ); + + if ( $result->{error} ) { + my $name; + $record->[1] =~ /^(\w+)$/ && ( $name = $1 ); + + if ($name) { + my $filename = "$dir/rejected/$name"; + open(REC, ">$filename") or die "can't open $filename: $!\n"; + print REC join(',', @$record); + close REC or die $!; + open(ERR, ">$filename.err") or die "can't open $filename.err: $!\n"; + print ERR $result->{error}; + close ERR or die $!; + }else{ + warn "bad agent_custid"; + } + + } + print RESULT $result->{message}, "\n"; + } + + rename("$dir/$file", "$dir/processed/$file"); + warn "$file processed.\n" if $Debug; + } + close(RESULT); + } + + close STDOUT or die "FATAL: can't close write stream: $!"; #??! + + warn "[child-$$] child exiting" if $Debug > 1; + exit; + +} diff --git a/fs_selfservice/FS-SelfService/freeside-selfservice-soap-server b/fs_selfservice/FS-SelfService/freeside-selfservice-soap-server new file mode 100644 index 000000000..869a8aecc --- /dev/null +++ b/fs_selfservice/FS-SelfService/freeside-selfservice-soap-server @@ -0,0 +1,53 @@ +#!/usr/bin/perl -w +# +# freeside-selfservice-soap-server +# + +use strict; +use Fcntl qw(:flock); +use POSIX; +use Getopt::Std; +use SOAP::Transport::HTTP; +use FS::SelfService; + +use vars qw( $opt_p $opt_d $opt_s ); +use vars qw( $DEBUG ); + +getopts("s:p:d"); +$DEBUG = $opt_d; +my $tag = $opt_s ? $opt_s : ''; +$tag = ($opt_s ? ':' : '') . $opt_p ? ':'.$opt_p : ''; + +my $log_file = "/usr/local/freeside/selfservice.soap$tag.log"; + +my $pid = fork; +defined($pid) or die "Can't fork to start: $!"; +print "Started daemon with pid $pid\n" if $pid; +exit if $pid; + +POSIX::setsid(); +open STDIN, "/dev/null" or die "Can't get rid of STDIN"; +open STDOUT, ">/dev/null" or die "Can't get rid of STDOUT"; +open STDERR, ">&STDOUT" or die "Can't get rid of STDERR"; + +$SIG{__WARN__} = \&_logmsg; +$SIG{__DIE__} = sub { &_logmsg(@_); exit }; + +my $daemon = SOAP::Transport::HTTP::Daemon + ->new($opt_s ? (LocalAddr => $opt_s) : (), LocalPort => $opt_p ? $opt_p : 8080) + ->dispatch_to('/usr/local/freeside/SOAP/') #, 'FS::SelfService' + ->objects_by_reference('iZoomOnlineProvisionService') + ->handle; + +warn "Handling request at ", $daemon->url, "\n"; +$daemon->handle; + +sub _logmsg { + chomp( my $msg = shift ); + my $log = new IO::File ">>$log_file"; + flock($log, LOCK_EX); + seek($log, 0, 2); + print $log "[". scalar(localtime). "] [$$] $msg\n"; + flock($log, LOCK_UN); + close $log; +} diff --git a/fs_selfservice/FS-SelfService/iZoomOnlineProvisionService.pm b/fs_selfservice/FS-SelfService/iZoomOnlineProvisionService.pm new file mode 100644 index 000000000..f4c586969 --- /dev/null +++ b/fs_selfservice/FS-SelfService/iZoomOnlineProvisionService.pm @@ -0,0 +1,75 @@ +package iZoomOnlineProvisionService; + +use strict; + +#BEGIN { push @INC, '/usr/lib/perl/5.8.8/' }; +use FS::SelfService qw( bulk_processrow check_username agent_login ); + +=begin WSDL + +_IN agent_username $string agent username +_IN agent_password $string agent password +_IN agent_custid $string customer id in agent system +_IN username $string customer service username +_IN password $string customer service password +_IN daytime $string phone number +_IN first $string first name +_IN last $string last name +_IN address1 $string address line 1 +_IN address2 $string address line 2 +_IN city $string city +_IN state $string state +_IN zip $string zip +_IN pkg $string package name +_IN action $string one of (R|P|D|S)(reconcile, provision, provision with disk, send disk) +_IN adjourn $string day to terminate service +_IN mobile $string mobile phone +_IN sms $string (T|F) acceptable to send SMS messages to mobile? +_IN ship_addr1 $string shipping address line 1 +_IN ship_addr2 $string shipping address line 2 +_IN ship_city $string shipping address city +_IN ship_state $string shipping address state +_IN ship_zip $string shipping address zip +_RETURN @string array [status, message]. status is one of OK, ERR + +=cut + +my $DEBUG = 0; + +sub Provision { + my $class = shift; + + my $session = agent_login( map { $_ => shift @_ } qw( username password ) ); + return [ 'ERR', $session->{error} ] if $session->{error}; + + my $result = + bulk_processrow( session_id => $session->{session_id}, row => [ @_ ] ); + + return $result->{error} ? [ 'ERR', $result->{error} ] + : [ 'OK', $result->{message} ]; +} + +=begin WSDL + +_IN agent_username $string agent username +_IN agent_password $string agent password +_IN username $string customer service username +_IN domain $string user domain name +_RETURN @string [OK|ERR] + +=cut +sub CheckUserName { + my $class = shift; + + my $session = agent_login( map { $_ => shift @_ } qw( username password ) ); + return [ 'ERR', $session->{error} ] if $session->{error}; + + my $result = check_username( session_id => $session->{session_id}, + map { $_ => shift @_ } qw( user domain ) + ); + + return $result->{error} ? [ 'ERR', $result->{error} ] + : [ 'OK', $result->{message} ]; +} + +1; -- cgit v1.2.1 From b7dfb6d7c377322962801d598dbaa400ffb3d4e6 Mon Sep 17 00:00:00 2001 From: jeff Date: Fri, 19 Jun 2009 17:53:28 +0000 Subject: treat webpay type payments as manual --- fs_selfservice/FS-SelfService/cgi/verify.cgi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/cgi/verify.cgi b/fs_selfservice/FS-SelfService/cgi/verify.cgi index 0f8bfccc8..d9346b897 100755 --- a/fs_selfservice/FS-SelfService/cgi/verify.cgi +++ b/fs_selfservice/FS-SelfService/cgi/verify.cgi @@ -83,7 +83,9 @@ if ( -e $decline_html ) { $cgi = new CGI; my $rv = capture_payment( - data => { map { $_ => scalar($cgi->param($_)) } $cgi->param }, + data => { 'manual' => 1, + map { $_ => scalar($cgi->param($_)) } $cgi->param + }, url => $cgi->self_url, ); -- cgit v1.2.1 From ff27089dd05a3d9ff0b0b9898d7104d18c0174ac Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 13 Jul 2009 09:19:02 +0000 Subject: fix self-service agent-specific logos --- fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi b/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi index 5f344a32e..253f853f8 100644 --- a/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi +++ b/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi @@ -7,10 +7,16 @@ use FS::SelfService qw( invoice_logo ); my $cgi = new CGI; -my($query) = $cgi->keywords; -$query =~ /^([^\.\/]*)$/ or '' =~ /^()$/; -my $templatename = $1; -my $hashref = invoice_logo('templatename' => $templatename); +my %hash = (); +if ( $cgi->param('invnum') ) { + $hash{$_} = scalar($cgi->param($_)) foreach qw( invnum template ); +} else { + my($query) = $cgi->keywords; + $query =~ /^([^\.\/]*)$/ or '' =~ /^()$/; + $hash{'template'} = $1; +} + +my $hashref = invoice_logo(%hash); print $cgi->header( '-type' => $hashref->{'content_type'}, '-expires' => 'now', -- cgit v1.2.1 From 72a60ae400c253e913728a830e588e209b1a23fe Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 30 Jul 2009 08:43:45 +0000 Subject: lost fix for illegal state? --- fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 148fc4ddc..ed1e6a190 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -366,7 +366,7 @@ sub payment_results { $cgi->param('city') =~ /^(.{0,80})$/ or die "illegal city"; my $city = $1; - $cgi->param('state') =~ /^(.{80})$/ or die "illegal state"; + $cgi->param('state') =~ /^(.{0,80})$/ or die "illegal state"; my $state = $1; $cgi->param('zip') =~ /^(.{0,10})$/ or die "illegal zip"; -- cgit v1.2.1 From 7f43bf155bc79e3c9bd5d88e53117595963c301e Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 31 Jul 2009 13:20:54 +0000 Subject: skin up self-service according to config passed from backend, RT#5530 --- fs_selfservice/FS-SelfService/SelfService.pm | 1 + .../FS-SelfService/cgi/ach_payment_results.html | 8 +++----- fs_selfservice/FS-SelfService/cgi/change_bill.html | 9 +++------ .../FS-SelfService/cgi/change_password.html | 7 ++----- fs_selfservice/FS-SelfService/cgi/change_pay.html | 21 +++------------------ fs_selfservice/FS-SelfService/cgi/change_ship.html | 9 +++------ .../FS-SelfService/cgi/customer_change_pkg.html | 8 +++----- .../FS-SelfService/cgi/customer_order_pkg.html | 8 +++----- fs_selfservice/FS-SelfService/cgi/delete_svc.html | 7 ++----- fs_selfservice/FS-SelfService/cgi/footer.html | 4 ++-- fs_selfservice/FS-SelfService/cgi/header.html | 20 +++++++++++++++++--- fs_selfservice/FS-SelfService/cgi/login.html | 19 ++++++++++++++----- fs_selfservice/FS-SelfService/cgi/logout.html | 14 +++++++++++--- .../FS-SelfService/cgi/make_ach_payment.html | 21 +++------------------ .../FS-SelfService/cgi/make_payment.html | 21 +++------------------ fs_selfservice/FS-SelfService/cgi/myaccount.html | 6 +----- .../FS-SelfService/cgi/myaccount_menu.html | 4 ++-- .../FS-SelfService/cgi/payment_results.html | 8 +++----- .../FS-SelfService/cgi/process_change_bill.html | 6 +----- .../cgi/process_change_password.html | 6 +----- .../FS-SelfService/cgi/process_change_pay.html | 6 +----- .../FS-SelfService/cgi/process_change_pkg.html | 6 +----- .../FS-SelfService/cgi/process_change_ship.html | 6 +----- .../FS-SelfService/cgi/process_order_pkg.html | 6 +----- .../FS-SelfService/cgi/process_order_recharge.html | 6 +----- .../FS-SelfService/cgi/process_svc_acct.html | 6 +----- fs_selfservice/FS-SelfService/cgi/provision.html | 8 +++----- .../FS-SelfService/cgi/provision_svc_acct.html | 8 +++----- .../FS-SelfService/cgi/recharge_prepay.html | 8 +++----- .../FS-SelfService/cgi/recharge_results.html | 8 +++----- fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 22 ++++++++++++---------- .../FS-SelfService/cgi/view_invoice.html | 6 +----- .../FS-SelfService/cgi/view_usage_details.html | 6 +----- 33 files changed, 113 insertions(+), 196 deletions(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index 322782a3f..d275fa86d 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -60,6 +60,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'unprovision_svc' => 'MyAccount/unprovision_svc', 'myaccount_passwd' => 'MyAccount/myaccount_passwd', 'signup_info' => 'Signup/signup_info', + 'skin_info' => 'MyAccount/skin_info', 'domain_select_hash' => 'Signup/domain_select_hash', # expose? 'new_customer' => 'Signup/new_customer', 'capture_payment' => 'Signup/capture_payment', diff --git a/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html b/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html index 62419d152..987b97efb 100644 --- a/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html +++ b/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html @@ -1,13 +1,11 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + Payment results

<%= if ( $error ) { $OUT .= qq!Error processing your payment: $error!; } else { $OUT .= 'Your payment was processed successfully. Thank you.'; } %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/change_bill.html b/fs_selfservice/FS-SelfService/cgi/change_bill.html index f186c9b51..c0977d946 100755 --- a/fs_selfservice/FS-SelfService/cgi/change_bill.html +++ b/fs_selfservice/FS-SelfService/cgi/change_bill.html @@ -1,9 +1,6 @@ -MyAccount - -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + Edit billing address

<%= if ( $error ) { $OUT .= qq!Error: $error

!; @@ -19,5 +16,5 @@ ">
- + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/change_password.html b/fs_selfservice/FS-SelfService/cgi/change_password.html index dcfce3173..9b91d2cad 100644 --- a/fs_selfservice/FS-SelfService/cgi/change_password.html +++ b/fs_selfservice/FS-SelfService/cgi/change_password.html @@ -1,8 +1,5 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Change password

@@ -47,5 +44,5 @@ - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/change_pay.html b/fs_selfservice/FS-SelfService/cgi/change_pay.html index 7283cb850..e7a996931 100644 --- a/fs_selfservice/FS-SelfService/cgi/change_pay.html +++ b/fs_selfservice/FS-SelfService/cgi/change_pay.html @@ -1,21 +1,6 @@ -MyAccount - - -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + Change payment information

<%= if ( $error ) { $OUT .= qq!Error: $error

!; @@ -70,5 +55,5 @@ )->html; %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/change_ship.html b/fs_selfservice/FS-SelfService/cgi/change_ship.html index 28ee94ed6..f03aeb5be 100755 --- a/fs_selfservice/FS-SelfService/cgi/change_ship.html +++ b/fs_selfservice/FS-SelfService/cgi/change_ship.html @@ -1,9 +1,6 @@ -MyAccount - -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + Edit service address

<%= if ( $error ) { $OUT .= qq!Error: $error

!; @@ -98,5 +95,5 @@ function samechanged(what) { ">
- + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html index 46d3faf86..95bdab76c 100644 --- a/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html +++ b/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html @@ -1,8 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + <%= include('change_pkg') %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html index 78cc16c27..a20e8acbc 100755 --- a/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html +++ b/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html @@ -1,8 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + <%= include('order_pkg') %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/delete_svc.html b/fs_selfservice/FS-SelfService/cgi/delete_svc.html index 4155d09cf..e16b01eea 100644 --- a/fs_selfservice/FS-SelfService/cgi/delete_svc.html +++ b/fs_selfservice/FS-SelfService/cgi/delete_svc.html @@ -1,8 +1,5 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> <%= if ( $error ) { $OUT .= qq!Error: $error!; @@ -10,5 +7,5 @@ $OUT .= "$svc removed."; } %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/footer.html b/fs_selfservice/FS-SelfService/cgi/footer.html index 98cc79b74..4889b741a 100644 --- a/fs_selfservice/FS-SelfService/cgi/footer.html +++ b/fs_selfservice/FS-SelfService/cgi/footer.html @@ -1,3 +1,3 @@ -
-powered by freeside + +<%= $body_footer %> diff --git a/fs_selfservice/FS-SelfService/cgi/header.html b/fs_selfservice/FS-SelfService/cgi/header.html index cf8fd2bd9..630959e33 100644 --- a/fs_selfservice/FS-SelfService/cgi/header.html +++ b/fs_selfservice/FS-SelfService/cgi/header.html @@ -1,9 +1,23 @@ - MyAccount + <%= $title || 'MyAccount' %> + <%= $head %> - - MyAccount + + + <%= $body_header %> + <%= $title || 'MyAccount' %>

<%= include('myaccount_menu') %> diff --git a/fs_selfservice/FS-SelfService/cgi/login.html b/fs_selfservice/FS-SelfService/cgi/login.html index e5daec859..760f579bb 100644 --- a/fs_selfservice/FS-SelfService/cgi/login.html +++ b/fs_selfservice/FS-SelfService/cgi/login.html @@ -1,11 +1,18 @@ -Login -Login

+ + + Login + <%= $head %> + + + <%= $body_header %> + +Login

<%= $error %>
- +
@@ -50,13 +57,15 @@ if ( $single_domain ) { if ( $phone_login ) { + $box_bgcolor ||= '#c0c0c0'; + $OUT .= qq( OR

-
Username
+
Phone number @@ -82,4 +91,4 @@ if ( $phone_login ) { %> - +<%= $body_footer %> diff --git a/fs_selfservice/FS-SelfService/cgi/logout.html b/fs_selfservice/FS-SelfService/cgi/logout.html index 0e774e9eb..e2de648ce 100644 --- a/fs_selfservice/FS-SelfService/cgi/logout.html +++ b/fs_selfservice/FS-SelfService/cgi/logout.html @@ -1,5 +1,13 @@ -MyAccount -MyAccount

+ + + MyAccount + <%= $head %> + + + <%= $body_header %> + + MyAccount

You have been logged out. - + +<%= $body_footer %> diff --git a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html index 2394c10d4..8802a5d97 100644 --- a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html @@ -1,21 +1,6 @@ -MyAccount - - -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> -
+<%= include('header') %> + Make a payment

@@ -54,5 +39,5 @@ -
+ <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/make_payment.html b/fs_selfservice/FS-SelfService/cgi/make_payment.html index da6e67ed2..96a17ba4c 100644 --- a/fs_selfservice/FS-SelfService/cgi/make_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_payment.html @@ -1,21 +1,6 @@ -MyAccount - - -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + Make a payment

@@ -64,5 +49,5 @@
- + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount.html b/fs_selfservice/FS-SelfService/cgi/myaccount.html index c9ca0c5f0..bcfcf9540 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount.html @@ -1,8 +1,5 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Hello <%= $name %>!

<%= $small_custview %> @@ -94,5 +91,4 @@ Hello <%= $name %>!

} %> - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html index cc9f255ce..5cf4fe2d9 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html @@ -1,6 +1,6 @@ <%= $url = "$selfurl?session=$session_id;action="; ''; %> -
+ @@ -74,7 +74,7 @@ foreach my $item ( @menu ) { $OUT .= '{'url'} && $action eq $item->{'url'} ) { - $OUT .= ' BGCOLOR="#eeeeee" '. + $OUT .= ' BGCOLOR="'. ( $body_bgcolor || '#eeeeee' ). '" '. ' STYLE="border-top: 1px solid black;'. ' border-left: 1px solid black;'. ' border-bottom: 1px solid black"'; diff --git a/fs_selfservice/FS-SelfService/cgi/payment_results.html b/fs_selfservice/FS-SelfService/cgi/payment_results.html index 62419d152..987b97efb 100644 --- a/fs_selfservice/FS-SelfService/cgi/payment_results.html +++ b/fs_selfservice/FS-SelfService/cgi/payment_results.html @@ -1,13 +1,11 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> -
+<%= include('header') %> + Payment results

<%= if ( $error ) { $OUT .= qq!Error processing your payment: $error!; } else { $OUT .= 'Your payment was processed successfully. Thank you.'; } %> -
+ <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_bill.html b/fs_selfservice/FS-SelfService/cgi/process_change_bill.html index 93e05cf7f..a4402848d 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_change_bill.html +++ b/fs_selfservice/FS-SelfService/cgi/process_change_bill.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> -
+<%= include('header') %> Information updated successfully. -
<%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_password.html b/fs_selfservice/FS-SelfService/cgi/process_change_password.html index bfd23127c..ffe0cab35 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_change_password.html +++ b/fs_selfservice/FS-SelfService/cgi/process_change_password.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Password changed for <%= $value %> <%= $label %>. - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_pay.html b/fs_selfservice/FS-SelfService/cgi/process_change_pay.html index 93e05cf7f..a4402848d 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_change_pay.html +++ b/fs_selfservice/FS-SelfService/cgi/process_change_pay.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Information updated successfully. - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html index 7c0f0a6ca..c7c69f0a5 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html +++ b/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Package change successful. - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_ship.html b/fs_selfservice/FS-SelfService/cgi/process_change_ship.html index 93e05cf7f..a4402848d 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_change_ship.html +++ b/fs_selfservice/FS-SelfService/cgi/process_change_ship.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Information updated successfully. - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html index 3e4471d33..b86893715 100755 --- a/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html +++ b/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Package order successful. - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html b/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html index ef0516ac9..9dfc32807 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html +++ b/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> <%= $svc %> recharged successfully. - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html index 813521fda..39920cb0d 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html +++ b/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> <%= $svc %> setup successfully. - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/provision.html b/fs_selfservice/FS-SelfService/cgi/provision.html index 5ae7b42b7..f5b2c2b71 100644 --- a/fs_selfservice/FS-SelfService/cgi/provision.html +++ b/fs_selfservice/FS-SelfService/cgi/provision.html @@ -1,8 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + <%= include('provision_list') %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html index 550493bbc..bffd22fd1 100644 --- a/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html +++ b/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html @@ -1,8 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + <%= include('svc_acct') %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html b/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html index 3de4c8790..6f0aa1f62 100644 --- a/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html +++ b/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html @@ -1,8 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + Recharge with prepaid card

@@ -29,5 +27,5 @@
- + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/recharge_results.html b/fs_selfservice/FS-SelfService/cgi/recharge_results.html index 6d928e3f9..af15365b0 100644 --- a/fs_selfservice/FS-SelfService/cgi/recharge_results.html +++ b/fs_selfservice/FS-SelfService/cgi/recharge_results.html @@ -1,8 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> + Recharge results

<%= if ( $error ) { $OUT .= qq!Error processing your prepaid card: $error!; @@ -17,5 +15,5 @@ $OUT .= 'Thank you.'; } %> - + <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index ed1e6a190..09cfe6073 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -9,16 +9,15 @@ use Text::Template; use HTML::Entities; use Date::Format; use Number::Format 1.50; -use FS::SelfService qw( login_info login customer_info edit_info invoice - payment_info process_payment realtime_collect - process_prepay - list_pkgs order_pkg signup_info order_recharge - part_svc_info provision_acct provision_external - unprovision_svc change_pkg domainselector - list_svcs - list_svc_usage list_cdr_usage list_support_usage - myaccount_passwd - ); +use FS::SelfService qw( + skin_info login_info login customer_info edit_info invoice + payment_info process_payment realtime_collect process_prepay + list_pkgs order_pkg signup_info order_recharge + part_svc_info provision_acct provision_external + unprovision_svc change_pkg domainselector + list_svcs list_svc_usage list_cdr_usage list_support_usage + myaccount_passwd +); $template_dir = '.'; @@ -646,6 +645,9 @@ sub do_template { $fill_in->{'selfurl'} = $cgi->self_url; $fill_in->{'cgi'} = \$cgi; + my $skin_info = skin_info(); + $fill_in->{$_} = $skin_info->{$_} foreach keys %$skin_info; + my $source = "$template_dir/$name.html"; #warn "creating template for $source\n"; my $template = new Text::Template( TYPE => 'FILE', diff --git a/fs_selfservice/FS-SelfService/cgi/view_invoice.html b/fs_selfservice/FS-SelfService/cgi/view_invoice.html index 8fa5fb7dc..8a1c1c73d 100644 --- a/fs_selfservice/FS-SelfService/cgi/view_invoice.html +++ b/fs_selfservice/FS-SelfService/cgi/view_invoice.html @@ -1,10 +1,6 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> <%= $invoice_html %> - <%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage_details.html b/fs_selfservice/FS-SelfService/cgi/view_usage_details.html index 6bac7487c..9f02eba79 100644 --- a/fs_selfservice/FS-SelfService/cgi/view_usage_details.html +++ b/fs_selfservice/FS-SelfService/cgi/view_usage_details.html @@ -1,8 +1,5 @@ -MyAccount -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> Service usage details for <%= Date::Format::time2str('%b %o %Y', $beginning) %> - @@ -80,5 +77,4 @@
- <%= include('footer') %> -- cgit v1.2.1 From 99100d7e0d0b22a1844dde88acd529e79d096463 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 10 Aug 2009 11:50:04 +0000 Subject: when using pkg-balances, limit self-service access when a customer with multiple packages logs on, RT#4189 --- fs_selfservice/FS-SelfService/SelfService.pm | 1 + fs_selfservice/FS-SelfService/cgi/login.html | 2 +- fs_selfservice/FS-SelfService/cgi/logout.html | 2 +- .../cgi/make_thirdparty_payment.html | 13 ++--- fs_selfservice/FS-SelfService/cgi/myaccount.html | 12 +++- .../FS-SelfService/cgi/myaccount_menu.html | 65 +++++++++++++--------- fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 10 ++-- 7 files changed, 63 insertions(+), 42 deletions(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index d275fa86d..743057d88 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -61,6 +61,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'myaccount_passwd' => 'MyAccount/myaccount_passwd', 'signup_info' => 'Signup/signup_info', 'skin_info' => 'MyAccount/skin_info', + 'access_info' => 'MyAccount/access_info', 'domain_select_hash' => 'Signup/domain_select_hash', # expose? 'new_customer' => 'Signup/new_customer', 'capture_payment' => 'Signup/capture_payment', diff --git a/fs_selfservice/FS-SelfService/cgi/login.html b/fs_selfservice/FS-SelfService/cgi/login.html index 760f579bb..eef412da3 100644 --- a/fs_selfservice/FS-SelfService/cgi/login.html +++ b/fs_selfservice/FS-SelfService/cgi/login.html @@ -3,7 +3,7 @@ Login <%= $head %> - + <%= $body_header %> Login

diff --git a/fs_selfservice/FS-SelfService/cgi/logout.html b/fs_selfservice/FS-SelfService/cgi/logout.html index e2de648ce..5e22ad80c 100644 --- a/fs_selfservice/FS-SelfService/cgi/logout.html +++ b/fs_selfservice/FS-SelfService/cgi/logout.html @@ -3,7 +3,7 @@ MyAccount <%= $head %> - + <%= $body_header %> MyAccount

diff --git a/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html index 042b8b37c..b2900b1e9 100755 --- a/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html @@ -1,5 +1,6 @@ -My Account -MyAccount

+<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('header') %> + -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - + Pay now

<%= if ( $error ) { @@ -34,5 +33,5 @@ EOF $OUT .= qq!!; } %> - - + +<%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount.html b/fs_selfservice/FS-SelfService/cgi/myaccount.html index bcfcf9540..d6527fe76 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount.html @@ -4,11 +4,17 @@ Hello <%= $name %>!

<%= $small_custview %>
+<%= if ( $pkgnum ) { + $OUT .= qq!Balance: \$$balance

!; + } + ''; +%> + <%= if ( $balance > 0 ) { - if (scalar(grep $_, @hide_payment_field)) { - $OUT .= qq! Make a payment

!; - } else { + if (scalar(grep $_, @hide_payment_fields)) { $OUT .= qq! Make a payment

!; + } else { + $OUT .= qq! Make a payment

!; } } %> <%= diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html index 5cf4fe2d9..617ae3ebe 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html @@ -7,15 +7,18 @@ <%= my @menu = ( -{ title=>' ' }, -{ title=>'Overview', url=>'myaccount', size=>'+1', }, -{ title=>' ' }, - -{ title=>'Purchase', size=>'+1', }, - { title=>'Purchase additional package', - url=>'customer_order_pkg', 'indent'=>2 }, + { title=>' ' }, + { title=>'Overview', url=>'myaccount', size=>'+1', }, + { title=>' ' }, + { title=>'Purchase', size=>'+1', }, ); +unless ( $pkgnum ) { + push @menu, + { title=>'Purchase additional package', + url=>'customer_order_pkg', 'indent'=>2 }; +} + if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eventually per-pkg or something really fancy #XXXFIXME still a bit sloppy for multi-gateway of differing namespace @@ -34,7 +37,7 @@ if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eve while($i < scalar(@cust_paybys)) { last if $cust_paybys[$i] =~ /^CHEK/; $i++ } if ( $cust_paybys[$i] =~ /^CHEK/ ) { push @menu, { title => 'Recharge my account with a check', - url => $hide_payment_field[$i] + url => $hide_payment_fields[$i] ? 'make_thirdparty_payment&payby_method=ECHECK' : 'make_ach_payment', indent => 2, @@ -49,26 +52,36 @@ if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eve } -push @menu, ( - -{ title=>' ' }, +push @menu, + { title=>' ' }, + { title=>'View my usage', url=>'view_usage', size=>'+1', }, +; -{ title=>'View my usage', url=>'view_usage', size=>'+1', }, -{ title=>'Setup my services', url=>'provision', size=>'+1', }, - -{ title=>' ' }, +unless ( $pkgnum ) { + push @menu, + { title=>'Setup my services', url=>'provision', size=>'+1', }, + ; +} -{ title=>'Change my information', size=>'+1', }, - { title=>'Change billing address', url=>'change_bill', indent=>2 }, - { title=>'Change service address', url=>'change_ship', indent=>2 }, - { title=>'Change payment information', url=>'change_pay', indent=>2 }, - { title=>'Change password(s)', url=>'change_password', indent=>2 }, +push @menu, + { title=>' ' }; -{ title=>' ' }, +push @menu, + { title=>'Change my information', size=>'+1', }; -{ title=>'Logout', url=>'logout', size=>'+1', }, +unless ( $pkgnum ) { + push @menu, + { title=>'Change billing address', url=>'change_bill', indent=>2 }, + { title=>'Change service address', url=>'change_ship', indent=>2 }, + { title=>'Change payment information', url=>'change_pay', indent=>2 }, + ; +} -); +push @menu, + { title=>'Change password(s)', url=>'change_password', indent=>2 }, + { title=>' ' }, + { title=>'Logout', url=>'logout', size=>'+1', }, +; foreach my $item ( @menu ) { @@ -83,15 +96,15 @@ foreach my $item ( @menu ) { } $OUT.='>'; - $OUT .= '' - if exists $item->{'size'}; - $OUT .= ' ' x $item->{'indent'} if exists $item->{'indent'}; $OUT .= '' if exists $item->{'url'} && $action ne $item->{'url'}; + $OUT .= '' + if exists $item->{'size'}; + $item->{'title'} =~ s/ / /g; $OUT .= $item->{'title'}; diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 09cfe6073..a5a7d1844 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -10,7 +10,7 @@ use HTML::Entities; use Date::Format; use Number::Format 1.50; use FS::SelfService qw( - skin_info login_info login customer_info edit_info invoice + access_info login_info login customer_info edit_info invoice payment_info process_payment realtime_collect process_prepay list_pkgs order_pkg signup_info order_recharge part_svc_info provision_acct provision_external @@ -98,7 +98,7 @@ warn "processing template $action\n" do_template($action, { 'session_id' => $session_id, 'action' => $action, #so the menu knows what tab we're on... - %{ payment_info( 'session_id' => $session_id ) }, # cust_paybys for the menu + #%{ payment_info( 'session_id' => $session_id ) }, # cust_paybys for the menu %{$result} }); @@ -645,8 +645,10 @@ sub do_template { $fill_in->{'selfurl'} = $cgi->self_url; $fill_in->{'cgi'} = \$cgi; - my $skin_info = skin_info(); - $fill_in->{$_} = $skin_info->{$_} foreach keys %$skin_info; + my $access_info = $session_id + ? access_info( 'session_id' => $session_id ) + : {}; + $fill_in->{$_} = $access_info->{$_} foreach keys %$access_info; my $source = "$template_dir/$name.html"; #warn "creating template for $source\n"; -- cgit v1.2.1 From 903fe2fe14cebb5d311d43edfc60d3c36333e146 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 10 Aug 2009 11:57:14 +0000 Subject: when using pkg-balances, limit self-service access when a customer with multiple packages logs on, RT#4189 --- fs_selfservice/FS-SelfService/cgi/process_svc_external.html | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html b/fs_selfservice/FS-SelfService/cgi/process_svc_external.html index 1d2937b3e..103eb9e35 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html +++ b/fs_selfservice/FS-SelfService/cgi/process_svc_external.html @@ -1,12 +1,8 @@ -<%= $error ? 'MyAccount' : sprintf("Your serial number is %010d-$title", $id) %> -MyAccount

<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - +<%= include('header') %> <%= $svc %> setup successfully.

Your serial number is <%= sprintf("%010d-$title", $id) %> - <%= include('footer') %> -- cgit v1.2.1 From a22b55437cb9c2da2670c33b28dd521a1ef1a190 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 20 Aug 2009 20:44:49 +0000 Subject: mitigate harmless warnings spamming logs --- fs_selfservice/FS-SelfService/SelfService.pm | 2 ++ 1 file changed, 2 insertions(+) (limited to 'fs_selfservice/FS-SelfService') diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index 743057d88..4173e28d6 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -1658,6 +1658,8 @@ END $text .= "}\n\n"; + $param->{'acstate'} = '' unless defined($param->{'acstate'}); + $text .= qq!