diff options
| author | fukachan <fukachan> | 2001-01-23 13:14:03 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2001-01-23 13:14:03 +0000 |
| commit | 280215a08a6462fc2d3d5797e2429762e6718b77 (patch) | |
| tree | 3b0e745d405322bf083c1c75eeff0b480a2abfaf /fml | |
| parent | 6d9ba63cb0ccec55c13e3548fdc7f9f188c13066 (diff) | |
| download | fml8-280215a08a6462fc2d3d5797e2429762e6718b77.tar.gz fml8-280215a08a6462fc2d3d5797e2429762e6718b77.tar.bz2 fml8-280215a08a6462fc2d3d5797e2429762e6718b77.zip | |
implement primitive ticket system (toymodel)
Diffstat (limited to 'fml')
| -rw-r--r-- | fml/etc/default_config.cf.ja | 4 | ||||
| -rw-r--r-- | fml/etc/defaults/header.cf.ja | 2 | ||||
| -rw-r--r-- | fml/etc/defaults/tickets.cf.ja | 2 | ||||
| -rw-r--r-- | fml/lib/FML/Header.pm | 19 | ||||
| -rw-r--r-- | fml/lib/FML/Header/Subject.pm | 17 | ||||
| -rw-r--r-- | fml/lib/FML/Process/Distribute.pm | 7 | ||||
| -rw-r--r-- | fml/lib/FML/SequenceFile.pm | 8 | ||||
| -rw-r--r-- | fml/lib/FML/Ticket/Model/toymodel.pm | 47 | ||||
| -rw-r--r-- | fml/lib/FML/Ticket/System.pm | 4 |
9 files changed, 102 insertions, 8 deletions
diff --git a/fml/etc/default_config.cf.ja b/fml/etc/default_config.cf.ja index 432d82a9..55f627d2 100644 --- a/fml/etc/default_config.cf.ja +++ b/fml/etc/default_config.cf.ja @@ -51,7 +51,7 @@ header_rewrite_rules = rewrite_subject_tag add_fml_article_id add_x_sequence add_rfc2369 - append_ticket_tag_to_subject + add_ticket_tag subject_tag_name = $ml_name @@ -93,7 +93,7 @@ chaddr_type = confirmation ticket_model = toymodel # -subject_ticket_tag = [%s #%08d] +ticket_subject_tag = [%s #%08d] # ticket_sequence_file = $ml_home_dir/ticket.seq diff --git a/fml/etc/defaults/header.cf.ja b/fml/etc/defaults/header.cf.ja index d33923c7..741bb0e9 100644 --- a/fml/etc/defaults/header.cf.ja +++ b/fml/etc/defaults/header.cf.ja @@ -16,7 +16,7 @@ header_rewrite_rules = rewrite_subject_tag add_fml_article_id add_x_sequence add_rfc2369 - append_ticket_tag_to_subject + add_ticket_tag subject_tag_name = $ml_name diff --git a/fml/etc/defaults/tickets.cf.ja b/fml/etc/defaults/tickets.cf.ja index 6aec636a..8404f77e 100644 --- a/fml/etc/defaults/tickets.cf.ja +++ b/fml/etc/defaults/tickets.cf.ja @@ -6,7 +6,7 @@ ticket_model = toymodel # -subject_ticket_tag = [%s #%08d] +ticket_subject_tag = [%s #%08d] # ticket_sequence_file = $ml_home_dir/ticket.seq diff --git a/fml/lib/FML/Header.pm b/fml/lib/FML/Header.pm index 39709033..9e7d753b 100644 --- a/fml/lib/FML/Header.pm +++ b/fml/lib/FML/Header.pm @@ -108,6 +108,25 @@ sub add_x_sequence } +sub add_ticket_tag +{ + my ($header, $config, $args) = @_; + my $model = $config->{ ticket_model }; + + if ($model eq 'toymodel') { + my $pkg = "FML::Ticket::Model::${model}"; + eval qq{ require $pkg; $pkg->import();}; + unless ($@) { + my $ts = $pkg->new; + $ts->add_ticket($header, $config, $args); + } + else { + Log($@); + } + } +} + + sub rewrite_subject_tag { my ($header, $config, $args) = @_; diff --git a/fml/lib/FML/Header/Subject.pm b/fml/lib/FML/Header/Subject.pm index ed104e2c..bfc7f3aa 100644 --- a/fml/lib/FML/Header/Subject.pm +++ b/fml/lib/FML/Header/Subject.pm @@ -77,6 +77,23 @@ sub _regexp_compile } +sub is_reply_message +{ + my ($self, $subject) = @_; + $subject =~ /Re:/i ? 1 : 0; +} + + +sub execute_ticket_system +{ + my ($self, $header, $config, $args) = @_; + my $model = $config->{ ticket_model }; + my $pkg = "Ticket::Model::".$model; + eval qq {require $pkg; $pkg->import();}; + + $pkg->increment_id( $config->{ ticket_sequence_file }); +} + =head1 NAME diff --git a/fml/lib/FML/Process/Distribute.pm b/fml/lib/FML/Process/Distribute.pm index 0e719255..7ec4f95e 100644 --- a/fml/lib/FML/Process/Distribute.pm +++ b/fml/lib/FML/Process/Distribute.pm @@ -147,6 +147,13 @@ sub _header_rewrite mode => 'distribute', }); } + + # ticket system + if ($rule eq 'add_ticket_tag') { + $header->add_ticket_tag($config, { + mode => 'distribute', + }); + } } } diff --git a/fml/lib/FML/SequenceFile.pm b/fml/lib/FML/SequenceFile.pm index 01b4a696..dc90a48f 100644 --- a/fml/lib/FML/SequenceFile.pm +++ b/fml/lib/FML/SequenceFile.pm @@ -38,6 +38,14 @@ sub increment_id return 0; }; + # touch + unless (-f $seq_file) { + use FileHandle; + my $fh = new FileHandle ">> $seq_file"; + print $fh "\n"; + close($fh); + }; + use IO::File::Atomic; my ($rh, $wh) = IO::File::Atomic->rw_open($seq_file); diff --git a/fml/lib/FML/Ticket/Model/toymodel.pm b/fml/lib/FML/Ticket/Model/toymodel.pm index e777c6e9..c1320abc 100644 --- a/fml/lib/FML/Ticket/Model/toymodel.pm +++ b/fml/lib/FML/Ticket/Model/toymodel.pm @@ -8,14 +8,16 @@ # $FML$ # -package Ticket::Model::toymodel; +package FML::Ticket::Model::toymodel; use strict; use vars qw(@ISA @EXPORT @EXPORT_OK); use Carp; +use FML::Log qw(Log); +use FML::Ticket::System; require Exporter; -@ISA = qw(Ticket::System Exporter); +@ISA = qw(FML::Ticket::System Exporter); sub new @@ -27,6 +29,47 @@ sub new } +sub add_ticket +{ + my ($self, $header, $config, $args) = @_; + my $subject = $header->get('subject'); + + use FML::Header::Subject; + my $hh = new FML::Header::Subject; + + # if the header carries "Subject: Re: ...", + # out ticket system does nothing. + unless ( $hh->is_reply_message( $subject ) ) { + Log( "seq: ". $config->{ ticket_sequence_file } ); + my $id = $self->increment_id( $config->{ ticket_sequence_file } ); + unless ($self->error) { + $self->_rewrite_subject($header, $config, $id); + } + else { + Log( $self->error ); + }; + } + else { + Log("not reply message"); + } +} + + +sub _rewrite_subject +{ + my ($self, $header, $config, $id) = @_; + + my $ml_name = $config->{ ml_name }; + my $tag = $config->{ ticket_subject_tag }; + my $subject = $header->get('subject'); + my $ticket_id = sprintf($tag, $ml_name, $id ); + + # append the ticket tag + $header->replace('subject', $subject." ".$ticket_id); +} + + + =head1 NAME FML::__HERE_IS_YOUR_MODULE_NAME__.pm - what is this diff --git a/fml/lib/FML/Ticket/System.pm b/fml/lib/FML/Ticket/System.pm index cee01771..69811e6b 100644 --- a/fml/lib/FML/Ticket/System.pm +++ b/fml/lib/FML/Ticket/System.pm @@ -8,7 +8,7 @@ # $FML$ # -package Ticket::System; +package FML::Ticket::System; use strict; use vars qw(@ISA @EXPORT @EXPORT_OK); use Carp; @@ -28,7 +28,7 @@ sub new sub increment_id { - my ($self, $file) = @_; + my ($self, $seq_file) = @_; use FML::SequenceFile; my $sfh = new FML::SequenceFile { sequence_file => $seq_file }; |
