X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fcommunigate_pro.pm;h=8b66225d2b05d78b1c2a7ef044c77d69a58d973e;hb=ffa18709ee8a4d05e18d2d406cf73afe79e52524;hp=edfd4b18e173b4feea72b3c8f6a5f1cffe0303f7;hpb=940401c77b8455dd47b57e06dcfedd7514c24a7c;p=freeside.git diff --git a/FS/FS/part_export/communigate_pro.pm b/FS/FS/part_export/communigate_pro.pm index edfd4b18e..8b66225d2 100644 --- a/FS/FS/part_export/communigate_pro.pm +++ b/FS/FS/part_export/communigate_pro.pm @@ -36,6 +36,7 @@ tie %options, 'Tie::IxHash', 'svc' => [qw( svc_acct svc_domain svc_forward svc_mailinglist )], 'desc' => 'Real-time export of accounts, domains, mail forwards and mailing lists to a CommuniGate Pro mail server', 'options' => \%options, + 'default_svc_class' => 'Email', 'notes' => <<'END' Real time export of accounts, domains, mail forwards and mailing lists to a CommuniGate Pro @@ -85,10 +86,12 @@ sub _export_insert_svc_acct { 'MailToAll' =>($svc_acct->cgp_mailtoall ?'YES':'NO'), 'AddMailTrailer' =>($svc_acct->cgp_addmailtrailer ?'YES':'NO'), + 'ArchiveMessagesAfter' => $svc_acct->cgp_archiveafter, + map { $quotas{$_} => $svc_acct->$_() } grep $svc_acct->$_(), keys %quotas ); - #XXX phase 3: archive messages, mailing lists + #XXX phase 3: mailing lists my @options = ( 'CreateAccount', 'accountName' => $self->export_username($svc_acct), @@ -144,6 +147,15 @@ sub _export_insert_svc_acct { warn "WARNING: error queueing SetAccountMailRules job: $rule_error" if $rule_error; + my $rpop_error = $self->communigate_pro_queue( + $svc_acct->svcnum, + 'SetAccountRPOPs', + $self->export_username($svc_acct), + $svc_acct->cgp_rpop_hashref, + ); + warn "WARNING: error queueing SetAccountMailRPOPs job: $rpop_error" + if $rpop_error; + ''; } @@ -162,6 +174,8 @@ sub _export_insert_svc_domain { if $svc_domain->parent_svcnum; $settings{'TrailerText'} = $svc_domain->trailer if $svc_domain->trailer; + $settings{'CertificateType'} = $svc_domain->cgp_certificatetype + if $svc_domain->cgp_certificatetype; my @options = ( $create, $svc_domain->domain, \%settings ); @@ -194,6 +208,7 @@ sub _export_insert_svc_domain { 'RPOPAllowed' =>($svc_domain->acct_def_cgp_rpopallowed ?'YES':'NO'), 'MailToAll' =>($svc_domain->acct_def_cgp_mailtoall ?'YES':'NO'), 'AddMailTrailer' =>($svc_domain->acct_def_cgp_addmailtrailer ?'YES':'NO'), + 'ArchiveMessagesAfter' => $svc_domain->acct_def_cgp_archiveafter, ); warn "WARNING: error queueing SetAccountDefaults job: $def_err" if $def_err; @@ -318,8 +333,10 @@ sub _export_replace_svc_acct { if $old->cgp_mailtoall ne $new->cgp_mailtoall; $settings{'AddMailTrailer'} = ( $new->cgp_addmailtrailer ? 'YES':'NO' ) if $old->cgp_addmailtrailer ne $new->cgp_addmailtrailer; + $settings{'ArchiveMessagesAfter'} = $new->cgp_archiveafter + if $old->cgp_archiveafter ne $new->cgp_archiveafter; - #XXX phase 3: archive messages, mailing lists + #XXX phase 3: mailing lists if ( keys %settings ) { my $error = $self->communigate_pro_queue( @@ -376,6 +393,15 @@ sub _export_replace_svc_acct { warn "WARNING: error queueing SetAccountMailRules job: $rule_error" if $rule_error; + my $rpop_error = $self->communigate_pro_queue( + $new->svcnum, + 'SetAccountRPOPs', + $self->export_username($new), + $new->cgp_rpop_hashref, + ); + warn "WARNING: error queueing SetAccountMailRPOPs job: $rpop_error" + if $rpop_error; + ''; } @@ -383,12 +409,16 @@ sub _export_replace_svc_acct { sub _export_replace_svc_domain { my( $self, $new, $old ) = (shift, shift, shift); + #let's just do the rename part realtime rather than trying to queue + #w/dependencies. we don't want FS winding up out-of-sync with the wrong + #username and a queued job anyway. right?? if ( $old->domain ne $new->domain ) { - my $error = $self->communigate_pro_queue( $new->svcnum, 'RenameDomain', - $old->domain, $new->domain, - ); - return $error if $error; + eval { $self->communigate_pro_runcommand( + 'RenameDomain', $old->domain, $new->domain, + ) }; + return $@ if $@; } + my %settings = (); $settings{'AccountsLimit'} = $new->max_accounts if $old->max_accounts ne $new->max_accounts; @@ -399,6 +429,8 @@ sub _export_replace_svc_domain { $settings{'AdminDomainName'} = $new->parent_svcnum ? $new->parent_svc_x->domain : '' if $old->parent_svcnum != $new->parent_svcnum; + $settings{'CertificateType'} = $new->cgp_certificatetype + if $old->cgp_certificatetype ne $new->cgp_certificatetype; if ( keys %settings ) { my $error = $self->communigate_pro_queue( $new->svcnum, @@ -437,6 +469,7 @@ sub _export_replace_svc_domain { 'RPOPAllowed' => ( $new->acct_def_cgp_rpopallowed ? 'YES' : 'NO' ), 'MailToAll' => ( $new->acct_def_cgp_mailtoall ? 'YES' : 'NO' ), 'AddMailTrailer' => ( $new->acct_def_cgp_addmailtrailer ? 'YES' : 'NO' ), + 'ArchiveMessagesAfter' => $new->acct_def_cgp_archiveafter, ); warn "WARNING: error queueing SetAccountDefaults job: $def_err" if $def_err; @@ -726,13 +759,7 @@ sub export_getsettings_svc_domain { foreach my $key ( grep ref($effective_settings->{$_}), keys %$effective_settings ) { - my $value = $effective_settings->{$key}; - if ( ref($value) eq 'ARRAY' ) { - $effective_settings->{$key} = join(' ', @$value); - } else { - #XXX - warn "serializing ". ref($value). " for table display not yet handled"; - } + $effective_settings->{$key} = _pretty( $effective_settings->{$key} ); } %{$settingsref} = %$effective_settings; @@ -797,6 +824,20 @@ sub export_getsettings_svc_acct { map _rule2string($_), @$rules ); +# #rpops too +# my $rpops = eval { $self->communigate_pro_runcommand( +# 'GetAccountRPOPs', +# $svc_acct->email +# ) }; +# return $@ if $@; +# +# %$effective_settings = ( %$effective_settings, +# map _rpop2string($_), %$rpops +# ); +# %$settings = ( %$settings, +# map _rpop2string($_), %rpops +# ); + #aliases too my $aliases = eval { $self->communigate_pro_runcommand( 'GetAccountAliases', @@ -815,13 +856,7 @@ sub export_getsettings_svc_acct { foreach my $key ( grep ref($effective_settings->{$_}), keys %$effective_settings ) { - my $value = $effective_settings->{$key}; - if ( ref($value) eq 'ARRAY' ) { - $effective_settings->{$key} = join(' ', @$value); - } else { - #XXX - warn "serializing ". ref($value). " for table display not yet handled"; - } + $effective_settings->{$key} = _pretty( $effective_settings->{$key} ); } %{$settingsref} = %$effective_settings; @@ -831,6 +866,39 @@ sub export_getsettings_svc_acct { } +sub _pretty { + my $value = shift; + if ( ref($value) eq 'ARRAY' ) { + '['. join(' ', map { ref($_) ? _pretty($_) : $_ } @$value ). ']'; + } elsif ( ref($value) eq 'HASH' ) { + '{'. join(', ', + map { my $v = $value->{$_}; + "$_:". ( ref($v) ? _pretty($v) : $v ); + } + keys %$value + ). '}'; + } else { + warn "serializing ". ref($value). " for table display not yet handled"; + } +} + +sub export_getsettings_svc_forward { + my($self, $svc_forward, $settingsref, $defaultref ) = @_; + + my $dest = eval { $self->communigate_pro_runcommand( + 'GetForwarder', + ($svc_forward->src || $svc_forward->srcsvc_acct->email), + ) }; + return $@ if $@; + + my $settings = { 'Destination' => $dest }; + + %{$settingsref} = %$settings; + %{$defaultref} = (); + + ''; +} + sub _rule2string { my $rule = shift; my($priority, $name, $conditions, $actions, $comment) = @$rule; @@ -839,6 +907,14 @@ sub _rule2string { ("Mail rule $name" => "$priority IF $conditions THEN $actions ($comment)"); } +#sub _rpop2string { +# my $rpop = shift; +# my($priority, $name, $conditions, $actions, $comment) = @$rule; +# $conditions = join(', ', map { my $a = $_; join(' ', @$a); } @$conditions); +# $actions = join(', ', map { my $a = $_; join(' ', @$a); } @$actions); +# ("Mail rule $name" => "$priority IF $conditions THEN $actions ($comment)"); +#} + sub export_getsettings_svc_mailinglist { my($self, $svc_mailinglist, $settingsref, $defaultref ) = @_; @@ -876,6 +952,7 @@ sub communigate_pro_queue_dep { 'UpdateAccountDefaults' => 'cp_Scalar_settingsHash', 'SetAccountDefaultPrefs' => 'cp_Scalar_settingsHash', 'UpdateAccountDefaultPrefs' => 'cp_Scalar_settingsHash', + 'SetAccountRPOPs' => 'cp_Scalar_Hash', ); my $sub = exists($kludge_methods{$method}) ? $kludge_methods{$method}