# Initial data for a fresh RT3 Installation.

@Users = (
    {  Name     => 'Nobody',
       RealName => 'Нет имени',
       Comments => 'Не удаляйте и не изменяйте этого польователя. Это необходимо '
         . 'для внутренней структуры данных RT',
       Privileged => '0', },

    {  Name         => 'root',
       Gecos        => 'root',
       RealName     => 'Администратор RT',
       Password     => 'password',
       EmailAddress => "root\@localhost",
       Comments     => 'Администратор',
       Privileged   => '1', } );

@Groups = (
    { Name        => '',
      Type        => 'Everyone',                        # loc
      Domain      => 'SystemInternal',
      Instance    => '',
      Description => 'Псевдогруппа для внутреннего использования',    # loc
    },
    { Type        => 'Privileged',                      # loc
      Domain      => 'SystemInternal',
      Instance    => '',
      Name        => '',
      Description => 'Псевдогруппа для внутреннего использования',    # loc
    },
    { Name        => '',
      Type        => 'Unprivileged',                    # loc
      Domain      => 'SystemInternal',
      Instance    => '',
      Description => 'Псевдогруппа для внутреннего использования',    # loc
    },
    { Name        => '',
      Type        => 'Owner',                               # loc
      Domain      => 'RT::System-Role',
      Instance    => '',
      Description => 'Системная ролевая группа для внутреннего использования',    # loc
    },
    { Name        => '',
      Type        => 'Requestor',                           # loc
      Domain      => 'RT::System-Role',
      Instance    => '',
      Description => 'Системная ролевая группа для внутреннего использования',    # loc
    },
    { Name        => '',
      Type        => 'Cc',                                  # loc
      Domain      => 'RT::System-Role',
      Instance    => '',
      Description => 'Системная ролевая группа для внутреннего использования',    # loc
    },
    { Name        => '',
      Type        => 'AdminCc',                             # loc
      Domain      => 'RT::System-Role',
      Instance    => '',
      Description => 'Системная ролевая группа для внутреннего использования',        # loc
    }, );

@Queues = ({ Name              => 'Основная',
             Description       => 'Основная очередь',
             CorrespondAddress => "",
             CommentAddress    => "", },
           { Name        => 'Подтверждения',
             Description => 'Внутрисистемная очередь для системы подтверждений',
             Disabled    => 2, } );

@ScripActions = (

    {  Name        => 'Автоответ Авторам Заявки',    # loc
       Description =>
'Всегда отправлять сообщение Авторам Заявки независимо от отправителя сообщения' ,                                            # loc
       ExecModule => 'Autoreply',
       Argument   => 'Requestor' },
    { Name        => 'Уведомлять Авторов Заявки',                    # loc
      Description => 'Отправляет сообщение Авторам Заявки',    # loc
      ExecModule  => 'Notify',
      Argument    => 'Requestor' },
    { Name        => 'Уведомлять ответственного как Комментарий',              # loc
      Description => 'Отправляет почту ответственному',              # loc
      ExecModule  => 'NotifyAsComment',
      Argument    => 'Owner' },
    { Name        => 'Уведомлять ответственного',                         # loc
      Description => 'Отправляет почту ответственному',              # loc
      ExecModule  => 'Notify',
      Argument    => 'Owner' },
    { Name        => 'Уведомлять Копии как Комментарий',              # loc
      Description => 'Отправлять почту Копиям как комментарий', # loc
      ExecModule  => 'NotifyAsComment',
      Argument    => 'Cc' },
    { Name        => 'Уведомлять Копии',                                   # loc
      Description => 'Отправляет почту Копиям',                        # loc
      ExecModule  => 'Notify',
      Argument    => 'Cc' },
    { Name        => 'Уведомлять Административные Копии как Комментарий',                        # loc
      Description => 'Отправляет почту Административным Копиям как комментарий', # loc
      ExecModule  => 'NotifyAsComment',
      Argument    => 'AdminCc' },
    { Name        => 'Уведомлять Административные Копии',                                   # loc
      Description => 'Отправляет почту Административным Копиям',              # loc
      ExecModule  => 'Notify',
      Argument    => 'AdminCc' },

    { Name        => 'Уведомлять Авторов Заявки и Копии как Комментарий',              # loc
      Description => 'Отправляет почту Авторам Заявки и Копиям как Комментарий',      # loc
      ExecModule  => 'NotifyAsComment',
      Argument    => 'Requestor,Cc' },

    { Name        => 'Уведомлять Авторов Заявки и Копии',                         # loc
      Description => 'Отправляет почту Авторам Заявки и Копиям',                   # loc
      ExecModule  => 'Notify',
      Argument    => 'Requestor,Cc' },

    { Name        => 'Уведомлять Авторов Заявки, Копии и Административные Копии как Комментарий',    # loc
      Description => 'Отправляет почту всем наблюдателям в виде комментария',          # loc
      ExecModule  => 'NotifyAsComment',
      Argument    => 'All' },
    { Name        => 'Уведомлять Авторов Заявки, Копии и Административные Копии',               # loc
      Description => 'Отправляет почту всем наблюдателям',                         # loc
      ExecModule  => 'Notify',
      Argument    => 'All' },
    { Name        => 'Уведомлять других Получателей как Комментарий',                # loc
      Description => 'Отправляет почту заданным Копиям и Скрытым копиям',      # loc
      ExecModule  => 'NotifyAsComment',
      Argument    => 'OtherRecipients' },
    { Name        => 'Уведомлять других Получателей',                           # loc
      Description => 'Отправляет почу заданым Копиям и Скрытым копиям',      # loc
      ExecModule  => 'Notify',
      Argument    => 'OtherRecipients' },
    { Name        => 'Задано пользователем',                                      # loc
      Description => 'Выполняет заданные пользователем действия',                     # loc
      ExecModule  => 'UserDefined', },
    {  Name        => 'Создать Заявки',                                    # loc
       Description => 'Создает новые заявки на базе шаблона данного скриплета',             # loc
       ExecModule => 'CreateTickets', },
    { Name        => 'Открыть Заявки',
      Description => 'Открывает заявки при корреспонденции',                    # loc
      ExecModule  => 'AutoOpen' },
);

@ScripConditions = (
    { Name                 => 'При Создании',                                # loc
      Description          => 'При создании новой заявки',                 # loc
      ApplicableTransTypes => 'Create',
      ExecModule           => 'AnyTransaction', },

    { Name                 => 'При Транзакции',                           # loc
      Description          => 'При любом изменении заявки',                    # loc
      ApplicableTransTypes => 'Any',
      ExecModule           => 'AnyTransaction', },
    {

      Name                 => 'При Корреспонденции',                             # loc
      Description          => 'При получении любой корреспонденции для заявки',          # loc
      ApplicableTransTypes => 'Correspond',
      ExecModule           => 'AnyTransaction', },

    {

      Name                 => 'При Комментарии',                                # loc
      Description          => 'При создании комментария в заявке',                 # loc
      ApplicableTransTypes => 'Comment',
      ExecModule           => 'AnyTransaction' },
    {

      Name                 => 'При Изменении Статуса',                          # loc
      Description          => 'При изменении статуса заявки',       # loc
      ApplicableTransTypes => 'Status',
      ExecModule           => 'AnyTransaction',

    },
    {

      Name                 => 'При Изменении Приоритета',                       # loc
      Description          => 'При изменении приоритета заявки',    # loc
      ApplicableTransTypes => 'Set',
      ExecModule           => 'PriorityChange',
    },
    {

      Name                 => 'При Изменении Ответственного',                           # loc
      Description          => 'При изменении ответственного за заявку',        # loc
      ApplicableTransTypes => 'Any',
      ExecModule           => 'OwnerChange',

    },
    {

      Name                 => 'При Изменении Очереди',                           # loc
      Description          => 'При изменении очереди заявки',        # loc
      ApplicableTransTypes => 'Set',
      ExecModule           => 'QueueChange',

    },
    {  Name                 => 'При Решении',                               # loc
       Description          => 'При решении заявки',            # loc
       ApplicableTransTypes => 'Status',
       ExecModule           => 'StatusChange',
       Argument             => 'resolved'

    },

    {  Name                 => 'Задано Пользователем',                             # loc
       Description          => 'При выполнении заданных пользователем условий', # loc
       ApplicableTransTypes => 'Any',
       ExecModule           => 'UserDefined'

    },

);

@Templates = (
    { Queue       => '0',
      Name        => 'Пустой',                                             # loc
      Description => 'Пустой шаблон',                                  # loc
      Content     => '', },
    {  Queue       => '0',
       Name        => 'Автоответ',                                         # loc
       Description => 'Шаблон автоответа по-умолчанию',                     # loc
       Content     => 'Subject: АвтоОтвет: {$Ticket->Subject}


Здравствуйте.

Это сообщение было автоматически сгенерировано в ответ на создание вами
заявки "{$Ticket->Subject()}", 
общая информация о которой идет ниже.

Не нужно отвечать на это сообщение прямо сейчас. Вашей заявке был назначен
идентификатор в [{$rtname} #{$Ticket->id()}].

Пожалуйста, включайте строку:

         [{$rtname} #{$Ticket->id}]

в Тему всей следующей корреспонденции относительно этого вопроса. Чтобы
сделать это, вы можете ответить на это письмо.

                        Спасибо,
                        {$Ticket->QueueObj->CorrespondAddress()}

-------------------------------------------------------------------------
{$Transaction->Content()}
'
    },

    {  Queue       => '0',
       Name        => 'Транзакция',                     # loc
       Description => 'Шаблон транзакции по-умолчанию',    # loc
       Content     => 'RT-Attach-Message: yes


{$Transaction->CreatedAsString}: Запрос {$Ticket->id} был отработан.
   Транзакция: {$Transaction->Description}
      Очередь: {$Ticket->QueueObj->Name}
         Тема: {$Transaction->Subject || $Ticket->Subject || "(Тема не задана)"}
Ответственный: {$Ticket->OwnerObj->Name}
Авторы заявки: {$Ticket->RequestorAddresses}
       Статус: {$Ticket->Status}
  Заявка <URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >


{$Transaction->Content()}
'
    },

    {

      Queue       => '0',
      Name        => 'Корреспонденция Администратора',                     # loc
      Description => 'Шаблон по-умолчанию для корреспонденции администратора',    # loc
      Content     => 'RT-Attach-Message: yes


<URL: {$RT::WebURL}Ticket/Display.html?id={$Ticket->id} >

{$Transaction->Content()}
'
    },

    {  Queue       => '0',
       Name        => 'Корреспонденция',                          # loc
       Description => 'Шаблон по-умолчанию для корреспонденции',         # loc
       Content     => 'RT-Attach-Message: yes

{$Transaction->Content()}
'
    },

    {  Queue       => '0',
       Name        => 'Комментарий Администратора',                           # loc
       Description => 'Шаблон по-умолчанию для комментариев администратора',          # loc
       Content     =>
'Subject: [Комментарий] {my $s=($Transaction->Subject||$Ticket->Subject); $s =~ s/\\[Комментарий\\]//g; $comment =~ s/^Re//i; $s;}


{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}
Это комментарий. Он не отправлен Автору(-ам) заявки:

{$Transaction->Content()}
'
    },

    {  Queue       => '0',
       Name        => 'Изменение Статуса',                                     # loc
       Description => 'Статус заявки изменен',                             # loc
       Content     => 'Subject: Статус изменен на: {$Transaction->NewValue}


{$RT::WebURL}Ticket/Display.html?id={$Ticket->id}

{$Transaction->Content()}
'
    },

    {

      Queue       => '0',
      Name        => 'Решено',                 # loc
      Description => 'Заявка решена',          # loc
      Content     => 'Subject: Решено: {$Ticket->Subject}

В соответствии с нашими данными, ваша заявка была решена. Если у вас есть
дополнительные вопросы или предложения, пожалуйста ответьте на это сообщение.
'
    },
    {  Queue       => 'Подтверждения',
       Name        => "Новая заявка, ожидающая подтверждения",    # loc
       Description =>
         "Уведомлять Ответственных и Административные Копии о новых заявках, ожидающих их подтверждения", # loc
       Content => 'Subject: Новое ожидание подтверждения: {$Ticket->Subject}

Здравствуйте.

В наличии новая заявка, ожидающая вашего подтверждения: "{$Ticket->Subject()}", 
общая информация о которой идет ниже.

Пожалуйста посетите {$RT::WebURL}Approvals/Display.html?id={$Ticket->id}
для подтверждения или отклонения этой заявки или {$RT::WebURL}Approvals/
для пакетной обработки всех заявок, ожидающих вашего подтверждения.

-------------------------------------------------------------------------
{$Transaction->Content()}
'
    },
    {  Queue       => 'Подтверждения',
       Name        => "Подтверждение получено",    # loc
       Description =>
         "Уведомлять Ответственного о подтверждении его заявки другими подтверждающими", # loc
       Content => 'Subject: Заявка подтверждена: {$Ticket->Subject}

Здравствуйте.

Ваша заявка была подтверждена { eval { $Approval->OwnerObj->Name } }.
Возможно, есть другие заявки, ожидающие вашего подтверждения.
'
    },
    {  Queue       => 'Подтверждения',
       Name        => "Все подтверждения получены",    # loc
       Description =>
         "Уведомлять Ответственного о подтверждении его заявки всеми подтверждающими", # loc
       Content => 'Subject: Заявка подтверждена: {$Ticket->Subject}

Здравствуйте.

Ваша заявка была подтверждена. Ответственный за нее может начинать с ней
работать.
'
    },
    {  Queue       => 'Подтверждения',
       Name        => "Подтверждение отклонено",    # loc
       Description =>
         "Уведомлять Ответственного об отклонении его заявки", # loc
       Content => 'Subject: Заявка отклонена: {$Ticket->Subject}

Здравствуйте.

Ваша заявка была отклонена { eval { $Approval->OwnerObj->Name } }.
'
    },
);
# }}}

@Scrips = (
    {  ScripCondition => 'При Корреспонденции',
       ScripAction    => 'Открыть заявки',
       Template       => 'Пустой' },
    {  ScripCondition => 'При Изменении Ответственного',
       ScripAction    => 'Уведомлять Ответственного',
       Template       => 'Транзакция' },
    {  ScripCondition => 'При Создании',
       ScripAction    => 'Автоответ Авторам Заявки',
       Template       => 'Автоответ' },
    {  ScripCondition => 'При Создании',
       ScripAction    => 'Уведомлять Административные Копии',
       Template       => 'Транзакция' },
    {  ScripCondition => 'При Корреспонденции',
       ScripAction    => 'Уведомлять Административные Копии',
       Template       => 'Корреспонденция Администратора' },
    {  ScripCondition => 'При Корреспонденции',
       ScripAction    => 'Уведомлять Авторов Заявки и Копии',
       Template       => 'Корреспонденция' },
    {  ScripCondition => 'При Корреспонденции',
       ScripAction    => 'Уведомлять Других Получателей',
       Template       => 'Корреспонденция' },
    {  ScripCondition => 'При Комментарии',
       ScripAction    => 'Уведомлять Административные Копии как Комментарий',
       Template       => 'Комментарий Администратора' },
    {  ScripCondition => 'При Комментарии',
       ScripAction    => 'Уведомлять Других Получателей как Комментарий',
       Template       => 'Корреспонденция' },
    {  ScripCondition => 'При Решении',
       ScripAction    => 'Уведомлять Авторов Заявки',
       Template       => 'Решено' },
    {  Description => "Когда создано подтверждение, уведомлять Ответственного и Административные Копии о наличии ожидающих подтверждений",    # loc
       Queue          => 'Подтверждения',
       ScripCondition => 'Задано Пользователем',
       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    => 'Уведомлять Ответственного',
       Template       => 'Новая заявка, ожидающая подтверждения' },
    {  Description => "Если подтверждение отклонено, то отклонить оригинал и удалить все ожидающие подтверждения",    # loc
       Queue            => 'Подтверждения',
       ScripCondition   => 'При Изменении Статуса',
       ScripAction      => 'Задано Пользователем',
       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          => 'Подтверждение отклонено', },
    {  Description => "Когда заявка подтверждена любым подтверждающим, добавить корреспонденцию в оригинальную заявку", # loc
       Queue             => 'Подтверждения',
       ScripCondition    => 'При Решении',
       ScripAction       => 'Задано пользователем',
       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 => 'Все подтверждения получены' },
    {  Description => "Когда заявка подтверждена всеми подтверждающими, добавить корреспонденцию в оригинальную заявку", # loc
       Queue             => 'Подтверждения',
       ScripCondition    => 'При Решении',
       ScripAction       => 'Задано пользователем',
       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 => 'Все подтверждения получены', },

);

@ACL = (
    { UserId => 'Nobody',      # - principalId
      Right  => 'OwnTicket', },

    { UserId => 'root',        # - principalid
      Right  => 'SuperUser', },

);

# Predefined searches

@Attributes = (
    { Name => 'Поиск - Ваши заявки',
      Description => '[_1] ваших заявок с наивысшими приоритетами', # loc
      Content     =>
      { Format => "'<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"$RT::WebPath/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', Priority, QueueName, ExtendedStatus",
        Query   => " Owner = '__CurrentUser__' AND ( Status = 'new' OR Status = 'open')",
        OrderBy => 'Priority',
        Order   => 'DESC' },
    },
    { Name => 'Поиск - Неназначенные заявки',
      Description => '[_1] последних неназначенных заявок', # 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;' ",
        Query   => " Owner = 'Nobody' AND ( Status = 'new' OR Status = 'open')",
        OrderBy => 'Created',
        Order   => 'DESC' },
    },
    { Name => 'Настройки главной страницы',
      Description => 'Настройки главной страницы',
      Content =>
      { 'body' => # loc
	[ { type => 'system', name => 'Ваши заявки' },
	  { type => 'system', name => 'Неназначенные заявки' },
	  { type => 'component',  name => 'Быстрое создание заявки'},
	],
        'summary' => # loc
	[ 
	  { type => 'component', name => 'Ваши напоминания' },
          { type => 'component', name => 'Быстрый поиск' },
	  { type => 'component', name => 'Обновление главной страницы' },
	]
    },
}
);
