+398.83
Рейтинг
965.74
Сила

Максим

Новогодняя альфа

Первым делом хотим поздравить всех с наступающим Новым 2015 Годом! Прошлый год выдался не простым, как для страны в целом, так и для LS ) Нам не удалось полностью выполнить намеченные планы, а именно, выпустить стабильный релиз LS 2.0. Но мы провели достаточно большую работу и довели разработку до альфа версии, которую и хотим сегодня презентовать.

Почему она альфа? Альфа, т.к. не успели зафиксировать все необходимые правки по frontend'у, который претерпел значительные изменения (подробнее в отдельном посте — livestreet.ru/blog/dev_livestreet/17706.html). В остальном функционал достаточно устаканившийся, но требует тестирование и мелкие фиксы.

Ниже список основных новых возможностей альфы LS относительно LS 1.0:

  • Новая структура файлов/каталог движка. Фреймворк полностью отделен от приложения.
  • Механизм универсальных категорий. Возможность привязки категорий к разным объектам.
  • Механизм дополнительных полей (EAV) для различных объектов
  • Универсальный механизм управления медиа-файлами
  • Управление типами топиков и их кастомизация
  • Встроенная поддержка превью для топиков
  • Возможность вставлять в топик несколько опросов
  • Система управления правами пользователей
  • Центральный крон
  • Новый удобный механизм загрузки фото и аватара пользователя
  • Поддержка жалоб на пользователей
  • Новый продвинутый поиск пользователей
  • Упрощения системы рейтинга
  • Поиск по сайту «из коробки» (без sphinx)
  • Новый поиск блогов
  • Категории для блогов
  • Возможность постить топики в несколько блогов
  • Опционально каптча при авторизации
  • Новый инсталлятор
  • Возможность запустить процесс обновления LS из консоли (для крупных проектов)
  • Упрощена навигация по топикам
  • Официальная админ-панель (отдельный плагин в комплекте)
  • Редактирование комментариев
  • Поддержка мульти-авторизаций для пользователей (можно одновременно логиниться с разных браузеров)
  • Поддержка работы через https, в том числе принудительное использование для страниц регистрации/авторизации
  • Возможность расширения эвентов отдельными классами
  • Существенная доработка ORM
  • Возможность не только переопределять файлы шаблона, но и наследовать их
  • Для плагинов теперь не обязательно дублировать tpl файлы для всех шаблонов. Можно их все держать в шаблоне default, а в конкретный шаблон копировать только измененные
  • Поддержка разных конфигов для разных окружений
  • Конфиги плагинов теперь можно переопределять в каталоге с главным конфигом (/application/config/plugins/[plugin_name]/config.php)
  • Удобный механизм интеграции плагинов в админ-панель — управление конфигом и собственный функционал
  • Новый модуль кеширования и логирования
  • Новый модуль для работы с изображениями
  • Поддержка миграций для плагинов
  • Весь код отформатирован под PSR-2
  • Большое число мелких фиксов и улучшений ядра
  • Переработанный фронт

Самое главное! Скачать альфу можно по ссылке — livestreetcms.com/download/get-alfa/
Дополнительно мы сделали ежедневную ночную сборку девел версии, специально для самых ативных тестеров. Скачать ее можно здесь.
Демо версия доступна на сайте — alfa.demo.livestreetcms.com

Админ-панель сейчас может отображаться не совсем корректно — она еще не адаптирована к новым стилям/компонентам ядра. Не пугайтесь )

Еще раз всех с наступающим Новым Годом!

Без заголовка

Некоторые из вас помнят, что у LiveStreet давно был конкурент в лице BigStreet, автором которого являлся Дмитрий Глухов (redhummer). Но мало кто знает, что изначально мы вместе с Дмитрием занимались BigStreet. Правда тогда он планировался как локальный городской проект для общения в сетях крупного провайдера. Проект так и не появился, зато из его зачатков родился движок для коллективных блогов — BigStreet, которым Дмитрий продолжил заниматься самостоятельно. Через какое то время появился LiveStreet и долгое время проекты шли параллельно.

В этом году Дмитрия не стало. Это был рак. У него осталась семья — супруга и двое маленьких детей (10 и 4 года). Живут в КГТ (такая общага на 18 метров), родственников нет, друзей мало. Вчера над КГТ выгорела другая комната, от тушения пожара ее затопило, практически всему кердык. Ситуация полная жопа.

Давайте вместе поможем семье Дмитрия. Мы в Каталоге у плагина Donate добавили новую лицензию — «Поддержка семьи основателя BigStreet», стоимость 500р. Все деньги от продажи этой лицензии (100% сумма, без каких либо комиссий) мы перечислим семье Дмитрия. Если у вас есть желание перевести какую-либо другую сумму — то это можно сделать на карту Сбербанка жены Ольги по номеру телефона (телефон отправлю в личку по запросу).

Новогодняя Ярмарка! Распродажа! Скидки 30%



Объявляем о запуске традиционной Новогодней распродажи 2015!

Только с 15 декабря по 15 января вы можете отхватить 30% скидку на большое количество (более 50) плагинов и шаблонов в нашем Каталоге.

Участвующие в акции расширения представлены на странице catalog.livestreetcms.com/promo/
Удачных Новогодних покупок!

CAS-сервер - единая авторизация для LiveStreet сайтов


CAS-сервер позволяет организовать единую точку авторизации (паспорт) ваших проектов на LiveStreet CMS. Ранее функционал обсуждался в топиках livestreet.ru/blog/16980.html и livestreet.ru/blog/17422.html
В комплекте идет плагин и полностью готовый к установке сайт CAS-сервера, шаблон которого реализован на Bootstrap. Подробнее от настройке будет ниже.

Как это работает
1. При попытке авторизации/регистрации пользователя на одном из ваших сайтов, он перенаправляется на сайт CAS-сервера.
2. После успешной авторизации/регистрации пользователь автоматически перенаправляется обратно на ваш сайт
3. Регистрация пользователя происходит только в БД того сайта, от куда он пришел и дополнительно в БД CAS-сервера
4. Если пользователь авторизовывается на сайте, где у него еще нет аккаунта, но есть аккаунт на другом вашем сайте, то будет произведена автоматическая регистрация на сайте с последующей авторизацией

Логика работы единой авторизации похожа на авторизацию на этом сайте, где весь процесс проходит через сайт passport.livestreetcms.com (происходит автоматическая регистрация/авторизация на 3-х сайтах).

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

Плагин AutoOpenID - версия 2.0.0


Мы обновили плагин, вернее полностью его переписали.
Теперь он поддерживает только авторизацию по протоколам OAuth 1 и 2 версий и требует версию PHP не ниже 5.3. От морально устаревшего протокола OpenID решили отказаться.

На данный момент реализованы сервисы — Facebook, Google, ВКонтакте, Twitter, Yandex, Mail.Ru, Одноклассники. По дополнительный запросам мы можем добавить и другие сервисы, которые поддерживают OAuth.

При обновлении со старой версии плагина ветки 1.* есть возможность переноса аккаунтов, но не всех, а только Facebook, ВКонтакте и Одноклассники. Остальные связи при обновлении будут утеряны и пользователям необходимо будет пройти процедуры привязки повторно. Здесь нужно понимать, что если у пользователя не было пароля и емайла, то при потери связи с аккаунтом из сервисов, он уже не сможет авторизоваться под этим пользователем.

ДЕМО — autoopenid.demo.livestreetcms.com/

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

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

Как это работает
Пользователь заливает новую версию плагина в каталог /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, он позволит правильно сортировать версии.

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

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



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

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

В новой версии мы реализовали механизм центрального крона. Суть в том, что для выполнения периодических задач достаточно в 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;
}

Универсальные категории

В новой версии LS появится функционал универсальных категорий.
Плагины смогут привязывать древовидные категории к любым объектам (полная интеграция с ORM), управления такими категориями доступно из админки. Из коробки категории будут работать для блогов (как сейчас на сайте livestreet.ru).



Интеграция в плагинах
Интеграция функционала категорий основана на механизме поведений. Поэтому для начала необходимо в класс объекта (сущность, к которой привязываем категории) и класс модуля добавить описание поведений.
Для сущности:
	protected $aBehaviors=array(
		// Настройка категорий
		'category'=>array(
			'class'=>'ModuleCategory_BehaviorEntity',
			'target_type'=>'article',
			'form_field'=>'category',
			'multiple'=>true,
		),
	);

Для модуля:
	protected $aBehaviors=array(
		// Настройка категорий
		'category'=> array(
			'class'=>'ModuleCategory_BehaviorModule',
			'target_type'=>'article',
		),
	);


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

Новый функционал фреймворка - поведения (behavior)

В новой версии LS 2.0 появится функционал поведений (behaviors), который очень поход на подобный в Yii.
Суть сводится к тому, что теперь определенному типу объектов (пользователи, топики, блоги и т.п.) или конкретному объекту можно назначить через поведения определенный новый функционал.
Добавить новое поведение в объект достаточно просто, можно у объекта определить свойство $aBehaviors. Например:
	protected $aBehaviors=array(
		'category'=>'ModuleCategory_BehaviorCategory',
		'property'=>array(
			'class'=>'ModuleProperty_BehaviorPropertyEntity',
	        	'target_type'=>'article'
		)
	);

В этом примере добавляются два поведения — категории и дополнительные поля. В качестве ключа используется название поведение (далее по этому ключу можно обращаться к поведению), а в качестве значения идут параметры. Параметры идут произвольным массивом имя/значение, 'class' — это служебный параметр, означающий класс поведения. Если у повеления нет параметром, то его можно записать в короткой форме (смотри 'category'). Альтернативным (скорее дополнительным) способом добавления поведения является прямой вызов метода AttachBehavior, например:
$oTopic->AttachBehavior('property','ModuleProperty_BehaviorPropertyEntity');

// далее можно убрать поведение
$oTopic->DetachBehavior('property');


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