# -*- perl -*-

@ScripActions = (

    { Name        => 'Extract Custom Field Values',          # loc
      Description => 'extract cf-values out of a message',    # loc
      ExecModule  => 'ExtractCustomFieldValues' }

);

@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.

#### 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)!!*

EOTEXT
    }
);

1;
