* Убраны экспериментальные логи и "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 {
Затем поочерёдно реализуем нужные функции из интерфейса...
Потом прописываем в наш конфиг:
require_once("mydatabase.php");
$transport=new MySuperLittleDatabase($param1, $param2, ...);
И всё! Добавить один файл, прописать 2 строчки в конфиг, и уже поддержка новой базы (прикручу как-нибудь монгу).
Обёртка над транспортом - фильтр:
Все функции, которые проверяют на правильность msgid, название эхи, работают с чёрным списком и отслеживают любые другие ошибки, перенесены в класс-фильтр - filter.php. Фильтр также переопределяет многие методы транспорта (например, получение, подсчёт, сохранение сообщений). В результате все вещи, которые полагаются на ненадёжные данные, работают не через транспорт, а через фильтр, который берёт на себя всю заботу о них.
При большой нагрузке на станцию можно изменить фильтр очень интересным способом: чтобы он использовал сразу несколько транспортов. Например, при сохранении сообщения сохраняем его сразу и в текстовой базе, и в mysql. А при чтении/получении берём их из того вида базы, которая нам больше нравится.
К примеру, сообщения для бандлов лучше берёт текстовая база, а для парсинга и подсчёта - mysql. Тогда меняем в фильтре, чтобы при получении "простых" сообщений он брал их из одной базы, а при парсинге - из другой. Но это уже экзотика.
Лежит это всё в ветке features.