Функционал Features в Open Atrium

Заметной проблемой при разработке Drupal приложений становится перенос настроек, сделанных в базе данных и фиксация системы в некотором стабильном состоянии с возможностью отката к нему в случае неудачных экспериментов с настройками. Во многом для решения этих вопросов предназначен пакет компонентов под общим названием Features («фичи»).

С другой стороны «фичи» представляют собой новый уровень абстракции в управлении возможностями системы, предназначенный как для администраторов сайта, так и для пользователей с расширенными возможностями (типа модераторов форумов, администраторов групп в соц. сетях и т.п.). Для этого он предоставляет пользовательские интерфейсы, связанные с настройками, касающимися «контентной» стороны сайта: доступность и расположение контентных блоков, базовые настройки текста.

На текущий момент Features (6.x-1.0-beta6) умеет сохранять:

  • Меню
  • Описание типа контента
  • Контексты
  • Views представления
  • Разрешения
  • Imagecache пресеты
  • Зависимости от других модулей

Если смотреть глубже, то в «Описании типа контента» могут входить поля созданные модулем CCK. А в «Контексты» также входит все что можно включить в контекст: Space type, переменные шаблона, настройки регионов, расположение блоков, пути, пункты меню и другое.

Реализация

На уровне реализации, «фича» представляет собой модуль Drupal, очень тесно интегрированный с несколькими другими модулями, а именно:

  • Views
  • CCK, Fieldgroups
  • Context 2.x, 3.x
  • CTools and CTools exportables implementers
  • ImageCache
  • Spaces 2.x, 3.x
  • Strongarm 2.x

из которых Features, Context, Spaces и Strongarm, разработаны компанией Development Seed.

Интеграция происходит через традиционную систему хуков и реализуется Features API, который предоставляет для каждого элемента, входящего в пакет (блок, контекст, меню и т.д.), возможности интеграции (экспорт, откат и т.п.). То есть, для разработчиков предоставлена принципиальная возможность расширять экспортный возможности «фичи» своими компонентами.

Установка и настройка

Типичным примеров ситуации, когда использование «фич» может принести много пользы, может быть задача создания раздела Webinar на сайте под управлением Open Atrium одного из наших клиентов. В него входит два View с несколькими Display’ами, свой тип контента с расширенным набором атрибутов, специфическое расположение блоков, требующее отдельной настройки, меню, права пользователей по созданию и редактированию контента, а также собственный модуль под задачи этого раздела.

В принципе, в пакет «фичи» может входить и какая-то минимальная функциональность, типа определения View, но для примера лучше использовать множество связанных объектов, объединенных общей задачей.

Шаг 1. Предварительное создание и настройка компонентов.

Сначала делаем всё, как обычно: создаём нужные нам типы контента, расширяем их CCK аттрибутами, создаём нужные View со всеми необходимыми отображениями, формируем настройки контекстов, меню и т.п.

После того, как работа в какой-то мере может считаться сделанной, для того, чтобы её зафиксировать, можно приступить к упаковке всех компонентов в «фичу».

В разделе Features в админке можно видеть список реализованных «фич» с индикатором их состояния (disabled, default, overridden). Там же доступен интерфейс для добавление нового пакета.

Шаг 2. Сборка пакета.

При создании новой «фичи» нужно указать основные настройки, вроде названия и описания, ссылку на источник проверки обновлений (он является в некотором смысле цифровой подписью) и версию, если это нужно.

Далее собираем пакет в интерфейсе, который представляет собой экран выбора компонентов, обнаруженных в системе и доступных для экспорта. На этом этапе вы, хорошо подумав, вспоминаете, что именно должно входить в ваш пакет, отмечаете чекбоксами типы контента, модули, Views и всё остальное. Если что-то забыли, добавить можно будет и потом.

После нажатия на кнопку «Download feature» вы получаете запакованный в архив готовый код вашего пакета, оформленный в виде модуля Drupal, который нужно поместить в директорию с модулями и включить.

На этом этапе вы получаете как бы зафиксированное в исходном коде состояние системы, и можете продолжать работать над настройками сайта в обычном режиме.

Шаг 3. Обновление и откат.

В любой момент по ходу использования системы и внесения изменений вы можете мониторить состояние вашей «фичи» в админке. Вы можете увидеть, какие модули, от которых зависит ваш пакет, доступны, и в какие части вашего пакеты были внесены изменения.

Вы можете откатить все изменения, если хотите вернуться к состоянию, которое зафиксировано в коде модуля. При этом вы можете выбрать только часть компонентов для отката (например, восстановить настройки только Views).

Если изменения, сделанные после создания «фичи», по вашему мнению, оттестированы и полезны, их можно включить в пакет в интерфейсе «Recreate feature», который аналогичен интерфейсу создания. Здесь можно как изменить набор компонентов, так и просто зафиксировать измененное состояние системы. При этом вы получаете такой же пакет в виде модуля Drupal, которым заменяете существующий у вас на сайте. Таким образом, при условии интеграции с системой контроля версий, и при коммите каждого релиза «фичи», вы получаете возможность откатиться к любой версии настроек сайта и визуально контролировать какие именно изменения произошли в настройках от релиза к релизу.

Управление в Public интерфейсе.

В связке с модулями Spaces, Contexts модуль Feature может быть полезным не только для разработчиков, но и для администраторов сайтов, для которых предоставляется интерфейс управления функциональностью на другом уровне, чем в админке, более упрощенный и ограниченный. Такая возможность реализована, например, в системе Open Atrium, в которой можно управлять интерфейсом в контексте группы пользователей без доступа в админку.

Все, доступные как «фичи», пакеты авторизованный пользователь с нужными правами видит в открытой части сайта в панели управления.

Здесь можно включить или выключить пакет, поменять уровень доступа к нему (public/private), а также перейти к его настройкам.

На странице настроек пакета можно управлять расположением доступных в нем блоков, подписей и т.п.

Все сделанные в этом интерфейсе настройки переопределяют настройки пакета только для контекста текущей группы, не затрагивая настроек пакета по умолчанию.

Возможности использования

Для нас, как для разработчиков Drupal приложений, следует обратить внимание на возможности «фичи» как средства фиксации настроек, сделанных в БД в программном коде. Это намного упрощает процесс доставки выполненной работы на тестовые или production-системы. Большая польза в использовании возможности отката в случае нежелательных изменений.

С точки зрения конечного пользователя, «фичи» упрощают управлением функционалом, на примере системы Open Atrium видно как легко можно включить отключить блоги, вебинары, документы, календарь и прочее. Активацией всего одного чекбокса на сайте активируется несколько модулей, импортируется несколько views-представлений, добавляется новые типы материалов и в результате имеем связку модулей которые настроены и готовы к работе.

UPD: Продолжение »