# -*- perl -*-
@ScripActions = (
{ Name => 'Extract Custom Field Values', # loc
Description => 'extract cf-values out of a message', # loc
ExecModule => 'ExtractCustomFieldValues' },
{ Name => 'Extract Custom Field Values With Code in Template', # loc
Description => 'extract cf-values out of a message with a Text::Template template', # loc
ExecModule => 'ExtractCustomFieldValuesWithCodeInTemplate' }
);
@Templates = (
{ Queue => '0',
Name => 'CustomFieldScannerExample', # loc
Description => 'Example Template for ExtractCustomFieldValues', # loc
Content => <<'EOTEXT'
#### Syntax:
# CF Name | Header name or "Body" | MatchString(re) | Postcmd | Options
#### Allowed Options:
# q - (quiet) Don't record a transaction for adding the custom field
# value
# * - (wildcard) The MatchString regex should contain _two_
# capturing groups, the first of which is the CF name,
# the second of which is the value. If this option is
# given, the <cf-name> field is ignored.
# (Supercedes '+'.)
# + - (multiple) The MatchString regex will be applied with
# the /g option and all matching values will be added to
# the CF, which should probably be a multi-value CF for
# best results. (Superceded by '*'.)
#### Examples:
# 1. Put the content of the "X-MI-Test" header into the "testcf"
# custom field:
# testcf|X-MI-Test|.*
# 2. Scan the body for Host:name and put name into the "bodycf" custom
# field:
# bodycf|Body|Host:\s*(\w+)
# 3. Scan the "X-MI-IP" header for an IP-Adresse and get the hostname
# by reverse-resolving it:
# Hostname|X-MI-IP|\d+\.\d+\.\d+\.\d+|use Socket; ($value) = gethostbyaddr(inet_aton($value),AF_INET);
# 4. scan the "CC" header for an many email addresses, and add them to
# a custom field named "parsedCCs". If "parsedCCs" is a multivalue
# CF, then this should yield separate values for all email adress
# found.
# parsedCCs|CC|.*|$value =~ s/^\s+//; $value =~ s/\s+$//;
# 5. Looks for an "Email:" field in the body of the email, then loads
# up that user and makes them privileged The blank first field
# means the automatic CustomField setting is not invoked.
# |Body|Email:\s*(.+)$|my $u = RT::User->new($RT::SystemUser); $u->LoadByEmail($value); $u->SetPrivileged(1)|
# 6. Looks for any text of the form "Set CF Name: Value" in the body,
# and sets the CF named "CF Name" to the given value, which may be
# multi-line. The '*' option controls the wildcard nature of this
# example.
# Separator=!
# !Body!^Set ([^\n:]*?):\s*((?s).*?)(?:\Z|\n\Z|\n\n)!!*
# 7. Looks for the regex anywhere in the headers and stores the match
# in the AllHeaderSearch CF
# AllHeaderSearch|Headers|Site:\s*(\w+)
# 8. If you need to dynamically build your matching, and want to trigger on headers and body
# and invode some arbitrary code like example 5
# Separator=~~
{
# my $action = 'use My::Site; My::Site::SetSiteID( Ticket => $self->TicketObj, Site => $_ );';
#
# for my $regex (My::Site::ValidRegexps) {
# for my $from ('headers', 'body') {
# $OUT .= join '~~',
# '', # CF name
# $from,
# $regex,
# $action;
# $OUT .= "\n";
# }
# }
}
EOTEXT
}
);
1;