Всем привет!
Как всегда, перед новым годом, мы выпускаем очередной релиз. В нём очень много «невидимых» обывателю правок, например рефакторинг кода, исправление небольших архитектурных изъянов (которые не ломают обратную совместимость), документирование кода. Но и нового функционала мы, конечно же, добавили.
Новый компонент Content Security Policy
Компонент реализует добавление HTTP заголовков CSP ко всем ответам InstantCMS. Content Security Policy — это механизм обеспечения безопасности, с помощью которого можно защищаться от атак с внедрением контента, например, межсайтового скриптинга (XSS, cross site scripting). CSP описывает безопасные источники загрузки ресурсов, устанавливает правила использования встроенных стилей, скриптов, а также динамической оценки JavaScript — например, с помощью eval. Загрузка с ресурсов, не входящих в «белый список», блокируется.
Помимо внедрения самого компонента, мы сделали очень много полезных правок: избавились везде от инлайн вызовов JavaScript, например от onclick. В админке все JavaScript вызываются согласно архитектуре. Иными словами, мы добились отсутствия нотисов CSP при максимально включенном режиме. Для script тегов добавлен везде атрибут nonce. По умолчанию CSP HTTP заголовки выключены, мы рекомендуем включать с осторожностью, тестируя в режиме «Только отчёты». Более подробнее описано в документации.
Кастомизация установочного архива InstantCMS
Я уже писал в посте тестирования RC версии, повторюсь кратко.
Начиная с этого релиза вы можете делать свои сборки. В комплекте установщика теперь есть скрипт для кастомной сборки, InstantCMS можно установить без 16 компонентов, что бывает полезно для некоторых разработок. Но это ещё не всё. Вы можете добавлять любое бесплатное дополнение из нашего каталога в сборку, всё так же, используя скрипт.
Для тех кто не хочет использовать скрипт мы сделали отдельную страницу генерации сборок на этом сайте. Она всегда на основе последней версии InstantCMS. В выбор сторонних дополнений в форме мы добавляем сами, помечая проверенные. Сторонние дополнения для сборок будут пополняться. Некоторые дополнения мы добавим сами, на своё усмотрение. Механизм модерации для включения дополнений в этот список мы добавим чуть позже.
Остальные изменения
- Исправлен баг с набором «Участие в группах» компонента «Группы»;
- Исправлен баг с опцией сортировки полей-списков;
- Управление MIME-типами в админке. Все проблемы с ними решены;
- Исправлен баг со сменой языка при ремапе;
- В компонент подписок добавлены опции «Показывать кнопку подписки в списке», «Показывать кнопку подписки в фильтре» и управление позицией показа кнопки;
- Убрана опция «Добавлять номера страниц в тег title при пагинации», вместо неё можно использовать выражение {page} в паттернах;
- Mobile Detect 3.74.3;
- ScssPhp 1.13.0;
- TinyMCE 7.6.0 + исправлены баги;
- Редактор Ace обновлён до версии 1.36.5;
- jQuery UI, CroppeJS, jquery.inputmask, VueJS актуальных версий;
- Минимальная версия для InstantCMS теперь PHP: 7.2.0;
- Вместо cmsUser::goLogin() используйте теперь $this->redirectToLogin() в контроллерах;
- Исправлена XSS в exif параметрах;
- Для механизма кэширования добавлены методы pause() и resume(), таким образом в своих дополнениях вы можете это использовать, если будет необходимо;
- Для ячеек гридов добавлено свойство class_handler, где вы можете назначить функцию обработчик значения для CSS класса;
- Переработан класс cmsUploader;
- В обёртки виджетов теперь передаются полные данные виджета, в своих виджетах вы можете переопределять метод createPositionData();
- Исправлена проблема, когда в админке невозможно было удалить категории;
- Вкладки профилей с опцией «показывать только владельцу профиля», показываются суперадминам тоже;
- Добавлена возможность динамически менять атрибуты тега <html> лайоута шаблона;
- Автоматический механизм Last-Modified — IF_MODIFIED_SINCE, достаточно установить заголовок Last-Modified;
- Исправлена работа поля «Категории контента»;
- Автоспойлер для больших описаний фотографий в фотоальбомах;
- Добавлен опциональный показ кол-ва записей в категориях ТК;
- В опцию «Тип вывода» в связях добавлен пункт «Список в поле»;
- Добавлена поддержка отрицательных масок для конкретного виджета;
- Новый класс cmsResponse для работы с HTTP ответом, функция header теперь не вызывается нигде в коде напрямую, для установки хедеров используйте в контроллерах $this->cms_core->response->setHeader('name', 'value');
- Класс cmsRequest дополнен для работы с HTTP заголовками запроса, с массивом $_SERVER и методом HTTP запроса;
- Опции полей свойств, опции валидации для свойств, фильтры для свойств в админке, поддержка разных файлов email писем об успешной модерации для типов контента;
- События от пользователей, помеченных как удалённые, теперь не выводятся в ленте активности;
- Исправлена ошибка в быстром подборе масок;
- Добавлены хуки: content_category_before_delete, users_profile_before_update_notices;
- Добавлен трейт fieldsParseable для единой обработки полей в ТК, профилях и группах;
- Исправлена фильтрация по скрытым родителям записей ТК;
- Добавлена мультиязычность для кнопки виджета «All news by the author»;
- Исправлено отсутствие языковой константы в уведомлении об оценке материала;
- Тег video теперь может быть пустым в типографе;
- Исправлены некоторые проблемы при работе на Windows-системах;
- Добавлено отображение имени файла в email-письме при отправке формы конструктора форм;
- В трейте formItem теперь можно использовать свойства submit_title, use_default_tool_buttons, json_callback. Трейт имеет режим копирования записи;
- Исправлена работа некоторых WYSIWYG-редакторов в комментариях и на стенах в Firefox;
- В поле «список изображений» добавлен CSS для блока загрузки DnD;
- Опция placeholder для редактора Tiny;
- Для забытых разделов админки добавлен csrf_token;
- Почти вся админка приведена к единому набору иконок;
- Экспериментальная поддержка прав доступа для разделов админки (управление не реализовано, только через БД);
- Единый CSS класс icms-click-select для инпутов, которые должны по клику выделять свой текст;
- Токены через random_bytes;
- Метод $request->getContent() для получения php://input;
- Вкладка формы с полем ошибки HTML валидации теперь становится автоматически активной;
- В манифестах установочных пакетов добавлена возможность указывать минимальную версию PHP и зависимость от модулей PHP, включая номера версий;
- Добавлен метод getMetaHandled в cmsTemplate. Он отдаёт текущие мета параметры;
- Добавлены опции CSS классов для полей в записи и в списке;
- Поддержка виртуальных полей в группах, профилях и виджетах;
- Исправлено отсутствие расширения файла во вложениях из конструктора форм;
- Исправлена работа уведомления в модальном окне конструктора форм;
- Магия с cms_users/model_content и т.п. вынесена в трейт и доступна теперь в том числе и в виджетах;
- Полное наследование в SCSS для дочерних шаблонов, включая внутренний импорт. Zau4man упомянул об этом в своём блоге;
- CSS класс для ссылок icms-action-confirm, наличие которого вместе с атрибутом data-confirm делает переход по ссылке с автоматическим подтверждением;
- Добавлены описания для тегов;
- Аватарка в админке в меню ограничена в размерах;
- Для поля связей «Родитель» добавлена опция вывода только в глубиномере;
- В разделе виджеты и страницы админки добавлен показ подсказки на фантомном виджете с названием страницы, к которой он привязан;
- Добавлен механизм смены автора записи ТК;
- Увеличено кол-во символов для полей SEO;
- Добавлен hookAfterUpdate для полей свойств;
- Исправлена ошибка с валидацией параметров подписок для гостей;
- Добавлен шаблон вывода виджета списка записей для ТК фотоальбомы;
- В админке в списке комментариев добавлена фильтрация по ТК и вывод имени комментируемой записи;
- Исправлено формирования SEO паттернов компонентов при включенной мультиязычности;
- Для TinyMCE добавлены опции «Блочный элемент» (вместо Перевод каретки) и «Поведение новой строки»;
- Для комментариев добавлена опция «Скрывать комментарии удалённых пользователей»;
- Добавлена поддержка мультиязычности для связки Запись ТК -> Группа;
- Убран вызов mysqli->ping() как устаревший и неработающий с php8.2;
- PHPMailer 6.9.3;
- Корректная версия SQL сервера в разделе «Информация о системе»;
- Поддержка переменной окружения ICMS_CONFIG_DIR для пути к директории конфигураций;
- Всё, что лежит в system/config/ теперь можно выносить за корневую директорию;
- Поддержка массового удаления пользователей в админке;
- При удалении виджетов теперь вызывается методы полей $field>delete();
- Классы google_authenticator и idna_convert теперь совместимы с php8.3+;
- Новый класс cmsAutoloader и механизмы автозагрузки;
- Поддержка английского языка для каталога дополнений в админке;
- В компоненте «Авторизация и Регистрация» а также в поле «Защита от спама» добавлена опция выбора конкретной капчи;
- Опция «Показывать капчу после неудачной авторизации» переименована в «Показывать капчу при авторизации», т.е. при включении её, капча будет всегда;
- Переписан механизм установки пакетов дополнений, добавлен класс cmsInstaller для работы с ними;
- Исправлен баг с utf8_general_ci;
- Добавлены фильтры по пользователям для массовой рассылки сообщений;
- Очень много задокументированного кода;
- Много рефакторинга и исправление мелких ошибок.
Кроме всего перечисленного, часть важных изменений мы описали в документации. Вы можете посмотреть историю правок на этой странице. Подробнее об изменениях вы можете узнать, ознакомившись с описаниями всех коммитов с прошлого релиза и взглянуть на закрытые тикеты / пулреквесты.
Дальнейшие планы
Помимо всего прочего, в ближайшее время в комплекте InstantCMS появится Биллинг. Бесплатно. Открыто. r2 передал биллинг мне и было решено интегрировать его в комплект InstantCMS. От этого выиграют все, даже те, кто его покупал, поскольку будет поддержка уже в контексте полной сборки InstantCMS. И да, кому он не нужен, всегда смогут собрать дистрибутив без него, см. выше про сборки. r2 передавал всем поздравления с новым годом вот таким подарком. Надеюсь этот жест будет понят правильно.
Сроки внедрения Биллинга пока не ясны, этот релиз забрал слишком много сил. Однако, хочется сделать побыстрее. Поэтому в ближайшем обновлении (если критических багов в 2.17.0 не будет), полагаю, Биллинг будет в комплекте.
В ближайшее время я постараюсь сделать на этом сайте раздел складчин по просьбам многих участников сообщества. Надеюсь это решит многие проблемы как выбора исполнителей, так и дорогих разработок.
Как установить обновление InstantCMS
Важно! Убедитесь, что сейчас вы используете версию 2.16.3, иначе, обновитесь сначала до неё.
Перед началом обновления обязательно сделайте самостоятельно резервную копию своего сайта и дамп базы данных. Мы не несем никакой ответственности за любые потери данных, произошедшие в результате неправильных действий при обновлении.
- Отключите кеширование в настройках сайта;
- Отключите объединение js и css в настройках сайта;
- Если вы используете свой шаблон и в нем есть файлы, присутствующие в пакете обновления, то обновите их;
- При возникновении «белого экрана» категорически читать здесь;
- Для тех, у кого свой шаблон у нас есть статья как быть, если в обновлении CMS есть изменения в шаблоне, рекомендуем к прочтению.
Если в вашем шаблоне присутствуют JavaScript файлы со своими правками (взяты из /templates/default/js/ или /templates/modern/js/), замените/смержите их из пакета обновления. Не забывайте о сбросе кэша браузера абстрактным счетчиком для посетителей ваших сайтов.
Механизм установки обновлений подробно описан по этой ссылке в документации.
Отключите сторонние компоненты капчи и показ капчи при авторизации, так как для работы в 2.17.0 нужны незначительно доработки со стороны их авторов. Например для smCaptcha требуется сделать примерно так.
system/libs/phpmailer/language/phpmailer.lang-am.php
system/libs/phpmailer/language/phpmailer.lang-ch.php
system/libs/phpmailer/language/phpmailer.lang-rs.php
system/libs/phpmailer/class.phpmailer.php
system/libs/phpmailer/class.pop3.php
system/libs/phpmailer/class.smtp.php
system/libs/scssphp/scss.inc.php
templates/default/controllers/groups/group_closed.tpl.php
templates/modern/controllers/groups/group_closed.tpl.php
Пакет обновления для ручной установки можно скачать по этой ссылке. Демо сайт обновлён.
С наступающим новым годом! Спасибо за сообщения об ошибках. Спасибо, что выбираете InstantCMS.
Поддержите проект
Вы можете стать официальным спонсором или оказать другую поддержку. Вы также здорово поможете, если поставите звезду на GitHub.
Реклама #
dChirkis 15 часов назад #
Ура товарищи.
Спасибо разработчиику
DeeMon 15 часов назад #
Планы интересные. Биллингом от r2 пользуюсь.
Бичукин Андрей 15 часов назад #
Просто замечательно!
Спасибо огромное за ваш труд.
Владимиру за Биллинг большая благодарность. Было бы неплохо ещё и с конструктором сайтов вопрос как-то решить. До сих пор купил и пользуюсь, а сайты эти уже обновить не могу, т.к. выше 2.16 конструктор уже не работает.
С Новым Годом всех!)
fincheck 14 часов назад #
По этому моменту наверно складчиной мотивировать нужно. Так как на одном энтузиазме да ещё и в одно лицо будет это не скоро. А вот то, что будет уверен. Возможно не в данном исполнении, но всё же.
Не сочтите за наглость и ни в коем случае за понты, но моё сугубо пользовательское мнение и я где-то на форуме уже озвучивал данное, что Биллинг(коммерция — для бесплатной cms ой как важно) и Конструктор сайтов, а за одно и Инстайлер) раз такая масть пошла)) должны быть в «коробке». А теперь уж с кастомизацией тем более, нужно кому пожалуйста ставьте. Это же привлечёт больше новых пользователей, которые в коде не в зуб ногой. Тем более сейчас с относительно стандартизированным шаблонам благодаря bootstrap, вроде как это должно облегчить дальнейшее обновление данных компонентов
Abobo 15 часов назад #
Спасибо большое, отличная новость! Поддержка биллинга тоже порадовала.
Zau4man 15 часов назад #
Отличная новость, долгожданный релиз.
Проделан огромный объем работы. Система стала ещё лучше.
Спасибо Fuze и всем, кто тестировал релиз-кандидат.
Artem 15 часов назад #
Спасибо Вам и удачи в развитии сайтов на InstantCMS всем нам! С Наступающими!
Happy 15 часов назад #
Вау, спасибо парни!!! С биллингом это вы круто решили.
Голдман Сакс 15 часов назад #
Спасибо! Шикарное обновление.
Надо бы проверить на совместимость с InstantMaps. Или тоже в коробку? :)
Fuze 14 часов назад #
Я так и подумал, что сказку про золотую рыбку не все читали ;-) Ограничимся Биллингом.
pupsik 12 часов назад #
А что это за биллинг? Магазин какой то?
Fuze 12 часов назад #
Синенькое в тексте — это ссылки :)
instantcms.ru/addons/billing2.html
pupsik 11 часов назад #
Нет, это добро не надо(мне лично). Поддержки Американских сервисов не видно. Ну и ладно с ним.
pupsik 11 часов назад #
Дак я еще не читал текс полностью. Бакапы делаю еще :) Не спеша… Извините за тупой вопрос.
Голдман Сакс 4 часа назад #
Да при чем тут рыбка? InstantMaps давно куплен. И не один. Поэтому о подарках речи нет.
Речь о выживаемости сайта, на котором установлен InstantMaps.
То же касается и InstantVideo. 😉
Fuze 2 часа назад #
Есть. Контекст совершенно другой. Мне чужие компоненты на баланс поддержки — сомнительное удовольствие. Ни и каком InstantMaps, конструкторах тем речи быть не может. Во всяком случае я их поддерживать не планирую.
Голдман Сакс 18 минут назад #
Почему чужие? Это официальные компоненты.
Тем не менее, спасибо за труд! С Наступающим!
fincheck 14 часов назад #
Спасибо, отличные новости.
Happy 14 часов назад #
В одной из тем на форуме мне ответили что бы в профиле выводились поля через виджет вывода полей, нужны виртуальные поля которые будут в релизе. То есть этот виджет теперь работает в профилях?
Fuze 14 часов назад #
Не очень понял про какой вы виджет, но полагаю, что да. Поддержка виртуальных полей в профиле теперь полноценная.
fincheck 14 часов назад #
А что за виртуальные поля, в документации есть про это или где почитать?
Fuze 14 часов назад #
Это поля, которые не создают ячеек в базе данных. Например поле навигации. В классе поля для таких полей есть свойство:
docs.instantcms.ru/dev/forms/field-file
Ruden 14 часов назад #
Спасибо большое Fuze, я считаю что Вы один из самых крутых разработчиков, кого я вообще встречал! Хотелось бы что бы R2 когда нибудь вернулся к Вам в команду! С наступающим Новым Годом Вас и R2 и всю Вашу команду !
Pro AV 14 часов назад #
Отлично, биллинг в коробке это Маст-хэв.
pupsik 13 часов назад #
Хорошая новость, Спасибо. Надо морально подготовится, бакапы сделать и в путь к обновлению.
Я смотрю в этом обновлении никаких файлов удалять не надо?
Fuze 13 часов назад #
Надо, забыл написать, спасибо. Обновил новость. От того, что не удалите, ничего не сломается.
pupsik 12 часов назад #
Да, но и лишнего нам не надо :). Спасибо.
kalikimaka 13 часов назад #
Спасибо
пожертвование отправил
Fuze 13 часов назад #
Спасибо!
Endroid 13 часов назад #
Спасибо за ваш труд и всего сообщества! Много интересного и важного!
Билинг и Складчины — это очень прям СУПЕР! и уверен придаст развитие движку
Нил™ 12 часов назад #
Круто! Я устал читать список изменений. Не представляю, сколько времени и сил требуется, чтобы во всем этом наборе функционала разобраться и тем более, чтобы всё это сделать. r2 тоже привет, тксзть.
pupsik 11 часов назад #
Вот это, очень дельная весч. Очень.
pupsik 9 часов назад #
Количество тем в категории не выводит. Шаблон скопировал с модерн для проверки, опцию в категориях включил.
pupsik 7 часов назад #
Работает. Пардон
Очень много файлов изменено в Модерн. Сложно найти что изменено, если свой шаблон. Ладно там 5-10 файлов а тут, почти весь шаблон надо смотреть.
Zau4man 5 часов назад #
WinMerge в помощь
F_a_R_i_D 3 часа назад #
Благодарю за обновление! Очень много работы проделано.
У кого шаблон Blogger, как прошло обновление? У меня пока нету возможности обновиться)
С наступающим заранее поздравляю всех!
rshabalin 1 час назад #
Постараюсь вечерком обновить !
RSN 3 часа назад #
Спасибо за развитие системы. Донат отправил. Обновление очень крутое). Отдельное спасибо за решение по Биллингу.
Fuze 2 часа назад #
Спасибо!