diff options
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/Mason.pm | 1 | ||||
| -rw-r--r-- | FS/FS/Schema.pm | 16 | ||||
| -rw-r--r-- | FS/FS/cgp_rule.pm | 87 | ||||
| -rw-r--r-- | FS/FS/cgp_rule_action.pm | 14 | ||||
| -rw-r--r-- | FS/FS/cgp_rule_condition.pm | 14 | 
5 files changed, 100 insertions, 32 deletions
| diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm index f65d9728b..41c472d76 100644 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@ -234,6 +234,7 @@ if ( -e $addl_handler_use_file ) {    use FS::cust_pkg_discount;    use FS::cust_bill_pkg_discount;    use FS::svc_mailinglist; +  use FS::cgp_rule;    # Sammath Naur    if ( $FS::Mason::addl_handler_use ) { diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index ca54d7b79..28f82641b 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -1788,15 +1788,15 @@ sub tables_hashref {      'cgp_rule' => {        'columns' => [ -        'rulenum',  'serial', '',      '', '', '', -        'name',    'varchar', '', $char_d, '', '', -        'comment', 'varchar', '', $char_d, '', '', -        'svcnum',      'int', '',      '', '', '', -        'priority',    'int', '',      '', '', '', +        'rulenum',  'serial',     '',      '', '', '', +        'name',    'varchar',     '', $char_d, '', '', +        'comment', 'varchar', 'NULL', $char_d, '', '', +        'svcnum',      'int',     '',      '', '', '', +        'priority',    'int',     '',      '', '', '',        ],        'primary_key' => 'rulenum',        'unique'      => [], -      'index '      => [ [ 'svcnum' ] ], +      'index'       => [ [ 'svcnum' ] ],      },      'cgp_rule_condition' => { @@ -1809,7 +1809,7 @@ sub tables_hashref {        ],        'primary_key' => 'ruleconditionnum',        'unique'      => [], -      'index '      => [ [ 'rulenum' ] ], +      'index'       => [ [ 'rulenum' ] ],      },      'cgp_rule_action' => { @@ -1821,7 +1821,7 @@ sub tables_hashref {        ],        'primary_key' => 'ruleactionnum',        'unique'      => [], -      'index '      => [ [ 'rulenum' ] ], +      'index'       => [ [ 'rulenum' ] ],     },      'svc_forward' => { diff --git a/FS/FS/cgp_rule.pm b/FS/FS/cgp_rule.pm index 283055fef..7e5c9fefb 100644 --- a/FS/FS/cgp_rule.pm +++ b/FS/FS/cgp_rule.pm @@ -2,7 +2,10 @@ package FS::cgp_rule;  use strict;  use base qw( FS::Record ); -use FS::Record qw( qsearch qsearchs ); +use FS::Record qw( qsearch qsearchs dbh ); +use FS::cust_svc; +use FS::cgp_rule_condition; +use FS::cgp_rule_action;  =head1 NAME @@ -25,8 +28,8 @@ FS::cgp_rule - Object methods for cgp_rule records  =head1 DESCRIPTION -An FS::cgp_rule object represents an example.  FS::cgp_rule inherits from -FS::Record.  The following fields are currently supported: +An FS::cgp_rule object represents a mail filtering rule.  FS::cgp_rule +inherits from FS::Record.  The following fields are currently supported:  =over 4 @@ -59,7 +62,7 @@ priority  =item new HASHREF -Creates a new example.  To add the example to the database, see L<"insert">. +Creates a new rule.  To add the rule 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. @@ -85,7 +88,40 @@ Delete this record from the database.  =cut -# the delete method can be inherited from FS::Record +sub delete { +  my $self = shift; + +  local $SIG{HUP} = 'IGNORE'; +  local $SIG{INT} = 'IGNORE'; +  local $SIG{QUIT} = 'IGNORE'; +  local $SIG{TERM} = 'IGNORE'; +  local $SIG{TSTP} = 'IGNORE'; +  local $SIG{PIPE} = 'IGNORE'; + +  my $oldAutoCommit = $FS::UID::AutoCommit; +  local $FS::UID::AutoCommit = 0; +  my $dbh = dbh; + +  my @del = $self->cgp_rule_condition; +  push @del, $self->cgp_rule_action; + +  foreach my $del (@del) { +    my $error = $del->delete; +    if ( $error ) { +      $dbh->rollback if $oldAutoCommit; +      return $error; +    } +  } + +  my $error = $self->SUPER::delete(@_); +  if ( $error ) { +    $dbh->rollback if $oldAutoCommit; +    return $error; +  } + +  $dbh->commit or die $dbh->errstr if $oldAutoCommit; + +}  =item replace OLD_RECORD @@ -98,7 +134,7 @@ returns the error, otherwise returns false.  =item check -Checks all fields to make sure this is a valid example.  If there is +Checks all fields to make sure this is a valid rule.  If there is  an error, returns the error, otherwise returns false.  Called by the insert  and replace methods. @@ -113,8 +149,8 @@ sub check {    my $error =       $self->ut_numbern('rulenum')      || $self->ut_text('name') -    || $self->ut_text('comment') -    || $self->ut_number('svcnum') +    || $self->ut_textn('comment') +    || $self->ut_foreign_key('svcnum', 'cust_svc', 'svcnum')      || $self->ut_number('priority')    ;    return $error if $error; @@ -122,12 +158,43 @@ sub check {    $self->SUPER::check;  } +=item cust_svc + +=cut + +sub cust_svc { +  my $self = shift; +  qsearchs('cust_svc', { 'svcnum' => $self->svcnum } ); +} + +=item cgp_rule_condition + +Returns the conditions associated with this rule, as FS::cgp_rule_condition +objects. + +=cut + +sub cgp_rule_condition { +  my $self = shift; +  qsearch('cgp_rule_condition', { 'rulenum' => $self->rulenum } ); +} + +=item cgp_rule_action + +Returns the actions associated with this rule, as FS::cgp_rule_action +objects. + +=cut + +sub cgp_rule_action { +  my $self = shift; +  qsearch('cgp_rule_action', { 'rulenum' => $self->rulenum } ); +} +  =back  =head1 BUGS -The author forgot to customize this manpage. -  =head1 SEE ALSO  L<FS::Record>, schema.html from the base documentation. diff --git a/FS/FS/cgp_rule_action.pm b/FS/FS/cgp_rule_action.pm index b5e497015..6dfd42427 100644 --- a/FS/FS/cgp_rule_action.pm +++ b/FS/FS/cgp_rule_action.pm @@ -3,6 +3,7 @@ package FS::cgp_rule_action;  use strict;  use base qw( FS::Record );  use FS::Record qw( qsearch qsearchs ); +use FS::cgp_rule;  =head1 NAME @@ -25,8 +26,9 @@ FS::cgp_rule_action - Object methods for cgp_rule_action records  =head1 DESCRIPTION -An FS::cgp_rule_action object represents an example.  FS::cgp_rule_action inherits from -FS::Record.  The following fields are currently supported: +An FS::cgp_rule_action object represents a mail filtering action. +FS::cgp_rule_action inherits from FS::Record.  The following fields are +currently supported:  =over 4 @@ -55,7 +57,7 @@ rulenum  =item new HASHREF -Creates a new example.  To add the example to the database, see L<"insert">. +Creates a new action.  To add the action 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. @@ -94,7 +96,7 @@ returns the error, otherwise returns false.  =item check -Checks all fields to make sure this is a valid example.  If there is +Checks all fields to make sure this is a valid action.  If there is  an error, returns the error, otherwise returns false.  Called by the insert  and replace methods. @@ -110,7 +112,7 @@ sub check {      $self->ut_numbern('ruleactionnum')      || $self->ut_text('action')      || $self->ut_text('params') -    || $self->ut_number('rulenum') +    || $self->ut_foreign_key('rulenum', 'cgp_rule', 'rulenum')    ;    return $error if $error; @@ -121,8 +123,6 @@ sub check {  =head1 BUGS -The author forgot to customize this manpage. -  =head1 SEE ALSO  L<FS::Record>, schema.html from the base documentation. diff --git a/FS/FS/cgp_rule_condition.pm b/FS/FS/cgp_rule_condition.pm index a8b7e560c..f91b3e6f6 100644 --- a/FS/FS/cgp_rule_condition.pm +++ b/FS/FS/cgp_rule_condition.pm @@ -3,6 +3,7 @@ package FS::cgp_rule_condition;  use strict;  use base qw( FS::Record );  use FS::Record qw( qsearch qsearchs ); +use FS::cgp_rule;  =head1 NAME @@ -25,8 +26,9 @@ FS::cgp_rule_condition - Object methods for cgp_rule_condition records  =head1 DESCRIPTION -An FS::cgp_rule_condition object represents an example.  FS::cgp_rule_condition inherits from -FS::Record.  The following fields are currently supported: +An FS::cgp_rule_condition object represents a mail filtering condition. +FS::cgp_rule_condition inherits from FS::Record.  The following fields are +currently supported:  =over 4 @@ -59,7 +61,7 @@ rulenum  =item new HASHREF -Creates a new example.  To add the example to the database, see L<"insert">. +Creates a new condition.  To add the condition 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. @@ -98,7 +100,7 @@ returns the error, otherwise returns false.  =item check -Checks all fields to make sure this is a valid example.  If there is +Checks all fields to make sure this is a valid condition.  If there is  an error, returns the error, otherwise returns false.  Called by the insert  and replace methods. @@ -115,7 +117,7 @@ sub check {      || $self->ut_text('condition')      || $self->ut_text('op')      || $self->ut_text('params') -    || $self->ut_number('rulenum') +    || $self->ut_foreign_key('rulenum', 'cgp_rule', 'rulenum')    ;    return $error if $error; @@ -126,8 +128,6 @@ sub check {  =head1 BUGS -The author forgot to customize this manpage. -  =head1 SEE ALSO  L<FS::Record>, schema.html from the base documentation. | 
