Страница 1 из 1

Спрятать установку времени напоминания, если не используется

Добавлено: 15 дек 2014, 11:27
ykolesnikov
Кто-то задавал вопрос, как убрать с формы ввода заявки (телефонной или почтовой) в интерфейсе агента реквизит ввода даты напоминания/ожидания, если не используется состояние - "pending/ожидать/напомнить"
Нашел на англоязычном форуме такую тему - Hide Pending from ticket form when it's not pending -http://forums.otterhub.org/viewtopic.ph ... 104421ab23
Сам не проверял и как следует из теста темы там еще есть над чем работать, но, если кому надо - доводите до ума. :oops:
Если получится - поделитесь.

Re: Спрятать установку времени напоминания, если не использу

Добавлено: 15 дек 2014, 14:59
Mardoc
Все очень просто, достаточно просто дописать параметр hidden, в теге абзаца, где описана "даты ожидания"...она просто становиться скрытой на форме, но при этом присутствует в логике и ничего не нарушается :)

Re: Спрятать установку времени напоминания, если не использу

Добавлено: 15 дек 2014, 15:42
ykolesnikov
Mardoc писал(а):Все очень просто, достаточно просто дописать параметр hidden, в теге абзаца, где описана "даты ожидания"...она просто становиться скрытой на форме, но при этом присутствует в логике и ничего не нарушается :)
Речь идет о том, что Дата скрывается, только если не выставлено состояние ожидания, если оно выставлено, то реквизит отображается для заполнения.

Re: Спрятать установку времени напоминания, если не использу

Добавлено: 01 мар 2015, 22:41
vxb
по ссылке в первом посте появилась информация не связанная напрямую с темой, но очень интересная по сути
о том как добавить загрузку js скриптов без правки шаблонов в агентский и пользовательский интерфейс
http://stephan14x.evidente.de/?p=60

я стал реализовывать механизм, с некоторыми правками, но столкнулся на непреодолимую проблему, в теме на otterhub "захардкожено" английское название состояния, если это устраивает, а так же устраивает способ поиска label методом перебора всех label в форме и анализа их innerhtml с "захардкоженым" английским названием, то можно реализовать не внося исправления в шаблоны, если кому то нужно - могу описать как сделать таким способом

но для себя решил что мне такой вариант не подходит, сделал с правкой шаблонов, работает на 4.0.6, но будет работать на любой версии 4.х.х
для 3.х.х потребуются изменения, касающиеся функций Translate в шаблоне

приведу пример для шаблона AgentTicketActionCommon.tt

было:

Код: Выделить всё

<script type="text/javascript">//<![CDATA[
    $('#NewStateID').bind('change', function (Event) {
        Core.AJAX.FormUpdate($('#Compose'), 'AJAXUpdate', 'NewStateID', ['TypeID', 'ServiceID', 'SLAID', 'NewOwnerID', 'OldOwnerID', 'NewResponsibleID', 'NewPriorityID'
 [% Data.DynamicFieldNamesStrg %] ]);
    });
//]]></script>
стало:

Код: Выделить всё

<script type="text/javascript">//<![CDATA[
    $('#NewStateID').bind('change', function (Event) {
        Core.AJAX.FormUpdate($('#Compose'), 'AJAXUpdate', 'NewStateID', ['TypeID', 'ServiceID', 'SLAID', 'NewOwnerID', 'OldOwnerID', 'NewResponsibleID', 'NewPriorityID'
 [% Data.DynamicFieldNamesStrg %] ]);

        togglePending(this.id);
    });

    togglePending('NewStateID');

    function isStatePending(id) {
        switch($('#' + id + ' :selected').text()) {
            case '[% Translate("pending reminder") | html %]':
            case '[% Translate("pending auto") | html %]':
            case '[% Translate("pending auto close+") | html %]':
            case '[% Translate("pending auto close-") | html %]':
                return true;
                break;
        }
        return false;
    }

    function togglePending(id) {
        if (isStatePending(id)) {
            $('#lblPending, #divPending').show();
        } else {
            $('#lblPending, #divPending').hide();
        }
    }

//]]></script>
было:

Код: Выделить всё

                        <label>[% Translate("Pending date") | html %]:</label>
                        <div class="Field">
стало:

Код: Выделить всё

                        <label id="lblPending">[% Translate("Pending date") | html %]:</label>
                        <div class="Field" id="divPending">

для других шаблонов аналогичным образом, но потребуется править

Код: Выделить всё

    togglePending('NewStateID');
так как в некоторых шаблонах id select с выбором состояния NextStateId

Re: Спрятать установку времени напоминания, если не использу

Добавлено: 02 мар 2015, 11:13
vxb
если в коде выше заменить

Код: Выделить всё

    togglePending('NewStateID');
на

Код: Выделить всё

    togglePending($('#NextStateID, #NewStateID, #StateID').first().attr('id'));
то javascript будет более универсальным и не требующей дополнительной правки под различные шаблоны

Re: Спрятать установку времени напоминания, если не использу

Добавлено: 04 мар 2015, 14:38
vxb
otrs 4.0.6

пошаговое руководство к действию для
AgentTicketActionCommon.tt
AgentTicketCompose.tt
AgentTicketEmail.tt
AgentTicketPhoneCommon.tt
AgentTicketPhone.tt

1. загрузить вложенный файл pending_hide.tar.gz на сервер в /tmp
2. выполнить следующий код, фрагмент приведён с учётом того что otrs установлен в /opt, то есть /opt/otrs является корневой для системы, если у кого то не так, сделать правки относительно легко

выполнять надо от пользователя otrs, либо потом править права доступа

создаём структуру папок для размещения изменённых шаблонов

Код: Выделить всё

mkdir -p /opt/otrs/Custom/Kernel/Output/HTML/Standard

копируем шаблоны в которых планируются изменения

Код: Выделить всё

cp /opt/otrs/Kernel/Output/HTML/Standard/AgentTicketActionCommon.tt /opt/otrs/Custom/Kernel/Output/HTML/Standard
cp /opt/otrs/Kernel/Output/HTML/Standard/AgentTicketCompose.tt /opt/otrs/Custom/Kernel/Output/HTML/Standard
cp /opt/otrs/Kernel/Output/HTML/Standard/AgentTicketEmail.tt /opt/otrs/Custom/Kernel/Output/HTML/Standard
cp /opt/otrs/Kernel/Output/HTML/Standard/AgentTicketPhoneCommon.tt /opt/otrs/Custom/Kernel/Output/HTML/Standard
cp /opt/otrs/Kernel/Output/HTML/Standard/AgentTicketPhone.tt /opt/otrs/Custom/Kernel/Output/HTML/Standard
распаковываем архив с патчами

Код: Выделить всё

tar xzf /tmp/pending_hide.tar.gz -С /opt/otrs/Custom/Kernel/Output/HTML/Standard/
применяем патчи

Код: Выделить всё

cd /opt/otrs/Custom/Kernel/Output/HTML/Standard/
patch -i AgentTicketActionCommon.tt.patch
patch -i AgentTicketCompose.tt.patch
patch -i AgentTicketEmail.tt.patch
patch -i AgentTicketPhoneCommon.tt.patch
patch -i AgentTicketPhone.tt.patch
удаляем патчи

Код: Выделить всё

rm -f /opt/otrs/Custom/Kernel/Output/HTML/Standard/*.patch
очищаем кэш

Код: Выделить всё

/opt/otrs/bin/otrs.DeleteCache.pl
PS: мануал как внести изменения без patch нужен ?

Re: Спрятать установку времени напоминания, если не использу

Добавлено: 04 мар 2015, 14:56
ykolesnikov
Здорово!
PS: мануал как внести изменения без patch нужен ?
Да уж не сочтите за труд. Для :geek:

Re: Спрятать установку времени напоминания, если не использу

Добавлено: 04 мар 2015, 16:09
vxb
на примере Kernel/Output/HTML/Standard/AgentTicketActionCommon.tt

строки с 236 по 240 (в оригинальном файле) выглядят

Код: Выделить всё

<script type="text/javascript">//<![CDATA[
$('#NewStateID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#Compose'), 'AJAXUpdate', 'NewStateID', ['TypeID', 'ServiceID', 'SLAID', 'NewOwnerID', 'OldOwnerID', 'NewResponsibleID', 'NewPriorityID' [% Data.DynamicFieldNamesStrg %] ]);
});
//]]></script>
надо заменить на

Код: Выделить всё

<script type="text/javascript">//<![CDATA[
    $('#NewStateID').bind('change', function (Event) {
        Core.AJAX.FormUpdate($('#Compose'), 'AJAXUpdate', 'NewStateID', ['TypeID', 'ServiceID', 'SLAID', 'NewOwnerID', 'OldOwnerID', 'NewResponsibleID', 'NewPriorityID' [% Data.DynamicFieldNamesStrg %] ]);

        togglePending(this.id);
    });

    togglePending($('#NextStateID, #NewStateID, #StateID').first().attr('id'));

    function isStatePending(id) {
        switch($('#' + id + ' :selected').text()) {
            case '[% Translate("pending reminder") | html %]':
            case '[% Translate("pending auto") | html %]':
            case '[% Translate("pending auto close+") | html %]':
            case '[% Translate("pending auto close-") | html %]':
                return true;
                break;
        }
        return false;
    }

    function togglePending(id) {
        if (isStatePending(id)) {
            $('#lblPending, #divPending').show();
        } else {
            $('#lblPending, #divPending').hide();
        }
    }
//]]></script>
строки с 244 по 245 (в оригинальном файле, в файле после правок приведённых выше с 268 по 269) выглядят

Код: Выделить всё

<label>[% Translate("Pending date") | html %]:</label>
<div class="Field">
надо заменить на

Код: Выделить всё

                        <label id="lblPending">[% Translate("Pending date") | html %]:</label>
                        <div class="Field" id="divPending">