]>
git.proxmox.com Git - pmg-api.git/blob - src/PMG/RuleDB/ModField.pm
1 package PMG
::RuleDB
::ModField
;
7 use Encode
qw(encode decode);
8 use MIME
::Words
qw(encode_mimewords);
12 use PMG
::RuleDB
::Object
;
14 use base
qw(PMG::RuleDB::Object);
25 return 'Header Attribute';
37 my ($type, $field, $field_value, $ogroup) = @_;
39 my $class = ref($type) || $type;
41 my $self = $class->SUPER::new
($class->otype(), $ogroup);
43 $self->{field
} = $field;
44 $self->{field_value
} = $field_value;
50 my ($type, $ruledb, $id, $ogroup, $value) = @_;
52 my $class = ref($type) || $type;
54 defined($value) || return undef;
56 my ($field, $field_value) = $value =~ m/^([^\:]*)\:(.*)$/;
58 (defined($field) && defined($field_value)) || return undef;
60 my $obj = $class->new($field, $field_value, $ogroup);
63 $obj->{digest
} = Digest
::SHA
::sha1_hex
($id, $field, $field_value, $ogroup);
69 my ($self, $ruledb) = @_;
71 defined($self->{ogroup
}) || return undef;
73 my $new_value = "$self->{field}:$self->{field_value}";
75 if (defined ($self->{id
})) {
79 "UPDATE Object SET Value = ? WHERE ID = ?",
80 undef, $new_value, $self->{id
});
85 my $sth = $ruledb->{dbh
}->prepare(
86 "INSERT INTO Object (Objectgroup_ID, ObjectType, Value) " .
89 $sth->execute($self->ogroup, $self->otype, $new_value);
91 $self->{id
} = PMG
::Utils
::lastid
($ruledb->{dbh
}, 'object_id_seq');
98 my ($self, $queue, $ruledb, $mod_group, $targets,
99 $msginfo, $vars, $marks) = @_;
101 my $fvalue = PMG
::Utils
::subst_values
($self->{field_value
}, $vars);
103 # support for multiline values (i.e. __SPAM_INFO__)
104 $fvalue =~ s/\r?\n/\n\t/sg; # indent content
105 $fvalue =~ s/\n\s*\n//sg; # remove empty line
106 $fvalue =~ s/\n?\s*$//s; # remove trailing spaces
108 my $subgroups = $mod_group->subgroups($targets);
110 foreach my $ta (@$subgroups) {
111 my ($tg, $e) = (@$ta[0], @$ta[1]);
112 $e->head->replace($self->{field
}, encode_mimewords
(encode
('UTF-8', $fvalue), "Charset" => "UTF-8"));
119 return "modify field: $self->{field}:$self->{field_value}";
127 description
=> "The Field",
129 pattern
=> '[0-9a-zA-Z\/\\\[\]\+\-\.\*\_]+',
133 description
=> "The Value",
144 field
=> $self->{field
},
145 value
=> $self->{field_value
},
150 my ($self, $param) = @_;
152 $self->{field_value
} = $param->{value
};
153 $self->{field
} = $param->{field
};
160 =head1 PMG::RuleDB::ModField
162 Modify fields of a message.