Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / rt / etc / initialdata
index 1d8181d..96255b5 100644 (file)
@@ -1,69 +1,25 @@
-# Initial data for a fresh RT3 Installation.
+# Initial data for a fresh RT installation.
 
 @Users = (
 
 @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',
     {  Name         => 'root',
        Gecos        => 'root',
        RealName     => 'Enoch Root',
        Password     => 'password',
        EmailAddress => "root\@localhost",
        Comments     => 'SuperUser',
-       Privileged   => '1', } );
+       Privileged   => '1',
+    },
+);
 
 @Groups = (
 
 @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',
 
 @Queues = ({ Name              => 'General',
              Description       => 'The default queue',
              CorrespondAddress => "",
              CommentAddress    => "", },
            { Name        => '___Approvals',
+             Lifecycle   => 'approvals',
              Description => 'A system-internal queue for the approvals system',
              Disabled    => 2, } );
 
              Description => 'A system-internal queue for the approvals system',
              Disabled    => 2, } );
 
       Description => 'Sends mail to the administrative Ccs',              # loc
       ExecModule  => 'Notify',
       Argument    => 'AdminCc' },
       Description => 'Sends mail to the administrative Ccs',              # loc
       ExecModule  => 'Notify',
       Argument    => 'AdminCc' },
-
+    { Name        => 'Notify Owner and AdminCcs',                         # loc
+      Description => 'Sends mail to the Owner and administrative Ccs',    # loc
+      ExecModule  => 'Notify',
+      Argument    => 'Owner,AdminCc' },
+    { Name        => 'Notify Owner or AdminCcs',                         # loc
+      Description => 'Sends mail to the Owner if set, otherwise administrative Ccs',    # loc
+      ExecModule  => 'NotifyOwnerOrAdminCc',
+    },
     { Name        => 'Notify Requestors and Ccs as Comment',              # loc
       Description => 'Send mail to requestors and Ccs as a comment',      # loc
       ExecModule  => 'NotifyAsComment',
       Argument    => 'Requestor,Cc' },
 
     { Name        => 'Notify Requestors and Ccs as Comment',              # loc
       Description => 'Send mail to requestors and Ccs as a comment',      # loc
       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' },
       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' },
       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', },
     { 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', },
        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' },
       Description => 'Open tickets on correspondence',                    # loc
       ExecModule  => 'AutoOpen' },
+    { Name        => 'Open Inactive Tickets',                             # loc
+      Description => 'Open inactive tickets',                             # loc
+      ExecModule  => 'AutoOpenInactive' },
+    { Name        => 'Extract Subject Tag',                               # loc
+      Description => 'Extract tags from a Transaction\'s subject and add them to the Ticket\'s subject.', # loc
+      ExecModule  => 'ExtractSubjectTag' },
+    { Name        => 'Send Forward',                 # loc
+      Description => 'Send forwarded message',       # loc
+      ExecModule  => 'SendForward', },
+    #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 = (
 );
 
 @ScripConditions = (
 
     {
 
 
     {
 
+      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
       Description          => 'Whenever comments come in',                 # loc
       ApplicableTransTypes => 'Comment',
       Name                 => 'On Comment',                                # loc
       Description          => 'Whenever comments come in',                 # loc
       ApplicableTransTypes => 'Comment',
        Argument             => 'resolved'
 
     },
        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                 => '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 = (
 );
 
 @Templates = (
       Content     => '', },
     {  Queue       => '0',
        Name        => 'Autoreply',                                         # loc
       Content     => '', },
     {  Queue       => '0',
        Name        => 'Autoreply',                                         # loc
-       Description => 'Default Autoresponse template',                     # loc
+       Description => 'Plain text Autoresponse template',                     # loc
        Content     => 'Subject: AutoReply: {$Ticket->Subject}
 
 
        Content     => 'Subject: AutoReply: {$Ticket->Subject}
 
 
@@ -227,15 +275,15 @@ Greetings,
 
 This message has been automatically generated in response to the
 creation of a trouble ticket regarding:
 
 This message has been automatically generated in response to the
 creation of a trouble ticket regarding:
-       "{$Ticket->Subject()}", 
+        "{$Ticket->Subject()}", 
 a summary of which appears below.
 
 There is no need to reply to this message right now.  Your ticket has been
 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:
 
 
 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.
 
 in the subject line of all future correspondence about this issue. To do so, 
 you may reply to this message.
@@ -247,63 +295,163 @@ you may reply to this message.
 {$Transaction->Content()}
 '
     },
 {$Transaction->Content()}
 '
     },
+    {  Queue       => '0',
+       Name        => 'Autoreply in HTML',                              # loc
+       Description => 'HTML Autoresponse template',                     # loc
+       Content     => q[Subject: AutoReply: {$Ticket->Subject}
+Content-Type: text/html
+
+<p>Greetings,</p>
 
 
+<p>This message has been automatically generated in response to the
+creation of a trouble ticket regarding <b>{$Ticket->Subject()}</b>,
+a summary of which appears below.</p>
+
+<p>There is no need to reply to this message right now.  Your ticket has been
+assigned an ID of <b>{$Ticket->SubjectTag}</b>.</p>
+
+<p>Please include the string <b>{$Ticket->SubjectTag}</b>
+in the subject line of all future correspondence about this issue. To do so,
+you may reply to this message.</p>
+
+<p>Thank you,<br/>
+{$Ticket->QueueObj->CorrespondAddress()}</p>
+
+<hr/>
+{$Transaction->Content(Type => 'text/html')}
+],
+    },
     {  Queue       => '0',
        Name        => 'Transaction',                     # loc
     {  Queue       => '0',
        Name        => 'Transaction',                     # loc
-       Description => 'Default transaction template',    # loc
+       Description => 'Plain text transaction template', # loc
        Content     => 'RT-Attach-Message: yes
 
 
 {$Transaction->CreatedAsString}: Request {$Ticket->id} was acted upon.
        Content     => 'RT-Attach-Message: yes
 
 
 {$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}
        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()}
 '
     },
 
 
 {$Transaction->Content()}
 '
     },
-
+    {  Queue       => '0',
+       Name        => 'Transaction in HTML',          # loc
+       Description => 'HTML transaction template',    # loc
+       Content     => 'RT-Attach-Message: yes
+Content-Type: text/html
+
+<b>{$Transaction->CreatedAsString}: Request <a href="{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}">{$Ticket->id}</a> was acted upon by {$Transaction->CreatorObj->Name}.</b>
+<br>
+<table border="0">
+<tr><td align="right"><b>Transaction:</b></td><td>{$Transaction->Description}</td></tr>
+<tr><td align="right"><b>Queue:</b></td><td>{$Ticket->QueueObj->Name}</td></tr>
+<tr><td align="right"><b>Subject:</b></td><td>{$Transaction->Subject || $Ticket->Subject || "(No subject given)"} </td></tr>
+<tr><td align="right"><b>Owner:</b></td><td>{$Ticket->OwnerObj->Name}</td></tr>
+<tr><td align="right"><b>Requestors:</b></td><td>{$Ticket->RequestorAddresses}</td></tr>
+<tr><td align="right"><b>Status:</b></td><td>{$Ticket->Status}</td></tr>
+<tr><td align="right"><b>Ticket URL:</b></td><td><a href="{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}">{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}</a></td></tr>
+</table>
+<br/>
+<br/>
+{$Transaction->Content( Type => "text/html")}
+'
+    },
+    # Shadow the global templates of the same name to suppress duplicate
+    # notifications until rules is ripped out.
+    { Queue     => "___Approvals",
+      Name      => "Transaction in HTML",
+      Content   => "",
+    },
+    { Queue     => "___Approvals",
+      Name      => "Transaction",
+      Content   => "",
+    },
     {
 
       Queue       => '0',
       Name        => 'Admin Correspondence',                     # loc
     {
 
       Queue       => '0',
       Name        => 'Admin Correspondence',                     # loc
-      Description => 'Default admin correspondence template',    # loc
+      Description => 'Plain text admin correspondence template',    # loc
       Content     => 'RT-Attach-Message: yes
 
 
       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()}
 '
     },
 
 {$Transaction->Content()}
 '
     },
+    {  Queue       => '0',
+       Name        => 'Admin Correspondence in HTML',                     # loc
+       Description => 'HTML admin correspondence template',    # loc
+       Content     => 'RT-Attach-Message: yes
+Content-Type: text/html
 
 
+Ticket URL: <a href="{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}">{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}</a>
+<br />
+<br />
+{$Transaction->Content(Type => "text/html");}
+'
+    },
     {  Queue       => '0',
        Name        => 'Correspondence',                          # loc
     {  Queue       => '0',
        Name        => 'Correspondence',                          # loc
-       Description => 'Default correspondence template',         # loc
+       Description => 'Plain text correspondence template',         # loc
        Content     => 'RT-Attach-Message: yes
 
 {$Transaction->Content()}
 '
     },
        Content     => 'RT-Attach-Message: yes
 
 {$Transaction->Content()}
 '
     },
+    {  Queue       => '0',
+       Name        => 'Correspondence in HTML',                 # loc
+       Description => 'HTML correspondence template',           # loc
+       Content     => 'RT-Attach-Message: yes
+Content-Type: text/html
 
 
+{$Transaction->Content( Type => "text/html")}
+'
+    },
     {  Queue       => '0',
        Name        => 'Admin Comment',                           # loc
     {  Queue       => '0',
        Name        => 'Admin Comment',                           # loc
-       Description => 'Default admin comment template',          # loc
+       Description => 'Plain text admin comment template',          # loc
        Content     =>
        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()}
 '
     },
 This is a comment.  It is not sent to the Requestor(s):
 
 {$Transaction->Content()}
 '
     },
+    {  Queue       => '0',
+       Name        => 'Admin Comment in HTML',                  # loc
+       Description => 'HTML admin comment template',            # loc
+       Content     => 
+'Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject||""); $s =~ s/\\[Comment\\]\\s*//g; $s =~ s/^Re:\\s*//i; $s;}
+RT-Attach-Message: yes
+Content-Type: text/html
+
+<p>This is a comment about <a href="{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}">ticket {$Ticket->id}</a>. It is not sent to the Requestor(s):</p>
+
+{$Transaction->Content(Type => "text/html")}
+'
+    },
+    {  Queue       => '0',
+       Name        => 'Reminder',                           # loc
+       Description => 'Default reminder template',          # loc
+       Content     =>
+'Subject:{$Ticket->Subject} is due {$Ticket->DueObj->AsString}
+
+This reminder is for ticket #{$Target = $Ticket->RefersTo->First->TargetObj;$Target->Id}.
+
+{RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Target->Id}
+'
+    },
 
     {  Queue       => '0',
        Name        => 'Status Change',                                     # loc
 
     {  Queue       => '0',
        Name        => 'Status Change',                                     # loc
@@ -311,12 +459,23 @@ This is a comment.  It is not sent to the Requestor(s):
        Content     => 'Subject: Status Changed to: {$Transaction->NewValue}
 
 
        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()}
 '
     },
 
 {$Transaction->Content()}
 '
     },
+    {  Queue       => '0',
+       Name        => 'Status Change in HTML',              # loc
+       Description => 'HTML Ticket status changed',              # loc
+       Content     => 'Subject: Status Changed to: {$Transaction->NewValue}
+Content-Type: text/html
 
 
+<a href="{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}">{RT->Config->Get("WebURL")}Ticket/Display.html?id={$Ticket->id}</a>
+<br/>
+<br/>
+{$Transaction->Content(Type => "text/html")}
+'
+    },
     {
 
       Queue       => '0',
     {
 
       Queue       => '0',
@@ -328,6 +487,15 @@ According to our records, your request has been resolved. If you have any
 further questions or concerns, please respond to this message.
 '
     },
 further questions or concerns, please respond to this message.
 '
     },
+    {  Queue       => '0',
+       Name        => 'Resolved in HTML',               # loc
+       Description => 'HTML Ticket Resolved',           # loc
+       Content     => 'Subject: Resolved: {$Ticket->Subject}
+Content-Type: text/html
+
+<p>According to our records, your request has been resolved.  If you have any further questions or concerns, please respond to this message.</p>
+'
+    },
     {  Queue       => '___Approvals',
        Name        => "New Pending Approval",    # loc
        Description =>
     {  Queue       => '___Approvals',
        Name        => "New Pending Approval",    # loc
        Description =>
@@ -339,8 +507,8 @@ Greetings,
 There is a new item pending your approval: "{$Ticket->Subject()}", 
 a summary of which appears below.
 
 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.
 
 -------------------------------------------------------------------------
 batch-process all your pending approvals.
 
 -------------------------------------------------------------------------
@@ -348,26 +516,82 @@ batch-process all your pending approvals.
 '
     },
     {  Queue       => '___Approvals',
 '
     },
     {  Queue       => '___Approvals',
+       Name        => "New Pending Approval in HTML",                                   # loc
+       Description => "Notify Owners and AdminCcs of new items pending their approval", # loc
+       Content     => 'Subject: New Pending Approval: {$Ticket->Subject}
+Content-Type: text/html
+
+<p>Greetings,</p>
+
+<p>There is a new item pending your approval: <b>{$Ticket->Subject()}</b>,
+a summary of which appears below.</p>
+
+<p>Please <a href="{RT->Config->Get(\'WebURL\')}Approvals/Display.html?id={$Ticket->id}">approve
+or reject this ticket</a>, or visit the <a href="{RT->Config->Get(\'WebURL\')}Approvals/">approvals
+overview</a> to batch-process all your pending approvals.</p>
+
+<hr />
+{$Transaction->Content()}
+'
+    },
+    {  Queue       => '___Approvals',
        Name        => "Approval Passed",    # loc
        Description =>
        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,
 
        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.
 Other approvals may be pending.
+
+Approver\'s notes: { $Notes }
+'
+    },
+    {  Queue       => '___Approvals',
+       Name        => "Approval Passed in HTML",    # loc
+       Description =>
+         "Notify Requestor of their ticket has been approved by some approver", # loc
+       Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+Content-Type: text/html
+
+<p>Greetings,</p>
+
+<p>Your ticket has been approved by <b>{ eval { $Approver->Name } }</b>.
+Other approvals may be pending.</p>
+
+<p>Approver\'s notes:</p>
+<blockquote>{ $Notes }</blockquote>
 '
     },
     {  Queue       => '___Approvals',
        Name        => "All Approvals Passed",    # loc
        Description =>
 '
     },
     {  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,
 
        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',
+       Name        => "All Approvals Passed in HTML",    # loc
+       Description =>
+         "Notify Requestor of their ticket has been approved by all approvers", # loc
+       Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+Content-Type: text/html
+
+<p>Greetings,</p>
+
+<p>Your ticket has been approved by <b>{ eval { $Approver->Name } }</b>.
+Its Owner may now start to act on it.</p>
+
+<p>Approver\'s notes:</p>
+<blockquote>{ $Notes }</blockquote>
 '
     },
     {  Queue       => '___Approvals',
 '
     },
     {  Queue       => '___Approvals',
@@ -378,212 +602,255 @@ Your ticket has been approved.  Its Owner may now start to act on it.
 
 Greetings,
 
 
 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 Rejected in HTML",    # loc
+       Description =>
+         "Notify Owner of their rejected ticket", # loc
+       Content => 'Subject: Ticket Rejected: {$Ticket->Subject}
+Content-Type: text/html
 
 
-@Scrips = (
-    {  ScripCondition => 'On Correspond',
-       ScripAction    => 'Open Tickets',
-       Template       => 'Blank' },
-    {  ScripCondition => 'On Owner Change',
-       ScripAction    => 'Notify Owner',
-       Template       => 'Transaction' },
-    {  ScripCondition => 'On Create',
-       ScripAction    => 'AutoReply To Requestors',
-       Template       => 'AutoReply' },
-    {  ScripCondition => 'On Create',
-       ScripAction    => 'Notify AdminCcs',
-       Template       => 'Transaction' },
-    {  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',
-       ScripAction    => 'Notify AdminCcs As Comment',
-       Template       => 'Admin Comment' },
-    {  ScripCondition => 'On Comment',
-       ScripAction    => 'Notify Other Recipients As Comment',
-       Template       => 'Correspondence' },
-    {  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,
-           );
-       }
-    }
+<p>Greetings,</p>
+
+<p>Your ticket has been rejected by <b>{ eval { $Approver->Name } }</b>.</p>
+
+<p>Approver\'s notes:</p>
+<blockquote>{ $Notes }</blockquote>
+'
+    },
+    {  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       => '___Approvals',
+       Name        => "Approval Ready for Owner in HTML",    # loc
+       Description =>
+         "Notify Owner of their ticket has been approved and is ready to be acted on", # loc
+       Content => 'Subject: Ticket Approved: {$Ticket->Subject}
+Content-Type: text/html
+
+<p>Greetings,</p>
+
+<p>The ticket has been approved, you may now start to act on it.</p>
+
+'
+    },
+    {  Queue       => 0,
+       Name        => "Forward",    # loc
+       Description => "Forwarded message", # loc
+       Content => q{
+
+{ $ForwardTransaction->Content =~ /\S/ ? $ForwardTransaction->Content : "This is a forward of transaction #".$Transaction->id." of ticket #". $Ticket->id }
 }
 }
+    },
+    {  Queue       => 0,
+       Name        => "Forward Ticket",    # loc
+       Description => "Forwarded ticket message", # loc
+       Content => q{
 
 
-$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,
-       );
-    }
+{ $ForwardTransaction->Content =~ /\S/ ? $ForwardTransaction->Content : "This is a forward of ticket #". $Ticket->id }
 }
 }
+    },
+    {  Queue       => 0,
+       Name        => "Error: unencrypted message",    # loc
+       Description =>
+         "Inform user that their unencrypted mail has been rejected", # loc
+       Content => q{Subject: RT requires that all incoming mail be encrypted
 
 
-# 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/;
+You received this message because RT received mail from you that was not encrypted.  As such, it has been rejected.
 }
 }
+    },
+    {  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
 
 
-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
+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
 
 
-# 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,);
-       }
+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 encrypted data",    # loc
+       Description =>
+         "Inform user that a message he sent has invalid encryption data", # loc
+       Content => q{Subject: We received a message we cannot handle
+
+You sent us a message that we cannot handle due to corrupted 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()}
 
 
-# Now magically turn myself into a Requestor Notify object...
-require RT::Action::Notify; bless($self, 'RT::Action::Notify');
-$self->{Argument} = 'Requestor'; $self->Prepare;
+{RT->Config->Get('WebURL')}Ticket/Display.html?id={$Ticket->id}
 
 
-return 0; # ignore $passed;
-# ------------------------------------------------------------------- #
-       ],
-       CustomCommitCode => '"never needed"',
-       Template => 'All Approvals Passed', },
+{$Transaction->Content()}
+],
+    },
 
 );
 
 
 );
 
-@ACL = (
-    { UserId => 'Nobody',      # - principalId
-      Right  => 'OwnTicket', },
+@Scrips = (
+    {  Description    => 'On Comment Notify AdminCcs as Comment',
+       ScripCondition => 'On Comment',
+       ScripAction    => 'Notify AdminCcs As Comment',
+       Template       => 'Admin Comment in HTML' },
+    {  Description    => 'On Comment Notify Other Recipients as Comment',
+       ScripCondition => 'On Comment',
+       ScripAction    => 'Notify Other Recipients As Comment',
+       Template       => 'Correspondence in HTML' },
+    {  Description    => 'On Correspond Notify Owner and AdminCcs',
+       ScripCondition => 'On Correspond',
+       ScripAction    => 'Notify Owner and AdminCcs',
+       Template       => 'Admin Correspondence in HTML' },
+#    {  Description    => 'On Correspond Notify Other Recipients',
+#       ScripCondition => 'On Correspond',
+#       ScripAction    => 'Notify Other Recipients',
+#       Template       => 'Correspondence in HTML' },
+#    {  Description    => 'On Correspond Notify Requestors and Ccs',
+#       ScripCondition => 'On Correspond',
+#       ScripAction    => 'Notify Requestors And Ccs',
+#       Template       => 'Correspondence in HTML' },
+    {  Description    => 'On Correspond Open Inactive Tickets',
+       ScripCondition => 'On Correspond',
+       ScripAction    => 'Open Inactive Tickets',
+       Template       => 'Blank' },
+    {  Description    => 'On Create Autoreply To Requestors',
+       ScripCondition => 'On Create',
+       ScripAction    => 'AutoReply To Requestors',
+       Template       => 'AutoReply in HTML' },
+    {  Description    => 'On Create Notify Owner and AdminCcs',
+       ScripCondition => 'On Create',
+       ScripAction    => 'Notify Owner and AdminCcs',
+       Template       => 'Transaction in HTML' },
+    {  Description    => 'On Create Notify Ccs',
+       ScripCondition => 'On Create',
+       ScripAction    => 'Notify Ccs',
+       Template       => 'Correspondence in HTML' },
+    {  Description    => 'On Create Notify Other Recipients',
+       ScripCondition => 'On Create',
+       ScripAction    => 'Notify Other Recipients',
+       Template       => 'Correspondence in HTML' },
+    {  Description    => 'On Owner Change Notify Owner',
+       ScripCondition => 'On Owner Change',
+       ScripAction    => 'Notify Owner',
+       Template       => 'Transaction in HTML' },
+    {  Description    => 'On Resolve Notify Requestors',
+       ScripCondition => 'On Resolve',
+       ScripAction    => 'Notify Requestors',
+       Template       => 'Resolved in HTML' },
+    {  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 Forward Transaction Send forwarded message',
+       ScripCondition => 'On Forward Transaction',
+       ScripAction    => 'Send Forward',
+       Template       => 'Forward' },
+    {  Description    => 'On Forward Ticket Send forwarded message',
+       ScripCondition => 'On Forward Ticket',
+       ScripAction    => 'Send Forward',
+       Template       => 'Forward Ticket' },
+);
 
 
+@ACL = (
     { UserId => 'root',        # - principalid
       Right  => 'SuperUser', },
 
     { UserId => 'root',        # - principalid
       Right  => 'SuperUser', },
 
+    { GroupDomain => 'SystemInternal',
+      GroupType => 'privileged',
+      Right  => 'ShowApprovalsTab', },
+
 );
 
 # Predefined searches
 );
 
 # Predefined searches
@@ -592,34 +859,184 @@ return 0; # ignore $passed;
     { Name => 'Search - My Tickets',
       Description => '[_1] highest priority tickets I own', # loc
       Content     =>
     { 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',
         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
     },
     { 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:&nbsp;' ",
+      { 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',
         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' },
     },
         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_left_pair
+              [
+                {
+                    type => 'system',
+                    name => 'My Tickets',           # loc
+                },
+                {
+                    type => 'system',
+                    name => 'Unowned Tickets'       # loc
+                },
+                {
+                    type => 'system',
+                    name => 'Bookmarked Tickets'    # loc
+                },
+                {
+                    type => 'component',
+                    name => 'QuickCreate'           # loc
+                },
+              ],
+            'sidebar' =>                            # loc_left_pair
+              [
+                {
+                    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;