import rt 3.8.7
[freeside.git] / rt / etc / initialdata
index 54fa9d1..89db2cc 100644 (file)
@@ -1,63 +1,18 @@
 # Initial data for a fresh RT3 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',
       ExecModule  => 'Notify',
       Argument    => 'Requestor,Cc' },
 
-    { Name        => 'Notify Requestors, Ccs and AdminCcs as Comment',    # loc
-      Description => 'Send mail to all watchers as a "comment"',          # loc
+    { 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
     { 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' },
 );
 
 @ScripConditions = (
        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',
+    },
+
 );
 
 @Templates = (
@@ -231,11 +206,11 @@ creation of a trouble ticket regarding:
 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->QueueObj->SubjectTag || $rtname} #{$Ticket->id()}].
 
 Please include the string:
 
-         [{$rtname} #{$Ticket->id}]
+         [{$Ticket->QueueObj->SubjectTag || $rtname} #{$Ticket->id}]
 
 in the subject line of all future correspondence about this issue. To do so, 
 you may reply to this message.
@@ -255,13 +230,13 @@ 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()}
@@ -276,7 +251,7 @@ Transaction: {$Transaction->Description}
       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()}
 '
@@ -295,10 +270,11 @@ Transaction: {$Transaction->Description}
        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\\]//g; $s =~ s/^Re//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()}
@@ -311,7 +287,7 @@ This is a comment.  It is not sent to the Requestor(s):
        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()}
 '
@@ -339,8 +315,8 @@ Greetings,
 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.
 
 -------------------------------------------------------------------------
@@ -350,24 +326,29 @@ 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 } }.
 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 { $Approval->OwnerObj->Name } }.
+Its Owner may now start to act on it.
+
+Approver\'s notes: { $Notes }
 '
     },
     {  Queue       => '___Approvals',
@@ -379,211 +360,190 @@ Your ticket has been approved.  Its Owner may now start to act on it.
 Greetings,
 
 Your ticket has been rejected by { eval { $Approval->OwnerObj->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')
+      : ''
+}
+}
+},
 );
 # }}}
 
 @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',
+    {  Description    => 'On Correspond Notify Requestors and Ccs',
+       ScripCondition => 'On Correspond',
        ScripAction    => 'Notify Requestors And Ccs',
        Template       => 'Correspondence' },
-    {  ScripCondition => 'On Correspond',
+    {  Description    => 'On Correspond Notify Other Recipients',
+       ScripCondition => 'On Correspond',
        ScripAction    => 'Notify Other Recipients',
        Template       => 'Correspondence' },
-    {  ScripCondition => 'On Comment',
+    {  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' },
 );
 
 @ACL = (
-    { UserId => 'Nobody',      # - principalId
-      Right  => 'OwnTicket', },
-
     { UserId => 'root',        # - principalid
       Right  => 'SuperUser', },
 
+    { GroupDomain => 'SystemInternal',
+      GroupType => 'privileged',
+      Right  => 'ShowApprovalsTab', },
+
 );
 
 # Predefined searches
@@ -592,34 +552,53 @@ return 0; # ignore $passed;
     { 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:&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',
+        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'},
-       ],
+        [ { type => 'system', name => 'My Tickets' },
+          { type => 'system', name => 'Unowned Tickets' },
+          { type => 'system', name => 'Bookmarked Tickets' },
+          { type => 'component', name => 'QuickCreate' },
+        ],
         'summary' => # loc
-       [ 
-         { type => 'component', name => 'MyReminders' },
+        [
+          { type => 'component', name => 'MyReminders' },
           { type => 'component', name => 'Quicksearch' },
-         { type => 'component', name => 'RefreshHomepage' },
-       ]
+          { type => 'component', name => 'Dashboards' },
+          { type => 'component', name => 'RefreshHomepage' },
+        ],
+      },
     },
-}
 );