Оптимизация ЛС, часть 2

Разработка под LiveStreet CMS
Продолжаем эксперименты над движком.

Ахтунг! В данной статье будут приведены примеры кода, которые могут нарушить функциональность некоторых весьма хитро-умных плагинов, которые привязаны к этому механизму. Мне не известен ни один такой плагин, но я не исключаю возможность их существования.

В прошлом топике, где я опубликовал полный список стандартных хуков для ЛС 1.0.1, я обратил внимание на хуки, которые начинаются с префикса module_ — хуки, которые постоянно создаются динамически и вызываются парами до и после вызовов методом модулей. Как и было написано в предыдущем топике — хуки вызываются 486 раз, причем само их количество на «чистой» LiveStreet значится в 161 штуку.

Оптимизация ЛС, часть 2 →

Список хуков LiveStreet CMS 1.0.1

Разработка под LiveStreet CMS
Привожу список стандартных хуков для чистой официальной ЛС 1.0.1, большинство из них неявно прописаны в движке, поэтому попытка найти их вызовы в коде у вас не выйдет т.к. часть из них автоматически формируется ядром движка.

Из стандартной поставки ЛС хуки в сумме вызываются 486 раз, некоторые по нескольку раз. Это нормально. Здесь приведены 161 хук, которые доступны в ЛС 1.0.1, в порядке их вызова, начиная с самого первого, исключая дальнейшие повторения.

Список хуков LiveStreet CMS 1.0.1 →

Самое узкое место в ЛС - увеличение производительности

Разработка под LiveStreet CMS
Ища пути ускорения движка я постоянно спотыкаюсь об класс конфига (/engine/lib/internal/ConfigSimple/Config.class.php), а именно — меня беспокоит авто замена ключей в конфиге. Такой код мы можем найти в дистрибутиве:

static public function KeyReplace($cfg,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
  if(is_array($cfg)) {
    foreach($cfg as $k=>$v) {
      $k_replaced = self::KeyReplace($k, $sInstance);
      if($k==$k_replaced) {
        $cfg[$k] = self::KeyReplace($v,$sInstance);
      } else {
        $cfg[$k_replaced] = self::KeyReplace($v,$sInstance);
        unset($cfg[$k]);
      }
    }
  } else {
    if(preg_match('~___([\S|\.|]+)___~Ui',$cfg))
      $cfg = preg_replace_callback(
        '~___([\S|\.]+)___~Ui',
        create_function('$value','return Config::Get($value[1],"'.$sInstance.'");'),
        $cfg
      );
  }
  return $cfg;
}


Самое узкое место в ЛС - увеличение производительности →

Плагин «Супер спойлер (Powered spoiler)»

НОВОЕ

  • Исправлен баг с аяксом, когда по нему пропускались много-вложенные массивы
  • Улучшена при работе с аяксом

Плагин «Супер спойлер (Powered spoiler)» →

Как компания ESET ложит на своих клиентов

Обозреватель интернета
Не буду многословен, но так сложилось, что понадобилось купить лицензию для антивируса компании и тут всё началось. Меня настолько это поразило, что я даже не знал, что ТАК можно не уважать ни себя, ни клиентов. Начнем нашу экскурсию издалека — с их официального сайта.

1. После долгий вглядываний в него, стает ясно, что сделан он хреново и весьма не удобно. Так можно судить по убитому и запутанному интерфейсу, в котором хрена с два можно сравнить два продукта и понять разницу, цену можно узнать только когда положил товар в корзину и туда перешел (sic!).

Как компания ESET ложит на своих клиентов →

Фикс безопасности № 5 одним файлом

Безопасность LiveStreet CMS
В свете выхода 4-х публикаций о проблемах с безопасностью в последней версии ЛС (1.0., 1.0.1):

Часть 2
Часть 3
Часть 4
Часть 5

(Нумерация начинается с 2-й части т.к. уже была 1-я часть и чтобы не путать читателей)

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

Данный файл предназначен для официального релиза LiveStreet CMS 1.0.1.

Расположение исходного файла относительно корня сайта:
/classes/actions/ActionAjax.class.php

файл с исправлениями безопасности уже есть в самом движке.

Раскрытие директорий в ЛС. Часть 2

Безопасность LiveStreet CMS
Понедельник — день хороший. За окном мокрый снег и дождь, ну а LiveStreet CMS Guide вещает о проблемах с безопасностью в LiveStreet CMS.

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

Чай и печеньки

Раскрытие директорий в ЛС

Безопасность LiveStreet CMS
Размышляя как-то о том, что директория engine в ЛС лишь частично закрыта извне, я подумал что это дает какие-то потенциальные возможности злоумышленнику. И сразу же был найден пробел в системе безопасности.

Пробееел? У меня сайты на ЛС! Скорее рассказывай!

Как правильно обновлять плагины

FAQ
Это краткая заметка, думал раньше что это очевидно, но оказалось что не для всех, поэтому опубликую.

Обновлять нужно в следующем порядке действий, если автором плагина не указано иного:

Как правильно обновлять плагины →

Плагин «Расширение методов ядра (Wise Engine)»

ИСТОРИЯ

Читая на разных блогах заметки о ЛС как движке с высоким порогом входа для разработчиков, нередко можно наткнутся на возгласы программистов других CMS подобные таким: "Что это такое: $this -> User_GetUserById? Где привычный вызов методов $this -> User -> GetUserById?". После таких слов начинается виртуальный разбор внутренней структуры движка — что такой код писать не удобно и автокомплитер для своей любимой IDE сложно настроить и т.п.

Поразмыслив немного, я решил исправить ситуацию и расширить возможности ядра к более красивому решению по написанию кода. Вам ведь тоже хотелось писать код так же:

$this -> User -> GetUserByLogin ('admin') -> getLogin ()


правда? или так:

$this -> PluginConfigengine -> Config -> GetMyConfig ($this)


Что там дальше-то, скорее нужно прочитать

API плагина Configengine

Разработка под LiveStreet CMS
Плагин представляет возможности для автоматического сохранения конфига плагина в БД. Больше нет необходимости редактировать конфиги плагинов вручную по фтп — вам нужно только сделать интерфейс для их редактирования, хранение настроек возьмет на себя этот плагин.

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

API плагина Configengine →

Плагин «Поиск по топикам, комментариям и людям (Simple Search and Auto Completer)», стал ещё лучше

поиск в LiveStreet CMSВышло обновление хорошего поиска с простой релевантностью по топикам, комментариям и пользователям, автозаполнение (автокомплитер) по тегам для формы поиска.

НОВОЕ

  • Исправлен баг с русской буквой ё и украинской ґ
  • Обновлен модуль кеширования, который теперь не вызывает ошибку уровня e_notice в php 5.4
  • Улучшена релевантность поиска в топиках: теперь дополнительно поиск осуществляется в заголовках + тексте одновременно, потом заголовках, после — в текстах топиков, последовательно для точного и неточного совпадения поискового запроса
  • Корректная работа с новой версией супер спойлера
  • В выводе результатов поиска не режутся новые строки
  • Рефакторинг кода и исправление незначительных багов

Плагин «Поиск по топикам, комментариям и людям (Simple Search and Auto Completer)», стал ещё лучше →

Плагин «Супер спойлер (Powered spoiler)», хорошее обновление

супер спойлерПлагин для создания спойлера с сложными правилами теперь стал универсальным!

НОВОЕ

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

Плагин «Супер спойлер (Powered spoiler)», хорошее обновление →

Плагин «Администрирование пользователей (Admin users)», что нового?

администрирование пользователейВышла новая версия 1.1.1 замечательного плагина для управления пользователями на сайте под управлением LiveStreet CMS.

НОВОЕ

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

Плагин «Администрирование пользователей (Admin users)», что нового? →