-# Initial data for a fresh RT3 Installation.
+# Initial data for a fresh RT installation.
@Users = (
- { Name => 'Nobody',
- RealName => 'Nobody in particular',
- Comments => 'Do not delete or modify this user. It is integral '
- . 'to RT\'s internal data structures',
- Privileged => '0', },
-
{ Name => 'root',
Gecos => 'root',
RealName => 'Enoch Root',
Password => 'password',
EmailAddress => "root\@localhost",
Comments => 'SuperUser',
- Privileged => '1', } );
+ Privileged => '1',
+ },
+);
@Groups = (
- { Name => '',
- Type => 'Everyone', # loc
- Domain => 'SystemInternal',
- Instance => '',
- Description => 'Pseudogroup for internal use', # loc
- },
- { Type => 'Privileged', # loc
- Domain => 'SystemInternal',
- Instance => '',
- Name => '',
- Description => 'Pseudogroup for internal use', # loc
- },
- { Name => '',
- Type => 'Unprivileged', # loc
- Domain => 'SystemInternal',
- Instance => '',
- Description => 'Pseudogroup for internal use', # loc
- },
- { Name => '',
- Type => 'Owner', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'SystemRolegroup for internal use', # loc
- },
- { Name => '',
- Type => 'Requestor', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'SystemRolegroup for internal use', # loc
- },
- { Name => '',
- Type => 'Cc', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'SystemRolegroup for internal use', # loc
- },
- { Name => '',
- Type => 'AdminCc', # loc
- Domain => 'RT::System-Role',
- Instance => '',
- Description => 'Pseudogroup for internal use', # loc
- }, );
+);
@Queues = ({ Name => 'General',
Description => 'The default queue',
CorrespondAddress => "",
CommentAddress => "", },
{ Name => '___Approvals',
+ Lifecycle => 'approvals',
Description => 'A system-internal queue for the approvals system',
Disabled => 2, } );
ExecModule => 'NotifyAsComment',
Argument => 'Requestor,Cc' },
- { Name => 'Notify Requestors and Ccs', # loc
- Description => 'Send mail to requestors and Ccs', # loc
- ExecModule => 'Notify',
- Argument => 'Requestor,Cc' },
+# deprecated
+# { Name => 'Notify Requestors and Ccs', # loc
+# Description => 'Send mail to requestors and Ccs', # loc
+# ExecModule => 'Notify',
+# Argument => 'Requestor,Cc' },
- { Name => 'Notify Requestors, Ccs and AdminCcs as Comment', # loc
- Description => 'Send mail to all watchers as a "comment"', # loc
+# not yet deprecated
+ { Name => 'Notify Owner, Requestors, Ccs and AdminCcs as Comment', # loc
+ Description => 'Send mail to owner and all watchers as a "comment"', # loc
ExecModule => 'NotifyAsComment',
Argument => 'All' },
- { Name => 'Notify Requestors, Ccs and AdminCcs', # loc
- Description => 'Send mail to all watchers', # loc
+ { Name => 'Notify Owner, Requestors, Ccs and AdminCcs', # loc
+ Description => 'Send mail to owner and all watchers', # loc
ExecModule => 'Notify',
Argument => 'All' },
{ Name => 'Notify Other Recipients as Comment', # loc
Description => 'Sends mail to explicitly listed Ccs and Bccs', # loc
ExecModule => 'NotifyAsComment',
Argument => 'OtherRecipients' },
- { Name => 'Notify Other Recipients', # loc
- Description => 'Sends mail to explicitly listed Ccs and Bccs', # loc
- ExecModule => 'Notify',
- Argument => 'OtherRecipients' },
+# deprecated
+# { Name => 'Notify Other Recipients', # loc
+# Description => 'Sends mail to explicitly listed Ccs and Bccs', # loc
+# ExecModule => 'Notify',
+# Argument => 'OtherRecipients' },
+
{ Name => 'User Defined', # loc
Description => 'Perform a user-defined action', # loc
ExecModule => 'UserDefined', },
Description =>
'Create new tickets based on this scrip\'s template', # loc
ExecModule => 'CreateTickets', },
- { Name => 'Open Tickets',
+ { Name => 'Open Tickets', # loc
Description => 'Open tickets on correspondence', # loc
ExecModule => 'AutoOpen' },
+ { Name => 'Extract Subject Tag', # loc
+ Description => 'Extract tags from a Transaction\'s subject and add them to the Ticket\'s subject.', # loc
+ ExecModule => 'ExtractSubjectTag' },
+
+ #freeside
+ { Name => 'Set Priority',
+ Description => 'Set ticket priority',
+ ExecModule => 'SetPriority',
+ Argument => '',
+ },
+ { Name => 'Cancel Scheduled Resolve',
+ Description => 'Set ticket not to resolve in the future',
+ ExecModule => 'SetWillResolve',
+ Argument => '',
+ },
+ { Name => 'Scheduled Resolve',
+ Description => 'Resolve ticket if its WillResolve date has passed',
+ ExecModule => 'ScheduledResolve',
+ Argument => '',
+ },
+# combine these into a single action so they can see each other in the headers
+ { Name => 'Notify Requestors, Ccs, and Other Recipients',
+ Description => 'Send mail to requestors, watchers, and explicit Ccs',
+ ExecModule => 'Notify',
+ Argument => 'Requestor,Cc,OtherRecipients',
+ },
);
@ScripConditions = (
ApplicableTransTypes => 'Correspond',
ExecModule => 'AnyTransaction', },
+ {
+
+ Name => 'On Forward', # loc
+ Description => 'Whenever a ticket or transaction is forwarded', # loc
+ ApplicableTransTypes => 'Forward Transaction,Forward Ticket',
+ ExecModule => 'AnyTransaction', },
+
+ {
+
+ Name => 'On Forward Ticket', # loc
+ Description => 'Whenever a ticket is forwarded', # loc
+ ApplicableTransTypes => 'Forward Ticket',
+ ExecModule => 'AnyTransaction', },
+
+ {
+
+ Name => 'On Forward Transaction', # loc
+ Description => 'Whenever a transaction is forwarded', # loc
+ ApplicableTransTypes => 'Forward Transaction',
+ ExecModule => 'AnyTransaction', },
+
{
Name => 'On Comment', # loc
Argument => 'resolved'
},
+ { Name => 'On Reject', # loc
+ Description => 'Whenever a ticket is rejected', # loc
+ ApplicableTransTypes => 'Status',
+ ExecModule => 'StatusChange',
+ Argument => 'rejected'
+ },
{ Name => 'User Defined', # loc
Description => 'Whenever a user-defined condition occurs', # loc
ApplicableTransTypes => 'Any',
},
+ { Name => 'On Close', # loc
+ Description => 'Whenever a ticket is closed', # loc
+ ApplicableTransTypes => 'Status,Set',
+ ExecModule => 'CloseTicket',
+ },
+ { Name => 'On Reopen', # loc
+ Description => 'Whenever a ticket is reopened', # loc
+ ApplicableTransTypes => 'Status,Set',
+ ExecModule => 'ReopenTicket',
+ },
+
+ #freeside
+ { Name => 'On Custom Field Transaction',
+ Description => 'When a custom field is changed',
+ ExecModule => 'CustomFieldTransaction',
+ ApplicableTransTypes => 'Any',
+ },
+ { Name => 'On Custom Field Change',
+ Description => 'When a custom field is changed to some value',
+ ExecModule => 'CustomFieldChange',
+ ApplicableTransTypes => 'Any',
+ },
+
);
@Templates = (
a summary of which appears below.
There is no need to reply to this message right now. Your ticket has been
-assigned an ID of [{$rtname} #{$Ticket->id()}].
+assigned an ID of { $Ticket->SubjectTag }.
Please include the string:
- [{$rtname} #{$Ticket->id}]
+ { $Ticket->SubjectTag }
in the subject line of all future correspondence about this issue. To do so,
you may reply to this message.
{$Transaction->CreatedAsString}: Request {$Ticket->id} was acted upon.
-Transaction: {$Transaction->Description}
+ Transaction: {$Transaction->Description}
Queue: {$Ticket->QueueObj->Name}
Subject: {$Transaction->Subject || $Ticket->Subject || "(No subject given)"}
Owner: {$Ticket->OwnerObj->Name}
Requestors: {$Ticket->RequestorAddresses}
Status: {$Ticket->Status}
- Ticket <URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >
+ Ticket <URL: {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id} >
{$Transaction->Content()}
Content => 'RT-Attach-Message: yes
-<URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >
+<URL: {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id} >
{$Transaction->Content()}
'
Name => 'Admin Comment', # loc
Description => 'Default admin comment template', # loc
Content =>
-'Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject); $s =~ s/\\[Comment\\]//g; $comment =~ s/^Re//i; $s;}
+'Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject||""); $s =~ s/\\[Comment\\]\\s*//g; $s =~ s/^Re:\\s*//i; $s;}
+RT-Attach-Message: yes
-{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}
+{RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id}
This is a comment. It is not sent to the Requestor(s):
{$Transaction->Content()}
Content => 'Subject: Status Changed to: {$Transaction->NewValue}
-{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}
+{RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id}
{$Transaction->Content()}
'
There is a new item pending your approval: "{$Ticket->Subject()}",
a summary of which appears below.
-Please visit {$RT::WebURL}Approvals/Display.html?id={$Ticket->id}
-to approve or reject this ticket, or {$RT::WebURL}Approvals/ to
+Please visit {RT->Config->Get(\'WebURL\')}Approvals/Display.html?id={$Ticket->id}
+to approve or reject this ticket, or {RT->Config->Get(\'WebURL\')}Approvals/ to
batch-process all your pending approvals.
-------------------------------------------------------------------------
{ Queue => '___Approvals',
Name => "Approval Passed", # loc
Description =>
- "Notify Owner of their ticket has been approved by some approver", # loc
+ "Notify Requestor of their ticket has been approved by some approver", # loc
Content => 'Subject: Ticket Approved: {$Ticket->Subject}
Greetings,
-Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
+Your ticket has been approved by { eval { $Approver->Name } }.
Other approvals may be pending.
+
+Approver\'s notes: { $Notes }
'
},
{ Queue => '___Approvals',
Name => "All Approvals Passed", # loc
Description =>
- "Notify Owner of their ticket has been approved by all approvers", # loc
+ "Notify Requestor of their ticket has been approved by all approvers", # loc
Content => 'Subject: Ticket Approved: {$Ticket->Subject}
Greetings,
-Your ticket has been approved. Its Owner may now start to act on it.
+Your ticket has been approved by { eval { $Approver->Name } }.
+Its Owner may now start to act on it.
+
+Approver\'s notes: { $Notes }
'
},
{ Queue => '___Approvals',
Greetings,
-Your ticket has been rejected by { eval { $Approval->OwnerObj->Name } }.
+Your ticket has been rejected by { eval { $Approver->Name } }.
+
+Approver\'s notes: { $Notes }
'
},
+ { Queue => '___Approvals',
+ Name => "Approval Ready for Owner", # loc
+ Description =>
+ "Notify Owner of their ticket has been approved and is ready to be acted on", # loc
+ Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+
+Greetings,
+
+The ticket has been approved, you may now start to act on it.
+
+'
+ },
+ { Queue => 0,
+ Name => "Forward", # loc
+ Description => "Heading of a forwarded message", # loc
+ Content => q{
+This is a forward of transaction #{$Transaction->id} of ticket #{ $Ticket->id }
+}
+ },
+ { Queue => 0,
+ Name => "Forward Ticket", # loc
+ Description => "Heading of a forwarded Ticket", # loc
+ Content => q{
+
+This is a forward of ticket #{ $Ticket->id }
+}
+ },
+ { Queue => 0,
+ Name => "Error: public key", # loc
+ Description =>
+ "Inform user that he has problems with public key and couldn't recieve encrypted content", # loc
+ Content => q{Subject: We have no your public key or it's wrong
+
+You received this message as we have no your public PGP key or we have a problem with your key. Inform the administrator about the problem.
+}
+ },
+ { Queue => 0,
+ Name => "Error to RT owner: public key", # loc
+ Description =>
+ "Inform RT owner that user(s) have problems with public keys", # loc
+ Content => q{Subject: Some users have problems with public keys
+
+You received this message as RT has problems with public keys of the following user:
+{
+ foreach my $e ( @BadRecipients ) {
+ $OUT .= "* ". $e->{'Message'} ."\n";
+ }
+}}
+ },
+ { Queue => 0,
+ Name => "Error: no private key", # loc
+ Description =>
+ "Inform user that we received an encrypted email and we have no private keys to decrypt", # loc
+ Content => q{Subject: we received message we cannot decrypt
+
+You sent an encrypted message with subject '{ $Message->head->get('Subject') }',
+but we have no private key it's encrypted to.
+
+Please, check that you encrypt messages with correct keys
+or contact the system administrator.}
+ },
+ { Queue => 0,
+ Name => "Error: bad GnuPG data", # loc
+ Description =>
+ "Inform user that a message he sent has invalid GnuPG data", # loc
+ Content => q{Subject: We received a message we cannot handle
+
+You sent us a message that we cannot handle due to corrupted GnuPG signature or encrypted block. we get the following error(s):
+{ foreach my $msg ( @Messages ) {
+ $OUT .= "* $msg\n";
+ }
+}}
+ },
+ { Queue => 0,
+ Name => "PasswordChange", # loc
+ Description =>
+ "Inform user that his password has been reset", # loc
+ Content => q{Subject: [{RT->Config->Get('rtname')}] Password reset
+
+Greetings,
+
+Someone at {$ENV{'REMOTE_ADDR'}} requested a password reset for you on {RT->Config->Get('WebURL')}
+
+Your new password is:
+ {$NewPassword}
+}
+ },
+
+ { Queue => '0',
+ Name => 'Email Digest', # loc
+ Description => 'Email template for periodic notification digests', # loc
+ Content => q[Subject: RT Email Digest
+
+{ $Argument }
+],
+ },
+
+{
+ Queue => 0,
+ Name => "Error: Missing dashboard", # loc
+ Description =>
+ "Inform user that a dashboard he subscribed to is missing", # loc
+ Content => q{Subject: [{RT->Config->Get('rtname')}] Missing dashboard!
+
+Greetings,
+
+You are subscribed to a dashboard that is currently missing. Most likely, the dashboard was deleted.
+
+RT will remove this subscription as it is no longer useful. Here's the information RT had about your subscription:
+
+DashboardID: { $SubscriptionObj->SubValue('DashboardId') }
+Frequency: { $SubscriptionObj->SubValue('Frequency') }
+Hour: { $SubscriptionObj->SubValue('Hour') }
+{
+ $SubscriptionObj->SubValue('Frequency') eq 'weekly'
+ ? "Day of week: " . $SubscriptionObj->SubValue('Dow')
+ : $SubscriptionObj->SubValue('Frequency') eq 'monthly'
+ ? "Day of month: " . $SubscriptionObj->SubValue('Dom')
+ : ''
+}
+}
+},
+ { Queue => 0,
+ Name => 'Custom Field Transaction',
+ Description => 'Custom field value changed',
+ Content => q[Subject: {$Transaction->BriefDescription()}
+
+{RT->Config->Get('WebURL')}Ticket/Display.html?id={$Ticket->id}
+
+{$Transaction->Content()}
+],
+ },
+
);
-# }}}
@Scrips = (
- { ScripCondition => 'On Correspond',
+ { Description => 'On Correspond Open Tickets',
+ ScripCondition => 'On Correspond',
ScripAction => 'Open Tickets',
Template => 'Blank' },
- { ScripCondition => 'On Owner Change',
+ { Description => 'On Owner Change Notify Owner',
+ ScripCondition => 'On Owner Change',
ScripAction => 'Notify Owner',
Template => 'Transaction' },
- { ScripCondition => 'On Create',
+ { Description => 'On Create Autoreply To Requestors',
+ ScripCondition => 'On Create',
ScripAction => 'AutoReply To Requestors',
Template => 'AutoReply' },
- { ScripCondition => 'On Create',
+ { Description => 'On Create Notify AdminCcs',
+ ScripCondition => 'On Create',
ScripAction => 'Notify AdminCcs',
Template => 'Transaction' },
- { ScripCondition => 'On Correspond',
+ { Description => 'On Correspond Notify AdminCcs',
+ ScripCondition => 'On Correspond',
ScripAction => 'Notify AdminCcs',
Template => 'Admin Correspondence' },
- { ScripCondition => 'On Correspond',
- ScripAction => 'Notify Requestors And Ccs',
- Template => 'Correspondence' },
- { ScripCondition => 'On Correspond',
- ScripAction => 'Notify Other Recipients',
- Template => 'Correspondence' },
- { ScripCondition => 'On Comment',
+# { Description => 'On Correspond Notify Requestors and Ccs',
+# ScripCondition => 'On Correspond',
+# ScripAction => 'Notify Requestors And Ccs',
+# Template => 'Correspondence' },
+# { Description => 'On Correspond Notify Other Recipients',
+# ScripCondition => 'On Correspond',
+# ScripAction => 'Notify Other Recipients',
+# Template => 'Correspondence' },
+ { Description => 'On Correspond Notify Requestors, Ccs, and Other Recipients',
+ ScripCondition => 'On Correspond',
+ ScripAction => 'Notify Requestors, Ccs, and Other Recipients',
+ Template => 'Correspondence', },
+ { Description => 'On Comment Notify AdminCcs as Comment',
+ ScripCondition => 'On Comment',
ScripAction => 'Notify AdminCcs As Comment',
Template => 'Admin Comment' },
- { ScripCondition => 'On Comment',
+ { Description => 'On Comment Notify Other Recipients as Comment',
+ ScripCondition => 'On Comment',
ScripAction => 'Notify Other Recipients As Comment',
Template => 'Correspondence' },
- { ScripCondition => 'On Resolve',
+ { Description => 'On Resolve Notify Requestors',
+ ScripCondition => 'On Resolve',
ScripAction => 'Notify Requestors',
Template => 'Resolved' },
- { Description => "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval", # loc
- Queue => '___Approvals',
- ScripCondition => 'User Defined',
- CustomIsApplicableCode => q[
- $self->TicketObj->Type eq 'approval' and
- $self->TransactionObj->Field eq 'Status' and
- $self->TransactionObj->NewValue eq 'open' and
- eval { $T::Approving = ($self->TicketObj->AllDependedOnBy( Type => 'ticket' ))[0] }
- ],
- ScripAction => 'Notify Owner',
- Template => 'New Pending Approval' },
- { Description => "If an approval is rejected, reject the original and delete pending approvals", # loc
- Queue => '___Approvals',
- ScripCondition => 'On Status Change',
- ScripAction => 'User Defined',
- CustomPrepareCode => q[
-# ------------------------------------------------------------------- #
-return(0) unless ( lc($self->TransactionObj->NewValue) eq "rejected" or
- lc($self->TransactionObj->NewValue) eq "deleted" );
-
-my $rejected = 0;
-my $links = $self->TicketObj->DependedOnBy;
-foreach my $link (@{ $links->ItemsArrayRef }) {
- my $obj = $link->BaseObj;
- if ($obj->QueueObj->IsActiveStatus($obj->Status)) {
- if ($obj->Type eq 'ticket') {
- $obj->Comment(
- Content => $self->loc("Your request was rejected."),
- );
- $obj->SetStatus(
- Status => 'rejected',
- Force => 1,
- );
-
- $T::Approval = $self->TicketObj; # so we can access it inside templates
- $self->{TicketObj} = $obj; # we want the original id in the token line
- $rejected = 1;
- }
- else {
- $obj->SetStatus(
- Status => 'deleted',
- Force => 1,
- );
- }
- }
-}
-
-$links = $self->TicketObj->DependsOn;
-foreach my $link (@{ $links->ItemsArrayRef }) {
- my $obj = $link->TargetObj;
- if ($obj->QueueObj->IsActiveStatus($obj->Status)) {
- $obj->SetStatus(
- Status => 'deleted',
- Force => 1,
- );
- }
-}
-
-# Now magically turn myself into a Requestor Notify object...
-require RT::Action::Notify; bless($self, 'RT::Action::Notify');
-$self->{Argument} = 'Requestor'; $self->Prepare;
-
-return $rejected;
-# ------------------------------------------------------------------- #
- ],
- CustomCommitCode => '"never needed"',
- Template => 'Approval Rejected', },
- { Description => "When a ticket has been approved by any approver, add correspondence to the original ticket", # loc
- Queue => '___Approvals',
- ScripCondition => 'On Resolve',
- ScripAction => 'User Defined',
- CustomPrepareCode => q[
-# ------------------------------------------------------------------- #
-return(0) unless ($self->TicketObj->Type eq 'approval');
-
-my $note;
-my $t = $self->TicketObj->Transactions;
-while (my $o = $t->Next) {
- $note .= $o->Content . "\n" if $o->ContentObj
- and $o->Content !~ /Default Approval/;
-}
-
-foreach my $obj ($self->TicketObj->AllDependedOnBy( Type => 'ticket' )) {
- $obj->Comment(
- Content => $self->loc( "Your request has been approved by [_1]. Other approvals may still be pending.", # loc
- $self->TransactionObj->CreatorObj->Name,
- ) . "\n" . $self->loc( "Approver's notes: [_1]", # loc
- $note
- ),
- );
- $T::Approval = $self->TicketObj; # so we can access it inside templates
- $self->{TicketObj} = $obj; # we want the original id in the token line
-}
-
-# Now magically turn myself into a Requestor Notify object...
-require RT::Action::Notify; bless($self, 'RT::Action::Notify');
-$self->{Argument} = 'Requestor'; $self->Prepare;
-
-return 1;
-# ------------------------------------------------------------------- #
- ],
- CustomCommitCode => '"never needed"',
- Template => 'Approval Passed' },
- { Description => "When a ticket has been approved by all approvers, add correspondence to the original ticket", # loc
- Queue => '___Approvals',
- ScripCondition => 'On Resolve',
- ScripAction => 'User Defined',
- CustomPrepareCode => q[
-# ------------------------------------------------------------------- #
-# Find all the tickets that depend on this (that this is approving)
-
-my $Ticket = $self->TicketObj;
-my @TOP = $Ticket->AllDependedOnBy( Type => 'ticket' );
-my $links = $Ticket->DependedOnBy;
-my $passed = 0;
-
-while (my $link = $links->Next) {
- my $obj = $link->BaseObj;
- next if ($obj->HasUnresolvedDependencies( Type => 'approval' ));
-
- if ($obj->Type eq 'ticket') {
- $obj->Comment(
- Content => $self->loc("Your request has been approved."),
- );
- $T::Approval = $Ticket; # so we can access it inside templates
- $self->{TicketObj} = $obj; # we want the original id in the token line
- $passed = 1;
- }
- elsif ($obj->Type eq 'approval') {
- $obj->SetStatus( Status => 'open', Force => 1 );
- }
- elsif ($RT::UseCodeTickets and $obj->Type eq 'code') {
- my $code = $obj->Transactions->First->Content;
- my $rv;
-
- foreach my $TOP (@TOP) {
- local $@;
- $rv++ if eval $code;
- $RT::Logger->error("Cannot eval code: $@") if $@;
- }
-
- if ($rv or !@TOP) {
- $obj->SetStatus( Status => 'resolved', Force => 1,);
- }
- else {
- $obj->SetStatus( Status => 'rejected', Force => 1,);
- }
- }
-}
-
-# Now magically turn myself into a Requestor Notify object...
-require RT::Action::Notify; bless($self, 'RT::Action::Notify');
-$self->{Argument} = 'Requestor'; $self->Prepare;
-
-return 0; # ignore $passed;
-# ------------------------------------------------------------------- #
- ],
- CustomCommitCode => '"never needed"',
- Template => 'All Approvals Passed', },
-
+ { Description => "On transaction, add any tags in the transaction's subject to the ticket's subject",
+ ScripCondition => 'On Transaction',
+ ScripAction => 'Extract Subject Tag',
+ Template => 'Blank' },
+ { Description => 'On Correspond, cancel future resolve',
+ ScripCondition => 'On Correspond',
+ ScripAction => 'Cancel Scheduled Resolve',
+ Template => 'Blank' },
);
@ACL = (
- { UserId => 'Nobody', # - principalId
- Right => 'OwnTicket', },
-
{ UserId => 'root', # - principalid
Right => 'SuperUser', },
+ { GroupDomain => 'SystemInternal',
+ GroupType => 'privileged',
+ Right => 'ShowApprovalsTab', },
+
);
# Predefined searches
{ Name => 'Search - My Tickets',
Description => '[_1] highest priority tickets I own', # loc
Content =>
- { Format => "'<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', Priority, QueueName, ExtendedStatus",
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
+ . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
+ . q{Priority, QueueName, ExtendedStatus},
Query => " Owner = '__CurrentUser__' AND ( Status = 'new' OR Status = 'open')",
OrderBy => 'Priority',
- Order => 'DESC' },
+ Order => 'DESC'
+ },
},
{ Name => 'Search - Unowned Tickets',
Description => '[_1] newest unowned tickets', # loc
Content =>
# 'Take' #loc
- { Format => "'<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', QueueName, ExtendedStatus, CreatedRelative, '<A HREF=\"__WebPath__/Ticket/Display.html?Action=Take&id=__id__\">__loc(Take)__</a>/TITLE: ' ",
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
+ . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
+ . q{QueueName, ExtendedStatus, CreatedRelative, }
+ . q{'<A HREF="__WebPath__/Ticket/Display.html?Action=Take&id=__id__">__loc(Take)__</a>/TITLE:NBSP'},
Query => " Owner = 'Nobody' AND ( Status = 'new' OR Status = 'open')",
OrderBy => 'Created',
+ Order => 'DESC'
+ },
+ },
+ { Name => 'Search - Bookmarked Tickets',
+ Description => 'Bookmarked Tickets', #loc
+ Content =>
+ { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
+ . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
+ . q{Priority, QueueName, ExtendedStatus, Bookmark},
+ Query => "id = '__Bookmarked__'",
+ OrderBy => 'LastUpdated',
Order => 'DESC' },
},
- { Name => 'HomepageSettings',
- Description => 'HomepageSettings',
- Content =>
- { 'body' => # loc
- [ { type => 'system', name => 'My Tickets' },
- { type => 'system', name => 'Unowned Tickets' },
- { type => 'component', name => 'QuickCreate'},
- ],
- 'summary' => # loc
- [
- { type => 'component', name => 'MyReminders' },
- { type => 'component', name => 'Quicksearch' },
- { type => 'component', name => 'RefreshHomepage' },
- ]
+ {
+ Name => 'HomepageSettings',
+ Description => 'HomepageSettings',
+ Content => {
+ 'body' => # loc
+ [
+ {
+ type => 'system',
+ name => 'My Tickets', # loc
+ },
+ {
+ type => 'system',
+ name => 'Unowned Tickets' # loc
+ },
+ {
+ type => 'system',
+ name => 'Bookmarked Tickets' # loc
+ },
+ {
+ type => 'component',
+ name => 'QuickCreate' # loc
+ },
+ ],
+ 'summary' => # loc
+ [
+ {
+ type => 'component',
+ name => 'MyReminders' # loc
+ },
+ {
+ type => 'component',
+ name => 'Quicksearch' # loc
+ },
+ {
+ type => 'component',
+ name => 'Dashboards' # loc
+ },
+ {
+ type => 'component',
+ name => 'RefreshHomepage' # loc
+ },
+ ],
+ },
},
-}
);
+
+# freeside upgrade
+# Obsolete/erroneous scrips
+# If
+# $Delete_Scrips{conditionname}{actionname}{templatename}
+# exists, and the scrip was created by the system user, it
+# will be deleted on upgrade. Lowercase all the names here.
+
+%Delete_Scrips = (
+ 'on correspond' => {
+ 'notify requestors and ccs' => { 'correspondence' => 1 },
+ 'notify other recipients' => { 'correspondence' => 1 },
+ }
+);
+
+# -*- perl -*-
+
+push @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' }
+
+);
+
+push @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)!!*
+
+# 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;