diff options
Diffstat (limited to 'fs_selfservice/FS-SelfService/cgi')
25 files changed, 720 insertions, 73 deletions
diff --git a/fs_selfservice/FS-SelfService/cgi/agent.cgi b/fs_selfservice/FS-SelfService/cgi/agent.cgi index 695d20e4c..6e8de619a 100644 --- a/fs_selfservice/FS-SelfService/cgi/agent.cgi +++ b/fs_selfservice/FS-SelfService/cgi/agent.cgi @@ -1,3 +1,4 @@ +#!/usr/bin/perl -T #!/usr/bin/perl -Tw #some false laziness w/selfservice.cgi @@ -193,7 +194,7 @@ sub process_signup { } else { $action = 'agent_main'; my $agent_info = agent_info( 'session_id' => $session_id ); - $agent_info->{'message'} = 'Signup sucessful'; + $agent_info->{'message'} = 'Signup successful'; $agent_info; } @@ -324,7 +325,7 @@ sub process_svc_acct { $action = 'agent_provision'; return { %{agent_provision()}, - 'message' => $result->{'svc'}. ' setup sucessfully.', + 'message' => $result->{'svc'}. ' setup successfully.', }; } @@ -343,7 +344,7 @@ sub process_svc_external { %{agent_provision()}, 'message' => $result->{'error'} ? '<FONT COLOR="#FF0000">'. $result->{'error'}. '</FONT>' - : $result->{'svc'}. ' setup sucessfully'. + : $result->{'svc'}. ' setup successfully'. ': serial number '. sprintf('%010d', $result->{'id'}). '-'. $result->{'title'} }; @@ -403,7 +404,7 @@ sub process_order_pkg { #$cgi->delete( grep { $_ ne 'custnum' } $cgi->param ); return { %{view_customer()}, - 'message' => 'Package order sucessful.', + 'message' => 'Package order successful.', }; } diff --git a/fs_selfservice/FS-SelfService/cgi/change_password.html b/fs_selfservice/FS-SelfService/cgi/change_password.html new file mode 100644 index 000000000..af7b45313 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/change_password.html @@ -0,0 +1,53 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> + +<FONT SIZE=4>Change password</FONT><BR><BR> + +<%= if ( $error ) { + $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!; +} ''; %> + +<FORM ACTION="<%= $selfurl %>" METHOD="POST"> +<INPUT TYPE="hidden" NAME="session" VALUE="<%= $session_id %>"> +<INPUT TYPE="hidden" NAME="action" VALUE="process_change_password"> + +<TABLE BGCOLOR="#cccccc"> + + <TR> + <TH ALIGN="right">Change password for account: </TH> + <TD> + <SELECT NAME="svcnum"> + <%= foreach my $svc ( @svcs ) { + $OUT .= '<OPTION VALUE="'. $svc->{'svcnum'}. '"'. + ( $svc->{'svcnum'} eq $svcnum ? ' SELECTED' : '' ). '>'. + $svc->{'label'}. ': '. $svc->{'value'}. "\n"; + } + %> + </SELECT> + </TD> + </TR> + + <TR> + <TH ALIGN="right">New password: </TH> + <TD><INPUT TYPE="password" NAME="new_password" SIZE="18"></TD> + </TR> + + <TR> + <TH ALIGN="right">Re-enter new password: </TH> + <TD><INPUT TYPE="password" NAME="new_password2" SIZE="18"></TD> + </TR> + +</TABLE> +<BR> + +<INPUT TYPE="submit" VALUE="Change password"> + +</FORM> + +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> diff --git a/fs_selfservice/FS-SelfService/cgi/change_pkg.html b/fs_selfservice/FS-SelfService/cgi/change_pkg.html new file mode 100644 index 000000000..a841308a5 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/change_pkg.html @@ -0,0 +1,37 @@ +<SCRIPT TYPE="text/javascript"> +function enable_change_pkg () { + if ( document.ChangePkgForm.pkgpart.selectedIndex > 0 ) { + document.ChangePkgForm.submit.disabled = false; + } else { + document.ChangePkgForm.submit.disabled = true; + } +} +</SCRIPT> +<FONT SIZE=4>Purchase replacement package for "<%= $pkg; %>"</FONT><BR><BR> +<%= if ( $error ) { + $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!; +} ''; %> +<FORM NAME="ChangePkgForm" ACTION="<%= $selfurl %>" METHOD=POST> +<INPUT TYPE="hidden" NAME="session" VALUE="<%= $session_id %>"> +<INPUT TYPE="hidden" NAME="action" VALUE="process_change_pkg"> +<INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%= $pkgnum %>"> +<INPUT TYPE="hidden" NAME="pkg" VALUE="<%= $pkg %>"> +<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0> +<TR> + <TD COLSPAN=2><SELECT NAME="pkgpart" onChange="enable_change_pkg()"> + <OPTION VALUE=""> + + <%= + foreach my $part_pkg ( @part_pkg ) { + $OUT .= '<OPTION VALUE="'. $part_pkg->{'pkgpart'}. '"'; + $OUT .= ' SELECTED' if $pkgpart && $part_pkg->{'pkgpart'} == $pkgpart; + $OUT .= '>'. $part_pkg->{'pkg'}; + } + %> + + </SELECT></TD> +</TR> +</TABLE> +<INPUT NAME="submit" TYPE="submit" VALUE="Purchase" disabled> +</FORM> + diff --git a/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi b/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi new file mode 100644 index 000000000..5f344a32e --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi @@ -0,0 +1,19 @@ +#!/usr/bin/perl -T +#!/usr/bin/perl -Tw + +use strict; +use CGI; +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); + +print $cgi->header( '-type' => $hashref->{'content_type'}, + '-expires' => 'now', + ). + $hashref->{'logo'}; + diff --git a/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html new file mode 100644 index 000000000..d08ab9679 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html @@ -0,0 +1,10 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> +<%= include('change_pkg') %> +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> diff --git a/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html new file mode 100755 index 000000000..c01b6b384 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html @@ -0,0 +1,10 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> +<%= include('order_pkg') %> +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> diff --git a/fs_selfservice/FS-SelfService/cgi/make_payment.html b/fs_selfservice/FS-SelfService/cgi/make_payment.html index 1bbbe90b2..64b1e00b5 100644 --- a/fs_selfservice/FS-SelfService/cgi/make_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_payment.html @@ -1,5 +1,18 @@ <HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> -<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<BODY BGCOLOR="#eeeeee"> +<script language="JavaScript"><!-- + var mywindow = -1; + function myopen(filename,windowname,properties) { + myclose(); + mywindow = window.open(filename,windowname,properties); + } + function myclose() { + if ( mywindow != -1 ) + mywindow.close(); + mywindow = -1 + } +//--></script> +<FONT SIZE=5>MyAccount</FONT><BR><BR> <%= $url = "$selfurl?session=$session_id;action="; ''; %> <%= include('myaccount_menu') %> <TD VALIGN="top"> @@ -60,6 +73,9 @@ </TABLE> </TD> </TR><TR> + <TD ALIGN="right">CVV2 (<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)</TD> + <TD><INPUT TYPE="text" NAME="paycvv" VALUE="" SIZE=4 MAXLENGTH=4></TD></TR> +</TR><TR> <TD ALIGN="right">Exact name on card</TD> <TD><INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="payname" VALUE="<%=$payname%>"></TD> </TR><TR> diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html index f2e5e998e..47fcfc127 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html @@ -12,7 +12,8 @@ my @menu = ( { title=>' ' }, { title=>'Purchase', size=>'+1', }, - { title=>'Purchase additional package*', url=>'order', 'indent'=>2 }, + { 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 @@ -30,14 +31,15 @@ push @menu, ( { title=>' ' }, +{ title=>'View my usage', url=>'view_usage', size=>'+1', }, { title=>'Setup my services', url=>'provision', size=>'+1', }, { title=>' ' }, { title=>'Change my information', size=>'+1', }, - { title=>'Change payment information*', url=>'change_bill', indent=>2 }, - { title=>'Change service address*', url=>'change_ship', indent=>2 }, - { title=>'Change password(s)*', url=>'hmmmFIXME', indent=>2 }, +# { title=>'Change payment information*', url=>'change_bill', indent=>2 }, +# { title=>'Change service address*', url=>'change_ship', indent=>2 }, + { title=>'Change password(s)', url=>'change_password', indent=>2 }, { title=>' ' }, @@ -82,8 +84,8 @@ foreach my $item ( @menu ) { %> +<TR><TD STYLE="border-right: 1px solid black" HEIGHT="100%"><BR><BR><BR><BR></TD></TR> + </TABLE> -<A HREF="passwd.html">(tempFIXME) Change password(s)</A><BR><BR> -* coming soon </TD> diff --git a/fs_selfservice/FS-SelfService/cgi/passwd.cgi b/fs_selfservice/FS-SelfService/cgi/passwd.cgi index d77876e37..87e5e6843 100755 --- a/fs_selfservice/FS-SelfService/cgi/passwd.cgi +++ b/fs_selfservice/FS-SelfService/cgi/passwd.cgi @@ -1,3 +1,4 @@ +#!/usr/bin/perl -T #!/usr/bin/perl -Tw use strict; diff --git a/fs_selfservice/FS-SelfService/cgi/payment_results.html b/fs_selfservice/FS-SelfService/cgi/payment_results.html index de6c54dae..9fe400faf 100644 --- a/fs_selfservice/FS-SelfService/cgi/payment_results.html +++ b/fs_selfservice/FS-SelfService/cgi/payment_results.html @@ -7,7 +7,7 @@ <%= if ( $error ) { $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error processing your payment: $error</FONT>!; } else { - $OUT .= 'Your payment was processed sucessfully. Thank you.'; + $OUT .= 'Your payment was processed successfully. Thank you.'; } %> </TD></TR></TABLE> <HR> diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_password.html b/fs_selfservice/FS-SelfService/cgi/process_change_password.html new file mode 100644 index 000000000..4fdee79f3 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/process_change_password.html @@ -0,0 +1,13 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> + +<FONT SIZE=4>Password changed for <%= $value %> <%= $label %>.</FONT> + +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> + diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html new file mode 100644 index 000000000..9347434ba --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html @@ -0,0 +1,13 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> + +<FONT SIZE=4>Package change successful.</FONT> + +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> + diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html new file mode 100755 index 000000000..79be5eba5 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html @@ -0,0 +1,13 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> + +<FONT SIZE=4>Package order successful.</FONT> + +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> + diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html b/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html new file mode 100644 index 000000000..851bbed44 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html @@ -0,0 +1,13 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> + +<FONT SIZE=4><%= $svc %> recharged successfully.</FONT> + +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> + diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html index 200a80dc9..3b812919a 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html +++ b/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html @@ -4,7 +4,7 @@ <%= include('myaccount_menu') %> <TD VALIGN="top"> -<FONT SIZE=4><%= $svc %> setup sucessfully.</FONT> +<FONT SIZE=4><%= $svc %> setup successfully.</FONT> </TD></TR></TABLE> <HR> diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html b/fs_selfservice/FS-SelfService/cgi/process_svc_external.html index 2328fa10f..19fec737f 100644 --- a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html +++ b/fs_selfservice/FS-SelfService/cgi/process_svc_external.html @@ -4,7 +4,7 @@ <%= include('myaccount_menu') %> <TD VALIGN="top"> -<FONT SIZE=4><%= $svc %> setup sucessfully.</FONT> +<FONT SIZE=4><%= $svc %> setup successfully.</FONT> <BR><BR>Your serial number is <%= sprintf("%010d-$title", $id) %> diff --git a/fs_selfservice/FS-SelfService/cgi/provision_list.html b/fs_selfservice/FS-SelfService/cgi/provision_list.html index 0f68dfe3c..88d1c848b 100644 --- a/fs_selfservice/FS-SelfService/cgi/provision_list.html +++ b/fs_selfservice/FS-SelfService/cgi/provision_list.html @@ -16,9 +16,11 @@ function areyousure(href, message) { ) { $OUT .= #'<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 BGCOLOR="#ffffff">'. - '<TR><TH BGCOLOR="#6666ff" COLSPAN=3>'. - $pkg->{'pkg'}. - '</TH></TR>'; + '<TR><TH BGCOLOR="#6666ff" COLSPAN=2>'. + $pkg->{'pkg'}. '</TH><TH BGCOLOR="#6666ff" >' . + qq!(<A style="font-size: smaller;color: #000000" HREF="! . + qq!${url}customer_change_pkg;pkgnum=$pkg->{'pkgnum'};pkg=$pkg->{'pkg'}">! . + 'change</A>)</TH></TR>'; my $col1 = "ffffff"; my $col2 = "dddddd"; @@ -75,7 +77,10 @@ function areyousure(href, message) { $OUT .= "<TR>$td COLSPAN=3 ALIGN=center>". qq!<A HREF="$link">!. 'Setup '. $part_svc->{'svc'}. '</A> '. '('. $part_svc->{'num_avail'}. ' available)'. - '</TD></TR>'; + '</TD></TR>' + #self-service only supports these services so far + if grep { $part_svc->{'svcdb'} eq $_ } qw( svc_acct svc_external ); + $col = $col eq $col1 ? $col2 : $col1; } diff --git a/fs_selfservice/FS-SelfService/cgi/recharge_results.html b/fs_selfservice/FS-SelfService/cgi/recharge_results.html index ec3ea2c7a..b1eb7cb7a 100644 --- a/fs_selfservice/FS-SelfService/cgi/recharge_results.html +++ b/fs_selfservice/FS-SelfService/cgi/recharge_results.html @@ -7,7 +7,7 @@ <%= if ( $error ) { $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error processing your prepaid card: $error</FONT>!; } else { - $OUT .= 'Prepaid card recharge sucessful!<BR><BR>'; + $OUT .= 'Prepaid card recharge successful!<BR><BR>'; $OUT .= '$'. sprintf('%.2f', $amount). ' added to your account.<BR><BR>' if $amount; diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 034a684c6..975203dc8 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -1,22 +1,26 @@ #!/usr/bin/perl -Tw use strict; -use vars qw($cgi $session_id $form_max $template_dir); +use vars qw($DEBUG $cgi $session_id $form_max $template_dir); use subs qw(do_template); use CGI; use CGI::Carp qw(fatalsToBrowser); use Text::Template; use HTML::Entities; +use Date::Format; use FS::SelfService qw( login customer_info invoice payment_info process_payment process_prepay - list_pkgs + list_pkgs order_pkg signup_info order_recharge part_svc_info provision_acct provision_external - unprovision_svc + unprovision_svc change_pkg + list_svcs list_svc_usage myaccount_passwd ); $template_dir = '.'; +$DEBUG = 1; + $form_max = 255; $cgi = new CGI; @@ -62,14 +66,19 @@ $session_id = $cgi->param('session'); #order|pw_list XXX ??? $cgi->param('action') =~ - /^(myaccount|view_invoice|make_payment|payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|provision|provision_svc|process_svc_acct|process_svc_external|delete_svc)$/ + /^(myaccount|view_invoice|make_payment|payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|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|change_password|process_change_password)$/ or die "unknown action ". $cgi->param('action'); my $action = $1; +warn "calling $action sub\n" + if $DEBUG; +$FS::SelfService::DEBUG = $DEBUG; my $result = eval "&$action();"; die $@ if $@; -if ( $result->{error} eq "Can't resume session" ) { #ick +if ( $result->{error} eq "Can't resume session" + || $result->{error} eq "Expired session" ) { #ick + do_template('login',{}); exit; } @@ -77,7 +86,8 @@ if ( $result->{error} eq "Can't resume session" ) { #ick #warn $result->{'open_invoices'}; #warn scalar(@{$result->{'open_invoices'}}); -warn "processing template $action\n"; +warn "processing template $action\n" + if $DEBUG; do_template($action, { 'session_id' => $session_id, 'action' => $action, #so the menu knows what tab we're on... @@ -99,6 +109,127 @@ sub view_invoice { } +sub customer_order_pkg { + my $init_data = signup_info( 'customer_session_id' => $session_id ); + return $init_data if ( $init_data->{'error'} ); + + my $customer_info = customer_info( 'session_id' => $session_id ); + return $customer_info if ( $customer_info->{'error'} ); + + return { + ( map { $_ => $init_data->{$_} } + qw( part_pkg security_phrase svc_acct_pop ), + ), + %$customer_info, + }; +} + +sub customer_change_pkg { + my $init_data = signup_info( 'customer_session_id' => $session_id ); + return $init_data if ( $init_data->{'error'} ); + + my $customer_info = customer_info( 'session_id' => $session_id ); + return $customer_info if ( $customer_info->{'error'} ); + + return { + ( map { $_ => $init_data->{$_} } + qw( part_pkg security_phrase svc_acct_pop ), + ), + ( map { $_ => $cgi->param($_) } + qw( pkgnum pkg ) + ), + %$customer_info, + }; +} + +sub process_order_pkg { + + my $results = ''; + + unless ( length($cgi->param('_password')) ) { + my $init_data = signup_info( 'customer_session_id' => $session_id ); + $results = { 'error' => $init_data->{msgcat}{empty_password} }; + $results = { 'error' => $init_data->{error} } if($init_data->{error}); + } + if ( $cgi->param('_password') ne $cgi->param('_password2') ) { + my $init_data = signup_info( 'customer_session_id' => $session_id ); + $results = { 'error' => $init_data->{msgcat}{passwords_dont_match} }; + $results = { 'error' => $init_data->{error} } if($init_data->{error}); + $cgi->param('_password', ''); + $cgi->param('_password2', ''); + } + + $results ||= order_pkg ( + 'session_id' => $session_id, + map { $_ => $cgi->param($_) } + qw( custnum pkgpart username _password _password2 sec_phrase popnum ) + ); + + + if ( $results->{'error'} ) { + $action = 'customer_order_pkg'; + return { + $cgi->Vars, + %{customer_order_pkg()}, + 'error' => '<FONT COLOR="#FF0000">'. $results->{'error'}. '</FONT>', + }; + } else { + return $results; + } + +} + +sub process_change_pkg { + + my $results = ''; + + $results ||= change_pkg ( + 'session_id' => $session_id, + map { $_ => $cgi->param($_) } + qw( pkgpart pkgnum ) + ); + + + if ( $results->{'error'} ) { + $action = 'customer_change_pkg'; + return { + $cgi->Vars, + %{customer_change_pkg()}, + 'error' => '<FONT COLOR="#FF0000">'. $results->{'error'}. '</FONT>', + }; + } else { + return $results; + } + +} + +sub process_order_recharge { + + my $results = ''; + + $results ||= order_recharge ( + 'session_id' => $session_id, + map { $_ => $cgi->param($_) } + qw( svcnum ) + ); + + + if ( $results->{'error'} ) { + $action = 'view_usage'; + if ($results->{'error'} eq '_decline') { + $results->{'error'} = "There has been an error processing your account. Please contact customer support." + } + return { + $cgi->Vars, + %{view_usage()}, + 'error' => '<FONT COLOR="#FF0000">'. $results->{'error'}. '</FONT>', + }; + } else { + return $results; + } + +} + sub make_payment { payment_info( 'session_id' => $session_id ); } @@ -107,6 +238,10 @@ sub payment_results { use Business::CreditCard; + #we should only do basic checking here for DoS attacks and things + #that couldn't be constructed by the web form... let process_payment() do + #the rest, it gives better error messages + $cgi->param('amount') =~ /^\s*(\d+(\.\d{2})?)\s*$/ or die "illegal amount"; #!!! my $amount = $1; @@ -120,9 +255,15 @@ sub payment_results { validate($payinfo) #or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; or die "invalid card"; #!!! - cardtype($payinfo) eq $cgi->param('card_type') - #or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); - or die "not a ". $cgi->param('card_type'); + + if ( $cgi->param('card_type') ) { + cardtype($payinfo) eq $cgi->param('card_type') + #or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); + or die "not a ". $cgi->param('card_type'); + } + + $cgi->param('paycvv') =~ /^\s*(.{0,4})\s*$/ or die "illegal CVV2"; + my $paycvv = $1; $cgi->param('month') =~ /^(\d{2})$/ or die "illegal month"; my $month = $1; @@ -160,6 +301,7 @@ sub payment_results { 'session_id' => $session_id, 'amount' => $amount, 'payinfo' => $payinfo, + 'paycvv' => $paycvv, 'month' => $month, 'year' => $year, 'payname' => $payname, @@ -257,6 +399,58 @@ sub delete_svc { ); } +sub view_usage { + list_svcs( + 'session_id' => $session_id, + 'svcdb' => 'svc_acct', + 'ncancelled' => 1, + ); +} + +sub view_usage_details { + list_svc_usage( + 'session_id' => $session_id, + 'svcnum' => $cgi->param('svcnum'), + 'beginning' => $cgi->param('beginning') || '', + 'ending' => $cgi->param('ending') || '', + ); +} + +sub change_password { + list_svcs( + 'session_id' => $session_id, + 'svcdb' => 'svc_acct', + ); +}; + +sub process_change_password { + + my $result = myaccount_passwd( + 'session_id' => $session_id, + map { $_ => $cgi->param($_) } qw( svcnum new_password new_password2 ) + ); + + if ( exists $result->{'error'} && $result->{'error'} ) { + + $action = 'change_password'; + return { + $cgi->Vars, + %{ list_svcs( 'session_id' => $session_id, + 'svcdb' => 'svc_acct', + ) + }, + #'svcnum' => $cgi->param('svcnum'), + 'error' => $result->{'error'} + }; + + } else { + + return $result; + + } + +} + #-- sub do_template { diff --git a/fs_selfservice/FS-SelfService/cgi/signup.cgi b/fs_selfservice/FS-SelfService/cgi/signup.cgi index d2ad0d64b..1514db52a 100755 --- a/fs_selfservice/FS-SelfService/cgi/signup.cgi +++ b/fs_selfservice/FS-SelfService/cgi/signup.cgi @@ -1,7 +1,5 @@ #!/usr/bin/perl -T #!/usr/bin/perl -Tw -# -# $Id: signup.cgi,v 1.2 2005-03-12 14:35:12 ivan Exp $ use strict; use vars qw( @payby $cgi $init_data @@ -178,6 +176,10 @@ if ( ( defined($cgi->param('magic')) && $cgi->param('magic') eq 'process' ) or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); } + if ($init_data->{emailinvoiceonly} && (length $cgi->param('invoicing_list') < 1)) { + $error ||= $init_data->{msgcat}{illegal_or_empty_text}; + } + unless ( $error ) { my $rv = new_customer( { map { $_ => scalar($cgi->param($_)) } @@ -229,6 +231,8 @@ sub print_form { 'error' => $error, }; + $r->{pkgpart} ||= $r->{default_pkgpart}; + $r->{referral_custnum} = $r->{'ref'}; #$cgi->delete('ref'); #$cgi->delete('init_popstate'); @@ -276,9 +280,10 @@ sub print_okay { } #global for template - my $pkg = ( grep { $_->{'pkgpart'} eq $param{'pkgpart'} } - @{ $init_data->{'part_pkg'} } - )[0]->{'pkg'}; + my $part_pkg = ( grep { $_->{'pkgpart'} eq $param{'pkgpart'} } + @{ $init_data->{'part_pkg'} } + )[0]; + my $pkg = $part_pkg->{'pkg'}; if ( $ieak_template && $user_agent->windows && $user_agent->ie ) { #send an IEAK config @@ -295,6 +300,7 @@ sub print_okay { exch => $exch, loc => $loc, pkg => $pkg, + part_pkg => \$part_pkg, }); } } diff --git a/fs_selfservice/FS-SelfService/cgi/signup.html b/fs_selfservice/FS-SelfService/cgi/signup.html index 2ab07b37e..c2c5d700a 100755 --- a/fs_selfservice/FS-SelfService/cgi/signup.html +++ b/fs_selfservice/FS-SelfService/cgi/signup.html @@ -19,6 +19,15 @@ <INPUT TYPE="hidden" NAME="action" VALUE="process_signup"> <INPUT TYPE="hidden" NAME="referral_custnum" VALUE="<%= $referral_custnum %>"> <INPUT TYPE="hidden" NAME="ss" VALUE=""> +<input type="hidden" name="payby" /> +<%= + $OUT = join("\n",map { my $method = $_ ; map { qq|<input type="hidden" name="${method}_$_" />| } qw / payinfo payinfo1 payinfo2 payname paycvv month year type / } @payby); +%> + +<%= + $OUT = join("\n", map { qq|<input type="hidden" name="$_" />| } qw / promo_code reg_code pkgpart username _password _password2 sec_phrase popnum / ); +%> + Where did you hear about our service? <SELECT NAME="refnum"> <%= $OUT .= '<OPTION VALUE="">' unless $refnum; @@ -90,34 +99,30 @@ Contact Information <TR><TD> <%= + $OUT =''; + unless ( $emailinvoiceonly ) { $OUT .= '<INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST"'; my @invoicing_list = split(', ', $invoicing_list ); $OUT .= ' CHECKED' if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list; - $OUT .= '>'; + $OUT .= '> Postal mail invoice'; } %> - Postal mail invoice + </TD></TR> -<TR><TD>Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="<%= join(', ', grep { $_ ne 'POST' } split(', ', $invoicing_list ) ) %>"> +<TR><TD><%= $OUT = ( $emailinvoiceonly ? q|<font color="#ff0000">*</font>| : q|| ) %> Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="<%= join(', ', grep { $_ ne 'POST' } split(', ', $invoicing_list ) ) %>"> </TD></TR> -<%= scalar(@payby) > 1 ? '<TR><TD>Billing type</TD></TR>' : '' %> -</TABLE> +<%= ( scalar(@payby) > 1 or 1 ) ? '<TR><TD>Billing type ' : '' %> +<!--</TABLE> <TABLE BGCOLOR="#c0c0c0" BORDER=1 WIDTH="100%"> -<TR> +<TR>--> <%= my $cardselect = '<SELECT NAME="CARD_type"><OPTION></OPTION>'; - my %types = ( - 'VISA' => 'VISA card', - 'MasterCard' => 'MasterCard', - 'Discover' => 'Discover card', - 'American Express' => 'American Express card', - ); - foreach ( keys %types ) { - $selected = $CARD_type eq $types{$_} ? 'SELECTED' : ''; - $cardselect .= qq!<OPTION $selected VALUE="$types{$_}">$_</OPTION>!; + foreach ( keys %card_types ) { + $selected = $CARD_type eq $card_types{$_} ? 'SELECTED' : ''; + $cardselect .= qq!<OPTION $selected VALUE="$card_types{$_}">$_</OPTION>!; } $cardselect .= '</SELECT>'; @@ -126,7 +131,7 @@ Contact Information 'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="">!, 'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!, 'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="">!, - 'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!, + 'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" NAME="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!, 'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", "12-2037"). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="Accounts Payable">!, 'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("COMP"), 'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="" MAXLENGTH=80>!, @@ -134,13 +139,13 @@ Contact Information if ( $cvv_enabled ) { foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $payby{$payby} .= qq!<BR>CVV2 (<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>) <INPUT TYPE="text" NAME=${payby}_paycvv VALUE="" SIZE=4 MAXLENGTH=4>!; + $payby{$payby} .= qq!<TR><TD ALIGN="right">CVV2 (<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)</TD><TD><INPUT TYPE="text" NAME=${payby}_paycvv VALUE="" SIZE=4 MAXLENGTH=4></TD></TR>!; } } my( $account, $aba ) = split('@', $payinfo); my %paybychecked = ( - 'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!, + 'CARD' => qq!<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%"><TR><TD ALIGN="right"><font color="#ff0000">*</font> Card type</TD><TD>$cardselect</TD></TR><TR><TD ALIGN="right"><font color="#ff0000">*</font> Card number</TD><TD><INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19></TD></TR><TR><TD ALIGN="right"><font color="#ff0000">*</font> Expration</TD><TD>!. expselect("CARD", $paydate). qq!</TD></TR><TR><TD ALIGN="right"><font color="#ff0000">*</font> Name on card</TD><TD><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname"></TD></TR>!, 'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="$payname">!, 'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!, 'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="$payname">!, @@ -152,29 +157,43 @@ Contact Information if ( $cvv_enabled ) { foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $paybychecked{$payby} .= qq!<BR>CVV2 (<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>) <INPUT TYPE="text" NAME=${payby}_paycvv VALUE="$paycvv" SIZE=4 MAXLENGTH=4>!; + $paybychecked{$payby} .= qq!<TR><TD ALIGN="right">CVV2 (<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)</TD><TD><INPUT TYPE="text" NAME=${payby}_paycvv VALUE="$paycvv" SIZE=4 MAXLENGTH=4></TD></TR>!; } } +use Tie::IxHash; +use HTML::Widgets::SelectLayers; + + my %payby_index = ( 'CARD' => qq/Credit Card/, + 'DCRD' => qq/Credit Card/, + 'CHEK' => qq/Check/, + 'DCHK' => qq/Check/, + 'LECB' => qq/Phone Bill Billing/, + 'BILL' => qq/Billing/, + 'COMP' => qq/Complimentary/, + 'PREPAY' => qq/Prepaid Card/, + ); + + +tie my %options, 'Tie::IxHash', (); + +foreach my $payby_option ( @payby ) { + $options{$payby_option} = $payby_index{$payby_option}; +} + +HTML::Widgets::SelectLayers->new( + options => \%options, + selected_layer => 'CARD', + form_name => 'dummy', + html_between => '</td></tr></table>', + form_action => 'dummy.cgi', + layer_callback => sub { my $layer = shift; return $paybychecked{$layer}. '</TABLE>'; }, +)->html; - for (@payby) { - if ( scalar(@payby) == 1) { - $OUT .= '<TD VALIGN=TOP>'. - qq!<INPUT TYPE="hidden" NAME="payby" VALUE="$_">!. - "$paybychecked{$_}</TD>"; - } else { - $OUT .= qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!; - if ($payby eq $_) { - $OUT .= qq! CHECKED> $paybychecked{$_}</TD>!; - } else { - $OUT .= qq!> $payby{$_}</TD>!; - } - } - } %> -</TR></TABLE><font color="#ff0000">*</font> required fields for each billing type -<BR><BR>First package +</TR></TABLE><font color="#ff0000">*</font> required fields +<FORM name="signup_form" action="<%= $self_url %>" METHOD="POST" onsubmit="return fixup_form();"><BR><BR>First package <INPUT TYPE="hidden" NAME="promo_code" VALUE="<%= $promo_code %>"> <INPUT TYPE="hidden" NAME="reg_code" VALUE="<%= $reg_code %>"> <TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%"> @@ -182,7 +201,8 @@ Contact Information <TD COLSPAN=2><SELECT NAME="pkgpart"> <%= - $OUT .= '<OPTION VALUE="">(none)' unless scalar(@part_pkg ) ==1; + $OUT .= '<OPTION VALUE="">(none)' + unless scalar(@part_pkg) == 1 or $default_pkgpart; foreach my $part_pkg ( @part_pkg ) { $OUT .= '<OPTION VALUE="'. $part_pkg->{'pkgpart'}. '"'; $OUT .= ' SELECTED' if $pkgpart && $part_pkg->{'pkgpart'} == $pkgpart; @@ -232,5 +252,87 @@ ENDOUT } %> </TABLE> -<BR><BR><INPUT TYPE="submit" NAME="signup" VALUE="Signup"> + +<%= +if ( @optional_packages ) { + my @html; + foreach my $ii ( 0 .. $#optional_packages) { + my $friendly_index = $ii + 1; + if ($optional_packages[$ii]) { + push @html, qq|<BR>Optional Package #$friendly_index <br />|,'<table bgcolor="#c0c0c0"><tr><td>'; + + push @html, qq|<select name="optional_package${ii}">|; + push @html, qq|<option value="none"></option>|; + push @html, map { qq|<option value="$_->{pkgpart}">$_->{pkg}</option>| } @{$optional_packages[$ii]}; + push @html, q|</select>|; + + push @html, '</td></tr></table>'; + } + $OUT = join("\n", @html); + } +} else { +$OUT = '' +} +%> + +<BR><INPUT TYPE="submit" NAME="signup" VALUE="Signup"> +<script language="JavaScript"> + +function fixup_form() { + + // copy payment method data up to OneTrueForm + + var payment_method_elements = new Array( 'payinfo', 'payinfo1', 'payinfo2', 'payname', 'paycvv' , 'month', 'year','type' ); + var payment_method_form_name = document.OneTrueForm.select.options[document.OneTrueForm.select.selectedIndex].value; + document.OneTrueForm.elements['payby'].value = payment_method_form_name; + var payment_method_form = document.forms[payment_method_form_name]; + + for ( ii = 0 ; ii < payment_method_elements.length ; ii++ ) { + var true_element_name = payment_method_form_name + '_' + payment_method_elements[ii]; + copyelement ( payment_method_form.elements[true_element_name], + document.OneTrueForm.elements[true_element_name] ); + } + + // Copy signup details to OneTrueForm + + var signup_elements = new Array ( 'promo_code', 'reg_code', + 'pkgpart', 'username', + '_password', '_password2', + 'sec_phrase', 'popnum' ); + + for ( ii = 0 ; ii < signup_elements.length ; ii ++ ) { + copyelement ( document.signup_form.elements[signup_elements[ii]], + document.OneTrueForm.elements[signup_elements[ii]]); + } + + document.OneTrueForm.submit(); + return false; +} + +function copyelement(from, to) { +// alert ( from + ' ' + to ); + + if ( from == undefined ) { + to.value = ''; + } else { + if ( from.type == 'select-one' ) { + to.value = from.options[from.selectedIndex].value; + } else if ( from.type == 'checkbox' ) { + if ( from.checked ) { + to.value = from.value; + } else { + to.value = ''; + } + } else { + if ( from.value == undefined ) { + to.value = ''; + } else { + to.value = from.value; + } + } +// alert(from.name + " (" + from.type + "): " + to.name + " => " + to.value); + } +} + +</script> </FORM></BODY></HTML> diff --git a/fs_selfservice/FS-SelfService/cgi/success-delayed.html b/fs_selfservice/FS-SelfService/cgi/success-delayed.html new file mode 100644 index 000000000..5eeed5957 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/success-delayed.html @@ -0,0 +1,16 @@ +<HTML><HEAD><TITLE>Signup successful</TITLE></HEAD> +<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>Signup successful</FONT><BR><BR> +Thanks for signing up! +<BR><BR> +Signup information for <%= $email_name %>: +<BR><BR> +Username: <%= $username %><BR> +Password: <%= $password %><BR> +Access number: (<%= $ac %>) / <%= $exch %> - <%= $local %><BR> +Package: <%= $pkg %><BR> +Charge: <%= sprintf('$%.2f', $part_pkg->{'options'}->{'setup_fee'}) %><BR> +In <%= $part_pkg->{'options'}->{'free_days'} %> days you will be charged + <%= sprintf('$%.2f', $part_pkg->{'options'}->{'recur_fee'}) %> +and <%= $part_pkg->{'freq_pretty'} %> thereafter.<BR> + +</BODY></HTML> diff --git a/fs_selfservice/FS-SelfService/cgi/view_invoice.html b/fs_selfservice/FS-SelfService/cgi/view_invoice.html index 72d061980..ad2f4f419 100644 --- a/fs_selfservice/FS-SelfService/cgi/view_invoice.html +++ b/fs_selfservice/FS-SelfService/cgi/view_invoice.html @@ -4,9 +4,7 @@ <%= include('myaccount_menu') %> <TD VALIGN="top"> -<FONT SIZE="-1"><PRE> -<%= $invoice_text %> -</FONT></PRE> +<%= $invoice_html %> </TD></TR></TABLE> <HR> diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage.html b/fs_selfservice/FS-SelfService/cgi/view_usage.html new file mode 100644 index 000000000..79d07d4df --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/view_usage.html @@ -0,0 +1,59 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> + +<FONT SIZE=4>Service usage</FONT><BR><BR> + +<%= if ( $error ) { + $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!; +} ''; %> + +<TABLE BGCOLOR="#cccccc"> + <TR> + <TH ALIGN="left">Account</TH> + <TH ALIGN="right">Time remaining</TH> + <TH ALIGN="right">Upload remaining</TH> + <TH ALIGN="right">Download remaining</TH> + <TH ALIGN="right">Total remaining</TH> + </TR> +<%= foreach my $svc ( @svcs ) { + my $link = "${url}view_usage_details;". + "svcnum=$svc->{'svcnum'};beginning=0;ending=0"; + $OUT .= '<TR><TD>'; + $OUT .= qq!<A HREF="$link">!. $svc->{'label'}. ': '. $svc->{'value'}.'</A>'; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'seconds'}; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'upbytes'}; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'downbytes'}; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'totalbytes'}; + $OUT .= '</TD></TR>'; + if ( $svc->{'recharge_amount'} ) { + my $link = "${url}process_order_recharge;". + "svcnum=$svc->{'svcnum'}"; + $OUT .= '<TR><TD ALIGN="right">'; + $OUT .= qq!<A HREF="$link">!.'Recharge for $'; + $OUT .= $svc->{'recharge_amount'} . '</A> with'; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'recharge_seconds'} if $svc->{'recharge_seconds'}; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'recharge_upbytes'} if $svc->{'recharge_upbytes'}; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'recharge_downbytes'} if $svc->{'recharge_downbytes'}; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= $svc->{'recharge_totalbytes'} if $svc->{'recharge_totalbytes'}; + $OUT .= '</TD></TR>'; + } + } %> + +</TABLE> +<BR> + +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage_details.html b/fs_selfservice/FS-SelfService/cgi/view_usage_details.html new file mode 100644 index 000000000..9067755b0 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/view_usage_details.html @@ -0,0 +1,66 @@ +<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> +<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('myaccount_menu') %> +<TD VALIGN="top"> + +<FONT SIZE=4>Service usage details</FONT><BR><BR> + +<%= if ( $error ) { + $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!; +} ''; %> + +<TABLE WIDTH="100%"> + <TR> + <TD WIDTH="50%"> +<%= if ($previous < $beginning) { + $OUT .= qq!<A HREF="${url}view_usage_details;svcnum=$svcnum;beginning=!; + $OUT .= qq!$previous;ending=$beginning">Previous period</A>!; + }else{ + ''; + } %> + </TD> + <TD WIDTH="50%" ALIGN="right"> +<%= if ($next > $ending) { + $OUT .= qq!<A HREF="${url}view_usage_details;svcnum=$svcnum;beginning=!; + $OUT .= qq!$ending;ending=$next">Next period</A>!; + }else{ + ''; + }%> + </TD> + </TR> +</TABLE> +<TABLE BGCOLOR="#cccccc"> + <TR> + <TH ALIGN="left">Account</TH> + <TH ALIGN="right">Start Time</TH> + <TH ALIGN="right">Duration</TH> + </TR> +<%= my $total = 0; + foreach my $usage ( @usage ) { + $OUT .= '<TR><TD>'; + $OUT .= $usage->{'username'}; + $OUT .= '</TD><TD ALIGN="right">'; + $OUT .= Date::Format::time2str('%T%P %a %b %o %Y', $usage->{'acctstarttime'}); + $OUT .= '</TD><TD ALIGN="right">'; + my $duration = $usage->{'acctstoptime'} - $usage->{'acctstarttime'}; + $total += $duration; + my $h = int($duration/3600); + my $m = sprintf("%02d", int(($duration % 3600) / 60)); + my $s = sprintf("%02d", $duration % 60); + $OUT .= "$h:$m:$s"; + $OUT .= '</TD></TR>'; + } + my $h = int($total/3600); + my $m = sprintf("%02d", int(($total % 3600) / 60)); + my $s = sprintf("%02d", $total % 60); + $OUT .= qq!<TR><TD></TD><TD></TD><TD ALIGN="right">========</TD></TR>!; + $OUT .= qq!<TR><TD></TD><TD></TD><TD ALIGN="right">$h:$m:$s</TD></TR>!; %> + +</TABLE> +<BR> + +</TD></TR></TABLE> +<HR> +<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> +</BODY></HTML> |