From 44e3eff0aa6e7bdb7f4ecd9ee1ddf141e1b68af3 Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 7 Apr 2002 05:56:09 +0000 Subject: [PATCH] working message catalogs (not used for enough yet) - almost (but not quite) closes Bug#385 - still have to catalog the backend things triggered by signup server. --- FS/FS/Conf.pm | 6 ++++ FS/FS/msgcat.pm | 11 ++++-- bin/populate-msgcat | 25 +++++++++++--- conf/show-msgcat-codes | 0 fs_signup/FS-SignupClient/cgi/signup.cgi | 17 +++++++--- fs_signup/fs_signup_server | 5 +++ httemplate/browse/msgcat.cgi | 4 +-- httemplate/docs/install.html | 5 +++ httemplate/edit/msgcat.cgi | 57 ++++++++++++++++++++++++++++++++ httemplate/edit/process/msgcat.cgi | 19 +++++++++++ 10 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 conf/show-msgcat-codes create mode 100755 httemplate/edit/msgcat.cgi create mode 100644 httemplate/edit/process/msgcat.cgi diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index b39c8217d..6e588208a 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -873,6 +873,12 @@ httemplate/docs/config.html 'select_enum' => [ qw(CARD PREPAY BILL COMP) ], }, + { + 'key' => 'show-msgcat-codes', + 'section' => 'UI', + 'description' => 'Show msgcat codes in error messages. Turn this option on before reporting errors to the mailing list.', + 'type' => 'checkbox', + }, ); diff --git a/FS/FS/msgcat.pm b/FS/FS/msgcat.pm index 53a7aeee6..3eca14b83 100644 --- a/FS/FS/msgcat.pm +++ b/FS/FS/msgcat.pm @@ -1,7 +1,7 @@ package FS::msgcat; use strict; -use vars qw( @ISA @EXPORT_OK $conf $locale ); +use vars qw( @ISA @EXPORT_OK $conf $locale $debug ); use Exporter; use FS::UID; use FS::Record qw( qsearchs ); @@ -13,6 +13,7 @@ use FS::Conf; $FS::UID::callback{'msgcat'} = sub { $conf = new FS::Conf; $locale = $conf->config('locale') || 'en_US'; + $debug = $conf->exists('show-msgcat-codes') }; =head1 NAME @@ -140,6 +141,10 @@ Returns the full message for the supplied message code. =cut sub gettext { + $debug ? geterror(@_) : _gettext(@_); +} + +sub _gettext { my $msgcode = shift; my $msgcat = qsearchs('msgcat', { 'msgcode' => $msgcode, @@ -163,7 +168,7 @@ code. sub geterror { my $msgcode = shift; - my $msg = gettext($msgcode); + my $msg = _gettext($msgcode); if ( $msg eq $msgcode ) { "Error code $msgcode (message for locale $locale not found)"; } else { @@ -175,7 +180,7 @@ sub geterror { =head1 BUGS -i18n/l10n is a mess. +i18n/l10n, eek =head1 SEE ALSO diff --git a/bin/populate-msgcat b/bin/populate-msgcat index fa88732ce..51f04c10f 100755 --- a/bin/populate-msgcat +++ b/bin/populate-msgcat @@ -1,23 +1,26 @@ -#!/usr/bin/perl +#!/usr/bin/perl -Tw +use strict; use FS::UID qw(adminsuidsetup); +use FS::Record qw(qsearch); use FS::msgcat; my $user = shift or die &usage; adminsuidsetup $user; -foreach my $del_msgcat ( qsearchs('msgcat', {}) ) { +foreach my $del_msgcat ( qsearch('msgcat', {}) ) { my $error = $del_msgcat->delete; die $error if $error; } my %messages = messages(); -foreach $msgcode ( keys %messages ) { +foreach my $msgcode ( keys %messages ) { foreach my $locale ( keys %{$messages{$msgcode}} ) { my $msgcat = new FS::msgcat( { 'msgcode' => $msgcode, 'locale' => $locale, + 'msg' => $messages{$msgcode}{$locale}, }); my $error = $msgcat->insert; die $error if $error; @@ -32,8 +35,20 @@ sub messages { ( - 'msgcode' => { - 'en_US' => 'Message', + 'passwords_dont_match' => { + 'en_US' => "Passwords don't match", + }, + + 'invalid_card' => { + 'en_US' => 'Invalid credit card number', + }, + + 'unknown_card_type' => { + 'en_US' => 'Unknown card type', + }, + + 'not_a' => { + 'en_US' => 'Not a ', }, ); diff --git a/conf/show-msgcat-codes b/conf/show-msgcat-codes new file mode 100644 index 000000000..e69de29bb diff --git a/fs_signup/FS-SignupClient/cgi/signup.cgi b/fs_signup/FS-SignupClient/cgi/signup.cgi index 7cf4230e6..46621d1e8 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.cgi +++ b/fs_signup/FS-SignupClient/cgi/signup.cgi @@ -1,6 +1,6 @@ #!/usr/bin/perl -Tw # -# $Id: signup.cgi,v 1.18 2002-04-07 00:00:40 ivan Exp $ +# $Id: signup.cgi,v 1.19 2002-04-07 05:56:08 ivan Exp $ use strict; use vars qw( @payby $cgi $locales $packages $pops $init_data $error @@ -120,15 +120,22 @@ if ( defined $cgi->param('magic') ) { $error = ''; if ( $cgi->param('_password') ne $cgi->param('_password2') ) { - $error = "Passwords don't match"; #msgcat + $error = $init_data->{msgcat}{passwords_dont_match}; #msgcat $password = ''; $password2 = ''; } else { $password2 = $cgi->param('_password2'); - if ( $payby eq 'CARD' && $cgi->param('CARD_type') - && cardtype($payinfo) ne $cgi->param('CARD_type') ) { - $error = 'Not an '. $cgi->param('CARD_type'). '| - is: |'. cardtype($payinfo). '|'; #msgcat + if ( $payby eq 'CARD' && $cgi->param('CARD_type') ) { + $payinfo =~ s/\D//g; + + $payinfo =~ /^(\d{13,16})$/ + or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; + $payinfo = $1; + validate($payinfo) + or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; + cardtype($payinfo) eq $cgi->param('CARD_type') + or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); } $error ||= new_customer ( { diff --git a/fs_signup/fs_signup_server b/fs_signup/fs_signup_server index b902d9ff4..f3030e9ae 100755 --- a/fs_signup/fs_signup_server +++ b/fs_signup/fs_signup_server @@ -13,6 +13,7 @@ use FS::Conf; use FS::Record qw( qsearch qsearchs ); use FS::cust_main_county; use FS::cust_main; +use FS::msgcat qw(gettext); use vars qw( $opt $Debug ); @@ -67,6 +68,10 @@ while (1) { 'payby' => [ $conf->config('signup_server-payby') ], + 'msgcat' => { map { $_=>gettext($_) } qw( + passwords_dont_match invalid_card unknown_card_type not_a + ) } + }; warn "[fs_signup_server] Sending init data...\n" if $Debug; diff --git a/httemplate/browse/msgcat.cgi b/httemplate/browse/msgcat.cgi index 5dab5cfc9..774473b36 100755 --- a/httemplate/browse/msgcat.cgi +++ b/httemplate/browse/msgcat.cgi @@ -18,8 +18,8 @@ my $widget = new HTML::Widgets::SelectLayers( $html .= ''; #foreach my $msgcat ( sort { $a->msgcode cmp $b->msgcode } - # qsearchs('msgcat', { 'locale' => $layer } ) ) { - foreach my $msgcat ( qsearchs('msgcat', { 'locale' => $layer } ) ) { + # qsearch('msgcat', { 'locale' => $layer } ) ) { + foreach my $msgcat ( qsearch('msgcat', { 'locale' => $layer } ) ) { $html .= ''. $msgcat->msgnum. ''. ''. $msgcat->msgcode. ''. ''. $msgcat->msg. ''; diff --git a/httemplate/docs/install.html b/httemplate/docs/install.html index 2ad75b15e..4870c7db7 100644 --- a/httemplate/docs/install.html +++ b/httemplate/docs/install.html @@ -181,6 +181,11 @@ $ freeside-adduser -h /usr/local/etc $ su freeside $ bin/fs-setup username +
  • As the freeside UNIX user, run bin/populate-msgcat username to populate the message catalog, passing the username of a Freeside user you created above: +
    +$ su freeside
    +$ bin/populate-msgcat username
    +
  • freeside-queued was installed with the Perl modules. Start it now and ensure that is run upon system startup.
  • Now proceed to the initial administration of your installation. diff --git a/httemplate/edit/msgcat.cgi b/httemplate/edit/msgcat.cgi new file mode 100755 index 000000000..5d256c05b --- /dev/null +++ b/httemplate/edit/msgcat.cgi @@ -0,0 +1,57 @@ + +<% + +print header("Message catalog", menubar( +# 'Main Menu' => $p, +)), '
    '; + +print qq!Error: !. $cgi->param('error') + if $cgi->param('error'); + +my $widget = new HTML::Widgets::SelectLayers( + 'selected_layer' => 'en_US', + 'options' => { 'en_US'=>'en_US' }, + 'form_action' => 'process/msgcat.cgi', + 'layer_callback' => sub { + my $layer = shift; + my $html = qq!!. + "
    Messages for locale $layer
    ". table(). + "Code". + "Message"; + $html .= "en_US Message" unless $layer eq 'en_US'; + $html .= ''; + + #foreach my $msgcat ( sort { $a->msgcode cmp $b->msgcode } + # qsearch('msgcat', { 'locale' => $layer } ) ) { + foreach my $msgcat ( qsearch('msgcat', { 'locale' => $layer } ) ) { + $html .= + ''. $msgcat->msgnum. ''. $msgcat->msgcode. ''. + '!; + unless ( $layer eq 'en_US' ) { + my $en_msgcat = qsearchs('msgcat', { + 'locale' => 'en_US', + 'msgcode' => $msgcat->msgcode, + } ); + $html .= ''. $en_msgcat->msg. ''; + } + $html .= ''; + } + + $html .= '
    '; + + $html; + }, + +); + +print $widget->html; + +print < + + +END + +%> diff --git a/httemplate/edit/process/msgcat.cgi b/httemplate/edit/process/msgcat.cgi new file mode 100644 index 000000000..ab30f06b5 --- /dev/null +++ b/httemplate/edit/process/msgcat.cgi @@ -0,0 +1,19 @@ +<% + +my $error; +foreach my $param ( grep { /^\d+$/ } $cgi->param ) { + my $old = qsearchs('msgcat', { msgnum=>$param } ); + my $new = new FS::msgcat { $old->hash }; + $new->msg($cgi->param($param)); + $error = $new->replace($old); + last if $error; +} + +if ( $error ) { + $cgi->param('error',$error); + print $cgi->redirect($p. "msgcat.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(3). "browse/msgcat.cgi"); +} + +%> -- 2.11.0