Создание плагина для Mantis

Создание плагина для MantisВ первой записи блога принято писать всякие вводные слова, а мы прям возьмем да и перейдем к делу!

Потребовалось мне написать плагин для Мантиса, который бы выбирал некоторые данные из существующих полей записи и добавлял их в отдельную колонку в общем списке «инцидентов».

Дописывать это в сам код Мантиса нехорошо, поскольку в дальнейшем это может вылезти в совершенно неизвестных местах, а потому мы начнем писать плагин.

Плагины в мантисе сложены в папку «plugins»  и содержат внутри одноименные php файлы.

В общем структура нашего плагина будет такая:

/plugins/DescriptionExt/ —  папка самого плагина
/plugins/DescriptionExt/lang/ — папка с переводами
/plugins/DescriptionExt/lang/strings_english.txt
/plugins/DescriptionExt/lang/strings_russian.txt
/plugins/DescriptionExt/DescriptionExt.php — файл с самим плагином

Шаблон класса плагина, от которого надо будет отэкстендить свой класс, можно найти в файле /Core/Classes/MantisPlugin.class.php с комментариями.

И так, для начала подключаем необходимые для шаблона модули:

require_once(config_get('class_path') . 'MantisPlugin.class.php');

require_once(config_get('class_path') . 'MantisColumn.class.php');

Далее создаем класс плагина и наследуем его от класса MantiscColumn

class DescriptionExtPlugin extends MantisPlugin {

Название класса должно соответствовать названию папки + слово Plugin.

Добавляем функцию register  в класс. Она вызывается при сканировании папки с плагинами.

public function register()
{

// Название плагина
$this->name = plugin_lang_get('title');
// Описание плагина
$this->description = plugin_lang_get('description');

// Версия плагина
$this->version = '1.0';

// Требования для плагина
$this->requires = array();

// Информация о разработчике
$this->author = 'Blare';
$this->contact = 'admin@blare.su';
$this->url = 'http://blare.su';

}

Теперь при просмотре списка плагинов в Мантисе будет виден наш плагин и его даже можно будет включить!

Далее в классе плагина нам надо добавить функцию events который будет перехватывать собатия.

// Добавляем хук для перехвата событий
public function hooks()
{

return array(
'EVENT_FILTER_COLUMNS' => 'column',
);

}

// Эта функция должна возвращать массив колонок
public function column($p_event)
{

return array('IsIdentifier','Version');

}

Возвращаемые названия колонок будут вида <название класса>_<название колонки>

Теперь необходимо написать два класса для описания колонок: IsIdentifier и Version

class IsIdentifier extends MantisColumn
{

/**
* Column title, as displayed to the user.
*/
public $title = 'Идентификатор';

/**
* Column name, as selected in the manage columns interfaces.
*/
public $column = 'IsIdentifier';

/**

* Column is sortable by the user. Setting this to true implies that
* the column will properly implement the sortquery() method.
*/
public $sortable = true;

/**

* Column is sortable by the user. Setting this to true implies that
* the column will properly implement the sortquery() method.
*/
public function display($p_bug, $p_columns_target)
{

// Получаем содержимое поля description
$t_description = string_display_links( $p_bug->description );

// что-то тут делаем

// Выводим данные
echo 'Содержимое колонки';

}

}

Аналогично делаем и для второй колонки.
Вот и все, плагин готов!

Комментарии запрещены.