Задача: добавить галку с названием «1С-Битрикс» на форму редактирования домена. В зависимости от галки в файл конфигурации Apache будет прописываться разное значение для директивы open_basedir:
- галка включена — open_basedir принимает значение «none»;
- галка выключена — open_basedir принимает значение равное домашней директории домена.
Плагин обычно состоит из XML файла описания плагина, где можно добавлять/скрывать элементы интерфейса, а также там описывается обработчик — скрипт, который будет вызываться перед или после действий панели правления. XML всегда должен быть расположен в директории /usr/local/mgr5/etc/xml/ и называться ispmgr_mod_<name>.xml, например /usr/local/mgr5/etc/xml/ispmgr_mod_bitrix.xml
XML описание плагина
<?xml version="1.0" encoding="UTF-8"?> <mgrdata> <handler name="bitrix" type="xml"> <event name="webdomain.edit" after="yes" /> </handler> <metadata name="webdomain.edit" type="form"> <form> <page name="domain"> <field name="bitrix"> <input type="checkbox" name="bitrix"/> </field> </page> </form> </metadata> <lang name="ru"> <messages name="webdomain.edit"> <msg name="bitrix">1С-Битрикс</msg> <msg name="hint_bitrix">Отметьте галку, чтобы сформировать оптимальные файлы конфигурации для 1С-Битрикс</msg> </messages> </lang> <lang name="en"> <messages name="webdomain.edit"> <msg name="bitrix">1C-Bitrix</msg> </messages> </lang> </mgrdata>
Блок metadata описывает, что на форму (type=»form») редактирования веб домена (name=»webdomain.edit») на вкладку WWW-домен (page name=»domain») добавляем новое поле (name=»bitrix») с типом чекбокс (type=»checkbox»).
Блок handler описывает, что после (after=»yes») редактирования веб домена (webdomain.edit) будет вызываться скрипт с названием bitrix (handler name=»bitrix») и типом xml (type=»xml»).
Тип xml означает, что скрипту на вход (stdin) будет передан от панели управления xml файл с параметрами. Плагин в свою очередь должен вернуть панели такой же xml на выходе (stdout), где могут быть добавлены собственные параметры или изменено значение существующих.
Блок lang определяет описание и подсказку на русском и английском языках.
После того, как добавлена собственная xml необходимо перезапустить панель управления командой
/usr/local/mgr5/sbin/mgrctl -m ispmgr exit
Обработчик
Скрипт обработчика должен всегда располагаться в директории /usr/local/mgr5/addon . Файл должен называться так, как это обозначено в xml в секции handler. В текущем примере это файл /usr/local/mgr5/addon/bitrix , который имеет следующее содержимое:
#!/bin/bash if [[ "$PARAM_bitrix" = "on" ]] then cat | sed 's|</doc>$|<params><CUSTOM_BASEDIR>none</CUSTOM_BASEDIR></params></doc>|' else cat | sed 's|</doc>$|<params><CUSTOM_BASEDIR>'$PARAM_docroot':.</CUSTOM_BASEDIR></params></doc>|' fi
В условии проверяется значение переменной $PARAM_bitrix. Некоторые параметры панель управления передает в переменные окружения и их можно использовать в обработчике плагина. $PARAM_bitrix — переменная, которая принимает значение on, если на форме редактирования домена отмечена галка «1С-Битрикс» и значение off, если галка не отмечена.
На выход плагин отдает панели точно такой же xml файл, что получил на вход, но добавляет в xml собственный параметр — CUSTOM_BASEDIR, который принимает значение none, если галка «1C-Битрикс» отмечена или принимает значение <домашняя директория домена>, если галка не отмечена.
Теперь остается отредактировать файл шаблонизатора , именно он определяет какие директивы будут прописываться в файл конфигурации Apache.
В файле /usr/local/mgr5/etc/templates/apache2-vhosts.template меняем строки
php_admin_value open_basedir "{% $BASEDIR_PATH %}"
на
php_admin_value open_basedir "{% $CUSTOM_BASEDIR %}"
Теперь значение open_basedir будет определяться переменной CUSTOM_BASEDIR, которую мы сами добавляем с помощью плагина и определяем сами ее значение в зависимости от отмеченной/не отмеченной галки «1C-Битрикс» на форме редактирования домена.