[#] Крупное обновление php-ноды
vit01(mira, 1) — All
2016-02-23 10:16:03


* Убраны экспериментальные логи и "small-echolist" за ненадобностью
* Для текстовой базы теперь не надо вручную создавать "echo/" и "msg/"
* Путь файлу blacklist меняется через конфиг
* mysql-functions.php и класс IIFrontend полностью убраны в замену транспортам
* blacklist-func.php убран в замену фильтру
* Улучшена общая читаемость кода
* В веб-клиент при инициализации теперь нужно прописать фильтр (см. ii-web.php)
* Немного переписан /u/push
* Улучшена обработка ошибок в ii-point.php и читаемость кода
* ii-point.php нормально отрабатывает при "строгом" режиме php (c Notice и прочим)
* Глобально доступны функции для парсинга и соединения тегов (класс TransportCommon)
* Миграция на mysql с текстовой базы доступна в "тихом" режиме, т.е. сначала копируем сообщения и только потом переключаемся на mysql
* Абсолютно всё переведено на новую систему "транспортов" и "фильтра" (объяснение ниже).
* Благодаря транспорту можно поменять расположение текстовой базы через конфиг
* Веб-клиент больше не использует свои велосипеды для получения сообщений

Изменения в ii2rss.php:
* Теперь успешно проходит тесты на соответствие стандарту RSS
* Добавлено поле для времени сообщения
* Умеет забирать сообщения из нескольких эх сразу (см. конфиг) по-умолчанию
* Более "правильное" отображение отправителя и получателя
* Экономнее использует ресурсы, запрашивая сразу набор сообщений, а не отдельно каждое

Новая система транспортов и фильтра:
Итак, теперь для доступа к разным базам используется единый набор функций. Поэтому переключение между ними будет абсолютно безболезненным (см. конфиг). В качестве наглядного примера загляните в самое начало файла transports.php, где сразу видно интерфейс.
Также, чтобы прикрутить собственную базу, достаточно всего лишь написать класс, реализующий данный интерфейс и прописать его вызов в конфиг.
Ещё можно создавать изменённые транспорты благодаря ООП (путём наследования от уже существующих).
Предположим, вы решили использовать ii-php поверх sqlite, postgresql, json или собственного бинарного формата.
Создаём файл mydatabase.php, начинающийся с вот таких строк:
<?php
class MySuperLittleDatabase extends TransportCommon implements AbstractTransport {
// примечание: рекомендуется обязательно наследовать класс от TransportCommon или от уже существующего из-за nomessage и функций "перегонки"

Затем поочерёдно реализуем нужные функции из интерфейса...
Потом прописываем в наш конфиг:

require_once("mydatabase.php");
$transport=new MySuperLittleDatabase($param1, $param2, ...);
И всё! Добавить один файл, прописать 2 строчки в конфиг, и уже поддержка новой базы (прикручу как-нибудь монгу).

Обёртка над транспортом - фильтр:

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

При большой нагрузке на станцию можно изменить фильтр очень интересным способом: чтобы он использовал сразу несколько транспортов. Например, при сохранении сообщения сохраняем его сразу и в текстовой базе, и в mysql. А при чтении/получении берём их из того вида базы, которая нам больше нравится.
К примеру, сообщения для бандлов лучше берёт текстовая база, а для парсинга и подсчёта - mysql. Тогда меняем в фильтре, чтобы при получении "простых" сообщений он брал их из одной базы, а при парсинге - из другой. Но это уже экзотика.

Лежит это всё в ветке features.

P.S. Хоть тестированием я вполне занимался, но ii-net.tk до сих пор на новую версию не обновлял. Как только обновлю - сообщу, чтобы остальным на грабли не напороться (и скину в ветку master).

[#] Re: Крупное обновление php-ноды
vit01(mira, 1) — vit01
2016-02-24 18:11:50


Обновил свою станцию на новую версию и слил ветку features в master.
Mira station уже полдня работает на новой версии. Пока что всё нормально.

Как обновиться:

1. Обновление следует начать с конфига, просмотрев различия и записав новые переменные.
2. Затем перейти к файлу, который вызывает веб-клиент, поменяв там одну строчку (в образце см. $access).
3. После этого удалить blacklist-func.php и mysql-functions.php.
4. Переместить blacklist.txt временно в другое место.
5. Затем по порядку перезаписать все php скрипты теми, что из репозитория.
6. Насчёт веб-клиента: если какие изменения и понадобятся, то только в iiweb.inc.php (в css-ках и всяких стилях абсолютно ничего не поменялось)
7. Возвращаем ЧС на прежнее место

[#] Re: Крупное обновление php-ноды
vit01(mira, 1) — vit01
2016-02-25 17:43:25


Свежие коммиты в master:

* Чёрный список парсится и обрабатывает методом списков, а не замены (+ убрал ограничение на отсутствие пустых строк)
* В вебморде исправлена регрессия с цитированием
* Вебморда обзавелась механизмом подписок (скопировал с irk39.tk).