X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fcommunigate_pro.pm;h=2cad24467c0f6d5d144d06107e307cfa3cbd3e40;hb=d311f62f655dc5cad8b9319f07f8c0e6bf344cc2;hp=07281f1403fccf0c6a3614e545c1d66af37738fa;hpb=7a8c7b6f64ac14d555d866f93300e64c47b74a98;p=freeside.git diff --git a/FS/FS/part_export/communigate_pro.pm b/FS/FS/part_export/communigate_pro.pm index 07281f140..2cad24467 100644 --- a/FS/FS/part_export/communigate_pro.pm +++ b/FS/FS/part_export/communigate_pro.pm @@ -135,6 +135,15 @@ sub _export_insert_svc_acct { if $alias_err; } + my $rule_error = $self->communigate_pro_queue( + $svc_acct->svcnum, + 'SetAccountMailRules', + $self->export_username($svc_acct), + $svc_acct->cgp_rule_arrayref, + ); + warn "WARNING: error queueing SetAccountMailRules job: $rule_error" + if $rule_error; + ''; } @@ -204,6 +213,15 @@ sub _export_insert_svc_domain { warn "WARNING: error queueing SetAccountDefaultPrefs job: $pref_err" if $pref_err; + my $rule_error = $self->communigate_pro_queue( + $svc_domain->svcnum, + 'SetDomainMailRules', + $svc_domain->domain, + $svc_domain->cgp_rule_arrayref, + ); + warn "WARNING: error queueing SetDomainMailRules job: $rule_error" + if $rule_error; + ''; } @@ -349,6 +367,15 @@ sub _export_replace_svc_acct { return $error if $error; } + my $rule_error = $self->communigate_pro_queue( + $new->svcnum, + 'SetAccountMailRules', + $self->export_username($new), + $new->cgp_rule_arrayref, + ); + warn "WARNING: error queueing SetAccountMailRules job: $rule_error" + if $rule_error; + ''; } @@ -356,12 +383,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; @@ -429,6 +460,15 @@ sub _export_replace_svc_domain { warn "WARNING: error queueing SetAccountDefaultPrefs job: $pref_err" if $pref_err; + my $rule_error = $self->communigate_pro_queue( + $new->svcnum, + 'SetDomainMailRules', + $new->domain, + $new->cgp_rule_arrayref, + ); + warn "WARNING: error queueing SetDomainMailRules job: $rule_error" + if $rule_error; + ''; } @@ -655,24 +695,11 @@ sub export_getsettings_svc_domain { ) }; return $@ if $@; - %$effective_settings = ( - %$effective_settings, - ( map { ("Acct. Default $_" => $acct_defaults->{$_}); } - keys(%$acct_defaults) - ), - ( map { ("Acct. Default $_" => $acct_defaultprefs->{$_}); } #diff label?? - keys(%$acct_defaultprefs) - ), - ); - %$settings = ( - %$settings, - ( map { ("Acct. Default $_" => $acct_defaults->{$_}); } - keys(%$acct_defaults) - ), - ( map { ("Acct. Default $_" => $acct_defaultprefs->{$_}); } #diff label?? - keys(%$acct_defaultprefs) - ), - ); + my $rules = eval { $self->communigate_pro_runcommand( + 'GetDomainMailRules', + $svc_domain->domain + ) }; + return $@ if $@; #aliases too my $aliases = eval { $self->communigate_pro_runcommand( @@ -681,9 +708,19 @@ sub export_getsettings_svc_domain { ) }; return $@ if $@; - $effective_settings->{'Aliases'} = join(', ', @$aliases); - $settings->{'Aliases'} = join(', ', @$aliases); + my %more = ( + ( map { ("Acct. Default $_" => $acct_defaults->{$_}); } + keys(%$acct_defaults) + ), + ( map { ("Acct. Default $_" => $acct_defaultprefs->{$_}); } #diff label?? + keys(%$acct_defaultprefs) + ), + ( map _rule2string($_), @$rules ), + 'Aliases' => join(', ', @$aliases), + ); + %$effective_settings = ( %$effective_settings, %more ); + %$settings = ( %$settings, %more ); #false laziness w/below @@ -693,13 +730,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; @@ -750,8 +781,21 @@ sub export_getsettings_svc_acct { keys(%$prefs) ); - #aliases too + #mail rules + my $rules = eval { $self->communigate_pro_runcommand( + 'GetAccountMailRules', + $svc_acct->email + ) }; + return $@ if $@; + + %$effective_settings = ( %$effective_settings, + map _rule2string($_), @$rules + ); + %$settings = ( %$settings, + map _rule2string($_), @$rules + ); + #aliases too my $aliases = eval { $self->communigate_pro_runcommand( 'GetAccountAliases', $svc_acct->email @@ -769,13 +813,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; @@ -785,6 +823,47 @@ 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; + $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 ) = @_;