diff options
author | ivan <ivan> | 2010-04-23 06:47:38 +0000 |
---|---|---|
committer | ivan <ivan> | 2010-04-23 06:47:38 +0000 |
commit | 37591b61f8ad6fc5c5acb2fd8f520d2dbe4f1539 (patch) | |
tree | 5a89dc6c073118b973c06f44070b4fbf65dd65e7 /FS | |
parent | 3a201934245c2e72b167804a6d512e0e6d435f65 (diff) |
communigate (phase 2): rules. RT#7514
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. |