Table of Contents |
---|
Начало создания плагина
1) Создать папку Plugins в нужном модуле. В ней будут храниться модули.
2) Создать файл в формате: ModuleName_PluginName.pm
Пример: Maps2_Msgs.pm
3) Базовая структура плагина:
Code Block | ||||
---|---|---|---|---|
| ||||
package ModuleName::Plugins::PluginName; use strict; use warnings FATAL => 'all'; my ($admin, $CONF, $db); my $json; my Abills::HTML $html; my $lang; my $Msgs; my $Maps_view; #********************************************************** =head2 new($html, $lang) =cut #********************************************************** sub new { my $class = shift; $db = shift; $admin = shift; $CONF = shift; my $attr = shift; $html = $attr->{HTML} if $attr->{HTML}; $lang = $attr->{LANG} if $attr->{LANG}; $Msgs = $attr->{MSGS} if $attr->{MSGS}; my $self = { MODULE => 'MODULE_NAME' }; #Если нужно подключить другой пакет, то используем следующий вид #use Maps2::Maps_view; #$Maps_view = Maps2::Maps_view->new($db, $admin, $CONF, { HTML => $html, LANG => $lang }); bless($self, $class); return $self; } #********************************************************** =head2 plugin_info() =cut #********************************************************** sub plugin_info { return { NAME => 'Название плагина', DESCR => 'Описание плагина' }; } 1; |
Создания плагина вида "в колонке Управление/внизу тикета"
Эти виды плагинов создати для отображения/изменения информации
1) Нужно изменить функцию plugin_info на:
Code Block | ||||
---|---|---|---|---|
| ||||
#********************************************************** =head2 plugin_info() =cut #********************************************************** sub plugin_info { return { NAME => 'Название плагина', POSITION => 'RIGHT', DESCR => 'Описание плагина' }; } |
Где POSITION может быть двох типов:
- RIGHT - Плагины в колонке Управление
- BOTTOM - Плагины внизу тикета в виде таблиц
2) Создать функцию plugin_show. Функция должна возвращать строку.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#********************************************************** =head2 plugin_show($attr) Arguments: Return: =cut #********************************************************** sub plugin_show { my $self = shift; my ($attr) = @_; $attr->{index} ||= $attr->{qindex}; return '' if !$attr->{index}; $attr->{UID} ||= 0; $Msgs->{ID} ||= 0; my $url = "qindex=$attr->{index}&UID=$attr->{UID}&ID=$Msgs->{ID}&header=2"; $url .= ($CONF->{DOCS_PDF_PRINT}) ? '&pdf=1' : ''; $url .= "&PLUGIN=$self->{PLUGIN_NAME}"; return $html->button('', $url, { class => 'btn btn-default', ICON => 'glyphicon glyphicon-print print', TITLE => $lang->{PRINT}, ex_params => 'target=new, data-button-group=1' }); } |
Создания плагина вида "перед добавлением заявки/перед отправкой ответа на зявку"
При создании плагина, который будет срабатывать перед добавлением заявки нужно добавить параметр BEFORE_CREATE значение которого равно масиву из названий функций, которые будут выполняться.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#********************************************************** =head2 plugin_info() =cut #********************************************************** sub plugin_info { return { NAME => 'Название плагина', BEFORE_CREATE => [ 'Function1_name', 'Function_name2' ], DESCR => 'Описание плагина' }; } |
Для плагинов, которые выполняются перед отправкой ответа на зявку нужно добавить параметр BEFORE_REPLY:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#********************************************************** =head2 plugin_info() =cut #********************************************************** sub plugin_info { return { NAME => 'Название плагина', BEFORE_REPLY => [ 'Function1_name', 'Function_name2' ], DESCR => 'Описание плагина' }; } |
В одном плагине можно совмещать и BEFORE_REPLY, и BEFORE_CREATE
После изминения plugin_info нужно добавить функции, которые будут выполняться.
Пример функции:
Code Block | ||||
---|---|---|---|---|
| ||||
#********************************************************** =head2 Function1_name($attr) Arguments: Return: =cut #********************************************************** sub Function1_name{ my $self = shift; my ($attr) = @_; return if !$Msgs; my $statuses = $Msgs->status_list({ TASK_CLOSED => 1, COLS_NAME => 1 }); my $closed_statuses = (); map push(@{$closed_statuses}, $_->{id}), @{$statuses}; return if !defined($attr->{STATE}) || !in_array($attr->{STATE}, $closed_statuses); my $work_list = $Employees->employees_works_list({ COLS_NAME => 1, SUM => '_SHOW', EXTRA_SUM => '_SHOW', EXT_ID => $attr->{ID}, WORK_AID => '_SHOW', WORK => '_SHOW', WORK_DONE => '0', }); return if !$Employees->{TOTAL} || $Employees->{TOTAL} < 1; $html->message('err', $lang->{ERROR}, 'У вас остались не законченые работы!'); return { RETURN_VALUE => 1, CALLBACK => { FUNCTION => 'msgs_ticket_show', PARAMS => { UID => $attr->{UID}, ID => $attr->{ID} } } }; } |
Возвращаемые значения функций:
Если хотите, чтобы после выполнения функции операция(добавление заявки/закрытия) отменилась, то нужно вернуть хеш, в котором будет параметр RETURN_VALUE => возвращаемое значение.
Если после выполения функци нужно вызвать ещё другую функцию, то нужно вернуть хеш, в котором будет следующий параметр:
Code Block | ||||
---|---|---|---|---|
| ||||
CALLBACK => {
FUNCTION => 'название вызываемой функции',
PARAMS => {
#параметры, которые будут переданы
UID => $attr->{UID},
ID => $attr->{ID}
}
} |
Создание кнопки/ссылки в плагине
Чтобы создать кнопку/ссылку, которая будет возвращаться в плагин нужно к ссылке добавить параметр: &PLUGIN=$self→{PLUGIN_NAME}
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
my $url = "qindex=$attr->{index}&UID=$attr->{UID}&ID=$Msgs->{ID}&header=2"; $url .= ($CONF->{DOCS_PDF_PRINT}) ? '&pdf=1' : ''; $url .= "&PLUGIN=$self->{PLUGIN_NAME}"; return $html->button('', $url, { class => 'btn btn-default', ICON => 'glyphicon glyphicon-print print', TITLE => $lang->{PRINT}, ex_params => 'target=new, data-button-group=1' }); |
После создания кнопки нужно добавить обработчик, который будет вызыватьсь при появлении этого параметра.
Добавлять его можно в любой ф-ции, которая вызывается.
Code Block | ||||
---|---|---|---|---|
| ||||
sub plugin_show {
my $self = shift;
my ($attr) = @_;
if ($attr->{PLUGIN} && $attr->{PLUGIN} eq $self->{PLUGIN_NAME}) {
msgs_ticket_form($attr);
return '';
}
} |