communigate provisioning phase 2: Domain:Account Defaults:Settings: RulesAllowed...
[freeside.git] / FS / FS / msgcat.pm
index 53a7aee..d1224f3 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
@@ -124,62 +114,51 @@ sub check {
   $self->locale =~ /^([\w\@]+)$/ or return "illegal locale: ". $self->locale;
   $self->locale($1);
 
-  ''; #no error
+  $self->SUPER::check
 }
 
-=back
 
-=head1 SUBROUTINES
+sub _upgrade_data { #class method
+  my( $class, %opts) = @_;
 
-=over 4
+  eval "use FS::Setup;";
+  die $@ if $@;
 
-=item gettext MSGCODE
+  #"repopulate_msgcat", false laziness w/FS::Setup::populate_msgcat
 
-Returns the full message for the supplied message code.
+  my %messages = FS::Setup::msgcat_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
-
-Returns the full message for the supplied message code, including the message
-code.
-
-=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)";
-  }
-}
-
 =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