Механизм обновления плагинов

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

Как это работает
Пользователь заливает новую версию плагина в каталог /plugins/. Система сравнивает текущую версию плагина с версией этого плагина в БД. И если версия в БД старее, то в админке появляется кнопка «Применить обновление», которая автоматически запустит необходимые скрипты для обновления.


Скрипты (классы) для обновления у плагина находятся в каталоге /update/, который в свою очередь содержит каталоги с номерами версий. Для каждой версии можно создать несколько скриптов с произвольным названием, главное, что нужно помнить — названия файлов должно быть уникальным в рамках всего плагина для всех его версий.
Файл с обновлением представляет собой класс наследник от базового класса ModulePluginManager_EntityUpdate и название класса является производным от имени файла — Plugin[plugin_name]_Update_[file_name]. Например, для файла /update/1.0/CreateTable.php класс будет таким:
<?php

class PluginArticle_Update_CreateTable extends ModulePluginManager_EntityUpdate {
	/**
	 * Выполняется при обновлении версии
	 */
	public function up() {
		if (!$this->isTableExists('prefix_article')) {
			/**
			 * При активации выполняем SQL дамп
			 */
			$this->exportSQL(Plugin::GetPath(__CLASS__).'/dump.sql');
		}
	}

	/**
	 * Выполняется при откате версии
	 */
	public function down() {
		$this->exportSQLQuery('DROP TABLE prefix_article;');
	}
}

Как видно из примера, класс содержит два метода up и down. Первый выполняется при обновлении до версии, второй при откате версии. В этих методах может быть не только работа с БД, но и другая необходимая для обновления логика.

При удалении плагина из админки выполняется автоматический откат всех изменений всех версий (метод down).
Данный поход позволит «разгрузить» у плагинов методы Activate и Deactivate от лишней логики и дать удобный механизм обновления версий. Для корректной работы данного механизма, необходимо версии плагинов именовать используя вот этот стандарт — ru2.php.net/manual/ru/function.version-compare.php, он позволит правильно сортировать версии.

Единая авторизация проектов на LS - коллективный заказ плагина

Функционал плагина описан тут
Все вопросы и обсуждение плагина просьба писать тоже тут.

Кому интересен этот функционал оставляйте комментарий в этом топике, с указанием суммы, которую готовы вложить. Минимальная сумма 500 руб.
Как наберётся нужная сумма (13 000 руб.) плагин будет приобретён и распространён бесплатно среди участников складчины.

Бесплатный шаблон "Motion"

Необычный шаблон для LiveStreet, основан на 12-и колоночной сетке 960px. Верстался с нуля. Главная страница в стиле «линдинг», категории и люди сделаны плиткой, 3 слайдера, настраиваемая главная страница, прикольный профиль, много интересного.


Читать дальше →

Мы наконец-то сверстали и опубликовали в каталоге шаблон Lugree!

Помните несколько лет назад на LiveStreet был конкурс на новый дефолтный дизайн? Так вот, Lugree занял тогда второе место и мы пообещали, что шаблон будет бесплатным. Потом его сверстали сторонние разработчики и шаблон распостранялся сначала бесплатно, а потом за деньги. Но так как его качество оставляло желать лучшего, то мы все таки решили сделать все сами ;)


Под катом вас ждет описание особенностей и ссылка на сам шаблон ))
Читать дальше →

RBAC - управление правами на основе ролей

В новой версии появился новый модуль Rbac — модуль управления правами на основе ролей и разрешений (RBAC).
Суть его сводится к тому, что теперь в админке можно создавать различные роли, давать ролям необходимые права (разрешения) и назначать эти роли пользователям. Роли могут наследовать от других ролей. Таким образом можно очень гибко настраивать систему управления правами.



Читать дальше →

Еще один способ отсечения спам-ботов.

Думаю многие сталкивались с проблемой спам-ботов на своих сайтах LS. В своё время я решил этот вопрос с помощью настроек конфига, а так же небольшого плагина.
Суть защиты сводится к тому, что минимальное значение рейтинга для возможности создания топика устанавливается больше 0. А что бы новые пользователи могли без проблем создавать топики, то им начисляется дополнительный рейтинг за заполнение полей профиля. Этот рецепт позволил мне забыть о проблеме спам-ботов.
Что бы повторить мой путь необходимо:
1. Внести изменения в config.php:

$config['acl']['create']['topic']['limit_rating']  = 0.5


2. Установить и активировать плагин:

Шаблон "Buka"

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

Никаких наворотов и ничего лишнего — простой серый шаблон с двумя лентами: стандартной и сеткой.

Есть небольшое поле для маневров и придания индивидуальности:
  1. Boxed-стиль, т.е. можно задать свой фон (всему сайту, блогам, отдельным топикам, профилям).
  2. Большая шапка с названием и описанием сайта, для которой можно тоже задать свой фон, вырезать ее и вставить на ее место что-то свое (слайдер, миниатюры важных топиков, блок новостей и проч.), убрать ее вообще для того, чтобы было видно основное изображение главного фона. В общем здесь все ограничивается вашей фантазией.

Читать дальше →

Центральный крон

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



В системный cron на сервере необходимо добавить скрипт — /application/utilities/cron/main.php с периодом 1 раз в 2 минуты.
Далее в специальном интерфейсе в админке можно управлять списком задач. По умолчанию созданы две задачи — очистка старого кеша и рассылка отложенных емайл сообщений. Там же можно в ручном режиме добавить новую задачу, в качестве вызываемого метода указывается полный синтаксис вызова метода модуля.

Центральный крон может работать в двух режимах — последовательное выполнение задач и параллельное (fork). Параллельный режим пока работает в тестовом режиме, т.к. до конца не протестирован. Выставляется режим в конфиге: $config['module']['cron']['use_fork'] = false;

Плагины могут добавлять в крон свои задачи. Для этого в главной файле плагина достаточно прописать специальные вызовы при активации и деактивации плагина.

public function Activate() {
    $this->Cron_CreateTask('Тестовая задача','PluginArticle_Main_RunTest',6,$this);
    return true;
}

public function Deactivate() {
    $this->Cron_RemoveTasksByPlugin($this);
    return true;
}

Краудсорсинговая документация

Пришла идея сделать документацию для разработчиков. Судя по всему, такая необходимость давно назрела. К сожалению, документация быстро устаревает, а бывает и совсем исчезает. Чтобы такого не произошло и её существование не сильно зависело от меня — решил разместить её на GitHub — оттуда уж точно никуда не денется. Надеюсь на вашу помощь в написании.

В общем, вот — livestreet.net