import torrus 1.0.9
[freeside.git] / FS / FS / part_export / acct_sql.pm
index 4b92e80..9f1ae7b 100644 (file)
@@ -17,6 +17,10 @@ tie my %options, 'Tie::IxHash',
                               'Database schema mapping to Freeside methods.',
                             type  => 'textarea',
                           },
+  'static'             => { label =>
+                              'Database schema mapping to static values.',
+                            type  => 'textarea',
+                          },
   'primary_key'        => { label => 'Database primary key' },
   'crypt'              => { label => 'Password encryption',
                             type=>'select', options=>[qw(crypt md5)],
@@ -60,6 +64,17 @@ my $postfix_courierimap_alias_map =
   join('\n', map "$_ $postfix_courierimap_alias_map{$_}",
                  keys %postfix_courierimap_alias_map      );
 
+tie my %postfix_native_mailbox_map, 'Tie::IxHash',
+  'userid'   => 'email',
+  'uid'      => 'uid',
+  'gid'      => 'gid',
+  'password' => 'ldap_password',
+  'mail'     => 'domain_slash_username',
+;
+my $postfix_native_mailbox_map =
+  join('\n', map "$_ $postfix_native_mailbox_map{$_}",
+                 keys %postfix_native_mailbox_map      );
+
 %info = (
   'svc'      => 'svc_acct',
   'desc'     => 'Real-time export of accounts to SQL databases '.
@@ -94,13 +109,21 @@ to be configured for different mail server setups.
     this.form.schema.value = "$postfix_courierimap_alias_map";
     this.form.primary_key.value = "address";
   '>
+  <LI><INPUT TYPE="button" VALUE="postfix_native_mailbox" onClick='
+    this.form.table.value = "users";
+    this.form.schema.value = "$postfix_native_mailbox_map";
+    this.form.primary_key.value = "userid";
+  '>
 </UL>
 END
 );
 
+sub _schema_map { shift->_map('schema'); }
+sub _static_map { shift->_map('static'); }
+
 sub _map {
   my $self = shift;
-  map { /^\s*(\S+)\s*(\S+)\s*$/ } split("\n", $self->option('schema') );
+  map { /^\s*(\S+)\s*(\S+)\s*$/ } split("\n", $self->option(shift) );
 }
 
 sub rebless { shift; }
@@ -108,14 +131,22 @@ sub rebless { shift; }
 sub _export_insert {
   my($self, $svc_acct) = (shift, shift);
 
-  my %map = $self->_map;
+  my %schema = $self->_schema_map;
+  my %static = $self->_static_map;
 
-  my %record = map { my $value = $map{$_};
-                     my @arg = ();
-                     push @arg, $self->option('crypt')
-                       if $value eq 'crypt_password' && $self->option('crypt');
-                     $_ => $svc_acct->$value(@arg);
-                   } keys %map;
+  my %record = (
+
+    ( map { $_ => $static{$_} } keys %static ),
+  
+    ( map { my $value = $schema{$_};
+            my @arg = ();
+            push @arg, $self->option('crypt')
+              if $value eq 'crypt_password' && $self->option('crypt');
+            $_ => $svc_acct->$value(@arg);
+          } keys %schema
+    ),
+
+  );
 
   my $err_or_queue =
     $self->acct_sql_queue(
@@ -133,25 +164,33 @@ sub _export_insert {
 sub _export_replace {
   my($self, $new, $old) = (shift, shift, shift);
 
-  my %map = $self->_map;
+  my %schema = $self->_schema_map;
+  my %static = $self->_static_map;
 
   my @primary_key = ();
   if ( $self->option('primary_key') =~ /,/ ) {
     foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) {
-      my $keymap = $map{$key};
+      my $keymap = $schema{$key};
       push @primary_key, $old->$keymap();
     }
   } else {
-    my $keymap = $map{$self->option('primary_key')};
+    my $keymap = $schema{$self->option('primary_key')};
     push @primary_key, $old->$keymap();
   }
 
-  my %record = map { my $value = $map{$_};
-                     my @arg = ();
-                     push @arg, $self->option('crypt')
-                       if $value eq 'crypt_password' && $self->option('crypt');
-                     $_ => $new->$value(@arg);
-                   } keys %map;
+  my %record = (
+
+    ( map { $_ => $static{$_} } keys %static ),
+  
+    ( map { my $value = $schema{$_};
+            my @arg = ();
+            push @arg, $self->option('crypt')
+              if $value eq 'crypt_password' && $self->option('crypt');
+            $_ => $new->$value(@arg);
+          } keys %schema
+    ),
+
+  );
 
   my $err_or_queue = $self->acct_sql_queue(
     $new->svcnum,
@@ -167,16 +206,16 @@ sub _export_replace {
 sub _export_delete {
   my ( $self, $svc_acct ) = (shift, shift);
 
-  my %map = $self->_map;
+  my %schema = $self->_schema_map;
 
   my %primary_key = ();
   if ( $self->option('primary_key') =~ /,/ ) {
     foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) {
-      my $keymap = $map{$key};
+      my $keymap = $schema{$key};
       $primary_key{ $key } = $svc_acct->$keymap();
     }
   } else {
-    my $keymap = $map{$self->option('primary_key')};
+    my $keymap = $schema{$self->option('primary_key')};
     $primary_key{ $self->option('primary_key') } = $svc_acct->$keymap(),
   }