fix 'Can't call method "setup" on an undefined value' error when using into rates...
[freeside.git] / FS / FS / msgcat.pm
index 53a7aee..02ee3a3 100644 (file)
@@ -1,19 +1,12 @@
 package FS::msgcat;
 
 use strict;
-use vars qw( @ISA @EXPORT_OK $conf $locale );
+use vars qw( @ISA );
 use Exporter;
 use FS::UID;
-use FS::Record qw( qsearchs );
-use FS::Conf;
+use FS::Record; # qw( qsearchs );
 
 @ISA = qw(FS::Record);
-@EXPORT_OK = qw( gettext geterror );
-
-$FS::UID::callback{'msgcat'} = sub {
-  $conf = new FS::Conf;
-  $locale = $conf->config('locale') || 'en_US';
-};
 
 =head1 NAME
 
@@ -21,14 +14,8 @@ FS::msgcat - Object methods for message catalog entries
 
 =head1 SYNOPSIS
 
-  use FS::msgcat qw(gettext);
-
-  #simple interface for retreiving messages...
-  $message = gettext('msgcode');
-  #or errors (includes the error code)
-  $message = geterror('msgcode');
+  use FS::msgcat;
 
-  #maintenance stuff
   $record = new FS::msgcat \%hash;
   $record = new FS::msgcat { 'column' => 'value' };
 
@@ -57,13 +44,16 @@ from FS::Record.  The following fields are currently supported:
 
 =back
 
+If you just want to B<use> message catalogs, see L<FS::Msgcat>.
+
 =head1 METHODS
 
 =over 4
 
 =item new HASHREF
 
-Creates a new example.  To add the example to the database, see L<"insert">.
+Creates a new message catalog entry.  To add the message catalog entry to the
+database, see L<"insert">.
 
 Note that this stores the hash reference, not a distinct copy of the hash it
 points to.  You can ask the object for a copy with the I<hash> method.
@@ -102,8 +92,8 @@ returns the error, otherwise returns false.
 
 =item check
 
-Checks all fields to make sure this is a valid example.  If there is
-an error, returns the error, otherwise returns false.  Called by the insert
+Checks all fields to make sure this is a valid message catalog entry.  If there
+is an error, returns the error, otherwise returns false.  Called by the insert
 and replace methods.
 
 =cut
@@ -117,69 +107,171 @@ sub check {
   my $error =
     $self->ut_numbern('msgnum')
     || $self->ut_text('msgcode')
-    || $self->ut_text('msg')
+#    || $self->ut_text('msg')
   ;
   return $error if $error;
 
   $self->locale =~ /^([\w\@]+)$/ or return "illegal locale: ". $self->locale;
   $self->locale($1);
 
-  ''; #no error
+  $self->SUPER::check
 }
 
-=back
-
-=head1 SUBROUTINES
 
-=over 4
+sub _upgrade_data { #class method
+  my( $class, %opts) = @_;
 
-=item gettext MSGCODE
+  #"repopulate_msgcat", false laziness w/FS::Setup::populate_msgcat
 
-Returns the full message for the supplied message code.
+  my %messages = _legacy_messages();
 
-=cut
+  foreach my $msgcode ( keys %messages ) {
+    foreach my $locale ( keys %{$messages{$msgcode}} ) {
+      my %msgcat = (
+        'msgcode' => $msgcode,
+        'locale'  => $locale,
+        #'msg'     => $messages{$msgcode}{$locale},
+      );
+      #my $msgcat = qsearchs('msgcat', \%msgcat);
+      my $msgcat = FS::Record::qsearchs('msgcat', \%msgcat); #wtf?
+      next if $msgcat;
 
-sub gettext {
-  my $msgcode = shift;
-  my $msgcat = qsearchs('msgcat', {
-    'msgcode' => $msgcode,
-    'locale' => $locale
-  } );
-  if ( $msgcat ) {
-    $msgcat->msg;
-  } else {
-    warn "WARNING: message for msgcode $msgcode in locale $locale not found";
-    $msgcode;
+      $msgcat = new FS::msgcat( {
+        %msgcat,
+        'msg' => $messages{$msgcode}{$locale},
+      } );
+      my $error = $msgcat->insert;
+      die $error if $error;
+    }
   }
 
 }
 
-=item geterror MSGCODE
+sub _legacy_messages {
 
-Returns the full message for the supplied message code, including the message
-code.
+  #  'msgcode' => {
+  #    'en_US' => 'Message',
+  #  },
 
-=cut
+  (
 
-sub geterror {
-  my $msgcode = shift;
-  my $msg = gettext($msgcode);
-  if ( $msg eq $msgcode ) {
-    "Error code $msgcode (message for locale $locale not found)";
-  } else {
-    "$msg (error code $msgcode)";
-  }
+    '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 ',
+    },
+
+    'empty_password' => {
+      'en_US' => 'Empty password',
+    },
+
+    'no_access_number_selected' => {
+      'en_US' => 'No access number selected',
+    },
+
+    'illegal_text' => {
+      'en_US' => 'Illegal (text)',
+      #'en_US' => 'Only letters, numbers, spaces, and the following punctuation symbols are permitted: ! @ # $ % & ( ) - + ; : \' " , . ? / in field',
+    },
+
+    'illegal_or_empty_text' => {
+      'en_US' => 'Illegal or empty (text)',
+      #'en_US' => 'Only letters, numbers, spaces, and the following punctuation symbols are permitted: ! @ # $ % & ( ) - + ; : \' " , . ? / in required field',
+    },
+
+    'illegal_username' => {
+      'en_US' => 'Illegal username',
+    },
+
+    'illegal_password' => {
+      'en_US' => 'Illegal password (',
+    },
+
+    'illegal_password_characters' => {
+      'en_US' => ' characters)',
+    },
+
+    'username_in_use' => {
+      'en_US' => 'Username in use',
+    },
+
+    'phonenum_in_use' => {
+      'en_US' => 'Phone number in use',
+    },
+
+    'illegal_email_invoice_address' => {
+      'en_US' => 'Illegal email invoice address',
+    },
+
+    'illegal_name' => {
+      'en_US' => 'Illegal (name)',
+      #'en_US' => 'Only letters, numbers, spaces and the following punctuation symbols are permitted: , . - \' in field',
+    },
+
+    'illegal_phone' => {
+      'en_US' => 'Illegal (phone)',
+      #'en_US' => '',
+    },
+
+    'illegal_zip' => {
+      'en_US' => 'Illegal (zip)',
+      #'en_US' => '',
+    },
+
+    'expired_card' => {
+      'en_US' => 'Expired card',
+    },
+
+    'daytime' => {
+      'en_US' => 'Day Phone',
+    },
+
+    'night' => {
+      'en_US' => 'Night Phone',
+    },
+
+    'svc_external-id' => {
+      'en_US' => 'External ID',
+    },
+
+    'svc_external-title' => {
+      'en_US' => 'Title',
+    },
+
+    'stateid' => {
+      'en_US' => 'Driver\'s License',
+    },
+
+    'stateid_state' => {
+      'en_US' => 'Driver\'s License State',
+    },
+
+    'invalid_domain' => {
+      'en_US' => 'Invalid domain',
+    },
+
+  );
 }
 
 =back
 
 =head1 BUGS
 
-i18n/l10n is a mess.
+i18n/l10n, eek
 
 =head1 SEE ALSO
 
-L<FS::Record>, schema.html from the base documentation.
+L<FS::Msgcat>, L<FS::Record>, schema.html from the base documentation.
 
 =cut