summaryrefslogtreecommitdiff
path: root/fml
diff options
context:
space:
mode:
authorfukachan <fukachan>2001-01-23 13:14:03 +0000
committerfukachan <fukachan>2001-01-23 13:14:03 +0000
commit280215a08a6462fc2d3d5797e2429762e6718b77 (patch)
tree3b0e745d405322bf083c1c75eeff0b480a2abfaf /fml
parent6d9ba63cb0ccec55c13e3548fdc7f9f188c13066 (diff)
downloadfml8-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.ja4
-rw-r--r--fml/etc/defaults/header.cf.ja2
-rw-r--r--fml/etc/defaults/tickets.cf.ja2
-rw-r--r--fml/lib/FML/Header.pm19
-rw-r--r--fml/lib/FML/Header/Subject.pm17
-rw-r--r--fml/lib/FML/Process/Distribute.pm7
-rw-r--r--fml/lib/FML/SequenceFile.pm8
-rw-r--r--fml/lib/FML/Ticket/Model/toymodel.pm47
-rw-r--r--fml/lib/FML/Ticket/System.pm4
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 };