- Перенесены устаревшие ContainerAwareTrait и ContainerAwareInterface из Symfony\DependencyInjection
- Исправлены предупреждения в модуле ACL в сортировке правил
- Исправлено поведение плагина фильтров для пустых списков из справочника
- Убрана зависимость predis/predis:1.1
- Исправлена ошибка в Smarty при использовании {literal}
- Исправлена ошибка в Smarty при использовании функции addTemplateFunction
- Исправлена ошибка в AuditLogModule
- Обновлена мажорная версия monolog/monolog до ^3.0 lock =
3.5.0
- Исправлена ошибка в PXStorageTypeSerialized при использовании некорректного json
- Исправлена ошибка в Filesys/dir
- Исправлены ошибки в Smarty при обращении к несуществующим переменным в шаблоне
- Добавлен формат webp к списку разрешенных форматов изображений
- Исправлена ошибка определения расширения файла при загрузке на сервер
- Исправлены ошибки возвращаемого типа в командах
- Обновлена версия php до 8.2
- Обновление phpunit/phpunit до 9.0 lock =
9.6.11
- Обновление friendsofphp/php-cs-fixer до 3.23 lock =
3.23.0
- Обновлены мажорные версии зависимостей symfony:
symfony/http-foundation
^6.0
lock =6.3.2
https://github.com/symfony/http-foundation/blob/master/CHANGELOG.mdsymfony/console
^6.0
lock =6.3.2
https://github.com/symfony/console/blob/master/CHANGELOG.mdsymfony/event-dispatcher
^6.0
lock =6.3.2
https://github.com/symfony/event-dispatcher/blob/master/CHANGELOG.mdsymfony/yaml
^6.0
lock =6.3.3
https://github.com/symfony/var-dumper/blob/master/CHANGELOG.mdsymfony/config
^6.0
lock =6.3.2
https://github.com/symfony/config/blob/master/CHANGELOG.mdsymfony/dependency-injection
^6.0
lock =6.3.2
https://github.com/symfony/dependency-injection/blob/master/CHANGELOG.mdsymfony/finder
^6.0
lock =6.3.3
https://github.com/symfony/finder/blob/6.3/CHANGELOG.mdsymfony/cache
^6.0
lock =6.3.2
https://github.com/symfony/cache/blob/6.3/CHANGELOG.md
- Исправлено поведение плагина
PXPluginFilters
для полей линейкиPXDisplayTypeDropdown
, у которых отсутствуют загруженные значения для построения выпадающего списка. Для таких полей теперь используется обычный input.
- Убраны лишние действия из списка в
PP\Module\AclModule
в админке
- Исправлен фильтр в админке для storage type integer и нулевых значений
- Исправлен интерфейс
PP\Module\MassChangeModule
- Для плагина Sortable ACL добавлена поддержка Modules ACL.
- Для проверки правил ACL добавлена возможность отличать правила
deny
от отсутствующих в таблице.
- Исправления в сообщениях об ошибках доступа ACL, убрана лишняя проверка доступа к объекту в
PXDatabase::ModifyContentObject()
, если родитель объекта не изменился
- Включен symfony EventDispatcher Component
- Исправлен баг с фильтрацией unicode имен файлов
- Множественные исправления и очистка deprecated кода для файловых storage types.
- Добавлена возможность безопасно загружать файлы as is, без транслитерации имени (это поведение включается с помощью параметра
filter
в атрибуте storagetype).
- Масштабный рефакторинг проекта, улучшена стилистика и совместимость с php 7.2, убран deprecated код
- Удалена поддержка swf файлов :)
- Класс
PXResponse
переписан с использованиемSymfony\Component\HttpFoundation\Response
и переименован вPP\Lib\Http\Response
с переносом
- Исправлена ошибка генерации ссылки на файл в списке файлов модуля
PP\Module\FileModule
- Удалена неиспользуемая
PP\Lib\Auth\Secure
библиотека авторизации. - Разделены проверки авторизации в
PXUser::checkAuth()
на проверку ранее авторизованного пользователя и авторизацию через учётные данные. - Добавлен метод
PXUser::authorizeAs()
для авторизации текущего пользователя из массива полей другого пользователя, например, для простой реализации автоматической авторизации пользователя после подтверждения email. - В
PP\Lib\Auth\Session
изменен алгоритм хэширования пароля с md5 на BCrypt, проверка пароля вынесена в отдельный метод.
- Добавлен функционал модуля
PP\Module\FileModule
protected directories - реализует защищенные от скачивания по прямой ссылке файлы, скачивание файлов из таких папок доступно только через модуль (nginx internal location + X-Accel-Redirect header).
- Убрано обращение к кешу и сохранение в кеш при запросе
PXDatabase::_GetData()
с флагомdontUseCache
- При подгрузке
leaf
ов в админке вarea
передается текущий модуль.
- Исправлены ошибки invalid argument supplied for foreach в
PXDisplayTypeFilesArray
PXDatabase
, парсер филдов изgetObjectsByFields
вынесен в отдельный публичный методbuildWhereFromArray
- Исправления ошибок логгера
- Исправлено удаление виджетов из контейнера PXDecorativeWidgetsCollection
- Исправлено массовое сохранение параметров типа checkbox для модуля
PP\Module\PropertiesModule
- В
PXAdminTableSimple
добавлен функционал управления рендерингом значений ячеек через callback функции; параметризация атрибутов строк таблицы. - Для модуля
PP\Module\PropertiesModule
добавлена возможность массового сохранения параметров
- Исправлено поведение сессионной авторизации в админке: инвалидация текущей сессии в случае смены IP и в случае отключения активного статуса юзера.
- Исправлена загрузка справочников для listed полей таблиц в админке
- Обновлен CK Editor до версии 4.14
- Обновлены зависимости компонентов symfony до 3.4.
- Добавлен logger сервис в контейнер.
- Все сервисы, тегированные 'logger.handler', добавляются хендлерами logger сервису.
- Добавлены глобальные константы в контейнер как параметры.
- В методе
PXDatabase::getAllLinks()
исправлена работа с кешом - Изменён тип хранения IP адреса в БД с VARCHAR(32) на INET
- Исправлен фильтр по IP в модуле LogAudit, для корректного поиска по IP адресу с типом хранения в БД Postgresql INET
- Изменен механизм получения last insert id в драйвере postgresql.
- Исправлен memory leak в
PP\Lib\PersistentQueue\Job
, воркеры инстанциируются on demand вместо хранения в списке тасков
- PXStorageTypeFilesarray - исправлена ошибка Warning: count(): Parameter must be an array or an object that implements Countable
- Усиление безопасности admin session (httponly, regenerate id после авторизации, secure если https и т.д.)
- Исправлено поведение заголовка X-Real-IP, когда он содержит список из X-Forwarded-For
- Фикс передачи аргумента
PXFileListing::setDecorator
по ссылке.
- Фикс использования non-static calls в DisplayType FilesArray.
- Фикс
PP\Lib\Cache\Driver\Predis::deleteGroup
чтобы вырезал префиксы перед удалением.
PXTreeObjects::__isset
теперь проверяет ключ не только во внутреннем дереве, но и в самом себе. Это исправляет косячное поведение при использованииempty
с магическими геттерами.PP\Lib\Cache\Driver\Predis
теперь используетscan
вместоkeys
для удаления по паттерну.
CompileContainerCommand
все же должен наследоваться отAbstractCommand
из-за деплоя на дев.
Engine
теперь регистрирует себя вPXRegistry
, до начала инициализации приложенияPXApplication
более не хранит инстансEngine
в свойствах и следовательно, он не сериализуется- Добавлена команда
CompileContainerCommand
для генерации контейнера - Контейнер теперь достается из прегенерированного файла, если его нет, то компилируется по новой на каждый запрос
- Удалена legacy-папка
vendor/PEAR
- Переименованы именные конструкторы в
__construct
- Добавлена пачка классов для кастомизации сериализации при работе с драйверами кэшей
- В env-переменной
DATABASE_CACHE
при использовании dsn, можно указать опциюserializator
- Исправление: изменения файла lang.yaml (*.yaml) не сбрасывали Application Cache
- Добавлен новый redis-драйвер для кэширования (
predis
)
- Из
PXDatabase
убран методimportBoolean()
, дублировавший функциональность метода__call()
PXDatabase::clearObjectTypeCache
теперь публичный метод для сброса кэша ручками после комплексного запроса
- Добавлена константа
RUNTIME_PATH
, которая указывает наapp/runtime
. В нее следуют класть файлы, которые должны оставаться между релизами - Логи крон-модуля (
cron.results
иlock/cronrun
) теперь хранятся вapp/runtime
PXApplication::getConfigurationPaths
теперь проверяет пути на существование
- Временный фикс восстановления engine'а из кэша
- Фикс включенного по-умолчанию file cache
- Удалена константа NOT_NULL
- Увеличен размер поля ip в таблице log_audit для хранения ipv6
- Кэширование в
PXApplication
убрано в отдельную фабрикуPP\ApplicationFactory
- В системные триггеры добавлены обработчики событий
onBeforeModuleRun
иonAfterModuleRun
- В
PXRequest
добавлен методgetRequestId()
, возвращающий уникальный идентификатор текущего запроса - В
AbstractEngine
добавлен обработчик десериализации, компилирующий контейнер DI после восстановления engine'а из кэша
- Фикс переменных окружения при
db:migrate:up
.
- Инструменты для дебага,
symfony/var-dumper
иPXErrorReporter
(dev-режим) удалены. Теперь необходимо использовать плагин pp/debug.
- Добавлен вывод select для фильтра, если для атрибута установлено displaytype="DROPDOWN"
- Крон для запуска воркеров очереди теперь может принимать контейнер
если последний реализует
ContainerAwareInterface
. PP\Lib\Engine\AbstractEngine
компилирует контейнер в конструкторе последним шагом.- Добавился метод
PXRequest::getHttpHeader
, который может получить заголовок по имени не учитывая регистр. - Phpdoc для
PP\Lib\Collection::filter
теперь возвращаетstatic
.
- Обновлена версия php до 5.6 - в composer.json прописана platform.php 5.6.31
- Обновлены мажорные версии зависимостей symfony:
symfony/http-foundation
~3.3.0
lock =3.3.10
https://github.com/symfony/http-foundation/blob/master/CHANGELOG.mdsymfony/console
~3.3.0
lock =3.3.10
https://github.com/symfony/console/blob/master/CHANGELOG.mdsymfony/event-dispatcher
~3.3.0
lock =3.3.10
https://github.com/symfony/event-dispatcher/blob/master/CHANGELOG.mdsymfony/yaml
~3.3.0
lock =3.3.10
https://github.com/symfony/yaml/blob/master/CHANGELOG.mdsymfony/var-dumper
~3.3.0
lock =3.3.10
https://github.com/symfony/var-dumper/blob/master/CHANGELOG.mdsymfony/config
~3.3.0
lock =3.3.10
https://github.com/symfony/config/blob/master/CHANGELOG.mdsymfony/dependency-injection
~3.3.0
lock =3.3.10
https://github.com/symfony/dependency-injection/blob/master/CHANGELOG.md
- Добавлена dev зависимость
friendsofphp/php-cs-fixer
^2.7
lock =2.7.1
- yaml parser кидает notice, если встречает не обернутое в кавычки значение, начинающееся с символа
%
. - yaml parser кидает notice, если встречает дублирование в ключах.
- Добавлен вывод select для фильтра, если для атрибута установлено displaytype="DROPDOWN"
- Добавлена возможность указать таймаут подключения для кэш драйвера Redis.
Пример:
redis://127.0.0.1:6379/0?timeout=2.0
, значение по-умолчанию:1.5
.
- Багфикс: REQUEST_URI должен содержать только корректные utf-8 последовательности. В противном случае, отображать 404 страницу.
- Добавлен автоматический отчет после выполнения команд унаследованных от AbstractCommand
- Добавлены стандартные опции для команд:
--mail
или-m
для списка адресов. Опция приоритетнее соответствующих env переменной и property--send-report
или-S
для разрешения отправки авто-отчета
- Добавлена environment переменная PP_COMMAND_REPORT_MAIL со списком e-mail адресов для отправки отчета. Значение переменной приоритетнее аналогичного property.
- Добавлены properties для настройки отчета команд:
SYS_COMMAND_REPORT_MAIL
: список адресов для отправки отчетаSYS_COMMAND_REPORT_FROM
: обратный адресSYS_PROJECT_NAME
: имя проекта
- Redis cache driver fixes
- Багфикс: команда db:migrate:up не передавала флаг не использования кэша (sic!)
- Константа
PPPATH
удалена - Проверка
DB_*
убрана изmaincommon.inc
, функцияEnvLoader::inject
добавлена, и должна быть использована каждый раз когда требуется доступ к environment переменным - Замена
DB_*
на единуюDATABASE_DSN
формата:pgsql://user:web@example.com:port/database?encoding=utf-8
- Параметр
cache
для базы данных может быть указан как вDATABASE_DSN
в виде аргумента query string&cache=file
либо отдельной переменной окружения:DATABASE_CACHE
- Переменная окружения имеет бОльший приоритет чем параметр
cache
вDATABASE_DSN
- Из
application.class.inc
убран код относящийся к плагинуblocks
- В
PXApplication
добавлена функция для подгрузки дополнительных языковых массивов (используется плагиномblocks
вonAfterEngineStart
триггере) AbstractBasicCommand
может быть использована в рамках Docker-билда без базы данных и установленных переменных окруженияBASEPATH/tmp
- deprecated,BASEPATH/app/cache/tmp.*
используется для хранения временных данных- Директория
CACHE_PATH
теперь установлена вBASEPATH/app/cache/tmp.PHP_VERSION.CHARSET
- Логгер
LOGGER_APP
иLOGGER_CRON
по-умолчанию пишут в файлыCACHE_PATH/application.log
иCACHE_PATH/cron.log
соответственно
- MassChangeModule багфикс
- Команда
pp
теперь подключает толькоlibpp/lib/mainadmin.inc
,libpp/lib/mainuser.inc
вместоlibpp/lib/maincommon.inc
и его локальной версии. Последние подключаются внутри, также как и локальныеmainuser.inc
иmainadmin.inc
.vendor/autoload.php
тоже подключается внутри.
- Добавлено поле
sys_meta
к таблицеqueue_job
- Поправлен phpdoc для
PP\Lib\Collection::map
- Если передана переменная окружения
PP_DONT_FORCE_SUDO
, то выключается проверка текущего пользователя - В список директорий для автоматического поиска
XML
-словарей добавленаapp/config
- Экспериментальная поддержка PHP 7.1, переименованы классы:
src/Lib/Auth/Null.php
=>src/Lib/Auth/NullAuth.php
src/Lib/Cache/Driver/Null.php
=>src/Lib/Cache/Driver/NullCache.php
src/Lib/Html/Layout/Null.php
=>src/Lib/Html/Layout/NullLayout.php
- Автоматически-загружаемые
XML
-словари теперь ищутся во всех конфигурационных папках:site/etc/
local/etc/
libpp/etc/
- Глобальная переделка загрузки модулей
- Удалена обработка
helpers
в настройках модуляMassChangeModule
:- Не используется на проектах МегаФона
- Написано очень давно и сейчас больше похоже на очень плохой код
- Если требуется добавлять обработчики для мультиопераций, то просьба переписать (там не много)
- Вшитые обработчики были вынесены в приватные функции
- Рефакторинг rss-модуля:
PXModuleRSSEngine
=>PP\Module\RssEngineModule
PXRssXML
=>PP\Lib\Rss\AbstractRssNode
PXRssChannel
=>PP\Lib\Rss\RssChannel
PXRssItem
=>PP\Lib\Rss\RssItem
- Замена старых генераторов ссылок на
PP\Lib\UrlGenerator\UrlGenerator
- Исправлены пробелы на табы в шаблоне миграции
- Поправлены тесты на
PersistentQueue\Job
- Добавлен
Symfony DI Container
в модули, кроны и команды - Добавлен генератор URL к методам модуля
PP\Lib\UrlGenerator\UrlGenerator
- Удалены следующие методы из класса
PP\Module\AbstractModule
:buildAdminUrl
buildAdminIndexUrl
buildAdminActionUrl
buildAdminPopupUrl
- Пользователям добавлено поле
E-mail
- Крон выполнения фоновых задач отсылает уведомление на почту создателя объекта
queue_job
- Добавлен
DisplayType
JobResult
для форматированного вывода результата воркера - Добавлен объект
JobResult
, который можно получить черезJob
для удобного управления результатом - Убрана попытка получить
WorkerInterface::class
т.к. не 5.6
- Исправлен
PersistentQueue
, раньше он был завязан на МегаФон. Изменился интерфейс и добавились тесты - Добавлен крон для запуска воркеров из
PersistentQueue
- Добавлены параметры БД в
phpunit.xml
иmaincommon.inc
в тестовыйbootstrap.php
- Добавлен метод
Collection::last
- Реализован интерфейс
JsonSerializable
у классаCollection
- Добавлена возможность выводить уведомления (
flash messages
) через сессии - Некорректная работа класса
NLDBDescription
- пустые значения использовались для сборки строки подключения
- Багфикс в ObjectCache
PXContentObjectsInterface
перенесен вPP\Lib\Objects\ContentObjectsInterface
- Сортировка списка миграций перед выполнением
- Убраны ссылки на
PXAbstractPlugin
- Исправлена ошибка обязательного наличия файла
.env
- Добавлена команда
pp db:get-property
- Добавлен новый класс
AbstractBasicCommand
для команд которые не требуют доступа к App/Db - Переименованы команды pp/core:
pp db:get-property
-pp db:property:get
pp db:set-property
-pp db:property:set
pp db:fill-meta
-pp db:fill:meta
pp db:fill-uuid
-pp db:fill:uuid
lib/Cache/*
перенесена в PSR-4src/lib/Cache
ObjectCache
-PP\Lib\Cache\ObjectCache
PXCache*
-PP\Lib\Cache\Driver\*
IPXCache
-PP\Lib\Cache\CacheInterface
PXAbstractCronRun
— deprecated, использоватьPP\Cron\AbstractCron
PXCronRule
— deprecated, использоватьPP\Cron\CronRule
PXAbstractPlugin
— deprecated, использоватьPP\Plugin\AbstractPlugin
NLPGSQLDatabase
— deprecated, использоватьPP\Lib\Database\AbstractSqlDatabase
charcheck
- убран из всех форм, javascript и php кода- Работа с файлом
database.ini
удалена, настройки подключения к базе хранятся в environment - В файле
app/config/commands.yml
больше не нужно перечислять команды из namespacePP\
. Встроенные командыpp/core
автоматически регистрируются. sbin
- директория удалена- Переписаны миграции, используется
pp
интерфейс для работы с миграциямиpp:migrate:*
etc/sql/psql-basesystem.sql
теперь содержит таблицу для миграций- Удалено:
htdocs/js/cookie.js
htdocs/js/forum.js
css/ie6.css
anticheating
- устаревшие драйвера баз данных:
pgsqlcluster
,mysql
,mssql
,sqlite
vendor/CSSMin
vendor/phpdoc
vendor/rels
vendor/simpletest
- Исправлены ошибки при отсутствующих параметрах для модуля
properties
- Рефакторинг - инициализация сессии
- Для старых
assets
удален прямой доступ к файлуproperties.ini
- Добавлена команда для установки параметров из консоли
- Несколько фиксов для поддержки работы плагина
blocks
- Для каждой сущности, необходимо поле sys_uuid. Для генерации значения используется
Ramsey\Uuid\Uuid::uuid4()
- Добавлена подсистема для запуска команд
./vendor/bin/pp
. Список доступных командapp/config/commands.yml
- Оптимизирована работа с
sys_meta
, для работы в админке физическое наличие файлов на файловой системе — не требуется - Конструктор
blockingnumbers
больше не содержит параметров, капча всегда сохраняется в общем кэше - Добавлена функция
property
и модификаторproperty
для доступа к параметрам изSmarty
PXApplication::properties
теперь объектArrayCollection
и имеет область видимостиprotected
PXApplication::langTree
теперь объектArrayCollection
- Исправлен
run
на правильныйexecute
в командах - Небольшой тюнинг интерфейса
- Работа с файлом
properties.ini
удалена, настройки сайта хранятся в базе данных - properties - Рефакторинг Xml классов:
- Убрана поддержка устаревшего расширения
domxml
PXmlAbstract
->PP\Lib\Xml\AbstractXml
PXmlAbstractNode
->PP\Lib\Xml\AbstractXmlNode
PXml
->PP\Lib\Xml\Xml
IPXml
->PP\Lib\Xml\XmlInterface
IPXmlNode
->PP\Lib\Xml\XmlNodeInterface
PXmlErrors
->PP\Lib\Xml\XmlErrors
PXmlSimplexml
->PP\Lib\Xml\SimpleXml
PXmlSimplexmlNode
->PP\Lib\Xml\SimpleXmlNode
- Убрана поддержка устаревшего расширения
- Добавлены классы и миграция для работы с очередями
PP\Lib\PersistentQueue
- Вырезан myconv и связанные с ним методы link
- Убран модуль и триггер форума link
PXEngine
->PP\Lib\Engine\AbstractEngine
PXAdminEngine*
->PP\Lib\Engine\Admin\
- Настоящие сессии в административном интерфейсе, класс сессии доступен через
$engine->getSession()
- Monolog,
PXRegistry::getLogger($logger_name)
, где$logger_name
может быть одной из констант:LOGGER_APP
,LOGGER_CRON
. По-умолчаниюLOGGER_APP
рендерится вsite/var/application.log
,LOGGER_CRON
-site/var/cron.log
- Убрана поддержка PHP версии ниже 5.4
- Убрана поддержка Windows платформ
- Убраны старые варианты авторизации Rambler, Domain, Plain
- PXAuthNull, PXAuthSecure, PXAuthSession перенесены в PSR-4 (src/Lib/Auth)
- auth.ini в качестве названия механизма авторизации теперь требует полный PSR-4 путь к классу (для обратной совместимости - используется маппинг для secure и session вариантов авторизации)
- migrate.php больше не пытается обращаться к datatypes.xml
- Капча при доступе в административный интерфейс (в development-режиме не требует ввода)
- Определение development режима работы app->isDevelopmentMode(), установка режима через properties.ini
ENVIRONMENT=DEVELOPER
class NLAbstractLayout
->abstract PP\Lib\Html\Layout\LayoutAbstract
class PXAdminHTMLLayout
->class PP\Lib\Html\Layout\AdminHtmlLayout
class PXLayoutInterface
->interface PP\Lib\Html\Layout\LayoutInterface
- Версия pp/core отображается только для авторизированных пользователей
- Добавлена константа
APPPATH
и методgetAppPath
в классPXApplication
для ее получения link
- Убрана поддержка
handler
изdatatype.xml
link - Убраны беполезные
handler
link - Убран класс DeprecatedException link
- Замена
PXAbstractModule
наPXModule
link - Замена
PXModuleDescription->getInstance()
наPXModuleDescription->getModule
link - Из
vendor
удалены FPDF, JSON, Recaptcha link - Удален NLHTTPClient link
- Удалены устаревшие функции
_PrepareWMLText
,SortRussianByTitle
,wapUtf8Cyr
,utfDecode
,utfEncode
,array_combine
,__json_encode_koi_k2u
,__json_encode_koi_u2k
,json_encode_koi
,json_decode_koi
link
- Умеренно-хаотичное развитие