]> git.proxmox.com Git - pmg-api.git/blame - PMG/RuleDB/ModField.pm
fix otype attribute
[pmg-api.git] / PMG / RuleDB / ModField.pm
CommitLineData
758c7b6b
DM
1package PMG::RuleDB::ModField;
2
3use strict;
4use warnings;
5use Carp;
6use DBI;
7use Digest::SHA;
8
9use PMG::Utils;
10use PMG::ModGroup;
11use PMG::RuleDB::Object;
12
13use base qw(PMG::RuleDB::Object);
14
15sub otype {
16 return 4003;
17}
18
19sub oclass {
20 return 'action';
21}
22
23sub otype_text {
24 return 'Header Attribute';
25}
26
27sub oicon {
28 return 'modfield.gif';
29}
30
31sub final {
32 return 0;
33}
34
35sub priority {
36 return 10;
37}
38
39sub new {
40 my ($type, $field, $field_value, $ogroup) = @_;
41
42 my $class = ref($type) || $type;
43
7a2cf7e6 44 my $self = $class->SUPER::new($class->otype(), $ogroup);
758c7b6b
DM
45
46 $self->{field} = $field;
47 $self->{field_value} = $field_value;
48
49 return $self;
50}
51
52sub load_attr {
53 my ($type, $ruledb, $id, $ogroup, $value) = @_;
54
55 my $class = ref($type) || $type;
56
57 defined($value) || return undef;
58
59 my ($field, $field_value) = $value =~ m/^([^\:]*)\:(.*)$/;
60
61 (defined($field) && defined($field_value)) || return undef;
62
63 my $obj = $class->new($field, $field_value, $ogroup);
64 $obj->{id} = $id;
65
66 $obj->{digest} = Digest::SHA::sha1_hex($id, $field, $field_value, $ogroup);
67
68 return $obj;
69}
70
71sub save {
72 my ($self, $ruledb) = @_;
73
74 defined($self->{ogroup}) || return undef;
75
76 my $new_value = "$self->{field}:$self->{field_value}";
77
78 if (defined ($self->{id})) {
79 # update
80
81 $ruledb->{dbh}->do(
82 "UPDATE Object SET Value = ? WHERE ID = ?",
83 undef, $new_value, $self->{id});
84
85 } else {
86 # insert
87
88 my $sth = $ruledb->{dbh}->prepare(
89 "INSERT INTO Object (Objectgroup_ID, ObjectType, Value) " .
90 "VALUES (?, ?, ?);");
91
92 $sth->execute($self->ogroup, $self->otype, $new_value);
93
94 $self->{id} = PMG::Utils::lastid($ruledb->{dbh}, 'object_id_seq');
95 }
96
97 return $self->{id};
98}
99
100sub execute {
101 my ($self, $queue, $ruledb, $mod_group, $targets,
102 $msginfo, $vars, $marks) = @_;
103
104 my $fvalue = PMG::Utils::subst_values ($self->{field_value}, $vars);
105
106 # support for multiline values (i.e. __SPAM_INFO__)
107 $fvalue =~ s/\r?\n/\n\t/sg; # indent content
108 $fvalue =~ s/\n\s*\n//sg; # remove empty line
109 $fvalue =~ s/\n?\s*$//s; # remove trailing spaces
110
111 my $subgroups = $mod_group->subgroups($targets);
112
113 foreach my $ta (@$subgroups) {
114 my ($tg, $e) = (@$ta[0], @$ta[1]);
115 $e->head->replace($self->{field}, $fvalue);
116 }
117}
118
119sub short_desc {
120 my $self = shift;
121
122 return "modify field: $self->{field}:$self->{field_value}";
123}
124
1251;
126
127__END__
128
129=head1 PMG::RuleDB::ModField
130
131Modify fields of a message.