From be61853021954c3cf8f6e63a41b1fa693e3af6d8 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 22 Feb 2010 03:24:21 +0000 Subject: [PATCH] communigate: domain aliases, enabled services, RT#7083 --- FS/FS/Schema.pm | 3 + FS/FS/part_export/communigate_pro.pm | 114 ++++++++++++++++++++++++--------- FS/FS/svc_acct.pm | 24 ++++--- FS/FS/svc_domain.pm | 13 ++++ httemplate/edit/process/svc_acct.cgi | 2 +- httemplate/edit/process/svc_domain.cgi | 12 ++++ httemplate/edit/svc_domain.cgi | 45 ++++++++++--- httemplate/view/svc_domain.cgi | 33 ++++++---- 8 files changed, 184 insertions(+), 62 deletions(-) diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index be8eb038f..76d8ecd7f 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -1687,7 +1687,10 @@ sub tables_hashref { 'setup_date', @date_type, '', '', 'renewal_interval', 'int', 'NULL', '', '', '', 'expiration_date', @date_type, '', '', + #communigate pro fields (quota = MaxAccountSize) 'max_accounts', 'int', 'NULL', '', '', '', + 'cgp_aliases', 'varchar', 'NULL', 255, '', '', + 'cgp_accessmodes','varchar','NULL', 255, '', '', #DomainAccessModes ], 'primary_key' => 'svcnum', 'unique' => [ ], diff --git a/FS/FS/part_export/communigate_pro.pm b/FS/FS/part_export/communigate_pro.pm index 855651370..fcd6b1ce3 100644 --- a/FS/FS/part_export/communigate_pro.pm +++ b/FS/FS/part_export/communigate_pro.pm @@ -71,8 +71,10 @@ sub _export_insert_svc_acct { my( $self, $svc_acct ) = (shift, shift); my %settings = ( - 'AccessModes' => ( $svc_acct->cgp_accessmodes - || $self->option('AccessModes') ), + 'AccessModes' => [ split(' ', ( $svc_acct->cgp_accessmodes + || $self->option('AccessModes') ) + ) + ], 'RealName' => $svc_acct->finger, 'Password' => $svc_acct->_password, map { $quotas{$_} => $svc_acct->$_() } @@ -117,7 +119,7 @@ sub _export_insert_svc_acct { my $alias_err = $self->communigate_pro_queue( $svc_acct->svcnum, 'SetAccountAliases', $self->export_username($svc_acct), - [ split(/\s*,\s*/, $svc_acct->cgp_aliases) ], + [ split(/\s*[,\s]\s*/, $svc_acct->cgp_aliases) ], ); warn "WARNING: error queueing SetAccountAliases job: $alias_err" if $alias_err; @@ -132,13 +134,34 @@ sub _export_insert_svc_domain { my $create = $self->option('create_domain') || 'CreateDomain'; - my @options = ( $svc_domain->svcnum, $create, $svc_domain->domain, - #other domain creation options? + my %settings = ( + 'DomainAccessModes' => [ split(' ', $svc_domain->cgp_accessmodes ) ], ); - push @options, 'AccountsLimit' => $svc_domain->max_accounts + $settings{'AccountsLimit'} = $svc_domain->max_accounts if $svc_domain->max_accounts; - $self->communigate_pro_queue( @options ); + my @options = ( $create, $svc_domain->domain, \%settings ); + + eval { $self->communigate_pro_runcommand( @options ) }; + return $@ if $@; + + #aliases + if ( $svc_domain->cgp_aliases ) { + my $alias_err = $self->communigate_pro_queue( $svc_domain->svcnum, + 'SetDomainAliases', + $svc_domain->domain, + split(/\s*[,\s]\s*/, $svc_domain->cgp_aliases), + ); + warn "WARNING: error queueing SetDomainAliases job: $alias_err" + if $alias_err; + } + + #account defaults + + #account defaults prefs + + ''; + } sub _export_insert_svc_forward { @@ -233,7 +256,7 @@ sub _export_replace_svc_acct { $new->svcnum, 'SetAccountAliases', $self->export_username($new), - [ split(/\s*,\s*/, $new->cgp_aliases) ], + [ split(/\s*[,\s]\s*/, $new->cgp_aliases) ], ); return $error if $error; } @@ -251,12 +274,26 @@ sub _export_replace_svc_domain { ); return $error if $error; } + my %settings = (); + $settings{'AccountsLimit'} = $new->max_accounts + if $old->max_accounts ne $new->max_accounts; + $settings{'DomainAccessModes'} = $new->cgp_accessmodes + if $old->cgp_accessmodes ne $new->cgp_accessmodes; - if ( $old->max_accounts ne $new->max_accounts ) { + if ( keys %settings ) { my $error = $self->communigate_pro_queue( $new->svcnum, 'UpdateDomainSettings', $new->domain, - 'AccountsLimit' => ($new->max_accounts || 'default'), + %settings, + ); + return $error if $error; + } + + if ( $old->cgp_aliases ne $new->cgp_aliases ) { + my $error = $self->communigate_pro_queue( $new->svcnum, + 'SetDomainAliases', + $new->domain, + split(/\s*[,\s]\s*/, $new->cgp_aliases), ); return $error if $error; } @@ -428,6 +465,17 @@ sub export_getsettings_svc_domain { keys(%$acct_defaults) ); + #aliases too + my $aliases = eval { $self->communigate_pro_runcommand( + 'GetDomainAliases', + $svc_domain->domain + ) }; + return $@ if $@; + + $effective_settings->{'Aliases'} = join(', ', @$aliases); + $settings->{'Aliases'} = join(', ', @$aliases); + + #false laziness w/below my %defaults = map { $_ => 1 } @@ -538,12 +586,13 @@ sub communigate_pro_queue_dep { my( $self, $jobnumref, $svcnum, $method ) = splice(@_,0,4); my %kludge_methods = ( - 'CreateAccount' => 'CreateAccount', + #'CreateAccount' => 'CreateAccount', 'UpdateAccountSettings' => 'UpdateAccountSettings', 'UpdateAccountPrefs' => 'cp_Scalar_Hash', - 'CreateDomain' => 'cp_Scalar_Hash', - 'CreateSharedDomain' => 'cp_Scalar_Hash', + #'CreateDomain' => 'cp_Scalar_Hash', + #'CreateSharedDomain' => 'cp_Scalar_Hash', 'UpdateDomainSettings' => 'UpdateDomainSettings', + 'SetDomainAliases' => 'cp_Scalar_Array', ); my $sub = exists($kludge_methods{$method}) ? $kludge_methods{$method} @@ -589,6 +638,12 @@ sub cp_Scalar_Hash { communigate_pro_command( $machine, $port, $login, $password, $method, @args ); } +sub cp_Scalar_Array { + my( $machine, $port, $login, $password, $method, $scalar, @array ) = @_; + my @args = ( $scalar, \@array ); + communigate_pro_command( $machine, $port, $login, $password, $method, @args ); +} + #sub cp_Hash { # my( $machine, $port, $login, $password, $method, %hash ) = @_; # my @args = ( \%hash ); @@ -597,26 +652,27 @@ sub cp_Scalar_Hash { sub UpdateDomainSettings { my( $machine, $port, $login, $password, $method, $domain, %settings ) = @_; + $settings{'DomainAccessModes'} = [split(' ',$settings{'DomainAccessModes'})]; my @args = ( 'domain' => $domain, 'settings' => \%settings ); communigate_pro_command( $machine, $port, $login, $password, $method, @args ); } -sub CreateAccount { - my( $machine, $port, $login, $password, $method, %args ) = @_; - my $accountName = delete $args{'accountName'}; - my $accountType = delete $args{'accountType'}; - my $externalFlag = delete $args{'externalFlag'}; - $args{'AccessModes'} = [ split(' ', $args{'AccessModes'}) ]; - my @args = ( accountName => $accountName, - accountType => $accountType, - settings => \%args, - ); - #externalFlag => $externalFlag, - push @args, externalFlag => $externalFlag if $externalFlag; - - communigate_pro_command( $machine, $port, $login, $password, $method, @args ); - -} +#sub CreateAccount { +# my( $machine, $port, $login, $password, $method, %args ) = @_; +# my $accountName = delete $args{'accountName'}; +# my $accountType = delete $args{'accountType'}; +# my $externalFlag = delete $args{'externalFlag'}; +# $args{'AccessModes'} = [ split(' ', $args{'AccessModes'}) ]; +# my @args = ( accountName => $accountName, +# accountType => $accountType, +# settings => \%args, +# ); +# #externalFlag => $externalFlag, +# push @args, externalFlag => $externalFlag if $externalFlag; +# +# communigate_pro_command( $machine, $port, $login, $password, $method, @args ); +# +#} sub UpdateAccountSettings { my( $machine, $port, $login, $password, $method, $accountName, %args ) = @_; diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index 2887e28c7..18b9af557 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -284,6 +284,12 @@ sub table_info { disable_inventory => 1, disable_select => 1, }, + 'cgp_aliases' => { + label => 'Communigate aliases', + type => 'text', + disable_inventory => 1, + disable_select => 1, + }, 'cgp_deletemode' => { label => 'Communigate message delete method', type => 'select', @@ -1106,16 +1112,14 @@ sub check { || $self->ut_snumbern('upbytes') || $self->ut_snumbern('downbytes') || $self->ut_snumbern('totalbytes') - || $self->ut_enum( '_password_encoding', - [ '', qw( plain crypt ldap ) ] - ) - || $self->ut_enum( 'password_selfchange', [ '', 'Y' ] ) - || $self->ut_enum( 'password_recover', [ '', 'Y' ] ) - || $self->ut_textn( 'cgp_accessmodes' ) - || $self->ut_alphan( 'cgp_type' ) - || $self->ut_textn( 'cgp_aliases' ) #well - || $self->ut_alphasn( 'cgp_deletemode' ) - || $self->ut_alphan( 'cgp_emptytrash' ) + || $self->ut_enum('_password_encoding', ['',qw(plain crypt ldap)]) + || $self->ut_enum('password_selfchange', [ '', 'Y' ]) + || $self->ut_enum('password_recover', [ '', 'Y' ]) + || $self->ut_textn('cgp_accessmodes') + || $self->ut_alphan('cgp_type') + || $self->ut_textn('cgp_aliases' ) #well + || $self->ut_alphasn('cgp_deletemode') + || $self->ut_alphan('cgp_emptytrash') ; return $error if $error; diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm index 89ee26aff..b5f91f1df 100644 --- a/FS/FS/svc_domain.pm +++ b/FS/FS/svc_domain.pm @@ -114,6 +114,18 @@ sub table_info { 'max_accounts' => { label => 'Maximum number of accounts', 'disable_inventory' => 1, }, + 'cgp_aliases' => { + label => 'Communigate aliases', + type => 'text', + disable_inventory => 1, + disable_select => 1, + }, + 'cgp_accessmodes' => { + label => 'Communigate enabled services', + type => 'communigate_pro-accessmodes', + disable_inventory => 1, + disable_select => 1, + }, }, }; } @@ -342,6 +354,7 @@ sub check { my $error = $self->ut_numbern('svcnum') || $self->ut_numbern('catchall') || $self->ut_numbern('max_accounts') + || $self->ut_textn('cgp_aliases') #well ; return $error if $error; diff --git a/httemplate/edit/process/svc_acct.cgi b/httemplate/edit/process/svc_acct.cgi index a4c60ef9e..0d2c007f1 100755 --- a/httemplate/edit/process/svc_acct.cgi +++ b/httemplate/edit/process/svc_acct.cgi @@ -31,7 +31,7 @@ foreach (map { $_,$_."_threshold" } qw( upbytes downbytes totalbytes )) { $cgi->param($_, FS::UI::bytecount::parse_bytecount($cgi->param($_)) ); } -#unmunge cgp_accessmodes (falze laziness-ish w/part_svc.pm::process) +#unmunge cgp_accessmodes (falze laziness-ish w/part_svc.pm::process &svc_domain) unless ( $cgi->param('cgp_accessmodes') ) { $cgi->param('cgp_accessmodes', join(' ', diff --git a/httemplate/edit/process/svc_domain.cgi b/httemplate/edit/process/svc_domain.cgi index d8c1a1298..ea97918e8 100755 --- a/httemplate/edit/process/svc_domain.cgi +++ b/httemplate/edit/process/svc_domain.cgi @@ -15,6 +15,18 @@ $FS::svc_domain::whois_hack = 1; $cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; my $svcnum = $1; +#unmunge cgp_accessmodes (falze laziness-ish w/part_svc.pm::process & svc_acct) +unless ( $cgi->param('cgp_accessmodes') ) { + $cgi->param('cgp_accessmodes', + join(' ', + sort map { /^cgp_accessmodes_([\w\/]+)$/ or die "no way"; $1; } + grep $cgi->param($_), + grep /^cgp_accessmodes_([\w\/]+)$/, + $cgi->param() + ) + ); +} + my $new = new FS::svc_domain ( { map { $_, scalar($cgi->param($_)); diff --git a/httemplate/edit/svc_domain.cgi b/httemplate/edit/svc_domain.cgi index 369d6a0fe..a2b87e4fa 100755 --- a/httemplate/edit/svc_domain.cgi +++ b/httemplate/edit/svc_domain.cgi @@ -38,6 +38,18 @@ Available top-level domains: <% $export->option('tlds') %> +% if ( $communigate +% && $part_svc->part_svc_column('max_accounts')->columnflag !~ /^[FA]$/ ) { + + + Aliases + + + +% } else { + +% } + % if ( $part_svc->part_svc_column('max_accounts')->columnflag =~ /^[FA]$/ ) { % } else { @@ -49,6 +61,24 @@ Available top-level domains: <% $export->option('tlds') %> % } +% if ( $communigate +% && $part_svc->part_svc_column('cgp_accessmodes')->columnflag ne 'F' ) +% { + + + Enabled services + + <% include( '/elements/communigate_pro-accessmodes.html', + 'curr_value' => $svc_domain->cgp_accessmodes, + ) + %> + + + +% } else { + +% } +
@@ -118,19 +148,14 @@ my $action = $svcnum ? 'Edit' : 'Add'; my $svc = $part_svc->getfield('svc'); -my @exports = $part_svc->part_export(); - -my $registrar; -my $export; +my $communigate = scalar($part_svc->part_export('communigate_pro')); + # || scalar($part_svc->part_export('communigate_pro_singledomain')); # Find the first export that does domain registration -foreach (@exports) { - $export = $_ if $_->can('registrar'); -} +my @exports = grep $_->can('registrar'), $part_svc->part_export; +my $export = $exports[0]; # If we have a domain registration export, get the registrar object -if ($export) { - $registrar = $export->registrar; -} +my $registrar = $export ? $export->registrar : ''; my $otaker = getotaker; diff --git a/httemplate/view/svc_domain.cgi b/httemplate/view/svc_domain.cgi index b0f4ef0cf..51caa5c99 100755 --- a/httemplate/view/svc_domain.cgi +++ b/httemplate/view/svc_domain.cgi @@ -62,7 +62,14 @@ Service #<% $svcnum %> % } -% if ( $svc_domain->max_accounts ) { +% if ( $communigate ) { + + Aliases + <% $svc_domain->cgp_aliases %> + +% } + +% if ( $communigate && $svc_domain->max_accounts ) { Maximum number of Accounts <% $svc_domain->max_accounts %> @@ -78,6 +85,11 @@ Service #<% $svcnum %> + + Enabled services + <% $svc_domain->cgp_accessmodes %> + +
@@ -122,7 +134,7 @@ DNS records % ) { % ( my $recdata = $domain_record->recdata ) =~ s/"/\\'\\'/g; (delete) -% } +% } @@ -221,19 +233,16 @@ if ($svc_domain->catchall) { my $domain = $svc_domain->domain; -my $status = 'Unknown'; -my %ops = (); - -my @exports = $part_svc->part_export(); - -my $registrar; -my $export; +my $communigate = scalar($part_svc->part_export('communigate_pro')); + # || scalar($part_svc->part_export('communigate_pro_singledomain')); # Find the first export that does domain registration -foreach (@exports) { - $export = $_ if $_->can('registrar'); -} +my @exports = grep $_->can('registrar'), $part_svc->part_export; +my $export = $exports[0]; # If we have a domain registration export, get the registrar object +my $registrar; +my $status = 'Unknown'; +my %ops = (); if ($export) { $registrar = $export->registrar; my $domstat = $export->get_status( $svc_domain ); -- 2.11.0