Релиз v5.18.0
Внутренняя чистка ядра: чат и звонки работают как раньше, код стал проще и надёжнее. · Rebase512 удалён; сервисы не вызывают статическое ядро (guard в smoke-container); App\Core\Format; ядра чата и звонков (DirectChat, CallSessions, CallLinks) — объекты из DI-контейнера, граф 255.
TSOY.CLOUD 5.18.0: release update
- Внутренняя чистка ядра: чат и звонки работают как раньше, код стал проще и надёжнее. - Technical changelog for this version is synced automatically.Читать полностью
- Внутренняя чистка ядра: чат и звонки работают как раньше, код стал проще и надёжнее.
- Technical changelog for this version is synced automatically.
Релиз v5.17.0
Настройки работают как прежде, но устроены заново: внутри стало в шесть раз меньше кода. Исправлено: загруженный логотип, favicon, PWA-иконка и свои звуки уведомлений сохранялись не туда и не показывались — теперь показываются. · Wave E: src/Service/Settings 132 classes -> 20 (one *Section per settings section with view()+save(), SettingsPage, SettingsSaveUseCase, SettingsRoutes, SettingsUi); view data, saves and rendered HTML checked 1:1 by a characterization snapshot; HomeBlocksLayoutCodec::decode replaces the Home copy; core calls via SettingsAdminRepository; SystemAssets/Files/Health modules used dirname(__DIR__) as the project root (uploads went to src/public/system) - fixed, deploy moves stray uploads; DI 365 -> 252.
TSOY.CLOUD 5.17.0: release update
- Настройки работают как прежде, но устроены заново: внутри стало в шесть раз меньше кода. Исправлено: загруженный логотип, favicon, PWA-иконка и свои звуки уведомлений сохранялись не туда и не показывались — теперь показываются. - Technical changelog for thi…Читать полностью
- Настройки работают как прежде, но устроены заново: внутри стало в шесть раз меньше кода. Исправлено: загруженный логотип, favicon, PWA-иконка и свои звуки уведомлений сохранялись не туда и не показывались — теперь показываются.
- Technical changelog for this version is synced automatically.
Релиз v5.16.0
Новая страница «Порталы» для администраторов: способ входа и почтовый домен портала, связи с направлением, политика порталов. «Мои порталы»: войти в ещё один портал по коду или выйти из лишнего. В «Пользователях» человек может состоять в нескольких порталах. Слово «домен» для порталов больше нигде не встречается. · D3: admin_portals (PortalsController -> PortalAdminViewDataUseCase/PortalAdminPostUseCase/MyPortalsUseCase -> PortalRepository -> Portals); admin_domains/admin_groups are aliases; portal policy moved out of Settings into Portals::policy/setPolicy; migration v4 20261004_0004_portal_settings renames settings keys and RBAC admin.domains/bridges -> admin.portals; registration ?portal=CODE (old ?domain= still prefills); DI 362 -> 365.
TSOY.CLOUD 5.16.0: release update
- Новая страница «Порталы» для администраторов: способ входа и почтовый домен портала, связи с направлением, политика порталов. «Мои порталы»: войти в ещё один портал по коду или выйти из лишнего. В «Пользователях» человек может состоять в нескольких порталах…Читать полностью
- Новая страница «Порталы» для администраторов: способ входа и почтовый домен портала, связи с направлением, политика порталов. «Мои порталы»: войти в ещё один портал по коду или выйти из лишнего. В «Пользователях» человек может состоять в нескольких порталах. Слово «домен» для порталов больше нигде не встречается.
- Technical changelog for this version is synced automatically.
Релиз v5.15.0
Новый экран после первого входа: если вы ещё не состоите ни в одном портале, выберите открытый портал, портал вашей компании (если почту подтвердил TSOY ID) или введите код портала. Раньше новичков молча помещали в корневой портал. · D2: onboarding route (PortalOnboardingController -> PortalOnboardingUseCase -> PortalRepository -> Portals) behind a RouterKernel gate for GET pages of accounts without a portal; verified TSOY ID e-mail domain remembered in the session; closed portals answer codes as unknown; migration v3 opens the root portal; global admins/testers always in root.
TSOY.CLOUD 5.15.0: release update
- Новый экран после первого входа: если вы ещё не состоите ни в одном портале, выберите открытый портал, портал вашей компании (если почту подтвердил TSOY ID) или введите код портала. Раньше новичков молча помещали в корневой портал. - Technical changelog for…Читать полностью
- Новый экран после первого входа: если вы ещё не состоите ни в одном портале, выберите открытый портал, портал вашей компании (если почту подтвердил TSOY ID) или введите код портала. Раньше новичков молча помещали в корневой портал.
- Technical changelog for this version is synced automatically.
Релиз v5.14.0
Домены стали порталами: то же разделение людей на пространства, но человек теперь может состоять в нескольких порталах, а связи между порталами бывают двусторонними и односторонними. Боковой чат показывает каналы ваших порталов. Для пользователей всё работает как раньше. · D1: portals/portal_members/portal_links replace domains/domain_members/domain_bridges and users.domain_*; App\Core\Portals decides who sees whom and the admin scope; migration v2 20261003_0002_portals moves data; module migrations (module_migrations), Vault drops write-only domain_id; upgrade from a real 5.12.0 schema verified schema-identical to a fresh install on MySQL 8.4.
TSOY.CLOUD 5.14.0: release update
- Домены стали порталами: то же разделение людей на пространства, но человек теперь может состоять в нескольких порталах, а связи между порталами бывают двусторонними и односторонними. Боковой чат показывает каналы ваших порталов. Для пользователей всё работа…Читать полностью
- Домены стали порталами: то же разделение людей на пространства, но человек теперь может состоять в нескольких порталах, а связи между порталами бывают двусторонними и односторонними. Боковой чат показывает каналы ваших порталов. Для пользователей всё работает как раньше.
- Technical changelog for this version is synced automatically.
Релиз v5.13.0
Внутренняя перестройка: схема базы данных теперь описана в одном месте, новые установки сразу создаются в актуальном виде. Для пользователей ничего не меняется. · D0: SchemaDefinition + module schema() -> SchemaBuilder; MigrationsModule rewritten (install, 5.12.0 ledger rebased onto baseline 20261002_0001_baseline_5_12_0, pending Migration classes, refusal otherwise); v1-v7 chain, MariaDB adapter, upgrade preflight/diagnostics and runtime column checks removed; scripts/schema-status.php; smoke-schema + rewritten live MySQL integration.
TSOY.CLOUD 5.13.0: release update
- Внутренняя перестройка: схема базы данных теперь описана в одном месте, новые установки сразу создаются в актуальном виде. Для пользователей ничего не меняется. - Technical changelog for this version is synced automatically.Читать полностью
- Внутренняя перестройка: схема базы данных теперь описана в одном месте, новые установки сразу создаются в актуальном виде. Для пользователей ничего не меняется.
- Technical changelog for this version is synced automatically.
Релиз v5.12.0
Внутренняя уборка: старые таблицы сообщений и звонков, чьи данные уже перенесены в общие хранилища, удалены вместе с кодом совместимости. Для пользователей ничего не меняется. · Migration v7 20261002_0007_retire_legacy_tables drops messages/message_reactions/board_messages and rtc_* (fail closed on foreign keys, views, triggers); MariaDB adapter allows only those exact drops; compatibility keys and fallbacks removed from the calls core and clients.
TSOY.CLOUD 5.12.0: release update
- Внутренняя уборка: старые таблицы сообщений и звонков, чьи данные уже перенесены в общие хранилища, удалены вместе с кодом совместимости. Для пользователей ничего не меняется. - Technical changelog for this version is synced automatically.Читать полностью
- Внутренняя уборка: старые таблицы сообщений и звонков, чьи данные уже перенесены в общие хранилища, удалены вместе с кодом совместимости. Для пользователей ничего не меняется.
- Technical changelog for this version is synced automatically.
Релиз v5.11.0
Звонки и комнаты по ссылке теперь живут в одном хранилище: одинаковый жизненный цикл для личных звонков, видеокомнат, голоса досок и каналов. История и ссылки на комнаты сохранены, идущие звонки не прерываются. · C3: migration v6 20261002_0006_unified_calls — call_sessions/call_participants/call_signals; direct call ids, room tokens and member ids/keys kept; signals not copied, new ids above the old maximum; CallSessions and CallLinksModule on the one store; old rtc_* read-only.
TSOY.CLOUD 5.11.0: release update
- Звонки и комнаты по ссылке теперь живут в одном хранилище: одинаковый жизненный цикл для личных звонков, видеокомнат, голоса досок и каналов. История и ссылки на комнаты сохранены, идущие звонки не прерываются. - Technical changelog for this version is sync…Читать полностью
- Звонки и комнаты по ссылке теперь живут в одном хранилище: одинаковый жизненный цикл для личных звонков, видеокомнат, голоса досок и каналов. История и ссылки на комнаты сохранены, идущие звонки не прерываются.
- Technical changelog for this version is synced automatically.
Релиз v5.10.4
Внутренняя уборка звонков: голосовые комнаты досок и каналов чата теперь работают через один общий механизм ядра звонков — поведение прежнее, кода меньше. · C2: PageCallRoomRepository port (page/channel call room: open-or-create per owner key, join, leave), ~280 duplicate lines removed from Board and ChannelChat, call_room view no longer reads the calls core; boundary smoke covers CallLinksModule; DI 358->359.
TSOY.CLOUD 5.10.4: release update
- Внутренняя уборка звонков: голосовые комнаты досок и каналов чата теперь работают через один общий механизм ядра звонков — поведение прежнее, кода меньше. - Technical changelog for this version is synced automatically.Читать полностью
- Внутренняя уборка звонков: голосовые комнаты досок и каналов чата теперь работают через один общий механизм ядра звонков — поведение прежнее, кода меньше.
- Technical changelog for this version is synced automatically.
Релиз v5.10.3
Звонки по ссылке стали живее: участники, входы и выходы, соединение видны мгновенно — и у гостей без аккаунта тоже, а фоновых запросов стало втрое меньше. · C1: CallLinksModule write paths ring room members; guests get a server-issued token for their own link:<member> channel (no refresh, polling fallback); Centrifugo link namespace; call-room.js reacts and slows safety-net polling.
TSOY.CLOUD 5.10.3: release update
- Звонки по ссылке стали живее: участники, входы и выходы, соединение видны мгновенно — и у гостей без аккаунта тоже, а фоновых запросов стало втрое меньше. - Technical changelog for this version is synced automatically.Читать полностью
- Звонки по ссылке стали живее: участники, входы и выходы, соединение видны мгновенно — и у гостей без аккаунта тоже, а фоновых запросов стало втрое меньше.
- Technical changelog for this version is synced automatically.
Релиз v5.10.2
Звонки: уведомление о входящем звонке приходит сразу и гаснет на остальных устройствах, когда вы ответили или отклонили; если звонок отменили до ответа — останется «Пропущенный звонок». · B3b: call pushes from CallSessions via ChatDelivery (deferred dispatch), silent close push (data.close) handled by the service worker, missed-call push on end before answer.
TSOY.CLOUD 5.10.2: release update
- Звонки: уведомление о входящем звонке приходит сразу и гаснет на остальных устройствах, когда вы ответили или отклонили; если звонок отменили до ответа — останется «Пропущенный звонок». - Technical changelog for this version is synced automatically.Читать полностью
- Звонки: уведомление о входящем звонке приходит сразу и гаснет на остальных устройствах, когда вы ответили или отклонили; если звонок отменили до ответа — останется «Пропущенный звонок».
- Technical changelog for this version is synced automatically.
Релиз v5.10.1
Колокольчик теперь видит и чаты досок: новое сообщение на доске появляется в уведомлениях со ссылкой на доску, а открытый чат доски сразу отмечает сообщения прочитанными. · B3a: unread across page threads (ContextThreadRepository::unreadForUser), board_api chat_read POST receipt, read doorbell only on change, bell refresh on dock events.
TSOY.CLOUD 5.10.1: release update
- Колокольчик теперь видит и чаты досок: новое сообщение на доске появляется в уведомлениях со ссылкой на доску, а открытый чат доски сразу отмечает сообщения прочитанными. - Technical changelog for this version is synced automatically.Читать полностью
- Колокольчик теперь видит и чаты досок: новое сообщение на доске появляется в уведомлениях со ссылкой на доску, а открытый чат доски сразу отмечает сообщения прочитанными.
- Technical changelog for this version is synced automatically.
Релиз v5.10.0
Чаты и уведомления на одном ядре: чат доски теперь один и тот же в окне доски и в боковой панели; уведомления о новых сообщениях приходят откуда бы ни писали — из основного чата, боковой панели или чата доски. · Wave B2: миграция v5 переносит личные диалоги и чаты досок в единое хранилище chat_channel_* (скрытия, отметка очистки, реакции, прочтения сохраняются; conversations остаётся заголовком диалога; старые таблицы остаются только для чтения). ChatModule работает поверх общего хранилища с прежними формами данных. ContextThreadRepository — порт чата страницы для модулей. ChatDelivery — единая отправка push после ответа; исправлено: личное сообщение из боковой панели не давало push.
TSOY.CLOUD 5.10.0: release update
- Чаты и уведомления на одном ядре: чат доски теперь один и тот же в окне доски и в боковой панели; уведомления о новых сообщениях приходят откуда бы ни писали — из основного чата, боковой панели или чата доски. - Technical changelog for this version is synce…Читать полностью
- Чаты и уведомления на одном ядре: чат доски теперь один и тот же в окне доски и в боковой панели; уведомления о новых сообщениях приходят откуда бы ни писали — из основного чата, боковой панели или чата доски.
- Technical changelog for this version is synced automatically.
Релиз v5.9.9
Внутренняя уборка ядра чата и звонков: чаты и звонки работают как раньше. · Wave B1 (без изменений БД): сняты слои-прослойки чата (ChatCoreService, ChannelChatService, ChatUnifiedService, MainChatPageServiceV2, ChatAction/Manage/PollUseCase), вместо них MainChatApi, ChannelChatApi, MainChatPage; контроллер чата на одной таблице эндпоинтов; views/chat.php и админские чаты больше не грузят данные сами; звонки вынесены из ChatModule в CallSessions; к ядрам чата и звонков ходят только через репозитории (sendDirect для модулей). DI 363→358.
TSOY.CLOUD 5.9.9: release update
- Внутренняя уборка ядра чата и звонков: чаты и звонки работают как раньше. - Technical changelog for this version is synced automatically.Читать полностью
- Внутренняя уборка ядра чата и звонков: чаты и звонки работают как раньше.
- Technical changelog for this version is synced automatically.
Релиз v5.9.8
Игры стали отдельным модулем: работают как раньше, свой пункт в меню и чат комнаты в боковой панели на месте. · Wave A закрыта: src/Module/Games (110 классов движков, сервис, репозиторий, контроллер, DI-провайдеры, views). Чат комнаты через порт ChatContext, ядро чата больше не знает контекстов сервисов. GamesRoomMembers вместо методов AppRuntimeRepository. ModuleTool::sidebar для своего пункта меню. smoke-games-module.php. DI 476→363, маршруты ядра 137→134.
TSOY.CLOUD 5.9.8: release update
- Игры стали отдельным модулем: работают как раньше, свой пункт в меню и чат комнаты в боковой панели на месте. - Technical changelog for this version is synced automatically.Читать полностью
- Игры стали отдельным модулем: работают как раньше, свой пункт в меню и чат комнаты в боковой панели на месте.
- Technical changelog for this version is synced automatically.
Релиз v5.9.7
Доски стали отдельным модулем: работают как раньше, чат доски в боковой панели открывается сам на странице доски. · Wave A, шаг 4: src/Module/Board (BoardStore, BoardRepository, BoardController без фасада-прослойки, views, CSS в public/modules/board). Порты: ChatContext для ядра чата (контекстный чат страницы), canViewFile для доступа к вложениям, флаг canvas у маршрута. Удалён мёртвый код главной (бейджи карточек, toolStat, HomePublicCatalogHelper). DI 487→476, маршруты ядра 140→137.
TSOY.CLOUD 5.9.7: release update
- Доски стали отдельным модулем: работают как раньше, чат доски в боковой панели открывается сам на странице доски. - Technical changelog for this version is synced automatically.Читать полностью
- Доски стали отдельным модулем: работают как раньше, чат доски в боковой панели открывается сам на странице доски.
- Technical changelog for this version is synced automatically.
Релиз v5.9.6
Календарь стал отдельным модулем: работает как раньше, а уведомления и колокольчик берут события дня из него. · Wave A, шаг 3: src/Module/Calendar (CalendarStore, CalendarRepository, CalendarController, use-cases, view, CSS в public/modules/calendar). Новые хуки модулей: capabilities, agendaToday/agendaTodayNew, dashboardCounters. Ядро (уведомления, RBAC, главная, инструменты, дашборд, обслуживание БД) больше не знает календарь. DI 491→487, маршруты ядра 141→140. Деплой: повтор rsync при обрыве SSH.
TSOY.CLOUD 5.9.6: release update
- Календарь стал отдельным модулем: работает как раньше, а уведомления и колокольчик берут события дня из него. - Technical changelog for this version is synced automatically.Читать полностью
- Календарь стал отдельным модулем: работает как раньше, а уведомления и колокольчик берут события дня из него.
- Technical changelog for this version is synced automatically.
Релиз v5.9.5
Менеджер паролей и VPN Vault стали отдельным модулем: всё работает как раньше, но модуль можно отключить или удалить, не затрагивая остальной сайт. · Исправлено: при удалении аккаунта теперь удаляются и его записи паролей и VPN (раньше они оставались в базе). · Wave A step 2: src/Module/Vault (ToolsSecurity moved with history; facade ToolsSecurityService and FeatureFlagsUseCase removed); generic upload contexts (modules declare bucket + root folder); one folder-ensure function. · Module smokes skip when their module is absent; suite green with 0, 1 and 2 modules; scanners skip module templates.
TSOY.CLOUD 5.9.5: release update
- Менеджер паролей и VPN Vault стали отдельным модулем: всё работает как раньше, но модуль можно отключить или удалить, не затрагивая остальной сайт. - Исправлено: при удалении аккаунта теперь удаляются и его записи паролей и VPN (раньше они оставались в базе…Читать полностью
- Менеджер паролей и VPN Vault стали отдельным модулем: всё работает как раньше, но модуль можно отключить или удалить, не затрагивая остальной сайт.
- Исправлено: при удалении аккаунта теперь удаляются и его записи паролей и VPN (раньше они оставались в базе).
- Technical changelog for this version is synced automatically.
Релиз v5.9.4
Сокращатель ссылок стал первым отдельным модулем: он работает как раньше (страница, QR-код, статистика, короткие адреса /s/…), но теперь его можно отключить или удалить, не затрагивая остальной сайт. · Wave A step 1: one route table (app/router/routes.php) + module routes; removed route_caps/contracts/handler_overrides/messenger list, ModernHttpDispatcher, router shims, messenger placeholder, ?schema_check trigger. · Module framework (ModuleInterface/AbstractModule/ModuleTool/ModuleRegistry) and the Shortener module replacing Core ShortenerModule + 5 pass-through layers; smoke-modules.php; suite green with and without the module.
TSOY.CLOUD 5.9.4: release update
- Сокращатель ссылок стал первым отдельным модулем: он работает как раньше (страница, QR-код, статистика, короткие адреса /s/…), но теперь его можно отключить или удалить, не затрагивая остальной сайт. - Technical changelog for this version is synced automati…Читать полностью
- Сокращатель ссылок стал первым отдельным модулем: он работает как раньше (страница, QR-код, статистика, короткие адреса /s/…), но теперь его можно отключить или удалить, не затрагивая остальной сайт.
- Technical changelog for this version is synced automatically.
Релиз v5.9.3
Внутренняя чистка: удалён старый неиспользуемый код (около 2,9 тыс. строк) и два скрипта, которые грузились на каждой странице без пользы — страницы стали чуть легче. · Исправлено: отчёт «неиспользуемые таблицы» в обслуживании БД теперь правильно учитывает таблицы, которые создаются миграциями. · Architecture audit ARCHITECTURE_AUDIT_2026-10-01.md: module (plugin) contract, chat/call core target models, portals instead of domains, waves A-F. · Composer PSR-4 is the only class loader: removed 35 app/*.php bridges, manual loaders, 56 zero-reference methods, 5 unused DI deps, chat-engine/chat-shared-state JS; stale reports moved to docs/archive.
TSOY.CLOUD 5.9.3: release update
- Внутренняя чистка: удалён старый неиспользуемый код (около 2,9 тыс. строк) и два скрипта, которые грузились на каждой странице без пользы — страницы стали чуть легче. - Исправлено: отчёт «неиспользуемые таблицы» в обслуживании БД теперь правильно учитывает …Читать полностью
- Внутренняя чистка: удалён старый неиспользуемый код (около 2,9 тыс. строк) и два скрипта, которые грузились на каждой странице без пользы — страницы стали чуть легче.
- Исправлено: отчёт «неиспользуемые таблицы» в обслуживании БД теперь правильно учитывает таблицы, которые создаются миграциями.
- Technical changelog for this version is synced automatically.
Релиз v5.9.2
Боковой чат: гость в канале теперь один раз указывает имя — оно сохраняется, и сообщения больше не приходят от случайных имён. Над полем видно «Вы пишете как …», имя можно изменить. · Установленное приложение на iPhone: верх экрана больше не тонируется и не размывается, статус-бар в цвет верхней панели. · Channel POST keeps the session lock for guests (sessionSet was a no-op after session_write_close, so guest identity was regenerated per message); new set_guest_name action, guest send requires a chosen name (guest_name_required). · PWA: apple-mobile-web-app-status-bar-style=default, theme-color follows the top bar surface (shell-nav.js syncs with palette).
TSOY.CLOUD 5.9.2: release update
- Боковой чат: гость в канале теперь один раз указывает имя — оно сохраняется, и сообщения больше не приходят от случайных имён. Над полем видно «Вы пишете как …», имя можно изменить. - Установленное приложение на iPhone: верх экрана больше не тонируется и не…Читать полностью
- Боковой чат: гость в канале теперь один раз указывает имя — оно сохраняется, и сообщения больше не приходят от случайных имён. Над полем видно «Вы пишете как …», имя можно изменить.
- Установленное приложение на iPhone: верх экрана больше не тонируется и не размывается, статус-бар в цвет верхней панели.
- Technical changelog for this version is synced automatically.
Релиз v5.9.1
Время в сообщениях больше не наезжает на текст: в облачке только часы и минуты, они встают в конец строки или переносятся ниже, если не помещаются (дата — на плашке дня и в подсказке). Шапка чата и верхняя панель на iPhone больше не размываются Safari. Боковой чат на телефоне: поле ввода прилегает к клавиатуре, шапка не уезжает, время тоже в строке. Кнопка «⋮» в списке диалогов вернулась на телефон. · Meta: float после inline-текста (main + dock), timeOnly(created_short), line-height 1.4 в облачках, вложения дока display block; html overflow hidden под chat-mobile-fullscreen, непрозрачные .msgr-head/.sh-top на телефоне; dock.js syncViewport (visualViewport) + is-kb по фокусу; kebab на touch снова виден.
TSOY.CLOUD 5.9.1: release update
- Время в сообщениях больше не наезжает на текст: в облачке только часы и минуты, они встают в конец строки или переносятся ниже, если не помещаются (дата — на плашке дня и в подсказке). Шапка чата и верхняя панель на iPhone больше не размываются Safari. Боко…Читать полностью
- Время в сообщениях больше не наезжает на текст: в облачке только часы и минуты, они встают в конец строки или переносятся ниже, если не помещаются (дата — на плашке дня и в подсказке). Шапка чата и верхняя панель на iPhone больше не размываются Safari. Боковой чат на телефоне: поле ввода прилегает к клавиатуре, шапка не уезжает, время тоже в строке. Кнопка «⋮» в списке диалогов вернулась на телефон.
- Technical changelog for this version is synced automatically.
Релиз v5.9.0
Чат стал компактнее и ведёт себя как мессенджер: долгое нажатие на диалог открывает меню (Открыть, Закрепить, Профиль, Очистить) вместо предпросмотра ссылки; меню сообщения открывается только по самому облачку, а не по любому месту экрана; время и галочки стоят в строке текста или рядом с реакциями; поиск и кнопка нового диалога в одну строку; на iPhone поле ввода прилегает к клавиатуре без пустой полосы; плашки дат больше не накладываются. · messenger.js: openDlgMenu + long-press/contextmenu на списке, меню сообщения только по .msgr-bubble, chat-mobile-keyboard-open по focus/blur; ui-messenger.css: inline meta (spacer + absolute), meta у реакций, однострочная шапка списка, непрозрачные sticky-даты, плотнее композер.
TSOY.CLOUD 5.9.0: release update
- Чат стал компактнее и ведёт себя как мессенджер: долгое нажатие на диалог открывает меню (Открыть, Закрепить, Профиль, Очистить) вместо предпросмотра ссылки; меню сообщения открывается только по самому облачку, а не по любому месту экрана; время и галочки с…Читать полностью
- Чат стал компактнее и ведёт себя как мессенджер: долгое нажатие на диалог открывает меню (Открыть, Закрепить, Профиль, Очистить) вместо предпросмотра ссылки; меню сообщения открывается только по самому облачку, а не по любому месту экрана; время и галочки стоят в строке текста или рядом с реакциями; поиск и кнопка нового диалога в одну строку; на iPhone поле ввода прилегает к клавиатуре без пустой полосы; плашки дат больше не накладываются.
- Technical changelog for this version is synced automatically.
Релиз v5.8.99
Новые боковое и верхнее меню. Слева: разделы сгруппированы (Основное, Личное, Сервисы, Управление), поиск по разделам (Ctrl+K), счётчик непрочитанных у «Чатов», карточка аккаунта с выходом и переключатель темы; меню сворачивается в узкую полосу иконок. Сверху: название текущего раздела и домен, колокольчик, одно меню «Вид и язык» (тема, палитра, язык, установка приложения) и меню аккаунта. На телефоне то же меню открывается шторкой. Тест WebRTC в настройках теперь проверяет и собственный сервер-ретранслятор. · ShellNavigation (модель меню вне view), partials shell_sidebar/shell_topbar, shell-nav.js (компактный режим, поиск, палитра), ui-shell-nav.css; удалено ~250 мёртвых селекторов старой оболочки (бандл 444→404 КБ, pixel diff ≤0.2%); smoke-shell-nav.php; WebRTC-тест использует TurnRelayModule::ice_servers().
TSOY.CLOUD 5.8.99: release update
- Новые боковое и верхнее меню. Слева: разделы сгруппированы (Основное, Личное, Сервисы, Управление), поиск по разделам (Ctrl+K), счётчик непрочитанных у «Чатов», карточка аккаунта с выходом и переключатель темы; меню сворачивается в узкую полосу иконок. Свер…Читать полностью
- Новые боковое и верхнее меню. Слева: разделы сгруппированы (Основное, Личное, Сервисы, Управление), поиск по разделам (Ctrl+K), счётчик непрочитанных у «Чатов», карточка аккаунта с выходом и переключатель темы; меню сворачивается в узкую полосу иконок. Сверху: название текущего раздела и домен, колокольчик, одно меню «Вид и язык» (тема, палитра, язык, установка приложения) и меню аккаунта. На телефоне то же меню открывается шторкой. Тест WebRTC в настройках теперь проверяет и собственный сервер-ретранслятор.
- Technical changelog for this version is synced automatically.
Релиз v5.8.98
Новый блок создания поста в профиле: одно поле «Что нового?», фото и файлы загружаются сразу с прогрессом (с устройства, вставкой или перетаскиванием), файлы из SkyBox, любую картинку можно сделать обложкой, ссылки, переключатель «Всем / Без гостей», черновик сохраняется. Тот же редактор — для правки поста. Установка сервера-ретранслятора для звонков. · views/partials/post_composer.php + post-composer.js (POST+CSRF post_create/post_update, attach_ordered[], upload context post), старый composer/picker/clipboard код удалён из profile.js; REWRITE_STATUS.md + маркеры + smoke-rewrite-status.php; smoke-post-composer.php; coturn ставится из jammy .deb, скачанных раннером (apt на VPS убивается хостом).
TSOY.CLOUD 5.8.98: release update
- Новый блок создания поста в профиле: одно поле «Что нового?», фото и файлы загружаются сразу с прогрессом (с устройства, вставкой или перетаскиванием), файлы из SkyBox, любую картинку можно сделать обложкой, ссылки, переключатель «Всем / Без гостей», чернов…Читать полностью
- Новый блок создания поста в профиле: одно поле «Что нового?», фото и файлы загружаются сразу с прогрессом (с устройства, вставкой или перетаскиванием), файлы из SkyBox, любую картинку можно сделать обложкой, ссылки, переключатель «Всем / Без гостей», черновик сохраняется. Тот же редактор — для правки поста. Установка сервера-ретранслятора для звонков.
- Technical changelog for this version is synced automatically.
Релиз v5.8.97
Звонки соединяются через мобильные сети и строгий NAT: свой сервер-ретранслятор (TURN), автоматическое переподключение при обрыве; повторный звонок сразу после завершения теперь доходит; в поле ввода сообщения больше нет лишней полосы прокрутки. · coturn (vps-turn.sh, TURN REST credentials через TurnRelayModule), общий модуль negotiation rtc-peer.js для chat-calls.js и call-room.js (одна offer-сторона, ICE restart, stale answer guard), cleanupCall перезапускает incoming poll, autosize textarea без скроллбара, smoke-turn-relay.php.
TSOY.CLOUD 5.8.97: release update
- Звонки соединяются через мобильные сети и строгий NAT: свой сервер-ретранслятор (TURN), автоматическое переподключение при обрыве; повторный звонок сразу после завершения теперь доходит; в поле ввода сообщения больше нет лишней полосы прокрутки. - Technical…Читать полностью
- Звонки соединяются через мобильные сети и строгий NAT: свой сервер-ретранслятор (TURN), автоматическое переподключение при обрыве; повторный звонок сразу после завершения теперь доходит; в поле ввода сообщения больше нет лишней полосы прокрутки.
- Technical changelog for this version is synced automatically.
Релиз v5.8.96
Чаты: открытие диалога быстрее — сервер больше не перебирает весь список ваших диалогов при каждом открытии. · Чаты: отправка и удаление сообщений стали атомарными — счётчики непрочитанных и превью диалога больше не могут разойтись с перепиской при сбое. · ChatModule: conversations_for_user(viewer, onlyId), atomic() для send/delete, удаление реакций при физическом удалении, MESSAGE_MAX_LENGTH; DbModule::useConnection (CLI) и smoke-chat-core.php.
TSOY.CLOUD 5.8.96: release update
- Чаты: открытие диалога быстрее — сервер больше не перебирает весь список ваших диалогов при каждом открытии. - Чаты: отправка и удаление сообщений стали атомарными — счётчики непрочитанных и превью диалога больше не могут разойтись с перепиской при сбое. - …Читать полностью
- Чаты: открытие диалога быстрее — сервер больше не перебирает весь список ваших диалогов при каждом открытии.
- Чаты: отправка и удаление сообщений стали атомарными — счётчики непрочитанных и превью диалога больше не могут разойтись с перепиской при сбое.
- Сообщения ограничены 8000 символов на сервере; при превышении приходит понятная ошибка, файл при этом не загружается впустую.
- Technical changelog for this version is synced automatically.
Релиз v5.8.95
Звонки: новый экран звонка — тёмная сцена, аватар собеседника с пульсацией до ответа, таймер, крупные круглые кнопки с подписями; в видеозвонке видео собеседника на весь экран, своё — в углу. · Входящий звонок на любой странице теперь показывается аккуратной карточкой справа сверху с аватаром и кнопками «Принять» / «Отклонить» вместо всплывающего окна. · Экран звонка: новая разметка #callSheet (id сохранены) и ui-chat-calls.css; входящий — .app-call-toast в app-shell.js, caller_avatar_url в call_incoming_poll; call_room: JS → call-room.js, CSS → ui-call-room.css.
TSOY.CLOUD 5.8.95: release update
- Звонки: новый экран звонка — тёмная сцена, аватар собеседника с пульсацией до ответа, таймер, крупные круглые кнопки с подписями; в видеозвонке видео собеседника на весь экран, своё — в углу. - Входящий звонок на любой странице теперь показывается аккуратно…Читать полностью
- Звонки: новый экран звонка — тёмная сцена, аватар собеседника с пульсацией до ответа, таймер, крупные круглые кнопки с подписями; в видеозвонке видео собеседника на весь экран, своё — в углу.
- Входящий звонок на любой странице теперь показывается аккуратной карточкой справа сверху с аватаром и кнопками «Принять» / «Отклонить» вместо всплывающего окна.
- Комнаты звонков по ссылке переделаны: сцена звонка и список участников с отметкой «в звонке», те же круглые кнопки (микрофон, камера, экран, PiP, ссылка, выйти).
- Technical changelog for this version is synced automatically.
Релиз v5.8.94
Боковой чат: можно прикреплять файлы — скрепкой, вставкой из буфера или перетаскиванием в переписку. · Боковой чат: ответы и пересланные сообщения показываются цитатой, как в основном чате; размеры текста следуют настройке «Плотность бокового чата». · dock.js: upload через r=upload (JSON) и send с file_id; удалены 233 мёртвых селектора .sidebar-chat*; деплой удаляет устаревшие файлы по scripts/deploy/obsolete-files.txt.
TSOY.CLOUD 5.8.94: release update
- Боковой чат: можно прикреплять файлы — скрепкой, вставкой из буфера или перетаскиванием в переписку. - Боковой чат: ответы и пересланные сообщения показываются цитатой, как в основном чате; размеры текста следуют настройке «Плотность бокового чата». - Интер…Читать полностью
- Боковой чат: можно прикреплять файлы — скрепкой, вставкой из буфера или перетаскиванием в переписку.
- Боковой чат: ответы и пересланные сообщения показываются цитатой, как в основном чате; размеры текста следуют настройке «Плотность бокового чата».
- Интерфейс стал легче: удалено около 45 КБ неиспользуемых стилей старого бокового чата.
- Technical changelog for this version is synced automatically.
Релиз v5.8.93
Уведомления: релизы больше не дублируются в ленте событий (раньше каждая версия появлялась дважды — «Система» и «Релиз»). · Автоматические заметки о релизах больше не звенят, не увеличивают счётчик колокольчика и не присылают уведомления браузера. «Новым» считаются только новости, опубликованные администратором. · NotificationRepository: news_updates только по type=admin; recentNews() исключает system-дубль changelog той же версии; NewsAdminRepository шлёт realtime {t:notify,k:news}.
TSOY.CLOUD 5.8.93: release update
- Уведомления: релизы больше не дублируются в ленте событий (раньше каждая версия появлялась дважды — «Система» и «Релиз»). - Автоматические заметки о релизах больше не звенят, не увеличивают счётчик колокольчика и не присылают уведомления браузера. «Новым» с…Читать полностью
- Уведомления: релизы больше не дублируются в ленте событий (раньше каждая версия появлялась дважды — «Система» и «Релиз»).
- Автоматические заметки о релизах больше не звенят, не увеличивают счётчик колокольчика и не присылают уведомления браузера. «Новым» считаются только новости, опубликованные администратором.
- Колокольчик обновляется сразу при публикации новости администратором (через realtime), без ожидания опроса.
- Technical changelog for this version is synced automatically.
Релиз v5.8.92
Чаты: аватарки больше не мигают — список и сообщения обновляются только там, где что-то изменилось. · Реакции, правки и удаления сообщений видны сразу у собеседника, без перезагрузки — и в основном, и в боковом чате. · messenger.js/dock.js: keyed-рендеринг строк, обновление хвоста переписки по событиям reaction/edit/delete/clear и раз в несколько опросов; ui-messenger.css на токенах data-ui-chat-density.
TSOY.CLOUD 5.8.92: release update
- Чаты: аватарки больше не мигают — список и сообщения обновляются только там, где что-то изменилось. - Реакции, правки и удаления сообщений видны сразу у собеседника, без перезагрузки — и в основном, и в боковом чате. - Размеры в основном чате подстраиваются…Читать полностью
- Чаты: аватарки больше не мигают — список и сообщения обновляются только там, где что-то изменилось.
- Реакции, правки и удаления сообщений видны сразу у собеседника, без перезагрузки — и в основном, и в боковом чате.
- Размеры в основном чате подстраиваются под настройку «Плотность чата» и стали компактнее, особенно на телефоне.
- Кнопки отправки — стрелка вверх вместо самолётика.
- Technical changelog for this version is synced automatically.
Релиз v5.8.91
Исправлено: в профиле вместо своей обложки или аватара могла показаться картинка другого пользователя (ошибка кэша приложения). · iPhone: страница больше не приближается при вводе текста — контент не «уезжает» вправо, поле ввода в чате остаётся над клавиатурой. · Service worker: точный поиск в кэше для r=avatar/r=cover, SW_CACHE_REV=mediakey2; поля ввода на телефоне 16px; чат закреплён по visualViewport; убраны двойные max-width/padding у home-shell и pf-main.
TSOY.CLOUD 5.8.91: release update
- Исправлено: в профиле вместо своей обложки или аватара могла показаться картинка другого пользователя (ошибка кэша приложения). - iPhone: страница больше не приближается при вводе текста — контент не «уезжает» вправо, поле ввода в чате остаётся над клавиату…Читать полностью
- Исправлено: в профиле вместо своей обложки или аватара могла показаться картинка другого пользователя (ошибка кэша приложения).
- iPhone: страница больше не приближается при вводе текста — контент не «уезжает» вправо, поле ввода в чате остаётся над клавиатурой.
- Главная и профиль теперь учитывают настройку ширины контента так же, как остальные страницы.
- Technical changelog for this version is synced automatically.
Релиз v5.8.90
Профиль обновлён: яркая обложка, имя под обложкой, вкладки «Посты / Друзья / Страницы / Медиа» в виде переключателя. · Комментарии теперь прямо под постом, без всплывающего окна: последние три видны сразу, остальные по кнопке; отправка по Enter без перезагрузки страницы. · Инлайн-JS профиля (~1080 строк) вынесен в public/assets/js/profile.js; модальные окна комментариев заменены встроенной веткой; маршруты post_comment_create/delete без изменений.
TSOY.CLOUD 5.8.90: release update
- Профиль обновлён: яркая обложка, имя под обложкой, вкладки «Посты / Друзья / Страницы / Медиа» в виде переключателя. - Комментарии теперь прямо под постом, без всплывающего окна: последние три видны сразу, остальные по кнопке; отправка по Enter без перезагр…Читать полностью
- Профиль обновлён: яркая обложка, имя под обложкой, вкладки «Посты / Друзья / Страницы / Медиа» в виде переключателя.
- Комментарии теперь прямо под постом, без всплывающего окна: последние три видны сразу, остальные по кнопке; отправка по Enter без перезагрузки страницы.
- Лайк подсвечивается и анимируется.
- Technical changelog for this version is synced automatically.
Релиз v5.8.89
Основной чат полностью переписан: новый внешний вид, пузыри группируются, даты закреплены сверху, быстрые реакции по клику на сообщение. · Двойной клик по сообщению — ответ с цитатой; стрелка ↑ в пустом поле — правка последнего своего сообщения; черновики сохраняются для каждого чата. · chat.js (~5100 строк) заменён на messenger.js + chat-calls.js; ui-chat*.css заменены на ui-messenger.css + ui-chat-calls.css; эндпоинты и HTTP-граница без изменений.
TSOY.CLOUD 5.8.89: release update
- Основной чат полностью переписан: новый внешний вид, пузыри группируются, даты закреплены сверху, быстрые реакции по клику на сообщение. - Двойной клик по сообщению — ответ с цитатой; стрелка ↑ в пустом поле — правка последнего своего сообщения; черновики с…Читать полностью
- Основной чат полностью переписан: новый внешний вид, пузыри группируются, даты закреплены сверху, быстрые реакции по клику на сообщение.
- Двойной клик по сообщению — ответ с цитатой; стрелка ↑ в пустом поле — правка последнего своего сообщения; черновики сохраняются для каждого чата.
- Файлы: с устройства, из облака, вставкой из буфера или перетаскиванием; голосовые записываются и проигрываются прямо в переписке.
- Выбор нескольких сообщений для пересылки и удаления, поиск по переписке, панель собеседника, удобный режим на телефоне.
- Technical changelog for this version is synced automatically.
Релиз v5.8.88
Новый боковой чат: узкая полоска с недавними чатами справа и панель, которая выезжает поверх страницы (можно закрепить) · Боковой чат: единый список с поиском и фильтрами, «в сети» и «печатает…», реакции, открытие диалога в основном чате, полноэкранный режим на телефоне · public/assets/js/dock.js + ui-dock.css вместо chat-dock.js/state/render/voice и двух CSS; chat_channels_api poll: tail=1 для последних сообщений
TSOY.CLOUD 5.8.88: release update
- Новый боковой чат: узкая полоска с недавними чатами справа и панель, которая выезжает поверх страницы (можно закрепить) - Боковой чат: единый список с поиском и фильтрами, «в сети» и «печатает…», реакции, открытие диалога в основном чате, полноэкранный режи…Читать полностью
- Новый боковой чат: узкая полоска с недавними чатами справа и панель, которая выезжает поверх страницы (можно закрепить)
- Боковой чат: единый список с поиском и фильтрами, «в сети» и «печатает…», реакции, открытие диалога в основном чате, полноэкранный режим на телефоне
- Technical changelog for this version is synced automatically.
Релиз v5.8.87
Вход через TSOY ID окном поверх сайта теперь открывается, а не уводит на отдельную страницу · Исправлена ошибка «Эта ссылка уже использована» при входе и регистрации через TSOY ID · Анимация переходов app-shell пропускает кнопку data-sso-login (двойной старт затирал state); вход с www./http стартует на каноническом https-адресе из redirect_uri
TSOY.CLOUD 5.8.87: release update
- Вход через TSOY ID окном поверх сайта теперь открывается, а не уводит на отдельную страницу - Исправлена ошибка «Эта ссылка уже использована» при входе и регистрации через TSOY ID - Technical changelog for this version is synced automatically.Читать полностью
- Вход через TSOY ID окном поверх сайта теперь открывается, а не уводит на отдельную страницу
- Исправлена ошибка «Эта ссылка уже использована» при входе и регистрации через TSOY ID
- Technical changelog for this version is synced automatically.
Релиз v5.8.86
Чат: «в сети» и «был(а) N минут назад», «печатает…» в шапке, списке диалогов и ленте · Чат: сообщения собраны в группы с «хвостиком», время и галочки внутри пузыря, анимация появления, новый фон ленты · Маршрут chat_live (POST+CSRF JSON): пульс присутствия и «печатает» на маркер-файлах storage/chat-live, realtime-событие {t:live}
TSOY.CLOUD 5.8.86: release update
- Чат: «в сети» и «был(а) N минут назад», «печатает…» в шапке, списке диалогов и ленте - Чат: сообщения собраны в группы с «хвостиком», время и галочки внутри пузыря, анимация появления, новый фон ленты - Technical changelog for this version is synced automat…Читать полностью
- Чат: «в сети» и «был(а) N минут назад», «печатает…» в шапке, списке диалогов и ленте
- Чат: сообщения собраны в группы с «хвостиком», время и галочки внутри пузыря, анимация появления, новый фон ленты
- Technical changelog for this version is synced automatically.
Релиз v5.8.85
Настройки → «Вход через TSOY ID»: подключение по ссылке установки, смена ключей, проверка связи и список привязанных учётных записей · Маршруты admin_sso (GET) и admin_sso_action (POST+CSRF), только global_admin; SsoAdminService + SsoSetupUseCase поверх SsoKitRepository
TSOY.CLOUD 5.8.85: release update
- Настройки → «Вход через TSOY ID»: подключение по ссылке установки, смена ключей, проверка связи и список привязанных учётных записей - Technical changelog for this version is synced automatically.Читать полностью
- Настройки → «Вход через TSOY ID»: подключение по ссылке установки, смена ключей, проверка связи и список привязанных учётных записей
- Technical changelog for this version is synced automatically.
Релиз v5.8.84
Вход через TSOY ID (включается после настройки SSO на сервере) · Мгновенные уведомления чата через Centrifugo с запасным опросом · Миграция v4 sso_identities, мост src/Service/Sso, публичная поверхность /sso/*.php · RealtimeModule + realtime.js, маршрут realtime_token
TSOY.CLOUD 5.8.84: release update
- Вход через TSOY ID (включается после настройки SSO на сервере) - Мгновенные уведомления чата через Centrifugo с запасным опросом - Исправления вёрстки и поведения после полного обхода страниц - Technical changelog for this version is synced automatically.Читать полностью
- Вход через TSOY ID (включается после настройки SSO на сервере)
- Мгновенные уведомления чата через Centrifugo с запасным опросом
- Исправления вёрстки и поведения после полного обхода страниц
- Technical changelog for this version is synced automatically.
Релиз v5.8.83
Обновлены новости, уведомления и страница О проекте. · Добавлен блок проверки обновления с понятным сообщением при ошибке. · Read-only upgrade preflight; fixed public 503 codes; bounded server causes and plain500 renderer fallback. · Frozen migrations v1-v3 unchanged. Dual-populated domain data requires separate recovery; live MySQL and device acceptance remain open.
TAJELO 5.8.83
Обновлены страницы новостей, уведомлений и проекта. Добавлена проверка обновления и понятный экран при его остановке.
Релиз v5.8.79
Исправление мобильных чатов: поле ввода в диалоге остаётся видимым над клавиатурой. · public/css/ui-chat.css: mobile fullscreen chat pane now uses visualViewport height variables instead of fixed 100dvh; smoke chat contract updated; APP_VERSION bumped to 5.8.79.
TSOY.CLOUD 5.8.79: release update
- Исправление мобильных чатов: поле ввода в диалоге остаётся видимым над клавиатурой. - Technical changelog for this version is synced automatically.Читать полностью
- Исправление мобильных чатов: поле ввода в диалоге остаётся видимым над клавиатурой.
- Technical changelog for this version is synced automatically.
Релиз v5.8.78
Очистка проекта: удалены неактуальные ветки старого фронтенда чатов. · Removed obsolete main chat runtime branches chat-surfaces.js/chat-main-v3 and unused ChatUnifiedV4 prototype; smoke suite passed; APP_VERSION bumped to 5.8.78.
TSOY.CLOUD 5.8.78: release update
- Очистка проекта: удалены неактуальные ветки старого фронтенда чатов. - Technical changelog for this version is synced automatically.Читать полностью
- Очистка проекта: удалены неактуальные ветки старого фронтенда чатов.
- Technical changelog for this version is synced automatically.
Релиз v5.8.76
Release v5.8.76 is prepared and ready for update deployment. · Release archive assembled via canonical cross-platform builder scripts/release-builder.php. · Requirements, release-rules, lint and smoke checks were executed before packaging.
TSOY.CLOUD 5.8.76: release update
- Release v5.8.76 is prepared and ready for update deployment. - Technical changelog for this version is synced automatically.Читать полностью
- Release v5.8.76 is prepared and ready for update deployment.
- Technical changelog for this version is synced automatically.
Релиз v5.8.75
Исправлен мобильный экран чатов: нижнее меню возвращено на список, контекстное меню диалогов работает по долгому нажатию и правому клику; боковой чат получил мобильную кнопку закрытия и визуальный polish. · Chat frontend polish: mobile bottom nav enabled for main chat list and hidden for active thread; V2 dialog context actions restored with direct toggle_pin; dock mobile close control and ui-chat-dock-polish.css added; APP_VERSION bumped.
TSOY.CLOUD 5.8.75: release update
- Исправлен мобильный экран чатов: нижнее меню возвращено на список, контекстное меню диалогов работает по долгому нажатию и правому клику; боковой чат получил мобильную кнопку закрытия и визуальный polish. - Technical changelog for this version is synced aut…Читать полностью
- Исправлен мобильный экран чатов: нижнее меню возвращено на список, контекстное меню диалогов работает по долгому нажатию и правому клику; боковой чат получил мобильную кнопку закрытия и визуальный polish.
- Technical changelog for this version is synced automatically.
Релиз v5.8.74
Групповые чаты временно отключены: старый кривой механизм убран из основного чата до новой реализации с нуля. · Main chat group-flow disabled: removed group UI from views/chat.php, disabled chat-surfaces/main-v3 load, group API/actions now return group_chat_disabled, direct chat smoke suite passed.
TSOY.CLOUD 5.8.74: release update
- Групповые чаты временно отключены: старый кривой механизм убран из основного чата до новой реализации с нуля. - Technical changelog for this version is synced automatically.Читать полностью
- Групповые чаты временно отключены: старый кривой механизм убран из основного чата до новой реализации с нуля.
- Technical changelog for this version is synced automatically.
Релиз v5.8.71
Чат: исправлены «прыжки» групповых чатов в списке диалогов при опросе сервера. · Чат: добавлена видимая кнопка действий (⋯) на каждом диалоге — открывает меню «Открыть / Закрепить / Управление группой». · public/assets/js/chat-surfaces.js: applyBootstrap/updatePrivateEntriesFromBootstrap делают merge вместо replace через mergeGroups+mergeDirects; preserveLastMessageFields сохраняет last_message_at/id/body при пустых payload; mergeGroups сохраняет активную группу при отсутствии в bootstrap. · public/assets/js/chat-surfaces.js: renderUnifiedList переписан на DOM-diff (entrySignature + createEntryNode + refreshEntryNode + insertBefore/remove) вместо полного innerHTML wipe; стабильная сортировка с tiebreakers по last_message_id → unread → title → kind → id.
TSOY.CLOUD 5.8.71: release update
- Чат: исправлены «прыжки» групповых чатов в списке диалогов при опросе сервера. - Чат: добавлена видимая кнопка действий (⋯) на каждом диалоге — открывает меню «Открыть / Закрепить / Управление группой». - Чат: пункт «Управление группой» теперь показывается …Читать полностью
- Чат: исправлены «прыжки» групповых чатов в списке диалогов при опросе сервера.
- Чат: добавлена видимая кнопка действий (⋯) на каждом диалоге — открывает меню «Открыть / Закрепить / Управление группой».
- Чат: пункт «Управление группой» теперь показывается только владельцам и админам группы.
- Чат: визуальное обновление — мягкие пузыри сообщений, акцентный градиент для своих сообщений, glass-эффекты в шапке и поле ввода.
- Настройки: визуальное обновление — модернизированные карточки, sticky-панель сохранения, аккуратные переключатели и поля.
- Профиль: визуальное обновление страницы редактирования — новый header с обложкой и аватаром, единый стиль карточек.
- Technical changelog for this version is synced automatically.
Релиз v5.8.67
Release v5.8.67 is prepared and ready for update deployment. · Release archive assembled via canonical cross-platform builder scripts/release-builder.php. · Pre-release checks were skipped by --skip-checks.
TSOY.CLOUD 5.8.67: release update
- Release v5.8.67 is prepared and ready for update deployment. - Technical changelog for this version is synced automatically.Читать полностью
- Release v5.8.67 is prepared and ready for update deployment.
- Technical changelog for this version is synced automatically.
Релиз v5.8.66
Release v5.8.66 is prepared and ready for update deployment. · Release archive assembled via canonical cross-platform builder scripts/release-builder.php. · Pre-release checks were skipped by --skip-checks.
TSOY.CLOUD 5.8.66: release update
- Release v5.8.66 is prepared and ready for update deployment. - Technical changelog for this version is synced automatically.Читать полностью
- Release v5.8.66 is prepared and ready for update deployment.
- Technical changelog for this version is synced automatically.
Релиз v5.8.65
Release v5.8.65 is prepared and ready for update deployment. · Release archive assembled via canonical cross-platform builder scripts/release-builder.php. · Pre-release checks were skipped by --skip-checks.
TSOY.CLOUD 5.8.65: release update
- Release v5.8.65 is prepared and ready for update deployment. - Technical changelog for this version is synced automatically.Читать полностью
- Release v5.8.65 is prepared and ready for update deployment.
- Technical changelog for this version is synced automatically.
Релиз v5.8.64
Техническое обновление: завершено разделение всех крупных контроллеров на UseCase-механизмы согласно плану модернизации P2. · Decomposed ChatCoreController, CloudContentController, and ToolsLinksBoardController into separate UseCase classes. · Finished Phase P2 (Heavy controller decomposition) from ROADMAP.md.
TSOY.CLOUD 5.8.64: release update
- Release v5.8.64 is prepared and ready for update deployment. - Technical changelog for this version is synced automatically.Читать полностью
- Release v5.8.64 is prepared and ready for update deployment.
- Technical changelog for this version is synced automatically.
Релиз v5.8.63
Release v5.8.63 is prepared and ready for update deployment. · Release archive assembled via canonical cross-platform builder scripts/release-builder.php. · Pre-release checks were skipped by --skip-checks.
TSOY.CLOUD 5.8.63: release update
- Release v5.8.63 is prepared and ready for update deployment. - Technical changelog for this version is synced automatically.Читать полностью
- Release v5.8.63 is prepared and ready for update deployment.
- Technical changelog for this version is synced automatically.
Релиз v5.8.62
Release v5.8.62 is prepared and ready for update deployment. · Release archive assembled via canonical cross-platform builder scripts/release-builder.php. · Pre-release checks were skipped by --skip-checks.
TSOY.CLOUD 5.8.62: release update
- Release v5.8.62 is prepared and ready for update deployment. - Technical changelog for this version is synced automatically.Читать полностью
- Release v5.8.62 is prepared and ready for update deployment.
- Technical changelog for this version is synced automatically.
Релиз v5.8.52
Чаты разделены визуально и логически: основной чат теперь явно обозначен как полноформатный мессенджер, а правый dock — как отдельный боковой чат. · Создание групповой беседы из основного чата больше не должно уводить пользователя в правую узкую панель: группа открывается в основном полотне чата. · views/chat.php: добавлены явные термины `Основной чат`, group-aware подсказки, обновлён modal создания групп и bootstrap `currentChannelId`. · views/layout.php: правый dock переименован в `Боковой чат`, переработан create-panel и подписи сценариев `сбоку`.
Релиз v5.8.51
Hotfix стабильности: устранены предупреждения рендера layout и связанные сбои отображения после обновления. · Обновление не меняет пользовательские сценарии и настройки, только исправляет внутреннюю ошибку вывода. · views/layout.php: добавлены жёсткие string-дефолты для `site_name/site_header_name/site_footer/site_logo_path/site_favicon_path/site_pwa_icon_path` перед использованием в шаблоне. · app/router/kernel.php (`router_emit_response`): добавлена проверка `headers_sent()` перед `http_response_code()` и отправкой headers, чтобы исключить warning `Cannot set response code - headers already sent`.
TSOY.CLOUD 5.8.51: hotfix layout/router (устранены warnings)
- Исправлен warning `Undefined variable ` в layout: значения `site_*` теперь всегда инициализируются безопасными строковыми дефолтами. - Исправлен warning `Cannot set response code - headers already sent`: роутер проверяет `headers_sent()` перед установкой HT…Читать полностью
- Исправлен warning `Undefined variable ` в layout: значения `site_*` теперь всегда инициализируются безопасными строковыми дефолтами.
- Исправлен warning `Cannot set response code - headers already sent`: роутер проверяет `headers_sent()` перед установкой HTTP-кода и заголовков.
- Устранён каскадный эффект ошибок рендера после раннего вывода head/layout.
- Выпущен hotfix-релиз 5.8.51.
Релиз v5.8.50
Hotfix релиз: устранено критичное падение старта приложения после обновления роутера. · Обновление устанавливается без изменений пользовательских настроек, маршрутов и данных. · app/router/routes.php: исправлена нормализация handler-overrides для root-route `''` (пустой route id больше не отбрасывается). · app/router/route_handler_overrides.php: добавлен явный override `'' => 'public_auth'` для полной совместимости с `route_caps`.
TSOY.CLOUD 5.8.50: hotfix релиз роутера (исправлен bootstrap-fatal)
- Исправлен критичный startup-fatal `Missing route handler overrides`, проявившийся после выноса route-overrides в конфиг. - В overrides добавлен root-маршрут (`''`), а загрузчик роутов больше не теряет пустой route id при нормализации. - Сообщение диагностик…Читать полностью
- Исправлен критичный startup-fatal `Missing route handler overrides`, проявившийся после выноса route-overrides в конфиг.
- В overrides добавлен root-маршрут (`''`), а загрузчик роутов больше не теряет пустой route id при нормализации.
- Сообщение диагностики для пропущенных маршрутов улучшено: root теперь явно обозначается как `<root>`.
- Выпущен обновлённый релизный пакет версии 5.8.50.
Релиз v5.8.49
Сборка релиза стала стабильнее: маршрутное ядро переведено на более прозрачную модульную схему диспетчеризации. · Обновлены встроенные релизные данные: новая версия корректно отображается в системной информации и новостях после обновления. · app/router/handlers/settings_admin_legacy.php: полностью вынесена ветка `settings/admin_settings/settings_admin_*` из legacy-switch, сохранено поведение 1:1. · app/router/kernel.php: `router_dispatch_handler()` переведён на декларативный mapping (`handler -> entrypoint`), удалены промежуточные `router_dispatch_*` обёртки; добавлен лог compatibility-fallback при обращении к legacy.
TSOY.CLOUD 5.8.49: модульный роутер (техрелиз) и стабильная сборка релизов
- Выполнен следующий этап рефакторинга роутинга: крупные settings-ветки вынесены из legacy-switch в модульный handler без изменения публичных URL и контрактов. - Диспетчеризация handler-ов переведена на декларативный mapping (`handler -> entrypoint`), что упр…Читать полностью
- Выполнен следующий этап рефакторинга роутинга: крупные settings-ветки вынесены из legacy-switch в модульный handler без изменения публичных URL и контрактов.
- Диспетчеризация handler-ов переведена на декларативный mapping (`handler -> entrypoint`), что упростило ядро и снизило риск регрессий при следующих выносах.
- Routing-конфигурация (aliases и handler-overrides) вынесена в отдельные файлы, добавлена встроенная self-check валидация покрытия маршрутов.
- Выпущен новый релизный пакет версии 5.8.49.
Релиз v5.8.48
Мобильная шапка: устранён плавающий верхний отступ, topbar снова корректно прижат к верхней кромке экрана. · Уведомления: открытие страницы по колокольчику ускорено; пропали заметные фризы при переходе. · views/layout.php + views/partials/head.php: удалены критичные CSS-зависимости от `:has(...)`; добавлены shell-hooks `data-shell-has-topbar` и `data-shell-canvas-route`, исправлен safe-area offset на mobile. · app/notifications.php: unread-счётчик переведён на fast-path по `conversations.u1_unread_count/u2_unread_count` с fallback на legacy подсчёт по `messages`.
TSOY.CLOUD 5.8.48: анти-лаг проход интерфейса, мобильная шапка и ускорение уведомлений
- Исправлено смещение верхнего меню на телефонах: мобильная шапка снова прижата к верху экрана без лишнего safe-area зазора. - Устранён лаг при открытии уведомлений: переход по колокольчику стал заметно быстрее. - Доработан мобильный мессенджер: при сбоях asy…Читать полностью
- Исправлено смещение верхнего меню на телефонах: мобильная шапка снова прижата к верху экрана без лишнего safe-area зазора.
- Устранён лаг при открытии уведомлений: переход по колокольчику стал заметно быстрее.
- Доработан мобильный мессенджер: при сбоях async-открытия диалога теперь нет пустого экрана, сохраняется корректный fallback на список.
- Проведён гибридный anti-lag полиш core-экранов: снижены тяжёлые анимации/blur-эффекты на мобильных, улучшена отзывчивость UI.
Релиз v5.8.45
Чаты: при открытии диалога фокус теперь стабильно ставится на последние сообщения, включая мобильный браузер и PWA. · Чаты: индикатор доставки/прочтения у исходящих сообщений перенесён в строку метаданных сразу после времени. · views/chat.php: добавлены `focusLatestMessages()` и `historyLoadEnabled` для безопасного initial auto-scroll к низу без случайной подгрузки истории в момент открытия диалога. · views/chat.php: `.msg-read-state` переведён из absolute-overlay в inline-мету; рендер чеков синхронизирован в PHP/JS-билдерах сообщений.
TSOY.CLOUD 5.8.45: стабильность чатов и PWA-синхронизация
- При открытии чата теперь гарантирован фокус на последних сообщениях, в том числе на телефонах и в PWA. - Индикатор прочтения у исходящих сообщений перенесён в строку времени, чтобы не конфликтовать с кнопкой меню сообщения. - Исправлен запуск эмодзи-пикера …Читать полностью
- При открытии чата теперь гарантирован фокус на последних сообщениях, в том числе на телефонах и в PWA.
- Индикатор прочтения у исходящих сообщений перенесён в строку времени, чтобы не конфликтовать с кнопкой меню сообщения.
- Исправлен запуск эмодзи-пикера и улучшена скрепка на мобильных; добавлен индикатор состояния синхронизации (онлайн/офлайн/восстановление).
Релиз v5.8.44
VPN Vault: окно создания записи свёрнуто по умолчанию и открывается только по кнопке «Добавить запись», чтобы не перегружать интерфейс. · VPN Vault: сохранён пошаговый режим 1→2→3 с понятной навигацией для новичков при создании VPN-записи. · views/vpn.php: подтверждён wizard-поток (`create_step`) и collapsible create-panel через `createExpanded`, с сохранением шага при POST-валидации. · views/vpn.php: добавлен структурированный рендер reveal-полей (`$vpnRevealedRows`, `$vpnSecretFieldLabels`, обработка `raw` JSON) для человеко-понятного вывода секрета.
Релиз v5.8.43
Менеджер паролей: добавлен отдельный тип записи «Сервис» для сервисных кабинетов (например, кабинеты оператора связи). · Формы создания/редактирования стали типо-зависимыми: показываются только релевантные поля для выбранного типа записи. · app/passwords.php: расширена модель `pm_items` полями `phone_contract_holder`, `phone_contract_at`, `phone_last_activity_at`, `phone_keepalive_days`; добавлены нормализаторы и серверная валидация интервалов. · app/passwords.php: внедрена серверная типо-зависимая очистка мобильных метаданных (оператор/тариф/договорные поля хранятся только для `phone|service`).
Релиз v5.8.42
Менеджер паролей: добавлен быстрый импорт из буфера обмена и авторазбор вставленного текста (URL, email, телефон, user:pass, login/password, vpn://). · Менеджер паролей: форма создания стала удобнее для новичков — шаги, пресеты, прогресс заполнения и генератор/оценка пароля. · app/passwords.php: внедрены `pm_phone_normalize()`, расширенные поля телефона (`phone_country`, `phone_operator`, `phone_plan`, `phone_comment`) и фильтры `phone_value/phone_usage` в `pm_items_list_for_user(...)`. · app/passwords.php: добавлена `pm_phone_usage_map_for_user(...)` для построения связей по номеру между сервисами в пределах пользователя.
Релиз v5.8.41
VPN Vault: добавлено управление Amnezia Premium из интерфейса — можно хранить ключ `vpn://...`, видеть срок действия и статус. · VPN Vault: доступы к записи теперь управляются без перезагрузки страницы (выдача, изменение прав, удаление доступа). · app/vpn.php + index.php: добавлена обработка `amnezia_link` с валидацией формата `vpn://...` и включением в зашифрованный secret payload. · index.php (`case vpn` / `case vpn_api`): интегрированы permission-aware операции для shared-записей и API-действия `share_add`, `share_perm`, `share_remove`.
Релиз v5.8.40
Доска: кнопка «Создать доску» в форме выровнена по полям и больше не «висит» выше строки контролов. · Настройки: нижний блок сохранения стал компактнее и перестал визуально раздуваться на широких экранах. · views/board_hub.php: для action-колонки добавлен выравнивающий spacer-label и минимальная ширина, чтобы кнопка была в одной оптической линии с input/select. · views/admin_settings.php: save-bar переведён на grid-layout (`admin-settings-savebar-meta`), уменьшены отступы/высота, обновлена адаптивная логика для мобильных.
Релиз v5.8.39
Доска: форма создания на странице инструмента выровнена по одной линии, без визуального «скачка» по вертикали. · Поля «Доступ» и «Публичность» получили одинаковую высоту и ширину, интерфейс стал ровнее и читаемее. · views/board_hub.php: сетка формы переведена на верхнее выравнивание (`align-items-start`) и унифицирована высота контролов (`.form-control/.form-select` + `.board-create-submit`). · views/board_hub.php: добавлены классы `board-create-form`, `board-create-col-title`, `board-create-col-option`, `board-create-submit` и медиаправила для согласованной ширины колонок.
Релиз v5.8.38
PWA на мобильных стал стабильнее: вложения снова корректно открываются через единый viewer без конфликтов с fallback-переходами. · Исправлено «залипание» серого фона после закрытия модалок/viewer тапом вне окна на телефонах. · views/partials/scripts.php: добавлен глобальный cleanup modal/offcanvas backdrop-артефактов (`hide/hidden/pageshow/focus`) и исключён перехват `.js-open-viewer` ссылок в standalone file-viewer interceptor. · public/assets/js/viewer.js: обработка touch/click переработана с безопасным fallback (не блокирует обычную ссылку, если modal viewer не открылся), добавлена дополнительная очистка backdrop при hide.
Релиз v5.8.34
Доска: интерфейс инструментов переработан в более чистую и интуитивную панель с логической группировкой. · Доска: добавлен встроенный чат участников с поддержкой текстовых сообщений и аудио-сообщений с микрофона. · views/board_canvas.php: обновлены layout/CSS панели инструментов, добавлен chat-panel с long-poll, UI/логика записи аудио через `MediaRecorder`, кнопка `btnUndo` и вызов `board_api&action=undo`. · index.php (`case board_api`): добавлены chat-экшены (`chat_all`, `chat_poll`, `chat_send`), экшен `undo`, и корректный `can_upload` через `upload_policy_check(...)`.
TSOY.CLOUD 5.8.34: обновлённая доска, чат с аудио и Undo
- Интерфейс инструментов доски переработан: добавлены логические группы и более удобная панель. - В доске появился встроенный чат участников с поддержкой аудио-сообщений. - Вложения чата доски открываются через единый viewer, плюс добавлена отмена действия: к…Читать полностью
- Интерфейс инструментов доски переработан: добавлены логические группы и более удобная панель.
- В доске появился встроенный чат участников с поддержкой аудио-сообщений.
- Вложения чата доски открываются через единый viewer, плюс добавлена отмена действия: кнопка «Назад» и `Ctrl/Cmd+Z`.
Релиз v5.8.33
Профиль: обложка снова отображается со скруглёнными углами, включая мобильную версию. · Профиль: шапка переработана по отступам — логин `@username` больше не наезжает на аватар и имя. · app/migrations.php + app/users.php: добавлено поле `users.avatar_shape` (`round|square`), нормализация значения и поддержка в `USER_SELECT_COLUMNS`/`user_update_profile_full()`. · index.php + app/auth.php + views/layout.php: `avatar_shape` интегрирован в сохранение профиля и сессионный снимок активного профиля.
TSOY.CLOUD 5.8.33: улучшенная шапка профиля и выбор формы аватарки
- Профильная обложка снова скругляется корректно, включая мобильный интерфейс. - Исправлены отступы шапки профиля: логин больше не пересекается с аватаром/именем. - В настройках добавлен выбор формы аватарки (круг/квадрат) с сохранением в профиль и live-предп…Читать полностью
- Профильная обложка снова скругляется корректно, включая мобильный интерфейс.
- Исправлены отступы шапки профиля: логин больше не пересекается с аватаром/именем.
- В настройках добавлен выбор формы аватарки (круг/квадрат) с сохранением в профиль и live-предпросмотром.
Релиз v5.8.31
Чаты: облачки сообщений возвращены к прежнему компактному виду, как в предыдущем интерфейсе. · Чаты: у исходящих сообщений индикатор доставки/прочтения снова отображается в правом верхнем круглом бейдже (как раньше). · views/chat.php: для `.msg-bubble` возвращена компактная геометрия (`width: fit-content`), снижена «тяжесть» тени и скорректированы радиусы своих/чужих bubble. · views/chat.php: `.msg-meta` переведён на single-line layout; добавлена обрезка длинного имени отправителя без переноса времени.
TSOY.CLOUD 5.8.31: возврат классического вида bubble в чатах
- В чатах возвращён прежний компактный вид облачков сообщений, ближе к историческому интерфейсу. - Для исходящих сообщений индикатор доставки/прочтения снова показывается в правом верхнем круглом бейдже. - Подровнены плотности `telegram/compact/roomy`, чтобы …Читать полностью
- В чатах возвращён прежний компактный вид облачков сообщений, ближе к историческому интерфейсу.
- Для исходящих сообщений индикатор доставки/прочтения снова показывается в правом верхнем круглом бейдже.
- Подровнены плотности `telegram/compact/roomy`, чтобы bubble вели себя предсказуемо на desktop и mobile.
Релиз v5.8.30
Чаты: возвращён классический вид сообщений без «треугольных хвостов», пузырьки снова выглядят аккуратно в обеих темах. · Чаты: меню действий сообщения стало легче визуально, корректно позиционируется для своих/чужих сообщений и больше не уезжает за границы окна. · views/chat.php: удалены CSS-tail псевдоэлементы пузырьков, выровнены радиусы и переработан theme-aware стиль dropdown-меню действий. · views/chat.php: удалены quick-replies UI/JS; оставлены только рабочие действия в меню сообщения (`reply`, `copy`, `edit`, `delete`).
TSOY.CLOUD 5.8.30: исправления UI/логики чатов и сценариев удаления
- В чатах возвращён чистый классический стиль облачков сообщений без «треугольных хвостов». - Меню действий сообщения стабилизировано: корректная тема (light/dark) и позиционирование для своих/чужих сообщений. - Убраны быстрые шаблоны ответов (освобождено мес…Читать полностью
- В чатах возвращён чистый классический стиль облачков сообщений без «треугольных хвостов».
- Меню действий сообщения стабилизировано: корректная тема (light/dark) и позиционирование для своих/чужих сообщений.
- Убраны быстрые шаблоны ответов (освобождено место у поля ввода); удаление сообщений и очистка диалога теперь поддерживают явные режимы «у себя» и «у всех».
Релиз v5.8.29
Настройки стали проще для ежедневной работы: добавлен режим «Базовый», который скрывает сложные блоки и оставляет только ключевые параметры. · Добавлен режим «Продвинутый» для админов: в нём доступны PWA/Push, звонки/WebRTC, health-check, база данных и расширенные RBAC-настройки. · views/admin_settings.php: введён переключатель режима интерфейса (`basic`/`advanced`) с сохранением выбора в `localStorage` и mode-aware фильтрацией секций, подпунктов и поиска. · views/admin_settings.php + index.php: RBAC/registration/domain policies интегрированы в общий settings POST-flow; `admin_policies` переведён в legacy-роут с редиректом на `settings_admin_access#settings-rbac`.
TSOY.CLOUD 5.8.29: базовый/продвинутый режимы настроек и единый центр политик
- Интерфейс настроек разделён на режимы: `Базовый` (ключевые параметры) и `Продвинутый` (PWA/звонки/DB/RBAC), чтобы снизить перегруз. - Роли, регистрация и доменные политики объединены с `Настройки -> Доступ` в один центр управления. - Старый путь `admin_poli…Читать полностью
- Интерфейс настроек разделён на режимы: `Базовый` (ключевые параметры) и `Продвинутый` (PWA/звонки/DB/RBAC), чтобы снизить перегруз.
- Роли, регистрация и доменные политики объединены с `Настройки -> Доступ` в один центр управления.
- Старый путь `admin_policies` сохранён как совместимый вход и автоматически ведёт в новый раздел.
Релиз v2.3.8
Снижен лаг при открытии страниц. · Polling-задачи переведены в менее агрессивный режим.
Релиз v2.3.10
Исправлены критические проблемы отображения текста и уведомлений. · Подготовлена база для финальной правки кодировки.
Релиз v2.3.11
Полностью восстановлен текст интерфейса на корректной кириллице. · Исправлены сообщения профиля, чатов, звонков и административных страниц. · index.php восстановлен из стабильной версии и очищен от поврежденных строк. · Обновлены маршруты администрирования звонков: мониторинг, закрытие и удаление комнат.
Релиз v2.3.12
Исправлено отображение текста на странице звонка по ссылке. · Восстановлены подписи и действия в админ-панели. · Очищены поврежденные символы в views/call_room.php и views/admin.php. · В call_room добавлено управление закрытием комнаты для создателя и администратора.
Релиз v2.3.13
Зафиксировано правило: кодировка проекта только UTF-8 без BOM. · Добавлен .editorconfig с обязательным charset=utf-8. · Добавлен scripts/check-encoding.ps1 и подключён в scripts/make-release.ps1.
Релиз v2.3.14
Улучшено качество аудиозвонков в личных и публичных комнатах. · Добавлена автопопытка восстановления соединения при сетевых сбоях. · Вынесены единые WebRTC-параметры: ICE/STUN/TURN и аудио-профиль в настройки админа. · Убраны хардкоды RTCPeerConnection в chat/call_room/admin_call_monitor.
Релиз v2.3.15
Звонки стали отзывчивее без перегруза сервера: события обрабатываются быстрее после действий пользователя. · Стабильнее работа в фоне и после возврата в приложение/вкладку. · Переведены call polling-циклы на адаптивный single-flight алгоритм (без наложения запросов). · Добавлены таймауты запросов, backoff при ошибках и fast-retry после сигналов/действий.
Релиз v2.3.16
В админке добавлены импорт и экспорт базы данных в JSON для резервного копирования и переноса. · Добавлены сервисные операции очистки БД и файлов: RTC-мусор, старый аудит, удалённые файлы и сироты в uploads. · Добавлен модуль app/admin_maintenance.php с безопасным экспортом/импортом и обслуживанием хранилища. · Импорт БД выполняется с полной заменой данных таблиц приложения (через DELETE в транзакции, без TRUNCATE).
Релиз v2.3.17
Исправлена критическая ошибка отправки emoji/смайликов в мессенджере на MySQL. · После обновления сайт автоматически приводит старые таблицы чата и связанные таблицы к emoji-safe кодировке utf8mb4. · MySQL-подключение теперь принудительно использует SET NAMES/CHARACTER SET utf8mb4. · Добавлен runtime-check кодировки таблиц через INFORMATION_SCHEMA и best-effort конвертация в utf8mb4 только при необходимости.
Релиз v2.3.18
В админке БД добавлен визуальный статус проверки utf8mb4/emoji (для MySQL). · Теперь можно быстро увидеть, есть ли таблицы или колонки, которые ещё не готовы к emoji. · Добавлен отчёт admin_db_charset_report() по INFORMATION_SCHEMA: default charset/collation БД, таблицы и текстовые колонки. · Отчёт выведен в views/admin_db.php с компактной сводкой и таблицами проблемных объектов (если есть).
Релиз v2.3.19
Переработан блок смайликов в мессенджере: быстрые emoji, недавние emoji и удобная панель выбора. · Подключена библиотека emoji picker с поиском и категориями; добавлены быстрые кнопки, включая клоуна 🤡. · Локально подключена библиотека public/vendor/emoji-button/emoji-button.min.js (без CDN-зависимости в рантайме). · В chat composer добавено хранение недавних emoji в localStorage и fallback-режим, если библиотека недоступна.
Релиз v2.3.20
Исправлен баг мессенджера: новые сообщения теперь появляются в открытом чате без перезахода. · Если вы находитесь внизу ленты, чат автоматически прокручивается к новым сообщениям. · Добавлен lightweight endpoint chat_messages_poll (инкрементальная выдача сообщений по after_id). · Во views/chat.php добавлен single-flight polling и клиентский рендер новых сообщений без полной перезагрузки страницы.
Релиз v2.3.21
Список диалогов в мессенджере теперь обновляется автоматически: новые сообщения и непрочитанные появляются без перезахода в чат. · Превью последнего сообщения, время и бейдж непрочитанных синхронизируются прямо в открытом разделе «Мессенджер». · Добавлен endpoint chat_dialogs_poll с компактной JSON-выдачей списка диалогов для текущего пользователя. · Во views/chat.php добавлен отдельный single-flight polling списка диалогов с backoff, signature-check и обновлением DOM только при изменениях.
Релиз v2.3.22
Переработан интерфейс мессенджера в стиле PWA-мессенджеров: удобнее список диалогов, компактнее шапка чата и чище лента сообщений. · На телефоне чат занимает экран аккуратнее: более компактные action-кнопки, улучшенная шапка и удобнее поле ввода для быстрых сообщений. · Во views/chat.php обновлены layout/styling для desktop и mobile (split-pane, sticky composer, адаптивная шапка, улучшенные bubbles). · Серверный и клиентский рендер списка диалогов унифицированы: одинаковая разметка строк (аватар/имя/время/превью/unread badge).
Релиз v2.3.23
Исправлена проблема со «слетающей» авторизацией: сессия пользователя теперь сохраняется стабильнее, особенно в PWA и на мобильных устройствах. · Пользователю больше не нужно постоянно повторно входить в аккаунт при обычном использовании сайта. · Добавлена устойчивая инициализация PHP-сессии: cookie lifetime 30 дней, gc_maxlifetime 30 дней, httponly/samesite и корректный secure через HTTPS/X-Forwarded-Proto. · Сессии вынесены в project-local storage/sessions (если доступно), чтобы изолировать их от server-wide gc других сайтов/приложений.
Релиз v2.3.24
Исправлен UX мессенджера на ПК: форма ввода теперь закреплена поверх ленты сообщений и всегда видна, как в Telegram/WhatsApp. · Возвращён стеклянный (glass) вид мессенджера на телефоне и PWA-экране. · Добавлен endpoint chat_messages_before_poll (before_id) и server helper conversation_messages_before_for_user() для lazy-history. · Стартовая загрузка сообщений в чате уменьшена до компактной пачки, дальнейшая история догружается по scroll trigger.
Релиз v2.3.25
Исправлен критичный UX-баг мессенджера на ПК: при открытии диалога теперь сразу видны последние сообщения и форма ввода (без прокрутки всей страницы вниз). · Форма ввода закреплена поверх ленты сообщений, а прокрутка выполняется внутри окна чата. · Для desktop conversation pane добавлена жёсткая высота по viewport (CSS + JS syncDesktopMessengerViewport), чтобы контент не растягивал страницу. · chatMessages переведён в гарантированно внутренний scroll-container; composer остаётся fixed/overlay внутри card.
Релиз v2.3.26
Добавлен отдельный центр уведомлений: быстрые переключатели, статус разрешений браузера, Service Worker/PWA и тест уведомления на устройство. · Настройки уведомлений теперь можно менять без захода в профиль — прямо из раздела «Уведомления». · Маршрут notifications получил обработку POST (сохранение notify_desktop/notify_sound) и скорректирован порядок mark_seen/counts. · Глобальный runtime уведомлений переработан: user-scoped localStorage state, единый helper __TSOY_NOTIFY_RUNTIME (SW/device notify, permission/status/test).
Релиз v2.3.27
Добавлена публичная страница «О проекте» (`/about`) с описанием проекта и карточками участников/вклада. · В профиле (редактирование) для администратора добавлен блок управления страницей «О проекте», включая загрузку фото участников с устройства. · Добавлены маршрут `about`, pretty-route `/about` и POST-обработчик `post_like_toggle` с JSON-ответом для AJAX. · В `profile_edit` добавлено сохранение настроек страницы about через `settings` + хранение списка участников в JSON (`about_contributors_json`).
Релиз v2.3.28
Hotfix: исправлено битое сообщение после сохранения настроек в центре уведомлений (теперь отображается нормальная кириллица). · В `index.php` заменены оставшиеся mojibake-строки flash-сообщения `Настройки уведомлений сохранены.` в обработчиках профиля и центра уведомлений.
Релиз v2.3.29
Hotfix: исправлены оставшиеся «кракозябры» в системных сообщениях/заголовках из `index.php` (включая центр уведомлений и очистку аудита в разделе БД). · Выполнена массовая зачистка mojibake-строковых литералов в `index.php` (восстановлена нормальная кириллица в flash/title сообщениях). · Усилен `scripts/check-encoding.ps1`: проверка mojibake теперь использует кодовые точки (`U+00C2/U+00C3/U+00D0/U+00D1`), а не хрупкий текстовый regex.
Релиз v2.3.30
Ссылка на страницу «О проекте» добавлена в подвал рядом с версией проекта. · Настройки страницы «О проекте» вынесены из профиля в отдельный раздел администрирования в дашборде. · Добавлен маршрут `admin_about` + новая страница `views/admin_about.php`; сохранение настроек about перенесено из `profile_edit` в admin-раздел. · Расширен RBAC: новые роли (`global_admin`, `admin_tester`), нормализация политик по умолчанию, закреплённые инварианты для доступа к БД/политикам/настройкам.
Релиз v2.3.31
Исправлены права управления пользователями: первый пользователь всегда закреплён как `global_admin`, обычный администратор не может понижать/блокировать/удалять его и сбрасывать ему пароль. · Роль `admin_tester` теперь может пользоваться обычными функциями приложения (включая профиль и фото), при этом изменения в админ-разделах по-прежнему заблокированы. · Добавлены backend-инварианты для первого пользователя (`user_ensure_first_global_admin`, запрет бана/удаления первого пользователя) и защита операций над `global_admin` в `admin_users`. · Глобальный guard `admin_tester` сужен до write-операций админ-разделов, чтобы не ломать обычный пользовательский функционал.
Релиз v2.3.32
Исправлена логика публичных файлов: фото участников со страницы `/about` остаются публичными, но больше не попадают в ленту «Публичные файлы» на главной. · Улучшена навигация и нейминг: пользовательское облако переименовано в «Мои файлы», а `admin`-экран оформлен как «Файлы проекта». · В `app/files.php` добавлена фильтрация публичной ленты по исключениям (`files_public_feed_excluded_ids()`), сейчас туда входят фото участников из `about_contributors_json`. · Обновлены заголовки/подписи в `views/home.php`, `views/dashboard.php`, `views/admin.php`, `views/layout.php`, `views/staff.php`, `views/chat.php`, `views/contacts.php` для уменьшения путаницы между пользовательским и административным файловыми экранами.
Релиз v2.3.33
Добавлена отдельная «мемная» invite-регистрация для друзей с автоназначением ролей `admin` и `admin_tester` по токен-ссылке. · Страница спец-регистрации получила отдельный дизайн с анимациями и роль-специфичными сообщениями (admin/tester). · Добавлен модуль `app/friend_registration.php`: JSON-конфиг спец-регистрации, токены, invite-ссылки, нормализация и resolve роли по токену. · В `index.php` добавлены маршруты `friend_register` и `admin_friend_register`, а также pretty-route `/friend-invite/<token>`.
Релиз v2.3.34
Hotfix: устранены предупреждения Deprecated на PHP 8.4+ в модуле спец-регистрации друзей. · В `app/friend_registration.php` сигнатуры helper-функций обновлены с implicit nullable (`array $cfg = null`) на явный nullable тип (`?array $cfg = null`).
Релиз v2.3.35
В спец-регистрацию друзей встроен виджет «кошка-говешка» с анимированным блоком внутри формы. · В настройках спец-регистрации можно загрузить фото кошки с устройства, включать/выключать блок и настраивать подпись/бейдж. · Спец-регистрация расширена настройками `cat_*` в `app/friend_registration.php`; загрузка изображения реализована в `index.php` и хранится в `public/friend_register/`. · В `views/friend_register.php` добавлен анимированный cat-widget с безопасным fallback без картинки.
Релиз v2.3.36
Базовый пресет оформления снова по умолчанию `Default`, а `Psychedelic` оставлен как опциональный вариант в настройках. · Уведомления о сообщениях и событиях теперь открывают соответствующий раздел (чат или календарь), а не всегда центр уведомлений. · Добавлен JSON endpoint `chat_send_async` и клиентский submit-handler во `views/chat.php` для AJAX-отправки сообщения с поддержкой вложений. · В `notif_poll` добавлены target-ссылки (`chat`/`calendar`), а `views/partials/scripts.php` формирует отдельные device-notifications с корректным `data.url`.
Релиз v2.3.37
Мессенджер структурно облегчён: более компактный header/messages/composer stack, меньше визуальной тяжести и ближе к привычной мобильной логике. · Исправлено поведение поля ввода в мобильном полноэкранном чате: composer больше не “съезжает” вниз из-за наложенных padding/overlay-стилей. · В `views/chat.php` добавлены структурные классы (`chat-list-card`, `chat-conv-card`, `chat-conv-body`, `chat-composer-shell`) и финальный CSS override-блок с упрощённой layout-схемой. · Убран тяжёлый overlay-режим composer для conversation pane (через CSS overrides), сообщения снова живут в нормальном flex-stack без лишнего bottom-overlay padding.
Релиз v2.3.38
Перестроена DOM-структура окна диалога: `chatMessages` теперь единый контейнер на всю область чата, внутри которого находятся шапка, лента сообщений и composer. · Шапка диалога и панель ввода встроены внутрь общего контейнера как в современных мессенджерах, что улучшает поведение на мобильных экранах. · В `views/chat.php` `id=\"chatMessages\"` переведён в роль root-container conversation pane, а scroll-area вынесена в `id=\"chatMessagesScroll\"`. · JS-логика мессенджера обновлена на новый scroll-target (`chatMessagesScroll`) с backward fallback на старую структуру.
Релиз v2.3.39
Уменьшен зазор между клавиатурой и полем ввода в мобильном мессенджере (почти вплотную, несколько миллиметров). · Панель ввода в fullscreen-чате лучше поджимается к клавиатуре на iPhone/iOS. · В `views/chat.php` добавлен динамический CSS var `--chat-mobile-composer-gap` и логика `visualViewport`-детекта открытой клавиатуры. · При открытой клавиатуре fullscreen-pane чата растягивается до видимого нижнего края без лишнего white-gap из-за `visualViewport.offsetTop`.
Релиз v2.3.40
Исправлен большой пустой отступ между полем ввода и клавиатурой в мобильном мессенджере (fullscreen chat). · Панель ввода и лента сообщений теперь корректно сжимаются при открытии клавиатуры. · В `views/chat.php` снят конфликтующий `min-height`/жёсткая высота на mobile fullscreen-цепочке контейнеров (`chat-conv-body` → `#chatMessages` → scroll-wrap → `#chatMessagesScroll`). · Горячий фикс рассчитан на iOS/Safari/PWA сценарии, где клавиатура уменьшает viewport и ломает flex-layout с `min-height`.
Релиз v2.3.41
Дополнительно исправлен большой зазор над клавиатурой на iPhone: поле ввода поджимается ближе даже при включённой assistant/suggestions панели iOS. · В `views/chat.php` добавлена реальная компенсация нижнего зазора по измерению положения composer относительно viewport (а не только по `visualViewport.height`). · Учтён iOS-кейс, когда `visualViewport` и `window.innerHeight` расходятся на высоту assistant/suggestions панели клавиатуры.
Релиз v2.3.42
Для диагностики iPhone-отступа убрана встроенная (inline) панель быстрых смайликов из формы сообщения в мессенджере. · Кнопка смайликов в composer теперь открывает полный emoji picker, если inline-панель отключена. · Из `views/chat.php` удалён блок `chat-emoji-panel` внутри composer; JS-клик по `emojiBtn` переведён на fallback `toggleFullEmojiPicker()` при отсутствии inline-панели.
Релиз v2.3.43
Для диагностики iPhone-отступа убран набор layout-классов у нижнего блока `attachHint / Убрать вложение` в composer мессенджера. · В `views/chat.php` блок под composer (с `attachHint` и `attachClearBtn`) упрощён до обычного контейнера без `d-flex/.../mt-2`.
Релиз v2.3.44
Для диагностики iPhone-отступа убран класс `small text-secondary` у блока `attachHint` в composer мессенджера. · В `views/chat.php` элемент `#attachHint` оставлен без CSS-классов, чтобы исключить влияние типографики/line-height на высоту composer.
Релиз v2.3.45
Для диагностики iPhone-отступа удалён `id=\"attachHint\"` у нижнего блока composer и связанный CSS-минимум высоты. · В `views/chat.php` удалено правило `#chatConvPane #attachHint { min-height ... }`, а сам элемент оставлен без `id`, чтобы исключить его вклад в высоту composer.
Релиз v2.3.46
Мессенджер вынесен из общего `container py-4` в отдельное “полотно” layout (full-canvas host), чтобы уменьшить конфликты мобильного fullscreen-режима с обёртками страницы. · Это изменение направлено именно на iPhone-баг с большим отступом над клавиатурой: чат теперь живёт в более простой DOM-структуре без общей контейнерной обвязки страницы. · В `views/layout.php` добавлен route-aware режим `contentCanvasRoute` для `chat`: контент мессенджера рендерится в `chat-canvas-stage` вне `container py-4`. · В `views/chat.php` обновлены mobile fullscreen-селекторы, которые раньше были жёстко привязаны к `.container.py-4`, теперь они поддерживают `.chat-canvas-stage`.
Релиз v2.3.47
Мессенджер после фикса iPhone-клавиатуры дополнительно очищен и визуально облегчён: обновлены шапка страницы, список диалогов, полотно сообщений и composer. · Строка состояния редактирования в composer теперь показывается только в режиме редактирования, а не занимает место постоянно. · Из `views/chat.php` удалён временный JS-компенсатор `tightenComposerToViewportBottom()` и связанный runtime-костыль `--chat-mobile-composer-gap`, оставлена более простая `visualViewport`-синхронизация. · Добавлены финальные CSS-overrides для canvas-режима чата (`chat-canvas-stage`) без возврата к старой layout-обвязке `container py-4`.
Релиз v2.3.48
На главной в разделе «Новости» теперь по умолчанию показываются только первые записи, остальные открываются кнопкой «Загрузить ещё». · В истории версий (технические новости по версиям) добавлен такой же режим постепенной подгрузки списка через кнопку «Показать ещё версии». · В `views/layout.php` добавлен универсальный client-side `load more`-инициализатор для блоков с `data-load-more-*`. · Разметка новостей на главной (`views/home.php`) и модалки истории версий (`views/layout.php`) переведена на единый шаблон постепенного раскрытия списка.
Релиз v2.3.49
Исправлен повторный iPhone-баг в мессенджере с большим отступом между клавиатурой и полем ввода (runtime-компенсация viewport/composer для mobile fullscreen). · Новости на главной и технические заметки по версиям теперь действительно свёрнуты по умолчанию (первые 3 записи), остальные открываются через кнопку «Показать ещё / Загрузить ещё». · В `views/chat.php` возвращена измеряемая компенсация `visualViewport` по фактическому gap до composer (без возврата старого `--chat-mobile-composer-gap` костыля). · В `views/layout.php` исправлен клиентский `load more`-инициализатор (Safari-safe проверка вместо `ParentNode`) и добавлено серверное начальное сворачивание версий.
Релиз v2.3.50
В мессенджере убрана служебная подпись под именем собеседника; клик по фото/имени в шапке диалога теперь открывает профиль собеседника. · Профиль расширен: значок админ-роли для администраторов, список друзей, количество друзей, а также кнопки добавления/удаления из друзей прямо на странице профиля. · Добавлены helper-функции для видимости карточек разработчиков на `/about` (`about_developer_visibility_json`, `user_about_card_visible()`, `user_about_card_set_visible()`) и фильтрация в `users_about_developers()`. · Маршруты `post_create/post_update` получили поддержку `cover_device_file` через новый helper `post_cover_from_upload()` в `app/posts.php`.
Релиз v2.3.51
В мессенджере из composer удалён нижний блок `chat-attach-row` (подсказка/кнопка вложения), чтобы убрать лишнюю высоту и iPhone-gap («подбородок»). · Из `views/chat.php` удалена разметка `div.chat-attach-row`; JS обработчики вложений уже безопасно работают при отсутствии `attachHint/attachClearBtn`.
Релиз v2.3.52
Усилен iPhone-fix для мессенджера: composer в mobile fullscreen при открытой клавиатуре закрепляется в `fixed`-режиме относительно видимой области, чтобы убрать большой зазор над клавиатурой. · В `views/chat.php` добавлен режим `chat-composer-vv-fixed` + JS-синхронизация с `visualViewport` (адаптивно: `bottom=0` или компенсация `keyboardInset`, если fixed элемент уходит под клавиатуру).
Релиз v2.3.53
В мессенджере с composer снят класс `chat-sticky` (оставлен только `chat-composer-shell`) — hotfix для iPhone-отступа над клавиатурой. · В `views/chat.php` удалён `chat-sticky` у обёртки формы сообщений, чтобы исключить конфликт sticky/fixed логики в mobile fullscreen.
Релиз v2.3.54
Ещё один iPhone hotfix для мессенджера: при открытой клавиатуре `fixed`-composer больше не обрезается контейнерами чата (снят clipping/blurs на время mobile keyboard mode). · В `views/chat.php` добавлен режим `chat-composer-vv-mode`: при активной клавиатуре снимаются `overflow:hidden` и `backdrop-filter` у `chat-conv-card/chat-conv-body`, чтобы Safari не привязывал/не обрезал `position: fixed` composer внутри карточки.
Релиз v2.3.55
В мессенджере переписан mobile-composer режим для iPhone: поле ввода при открытой клавиатуре выносится в отдельный viewport-портал, чтобы не появлялся большой зазор над клавиатурой. · В `views/chat.php` реализован `composer portal` (spacer + перенос `.chat-composer-shell` в `body` при mobile keyboard mode) вместо прежней fixed/sticky-компенсации внутри карточки чата.
Релиз v2.3.56
Добавлена система мультипрофилей: у одного аккаунта можно создавать, переключать и удалять несколько профилей через меню по клику на имя/аватар в шапке. · Для ролей разработчиков (`global_admin`/`admin`/`admin_tester`) добавлен выбор, какой профиль показывать на странице `/about`. · В `app/migrations.php` добавлены `user_profiles`, колонки `users.active_profile_id/users.about_profile_id` и `posts.hide_from_guests`. · В `app/users.php` реализованы helper-ы мультипрофилей (bootstrap/create/switch/delete/sync/about-select) и overlay данных выбранного профиля в `/about`.
Релиз v2.3.57
Мессенджер откатан по фронтенду (`views/chat.php`) к состоянию релиза `2.3.46` — это версия, на которой исчезал iPhone-gap («подбородок») над клавиатурой. · Сравнение показало, что `views/layout.php` (перенос чата в `chat-canvas-stage`) остаётся правильным; регрессия появилась позже в `views/chat.php` после добавления mobile keyboard viewport-хаков (`chat-composer-vv-portal`, `chat-composer-vv-fixed`, `chat-composer-vv-mode`, spacer/portal composer). · Откат выполнен точечно только для мессенджера: `views/chat.php` взят из архива `releases/tsoycloud_v2.3.46_2026-02-22.zip`.
Релиз v2.3.58
Мультипрофили переработаны: теперь каждый профиль аккаунта — это отдельный пользователь со своим логином и собственной страницей `/user/<login>` (отдельные посты, файлы и медиа). · В меню профилей аккаунта создание профиля теперь запрашивает отдельный логин (`username`) и отображаемое имя; основной профиль нельзя удалить. · Логика `user_profiles_*` в `app/users.php` переведена с таблицы `user_profiles` на связанные записи `users` через `owner_account_user_id` (старую таблицу больше не используем как источник истины). · В `app/auth.php` добавлен `auth_session_apply_active_profile()` и `$_SESSION[\"auth_user_id\"]`: сессия хранит владельца аккаунта отдельно от активного профиля (`$_SESSION[\"user\"]`).
Релиз v2.3.59
Мессенджер улучшен поверх стабильной базы (без возврата mobile keyboard-хаков): имя/аватар собеседника в шапке снова открывают профиль, убрана лишняя служебная подпись. · В профиле добавлены отдельные блоки медиа: фото, видео и аудио (для владельца — из облака, для гостей/других пользователей — из видимых постов). · В `app/migrations.php` добавлены таблицы `post_comments` и `user_pages`. · В `app/posts.php` реализованы helpers комментариев и поддержка внутренних ссылок (`/page/...`) в `post_attachment_add_link()` для публикации страниц.
Релиз v2.3.60
Исправлено мобильное меню профилей в шапке: dropdown больше не уезжает влево на узких экранах (ограничена ширина, стабилизировано позиционирование). · В `views/layout.php` профильный dropdown переведен на `data-bs-display=\"static\"` и вынесен на отдельный класс `topbar-profile-menu`; в `views/partials/head.php` добавлены mobile-safe стили ширины/переполнения.
Релиз v2.3.61
Исправлен раздел «Медиа» в профиле: теперь он показывает только контент, который пользователь явно добавил в посты (обложки и вложения), а не все файлы из облака. · В `views/profile.php` блок `Медиа` переведен на единый источник данных (медиа из постов) для владельца и гостей; облачные файлы владельца больше не попадают туда автоматически.
Релиз v2.3.62
Профиль переведён на более современный шаблонный стиль: обновлены карточки, шапка профиля и добавлены верхние вкладки разделов (Посты/Друзья/Страницы/Медиа). · Разделы Фото/Видео/Аудио теперь работают как отдельные ручные галереи профиля: пользователь сам добавляет контент в галереи, а не получает автоподбор из облака/постов. · Добавлен helper `app/profile_media.php` и таблица `profile_media_items` (ручные галереи профиля) с миграцией в `app/migrations.php`. · Добавлен маршрут `profile_media_gallery` в `index.php` (добавление/удаление элементов галереи, загрузка файлов с устройства).
Релиз v2.3.63
Профиль ещё ближе к новому шаблону: усилен визуал шапки (cover/avatar/chips/статистика), обновлены карточки друзей/страниц/медиа и общий стиль карточек постов/модалок. · Улучшена навигация по разделам профиля через верхние вкладки с сохранением активной вкладки. · В `views/profile.php` расширен слой профильных стилей и добавлены счётчики/визуальные блоки без изменения бизнес-логики постов, комментариев и ролей.
Релиз v2.3.64
Посты на странице профиля ещё ближе к новому шаблону: добавлен header карточки (аватар/имя/@username/время), улучшен action-bar и визуал карточек. · Модалка комментариев профиля визуально переработана и на мобильных ведёт себя ближе к формату bottom-sheet. · В `views/profile.php` добавлены профильные UI-классы для карточек постов и комментариев без изменения текущей логики лайков/комментариев/прав доступа.
Релиз v2.3.65
Управление галереями профиля перенесено в модалку (вместо collapse), что ближе к новому шаблону и удобнее на мобильных устройствах. · Экран `Редактировать профиль` заметно переработан визуально: добавлен hero-preview профиля, улучшены блоки загрузки аватара/обложки и группировка полей. · В `views/profile.php` блок управления ручными галереями переведён на modal-layout без изменения логики форм `profile_media_gallery`. · В `views/profile_edit.php` добавлены новые UI-обёртки и стили (`profile-edit-header-*`, `profile-edit-fieldset`, `profile-edit-upload-*`) при сохранении прежних POST-полей.
Релиз v2.3.66
Профиль дополнительно отполирован под мобильные устройства: карточки друзей и страниц стали компактнее и аккуратнее на узких экранах. · В модалке комментариев улучшен блок ввода: форма стала ближе к привычному мобильному composer-формату. · В `views/profile.php` добавлены mobile-first стили и классы для списков друзей/страниц, медиасетки и composer-разметки комментариев без изменения бизнес-логики.
Релиз v3.0.0
Подготовлен крупный профильный апдейт 3.0: улучшен mobile UX профиля (Друзья/Страницы/Медиа), а форма комментариев в модалке стала ближе к привычному мобильному composer-формату. · Полностью переработан интерфейс мультипрофилей в шапке: новый dropdown с быстрым переключением, аватарами и статусами профилей. · В `views/layout.php` переписана разметка topbar dropdown и модалки `#userProfilesModal` без изменения существующих роутов/POST-действий (`user_profiles`). · В `views/partials/head.php` добавлен новый слой стилей для мультипрофильного UX (`topbar-profile-*`, `user-profiles-modal-modern`, `user-profile-card*`) с адаптацией под мобильные экраны.
Релиз v3.0.1
На странице профиля кнопка копирования публичной ссылки теперь копирует адрес в буфер и показывает диалог «Скопировано». · При открытии профиля по публичной ссылке `/user/<username>` скрывается боковое меню (desktop + mobile offcanvas), страница выглядит ближе к формату соцсети. · В `views/profile.php` обновлён helper `copyText()` для кнопок `.js-copy`: успешное копирование подтверждается диалогом, fallback остаётся только при ошибке clipboard API. · В `views/layout.php` добавлен режим публичной страницы профиля (`$publicProfilePageRoute`) с условным отключением sidebar/offcanvas и корректировкой mobile topbar-отступа.
Релиз v3.0.2
На страницах профиля боковое меню теперь скрывается только у гостей. Для авторизованных пользователей навигация в профиле снова доступна. · В `views/layout.php` режим “соц-страницы без меню” ограничен только гостевым просмотром публичного профиля (`$guestPublicProfileSocialMode`).
Релиз v3.0.3
Кнопки «Ссылка на профиль» и «Ссылка на пост» на странице профиля теперь копируют ссылку в буфер по одному клику. · В `views/profile.php` copy-handler для `.js-copy/.js-magnet` усилен: добавлены `preventDefault/stopPropagation` и fallback-копирование через `textarea + execCommand(copy)` без обязательного `prompt`.
Релиз v3.1.0
Конструктор пользовательских страниц серьёзно переработан: добавлены блоки «Статья», «Гайд» и «Плеер роликов» помимо галереи/ссылок. · В выборе файлов для конструктора страниц больше не нужны ID вручную: добавлен единый проводник файлов с папками, поиском, фильтрами и мультивыбором. · Добавлен reusable partial `views/partials/file_explorer_picker.php` (модалка + JS-компонент `TsoyFileExplorerPicker`) для повторного использования в разных разделах. · В `app/pages.php` расширена модель блоков страниц (`article`, `guide`, `video_player`) и обновлён сбор используемых file_id для рендера.
Релиз v3.2.0
Усилен PWA-режим для ПК и смартфонов: улучшен manifest (ярлыки быстрых действий, desktop/mobile launch-поведение, метаданные приложения). · Уведомления и звонки в PWA/браузере теперь надёжнее открывают нужный раздел по клику (чат, конкретный звонок, уведомления и т.д.). · Root и `public/service-worker.js` синхронизированы и переведены на единый hardened SW (navigation preload, deep-link `notificationclick`, управление файловым кешем через message API). · В Service Worker добавлен корректный bypass для `Range`-запросов, чтобы не ломать стриминг аудио/видео и просмотр медиа на мобильных устройствах.
Релиз v3.2.1
В разделе «Настройки → Брендинг» добавлена отдельная настройка названия проекта в шапке (верхняя панель и боковое меню). · Добавлен ключ настроек `site_header_name`; при пустом значении используется fallback на `site_name`. · В `views/layout.php` брендинг шапки переведён на отдельную переменную `$siteHeaderName`, не затрагивая title страниц и прочие места, где используется `site_name`.
Релиз v3.3.0
Проведена большая унификация визуального стиля проекта: карточки, навигация, формы, модалки и отступы лучше согласованы между разделами. · Раздел «Настройки → Оформление» расширен: добавлены настройки глобального шрифта, масштаба текста, ширины контента, контраста поверхностей и отдельная плотность мессенджера. · Расширен `ui_config()` и системные настройки (`ui_font_family`, `ui_font_scale`, `ui_content_width`, `ui_surface_contrast`, `ui_chat_density`) с валидацией в `index.php?r=admin_settings`. · В `views/partials/head.php` добавлены новые data-атрибуты UI и глобальные CSS-токены (font-scale, content-width, surface-contrast) для централизованного управления дизайном.
Релиз v3.3.1
В мессенджере выбор файла из облака переведён на единый проводник (папки, поиск, фильтры, превью), как в других разделах проекта. · Исправлено меню действий сообщения (`Изменить/Удалить`): dropdown больше не перекрывается соседними сообщениями. · В `views/chat.php` интегрирован reusable `TsoyFileExplorerPicker` для attach-модалки (mobile-safe сценарий через отдельную модалку picker-а). · Для строк сообщений добавлен z-index lift при `show.bs.dropdown` (`chat-row-menu-open`), чтобы меню действий не попадало под соседние bubbles.
Релиз v3.3.2
В «Центре уведомлений» блок с уведомлениями/событиями теперь показывается первым, а настройки уведомлений идут после него. · В `views/notifications.php` переставлен визуальный порядок колонок через grid-order (`notify-col-feed` перед `notify-col-settings`) и обновлён заголовок блока на «Все уведомления».
Релиз v3.3.3
Страница «Контакты» визуально приведена к стилю мессенджера: одинаковая шапка, поверхности, контуры и оттенки/градиенты. · В `views/contacts.php` добавлен локальный токенизированный стиль (`contacts-page`) с той же логикой surface/background, что и в мессенджере, включая реакции на `ui_surface_contrast` и `ui_density`.
Релиз v3.3.4
Проводник файлов в профиле (обложка и вложения постов) переведён на единое ядро `TsoyFileExplorerPicker`, как в мессенджере. · Вложения к посту с устройства в профиле переработаны в единый блок внутри модалки вложений (облако + устройство + ссылки), чтобы выбор работал стабильнее и понятнее. · В `views/profile.php` добавлен JS-слой унификации старых модалок вложений постов: облачные файлы выбираются через общий picker, а hidden-inputs собираются по mime (`attach_images/video/audio/files`). · В `app/files.php` расширен `files_admin_list()` (фильтры по владельцу и папке) и добавлены helper-функции `files_admin_owner_stats()` / `files_admin_folders_list()` для админского проводника.
Релиз v3.3.5
Исправлен двойной проводник в профиле: при выборе обложки поста больше не открывается одновременно новый и старый интерфейс. · Исправлены лишние кнопки «Сохранить / Отмена» под опубликованными постами (ошибка разметки edit-блока). · В `views/profile.php` удалены legacy JS-билдеры вложений постов (`js-att`/`js-att-edit`) и старые вкладки вложений теперь физически вырезаются из DOM после инициализации нового picker-слоя. · В `views/profile.php` убраны bootstrap-trigger атрибуты с кнопок выбора обложки (теперь открывается только `TsoyFileExplorerPicker`), а возврат старой attach-модалки после picker отключён.
Релиз v3.3.6
В конструкторе пользовательских страниц добавлен новый блок «Таблица» с ручным редактированием ячеек. · Для блока таблицы доступны действия: добавить/удалить строку и добавить/удалить столбец, а также режим «первая строка — заголовки». · В `app/pages.php` добавлена нормализация блока `table` (header + rows, ограничения размеров и длины ячеек). · В `views/my_pages.php` расширен page-builder: тип `table`, визуальный table-editor и сериализация таблицы в `blocks_json`.
Релиз v3.4.0
Добавлены полноценные push-уведомления на устройство (через Web Push + Service Worker) для сценариев, когда сайт/PWA закрыт. · Push-уведомления теперь приходят по ключевым событиям: сообщения, входящие звонки/приглашения в звонок, лайки постов, комментарии и добавления в друзья. · Добавлен `app/push.php`: VAPID-ключи (автогенерация), подписки Web Push, очередь уведомлений, payloadless Web Push dispatch и pull-механизм для SW. · В `app/migrations.php` добавлены таблицы `push_subscriptions` и `push_queue` (MySQL/SQLite) с индексами для подписок и очереди доставки.
Релиз v3.4.1
Исправлено мобильное открытие окна вложений в мессенджере: attach-модалки/проводник теперь открываются поверх fullscreen-чата. · Меню профиля/переключения мультипрофилей в мобильной шапке больше не уезжает влево: dropdown центрируется по viewport. · В `views/chat.php` поднят z-index attach-модалки и file-picker-модалки над mobile chat pane (`z-index: 2100`) и добавлена маркировка backdrop (`chat-over-chat-backdrop`). · В `views/chat.php` усилен mobile-open handler клипсы (`pointerup` + `touchend` + click guard), чтобы не терялись тапы в fullscreen-мессенджере.
Релиз v3.4.2
Исправлена навигация по клику на уведомления: уведомления теперь корректно открывают источник (чат, календарь, профиль/пост и т.д.) в браузере и PWA. · В `views/partials/scripts.php` `__tsoyNavigateFromNotification()` переведён на резолв ссылок через `appBasePath`, а fallback `Notification.onclick` теперь использует тот же навигатор. · В `service-worker.js` / `public/service-worker.js` `notificationclick` теперь резолвит `data.url` относительно `self.registration.scope` (а не `origin`), что исправляет deep-link в установках не в корне сайта.
Релиз v3.4.3
Уведомления стали информативнее: для новых сообщений показываются имя отправителя и фрагмент текста. · Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (там, где это поддерживает браузер/устройство). · В `notif_poll` добавлен preview последнего непрочитанного сообщения (`sender/body/url`), а клиентский polling в `views/partials/scripts.php` использует его для desktop-уведомлений и toast. · В `app/push.php` расширен payload Web Push: поддержка `data` и `action_urls`, а `push_notify_incoming_call()` теперь отправляет actions (`accept/close`) и URL принятия звонка.
Релиз v3.4.4
В дашборде (`Настройки`) добавлен отдельный блок настроек уведомлений: цвет, оформление toast/desktop-уведомлений, рингтон уведомлений и отдельный рингтон входящего звонка. · Добавлен блок `PWA и обновления`: политика обновления (manual/notify/auto), интервал проверки Service Worker, автозапрос persistent storage и toast-оповещения об обновлении PWA. · Добавлены новые ключи настроек в `app/settings.php`; сохранение/валидация реализованы в `index.php` (`admin_settings`). · В `views/layout.php` новые настройки прокидываются в `window.__TSOY_NOTIFY` (`ui/sounds/pwa`) для runtime-слоя.
Релиз v3.4.5
В настройках уведомлений добавлена загрузка своих рингтонов: отдельно для обычных уведомлений и отдельно для входящего звонка. · В админке можно прослушать загруженные рингтоны прямо в разделе настроек и удалить их при необходимости. · Добавлены настройки `notify_sound_custom_path` и `notify_call_sound_custom_path`, а в `admin_settings` реализована загрузка аудиофайлов в `public/sounds`. · Во фронтенде (`views/layout.php` + `views/partials/scripts.php`) runtime уведомлений получил поддержку кастомных аудио-файлов с fallback на синтезированные звуки, если браузер блокирует воспроизведение.
Релиз v3.5.0
Стабилизационный релиз: проведён общий cleanup проекта, снижён шум от временных артефактов и улучшена предсказуемость работы уведомлений/PWA-настроек. · В настройках уведомлений доработана работа со своими рингтонами: при замене старые файлы корректно очищаются, а слишком большие файлы не принимаются. · Удалены временные каталоги восстановления/аудита (`tmp_*`) из рабочей директории, которые засоряли поиск и увеличивали накладные расходы проверок. · В `scripts/check-encoding.ps1` добавлено универсальное исключение для временных каталогов `tmp_*`, чтобы сборочные проверки не сканировали техмусор.
Релиз v3.5.1
Hotfix рингтонов на телефонах: улучшено воспроизведение кастомных рингтонов уведомлений/звонка на мобильных браузерах и PWA. · В `views/partials/scripts.php` исправлен баг кастомного рингтона уведомлений: теперь Promise `audio.play()` реально проверяется, и при ошибке срабатывает fallback-звук. · Кастомные рингтоны теперь резолвятся через `appBasePath` (`__tsoyResolveAppUrl`) для корректной работы в установках проекта в подпапке сайта.
Релиз v3.5.2
Усилена надёжность уведомлений: добавлен серверный retry-worker для wake-push доставки с повторными попытками и backoff. · В админке (Настройки -> PWA и обновления) появился блок диагностики push-очереди: количество недоставленных элементов, состояние очереди и статус подписок. · В `push_queue` добавлены поля состояния доставки (`dispatch_state`, попытки, backoff, lock, last_error/status) и миграции для MySQL/SQLite. · В `app/push.php` реализованы функции очереди и worker-обработки (`claim/process due`, retry/backoff, статистика очереди).
Релиз v3.5.3
Уведомления стали стабильнее при закрытом PWA/сайте: сервер теперь пытается отправлять полноценный Web Push payload (с телом уведомления), а не только wake-push. · Сохранён fallback-режим (`wake-push + push_pull`) для совместимости, если endpoint/браузер не принимает payload. · В `app/push.php` добавлена payload-отправка Web Push (`aes128gcm`) с VAPID и шифрованием сообщения на стороне сервера (ECDH + HKDF + AES-128-GCM). · `push_dispatch_user()` теперь умеет отправлять payload в push и возвращает раздельную статистику `payload_sent` / `wake_sent`.
Релиз v3.5.4
В админке (`Настройки -> PWA и обновления`) добавлена диагностика push-устройств: список подписок, устройство/режим, последний успех доставки и ошибки. · Появилась кнопка `Тест push` для каждого устройства, чтобы быстро проверить доставку уведомлений на конкретную подписку. · В `app/push.php` добавлены helper-функции диагностики: `push_subscriptions_admin_list()`, `push_subscription_get()`, `push_subscription_test_send()`. · Добавлен route `index.php?r=push_test_subscription` (admin/settings), который отправляет тестовый push на выбранную подписку и пишет результат в flash.
Релиз v3.5.5
Диагностика push-устройств в админке стала практичнее: добавлены фильтры (поиск, active/inactive, только с ошибками). · Для push-подписок появились действия `Отключить / Включить / Удалить` прямо в таблице устройств. · В `app/push.php` добавлены admin-helper’ы управления подписками: `push_subscription_set_active()` и `push_subscription_delete_by_id()`, а список подписок получил серверные фильтры (`q`, `only_errors`, `state`). · В `index.php` добавлен route `push_subscription_admin_action` для безопасного управления подписками из админки (POST + CSRF + capability).
Релиз v3.5.6
Исправлен бренд в уведомлениях: заголовок уведомлений теперь подтягивается из настроек сайта, а не захардкожен как `TSOY.CLOUD`. · В диагностике push-устройств добавлена колонка `Последний тест` (успех/ошибка, режим `payload/wake`, HTTP-код, время). · В `app/push.php` добавлен helper `push_app_title()` (с кешем), и серверные push-события/очередь/тестовые уведомления переведены на имя сайта из `settings`. · В `views/layout.php` + `views/partials/scripts.php` runtime уведомлений получил `siteName/siteHeaderName`; browser/PWA fallback notifications и toast теперь используют бренд из настроек.
Релиз v3.5.7
В диагностике push-устройств добавлена статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). · Добавлены кнопки сброса статистики доставок: для одной подписки и для всех подписок сразу. · В `push_subscriptions` добавлены поля `push_stat_*` и миграции для MySQL/SQLite; реальные отправки в `push_dispatch_user()` записывают статистику по подписке (`payload/wake/fallback/error`). · В `app/push.php` реализованы helper’ы `push_subscription_delivery_stats_record()` и `push_subscription_delivery_stats_reset()`.
Релиз v3.5.8
Hotfix уведомлений: название в заголовке уведомления теперь берётся в приоритете из `Название в шапке`, затем из `Название сайта`. · Исправлен fallback тестового уведомления в центре уведомлений: больше не показывает захардкоженный `TSOY.CLOUD`. · В `views/notifications.php` fallback `new Notification(...)` переведён на бренд из `window.__TSOY_NOTIFY`. · В `views/partials/scripts.php` helper `__tsoyNotifyTitle()` теперь использует `siteHeaderName` раньше `siteName`.
Релиз v3.5.10
В диагностике push-устройств добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общие счётчики попыток. · Добавлен мини-график/спарклайн по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца показывает объём попыток за день. · В `app/push.php` `push_queue_stats()` расширен блоком `delivery_summary`, который агрегирует `push_stat_*` по всем push-подпискам и считает проценты (`payload/fallback/error`). · Добавлена таблица/миграция `push_delivery_daily_stats` и запись дневной статистики при реальных отправках push (`payload/wake/fallback/error`).
Релиз v3.5.11
Страница `Настройки` в дашборде больше не выглядит как сплошная простыня: добавлен блок быстрых переходов по разделам (якоря) и группировка по логическим секциям. · Появились явные секции: основные параметры, дизайн/уведомления, PWA/push, функции/звонки/диагностика — ориентироваться в настройках стало заметно проще. · В `views/admin_settings.php` добавлены якоря (`id`) для ключевых блоков настроек и верхняя навигационная панель без изменения backend-логики сохранения формы. · Страница сохранена как единая форма `admin_settings`, поэтому существующие `POST`-обработчики, `formaction` для push-диагностики и CSRF-проверки продолжают работать без миграций.
Релиз v3.5.12
Hotfix страницы `Настройки`: быстрые переходы по разделам теперь ведут в нужные блоки страницы, а не в корень сайта. · Убран sticky-режим блока `Разделы настроек`, из-за которого он перекрывал интерфейс при прокрутке. · В `views/admin_settings.php` ссылки разделов переведены с hash-only (`#...`) на route-aware (`index.php?r=admin_settings#...`) для корректной работы при наличии `<base>`/нестандартного base path. · Снята sticky-позиция с `admin-settings-nav-card` (оставлен статичный блок), чтобы навигация не накрывала карточки настроек ниже по странице.
Релиз v3.5.13
Страница `Настройки` переделана в Android-style режим: слева список разделов, справа показывается только выбранный раздел настроек. · Переключение разделов теперь происходит без переходов по странице/якорям; интерфейс не перекрывается и не дёргается. · В `views/admin_settings.php` реализован client-side секционный контроллер (`data-settings-nav` / `data-settings-section`) с переключением видимости блоков внутри одной формы. · Сохранена совместимость с текущим backend `admin_settings`: `POST`-логика, `formaction` кнопки push-диагностики и CSRF-проверка не менялись.
Релиз v3.5.14
В разделе `Система` настроек добавлен выпадающий список выбора часового пояса по Гринвичу (GMT/UTC offsets). · При выборе смещения из списка значение автоматически подставляется в поле часового пояса ниже, чтобы сохранить настройку одним кликом. · В `views/admin_settings.php` добавлена генерация preset-списка фиксированных зон `GMT-12 ... GMT+14` с валидными IANA-идентификаторами (`Etc/GMT±N`, `UTC`). · Добавлена JS-связка `systemTimezoneUtcPreset -> systemTimezoneInput`, которая подставляет выбранный preset в существующее поле `system_timezone` без изменений backend-валидации.
Релиз v3.5.15
Настройки переведены в Android-style режим с боковым меню разделов и вторым уровнем внутри `PWA и push` (`Обновления`, `Очередь push`, `Устройства`). · В главное меню добавлен отдельный пункт `Настройки` (после `Дашборд`), доступный всем авторизованным пользователям. · Добавлен route `settings` с доступом через `sections.settings`; legacy route `admin_settings` сохранён для совместимости админ-инструментов и внутренних redirect’ов. · `index.php` (`settings/admin_settings`) разделён по scope сохранения: личные настройки (theme + notify prefs) сохраняются всем ролям, глобальные админ-настройки — только при `admin.settings` и не в режиме `admin_tester`.
Релиз v3.5.16
Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении общего бокового меню. · Переходы в меню настроек теперь открывают соответствующий экран, а не просто переключают внутренние блоки в одном и том же URL. · В `index.php` добавлены route-level страницы настроек (`settings_admin_*`) с capability-gates через `admin.settings`; legacy `admin_settings` сохранён и перенаправлен в режим `Брендинг` внутри общего шаблона. · В `views/admin_settings.php` реализована route-aware навигация: единый шаблон использует разные `action`/initial section в зависимости от текущего settings-route и корректно обрабатывает hash-переходы (`#pwa-notify-admin`, подпункты PWA и др.).
Релиз v3.5.17
Hotfix страницы `Настройки`: пункты бокового меню снова выглядят как кнопки (без подчёркиваний) и заполняют всю ширину колонки. · На desktop видимый раздел настроек теперь растягивается на всю доступную ширину правой панели (как `WebRTC`), а не остаётся половинной карточкой. · В `views/admin_settings.php` для `.admin-settings-side-btn` добавлены `display:block` и `text-decoration:none`, что устраняет регресс после перевода пунктов меню в `<a>`. · В JS-section режиме добавлен CSS override для `.js-settings-block.is-visible` внутри `.row`: `flex-basis/max-width:100%` (исправлен конфликт с Bootstrap `col-lg-6`).
Релиз v3.5.18
Hotfix страницы `Настройки`: в разделе `База данных` убрана лишняя горизонтальная линия перед карточкой блока. · Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь подстраивается под тему оформления и остаётся читаемой в светлой и тёмной темах. · В `views/admin_settings.php` удалён лишний `<hr class=\"my-4\">` перед блоком `settings-db`. · Стили `admin-settings-savebar` переведены с жёстко тёмного фона (`rgba(20,22,30,...)`) на theme-aware фон через Bootstrap CSS variables (`--bs-body-bg-rgb`, `--bs-body-color`, `--bs-border-color-translucent`).
Релиз v3.6.0
Начат рефакторинг связки `Профиль / Контакты / Мессенджер`: на всех трёх экранах добавлен единый переключатель разделов (Social Hub) и явное описание роли каждого раздела. · `Профиль` теперь явно позиционируется как публичная страница пользователя (посты, медиа, страницы, друзья), `Контакты` — как каталог и управление связями, `Мессенджер` — как диалоги/вложения/звонки. · Добавлен reusable partial `views/partials/social_suite.php` (единый CSS для Social Hub: header/switcher/surfaces/role-map chips). · `views/profile.php`, `views/contacts.php`, `views/chat.php` подключены к `social_suite` и получили общий navigation shell без вмешательства в критичную mobile-геометрию композера мессенджера.
Релиз v3.6.1
Следующий шаг по связке `Контакты / Мессенджер`: в мессенджере блок `Быстрый старт` теперь показывает только контакты пользователя, а полный каталог вынесен в раздел `Контакты`. · В настройках исправлено выравнивание раздела `База данных`: карточка блока больше не поднимается выше меню слева. · В `views/chat.php` удалено дублирование каталога пользователей внутри мессенджера: список `Начать чат` переведён на `contacts_list($me_id)` + ссылка в `index.php?r=contacts`. · В `views/admin_settings.php` выровнен db-блок (`settings-db`) относительно общего grid/меню и обновлены подписи/подразделы блока дизайна (`ui/notify`) для разделения личных и глобальных настроек.
Релиз v3.6.2
Убран лишний `Social Hub` с экранов `Профиль / Контакты / Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс снова стал компактнее. · В `Мессенджере` закреплена роль экрана: только активные диалоги и общение. Новый чат создаётся через раздел `Контакты`. · Удалён временный partial `views/partials/social_suite.php` и его подключения из `views/profile.php`, `views/contacts.php`, `views/chat.php` (откат лишнего UI-слоя без влияния на backend). · В `views/chat.php` удалён дублирующий сценарий старта чатов из списка пользователей/контактов: оставлен переход в `index.php?r=contacts` и история активных диалогов.
Релиз v3.6.3
Следующий шаг по связке `Контакты / Мессенджер`: в карточках пользователей на странице `Контакты` добавлены явные действия `Написать` и `Позвонить`. · Мессенджер очищен от каталоговых элементов: в боковой панели оставлены только активные диалоги, без блока быстрого старта/списков людей. · `index.php` (`chat_start` и `chat?start=`) теперь прокидывает `call=1` в итоговый URL диалога, чтобы из внешних экранов можно было запускать звонок напрямую. · В `views/contacts.php` унифицированы action-кнопки карточек (`Написать` / `Позвонить`) для списка контактов и каталога пользователей.
Релиз v3.6.4
Дожат интерфейс мессенджера под единый стиль с `Контактами`: обновлены список диалогов, шапка диалога и composer (кнопки, границы, поверхности, типографика). · Список диалогов стал визуально ближе к карточкам контактов: более ровные поверхности, одинаковая логика hover/active, читаемые превью и время. · Изменения сделаны только в `views/chat.php` на уровне CSS/визуальных состояний (`chat-dialog-item`, `chat-dialog-head`, `chat-inputbar`, action-buttons). · Мобильная геометрия ввода/клавиатуры (`fixed/sticky/viewport` логика, fullscreen layout цепочка) не изменялась, чтобы не вернуть iPhone-баг с \"подбородком\".
Релиз v3.6.5
Мессенджер получил второй visual-pass: доработаны карточки диалогов, шапка активного диалога, кнопки действий и composer для более цельного и лёгкого вида. · В списке диалогов добавлена компактная CTA-кнопка `Контакты` в шапке списка и более полезное пустое состояние с переходом в `Контакты`. · В `views/chat.php` расширен UI-only CSS слой (polish pass 2): `chat-list-headbar`, `chat-dialog-item`, `chat-dialog-head`, `chat-head-btn`, `chat-compose-btn` и density overrides. · Добавлены только безопасные классы/микроразметка в `views/chat.php` (CTA в списке диалогов, классы кнопок) без изменения маршрутов, логики сообщений и звонков.
Релиз v3.6.6
Hotfix iPhone/PWA уведомлений: системная строка `from ...` теперь берёт бренд из настроек (`Название в шапке` → `Название сайта`), а не из старого захардкоженного `TSOY.CLOUD`. · PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с брендингом проекта, чтобы имя приложения и имя в уведомлениях совпадали. · В `index.php` добавлен route `manifest`, который отдаёт динамический Web App Manifest на основе текущих настроек брендинга (`site_header_name` / `site_name`). · В `views/partials/head.php` `<link rel=\"manifest\">` переведён на динамический route с cache-bust (`APP_VERSION` + hash бренда); `application-name` и `apple-mobile-web-app-title` переведены на приоритет `site_header_name`.
Релиз v3.6.7
Исправлен мобильный overflow окна `Диалоги` в мессенджере: карточка списка диалогов больше не вылезает за ширину экрана на iPhone/смартфонах. · Стабилизирована ширина mobile-раскладки мессенджера без изменений логики клавиатуры и без риска вернуть баг с `подбородком`. · В `views/chat.php` для mobile добавлен точечный фикс ширины: убраны отрицательные отступы `row g-3` (Bootstrap gutter overflow) и зажаты `#chatListPane`/карточка/тело списка в `max-width:100%`. · Изменение ограничено CSS-слоем страницы чата; fullscreen/composer/`visualViewport` логика не изменялась.
Релиз v3.6.8
Ускорена отправка сообщений в мессенджере: сообщение появляется заметно быстрее после нажатия `Отправить`, без ощущения паузы в 2–3 секунды. · Повышена плавность UX при отправке: сервер отдаёт ответ чату сразу, а push-уведомления больше не держат отправку сообщения. · В `index.php` (`chat_send_async`) push для нового сообщения переведён в queue-first режим: уведомление ставится в очередь без синхронной отправки (`sendNow=false`). · HTTP-ответ `chat_send_async` теперь завершается до фоновой попытки dispatch push (`fastcgi_finish_request` / flush), чтобы Web Push не блокировал отображение сообщения.
Релиз v3.6.9
Подготовлен серверный фундамент чата для больших историй переписки (сотни тысяч/миллионы сообщений) без изменения привычного интерфейса. · Список диалогов и polling чата стали легче для сервера за счёт оптимизации хранения unread-состояния и индексов под крупные переписки. · В `conversations` добавлены денормализованные unread-счётчики (`u1_unread_count`, `u2_unread_count`) и метаданные последнего сообщения (`last_message_id`, `last_message_preview`). · В `app/chat.php` `message_send()` / `conversation_mark_read()` обновляют unread-счётчики диалога; `message_delete_for_me()` и `conversation_clear_for_me()` синхронизируют их через пересчёт/сброс.
Релиз v3.6.10
Полиш страницы `Контакты`: действия `Написать`, `Позвонить`, `Удалить` в карточках заменены на компактные иконки (конверт, трубка, корзина) для более чистого интерфейса. · Сохранены подсказки (`title`) и `aria-label`, чтобы UX остался понятным и доступным на ПК и мобильных устройствах. · В `views/contacts.php` добавлены `contacts-actions` и `contacts-action-icon` (theme/density-friendly размеры икон-кнопок), заменена текстовая разметка кнопок в списке `Мои контакты` и `Каталог пользователей`. · Логика маршрутов и действий (`chat_start`, `chat_start&call=1`, add/remove contact) не изменялась.
Релиз v3.6.11
Доведён UI действий в `Контактах`: кнопка `В контакты` заменена на иконку `человек+`, чтобы все действия в карточках были в одном визуальном языке. · Заголовок `Каталог пользователей` и кнопка `Найти` теперь находятся в одной строке, поле поиска вынесено отдельно ниже на полную ширину. · В `views/contacts.php` кнопка добавления контакта переведена на `bi-person-plus` с `title`/`aria-label`; сохранена существующая POST-логика `action=add`. · Поиск в каталоге использует `form=\"contactsSearchForm\"` у кнопки `Найти`, чтобы держать правильную desktop/mobile компоновку без изменения backend-маршрута `contacts`.
Релиз v3.6.12
Системные файлы проекта (логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации) переведены в единую системную папку `public/system/...`. · Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически и мягко переносятся в новую системную структуру при запуске приложения. · Добавлен `app/system_assets.php`: единый helper для системных ассетов (безопасное сохранение upload-файлов, удаление только из разрешённых системных директорий, миграция legacy-путей). · В `index.php` (`admin_settings`) загрузка логотипа, favicon и кастомных рингтонов переведена на `system_assets_store_upload(...)` с хранением в `public/system/branding` и `public/system/sounds`.
Релиз v3.6.13
В настройках переработан раздел `Внешний вид`: вместо разрозненных пунктов `Внешний вид профиля` и `Внешний вид сайта` появился единый раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). · Для глобального оформления сайта добавлены готовые профили внешнего вида (несколько пресетов под разные сценарии: чистый, рабочий, чтение, мягкий, ночной, psychedelic). · Добавлен helper `ui_appearance_profiles()` в `app/bootstrap.php` с готовыми профилями оформления и пакетами значений для `ui_*` настроек. · В `views/admin_settings.php` объединена навигация дизайна в один top-level `Внешний вид`, добавлен UI выбора/подстановки профиля оформления и обновлены кириллические шрифтовые опции.
Релиз v3.6.14
Исправлен UX профиля: кнопка `Написать` больше не отображается на собственной карточке профиля. · У вложений постов в обычном просмотре убраны кнопки `Удалить`: удаление доступно только в режиме редактирования поста. · В `views/profile.php` кнопка перехода в чат скрыта для `is_self`. · Из обычного рендера вложений в `views/profile.php` удалены формы `post_attachment_delete`; удаление оставлено в edit-блоке (`js-del-att`).
Релиз v3.6.15
В личном разделе `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. · Для публичной страницы профиля добавлена персональная настройка вида для гостей: `показывать боковое меню`, `скрывать боковое меню`, `скрывать боковое меню и шапку сайта`. · В `users` добавлены персональные UI-поля `ui_sidebar_mode` и `guest_profile_chrome_mode` (миграции в `app/migrations.php`). · В `index.php` (`settings`) сохранение пользовательских настроек расширено: добавлен `user_update_ui_prefs(...)` и синхронизация значений в session snapshot.
Релиз v3.6.16
В мессенджере добавлено контекстное меню сообщения по правой кнопке мыши и по удержанию на мобильных устройствах. · Меню действий сообщения теперь включает `Изменить`, `Удалить`, `Цитировать` и `Реакция` (с выбором emoji). · Добавлена таблица `message_reactions` (MySQL/SQLite) и миграции/индексы в `app/migrations.php`. · В `app/chat.php` добавлены batch-подгрузка реакций для пачек сообщений (`chat_messages_payload_for_client`) и `message_reaction_toggle(...)`.
Релиз v3.6.17
В мессенджере у сообщений добавлена маленькая галочка статуса прочтения (`прочитано / не прочитано`). · Галочка отображается у ваших сообщений и обновляется в диалоге автоматически, когда собеседник читает чат. · В `app/chat.php` в payload сообщений добавлен `is_read`, а также helper `conversation_last_read_sent_message_id(...)` для лёгкого read-receipt sync. · В `chat_send_async` и `chat_messages_poll` (`index.php`) добавлен `read_upto_own_id`, чтобы фронт мог обновлять статусы уже отрисованных сообщений без перезагрузки.
Релиз v3.6.18
В контекстное меню сообщения мессенджера добавлен пункт `Будильник` (пинг-напоминание). · Будильник доступен для ваших сообщений и отправляет повторное уведомление собеседнику только если сообщение ещё не прочитано. · Добавлен route `chat_message_nudge` в `index.php` с проверками: сообщение принадлежит текущему пользователю, находится в этом диалоге и ещё не прочитано. · В `app/push.php` добавлен `push_notify_chat_message_reminder(...)` с отдельным типом `chat_nudge` и dedupe tag по сообщению.
Релиз v3.6.19
Начато внедрение голосовых сообщений в мессенджер: добавлена красная кнопка микрофона и аккуратное окно записи. · Голос записывается прямо в браузере/на устройстве и прикрепляется к сообщению как аудио-вложение. · В `views/chat.php` добавлены voice-recorder modal, UI состояния записи и интеграция с `MediaRecorder` (MVP) без изменения keyboard/fullscreen геометрии чата. · Записанный blob прикрепляется через существующий `chatFileInput` (`DataTransfer`) и уходит в уже существующий backend upload flow `chat_send_async` / `message_send`.
Релиз v3.6.20
Добавлен глобальный preloader при загрузке страниц сайта: пользователь видит аккуратный индикатор загрузки вместо “пустого” экрана. · Для PWA добавлен отдельный режим preloader `Идёт установка приложения…` при установке через системную кнопку. · В `views/partials/head.php` добавлен theme-aware overlay `#tsoyPreloader` (общий для сайта и установщика), работающий в светлой/тёмной теме без жёстко тёмного фона. · В `views/partials/scripts.php` добавлен runtime `window.__TSOY_PRELOADER` (show/hide/set) с автоскрытием после загрузки, показом на внутренних переходах и submit-формах (кроме AJAX submit с `preventDefault`).
Релиз v3.6.21
Исправлено переключение разделов в настройках: секции теперь открываются без ощущения полной перезагрузки страницы. · В `Контактах` длинные имена пользователей больше не раздвигают и не перестраивают иконки действий: текст ужимается/переносится внутри текстовой зоны, а кнопки остаются на месте. · В `views/admin_settings.php` клики по боковому меню настроек переведены на client-side section switch (`history.pushState`) вместо обязательной навигации по `settings_admin_*` route; `form action` динамически переключается по секции, поэтому сохранение остаётся корректным. · В `views/contacts.php` добавлены отдельные классы текстовой зоны (`contacts-person-*`), `contacts-actions` переведён в `nowrap`/`flex-shrink:0`, а длинные имена ограничены в 1–2 строки без сдвига иконок.
Релиз v3.6.22
Hotfix preloader: убран автопоказ на каждый внутренний клик, поэтому переключение секций настроек и переходы между чатами больше не должны “подвисать” из-за overlay. · Preloader сохранён там, где он реально полезен: первичная загрузка страницы, установка сайта и установка PWA. · В `views/partials/scripts.php` глобальный preloader переведён в explicit-flow режим: отключён автоперехват всех внутренних ссылок и обычных submit-форм. · Автопоказ preloader оставлен только для `install.php` submit и для форм с `data-preloader=\"1\"`; PWA install flow (`beforeinstallprompt`) сохранён отдельно.
Релиз v3.6.23
В `Профиле` длинные тексты в карточках друзей/страниц и в постах ведут себя аккуратнее: текст ужимается/переносится внутри своей зоны и не ломает действия/бейджи. · В `install.php` добавлена мини-анимация этапов установки (БД → миграции → админ → готово) с синхронизацией текста в preloader. · В `views/profile.php` добавлены clamp/overflow правила для карточек друзей/страниц и фикс action-зон в постах, чтобы длинные строки не выталкивали элементы интерфейса. · В `install.php` реализован submit-time stepper без изменения backend-логики: этапы анимируются на клиенте и обновляют `__TSOY_PRELOADER` в режиме `install-site`.
Релиз v3.6.24
Hotfix preloader: страницы `Профиль` и `Мессенджер` открываются заметно быстрее, overlay загрузки больше не ждёт долго все картинки/медиа. · Preloader теперь скрывается на этапе готовности DOM, а не только после полного `window.load`. · В `views/partials/scripts.php` логика initial preloader boot переведена на `DOMContentLoaded`/`interactive` + `requestAnimationFrame`, чтобы не блокировать UI на медиа-насыщенных страницах. · `window.load` и `pageshow` оставлены только как fallback-сигналы; добавлен hard fail-safe timeout на случай странных браузерных зависаний событий.
Релиз v3.6.25
Hotfix голосовых сообщений: голосовые `.webm` в мессенджере теперь отображаются плеером, а не только ссылкой на файл. · Фикс работает и для уже отправленных голосовых (по имени `voice_message_*`), и для новых записей. · В `app/files.php` добавлена нормализация MIME для browser voice-notes (`voice_message_*`), чтобы `.webm/.ogg/.m4a` не сохранялись как generic/video MIME. · В `app/chat.php` добавлен helper `chat_file_is_audio_like(...)`, а payload чата теперь отдаёт `file_is_audio` для корректного client render старых и новых голосовых.
Релиз v3.6.26
На главной странице блок недавних файлов больше не растягивает экран вниз: по умолчанию показываются первые 3 файла. · Остальные файлы открываются кнопкой `Показать ещё файлы` (порциями по 3), как в разделе новостей. · В `views/home.php` лента файлов переведена на существующий механизм `data-load-more-root` из `views/layout.php` без добавления нового JS-кода. · Для элементов файлов добавлено серверное начальное скрытие (`d-none`) после первых 3 записей, чтобы список был компактным сразу при рендере страницы.
Релиз v3.6.27
Hotfix голосовых сообщений в мессенджере: voice-notes отображаются компактной одной строкой без второй строки с именем файла. · Визуал голосового сообщения стал тоньше и аккуратнее, ближе к обычной строке сообщения. · В `views/chat.php` voice-note рендер (`voice_message_*`) уже использует отдельный inline-layout без file-link; в релиз включён hotfix компактности CSS (`.chat-voice-inline-row`, `.chat-audio-clip.is-voice-note`). · Серверный и polling JS рендеры голосовых сообщений синхронизированы: для voice-notes не выводится отдельная строка имени файла.
Релиз v3.6.28
Голосовые сообщения в мессенджере: один тап по микрофону запускает запись, повторный тап останавливает запись и сразу отправляет голосовое. · Если запись не удалось отправить автоматически, голосовое остаётся прикреплённым в composer и можно отправить вручную. · В `views/chat.php` обычный click/tap микрофона переведён на toggle-логику записи (`start/stop+auto-send`) без изменения mobile composer/fullscreen геометрии. · Добавлен helper программной отправки через существующий async submit (`chat_send_async`) после авто-прикрепления voice blob в composer.
Релиз v3.6.29
Голосовые сообщения в чате теперь воспроизводятся одинаково на ПК и телефоне: компактной одной кнопкой play/pause. · У voice-note больше нет зависимости от урезанных native audio-controls браузера на десктопе. · В `views/chat.php` voice-notes (`voice_message_*`) переведены на custom mini-player (кнопка + hidden audio) в server-side и polling-render. · Добавлена JS-делегация управления воспроизведением (play/pause, синхронизация иконки, автопауза предыдущего голосового).
Релиз v3.6.30
В `Настройки -> Внешний вид` добавлены персональные настройки preloader: режим (`умный / только установка-PWA / выключить`), компактный вид и показ текста. · Preloader теперь можно настроить под себя по каждому профилю аккаунта (профиль = отдельный user). · В `users` добавлены персональные UI-поля preloader (`ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text`) с загрузкой в session snapshot и применением в `views/partials/scripts.php`. · В `views/partials/head.php` добавлены вариации preloader (`compact`, скрытие текста), а runtime учитывает пользовательский режим без ломки install/PWA сценариев.
Релиз v3.6.31
Hotfix голосовых сообщений на телефоне: mini-player voice-note снова стабильно воспроизводится по тапу. · Поведение mini-player синхронизировано для mobile/desktop (play/pause одной кнопкой). · В `views/chat.php` для voice mini-player добавлен mobile-safe `touchend` handler с подавлением дубля `click`, чтобы iPhone/Safari не терял тап. · Скрытый `<audio>` переведён с `display:none` на visually-hidden класс; добавлен `audio.load()` перед `play()` для лучшей совместимости мобильных браузеров.
Релиз v3.6.32
В Брендинге добавлена отдельная настройка `Иконка PWA` (опционально) для установленного приложения. · Если PWA-иконка не задана, приложение теперь использует `favicon`, а затем `лого` как fallback. · Route `index.php?r=manifest` теперь динамически подменяет `icons` (и shortcut icons) из настроек брендинга вместо жёстких `/public/icons/...`. · В `views/partials/head.php` `apple-touch-icon` переведены на динамический PWA icon с cache-bust, а `manifest` cache-bust учитывает смену иконки.
Релиз v3.6.33
В PWA исправлен просмотр файлов: теперь файл открывается во встроенной странице-просмотрщике с кнопкой `Назад`, а не “захватывает” приложение без пути назад. · Кнопка `Открыть` в файловом проводнике тоже использует этот встроенный просмотр в standalone/PWA. · Добавлен route `index.php?r=file_viewer` с безопасной проверкой доступа к файлу и возвратом по `back` URL. · В `views/partials/scripts.php` добавлен standalone-PWA перехват ссылок `index.php?r=view&id=...` с перенаправлением во встроенный просмотрщик вместо raw-file response.
Релиз v3.6.34
Hotfix mini-плеера голосовых на телефоне: воспроизведение по тапу снова стабильно запускается. · Поведение mini-player выровнено между iPhone/Android и ПК (одна кнопка play/pause). · В `views/chat.php` mini-player получил прямые обработчики `touchend/click` на кнопке (а не только делегирование через контейнер сообщений) с защитой от двойного срабатывания. · Убран рискованный pre-play `audio.load()` как основной путь; добавлен fallback reload только при ошибке `play()`.
Релиз v4.0.0
Новый формат приложения `messenger`: отдельный упрощённый режим только для Контактов и Мессенджера с прямым открытием чата. · Страница `Админ → Пользователи` полностью переработана: аккаунт и его профили теперь управляются в одной карточке. · В модель пользователей добавлены `app_mode`, `group_id`, `group_role`, `allow_multiprofile`, `admin_password_hint`; добавлены таблицы `groups`, `group_members`, `group_bridges` и миграции/индексы для них. · Реализована backend-видимость по группам и мостам в `users_directory`, `contacts_list`, `conversation_get_or_create`, `conversations_for_user` и проверках `chat_start`/добавления контактов.
Релиз v4.1.0
Управление группами и мостами вынесено в отдельную страницу `Дашборд → Группы и мосты` с полным управлением: создание, переименование, удаление групп и мостов, просмотр участников. · Страница `Пользователи` очищена от группового управления, оставлены только аккаунты и создание; добавлена ссылка на новую страницу групп. · Добавлены backend-функции `group_rename()`, `group_delete()`, `group_bridge_delete()` в `app/users.php` для полного CRUD-управления группами и мостами. · Новый route `admin_groups` в `index.php` с POST-обработчиками: `create_group`, `rename_group`, `delete_group`, `set_bridge`, `delete_bridge`.
Релиз v4.2.0
В мессенджере при записи голосового сообщения появляется красная кнопка-корзина для отмены записи (как в Telegram). Работает и при тапе, и при удержании. · Добавлена функция «Удалить у всех»: отправитель может удалить своё сообщение не только для себя, но и для собеседника. · Добавлена кнопка `#voiceCancelBtn` (`.chat-voice-cancel-btn`) в inputbar мессенджера; появляется при `voiceTapRecording`/`voiceHoldRecording`, вызывает `voiceRecResetState()` для отмены. · В `app/chat.php` добавлена `message_delete_for_all()` — физическое удаление сообщения и его реакций; доступно только отправителю.
Релиз v4.3.0
Создана отдельная страница «Новости» со всеми админ- и системными новостями, пагинацией и кнопкой «Показать ещё». · На дашборде в блоке «Новости» теперь показываются только 2 последних записи и ссылка «Все новости →». · Создан `views/news.php` — standalone-страница новостей с `page_top`, раздельными блоками admin/system news и load-more (initial=10). · Добавлен маршрут `case "news"` в `index.php` затягивающий `views/news.php`.
Релиз v4.4.0
Администрирование новостей вынесено из дашборда сотрудников на отдельную страницу с полным CRUD (создание, чтение, редактирование, удаление). · Файловый проводник «Мои файлы» полностью переписан: карточный/списочный вид, drag-n-drop файлов в папки, зона загрузки, контекстное меню, иконки по типу файла, переключатель grid/list. · В `app/news.php` добавлены `news_get()` и `news_update()` для CRUD новостей. · В `index.php` добавлен маршрут `news_update` (POST, csrf, audit_log).
Релиз v4.5.0
Мессенджер переработан в стиле Telegram: кнопка «корзина» при записи голосового теперь слева, заголовок чата стал overlay поверх сообщений (больше полезной площади), упрощённый хедер (только «Назад» + имя/аватар). · Нажатие на имя/аватар в чате открывает карточку пользователя (Telegram-style slide-in панель) с действиями: звонок, ссылка, профиль, очистить чат. · `views/chat.php` — voiceCancelBtn перемещён перед attachBtn в HTML (trash слева при записи). · `views/chat.php` — заменён `.chat-dialog-head` на `.chat-overlay-head` (position: absolute, backdrop-filter, overlay поверх сообщений).
Релиз v4.6.0
Создана единая дизайн-система проекта (14 переиспользуемых компонентов): карточки, hover-эффекты, стеклянные панели, навигация, статусные индикаторы, зоны загрузки и др. · Unification поверхностных переменных (light/dark × soft/balanced/strong) — 6 тем теперь задаются в одном месте вместо дублирования в каждом view. · Создан `public/css/design-system.css` (382 строки, 14 компонентов): `.t-surface`, `.t-stat-card`/`.t-stat-grid`, `.t-card-hover`, `.t-info-card`, `.t-card-frosted`, `.t-section`/`.t-section-title`, `.t-page-border`, `.t-summary-grid`, `.t-status-pill`, `.t-list-hover`, `.t-status-dot`, `.t-sticky-bar`, `.t-nav-item`, `.t-upload-zone`. · В `views/partials/head.php` подключён `public/css/design-system.css` перед inline `<style>`.
Релиз v5.0.0
Система «Группы» переименована в «Домены» — организационные единицы теперь называются доменами. · Маршрут `admin_groups` → `admin_domains`; навигация, дашборд и все UI-тексты обновлены. · Миграция БД: таблицы `groups`→`domains`, `group_bridges`→`domain_bridges`, `group_members`→`domain_members`; колонки `group_id`→`domain_id`, `group_role`→`domain_role`, `is_global_group`→`is_root_domain`, `group_a_id`→`domain_a_id`, `group_b_id`→`domain_b_id`. · Поддержка MySQL и SQLite: `ALTER TABLE RENAME`, `RENAME COLUMN` / `CHANGE COLUMN` в зависимости от драйвера.
Релиз v5.1.0
Маршрут `dashboard` (файловый проводник) переименован в `skybox` — SkyBox, личное облачное хранилище. · Маршрут `staff` (панель администратора) переименован в `dashboard` — Дашборд. · `views/dashboard.php` → `views/skybox.php`; `views/staff.php` → `views/dashboard.php`; `views/admin.php` → `views/filehub.php`. · `index.php`: маршруты, capability map, case-блоки и все redirect/fallback URL обновлены.
Релиз v5.2.0
FileHub переписан на единый с SkyBox карточный интерфейс (grid/list, sidebar, поиск, breadcrumbs). · Выпадающее меню профиля полностью переработано: чистый список ссылок, компактное переключение профилей, убрана сетка кнопок. · `views/filehub.php` переписан с табличной разметки на `cloud-file-grid`/`cloud-file-card` из SkyBox. · `views/layout.php`: dropdown `.topbar-profile-menu` и модальное окно `#userProfilesModal` заменены новой разметкой с `.tpm-*` и `.upm-*` классами.
Релиз v5.3.0
Поле «Отображаемое имя» разделено на «Имя» и «Фамилия» — два отдельных поля повсюду в системе. · При регистрации теперь обязательно указать имя и фамилию. · Миграция: добавлены колонки `first_name` и `last_name` в таблицу `users`. · Колонка `display_name` сохранена для обратной совместимости — автоматически вычисляется из `first_name + last_name`.
Релиз v5.4.0
Настройка Preloader перенесена из личных настроек пользователя в глобальные настройки администратора (раздел «Дизайн»). · Push-подписки: автоматическая дедупликация устройств — при переподписке с того же устройства старая подписка заменяется. · Preloader: параметры `preloader_mode`, `preloader_compact`, `preloader_show_text` перенесены в таблицу `settings`. · Per-user параметры `ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text` больше не используются (колонки сохранены для совместимости).
Релиз v5.5.0
Защита от брутфорса: ограничение попыток входа (5 за 15 мин) с автоматической блокировкой по IP+логину. · Минимальная длина пароля — 8 символов (регистрация, смена пароля, создание пользователя). · Security headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS. · .htaccess deny для директорий `app/` и `storage/` — прямой доступ запрещён.
Релиз v5.6.0
Редактирование профиля: страница переверстана на CSS Grid — блоки «Смена пароля» и «Уведомления» теперь в боковой колонке справа (1fr + 380px). · Политики: галочки для admin и admin_tester разблокированы при редактировании global_admin. · Новые функции: `user_role_rank()`, `user_can_see_password()`, `user_get_password_hint()`, `domain_get_by_code()`, `domain_generate_short_code()`, `domain_regen_code()`. · `domain_create()` генерирует уникальный 3-char код вместо slug-транслитерации.
Релиз v5.7.0
Дашборд: полностью переработанная панель с KPI-виджетами — пользователи, сообщения, файлы, контент, звонки, аудит. · Дашборд: лента последних действий (10 записей) с иконками по типу операции и карточка «Новые пользователи». · Новая функция `dashboard_stats()` в `app/health.php` — агрегированная статистика из 15+ таблиц за один вызов. · Настройки дашборда: `dashboard_widgets_json`, `dashboard_refresh_interval`, `dashboard_show_activity`, `dashboard_compact` в `settings_defaults()`.
Релиз v5.8.0
Настройки: иконки Bootstrap Icons у каждого пункта сайдбара (палитра, щит, шестерёнка, телефон, БД и др.) во цветных плашках. · Настройки: быстрый поиск по всем разделам — поле с debounce-фильтрацией, счётчик совпадений, горячая клавиша Ctrl+K. · CSS: новые классы `.admin-settings-search`, `.admin-settings-side-icon`, `.admin-settings-section-hdr`, `.js-dirty-badge`, `.admin-settings-kbd-hint`. · CSS: анимация `settingsFadeIn` (opacity + translateY), `savebarPulse` для индикации dirty-state.
Релиз v5.8.1
Удаление пользователей: исправлен баг — удалённые пользователи теперь скрываются из основного списка, кнопка «Показать удалённых» для просмотра. · Удаление пользователей: бейдж «удалён» и кнопка «Восстановить» в карточке пользователя. · `users_accounts_with_profiles()` принимает параметр `$includeDeleted` — по умолчанию скрывает `is_deleted=1`. · Новая функция `user_restore()` для восстановления soft-deleted пользователей.
Релиз v5.8.2
Полное удаление аккаунта: администратор может безвозвратно удалить пользователя и все его данные (сообщения, файлы, посты, профили). · Полное удаление аккаунта: кнопка «Полное удаление» в панели управления пользователями с усиленным подтверждением. · Новая функция `user_delete_hard()` — полная очистка всех данных пользователя из 31+ таблиц и файловой системы (аватары, обложки, загруженные файлы). · Ручная очистка таблиц без FK CASCADE: `domain_members`, `short_links`, `boards`, `rtc_*` таблицы; nullify `created_by_user_id` в `domains` / `domain_bridges`.
Релиз v5.8.3
База данных: новая опция «Подключиться без миграции» — позволяет переключить конфиг на существующую БД с данными без переноса и без удаления данных. · Предотвращает потерю данных при повторном подключении к MySQL после обновления сайта (когда конфиг сбрасывается на SQLite). · Параметр `skip_migration` в admin_db POST-обработчике: проверяет подключение, запускает `ensure_schema()` (CREATE IF NOT EXISTS + инкрементальные миграции) и `ensure_mysql_utf8mb4()`, но НЕ вызывает `migrate_database()` / `db_truncate()`. · Разрешена отправка формы при `target === current` в режиме reconnect (для переподключения к той же БД).
Релиз v5.8.4
Доменная изоляция: администратор домена теперь видит в разделе «Пользователи» только пользователей своего домена, а не всех. · Новая политика «Мосты для доменных администраторов» (Настройки → Доступ): не видеть / только просмотр / полный доступ к пользователям мостовых доменов. · `users_accounts_with_profiles()` принимает `?array $filterDomainIds` — SQL фильтрует `domain_id IN (…)`. · Новые хелперы: `is_root_domain_admin()`, `admin_bridged_domain_ids()`, `admin_visible_domain_ids()`, `admin_can_manage_user()`, `admin_can_view_user()`.
Релиз v5.8.5
Дашборд: статистика фильтруется по домену — администратор домена видит метрики только своего домена, а не всего сервиса. · Политики: доменные политики (мосты, корневой админ, домен по умолчанию) перенесены из Настроек на страницу «Политики» для единообразного управления. · Новая функция `dashboard_stats_for_domains(array $domainIds)` в `app/health.php` — статистика, ограниченная набором доменов. · `views/dashboard.php` использует `admin_visible_domain_ids()` для выбора `dashboard_stats()` или `dashboard_stats_for_domains()`.
Релиз v5.8.6
Мессенджер: полная переработка интерфейса в стиле Telegram — боковой список диалогов, панель переписки, адаптивная мобильная раскладка. · Мессенджер: голосовые сообщения, эмодзи-пикер, вложения файлов из облака и устройства. · views/chat.php: 6589 → 2410 строк (−63%), IIFE-архитектура с 23 секциями, 98 функций, 51 слушателей событий. · views/profile.php: 2338 → 1247 строк (−47%), CSS-переменные через .pf-* namespace, Bootstrap 5.3.3 интеграция.
Релиз v5.8.7
Исправлена ошибка FK-ограничения при переключении с SQLite на MySQL: таблица news больше не требует существующего пользователя для системных записей. · news: author_user_id изменён с INT NOT NULL на INT NULL DEFAULT NULL; FK-ограничение fk_news_user удалено. · Миграция Stage 10.21: DROP FOREIGN KEY, MODIFY COLUMN, UPDATE author_user_id = 0 → NULL для существующих MySQL-установок.
Релиз v5.8.8
Исправлена ошибка «Incorrect string value» при переключении на MySQL: эмодзи в новостях и чейнджлоге теперь корректно сохраняются. · ensure_mysql_utf8mb4() вызывается ДО ensure_schema() — SET NAMES utf8mb4 теперь действует до любых INSERT. · Список таблиц в ensure_mysql_utf8mb4 расширен с 21 до 39 (добавлены domains, boards, push_*, short_links, profile_media_items и др.).
Релиз v5.8.9
Профиль: исправлено отображение аватара и обложки (неверное имя поля avatar_file_id → avatar_path). · Мессенджер: сообщения теперь отображаются в цветных облачках (свои — акцентные, чужие — серые). · profile.php: avatar_file_id → avatar_path, cover_file_id → cover_path (6 мест). · chat.php: добавлены CSS-классы msg-own / msg-other на элементы сообщений (PHP + JS).
Релиз v5.8.10
Мессенджер: окно чата теперь корректно помещается в экран на любом устройстве (ПК и мобильные). · layout.php: content-canvas-mode → flex column с height:100dvh для корректного заполнения viewport. · chat.php: messenger-shell заменён calc(100dvh-140px) на flex:1 + min-height:0 — автоматическое заполнение оставшегося пространства.
Релиз v5.8.11
Профиль: кнопка «Написать» теперь открывает диалог с пользователем, а не пустой мессенджер. · Мессенджер: заголовок «Мессенджер» скрывается когда активен диалог (и на ПК, и на мобильных) — больше места для сообщений. · profile.php: ссылка «Написать» peer= → user_id= (матчит параметр в chat_start роуте). · chat.php: .chat-page-head скрывается на всех брейкпоинтах когда есть активный чат (display:none!important).
Релиз v5.8.12
Мессенджер: заголовок скрыт на мобильных — диалоги занимают весь экран. · Мессенджер: кнопка действий (⋯) теперь внутри облачка сообщения, а не за его пределами. · chat.php: .chat-page-head display:none!important на @media ≤991.98px (скрыт всегда на мобильных). · chat.php: .msg-actions-btn перенесён внутрь bubble (top:.25rem right:.25rem вместо left/right:-.8rem).
Релиз v5.8.13
Мессенджер: панель ввода теперь всегда видна на экране, страница не прокручивается. · layout.php: html/body/app-shell получают height:100dvh + overflow:hidden через :has(.content-canvas-mode). · layout.php: sidebar ограничен 100dvh с overflow-y:auto в canvas-режиме.
Релиз v5.8.14
Мессенджер: исправлены read receipts — отметка «прочитано» снова обновляется без перезагрузки страницы. · Мессенджер: исправлен экран звонка — окно звонка теперь корректно открывается и закрывается. · index.php: добавлен JSON endpoint `chat_mark_read` (CSRF + проверка участника диалога). · index.php: добавлен route `chat_file` для `admin_chat_view` с проверкой прав `admin/users`.
Релиз v5.8.15
Мессенджер: панель ввода закреплена внизу экрана на ПК и мобильных, без провала по высоте. · Мессенджер: кнопки отправки/микрофона снова работают по ожидаемой логике (пусто — микрофон, есть текст — отправка). · views/chat.php: выровнена мобильная/desktop вёрстка compose-зоны, исправлены conditionals рендера send/mic. · views/chat.php: интегрирован Picmo (`public/vendor/picmo/*`) вместо тяжёлого рантайма старого picker.
Релиз v5.8.16
Звонки в мессенджере: исправлен сценарий «Связь: ожидание» без подключения — звонки снова устанавливаются. · Мессенджер на телефоне: устранён правый зазор, чат и зона ввода снова растягиваются на всю ширину экрана. · index.php: call/rtc роуты добавлены в whitelist messenger-mode (`call_start/call_poll/call_signal_send/...`) — больше нет редиректа в HTML для JSON API. · app/chat.php: `call_is_participant()` получил fallback на `caller/callee` для legacy/частично мигрированных записей `rtc_call_members`.
Релиз v5.8.17
Мобильный чат: устранён нижний «подбородок» и восстановлена корректная полноэкранная геометрия в mobile/PWA. · Мессенджер: новые сообщения снова появляются строго снизу, история подгружается только вверх. · views/chat.php: mobile fullscreen переведён на единый safe-area (компенсация только в composer), `body.chat-mobile-fullscreen` больше не дублирует нижний inset. · views/chat.php: `chatJumpBottom` вынесен из потока сообщений; `appendMessages()` всегда добавляет в конец, `prependMessages()` — только в начало.
Релиз v5.8.18
Обновления больше не переключают рабочий сайт с MySQL на SQLite после распаковки релиза. · Первичный запуск корректно открывает установщик, если реальная конфигурация БД отсутствует. · scripts/make-release.ps1: исключено принудительное добавление `storage/config.php` в релиз (опционально только через `-IncludeRuntimeConfig`). · app/core.php: `is_installed()` переведён на валидацию конфигурации (`mysql` поля / наличие sqlite-файла), а не на простой факт существования `storage/config.php`.
Релиз v5.8.19
Мобильный мессенджер: исправлена геометрия fullscreen-чата на телефоне — убран нижний «подбородок», зона ввода прижата к низу и корректно следует за клавиатурой. · Мессенджер: устранены повторяющиеся day-divider при отправке новых сообщений в текущий день. · views/chat.php: mobile fullscreen переведён на `inset + --chat-vv-bottom` (keyboard gap) вместо `top/height`, убраны лишние `100vw` ограничения и правый зазор. · views/chat.php: day-divider логика нормализована через `normalizeDayToken()` + `lastRenderedDayToken()`; `appendMessages()` больше не создаёт лишние разделители дат.
Релиз v5.8.20
Исправлен критичный сбой `CSRF token mismatch` после регистрации/авторизации в мобильных webview (включая Telegram/iOS). · Формы входа/регистрации/спец-регистрации и инсталлятора стали устойчивее к возврату из кеша страницы. · app/bootstrap.php: CSRF переведён на rolling-пул токенов (`csrf_tokens`) + восстановление из cookie при потере session. · app/bootstrap.php: добавлен fallback по нескольким именам CSRF-cookie (`__Host-*` и non-host) для mixed HTTPS/proxy окружений.
Релиз v5.8.21
Версия на сайте теперь корректно обновляется после деплоя релиза на Linux-серверы. · Тех. релиз и системная новость для текущей версии автоматически появляются в интерфейсе без ручного добавления. · scripts/make-release.ps1: сборка ZIP переписана на явное добавление файлов с POSIX-путями (`/`) вместо Windows-разделителей (`\`). · app/news.php: добавлена `news_sync_builtin_releases_for_version(APP_VERSION)` — дозапись встроенных `system/changelog` записей для текущей версии в существующие БД.
Релиз v5.8.22
Исправлена диагностика обновлений: теперь легко проверить, какая версия реально работает на сервере. · Уточнён и зафиксирован безопасный деплой-процесс для production, чтобы версия в подвале и техрелизы всегда обновлялись. · index.php и install.php: добавлен HTTP-заголовок `X-TSOY-Version` с текущим `APP_VERSION` для быстрой проверки фактической версии после деплоя. · README.md: добавлены инструкции проверки версии через `curl -I` и очистки артефактов старых Windows-архивов (`*\\*`) на Linux.
Релиз v5.8.23
Стабилизирована работа проекта за reverse-proxy/CDN: HTTPS-ссылки и cookie теперь формируются корректно в проксированных окружениях. · Снижён риск проблем с логином/CSRF/выходом из-за неверного определения схемы запроса. · app/core.php: добавлены `request_is_https()` и `request_scheme()` с поддержкой `HTTPS`, `X-Forwarded-Proto`, `X-Forwarded-SSL`, `Front-End-Https`. · app/bootstrap.php, app/auth.php, app/utils.php: secure-cookie логика переведена на единый helper (session/theme/csrf/guest token).
Релиз v5.8.24
Исправлен критичный фатал после деплоя: сайт снова открывается штатно (без `Call to undefined function request_is_https()`). · app/bootstrap.php: загрузка `app/core.php` перенесена в начало файла, до первого вызова `request_is_https()`. · Исправлен порядок инициализации bootstrap для совместимости с production-окружениями при `require_once app/bootstrap.php` из `index.php`.
Релиз v5.8.25
Админка БД: добавлен анализ потенциально неиспользуемых колонок прямо в разделе `/index.php?r=admin_db`. · Удаление колонок переведено в безопасный режим: только после явного подтверждения и только для проверенных случаев. · app/admin_maintenance.php: добавлены `admin_db_unused_columns_report()` и `admin_db_drop_column()` с эвристическим сканом кода проекта. · Проверки удаления: защита критичных имён (`id`, `*_id`, `*_at`), блокировка при индексах/PK/FK и повторная проверка использования в коде.
Релиз v5.8.26
Админка БД: упрощён процесс массового удаления ненужных таблиц. · Теперь можно одним действием удалить сразу несколько выбранных таблиц с единым подтверждением. · app/admin_maintenance.php: добавлены `admin_db_unused_tables_report()` и `admin_db_drop_tables_batch()`. · Пакетное удаление защищено проверками: миграционное управление таблицей, сигналы использования в коде и внешние ключи.
Управление жизненным циклом комнат звонков
- Создатель может завершать комнату звонка. - Админ может закрывать и удалять публичные комнаты.Читать полностью
- Создатель может завершать комнату звонка.
- Админ может закрывать и удалять публичные комнаты.
Оптимизация старта интерфейса
- Перенесены второстепенные polling-задачи в idle-фазу. - Снижен пиковый отклик главного потока при открытии страниц.Читать полностью
- Перенесены второстепенные polling-задачи в idle-фазу.
- Снижен пиковый отклик главного потока при открытии страниц.
Hotfix 2.3.9: стабилизация текста
- Проведена чистка поврежденных строк интерфейса. - Обновлены сообщения и статусы в основных маршрутах.Читать полностью
- Проведена чистка поврежденных строк интерфейса.
- Обновлены сообщения и статусы в основных маршрутах.
Hotfix 2.3.10: исправление кодировки
- Удалены поврежденные текстовые строки из ключевых экранов. - Исправлены уведомления профиля, чатов и панели. - Подготовлена база для финальной стабилизации.Читать полностью
- Удалены поврежденные текстовые строки из ключевых экранов.
- Исправлены уведомления профиля, чатов и панели.
- Подготовлена база для финальной стабилизации.
Hotfix 2.3.11: полная правка кодировки
- Восстановлен index.php из стабильной базы без поврежденных строк. - Исправлены системные сообщения и заголовки в маршрутах и админ-разделах. - Очищены тексты новостей: теперь только нормальная кириллица.Читать полностью
- Восстановлен index.php из стабильной базы без поврежденных строк.
- Исправлены системные сообщения и заголовки в маршрутах и админ-разделах.
- Очищены тексты новостей: теперь только нормальная кириллица.
Hotfix 2.3.12: исправлен экран звонка по ссылке
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room. - Исправлены поврежденные символы в views/call_room.php и views/admin.php. - Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.Читать полностью
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room.
- Исправлены поврежденные символы в views/call_room.php и views/admin.php.
- Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.
Policy 2.3.13: UTF-8 без BOM всегда
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM. - Добавлен .editorconfig с фиксированным charset=utf-8. - В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.Читать полностью
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM.
- Добавлен .editorconfig с фиксированным charset=utf-8.
- В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.
Call Quality 2.3.14: стабильнее звук и соединение
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках. - Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate. - Включено автоматическое ICE-переподключение при `d…Читать полностью
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках.
- Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate.
- Включено автоматическое ICE-переподключение при `disconnected/failed`, чтобы звонок не обрывался на смене сети.
Call Stability 2.3.15: быстрый отклик без «убийства» сервера
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов. - Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий. - Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.Читать полностью
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов.
- Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий.
- Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.
Admin DB Tools 2.3.16: импорт/экспорт БД и безопасная очистка
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта. - Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads. - Импорт выполн…Читать полностью
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта.
- Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads.
- Импорт выполняется с полной заменой данных таблиц приложения; перед импортом рекомендуется сделать экспорт БД и копию папки storage/.
Hotfix 2.3.17: emoji снова отправляются в мессенджере (MySQL utf8mb4)
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях. - Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`). - Добавлена автоматическая проверка и конвертация старых таблиц в ut…Читать полностью
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях.
- Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`).
- Добавлена автоматическая проверка и конвертация старых таблиц в utf8mb4 при запуске сайта (только при необходимости, без постоянных ALTER).
Admin DB 2.3.18: диагностика utf8mb4 / emoji для MySQL
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji. - Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть). - Это диагностический ре…Читать полностью
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji.
- Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть).
- Это диагностический режим (только чтение метаданных), чтобы быстро проверять состояние после миграций и импортов.
Messenger Emoji 2.3.19: полноценный picker + недавние + клоун 🤡
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление. - Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме). - В быстрый набор добавлен клоун 🤡; вы…Читать полностью
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление.
- Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме).
- В быстрый набор добавлен клоун 🤡; выбранные emoji сохраняются в недавние (localStorage).
Messenger Hotfix 2.3.20: сообщения видны сразу в открытом чате
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог. - Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы. …Читать полностью
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог.
- Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы.
- Если пользователь находится внизу чата, новые сообщения автоматически прокручиваются в видимую область.
Messenger Hotfix 2.3.21: список диалогов обновляется без перезахода
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата. - Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся…Читать полностью
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата.
- Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся данных.
- В открытом чате после прихода нового сообщения автоматически ускоряется обновление списка диалогов для быстрого показа превью и бейджей.
Messenger UI 2.3.22: PWA-интерфейс ближе к Telegram/WhatsApp
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается. - Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и комп…Читать полностью
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается.
- Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и компактнее на телефоне.
- UI-рефактор выполнен без изменения рабочих API сообщений и звонков, чтобы не ломать стабильность проекта.
Hotfix 2.3.23: стабильная авторизация (PWA/мобильные сессии)
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт. - Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS). - Добавлено скользящее продление session cook…Читать полностью
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт.
- Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS).
- Добавлено скользящее продление session cookie и project-local хранение сессий (storage/sessions), чтобы уменьшить влияние server-wide очистки сессий.
Messenger UX 2.3.24: фиксированная форма + lazy history x10 + glass mobile
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа. - История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а н…Читать полностью
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа.
- История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а новые сообщения подгружаются вниз компактными пачками.
- На мобильном/PWA экране восстановлен стеклянный визуальный стиль мессенджера (glass-эффект).
Messenger Hotfix 2.3.25: последние сообщения + форма ввода видны сразу
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт. - Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна…Читать полностью
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт.
- Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна в окне чата.
- Дополнительно стабилизирован glass-вид мессенджера на телефоне/PWA после UI-рефакторинга.
Notifications Center 2.3.26: быстрые настройки + проверка доставки + mobile chat keyboard fix
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA. - Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Se…Читать полностью
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA.
- Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Service Worker + fallback на Notification API).
- В мессенджере на мобильных исправлен лишний отступ между клавиатурой и полем ввода: окно чата теперь синхронизируется с VisualViewport, поле ввода ведёт себя стабильнее.
Profile & Social 2.3.27: about-страница, лайки постов, загрузка файлов с устройства
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото). - В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников…Читать полностью
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото).
- В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников с устройства.
- В постах профиля добавлены лайки и кнопка «Ссылка на пост».
- Убраны дефолтные кнопки «Скачать/Магнит» под вложениями в ленте постов; ссылки на файлы показываются только если владелец явно разрешил скачивание.
- При создании и редактировании постов теперь можно прикреплять файлы напрямую с устройства, а не только выбирать из облака.
Hotfix 2.3.28: кириллица в центре уведомлений
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений. - Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).Читать полностью
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений.
- Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).
Hotfix 2.3.29: полная зачистка кракозябр в index.php + усиленный encoding-check
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`. - Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и уст…Читать полностью
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`.
- Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и устранён.
- Усилен `scripts/check-encoding.ps1`: поиск кракозябр теперь работает по кодовым точкам (`U+00C2/U+00C3/U+00D0/U+00D1`), чтобы такие случаи не проходили в релиз.
TSOY.CLOUD 3.0: большой апдейт профилей и мультипрофилей
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону. - `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользова…Читать полностью
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону.
- `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользователь сам решает, что показать в профиле.
- Полностью обновлён UX мультипрофилей в шапке: понятный dropdown с быстрым переключением и новая модалка управления профилями аккаунта (аватары, статусы, действия, выбор профиля для `/about`).
- Сохранена вся текущая логика проекта (посты, друзья, роли, about, мультипрофили), изменения сосредоточены на удобстве и визуале.
TSOY.CLOUD 3.1.0: новый конструктор страниц + единый файловый проводник для выбора медиа
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок. - Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через…Читать полностью
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок.
- Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через единый проводник файлов (папки, поиск, фильтры по типам).
- Раздел «Медиа» в профиле также переведён на тот же проводник для ручного наполнения галерей фото/видео/аудио.
- Подготовлена база для дальнейшего переиспользования этого picker-компонента в других разделах проекта.
TSOY.CLOUD 3.2.0: большой PWA-апдейт (уведомления, офлайн-кеш, desktop/mobile режим)
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile). - Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-увед…Читать полностью
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile).
- Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-уведомления без Service Worker.
- Файловый офлайн-кеш стал удобнее: кнопки офлайн-режима показывают актуальный статус уже закешированных файлов, подготовлен runtime API для управления кешем.
- Service Worker синхронизирован и усилен для PWA-сценариев (deep-link notificationclick, безопасная обработка Range-запросов для медиа).
TSOY.CLOUD 3.3.0: единая система оформления + компактный мессенджер
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными. - В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельна…Читать полностью
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными.
- В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельная плотность мессенджера.
- Мессенджер получил более компактные облака сообщений (в том числе Telegram-like режим) без вмешательства в мобильную геометрию поля ввода и клавиатуры.
- Дизайн-ручки реализованы через общие UI-токены и остаются совместимыми с PWA-режимом.
TSOY.CLOUD 3.3.1: мессенджер (единый проводник вложений + fix меню сообщений) и улучшенная связка с “Оформлением”
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX. - Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не пр…Читать полностью
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX.
- Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не прячется под соседними сообщениями.
- Настройки `Оформление` сильнее связаны с мессенджером: ширина контента работает в canvas-режиме, а плотность/контраст теперь заметно влияют на чат.
- Геометрия composer/клавиатуры в чате не менялась, чтобы не вернуть баг с “подбородком” на iPhone.
TSOY.CLOUD 3.3.2: центр уведомлений — сначала уведомления, потом настройки
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений. - Обновлён заголовок верхнего блока для более понятной логики экрана.Читать полностью
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений.
- Обновлён заголовок верхнего блока для более понятной логики экрана.
TSOY.CLOUD 3.3.3: контакты и мессенджер теперь в одном визуальном стиле
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек. - Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессендже…Читать полностью
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек.
- Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессенджер.
TSOY.CLOUD 3.3.4: единый проводник в профиле и нормальное админ-хранилище с папками
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов. - В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/П…Читать полностью
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов.
- В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/ПК работали стабильнее.
- Админский экран `/index.php?r=admin` переименован в «Хранилище проекта» и получил папочную структуру с фильтрами по владельцу и папке.
TSOY.CLOUD 3.3.5: профиль (двойные проводники/лишние кнопки) и mobile-fix клипсы в мессенджере
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник. - Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена». - Копирование ссылок на…Читать полностью
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник.
- Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена».
- Копирование ссылок на профиль и пост переведено на фоновый toast «Скопировано» вместо модального alert.
- В мессенджере клипса (`📎`) теперь открывается через явный JS fallback для mobile/iPhone сценариев.
TSOY.CLOUD 3.3.6: в конструкторе страниц появился блок «Таблица»
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц. - Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы. - Есть переключатель «первая строка — заголовки» для красивого отображен…Читать полностью
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц.
- Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы.
- Есть переключатель «первая строка — заголовки» для красивого отображения таблицы на публичной странице.
TSOY.CLOUD 3.4.0: полноценный Web Push (закрытый PWA/сайт) + индикатор качества звонков
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт. - Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Work…Читать полностью
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт.
- Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Worker, а доставка идёт через серверную очередь событий.
- В аудиозвонках добавлен индикатор качества связи (RTT, джиттер, потери, битрейт) с понятным статусом (`отлично / хорошо / средне / с помехами / переподключение`).
- Улучшена стабильность звонков: при проблемах соединения клиент выполняет мягкое переподключение и показывает актуальный статус связи.
TSOY.CLOUD 3.4.1: mobile fix мессенджера (вложения) и центрирование меню профиля
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата. - Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстк…Читать полностью
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата.
- Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстке чата.
- Меню профиля/переключения мультипрофилей в мобильной шапке теперь центрируется по экрану и больше не уезжает влево.
TSOY.CLOUD 3.4.2: hotfix навигации по уведомлениям (deep-link в источник)
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.). - Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относи…Читать полностью
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.).
- Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относительно пути приложения / service worker scope).
TSOY.CLOUD 3.4.3: информативные уведомления (сообщения + действия для звонка)
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог. - Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлен…Читать полностью
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог.
- Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлениях).
- Улучшены payload-данные push-уведомлений для более точной навигации и действий из PWA/Service Worker.
TSOY.CLOUD 3.4.4: настройки уведомлений в дашборде + улучшенный PWA update flow
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка. - Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос p…Читать полностью
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка.
- Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос persistent storage и toast-уведомления об обновлении.
- PWA runtime доработан: регистрация SW учитывает путь приложения, обновления можно проверять/применять через runtime API, а входящие звонки в открытом приложении используют настраиваемый рингтон.
TSOY.CLOUD 3.4.5: свои рингтоны уведомлений и звонка
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка. - Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу. -…Читать полностью
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка.
- Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу.
- Runtime уведомлений использует кастомные файлы в открытом приложении/PWA (с fallback на встроенные звуки, если браузер блокирует воспроизведение).
TSOY.CLOUD 3.5.0: stability-сборка (cleanup, техдолг, аккуратные оптимизации)
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода. - Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только…Читать полностью
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода.
- Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только внутри `public/sounds` и лимит размера загрузки (5 MB).
- Сборочные проверки стали чище и быстрее: `check-encoding.ps1` теперь игнорирует временные каталоги `tmp_*`, чтобы случайные backup-папки не шумели в чекапе.
TSOY.CLOUD 3.5.1: hotfix рингтонов на телефонах
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук. - Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложе…Читать полностью
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук.
- Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложения, поэтому работают корректнее в PWA/подпапках сайта.
- Добавлен `audio unlock` по первому взаимодействию пользователя для лучшей совместимости с мобильными autoplay-ограничениями браузеров.
TSOY.CLOUD 3.5.2: notifications reliability phase 1 (retry worker + диагностика)
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок. - В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные …Читать полностью
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок.
- В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные подписки, подписки с ошибками и состояния `dispatch_state`.
- Добавлен ручной запуск push worker из админки и CLI-скрипт `scripts/push-worker.php` для cron/daemon (`php scripts/push-worker.php --loop`).
TSOY.CLOUD 3.5.3: notifications reliability phase 2 (Web Push payload + fallback)
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт. - Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддержив…Читать полностью
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт.
- Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддерживается endpoint’ом/браузером или произошла ошибка шифрования.
- Service Worker стал устойчивее к payload-парсингу: сначала `json()`, затем `text()+JSON.parse()`, и только потом fallback на серверную очередь.
TSOY.CLOUD 3.5.4: диагностика push-устройств в админке + тест push по подписке
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки. - Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления н…Читать полностью
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки.
- Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления на конкретное устройство прямо из админки.
- Тестовая отправка использует payload Web Push с fallback на wake-push и обновляет статус подписки (`last_seen_at` / `last_error`) для быстрой диагностики.
TSOY.CLOUD 3.5.5: фильтры и управление push-подписками в админке
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`. - Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице. - Управление подп…Читать полностью
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`.
- Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице.
- Управление подписками выполняется отдельным admin-route с CSRF-проверкой, без конфликта с общей формой сохранения настроек.
TSOY.CLOUD 3.5.6: бренд уведомлений из настроек + статус последнего push-теста
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`. - В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки. - Тест push…Читать полностью
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`.
- В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки.
- Тест push по подписке теперь сохраняет результат в БД (`last_test_*`), чтобы было видно, где payload работает, а где происходит fallback.
TSOY.CLOUD 3.5.7: статистика реальной доставки push + бренд уведомлений из настроек
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). - Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по …Читать полностью
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса).
- Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по конкретной подписке.
- Заголовок уведомлений теперь подтягивается из настроек сайта (брендинг), а не остаётся захардкоженным `TSOY.CLOUD`.
TSOY.CLOUD 3.5.8: hotfix названия уведомлений (бренд из настроек)
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`. - Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`. - Серверные push-уведомления и клиентск…Читать полностью
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`.
- Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`.
- Серверные push-уведомления и клиентские fallback-уведомления приведены к одному правилу брендинга.
TSOY.CLOUD 3.5.10: сводка + мини-график доставки push (payload/fallback/error)
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток. - Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём п…Читать полностью
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток.
- Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём попыток за день.
- Для истории графика добавлена серверная дневная статистика доставок (`push_delivery_daily_stats`), которая заполняется при реальных отправках push.
TSOY.CLOUD 3.5.11: админ-настройки разбиты на понятные разделы
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам. - Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, зво…Читать полностью
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам.
- Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, звонки и диагностика`), чтобы не искать нужный блок в длинной ленте карточек.
- Навигация по секциям адаптирована для мобильных устройств: список разделов прокручивается горизонтально и остаётся удобным на узких экранах.
TSOY.CLOUD 3.5.12: hotfix навигации по разделам настроек
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта. - Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.Читать полностью
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта.
- Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.
TSOY.CLOUD 3.5.13: Android-style настройки (меню слева, раздел справа)
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел. - Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком. - Добавлена сов…Читать полностью
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел.
- Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком.
- Добавлена совместимость с hash-переходами (`#pwa-notify-admin`): при открытии ссылки автоматически показывается нужный раздел настроек.
TSOY.CLOUD 3.5.14: выбор часового пояса по Гринвичу в настройках системы
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями. - Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода. - Пол…Читать полностью
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями.
- Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода.
- Поле ручного ввода IANA-зоны сохранено для точной настройки региональных зон и нестандартных сценариев.
TSOY.CLOUD 3.5.15: role-aware настройки для всех + Android-style меню разделов
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin). - Настройки переведены в Android-style режим: слева список разделов, справа выбранны…Читать полностью
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin).
- Настройки переведены в Android-style режим: слева список разделов, справа выбранный раздел; в `PWA и push` добавлен второй уровень (`Обновления`, `Очередь push`, `Устройства`).
- `admin_tester` теперь видит все админ-настройки, но может сохранять только пользовательские (тема/уведомления); админские секции остаются read-only.
- Исправлена проверка доступа к пользовательскому облаку: маршрут `Мои файлы` теперь использует capability `cloud` (отдельно от staff-дэшборда).
TSOY.CLOUD 3.5.16: админ-настройки разнесены по отдельным страницам
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню. - Переходы в меню теперь открывают соответствующ…Читать полностью
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню.
- Переходы в меню теперь открывают соответствующие settings-route (`settings_admin_*`), а не работают только как внутренний переключатель секций в одном URL.
- Внутри длинных разделов (например `PWA и push`) сохранён второй уровень навигации: `Обновления`, `Очередь push`, `Устройства`.
TSOY.CLOUD 3.5.17: hotfix вёрстки страницы настроек (desktop/mobile)
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки. - Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конф…Читать полностью
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки.
- Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конфликт с Bootstrap `col-lg-6` в секционном режиме).
- На мобильных пересобрана вёрстка меню/подменю и нижней панели сохранения: убран уезд вправо и горизонтальный overflow.
TSOY.CLOUD 3.5.18: hotfix блока БД и нижней панели сохранения в настройках
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока. - Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме. - Испр…Читать полностью
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока.
- Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме.
- Исправление сделано без изменения логики сохранения и маршрутов настроек.
TSOY.CLOUD 3.6.0: начало рефакторинга связки Профиль / Контакты / Мессенджер
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана. - Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление св…Читать полностью
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана.
- Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление связями, `Мессенджер` = диалоги/вложения/звонки.
- Визуально унифицированы верхние панели и поверхности через общий reusable partial `views/partials/social_suite.php` без вмешательства в сложную mobile-геометрию чата.
TSOY.CLOUD 3.6.1: следующий шаг по связке Контакты/Мессенджер + UX-фиксы настроек
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`. - В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка боль…Читать полностью
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`.
- В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка больше не "подпрыгивает" вверх).
- Уточнена логика названий в настройках: `Внешний вид профиля` (личное) и `Внешний вид сайта` (глобальный дизайн) вместо размытых `Внешний вид` / `Оформление`.
TSOY.CLOUD 3.6.2: убран лишний Social Hub, мессенджер закреплён за диалогами
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее. - В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через …Читать полностью
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее.
- В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через `Контакты` (кнопка `Открыть контакты`).
- В настройках подправлены UX-мелочи: выровнен блок `База данных` и уточнены названия дизайн-разделов (`Внешний вид профиля` / `Внешний вид сайта`).
TSOY.CLOUD 3.6.3: контакты = старт общения, мессенджер = только диалоги
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`. - `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат. - Переходы через `chat_start` теперь ко…Читать полностью
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`.
- `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат.
- Переходы через `chat_start` теперь корректно прокидывают `call=1`, поэтому звонок можно запускать напрямую из `Контактов`.
TSOY.CLOUD 3.6.4: визуальный полиш мессенджера (в стиле Контактов) без риска вернуть подбородок
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`. - Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога. - Из…Читать полностью
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`.
- Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога.
- Изменения выполнены только на уровне визуального CSS-слоя: mobile keyboard-layout логика чата не трогалась, чтобы не вернуть iPhone-баг с `подбородком`.
TSOY.CLOUD 3.6.5: второй полиш-проход мессенджера (диалоги, шапка, composer, плотность)
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными. - В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало поле…Читать полностью
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными.
- В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало полезным (с прямым переходом в `Контакты`).
- Плотность мессенджера (`telegram/compact/roomy`) теперь заметнее влияет на список диалогов, шапку и кнопки, а не только на bubble. Keyboard-layout логика не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.6: hotfix iPhone/PWA бренда уведомлений (строка from ...)
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`. - Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под бренди…Читать полностью
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`.
- Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под брендинг проекта.
- PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с тем же брендом, что используется в уведомлениях.
TSOY.CLOUD 3.6.7: hotfix mobile-overflow окна Диалоги в мессенджере
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport. - Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата). - Фикс сделан только…Читать полностью
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport.
- Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата).
- Фикс сделан только на уровне CSS ширин/отступов; keyboard/fullscreen логика мессенджера не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.8: ускорена отправка сообщений в мессенджере (без паузы от push)
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`). - Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату. - Теперь сообщение сохраняется…Читать полностью
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`).
- Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату.
- Теперь сообщение сохраняется и ответ в чат уходит сразу, а push ставится в очередь и отправляется после завершения ответа (best-effort), что делает интерфейс заметно быстрее и плавнее.
TSOY.CLOUD 3.6.9: фундамент для больших чатов (миллионы сообщений) без нагрузки на сервер
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса. - Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unr…Читать полностью
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса.
- Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unread по каждому диалогу на каждом обновлении.
- Добавлены индексы под большие переписки (`messages(conversation_id,id)`, visible/unread индексы, индексы диалогов по пользователю и `last_message_at`).
- Для апгрейдов сохранён fallback: если денормализованные счётчики ещё не заполнены, система временно использует старый расчёт unread и постепенно синхронизирует данные.
TSOY.CLOUD 3.6.10: иконки действий в Контактах (конверт/трубка/корзина)
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина. - Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`. - Сохранены `title` и `ar…Читать полностью
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина.
- Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`.
- Сохранены `title` и `aria-label`, чтобы смысл кнопок не терялся на ПК и мобильных устройствах.
TSOY.CLOUD 3.6.11: доведён UI действий в Контактах (+ строка Каталог/Найти)
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле. - Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну стро…Читать полностью
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле.
- Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну строку, а поле поиска вынесено отдельно ниже на полную ширину.
- Логика контактов и поиска не менялась: обновление только визуальное/UX.
TSOY.CLOUD 3.6.12: системные файлы вынесены в отдельную папку public/system
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`. - Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешён…Читать полностью
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`.
- Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешённых системных директорий и переиспользуемая логика для будущих системных ассетов.
- Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически переносятся в новую системную структуру при запуске приложения (best-effort, без поломки ссылок если перенос не удался).
TSOY.CLOUD 3.6.13: единый раздел «Внешний вид», готовые профили оформления и кириллические шрифты
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). - Для глобального оформления сайта добавлены готовые профили внешн…Читать полностью
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений).
- Для глобального оформления сайта добавлены готовые профили внешнего вида (чистый, рабочий, чтение, мягкий, ночной, psychedelic): профиль подставляет значения в поля и их можно донастроить вручную.
- Шрифтовые пресеты обновлены с упором на кириллицу: Manrope, PT Sans, Rubik и новый IBM Plex Sans (`plex`) подключены как глобальные варианты для интерфейса.
TSOY.CLOUD 3.6.14: UX-фикс профиля (кнопка «Написать» и удаление вложений)
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля. - У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста. - Исправле…Читать полностью
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля.
- У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста.
- Исправление делает интерфейс профиля логичнее и чище без изменения логики постов/комментариев.
TSOY.CLOUD 3.6.15: персональные режимы меню и публичного профиля для гостей
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. - Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрыв…Читать полностью
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`.
- Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрывать только меню, или скрывать меню и шапку сайта.
- Эти параметры сохраняются у каждого профиля-пользователя отдельно и влияют только на его собственный интерфейс/публичную страницу.
TSOY.CLOUD 3.6.16: контекстное меню сообщений (ПК/мобилка) + цитаты и реакции
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`. - Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным на…Читать полностью
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`.
- Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным нажатием.
- Реализация встроена в существующий dropdown сообщений и не затрагивает чувствительную mobile-геометрию composer (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.17: галочки прочтения сообщений в мессенджере
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет. - Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы. - Изменение не затрагивает мобильную гео…Читать полностью
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет.
- Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы.
- Изменение не затрагивает мобильную геометрию поля ввода и не должно вернуть баг с `подбородком`.
TSOY.CLOUD 3.6.18: «будильник» по сообщению в контекстном меню мессенджера
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению. - Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочит…Читать полностью
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению.
- Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочитано`).
- Уведомление отправляется отдельным push-типом `chat_nudge`, не затрагивая геометрию чата и без риска вернуть `подбородок`.
TSOY.CLOUD 3.6.19: старт голосовых сообщений в мессенджере (красный интерфейс записи)
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения. - Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение. - Аудио-вложения (в том числе голосо…Читать полностью
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения.
- Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение.
- Аудио-вложения (в том числе голосовые) теперь воспроизводятся прямо в сообщении через встроенный плеер, без отдельного скачивания.
TSOY.CLOUD 3.6.20: preloader загрузки сайта и отдельный статус установки PWA
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании. - Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показыва…Читать полностью
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании.
- Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показывается при установке через системную кнопку).
- Тот же слой используется в установщике сайта (`install.php`) при отправке формы, поэтому установка/переходы теперь воспринимаются как единый понятный flow.
TSOY.CLOUD 3.6.21: плавное переключение секций настроек + фиксы длинных имён в Контактах/Мессенджере
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера. - В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / тру…Читать полностью
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера.
- В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / трубка / корзина / человек+`): кнопки зафиксированы справа, текст ужимается внутри своей зоны.
- В шапке активного диалога `Мессенджера` кнопки действий справа закреплены в одну линию, а длинное имя собеседника аккуратно сокращается без поломки layout.
TSOY.CLOUD 3.6.22: hotfix preloader (без ступора на чатах и секциях настроек)
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`. - Preloader оставлен только для действительно длинных/понятных сценариев: первич…Читать полностью
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`.
- Preloader оставлен только для действительно длинных/понятных сценариев: первичная загрузка страницы, установка сайта (`install.php`) и установка PWA.
- Это уменьшает риск зависшего overlay и делает интерфейс заметно отзывчивее при обычной работе.
TSOY.CLOUD 3.6.23: hold-to-record голосовые + компактное предпрослушивание и прогресс установки
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению. - После записи голосового в composer появляется компактное предпрослушивание (мини-пле…Читать полностью
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению.
- После записи голосового в composer появляется компактное предпрослушивание (мини-плеер), а аудио-плееры в сообщениях стали компактнее и лучше подходят для узких экранов.
- В `Профиле` улучшено поведение длинных текстов в карточках друзей/страниц и в постах (текст больше не ломает layout), а в `install.php` добавлена мини-анимация этапов установки (БД / миграции / админ / готово).
TSOY.CLOUD 3.6.24: hotfix preloader на Профиле и в Мессенджере
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа. - Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы на…Читать полностью
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа.
- Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы начинают ощущаться живыми заметно раньше.
- `load/pageshow` оставлены только как страховка, плюс добавлен fail-safe таймер от зависшего overlay.
TSOY.CLOUD 3.6.25: hotfix отображения голосовых сообщений (плеер вместо файла)
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл. - Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла…Читать полностью
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл.
- Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла, даже если у файла в БД был сохранён неидеальный MIME-тип.
- Для новых записей добавлена нормализация MIME при загрузке, чтобы голосовые сразу сохранялись как audio и корректно рендерились во всех местах.
TSOY.CLOUD 3.6.26: компактная лента недавних файлов на главной
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов. - По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3). - Использован …Читать полностью
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов.
- По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3).
- Использован тот же механизм `load more`, что и в новостях/техрелизах, без отдельного нового JS.
TSOY.CLOUD 3.6.27: голосовые сообщения в одну компактную строку
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла. - Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения. - Фикс работает и в первичном ре…Читать полностью
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла.
- Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения.
- Фикс работает и в первичном рендере чата, и при обновлении сообщений через polling.
TSOY.CLOUD 3.6.28: tap-to-record для голосовых (второй тап — отправка)
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение. - Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно …Читать полностью
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение.
- Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно отправить обычной кнопкой.
- Геометрия мобильного composer не изменялась (фиксы против `подбородка` сохранены).
TSOY.CLOUD 3.6.29: одинаковый mini-player голосовых на ПК и телефоне
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку. - Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения). - Н…Читать полностью
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку.
- Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения).
- Новый mini-player работает и в первичном рендере чата, и при появлении сообщений через polling.
TSOY.CLOUD 3.6.30: персональные настройки preloader
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста. - Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать с…Читать полностью
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста.
- Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать свой вариант поведения preloader.
- Системные сценарии установки сайта/PWA сохранены: preloader для install/PWA работает корректно даже при минимальном режиме.
TSOY.CLOUD 3.6.31: hotfix воспроизведения голосовых на телефоне
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу. - Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`). - Скрытый аудио-элемент пер…Читать полностью
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу.
- Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`).
- Скрытый аудио-элемент переведён в совместимый visually-hidden режим (без `display:none`) для лучшей работы на iPhone/Safari.
TSOY.CLOUD 3.6.32: отдельная иконка PWA + fallback на favicon/logo
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения. - Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback. - `manifest` и `apple-touch-icon` теперь формируются дина…Читать полностью
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения.
- Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback.
- `manifest` и `apple-touch-icon` теперь формируются динамически из настроек брендинга, а не только из встроенных `/public/icons/...`.
TSOY.CLOUD 3.6.33: встроенный просмотр файлов в PWA (с возвратом назад)
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`. - После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска. - Кнопка `Открыть` в файлово…Читать полностью
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`.
- После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска.
- Кнопка `Открыть` в файловом проводнике тоже использует этот безопасный PWA-сценарий.
TSOY.CLOUD 3.6.34: hotfix mini-плеера голосовых на телефоне
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате). - Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания. - `audio.load()` больше не мешает запуску как основ…Читать полностью
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате).
- Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания.
- `audio.load()` больше не мешает запуску как основной путь: теперь это только fallback при ошибке `play()`.
TSOY.CLOUD 4.0.0: группы, мосты и формат messenger
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах. - Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и…Читать полностью
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах.
- Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и групповые настройки.
- Появился формат `messenger` (контакты + чат), а файлы из чата теперь хранятся отдельно и не попадают в `Недавние` на главной.
TSOY.CLOUD 4.1.0: страница групп, единый дизайн
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников. - Страница пользователей упрощена: только аккаунты и создание новых пользователей. - Унифицирован дизайн всего проек…Читать полностью
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников.
- Страница пользователей упрощена: только аккаунты и создание новых пользователей.
- Унифицирован дизайн всего проекта: профиль, мессенджер, контакты и другие страницы теперь полностью используют глобальные настройки скругления.
TSOY.CLOUD 5.8.20: стабильная авторизация после регистрации (CSRF hotfix)
- Исправлен критичный сценарий `CSRF token mismatch` после регистрации/входа в мобильных webview. - Формы входа и регистрации стали устойчивее к stale-страницам из кэша браузера/вебвью. - При рассинхроне CSRF теперь показывается корректный возврат и повтор де…Читать полностью
- Исправлен критичный сценарий `CSRF token mismatch` после регистрации/входа в мобильных webview.
- Формы входа и регистрации стали устойчивее к stale-страницам из кэша браузера/вебвью.
- При рассинхроне CSRF теперь показывается корректный возврат и повтор действия, вместо белой страницы с ошибкой.
TSOY.CLOUD 5.8.21: корректное обновление версии и авто-публикация релизов
- Исправлен формат ZIP-сборки релиза: пути теперь совместимы с Linux-распаковкой, обновления реально применяются к рабочим файлам. - Для текущей версии автоматически публикуются техрелиз и системная новость в БД без ручного создания в админке. - После деплоя …Читать полностью
- Исправлен формат ZIP-сборки релиза: пути теперь совместимы с Linux-распаковкой, обновления реально применяются к рабочим файлам.
- Для текущей версии автоматически публикуются техрелиз и системная новость в БД без ручного создания в админке.
- После деплоя версия в интерфейсе и релизные записи синхронизируются предсказуемо.
TSOY.CLOUD 5.8.22: контроль фактической версии после деплоя
- Добавлен серверный заголовок `X-TSOY-Version`, чтобы сразу видеть реальную версию работающего кода. - Документация дополнена проверками и инструкциями очистки артефактов от старых архивов с некорректными путями. - Это закрывает частую ситуацию, когда в подв…Читать полностью
- Добавлен серверный заголовок `X-TSOY-Version`, чтобы сразу видеть реальную версию работающего кода.
- Документация дополнена проверками и инструкциями очистки артефактов от старых архивов с некорректными путями.
- Это закрывает частую ситуацию, когда в подвале остаётся старая версия после неудачного обновления файлов.
TSOY.CLOUD 5.8.23: прокси/HTTPS-стабилизация и синхронизация конфигурации
- Унифицировано определение HTTPS за прокси/CDN, чтобы ссылки и secure-cookie формировались корректно. - Исправлены смежные точки: share/call-link URL, logout cookie cleanup, CSRF/theme/guest cookie secure-флаги. - Документация обновлена: для SQLite используе…Читать полностью
- Унифицировано определение HTTPS за прокси/CDN, чтобы ссылки и secure-cookie формировались корректно.
- Исправлены смежные точки: share/call-link URL, logout cookie cleanup, CSRF/theme/guest cookie secure-флаги.
- Документация обновлена: для SQLite используется `storage/app.sqlite`.
TSOY.CLOUD 5.8.24: hotfix bootstrap (fatal на старте)
- Исправлен фатал `Call to undefined function request_is_https()` после обновления. - Причина: вызов helper до подключения `app/core.php`. - Загрузка `core.php` перенесена в начало `app/bootstrap.php`.Читать полностью
- Исправлен фатал `Call to undefined function request_is_https()` после обновления.
- Причина: вызов helper до подключения `app/core.php`.
- Загрузка `core.php` перенесена в начало `app/bootstrap.php`.
Релиз v2.3.8
Снижен лаг при открытии страниц. · Polling-задачи переведены в менее агрессивный режим.
Релиз v2.3.10
Исправлены критические проблемы отображения текста и уведомлений. · Подготовлена база для финальной правки кодировки.
Релиз v2.3.11
Полностью восстановлен текст интерфейса на корректной кириллице. · Исправлены сообщения профиля, чатов, звонков и административных страниц. · index.php восстановлен из стабильной версии и очищен от поврежденных строк. · Обновлены маршруты администрирования звонков: мониторинг, закрытие и удаление комнат.
Релиз v2.3.12
Исправлено отображение текста на странице звонка по ссылке. · Восстановлены подписи и действия в админ-панели. · Очищены поврежденные символы в views/call_room.php и views/admin.php. · В call_room добавлено управление закрытием комнаты для создателя и администратора.
Релиз v2.3.13
Зафиксировано правило: кодировка проекта только UTF-8 без BOM. · Добавлен .editorconfig с обязательным charset=utf-8. · Добавлен scripts/check-encoding.ps1 и подключён в scripts/make-release.ps1.
Релиз v2.3.14
Улучшено качество аудиозвонков в личных и публичных комнатах. · Добавлена автопопытка восстановления соединения при сетевых сбоях. · Вынесены единые WebRTC-параметры: ICE/STUN/TURN и аудио-профиль в настройки админа. · Убраны хардкоды RTCPeerConnection в chat/call_room/admin_call_monitor.
Релиз v2.3.15
Звонки стали отзывчивее без перегруза сервера: события обрабатываются быстрее после действий пользователя. · Стабильнее работа в фоне и после возврата в приложение/вкладку. · Переведены call polling-циклы на адаптивный single-flight алгоритм (без наложения запросов). · Добавлены таймауты запросов, backoff при ошибках и fast-retry после сигналов/действий.
Релиз v2.3.16
В админке добавлены импорт и экспорт базы данных в JSON для резервного копирования и переноса. · Добавлены сервисные операции очистки БД и файлов: RTC-мусор, старый аудит, удалённые файлы и сироты в uploads. · Добавлен модуль app/admin_maintenance.php с безопасным экспортом/импортом и обслуживанием хранилища. · Импорт БД выполняется с полной заменой данных таблиц приложения (через DELETE в транзакции, без TRUNCATE).
Релиз v2.3.17
Исправлена критическая ошибка отправки emoji/смайликов в мессенджере на MySQL. · После обновления сайт автоматически приводит старые таблицы чата и связанные таблицы к emoji-safe кодировке utf8mb4. · MySQL-подключение теперь принудительно использует SET NAMES/CHARACTER SET utf8mb4. · Добавлен runtime-check кодировки таблиц через INFORMATION_SCHEMA и best-effort конвертация в utf8mb4 только при необходимости.
Релиз v2.3.18
В админке БД добавлен визуальный статус проверки utf8mb4/emoji (для MySQL). · Теперь можно быстро увидеть, есть ли таблицы или колонки, которые ещё не готовы к emoji. · Добавлен отчёт admin_db_charset_report() по INFORMATION_SCHEMA: default charset/collation БД, таблицы и текстовые колонки. · Отчёт выведен в views/admin_db.php с компактной сводкой и таблицами проблемных объектов (если есть).
Релиз v2.3.19
Переработан блок смайликов в мессенджере: быстрые emoji, недавние emoji и удобная панель выбора. · Подключена библиотека emoji picker с поиском и категориями; добавлены быстрые кнопки, включая клоуна 🤡. · Локально подключена библиотека public/vendor/emoji-button/emoji-button.min.js (без CDN-зависимости в рантайме). · В chat composer добавено хранение недавних emoji в localStorage и fallback-режим, если библиотека недоступна.
Релиз v2.3.20
Исправлен баг мессенджера: новые сообщения теперь появляются в открытом чате без перезахода. · Если вы находитесь внизу ленты, чат автоматически прокручивается к новым сообщениям. · Добавлен lightweight endpoint chat_messages_poll (инкрементальная выдача сообщений по after_id). · Во views/chat.php добавлен single-flight polling и клиентский рендер новых сообщений без полной перезагрузки страницы.
Релиз v2.3.21
Список диалогов в мессенджере теперь обновляется автоматически: новые сообщения и непрочитанные появляются без перезахода в чат. · Превью последнего сообщения, время и бейдж непрочитанных синхронизируются прямо в открытом разделе «Мессенджер». · Добавлен endpoint chat_dialogs_poll с компактной JSON-выдачей списка диалогов для текущего пользователя. · Во views/chat.php добавлен отдельный single-flight polling списка диалогов с backoff, signature-check и обновлением DOM только при изменениях.
Релиз v2.3.22
Переработан интерфейс мессенджера в стиле PWA-мессенджеров: удобнее список диалогов, компактнее шапка чата и чище лента сообщений. · На телефоне чат занимает экран аккуратнее: более компактные action-кнопки, улучшенная шапка и удобнее поле ввода для быстрых сообщений. · Во views/chat.php обновлены layout/styling для desktop и mobile (split-pane, sticky composer, адаптивная шапка, улучшенные bubbles). · Серверный и клиентский рендер списка диалогов унифицированы: одинаковая разметка строк (аватар/имя/время/превью/unread badge).
Релиз v2.3.23
Исправлена проблема со «слетающей» авторизацией: сессия пользователя теперь сохраняется стабильнее, особенно в PWA и на мобильных устройствах. · Пользователю больше не нужно постоянно повторно входить в аккаунт при обычном использовании сайта. · Добавлена устойчивая инициализация PHP-сессии: cookie lifetime 30 дней, gc_maxlifetime 30 дней, httponly/samesite и корректный secure через HTTPS/X-Forwarded-Proto. · Сессии вынесены в project-local storage/sessions (если доступно), чтобы изолировать их от server-wide gc других сайтов/приложений.
Релиз v2.3.24
Исправлен UX мессенджера на ПК: форма ввода теперь закреплена поверх ленты сообщений и всегда видна, как в Telegram/WhatsApp. · Возвращён стеклянный (glass) вид мессенджера на телефоне и PWA-экране. · Добавлен endpoint chat_messages_before_poll (before_id) и server helper conversation_messages_before_for_user() для lazy-history. · Стартовая загрузка сообщений в чате уменьшена до компактной пачки, дальнейшая история догружается по scroll trigger.
Релиз v2.3.25
Исправлен критичный UX-баг мессенджера на ПК: при открытии диалога теперь сразу видны последние сообщения и форма ввода (без прокрутки всей страницы вниз). · Форма ввода закреплена поверх ленты сообщений, а прокрутка выполняется внутри окна чата. · Для desktop conversation pane добавлена жёсткая высота по viewport (CSS + JS syncDesktopMessengerViewport), чтобы контент не растягивал страницу. · chatMessages переведён в гарантированно внутренний scroll-container; composer остаётся fixed/overlay внутри card.
Релиз v2.3.26
Добавлен отдельный центр уведомлений: быстрые переключатели, статус разрешений браузера, Service Worker/PWA и тест уведомления на устройство. · Настройки уведомлений теперь можно менять без захода в профиль — прямо из раздела «Уведомления». · Маршрут notifications получил обработку POST (сохранение notify_desktop/notify_sound) и скорректирован порядок mark_seen/counts. · Глобальный runtime уведомлений переработан: user-scoped localStorage state, единый helper __TSOY_NOTIFY_RUNTIME (SW/device notify, permission/status/test).
Релиз v2.3.27
Добавлена публичная страница «О проекте» (`/about`) с описанием проекта и карточками участников/вклада. · В профиле (редактирование) для администратора добавлен блок управления страницей «О проекте», включая загрузку фото участников с устройства. · Добавлены маршрут `about`, pretty-route `/about` и POST-обработчик `post_like_toggle` с JSON-ответом для AJAX. · В `profile_edit` добавлено сохранение настроек страницы about через `settings` + хранение списка участников в JSON (`about_contributors_json`).
Релиз v2.3.28
Hotfix: исправлено битое сообщение после сохранения настроек в центре уведомлений (теперь отображается нормальная кириллица). · В `index.php` заменены оставшиеся mojibake-строки flash-сообщения `Настройки уведомлений сохранены.` в обработчиках профиля и центра уведомлений.
Релиз v2.3.29
Hotfix: исправлены оставшиеся «кракозябры» в системных сообщениях/заголовках из `index.php` (включая центр уведомлений и очистку аудита в разделе БД). · Выполнена массовая зачистка mojibake-строковых литералов в `index.php` (восстановлена нормальная кириллица в flash/title сообщениях). · Усилен `scripts/check-encoding.ps1`: проверка mojibake теперь использует кодовые точки (`U+00C2/U+00C3/U+00D0/U+00D1`), а не хрупкий текстовый regex.
Релиз v2.3.30
Ссылка на страницу «О проекте» добавлена в подвал рядом с версией проекта. · Настройки страницы «О проекте» вынесены из профиля в отдельный раздел администрирования в дашборде. · Добавлен маршрут `admin_about` + новая страница `views/admin_about.php`; сохранение настроек about перенесено из `profile_edit` в admin-раздел. · Расширен RBAC: новые роли (`global_admin`, `admin_tester`), нормализация политик по умолчанию, закреплённые инварианты для доступа к БД/политикам/настройкам.
Релиз v2.3.31
Исправлены права управления пользователями: первый пользователь всегда закреплён как `global_admin`, обычный администратор не может понижать/блокировать/удалять его и сбрасывать ему пароль. · Роль `admin_tester` теперь может пользоваться обычными функциями приложения (включая профиль и фото), при этом изменения в админ-разделах по-прежнему заблокированы. · Добавлены backend-инварианты для первого пользователя (`user_ensure_first_global_admin`, запрет бана/удаления первого пользователя) и защита операций над `global_admin` в `admin_users`. · Глобальный guard `admin_tester` сужен до write-операций админ-разделов, чтобы не ломать обычный пользовательский функционал.
Релиз v2.3.32
Исправлена логика публичных файлов: фото участников со страницы `/about` остаются публичными, но больше не попадают в ленту «Публичные файлы» на главной. · Улучшена навигация и нейминг: пользовательское облако переименовано в «Мои файлы», а `admin`-экран оформлен как «Файлы проекта». · В `app/files.php` добавлена фильтрация публичной ленты по исключениям (`files_public_feed_excluded_ids()`), сейчас туда входят фото участников из `about_contributors_json`. · Обновлены заголовки/подписи в `views/home.php`, `views/dashboard.php`, `views/admin.php`, `views/layout.php`, `views/staff.php`, `views/chat.php`, `views/contacts.php` для уменьшения путаницы между пользовательским и административным файловыми экранами.
Релиз v2.3.33
Добавлена отдельная «мемная» invite-регистрация для друзей с автоназначением ролей `admin` и `admin_tester` по токен-ссылке. · Страница спец-регистрации получила отдельный дизайн с анимациями и роль-специфичными сообщениями (admin/tester). · Добавлен модуль `app/friend_registration.php`: JSON-конфиг спец-регистрации, токены, invite-ссылки, нормализация и resolve роли по токену. · В `index.php` добавлены маршруты `friend_register` и `admin_friend_register`, а также pretty-route `/friend-invite/<token>`.
Релиз v2.3.34
Hotfix: устранены предупреждения Deprecated на PHP 8.4+ в модуле спец-регистрации друзей. · В `app/friend_registration.php` сигнатуры helper-функций обновлены с implicit nullable (`array $cfg = null`) на явный nullable тип (`?array $cfg = null`).
Релиз v2.3.35
В спец-регистрацию друзей встроен виджет «кошка-говешка» с анимированным блоком внутри формы. · В настройках спец-регистрации можно загрузить фото кошки с устройства, включать/выключать блок и настраивать подпись/бейдж. · Спец-регистрация расширена настройками `cat_*` в `app/friend_registration.php`; загрузка изображения реализована в `index.php` и хранится в `public/friend_register/`. · В `views/friend_register.php` добавлен анимированный cat-widget с безопасным fallback без картинки.
Релиз v2.3.36
Базовый пресет оформления снова по умолчанию `Default`, а `Psychedelic` оставлен как опциональный вариант в настройках. · Уведомления о сообщениях и событиях теперь открывают соответствующий раздел (чат или календарь), а не всегда центр уведомлений. · Добавлен JSON endpoint `chat_send_async` и клиентский submit-handler во `views/chat.php` для AJAX-отправки сообщения с поддержкой вложений. · В `notif_poll` добавлены target-ссылки (`chat`/`calendar`), а `views/partials/scripts.php` формирует отдельные device-notifications с корректным `data.url`.
Релиз v2.3.37
Мессенджер структурно облегчён: более компактный header/messages/composer stack, меньше визуальной тяжести и ближе к привычной мобильной логике. · Исправлено поведение поля ввода в мобильном полноэкранном чате: composer больше не “съезжает” вниз из-за наложенных padding/overlay-стилей. · В `views/chat.php` добавлены структурные классы (`chat-list-card`, `chat-conv-card`, `chat-conv-body`, `chat-composer-shell`) и финальный CSS override-блок с упрощённой layout-схемой. · Убран тяжёлый overlay-режим composer для conversation pane (через CSS overrides), сообщения снова живут в нормальном flex-stack без лишнего bottom-overlay padding.
Релиз v2.3.38
Перестроена DOM-структура окна диалога: `chatMessages` теперь единый контейнер на всю область чата, внутри которого находятся шапка, лента сообщений и composer. · Шапка диалога и панель ввода встроены внутрь общего контейнера как в современных мессенджерах, что улучшает поведение на мобильных экранах. · В `views/chat.php` `id=\"chatMessages\"` переведён в роль root-container conversation pane, а scroll-area вынесена в `id=\"chatMessagesScroll\"`. · JS-логика мессенджера обновлена на новый scroll-target (`chatMessagesScroll`) с backward fallback на старую структуру.
Релиз v2.3.39
Уменьшен зазор между клавиатурой и полем ввода в мобильном мессенджере (почти вплотную, несколько миллиметров). · Панель ввода в fullscreen-чате лучше поджимается к клавиатуре на iPhone/iOS. · В `views/chat.php` добавлен динамический CSS var `--chat-mobile-composer-gap` и логика `visualViewport`-детекта открытой клавиатуры. · При открытой клавиатуре fullscreen-pane чата растягивается до видимого нижнего края без лишнего white-gap из-за `visualViewport.offsetTop`.
Релиз v2.3.40
Исправлен большой пустой отступ между полем ввода и клавиатурой в мобильном мессенджере (fullscreen chat). · Панель ввода и лента сообщений теперь корректно сжимаются при открытии клавиатуры. · В `views/chat.php` снят конфликтующий `min-height`/жёсткая высота на mobile fullscreen-цепочке контейнеров (`chat-conv-body` → `#chatMessages` → scroll-wrap → `#chatMessagesScroll`). · Горячий фикс рассчитан на iOS/Safari/PWA сценарии, где клавиатура уменьшает viewport и ломает flex-layout с `min-height`.
Релиз v2.3.41
Дополнительно исправлен большой зазор над клавиатурой на iPhone: поле ввода поджимается ближе даже при включённой assistant/suggestions панели iOS. · В `views/chat.php` добавлена реальная компенсация нижнего зазора по измерению положения composer относительно viewport (а не только по `visualViewport.height`). · Учтён iOS-кейс, когда `visualViewport` и `window.innerHeight` расходятся на высоту assistant/suggestions панели клавиатуры.
Релиз v2.3.42
Для диагностики iPhone-отступа убрана встроенная (inline) панель быстрых смайликов из формы сообщения в мессенджере. · Кнопка смайликов в composer теперь открывает полный emoji picker, если inline-панель отключена. · Из `views/chat.php` удалён блок `chat-emoji-panel` внутри composer; JS-клик по `emojiBtn` переведён на fallback `toggleFullEmojiPicker()` при отсутствии inline-панели.
Релиз v2.3.43
Для диагностики iPhone-отступа убран набор layout-классов у нижнего блока `attachHint / Убрать вложение` в composer мессенджера. · В `views/chat.php` блок под composer (с `attachHint` и `attachClearBtn`) упрощён до обычного контейнера без `d-flex/.../mt-2`.
Релиз v2.3.44
Для диагностики iPhone-отступа убран класс `small text-secondary` у блока `attachHint` в composer мессенджера. · В `views/chat.php` элемент `#attachHint` оставлен без CSS-классов, чтобы исключить влияние типографики/line-height на высоту composer.
Релиз v2.3.45
Для диагностики iPhone-отступа удалён `id=\"attachHint\"` у нижнего блока composer и связанный CSS-минимум высоты. · В `views/chat.php` удалено правило `#chatConvPane #attachHint { min-height ... }`, а сам элемент оставлен без `id`, чтобы исключить его вклад в высоту composer.
Релиз v2.3.46
Мессенджер вынесен из общего `container py-4` в отдельное “полотно” layout (full-canvas host), чтобы уменьшить конфликты мобильного fullscreen-режима с обёртками страницы. · Это изменение направлено именно на iPhone-баг с большим отступом над клавиатурой: чат теперь живёт в более простой DOM-структуре без общей контейнерной обвязки страницы. · В `views/layout.php` добавлен route-aware режим `contentCanvasRoute` для `chat`: контент мессенджера рендерится в `chat-canvas-stage` вне `container py-4`. · В `views/chat.php` обновлены mobile fullscreen-селекторы, которые раньше были жёстко привязаны к `.container.py-4`, теперь они поддерживают `.chat-canvas-stage`.
Релиз v2.3.47
Мессенджер после фикса iPhone-клавиатуры дополнительно очищен и визуально облегчён: обновлены шапка страницы, список диалогов, полотно сообщений и composer. · Строка состояния редактирования в composer теперь показывается только в режиме редактирования, а не занимает место постоянно. · Из `views/chat.php` удалён временный JS-компенсатор `tightenComposerToViewportBottom()` и связанный runtime-костыль `--chat-mobile-composer-gap`, оставлена более простая `visualViewport`-синхронизация. · Добавлены финальные CSS-overrides для canvas-режима чата (`chat-canvas-stage`) без возврата к старой layout-обвязке `container py-4`.
Релиз v2.3.48
На главной в разделе «Новости» теперь по умолчанию показываются только первые записи, остальные открываются кнопкой «Загрузить ещё». · В истории версий (технические новости по версиям) добавлен такой же режим постепенной подгрузки списка через кнопку «Показать ещё версии». · В `views/layout.php` добавлен универсальный client-side `load more`-инициализатор для блоков с `data-load-more-*`. · Разметка новостей на главной (`views/home.php`) и модалки истории версий (`views/layout.php`) переведена на единый шаблон постепенного раскрытия списка.
Релиз v2.3.49
Исправлен повторный iPhone-баг в мессенджере с большим отступом между клавиатурой и полем ввода (runtime-компенсация viewport/composer для mobile fullscreen). · Новости на главной и технические заметки по версиям теперь действительно свёрнуты по умолчанию (первые 3 записи), остальные открываются через кнопку «Показать ещё / Загрузить ещё». · В `views/chat.php` возвращена измеряемая компенсация `visualViewport` по фактическому gap до composer (без возврата старого `--chat-mobile-composer-gap` костыля). · В `views/layout.php` исправлен клиентский `load more`-инициализатор (Safari-safe проверка вместо `ParentNode`) и добавлено серверное начальное сворачивание версий.
Релиз v2.3.50
В мессенджере убрана служебная подпись под именем собеседника; клик по фото/имени в шапке диалога теперь открывает профиль собеседника. · Профиль расширен: значок админ-роли для администраторов, список друзей, количество друзей, а также кнопки добавления/удаления из друзей прямо на странице профиля. · Добавлены helper-функции для видимости карточек разработчиков на `/about` (`about_developer_visibility_json`, `user_about_card_visible()`, `user_about_card_set_visible()`) и фильтрация в `users_about_developers()`. · Маршруты `post_create/post_update` получили поддержку `cover_device_file` через новый helper `post_cover_from_upload()` в `app/posts.php`.
Релиз v2.3.51
В мессенджере из composer удалён нижний блок `chat-attach-row` (подсказка/кнопка вложения), чтобы убрать лишнюю высоту и iPhone-gap («подбородок»). · Из `views/chat.php` удалена разметка `div.chat-attach-row`; JS обработчики вложений уже безопасно работают при отсутствии `attachHint/attachClearBtn`.
Релиз v2.3.52
Усилен iPhone-fix для мессенджера: composer в mobile fullscreen при открытой клавиатуре закрепляется в `fixed`-режиме относительно видимой области, чтобы убрать большой зазор над клавиатурой. · В `views/chat.php` добавлен режим `chat-composer-vv-fixed` + JS-синхронизация с `visualViewport` (адаптивно: `bottom=0` или компенсация `keyboardInset`, если fixed элемент уходит под клавиатуру).
Релиз v2.3.53
В мессенджере с composer снят класс `chat-sticky` (оставлен только `chat-composer-shell`) — hotfix для iPhone-отступа над клавиатурой. · В `views/chat.php` удалён `chat-sticky` у обёртки формы сообщений, чтобы исключить конфликт sticky/fixed логики в mobile fullscreen.
Релиз v2.3.54
Ещё один iPhone hotfix для мессенджера: при открытой клавиатуре `fixed`-composer больше не обрезается контейнерами чата (снят clipping/blurs на время mobile keyboard mode). · В `views/chat.php` добавлен режим `chat-composer-vv-mode`: при активной клавиатуре снимаются `overflow:hidden` и `backdrop-filter` у `chat-conv-card/chat-conv-body`, чтобы Safari не привязывал/не обрезал `position: fixed` composer внутри карточки.
Релиз v2.3.55
В мессенджере переписан mobile-composer режим для iPhone: поле ввода при открытой клавиатуре выносится в отдельный viewport-портал, чтобы не появлялся большой зазор над клавиатурой. · В `views/chat.php` реализован `composer portal` (spacer + перенос `.chat-composer-shell` в `body` при mobile keyboard mode) вместо прежней fixed/sticky-компенсации внутри карточки чата.
Релиз v2.3.56
Добавлена система мультипрофилей: у одного аккаунта можно создавать, переключать и удалять несколько профилей через меню по клику на имя/аватар в шапке. · Для ролей разработчиков (`global_admin`/`admin`/`admin_tester`) добавлен выбор, какой профиль показывать на странице `/about`. · В `app/migrations.php` добавлены `user_profiles`, колонки `users.active_profile_id/users.about_profile_id` и `posts.hide_from_guests`. · В `app/users.php` реализованы helper-ы мультипрофилей (bootstrap/create/switch/delete/sync/about-select) и overlay данных выбранного профиля в `/about`.
Релиз v2.3.57
Мессенджер откатан по фронтенду (`views/chat.php`) к состоянию релиза `2.3.46` — это версия, на которой исчезал iPhone-gap («подбородок») над клавиатурой. · Сравнение показало, что `views/layout.php` (перенос чата в `chat-canvas-stage`) остаётся правильным; регрессия появилась позже в `views/chat.php` после добавления mobile keyboard viewport-хаков (`chat-composer-vv-portal`, `chat-composer-vv-fixed`, `chat-composer-vv-mode`, spacer/portal composer). · Откат выполнен точечно только для мессенджера: `views/chat.php` взят из архива `releases/tsoycloud_v2.3.46_2026-02-22.zip`.
Релиз v2.3.58
Мультипрофили переработаны: теперь каждый профиль аккаунта — это отдельный пользователь со своим логином и собственной страницей `/user/<login>` (отдельные посты, файлы и медиа). · В меню профилей аккаунта создание профиля теперь запрашивает отдельный логин (`username`) и отображаемое имя; основной профиль нельзя удалить. · Логика `user_profiles_*` в `app/users.php` переведена с таблицы `user_profiles` на связанные записи `users` через `owner_account_user_id` (старую таблицу больше не используем как источник истины). · В `app/auth.php` добавлен `auth_session_apply_active_profile()` и `$_SESSION[\"auth_user_id\"]`: сессия хранит владельца аккаунта отдельно от активного профиля (`$_SESSION[\"user\"]`).
Релиз v2.3.59
Мессенджер улучшен поверх стабильной базы (без возврата mobile keyboard-хаков): имя/аватар собеседника в шапке снова открывают профиль, убрана лишняя служебная подпись. · В профиле добавлены отдельные блоки медиа: фото, видео и аудио (для владельца — из облака, для гостей/других пользователей — из видимых постов). · В `app/migrations.php` добавлены таблицы `post_comments` и `user_pages`. · В `app/posts.php` реализованы helpers комментариев и поддержка внутренних ссылок (`/page/...`) в `post_attachment_add_link()` для публикации страниц.
Релиз v2.3.60
Исправлено мобильное меню профилей в шапке: dropdown больше не уезжает влево на узких экранах (ограничена ширина, стабилизировано позиционирование). · В `views/layout.php` профильный dropdown переведен на `data-bs-display=\"static\"` и вынесен на отдельный класс `topbar-profile-menu`; в `views/partials/head.php` добавлены mobile-safe стили ширины/переполнения.
Релиз v2.3.61
Исправлен раздел «Медиа» в профиле: теперь он показывает только контент, который пользователь явно добавил в посты (обложки и вложения), а не все файлы из облака. · В `views/profile.php` блок `Медиа` переведен на единый источник данных (медиа из постов) для владельца и гостей; облачные файлы владельца больше не попадают туда автоматически.
Релиз v2.3.62
Профиль переведён на более современный шаблонный стиль: обновлены карточки, шапка профиля и добавлены верхние вкладки разделов (Посты/Друзья/Страницы/Медиа). · Разделы Фото/Видео/Аудио теперь работают как отдельные ручные галереи профиля: пользователь сам добавляет контент в галереи, а не получает автоподбор из облака/постов. · Добавлен helper `app/profile_media.php` и таблица `profile_media_items` (ручные галереи профиля) с миграцией в `app/migrations.php`. · Добавлен маршрут `profile_media_gallery` в `index.php` (добавление/удаление элементов галереи, загрузка файлов с устройства).
Релиз v2.3.63
Профиль ещё ближе к новому шаблону: усилен визуал шапки (cover/avatar/chips/статистика), обновлены карточки друзей/страниц/медиа и общий стиль карточек постов/модалок. · Улучшена навигация по разделам профиля через верхние вкладки с сохранением активной вкладки. · В `views/profile.php` расширен слой профильных стилей и добавлены счётчики/визуальные блоки без изменения бизнес-логики постов, комментариев и ролей.
Релиз v2.3.64
Посты на странице профиля ещё ближе к новому шаблону: добавлен header карточки (аватар/имя/@username/время), улучшен action-bar и визуал карточек. · Модалка комментариев профиля визуально переработана и на мобильных ведёт себя ближе к формату bottom-sheet. · В `views/profile.php` добавлены профильные UI-классы для карточек постов и комментариев без изменения текущей логики лайков/комментариев/прав доступа.
Релиз v2.3.65
Управление галереями профиля перенесено в модалку (вместо collapse), что ближе к новому шаблону и удобнее на мобильных устройствах. · Экран `Редактировать профиль` заметно переработан визуально: добавлен hero-preview профиля, улучшены блоки загрузки аватара/обложки и группировка полей. · В `views/profile.php` блок управления ручными галереями переведён на modal-layout без изменения логики форм `profile_media_gallery`. · В `views/profile_edit.php` добавлены новые UI-обёртки и стили (`profile-edit-header-*`, `profile-edit-fieldset`, `profile-edit-upload-*`) при сохранении прежних POST-полей.
Релиз v2.3.66
Профиль дополнительно отполирован под мобильные устройства: карточки друзей и страниц стали компактнее и аккуратнее на узких экранах. · В модалке комментариев улучшен блок ввода: форма стала ближе к привычному мобильному composer-формату. · В `views/profile.php` добавлены mobile-first стили и классы для списков друзей/страниц, медиасетки и composer-разметки комментариев без изменения бизнес-логики.
Релиз v3.0.0
Подготовлен крупный профильный апдейт 3.0: улучшен mobile UX профиля (Друзья/Страницы/Медиа), а форма комментариев в модалке стала ближе к привычному мобильному composer-формату. · Полностью переработан интерфейс мультипрофилей в шапке: новый dropdown с быстрым переключением, аватарами и статусами профилей. · В `views/layout.php` переписана разметка topbar dropdown и модалки `#userProfilesModal` без изменения существующих роутов/POST-действий (`user_profiles`). · В `views/partials/head.php` добавлен новый слой стилей для мультипрофильного UX (`topbar-profile-*`, `user-profiles-modal-modern`, `user-profile-card*`) с адаптацией под мобильные экраны.
Релиз v3.0.1
На странице профиля кнопка копирования публичной ссылки теперь копирует адрес в буфер и показывает диалог «Скопировано». · При открытии профиля по публичной ссылке `/user/<username>` скрывается боковое меню (desktop + mobile offcanvas), страница выглядит ближе к формату соцсети. · В `views/profile.php` обновлён helper `copyText()` для кнопок `.js-copy`: успешное копирование подтверждается диалогом, fallback остаётся только при ошибке clipboard API. · В `views/layout.php` добавлен режим публичной страницы профиля (`$publicProfilePageRoute`) с условным отключением sidebar/offcanvas и корректировкой mobile topbar-отступа.
Релиз v3.0.2
На страницах профиля боковое меню теперь скрывается только у гостей. Для авторизованных пользователей навигация в профиле снова доступна. · В `views/layout.php` режим “соц-страницы без меню” ограничен только гостевым просмотром публичного профиля (`$guestPublicProfileSocialMode`).
Релиз v3.0.3
Кнопки «Ссылка на профиль» и «Ссылка на пост» на странице профиля теперь копируют ссылку в буфер по одному клику. · В `views/profile.php` copy-handler для `.js-copy/.js-magnet` усилен: добавлены `preventDefault/stopPropagation` и fallback-копирование через `textarea + execCommand(copy)` без обязательного `prompt`.
Релиз v3.1.0
Конструктор пользовательских страниц серьёзно переработан: добавлены блоки «Статья», «Гайд» и «Плеер роликов» помимо галереи/ссылок. · В выборе файлов для конструктора страниц больше не нужны ID вручную: добавлен единый проводник файлов с папками, поиском, фильтрами и мультивыбором. · Добавлен reusable partial `views/partials/file_explorer_picker.php` (модалка + JS-компонент `TsoyFileExplorerPicker`) для повторного использования в разных разделах. · В `app/pages.php` расширена модель блоков страниц (`article`, `guide`, `video_player`) и обновлён сбор используемых file_id для рендера.
Релиз v3.2.0
Усилен PWA-режим для ПК и смартфонов: улучшен manifest (ярлыки быстрых действий, desktop/mobile launch-поведение, метаданные приложения). · Уведомления и звонки в PWA/браузере теперь надёжнее открывают нужный раздел по клику (чат, конкретный звонок, уведомления и т.д.). · Root и `public/service-worker.js` синхронизированы и переведены на единый hardened SW (navigation preload, deep-link `notificationclick`, управление файловым кешем через message API). · В Service Worker добавлен корректный bypass для `Range`-запросов, чтобы не ломать стриминг аудио/видео и просмотр медиа на мобильных устройствах.
Релиз v3.2.1
В разделе «Настройки → Брендинг» добавлена отдельная настройка названия проекта в шапке (верхняя панель и боковое меню). · Добавлен ключ настроек `site_header_name`; при пустом значении используется fallback на `site_name`. · В `views/layout.php` брендинг шапки переведён на отдельную переменную `$siteHeaderName`, не затрагивая title страниц и прочие места, где используется `site_name`.
Релиз v3.3.0
Проведена большая унификация визуального стиля проекта: карточки, навигация, формы, модалки и отступы лучше согласованы между разделами. · Раздел «Настройки → Оформление» расширен: добавлены настройки глобального шрифта, масштаба текста, ширины контента, контраста поверхностей и отдельная плотность мессенджера. · Расширен `ui_config()` и системные настройки (`ui_font_family`, `ui_font_scale`, `ui_content_width`, `ui_surface_contrast`, `ui_chat_density`) с валидацией в `index.php?r=admin_settings`. · В `views/partials/head.php` добавлены новые data-атрибуты UI и глобальные CSS-токены (font-scale, content-width, surface-contrast) для централизованного управления дизайном.
Релиз v3.3.1
В мессенджере выбор файла из облака переведён на единый проводник (папки, поиск, фильтры, превью), как в других разделах проекта. · Исправлено меню действий сообщения (`Изменить/Удалить`): dropdown больше не перекрывается соседними сообщениями. · В `views/chat.php` интегрирован reusable `TsoyFileExplorerPicker` для attach-модалки (mobile-safe сценарий через отдельную модалку picker-а). · Для строк сообщений добавлен z-index lift при `show.bs.dropdown` (`chat-row-menu-open`), чтобы меню действий не попадало под соседние bubbles.
Релиз v3.3.2
В «Центре уведомлений» блок с уведомлениями/событиями теперь показывается первым, а настройки уведомлений идут после него. · В `views/notifications.php` переставлен визуальный порядок колонок через grid-order (`notify-col-feed` перед `notify-col-settings`) и обновлён заголовок блока на «Все уведомления».
Релиз v3.3.3
Страница «Контакты» визуально приведена к стилю мессенджера: одинаковая шапка, поверхности, контуры и оттенки/градиенты. · В `views/contacts.php` добавлен локальный токенизированный стиль (`contacts-page`) с той же логикой surface/background, что и в мессенджере, включая реакции на `ui_surface_contrast` и `ui_density`.
Релиз v3.3.4
Проводник файлов в профиле (обложка и вложения постов) переведён на единое ядро `TsoyFileExplorerPicker`, как в мессенджере. · Вложения к посту с устройства в профиле переработаны в единый блок внутри модалки вложений (облако + устройство + ссылки), чтобы выбор работал стабильнее и понятнее. · В `views/profile.php` добавлен JS-слой унификации старых модалок вложений постов: облачные файлы выбираются через общий picker, а hidden-inputs собираются по mime (`attach_images/video/audio/files`). · В `app/files.php` расширен `files_admin_list()` (фильтры по владельцу и папке) и добавлены helper-функции `files_admin_owner_stats()` / `files_admin_folders_list()` для админского проводника.
Релиз v3.3.5
Исправлен двойной проводник в профиле: при выборе обложки поста больше не открывается одновременно новый и старый интерфейс. · Исправлены лишние кнопки «Сохранить / Отмена» под опубликованными постами (ошибка разметки edit-блока). · В `views/profile.php` удалены legacy JS-билдеры вложений постов (`js-att`/`js-att-edit`) и старые вкладки вложений теперь физически вырезаются из DOM после инициализации нового picker-слоя. · В `views/profile.php` убраны bootstrap-trigger атрибуты с кнопок выбора обложки (теперь открывается только `TsoyFileExplorerPicker`), а возврат старой attach-модалки после picker отключён.
Релиз v3.3.6
В конструкторе пользовательских страниц добавлен новый блок «Таблица» с ручным редактированием ячеек. · Для блока таблицы доступны действия: добавить/удалить строку и добавить/удалить столбец, а также режим «первая строка — заголовки». · В `app/pages.php` добавлена нормализация блока `table` (header + rows, ограничения размеров и длины ячеек). · В `views/my_pages.php` расширен page-builder: тип `table`, визуальный table-editor и сериализация таблицы в `blocks_json`.
Релиз v3.4.0
Добавлены полноценные push-уведомления на устройство (через Web Push + Service Worker) для сценариев, когда сайт/PWA закрыт. · Push-уведомления теперь приходят по ключевым событиям: сообщения, входящие звонки/приглашения в звонок, лайки постов, комментарии и добавления в друзья. · Добавлен `app/push.php`: VAPID-ключи (автогенерация), подписки Web Push, очередь уведомлений, payloadless Web Push dispatch и pull-механизм для SW. · В `app/migrations.php` добавлены таблицы `push_subscriptions` и `push_queue` (MySQL/SQLite) с индексами для подписок и очереди доставки.
Релиз v3.4.1
Исправлено мобильное открытие окна вложений в мессенджере: attach-модалки/проводник теперь открываются поверх fullscreen-чата. · Меню профиля/переключения мультипрофилей в мобильной шапке больше не уезжает влево: dropdown центрируется по viewport. · В `views/chat.php` поднят z-index attach-модалки и file-picker-модалки над mobile chat pane (`z-index: 2100`) и добавлена маркировка backdrop (`chat-over-chat-backdrop`). · В `views/chat.php` усилен mobile-open handler клипсы (`pointerup` + `touchend` + click guard), чтобы не терялись тапы в fullscreen-мессенджере.
Релиз v3.4.2
Исправлена навигация по клику на уведомления: уведомления теперь корректно открывают источник (чат, календарь, профиль/пост и т.д.) в браузере и PWA. · В `views/partials/scripts.php` `__tsoyNavigateFromNotification()` переведён на резолв ссылок через `appBasePath`, а fallback `Notification.onclick` теперь использует тот же навигатор. · В `service-worker.js` / `public/service-worker.js` `notificationclick` теперь резолвит `data.url` относительно `self.registration.scope` (а не `origin`), что исправляет deep-link в установках не в корне сайта.
Релиз v3.4.3
Уведомления стали информативнее: для новых сообщений показываются имя отправителя и фрагмент текста. · Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (там, где это поддерживает браузер/устройство). · В `notif_poll` добавлен preview последнего непрочитанного сообщения (`sender/body/url`), а клиентский polling в `views/partials/scripts.php` использует его для desktop-уведомлений и toast. · В `app/push.php` расширен payload Web Push: поддержка `data` и `action_urls`, а `push_notify_incoming_call()` теперь отправляет actions (`accept/close`) и URL принятия звонка.
Релиз v3.4.4
В дашборде (`Настройки`) добавлен отдельный блок настроек уведомлений: цвет, оформление toast/desktop-уведомлений, рингтон уведомлений и отдельный рингтон входящего звонка. · Добавлен блок `PWA и обновления`: политика обновления (manual/notify/auto), интервал проверки Service Worker, автозапрос persistent storage и toast-оповещения об обновлении PWA. · Добавлены новые ключи настроек в `app/settings.php`; сохранение/валидация реализованы в `index.php` (`admin_settings`). · В `views/layout.php` новые настройки прокидываются в `window.__TSOY_NOTIFY` (`ui/sounds/pwa`) для runtime-слоя.
Релиз v3.4.5
В настройках уведомлений добавлена загрузка своих рингтонов: отдельно для обычных уведомлений и отдельно для входящего звонка. · В админке можно прослушать загруженные рингтоны прямо в разделе настроек и удалить их при необходимости. · Добавлены настройки `notify_sound_custom_path` и `notify_call_sound_custom_path`, а в `admin_settings` реализована загрузка аудиофайлов в `public/sounds`. · Во фронтенде (`views/layout.php` + `views/partials/scripts.php`) runtime уведомлений получил поддержку кастомных аудио-файлов с fallback на синтезированные звуки, если браузер блокирует воспроизведение.
Релиз v3.5.0
Стабилизационный релиз: проведён общий cleanup проекта, снижён шум от временных артефактов и улучшена предсказуемость работы уведомлений/PWA-настроек. · В настройках уведомлений доработана работа со своими рингтонами: при замене старые файлы корректно очищаются, а слишком большие файлы не принимаются. · Удалены временные каталоги восстановления/аудита (`tmp_*`) из рабочей директории, которые засоряли поиск и увеличивали накладные расходы проверок. · В `scripts/check-encoding.ps1` добавлено универсальное исключение для временных каталогов `tmp_*`, чтобы сборочные проверки не сканировали техмусор.
Релиз v3.5.1
Hotfix рингтонов на телефонах: улучшено воспроизведение кастомных рингтонов уведомлений/звонка на мобильных браузерах и PWA. · В `views/partials/scripts.php` исправлен баг кастомного рингтона уведомлений: теперь Promise `audio.play()` реально проверяется, и при ошибке срабатывает fallback-звук. · Кастомные рингтоны теперь резолвятся через `appBasePath` (`__tsoyResolveAppUrl`) для корректной работы в установках проекта в подпапке сайта.
Релиз v3.5.2
Усилена надёжность уведомлений: добавлен серверный retry-worker для wake-push доставки с повторными попытками и backoff. · В админке (Настройки -> PWA и обновления) появился блок диагностики push-очереди: количество недоставленных элементов, состояние очереди и статус подписок. · В `push_queue` добавлены поля состояния доставки (`dispatch_state`, попытки, backoff, lock, last_error/status) и миграции для MySQL/SQLite. · В `app/push.php` реализованы функции очереди и worker-обработки (`claim/process due`, retry/backoff, статистика очереди).
Релиз v3.5.3
Уведомления стали стабильнее при закрытом PWA/сайте: сервер теперь пытается отправлять полноценный Web Push payload (с телом уведомления), а не только wake-push. · Сохранён fallback-режим (`wake-push + push_pull`) для совместимости, если endpoint/браузер не принимает payload. · В `app/push.php` добавлена payload-отправка Web Push (`aes128gcm`) с VAPID и шифрованием сообщения на стороне сервера (ECDH + HKDF + AES-128-GCM). · `push_dispatch_user()` теперь умеет отправлять payload в push и возвращает раздельную статистику `payload_sent` / `wake_sent`.
Релиз v3.5.4
В админке (`Настройки -> PWA и обновления`) добавлена диагностика push-устройств: список подписок, устройство/режим, последний успех доставки и ошибки. · Появилась кнопка `Тест push` для каждого устройства, чтобы быстро проверить доставку уведомлений на конкретную подписку. · В `app/push.php` добавлены helper-функции диагностики: `push_subscriptions_admin_list()`, `push_subscription_get()`, `push_subscription_test_send()`. · Добавлен route `index.php?r=push_test_subscription` (admin/settings), который отправляет тестовый push на выбранную подписку и пишет результат в flash.
Релиз v3.5.5
Диагностика push-устройств в админке стала практичнее: добавлены фильтры (поиск, active/inactive, только с ошибками). · Для push-подписок появились действия `Отключить / Включить / Удалить` прямо в таблице устройств. · В `app/push.php` добавлены admin-helper’ы управления подписками: `push_subscription_set_active()` и `push_subscription_delete_by_id()`, а список подписок получил серверные фильтры (`q`, `only_errors`, `state`). · В `index.php` добавлен route `push_subscription_admin_action` для безопасного управления подписками из админки (POST + CSRF + capability).
Релиз v3.5.6
Исправлен бренд в уведомлениях: заголовок уведомлений теперь подтягивается из настроек сайта, а не захардкожен как `TSOY.CLOUD`. · В диагностике push-устройств добавлена колонка `Последний тест` (успех/ошибка, режим `payload/wake`, HTTP-код, время). · В `app/push.php` добавлен helper `push_app_title()` (с кешем), и серверные push-события/очередь/тестовые уведомления переведены на имя сайта из `settings`. · В `views/layout.php` + `views/partials/scripts.php` runtime уведомлений получил `siteName/siteHeaderName`; browser/PWA fallback notifications и toast теперь используют бренд из настроек.
Релиз v3.5.7
В диагностике push-устройств добавлена статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). · Добавлены кнопки сброса статистики доставок: для одной подписки и для всех подписок сразу. · В `push_subscriptions` добавлены поля `push_stat_*` и миграции для MySQL/SQLite; реальные отправки в `push_dispatch_user()` записывают статистику по подписке (`payload/wake/fallback/error`). · В `app/push.php` реализованы helper’ы `push_subscription_delivery_stats_record()` и `push_subscription_delivery_stats_reset()`.
Релиз v3.5.8
Hotfix уведомлений: название в заголовке уведомления теперь берётся в приоритете из `Название в шапке`, затем из `Название сайта`. · Исправлен fallback тестового уведомления в центре уведомлений: больше не показывает захардкоженный `TSOY.CLOUD`. · В `views/notifications.php` fallback `new Notification(...)` переведён на бренд из `window.__TSOY_NOTIFY`. · В `views/partials/scripts.php` helper `__tsoyNotifyTitle()` теперь использует `siteHeaderName` раньше `siteName`.
Релиз v3.5.10
В диагностике push-устройств добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общие счётчики попыток. · Добавлен мини-график/спарклайн по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца показывает объём попыток за день. · В `app/push.php` `push_queue_stats()` расширен блоком `delivery_summary`, который агрегирует `push_stat_*` по всем push-подпискам и считает проценты (`payload/fallback/error`). · Добавлена таблица/миграция `push_delivery_daily_stats` и запись дневной статистики при реальных отправках push (`payload/wake/fallback/error`).
Релиз v3.5.11
Страница `Настройки` в дашборде больше не выглядит как сплошная простыня: добавлен блок быстрых переходов по разделам (якоря) и группировка по логическим секциям. · Появились явные секции: основные параметры, дизайн/уведомления, PWA/push, функции/звонки/диагностика — ориентироваться в настройках стало заметно проще. · В `views/admin_settings.php` добавлены якоря (`id`) для ключевых блоков настроек и верхняя навигационная панель без изменения backend-логики сохранения формы. · Страница сохранена как единая форма `admin_settings`, поэтому существующие `POST`-обработчики, `formaction` для push-диагностики и CSRF-проверки продолжают работать без миграций.
Релиз v3.5.12
Hotfix страницы `Настройки`: быстрые переходы по разделам теперь ведут в нужные блоки страницы, а не в корень сайта. · Убран sticky-режим блока `Разделы настроек`, из-за которого он перекрывал интерфейс при прокрутке. · В `views/admin_settings.php` ссылки разделов переведены с hash-only (`#...`) на route-aware (`index.php?r=admin_settings#...`) для корректной работы при наличии `<base>`/нестандартного base path. · Снята sticky-позиция с `admin-settings-nav-card` (оставлен статичный блок), чтобы навигация не накрывала карточки настроек ниже по странице.
Релиз v3.5.13
Страница `Настройки` переделана в Android-style режим: слева список разделов, справа показывается только выбранный раздел настроек. · Переключение разделов теперь происходит без переходов по странице/якорям; интерфейс не перекрывается и не дёргается. · В `views/admin_settings.php` реализован client-side секционный контроллер (`data-settings-nav` / `data-settings-section`) с переключением видимости блоков внутри одной формы. · Сохранена совместимость с текущим backend `admin_settings`: `POST`-логика, `formaction` кнопки push-диагностики и CSRF-проверка не менялись.
Релиз v3.5.14
В разделе `Система` настроек добавлен выпадающий список выбора часового пояса по Гринвичу (GMT/UTC offsets). · При выборе смещения из списка значение автоматически подставляется в поле часового пояса ниже, чтобы сохранить настройку одним кликом. · В `views/admin_settings.php` добавлена генерация preset-списка фиксированных зон `GMT-12 ... GMT+14` с валидными IANA-идентификаторами (`Etc/GMT±N`, `UTC`). · Добавлена JS-связка `systemTimezoneUtcPreset -> systemTimezoneInput`, которая подставляет выбранный preset в существующее поле `system_timezone` без изменений backend-валидации.
Релиз v3.5.15
Настройки переведены в Android-style режим с боковым меню разделов и вторым уровнем внутри `PWA и push` (`Обновления`, `Очередь push`, `Устройства`). · В главное меню добавлен отдельный пункт `Настройки` (после `Дашборд`), доступный всем авторизованным пользователям. · Добавлен route `settings` с доступом через `sections.settings`; legacy route `admin_settings` сохранён для совместимости админ-инструментов и внутренних redirect’ов. · `index.php` (`settings/admin_settings`) разделён по scope сохранения: личные настройки (theme + notify prefs) сохраняются всем ролям, глобальные админ-настройки — только при `admin.settings` и не в режиме `admin_tester`.
Релиз v3.5.16
Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении общего бокового меню. · Переходы в меню настроек теперь открывают соответствующий экран, а не просто переключают внутренние блоки в одном и том же URL. · В `index.php` добавлены route-level страницы настроек (`settings_admin_*`) с capability-gates через `admin.settings`; legacy `admin_settings` сохранён и перенаправлен в режим `Брендинг` внутри общего шаблона. · В `views/admin_settings.php` реализована route-aware навигация: единый шаблон использует разные `action`/initial section в зависимости от текущего settings-route и корректно обрабатывает hash-переходы (`#pwa-notify-admin`, подпункты PWA и др.).
Релиз v3.5.17
Hotfix страницы `Настройки`: пункты бокового меню снова выглядят как кнопки (без подчёркиваний) и заполняют всю ширину колонки. · На desktop видимый раздел настроек теперь растягивается на всю доступную ширину правой панели (как `WebRTC`), а не остаётся половинной карточкой. · В `views/admin_settings.php` для `.admin-settings-side-btn` добавлены `display:block` и `text-decoration:none`, что устраняет регресс после перевода пунктов меню в `<a>`. · В JS-section режиме добавлен CSS override для `.js-settings-block.is-visible` внутри `.row`: `flex-basis/max-width:100%` (исправлен конфликт с Bootstrap `col-lg-6`).
Релиз v3.5.18
Hotfix страницы `Настройки`: в разделе `База данных` убрана лишняя горизонтальная линия перед карточкой блока. · Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь подстраивается под тему оформления и остаётся читаемой в светлой и тёмной темах. · В `views/admin_settings.php` удалён лишний `<hr class=\"my-4\">` перед блоком `settings-db`. · Стили `admin-settings-savebar` переведены с жёстко тёмного фона (`rgba(20,22,30,...)`) на theme-aware фон через Bootstrap CSS variables (`--bs-body-bg-rgb`, `--bs-body-color`, `--bs-border-color-translucent`).
Релиз v3.6.0
Начат рефакторинг связки `Профиль / Контакты / Мессенджер`: на всех трёх экранах добавлен единый переключатель разделов (Social Hub) и явное описание роли каждого раздела. · `Профиль` теперь явно позиционируется как публичная страница пользователя (посты, медиа, страницы, друзья), `Контакты` — как каталог и управление связями, `Мессенджер` — как диалоги/вложения/звонки. · Добавлен reusable partial `views/partials/social_suite.php` (единый CSS для Social Hub: header/switcher/surfaces/role-map chips). · `views/profile.php`, `views/contacts.php`, `views/chat.php` подключены к `social_suite` и получили общий navigation shell без вмешательства в критичную mobile-геометрию композера мессенджера.
Релиз v3.6.1
Следующий шаг по связке `Контакты / Мессенджер`: в мессенджере блок `Быстрый старт` теперь показывает только контакты пользователя, а полный каталог вынесен в раздел `Контакты`. · В настройках исправлено выравнивание раздела `База данных`: карточка блока больше не поднимается выше меню слева. · В `views/chat.php` удалено дублирование каталога пользователей внутри мессенджера: список `Начать чат` переведён на `contacts_list($me_id)` + ссылка в `index.php?r=contacts`. · В `views/admin_settings.php` выровнен db-блок (`settings-db`) относительно общего grid/меню и обновлены подписи/подразделы блока дизайна (`ui/notify`) для разделения личных и глобальных настроек.
Релиз v3.6.2
Убран лишний `Social Hub` с экранов `Профиль / Контакты / Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс снова стал компактнее. · В `Мессенджере` закреплена роль экрана: только активные диалоги и общение. Новый чат создаётся через раздел `Контакты`. · Удалён временный partial `views/partials/social_suite.php` и его подключения из `views/profile.php`, `views/contacts.php`, `views/chat.php` (откат лишнего UI-слоя без влияния на backend). · В `views/chat.php` удалён дублирующий сценарий старта чатов из списка пользователей/контактов: оставлен переход в `index.php?r=contacts` и история активных диалогов.
Релиз v3.6.3
Следующий шаг по связке `Контакты / Мессенджер`: в карточках пользователей на странице `Контакты` добавлены явные действия `Написать` и `Позвонить`. · Мессенджер очищен от каталоговых элементов: в боковой панели оставлены только активные диалоги, без блока быстрого старта/списков людей. · `index.php` (`chat_start` и `chat?start=`) теперь прокидывает `call=1` в итоговый URL диалога, чтобы из внешних экранов можно было запускать звонок напрямую. · В `views/contacts.php` унифицированы action-кнопки карточек (`Написать` / `Позвонить`) для списка контактов и каталога пользователей.
Релиз v3.6.4
Дожат интерфейс мессенджера под единый стиль с `Контактами`: обновлены список диалогов, шапка диалога и composer (кнопки, границы, поверхности, типографика). · Список диалогов стал визуально ближе к карточкам контактов: более ровные поверхности, одинаковая логика hover/active, читаемые превью и время. · Изменения сделаны только в `views/chat.php` на уровне CSS/визуальных состояний (`chat-dialog-item`, `chat-dialog-head`, `chat-inputbar`, action-buttons). · Мобильная геометрия ввода/клавиатуры (`fixed/sticky/viewport` логика, fullscreen layout цепочка) не изменялась, чтобы не вернуть iPhone-баг с \"подбородком\".
Релиз v3.6.5
Мессенджер получил второй visual-pass: доработаны карточки диалогов, шапка активного диалога, кнопки действий и composer для более цельного и лёгкого вида. · В списке диалогов добавлена компактная CTA-кнопка `Контакты` в шапке списка и более полезное пустое состояние с переходом в `Контакты`. · В `views/chat.php` расширен UI-only CSS слой (polish pass 2): `chat-list-headbar`, `chat-dialog-item`, `chat-dialog-head`, `chat-head-btn`, `chat-compose-btn` и density overrides. · Добавлены только безопасные классы/микроразметка в `views/chat.php` (CTA в списке диалогов, классы кнопок) без изменения маршрутов, логики сообщений и звонков.
Релиз v3.6.6
Hotfix iPhone/PWA уведомлений: системная строка `from ...` теперь берёт бренд из настроек (`Название в шапке` → `Название сайта`), а не из старого захардкоженного `TSOY.CLOUD`. · PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с брендингом проекта, чтобы имя приложения и имя в уведомлениях совпадали. · В `index.php` добавлен route `manifest`, который отдаёт динамический Web App Manifest на основе текущих настроек брендинга (`site_header_name` / `site_name`). · В `views/partials/head.php` `<link rel=\"manifest\">` переведён на динамический route с cache-bust (`APP_VERSION` + hash бренда); `application-name` и `apple-mobile-web-app-title` переведены на приоритет `site_header_name`.
Релиз v3.6.7
Исправлен мобильный overflow окна `Диалоги` в мессенджере: карточка списка диалогов больше не вылезает за ширину экрана на iPhone/смартфонах. · Стабилизирована ширина mobile-раскладки мессенджера без изменений логики клавиатуры и без риска вернуть баг с `подбородком`. · В `views/chat.php` для mobile добавлен точечный фикс ширины: убраны отрицательные отступы `row g-3` (Bootstrap gutter overflow) и зажаты `#chatListPane`/карточка/тело списка в `max-width:100%`. · Изменение ограничено CSS-слоем страницы чата; fullscreen/composer/`visualViewport` логика не изменялась.
Релиз v3.6.8
Ускорена отправка сообщений в мессенджере: сообщение появляется заметно быстрее после нажатия `Отправить`, без ощущения паузы в 2–3 секунды. · Повышена плавность UX при отправке: сервер отдаёт ответ чату сразу, а push-уведомления больше не держат отправку сообщения. · В `index.php` (`chat_send_async`) push для нового сообщения переведён в queue-first режим: уведомление ставится в очередь без синхронной отправки (`sendNow=false`). · HTTP-ответ `chat_send_async` теперь завершается до фоновой попытки dispatch push (`fastcgi_finish_request` / flush), чтобы Web Push не блокировал отображение сообщения.
Релиз v3.6.9
Подготовлен серверный фундамент чата для больших историй переписки (сотни тысяч/миллионы сообщений) без изменения привычного интерфейса. · Список диалогов и polling чата стали легче для сервера за счёт оптимизации хранения unread-состояния и индексов под крупные переписки. · В `conversations` добавлены денормализованные unread-счётчики (`u1_unread_count`, `u2_unread_count`) и метаданные последнего сообщения (`last_message_id`, `last_message_preview`). · В `app/chat.php` `message_send()` / `conversation_mark_read()` обновляют unread-счётчики диалога; `message_delete_for_me()` и `conversation_clear_for_me()` синхронизируют их через пересчёт/сброс.
Релиз v3.6.10
Полиш страницы `Контакты`: действия `Написать`, `Позвонить`, `Удалить` в карточках заменены на компактные иконки (конверт, трубка, корзина) для более чистого интерфейса. · Сохранены подсказки (`title`) и `aria-label`, чтобы UX остался понятным и доступным на ПК и мобильных устройствах. · В `views/contacts.php` добавлены `contacts-actions` и `contacts-action-icon` (theme/density-friendly размеры икон-кнопок), заменена текстовая разметка кнопок в списке `Мои контакты` и `Каталог пользователей`. · Логика маршрутов и действий (`chat_start`, `chat_start&call=1`, add/remove contact) не изменялась.
Релиз v3.6.11
Доведён UI действий в `Контактах`: кнопка `В контакты` заменена на иконку `человек+`, чтобы все действия в карточках были в одном визуальном языке. · Заголовок `Каталог пользователей` и кнопка `Найти` теперь находятся в одной строке, поле поиска вынесено отдельно ниже на полную ширину. · В `views/contacts.php` кнопка добавления контакта переведена на `bi-person-plus` с `title`/`aria-label`; сохранена существующая POST-логика `action=add`. · Поиск в каталоге использует `form=\"contactsSearchForm\"` у кнопки `Найти`, чтобы держать правильную desktop/mobile компоновку без изменения backend-маршрута `contacts`.
Релиз v3.6.12
Системные файлы проекта (логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации) переведены в единую системную папку `public/system/...`. · Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически и мягко переносятся в новую системную структуру при запуске приложения. · Добавлен `app/system_assets.php`: единый helper для системных ассетов (безопасное сохранение upload-файлов, удаление только из разрешённых системных директорий, миграция legacy-путей). · В `index.php` (`admin_settings`) загрузка логотипа, favicon и кастомных рингтонов переведена на `system_assets_store_upload(...)` с хранением в `public/system/branding` и `public/system/sounds`.
Релиз v3.6.13
В настройках переработан раздел `Внешний вид`: вместо разрозненных пунктов `Внешний вид профиля` и `Внешний вид сайта` появился единый раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). · Для глобального оформления сайта добавлены готовые профили внешнего вида (несколько пресетов под разные сценарии: чистый, рабочий, чтение, мягкий, ночной, psychedelic). · Добавлен helper `ui_appearance_profiles()` в `app/bootstrap.php` с готовыми профилями оформления и пакетами значений для `ui_*` настроек. · В `views/admin_settings.php` объединена навигация дизайна в один top-level `Внешний вид`, добавлен UI выбора/подстановки профиля оформления и обновлены кириллические шрифтовые опции.
Релиз v3.6.14
Исправлен UX профиля: кнопка `Написать` больше не отображается на собственной карточке профиля. · У вложений постов в обычном просмотре убраны кнопки `Удалить`: удаление доступно только в режиме редактирования поста. · В `views/profile.php` кнопка перехода в чат скрыта для `is_self`. · Из обычного рендера вложений в `views/profile.php` удалены формы `post_attachment_delete`; удаление оставлено в edit-блоке (`js-del-att`).
Релиз v3.6.15
В личном разделе `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. · Для публичной страницы профиля добавлена персональная настройка вида для гостей: `показывать боковое меню`, `скрывать боковое меню`, `скрывать боковое меню и шапку сайта`. · В `users` добавлены персональные UI-поля `ui_sidebar_mode` и `guest_profile_chrome_mode` (миграции в `app/migrations.php`). · В `index.php` (`settings`) сохранение пользовательских настроек расширено: добавлен `user_update_ui_prefs(...)` и синхронизация значений в session snapshot.
Релиз v3.6.16
В мессенджере добавлено контекстное меню сообщения по правой кнопке мыши и по удержанию на мобильных устройствах. · Меню действий сообщения теперь включает `Изменить`, `Удалить`, `Цитировать` и `Реакция` (с выбором emoji). · Добавлена таблица `message_reactions` (MySQL/SQLite) и миграции/индексы в `app/migrations.php`. · В `app/chat.php` добавлены batch-подгрузка реакций для пачек сообщений (`chat_messages_payload_for_client`) и `message_reaction_toggle(...)`.
Релиз v3.6.17
В мессенджере у сообщений добавлена маленькая галочка статуса прочтения (`прочитано / не прочитано`). · Галочка отображается у ваших сообщений и обновляется в диалоге автоматически, когда собеседник читает чат. · В `app/chat.php` в payload сообщений добавлен `is_read`, а также helper `conversation_last_read_sent_message_id(...)` для лёгкого read-receipt sync. · В `chat_send_async` и `chat_messages_poll` (`index.php`) добавлен `read_upto_own_id`, чтобы фронт мог обновлять статусы уже отрисованных сообщений без перезагрузки.
Релиз v3.6.18
В контекстное меню сообщения мессенджера добавлен пункт `Будильник` (пинг-напоминание). · Будильник доступен для ваших сообщений и отправляет повторное уведомление собеседнику только если сообщение ещё не прочитано. · Добавлен route `chat_message_nudge` в `index.php` с проверками: сообщение принадлежит текущему пользователю, находится в этом диалоге и ещё не прочитано. · В `app/push.php` добавлен `push_notify_chat_message_reminder(...)` с отдельным типом `chat_nudge` и dedupe tag по сообщению.
Релиз v3.6.19
Начато внедрение голосовых сообщений в мессенджер: добавлена красная кнопка микрофона и аккуратное окно записи. · Голос записывается прямо в браузере/на устройстве и прикрепляется к сообщению как аудио-вложение. · В `views/chat.php` добавлены voice-recorder modal, UI состояния записи и интеграция с `MediaRecorder` (MVP) без изменения keyboard/fullscreen геометрии чата. · Записанный blob прикрепляется через существующий `chatFileInput` (`DataTransfer`) и уходит в уже существующий backend upload flow `chat_send_async` / `message_send`.
Релиз v3.6.20
Добавлен глобальный preloader при загрузке страниц сайта: пользователь видит аккуратный индикатор загрузки вместо “пустого” экрана. · Для PWA добавлен отдельный режим preloader `Идёт установка приложения…` при установке через системную кнопку. · В `views/partials/head.php` добавлен theme-aware overlay `#tsoyPreloader` (общий для сайта и установщика), работающий в светлой/тёмной теме без жёстко тёмного фона. · В `views/partials/scripts.php` добавлен runtime `window.__TSOY_PRELOADER` (show/hide/set) с автоскрытием после загрузки, показом на внутренних переходах и submit-формах (кроме AJAX submit с `preventDefault`).
Релиз v3.6.21
Исправлено переключение разделов в настройках: секции теперь открываются без ощущения полной перезагрузки страницы. · В `Контактах` длинные имена пользователей больше не раздвигают и не перестраивают иконки действий: текст ужимается/переносится внутри текстовой зоны, а кнопки остаются на месте. · В `views/admin_settings.php` клики по боковому меню настроек переведены на client-side section switch (`history.pushState`) вместо обязательной навигации по `settings_admin_*` route; `form action` динамически переключается по секции, поэтому сохранение остаётся корректным. · В `views/contacts.php` добавлены отдельные классы текстовой зоны (`contacts-person-*`), `contacts-actions` переведён в `nowrap`/`flex-shrink:0`, а длинные имена ограничены в 1–2 строки без сдвига иконок.
Релиз v3.6.22
Hotfix preloader: убран автопоказ на каждый внутренний клик, поэтому переключение секций настроек и переходы между чатами больше не должны “подвисать” из-за overlay. · Preloader сохранён там, где он реально полезен: первичная загрузка страницы, установка сайта и установка PWA. · В `views/partials/scripts.php` глобальный preloader переведён в explicit-flow режим: отключён автоперехват всех внутренних ссылок и обычных submit-форм. · Автопоказ preloader оставлен только для `install.php` submit и для форм с `data-preloader=\"1\"`; PWA install flow (`beforeinstallprompt`) сохранён отдельно.
Релиз v3.6.23
В `Профиле` длинные тексты в карточках друзей/страниц и в постах ведут себя аккуратнее: текст ужимается/переносится внутри своей зоны и не ломает действия/бейджи. · В `install.php` добавлена мини-анимация этапов установки (БД → миграции → админ → готово) с синхронизацией текста в preloader. · В `views/profile.php` добавлены clamp/overflow правила для карточек друзей/страниц и фикс action-зон в постах, чтобы длинные строки не выталкивали элементы интерфейса. · В `install.php` реализован submit-time stepper без изменения backend-логики: этапы анимируются на клиенте и обновляют `__TSOY_PRELOADER` в режиме `install-site`.
Релиз v3.6.24
Hotfix preloader: страницы `Профиль` и `Мессенджер` открываются заметно быстрее, overlay загрузки больше не ждёт долго все картинки/медиа. · Preloader теперь скрывается на этапе готовности DOM, а не только после полного `window.load`. · В `views/partials/scripts.php` логика initial preloader boot переведена на `DOMContentLoaded`/`interactive` + `requestAnimationFrame`, чтобы не блокировать UI на медиа-насыщенных страницах. · `window.load` и `pageshow` оставлены только как fallback-сигналы; добавлен hard fail-safe timeout на случай странных браузерных зависаний событий.
Релиз v3.6.25
Hotfix голосовых сообщений: голосовые `.webm` в мессенджере теперь отображаются плеером, а не только ссылкой на файл. · Фикс работает и для уже отправленных голосовых (по имени `voice_message_*`), и для новых записей. · В `app/files.php` добавлена нормализация MIME для browser voice-notes (`voice_message_*`), чтобы `.webm/.ogg/.m4a` не сохранялись как generic/video MIME. · В `app/chat.php` добавлен helper `chat_file_is_audio_like(...)`, а payload чата теперь отдаёт `file_is_audio` для корректного client render старых и новых голосовых.
Релиз v3.6.26
На главной странице блок недавних файлов больше не растягивает экран вниз: по умолчанию показываются первые 3 файла. · Остальные файлы открываются кнопкой `Показать ещё файлы` (порциями по 3), как в разделе новостей. · В `views/home.php` лента файлов переведена на существующий механизм `data-load-more-root` из `views/layout.php` без добавления нового JS-кода. · Для элементов файлов добавлено серверное начальное скрытие (`d-none`) после первых 3 записей, чтобы список был компактным сразу при рендере страницы.
Релиз v3.6.27
Hotfix голосовых сообщений в мессенджере: voice-notes отображаются компактной одной строкой без второй строки с именем файла. · Визуал голосового сообщения стал тоньше и аккуратнее, ближе к обычной строке сообщения. · В `views/chat.php` voice-note рендер (`voice_message_*`) уже использует отдельный inline-layout без file-link; в релиз включён hotfix компактности CSS (`.chat-voice-inline-row`, `.chat-audio-clip.is-voice-note`). · Серверный и polling JS рендеры голосовых сообщений синхронизированы: для voice-notes не выводится отдельная строка имени файла.
Релиз v3.6.28
Голосовые сообщения в мессенджере: один тап по микрофону запускает запись, повторный тап останавливает запись и сразу отправляет голосовое. · Если запись не удалось отправить автоматически, голосовое остаётся прикреплённым в composer и можно отправить вручную. · В `views/chat.php` обычный click/tap микрофона переведён на toggle-логику записи (`start/stop+auto-send`) без изменения mobile composer/fullscreen геометрии. · Добавлен helper программной отправки через существующий async submit (`chat_send_async`) после авто-прикрепления voice blob в composer.
Релиз v3.6.29
Голосовые сообщения в чате теперь воспроизводятся одинаково на ПК и телефоне: компактной одной кнопкой play/pause. · У voice-note больше нет зависимости от урезанных native audio-controls браузера на десктопе. · В `views/chat.php` voice-notes (`voice_message_*`) переведены на custom mini-player (кнопка + hidden audio) в server-side и polling-render. · Добавлена JS-делегация управления воспроизведением (play/pause, синхронизация иконки, автопауза предыдущего голосового).
Релиз v3.6.30
В `Настройки -> Внешний вид` добавлены персональные настройки preloader: режим (`умный / только установка-PWA / выключить`), компактный вид и показ текста. · Preloader теперь можно настроить под себя по каждому профилю аккаунта (профиль = отдельный user). · В `users` добавлены персональные UI-поля preloader (`ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text`) с загрузкой в session snapshot и применением в `views/partials/scripts.php`. · В `views/partials/head.php` добавлены вариации preloader (`compact`, скрытие текста), а runtime учитывает пользовательский режим без ломки install/PWA сценариев.
Релиз v3.6.31
Hotfix голосовых сообщений на телефоне: mini-player voice-note снова стабильно воспроизводится по тапу. · Поведение mini-player синхронизировано для mobile/desktop (play/pause одной кнопкой). · В `views/chat.php` для voice mini-player добавлен mobile-safe `touchend` handler с подавлением дубля `click`, чтобы iPhone/Safari не терял тап. · Скрытый `<audio>` переведён с `display:none` на visually-hidden класс; добавлен `audio.load()` перед `play()` для лучшей совместимости мобильных браузеров.
Релиз v3.6.32
В Брендинге добавлена отдельная настройка `Иконка PWA` (опционально) для установленного приложения. · Если PWA-иконка не задана, приложение теперь использует `favicon`, а затем `лого` как fallback. · Route `index.php?r=manifest` теперь динамически подменяет `icons` (и shortcut icons) из настроек брендинга вместо жёстких `/public/icons/...`. · В `views/partials/head.php` `apple-touch-icon` переведены на динамический PWA icon с cache-bust, а `manifest` cache-bust учитывает смену иконки.
Релиз v3.6.33
В PWA исправлен просмотр файлов: теперь файл открывается во встроенной странице-просмотрщике с кнопкой `Назад`, а не “захватывает” приложение без пути назад. · Кнопка `Открыть` в файловом проводнике тоже использует этот встроенный просмотр в standalone/PWA. · Добавлен route `index.php?r=file_viewer` с безопасной проверкой доступа к файлу и возвратом по `back` URL. · В `views/partials/scripts.php` добавлен standalone-PWA перехват ссылок `index.php?r=view&id=...` с перенаправлением во встроенный просмотрщик вместо raw-file response.
Релиз v3.6.34
Hotfix mini-плеера голосовых на телефоне: воспроизведение по тапу снова стабильно запускается. · Поведение mini-player выровнено между iPhone/Android и ПК (одна кнопка play/pause). · В `views/chat.php` mini-player получил прямые обработчики `touchend/click` на кнопке (а не только делегирование через контейнер сообщений) с защитой от двойного срабатывания. · Убран рискованный pre-play `audio.load()` как основной путь; добавлен fallback reload только при ошибке `play()`.
Релиз v4.0.0
Новый формат приложения `messenger`: отдельный упрощённый режим только для Контактов и Мессенджера с прямым открытием чата. · Страница `Админ → Пользователи` полностью переработана: аккаунт и его профили теперь управляются в одной карточке. · В модель пользователей добавлены `app_mode`, `group_id`, `group_role`, `allow_multiprofile`, `admin_password_hint`; добавлены таблицы `groups`, `group_members`, `group_bridges` и миграции/индексы для них. · Реализована backend-видимость по группам и мостам в `users_directory`, `contacts_list`, `conversation_get_or_create`, `conversations_for_user` и проверках `chat_start`/добавления контактов.
Релиз v4.1.0
Управление группами и мостами вынесено в отдельную страницу `Дашборд → Группы и мосты` с полным управлением: создание, переименование, удаление групп и мостов, просмотр участников. · Страница `Пользователи` очищена от группового управления, оставлены только аккаунты и создание; добавлена ссылка на новую страницу групп. · Добавлены backend-функции `group_rename()`, `group_delete()`, `group_bridge_delete()` в `app/users.php` для полного CRUD-управления группами и мостами. · Новый route `admin_groups` в `index.php` с POST-обработчиками: `create_group`, `rename_group`, `delete_group`, `set_bridge`, `delete_bridge`.
Релиз v4.2.0
В мессенджере при записи голосового сообщения появляется красная кнопка-корзина для отмены записи (как в Telegram). Работает и при тапе, и при удержании. · Добавлена функция «Удалить у всех»: отправитель может удалить своё сообщение не только для себя, но и для собеседника. · Добавлена кнопка `#voiceCancelBtn` (`.chat-voice-cancel-btn`) в inputbar мессенджера; появляется при `voiceTapRecording`/`voiceHoldRecording`, вызывает `voiceRecResetState()` для отмены. · В `app/chat.php` добавлена `message_delete_for_all()` — физическое удаление сообщения и его реакций; доступно только отправителю.
Релиз v4.3.0
Создана отдельная страница «Новости» со всеми админ- и системными новостями, пагинацией и кнопкой «Показать ещё». · На дашборде в блоке «Новости» теперь показываются только 2 последних записи и ссылка «Все новости →». · Создан `views/news.php` — standalone-страница новостей с `page_top`, раздельными блоками admin/system news и load-more (initial=10). · Добавлен маршрут `case "news"` в `index.php` затягивающий `views/news.php`.
Релиз v4.4.0
Администрирование новостей вынесено из дашборда сотрудников на отдельную страницу с полным CRUD (создание, чтение, редактирование, удаление). · Файловый проводник «Мои файлы» полностью переписан: карточный/списочный вид, drag-n-drop файлов в папки, зона загрузки, контекстное меню, иконки по типу файла, переключатель grid/list. · В `app/news.php` добавлены `news_get()` и `news_update()` для CRUD новостей. · В `index.php` добавлен маршрут `news_update` (POST, csrf, audit_log).
Релиз v4.5.0
Мессенджер переработан в стиле Telegram: кнопка «корзина» при записи голосового теперь слева, заголовок чата стал overlay поверх сообщений (больше полезной площади), упрощённый хедер (только «Назад» + имя/аватар). · Нажатие на имя/аватар в чате открывает карточку пользователя (Telegram-style slide-in панель) с действиями: звонок, ссылка, профиль, очистить чат. · `views/chat.php` — voiceCancelBtn перемещён перед attachBtn в HTML (trash слева при записи). · `views/chat.php` — заменён `.chat-dialog-head` на `.chat-overlay-head` (position: absolute, backdrop-filter, overlay поверх сообщений).
Релиз v4.6.0
Создана единая дизайн-система проекта (14 переиспользуемых компонентов): карточки, hover-эффекты, стеклянные панели, навигация, статусные индикаторы, зоны загрузки и др. · Unification поверхностных переменных (light/dark × soft/balanced/strong) — 6 тем теперь задаются в одном месте вместо дублирования в каждом view. · Создан `public/css/design-system.css` (382 строки, 14 компонентов): `.t-surface`, `.t-stat-card`/`.t-stat-grid`, `.t-card-hover`, `.t-info-card`, `.t-card-frosted`, `.t-section`/`.t-section-title`, `.t-page-border`, `.t-summary-grid`, `.t-status-pill`, `.t-list-hover`, `.t-status-dot`, `.t-sticky-bar`, `.t-nav-item`, `.t-upload-zone`. · В `views/partials/head.php` подключён `public/css/design-system.css` перед inline `<style>`.
Релиз v5.0.0
Система «Группы» переименована в «Домены» — организационные единицы теперь называются доменами. · Маршрут `admin_groups` → `admin_domains`; навигация, дашборд и все UI-тексты обновлены. · Миграция БД: таблицы `groups`→`domains`, `group_bridges`→`domain_bridges`, `group_members`→`domain_members`; колонки `group_id`→`domain_id`, `group_role`→`domain_role`, `is_global_group`→`is_root_domain`, `group_a_id`→`domain_a_id`, `group_b_id`→`domain_b_id`. · Поддержка MySQL и SQLite: `ALTER TABLE RENAME`, `RENAME COLUMN` / `CHANGE COLUMN` в зависимости от драйвера.
Релиз v5.1.0
Маршрут `dashboard` (файловый проводник) переименован в `skybox` — SkyBox, личное облачное хранилище. · Маршрут `staff` (панель администратора) переименован в `dashboard` — Дашборд. · `views/dashboard.php` → `views/skybox.php`; `views/staff.php` → `views/dashboard.php`; `views/admin.php` → `views/filehub.php`. · `index.php`: маршруты, capability map, case-блоки и все redirect/fallback URL обновлены.
Релиз v5.2.0
FileHub переписан на единый с SkyBox карточный интерфейс (grid/list, sidebar, поиск, breadcrumbs). · Выпадающее меню профиля полностью переработано: чистый список ссылок, компактное переключение профилей, убрана сетка кнопок. · `views/filehub.php` переписан с табличной разметки на `cloud-file-grid`/`cloud-file-card` из SkyBox. · `views/layout.php`: dropdown `.topbar-profile-menu` и модальное окно `#userProfilesModal` заменены новой разметкой с `.tpm-*` и `.upm-*` классами.
Релиз v5.3.0
Поле «Отображаемое имя» разделено на «Имя» и «Фамилия» — два отдельных поля повсюду в системе. · При регистрации теперь обязательно указать имя и фамилию. · Миграция: добавлены колонки `first_name` и `last_name` в таблицу `users`. · Колонка `display_name` сохранена для обратной совместимости — автоматически вычисляется из `first_name + last_name`.
Релиз v5.4.0
Настройка Preloader перенесена из личных настроек пользователя в глобальные настройки администратора (раздел «Дизайн»). · Push-подписки: автоматическая дедупликация устройств — при переподписке с того же устройства старая подписка заменяется. · Preloader: параметры `preloader_mode`, `preloader_compact`, `preloader_show_text` перенесены в таблицу `settings`. · Per-user параметры `ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text` больше не используются (колонки сохранены для совместимости).
Релиз v5.5.0
Защита от брутфорса: ограничение попыток входа (5 за 15 мин) с автоматической блокировкой по IP+логину. · Минимальная длина пароля — 8 символов (регистрация, смена пароля, создание пользователя). · Security headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS. · .htaccess deny для директорий `app/` и `storage/` — прямой доступ запрещён.
Релиз v5.6.0
Редактирование профиля: страница переверстана на CSS Grid — блоки «Смена пароля» и «Уведомления» теперь в боковой колонке справа (1fr + 380px). · Политики: галочки для admin и admin_tester разблокированы при редактировании global_admin. · Новые функции: `user_role_rank()`, `user_can_see_password()`, `user_get_password_hint()`, `domain_get_by_code()`, `domain_generate_short_code()`, `domain_regen_code()`. · `domain_create()` генерирует уникальный 3-char код вместо slug-транслитерации.
Релиз v5.7.0
Дашборд: полностью переработанная панель с KPI-виджетами — пользователи, сообщения, файлы, контент, звонки, аудит. · Дашборд: лента последних действий (10 записей) с иконками по типу операции и карточка «Новые пользователи». · Новая функция `dashboard_stats()` в `app/health.php` — агрегированная статистика из 15+ таблиц за один вызов. · Настройки дашборда: `dashboard_widgets_json`, `dashboard_refresh_interval`, `dashboard_show_activity`, `dashboard_compact` в `settings_defaults()`.
Релиз v5.8.0
Настройки: иконки Bootstrap Icons у каждого пункта сайдбара (палитра, щит, шестерёнка, телефон, БД и др.) во цветных плашках. · Настройки: быстрый поиск по всем разделам — поле с debounce-фильтрацией, счётчик совпадений, горячая клавиша Ctrl+K. · CSS: новые классы `.admin-settings-search`, `.admin-settings-side-icon`, `.admin-settings-section-hdr`, `.js-dirty-badge`, `.admin-settings-kbd-hint`. · CSS: анимация `settingsFadeIn` (opacity + translateY), `savebarPulse` для индикации dirty-state.
Релиз v5.8.1
Удаление пользователей: исправлен баг — удалённые пользователи теперь скрываются из основного списка, кнопка «Показать удалённых» для просмотра. · Удаление пользователей: бейдж «удалён» и кнопка «Восстановить» в карточке пользователя. · `users_accounts_with_profiles()` принимает параметр `$includeDeleted` — по умолчанию скрывает `is_deleted=1`. · Новая функция `user_restore()` для восстановления soft-deleted пользователей.
Релиз v5.8.2
Полное удаление аккаунта: администратор может безвозвратно удалить пользователя и все его данные (сообщения, файлы, посты, профили). · Полное удаление аккаунта: кнопка «Полное удаление» в панели управления пользователями с усиленным подтверждением. · Новая функция `user_delete_hard()` — полная очистка всех данных пользователя из 31+ таблиц и файловой системы (аватары, обложки, загруженные файлы). · Ручная очистка таблиц без FK CASCADE: `domain_members`, `short_links`, `boards`, `rtc_*` таблицы; nullify `created_by_user_id` в `domains` / `domain_bridges`.
Релиз v5.8.3
База данных: новая опция «Подключиться без миграции» — позволяет переключить конфиг на существующую БД с данными без переноса и без удаления данных. · Предотвращает потерю данных при повторном подключении к MySQL после обновления сайта (когда конфиг сбрасывается на SQLite). · Параметр `skip_migration` в admin_db POST-обработчике: проверяет подключение, запускает `ensure_schema()` (CREATE IF NOT EXISTS + инкрементальные миграции) и `ensure_mysql_utf8mb4()`, но НЕ вызывает `migrate_database()` / `db_truncate()`. · Разрешена отправка формы при `target === current` в режиме reconnect (для переподключения к той же БД).
Релиз v5.8.4
Доменная изоляция: администратор домена теперь видит в разделе «Пользователи» только пользователей своего домена, а не всех. · Новая политика «Мосты для доменных администраторов» (Настройки → Доступ): не видеть / только просмотр / полный доступ к пользователям мостовых доменов. · `users_accounts_with_profiles()` принимает `?array $filterDomainIds` — SQL фильтрует `domain_id IN (…)`. · Новые хелперы: `is_root_domain_admin()`, `admin_bridged_domain_ids()`, `admin_visible_domain_ids()`, `admin_can_manage_user()`, `admin_can_view_user()`.
Релиз v5.8.5
Дашборд: статистика фильтруется по домену — администратор домена видит метрики только своего домена, а не всего сервиса. · Политики: доменные политики (мосты, корневой админ, домен по умолчанию) перенесены из Настроек на страницу «Политики» для единообразного управления. · Новая функция `dashboard_stats_for_domains(array $domainIds)` в `app/health.php` — статистика, ограниченная набором доменов. · `views/dashboard.php` использует `admin_visible_domain_ids()` для выбора `dashboard_stats()` или `dashboard_stats_for_domains()`.
Релиз v5.8.6
Мессенджер: полная переработка интерфейса в стиле Telegram — боковой список диалогов, панель переписки, адаптивная мобильная раскладка. · Мессенджер: голосовые сообщения, эмодзи-пикер, вложения файлов из облака и устройства. · views/chat.php: 6589 → 2410 строк (−63%), IIFE-архитектура с 23 секциями, 98 функций, 51 слушателей событий. · views/profile.php: 2338 → 1247 строк (−47%), CSS-переменные через .pf-* namespace, Bootstrap 5.3.3 интеграция.
Релиз v5.8.7
Исправлена ошибка FK-ограничения при переключении с SQLite на MySQL: таблица news больше не требует существующего пользователя для системных записей. · news: author_user_id изменён с INT NOT NULL на INT NULL DEFAULT NULL; FK-ограничение fk_news_user удалено. · Миграция Stage 10.21: DROP FOREIGN KEY, MODIFY COLUMN, UPDATE author_user_id = 0 → NULL для существующих MySQL-установок.
Релиз v5.8.8
Исправлена ошибка «Incorrect string value» при переключении на MySQL: эмодзи в новостях и чейнджлоге теперь корректно сохраняются. · ensure_mysql_utf8mb4() вызывается ДО ensure_schema() — SET NAMES utf8mb4 теперь действует до любых INSERT. · Список таблиц в ensure_mysql_utf8mb4 расширен с 21 до 39 (добавлены domains, boards, push_*, short_links, profile_media_items и др.).
Релиз v5.8.9
Профиль: исправлено отображение аватара и обложки (неверное имя поля avatar_file_id → avatar_path). · Мессенджер: сообщения теперь отображаются в цветных облачках (свои — акцентные, чужие — серые). · profile.php: avatar_file_id → avatar_path, cover_file_id → cover_path (6 мест). · chat.php: добавлены CSS-классы msg-own / msg-other на элементы сообщений (PHP + JS).
Релиз v5.8.10
Мессенджер: окно чата теперь корректно помещается в экран на любом устройстве (ПК и мобильные). · layout.php: content-canvas-mode → flex column с height:100dvh для корректного заполнения viewport. · chat.php: messenger-shell заменён calc(100dvh-140px) на flex:1 + min-height:0 — автоматическое заполнение оставшегося пространства.
Релиз v5.8.11
Профиль: кнопка «Написать» теперь открывает диалог с пользователем, а не пустой мессенджер. · Мессенджер: заголовок «Мессенджер» скрывается когда активен диалог (и на ПК, и на мобильных) — больше места для сообщений. · profile.php: ссылка «Написать» peer= → user_id= (матчит параметр в chat_start роуте). · chat.php: .chat-page-head скрывается на всех брейкпоинтах когда есть активный чат (display:none!important).
Релиз v5.8.12
Мессенджер: заголовок скрыт на мобильных — диалоги занимают весь экран. · Мессенджер: кнопка действий (⋯) теперь внутри облачка сообщения, а не за его пределами. · chat.php: .chat-page-head display:none!important на @media ≤991.98px (скрыт всегда на мобильных). · chat.php: .msg-actions-btn перенесён внутрь bubble (top:.25rem right:.25rem вместо left/right:-.8rem).
Релиз v5.8.13
Мессенджер: панель ввода теперь всегда видна на экране, страница не прокручивается. · layout.php: html/body/app-shell получают height:100dvh + overflow:hidden через :has(.content-canvas-mode). · layout.php: sidebar ограничен 100dvh с overflow-y:auto в canvas-режиме.
Релиз v5.8.14
Мессенджер: исправлены read receipts — отметка «прочитано» снова обновляется без перезагрузки страницы. · Мессенджер: исправлен экран звонка — окно звонка теперь корректно открывается и закрывается. · index.php: добавлен JSON endpoint `chat_mark_read` (CSRF + проверка участника диалога). · index.php: добавлен route `chat_file` для `admin_chat_view` с проверкой прав `admin/users`.
Релиз v5.8.15
Мессенджер: панель ввода закреплена внизу экрана на ПК и мобильных, без провала по высоте. · Мессенджер: кнопки отправки/микрофона снова работают по ожидаемой логике (пусто — микрофон, есть текст — отправка). · views/chat.php: выровнена мобильная/desktop вёрстка compose-зоны, исправлены conditionals рендера send/mic. · views/chat.php: интегрирован Picmo (`public/vendor/picmo/*`) вместо тяжёлого рантайма старого picker.
Релиз v5.8.16
Звонки в мессенджере: исправлен сценарий «Связь: ожидание» без подключения — звонки снова устанавливаются. · Мессенджер на телефоне: устранён правый зазор, чат и зона ввода снова растягиваются на всю ширину экрана. · index.php: call/rtc роуты добавлены в whitelist messenger-mode (`call_start/call_poll/call_signal_send/...`) — больше нет редиректа в HTML для JSON API. · app/chat.php: `call_is_participant()` получил fallback на `caller/callee` для legacy/частично мигрированных записей `rtc_call_members`.
Релиз v5.8.17
Мобильный чат: устранён нижний «подбородок» и восстановлена корректная полноэкранная геометрия в mobile/PWA. · Мессенджер: новые сообщения снова появляются строго снизу, история подгружается только вверх. · views/chat.php: mobile fullscreen переведён на единый safe-area (компенсация только в composer), `body.chat-mobile-fullscreen` больше не дублирует нижний inset. · views/chat.php: `chatJumpBottom` вынесен из потока сообщений; `appendMessages()` всегда добавляет в конец, `prependMessages()` — только в начало.
Релиз v5.8.18
Обновления больше не переключают рабочий сайт с MySQL на SQLite после распаковки релиза. · Первичный запуск корректно открывает установщик, если реальная конфигурация БД отсутствует. · scripts/make-release.ps1: исключено принудительное добавление `storage/config.php` в релиз (опционально только через `-IncludeRuntimeConfig`). · app/core.php: `is_installed()` переведён на валидацию конфигурации (`mysql` поля / наличие sqlite-файла), а не на простой факт существования `storage/config.php`.
Релиз v5.8.19
Мобильный мессенджер: исправлена геометрия fullscreen-чата на телефоне — убран нижний «подбородок», зона ввода прижата к низу и корректно следует за клавиатурой. · Мессенджер: устранены повторяющиеся day-divider при отправке новых сообщений в текущий день. · views/chat.php: mobile fullscreen переведён на `inset + --chat-vv-bottom` (keyboard gap) вместо `top/height`, убраны лишние `100vw` ограничения и правый зазор. · views/chat.php: day-divider логика нормализована через `normalizeDayToken()` + `lastRenderedDayToken()`; `appendMessages()` больше не создаёт лишние разделители дат.
Релиз v5.8.20
Исправлен критичный сбой `CSRF token mismatch` после регистрации/авторизации в мобильных webview (включая Telegram/iOS). · Формы входа/регистрации/спец-регистрации и инсталлятора стали устойчивее к возврату из кеша страницы. · app/bootstrap.php: CSRF переведён на rolling-пул токенов (`csrf_tokens`) + восстановление из cookie при потере session. · app/bootstrap.php: добавлен fallback по нескольким именам CSRF-cookie (`__Host-*` и non-host) для mixed HTTPS/proxy окружений.
Релиз v5.8.21
Версия на сайте теперь корректно обновляется после деплоя релиза на Linux-серверы. · Тех. релиз и системная новость для текущей версии автоматически появляются в интерфейсе без ручного добавления. · scripts/make-release.ps1: сборка ZIP переписана на явное добавление файлов с POSIX-путями (`/`) вместо Windows-разделителей (`\`). · app/news.php: добавлена `news_sync_builtin_releases_for_version(APP_VERSION)` — дозапись встроенных `system/changelog` записей для текущей версии в существующие БД.
Релиз v5.8.22
Исправлена диагностика обновлений: теперь легко проверить, какая версия реально работает на сервере. · Уточнён и зафиксирован безопасный деплой-процесс для production, чтобы версия в подвале и техрелизы всегда обновлялись. · index.php и install.php: добавлен HTTP-заголовок `X-TSOY-Version` с текущим `APP_VERSION` для быстрой проверки фактической версии после деплоя. · README.md: добавлены инструкции проверки версии через `curl -I` и очистки артефактов старых Windows-архивов (`*\\*`) на Linux.
Релиз v5.8.23
Стабилизирована работа проекта за reverse-proxy/CDN: HTTPS-ссылки и cookie теперь формируются корректно в проксированных окружениях. · Снижён риск проблем с логином/CSRF/выходом из-за неверного определения схемы запроса. · app/core.php: добавлены `request_is_https()` и `request_scheme()` с поддержкой `HTTPS`, `X-Forwarded-Proto`, `X-Forwarded-SSL`, `Front-End-Https`. · app/bootstrap.php, app/auth.php, app/utils.php: secure-cookie логика переведена на единый helper (session/theme/csrf/guest token).
Релиз v5.8.24
Исправлен критичный фатал после деплоя: сайт снова открывается штатно (без `Call to undefined function request_is_https()`). · app/bootstrap.php: загрузка `app/core.php` перенесена в начало файла, до первого вызова `request_is_https()`. · Исправлен порядок инициализации bootstrap для совместимости с production-окружениями при `require_once app/bootstrap.php` из `index.php`.
Релиз v5.8.25
Админка БД: добавлен анализ потенциально неиспользуемых колонок прямо в разделе `/index.php?r=admin_db`. · Удаление колонок переведено в безопасный режим: только после явного подтверждения и только для проверенных случаев. · app/admin_maintenance.php: добавлены `admin_db_unused_columns_report()` и `admin_db_drop_column()` с эвристическим сканом кода проекта. · Проверки удаления: защита критичных имён (`id`, `*_id`, `*_at`), блокировка при индексах/PK/FK и повторная проверка использования в коде.
Релиз v5.8.26
Админка БД: упрощён процесс массового удаления ненужных таблиц. · Теперь можно одним действием удалить сразу несколько выбранных таблиц с единым подтверждением. · app/admin_maintenance.php: добавлены `admin_db_unused_tables_report()` и `admin_db_drop_tables_batch()`. · Пакетное удаление защищено проверками: миграционное управление таблицей, сигналы использования в коде и внешние ключи.
Управление жизненным циклом комнат звонков
- Создатель может завершать комнату звонка. - Админ может закрывать и удалять публичные комнаты.Читать полностью
- Создатель может завершать комнату звонка.
- Админ может закрывать и удалять публичные комнаты.
Оптимизация старта интерфейса
- Перенесены второстепенные polling-задачи в idle-фазу. - Снижен пиковый отклик главного потока при открытии страниц.Читать полностью
- Перенесены второстепенные polling-задачи в idle-фазу.
- Снижен пиковый отклик главного потока при открытии страниц.
Hotfix 2.3.9: стабилизация текста
- Проведена чистка поврежденных строк интерфейса. - Обновлены сообщения и статусы в основных маршрутах.Читать полностью
- Проведена чистка поврежденных строк интерфейса.
- Обновлены сообщения и статусы в основных маршрутах.
Hotfix 2.3.10: исправление кодировки
- Удалены поврежденные текстовые строки из ключевых экранов. - Исправлены уведомления профиля, чатов и панели. - Подготовлена база для финальной стабилизации.Читать полностью
- Удалены поврежденные текстовые строки из ключевых экранов.
- Исправлены уведомления профиля, чатов и панели.
- Подготовлена база для финальной стабилизации.
Hotfix 2.3.11: полная правка кодировки
- Восстановлен index.php из стабильной базы без поврежденных строк. - Исправлены системные сообщения и заголовки в маршрутах и админ-разделах. - Очищены тексты новостей: теперь только нормальная кириллица.Читать полностью
- Восстановлен index.php из стабильной базы без поврежденных строк.
- Исправлены системные сообщения и заголовки в маршрутах и админ-разделах.
- Очищены тексты новостей: теперь только нормальная кириллица.
Hotfix 2.3.12: исправлен экран звонка по ссылке
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room. - Исправлены поврежденные символы в views/call_room.php и views/admin.php. - Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.Читать полностью
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room.
- Исправлены поврежденные символы в views/call_room.php и views/admin.php.
- Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.
Policy 2.3.13: UTF-8 без BOM всегда
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM. - Добавлен .editorconfig с фиксированным charset=utf-8. - В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.Читать полностью
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM.
- Добавлен .editorconfig с фиксированным charset=utf-8.
- В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.
Call Quality 2.3.14: стабильнее звук и соединение
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках. - Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate. - Включено автоматическое ICE-переподключение при `d…Читать полностью
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках.
- Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate.
- Включено автоматическое ICE-переподключение при `disconnected/failed`, чтобы звонок не обрывался на смене сети.
Call Stability 2.3.15: быстрый отклик без «убийства» сервера
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов. - Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий. - Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.Читать полностью
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов.
- Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий.
- Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.
Admin DB Tools 2.3.16: импорт/экспорт БД и безопасная очистка
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта. - Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads. - Импорт выполн…Читать полностью
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта.
- Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads.
- Импорт выполняется с полной заменой данных таблиц приложения; перед импортом рекомендуется сделать экспорт БД и копию папки storage/.
Hotfix 2.3.17: emoji снова отправляются в мессенджере (MySQL utf8mb4)
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях. - Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`). - Добавлена автоматическая проверка и конвертация старых таблиц в ut…Читать полностью
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях.
- Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`).
- Добавлена автоматическая проверка и конвертация старых таблиц в utf8mb4 при запуске сайта (только при необходимости, без постоянных ALTER).
Admin DB 2.3.18: диагностика utf8mb4 / emoji для MySQL
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji. - Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть). - Это диагностический ре…Читать полностью
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji.
- Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть).
- Это диагностический режим (только чтение метаданных), чтобы быстро проверять состояние после миграций и импортов.
Messenger Emoji 2.3.19: полноценный picker + недавние + клоун 🤡
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление. - Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме). - В быстрый набор добавлен клоун 🤡; вы…Читать полностью
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление.
- Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме).
- В быстрый набор добавлен клоун 🤡; выбранные emoji сохраняются в недавние (localStorage).
Messenger Hotfix 2.3.20: сообщения видны сразу в открытом чате
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог. - Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы. …Читать полностью
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог.
- Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы.
- Если пользователь находится внизу чата, новые сообщения автоматически прокручиваются в видимую область.
Messenger Hotfix 2.3.21: список диалогов обновляется без перезахода
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата. - Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся…Читать полностью
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата.
- Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся данных.
- В открытом чате после прихода нового сообщения автоматически ускоряется обновление списка диалогов для быстрого показа превью и бейджей.
Messenger UI 2.3.22: PWA-интерфейс ближе к Telegram/WhatsApp
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается. - Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и комп…Читать полностью
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается.
- Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и компактнее на телефоне.
- UI-рефактор выполнен без изменения рабочих API сообщений и звонков, чтобы не ломать стабильность проекта.
Hotfix 2.3.23: стабильная авторизация (PWA/мобильные сессии)
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт. - Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS). - Добавлено скользящее продление session cook…Читать полностью
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт.
- Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS).
- Добавлено скользящее продление session cookie и project-local хранение сессий (storage/sessions), чтобы уменьшить влияние server-wide очистки сессий.
Messenger UX 2.3.24: фиксированная форма + lazy history x10 + glass mobile
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа. - История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а н…Читать полностью
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа.
- История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а новые сообщения подгружаются вниз компактными пачками.
- На мобильном/PWA экране восстановлен стеклянный визуальный стиль мессенджера (glass-эффект).
Messenger Hotfix 2.3.25: последние сообщения + форма ввода видны сразу
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт. - Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна…Читать полностью
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт.
- Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна в окне чата.
- Дополнительно стабилизирован glass-вид мессенджера на телефоне/PWA после UI-рефакторинга.
Notifications Center 2.3.26: быстрые настройки + проверка доставки + mobile chat keyboard fix
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA. - Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Se…Читать полностью
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA.
- Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Service Worker + fallback на Notification API).
- В мессенджере на мобильных исправлен лишний отступ между клавиатурой и полем ввода: окно чата теперь синхронизируется с VisualViewport, поле ввода ведёт себя стабильнее.
Profile & Social 2.3.27: about-страница, лайки постов, загрузка файлов с устройства
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото). - В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников…Читать полностью
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото).
- В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников с устройства.
- В постах профиля добавлены лайки и кнопка «Ссылка на пост».
- Убраны дефолтные кнопки «Скачать/Магнит» под вложениями в ленте постов; ссылки на файлы показываются только если владелец явно разрешил скачивание.
- При создании и редактировании постов теперь можно прикреплять файлы напрямую с устройства, а не только выбирать из облака.
Hotfix 2.3.28: кириллица в центре уведомлений
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений. - Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).Читать полностью
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений.
- Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).
Hotfix 2.3.29: полная зачистка кракозябр в index.php + усиленный encoding-check
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`. - Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и уст…Читать полностью
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`.
- Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и устранён.
- Усилен `scripts/check-encoding.ps1`: поиск кракозябр теперь работает по кодовым точкам (`U+00C2/U+00C3/U+00D0/U+00D1`), чтобы такие случаи не проходили в релиз.
TSOY.CLOUD 3.0: большой апдейт профилей и мультипрофилей
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону. - `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользова…Читать полностью
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону.
- `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользователь сам решает, что показать в профиле.
- Полностью обновлён UX мультипрофилей в шапке: понятный dropdown с быстрым переключением и новая модалка управления профилями аккаунта (аватары, статусы, действия, выбор профиля для `/about`).
- Сохранена вся текущая логика проекта (посты, друзья, роли, about, мультипрофили), изменения сосредоточены на удобстве и визуале.
TSOY.CLOUD 3.1.0: новый конструктор страниц + единый файловый проводник для выбора медиа
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок. - Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через…Читать полностью
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок.
- Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через единый проводник файлов (папки, поиск, фильтры по типам).
- Раздел «Медиа» в профиле также переведён на тот же проводник для ручного наполнения галерей фото/видео/аудио.
- Подготовлена база для дальнейшего переиспользования этого picker-компонента в других разделах проекта.
TSOY.CLOUD 3.2.0: большой PWA-апдейт (уведомления, офлайн-кеш, desktop/mobile режим)
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile). - Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-увед…Читать полностью
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile).
- Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-уведомления без Service Worker.
- Файловый офлайн-кеш стал удобнее: кнопки офлайн-режима показывают актуальный статус уже закешированных файлов, подготовлен runtime API для управления кешем.
- Service Worker синхронизирован и усилен для PWA-сценариев (deep-link notificationclick, безопасная обработка Range-запросов для медиа).
TSOY.CLOUD 3.3.0: единая система оформления + компактный мессенджер
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными. - В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельна…Читать полностью
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными.
- В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельная плотность мессенджера.
- Мессенджер получил более компактные облака сообщений (в том числе Telegram-like режим) без вмешательства в мобильную геометрию поля ввода и клавиатуры.
- Дизайн-ручки реализованы через общие UI-токены и остаются совместимыми с PWA-режимом.
TSOY.CLOUD 3.3.1: мессенджер (единый проводник вложений + fix меню сообщений) и улучшенная связка с “Оформлением”
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX. - Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не пр…Читать полностью
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX.
- Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не прячется под соседними сообщениями.
- Настройки `Оформление` сильнее связаны с мессенджером: ширина контента работает в canvas-режиме, а плотность/контраст теперь заметно влияют на чат.
- Геометрия composer/клавиатуры в чате не менялась, чтобы не вернуть баг с “подбородком” на iPhone.
TSOY.CLOUD 3.3.2: центр уведомлений — сначала уведомления, потом настройки
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений. - Обновлён заголовок верхнего блока для более понятной логики экрана.Читать полностью
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений.
- Обновлён заголовок верхнего блока для более понятной логики экрана.
TSOY.CLOUD 3.3.3: контакты и мессенджер теперь в одном визуальном стиле
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек. - Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессендже…Читать полностью
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек.
- Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессенджер.
TSOY.CLOUD 3.3.4: единый проводник в профиле и нормальное админ-хранилище с папками
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов. - В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/П…Читать полностью
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов.
- В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/ПК работали стабильнее.
- Админский экран `/index.php?r=admin` переименован в «Хранилище проекта» и получил папочную структуру с фильтрами по владельцу и папке.
TSOY.CLOUD 3.3.5: профиль (двойные проводники/лишние кнопки) и mobile-fix клипсы в мессенджере
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник. - Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена». - Копирование ссылок на…Читать полностью
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник.
- Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена».
- Копирование ссылок на профиль и пост переведено на фоновый toast «Скопировано» вместо модального alert.
- В мессенджере клипса (`📎`) теперь открывается через явный JS fallback для mobile/iPhone сценариев.
TSOY.CLOUD 3.3.6: в конструкторе страниц появился блок «Таблица»
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц. - Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы. - Есть переключатель «первая строка — заголовки» для красивого отображен…Читать полностью
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц.
- Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы.
- Есть переключатель «первая строка — заголовки» для красивого отображения таблицы на публичной странице.
TSOY.CLOUD 3.4.0: полноценный Web Push (закрытый PWA/сайт) + индикатор качества звонков
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт. - Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Work…Читать полностью
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт.
- Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Worker, а доставка идёт через серверную очередь событий.
- В аудиозвонках добавлен индикатор качества связи (RTT, джиттер, потери, битрейт) с понятным статусом (`отлично / хорошо / средне / с помехами / переподключение`).
- Улучшена стабильность звонков: при проблемах соединения клиент выполняет мягкое переподключение и показывает актуальный статус связи.
TSOY.CLOUD 3.4.1: mobile fix мессенджера (вложения) и центрирование меню профиля
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата. - Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстк…Читать полностью
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата.
- Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстке чата.
- Меню профиля/переключения мультипрофилей в мобильной шапке теперь центрируется по экрану и больше не уезжает влево.
TSOY.CLOUD 3.4.2: hotfix навигации по уведомлениям (deep-link в источник)
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.). - Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относи…Читать полностью
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.).
- Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относительно пути приложения / service worker scope).
TSOY.CLOUD 3.4.3: информативные уведомления (сообщения + действия для звонка)
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог. - Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлен…Читать полностью
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог.
- Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлениях).
- Улучшены payload-данные push-уведомлений для более точной навигации и действий из PWA/Service Worker.
TSOY.CLOUD 3.4.4: настройки уведомлений в дашборде + улучшенный PWA update flow
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка. - Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос p…Читать полностью
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка.
- Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос persistent storage и toast-уведомления об обновлении.
- PWA runtime доработан: регистрация SW учитывает путь приложения, обновления можно проверять/применять через runtime API, а входящие звонки в открытом приложении используют настраиваемый рингтон.
TSOY.CLOUD 3.4.5: свои рингтоны уведомлений и звонка
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка. - Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу. -…Читать полностью
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка.
- Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу.
- Runtime уведомлений использует кастомные файлы в открытом приложении/PWA (с fallback на встроенные звуки, если браузер блокирует воспроизведение).
TSOY.CLOUD 3.5.0: stability-сборка (cleanup, техдолг, аккуратные оптимизации)
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода. - Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только…Читать полностью
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода.
- Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только внутри `public/sounds` и лимит размера загрузки (5 MB).
- Сборочные проверки стали чище и быстрее: `check-encoding.ps1` теперь игнорирует временные каталоги `tmp_*`, чтобы случайные backup-папки не шумели в чекапе.
TSOY.CLOUD 3.5.1: hotfix рингтонов на телефонах
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук. - Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложе…Читать полностью
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук.
- Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложения, поэтому работают корректнее в PWA/подпапках сайта.
- Добавлен `audio unlock` по первому взаимодействию пользователя для лучшей совместимости с мобильными autoplay-ограничениями браузеров.
TSOY.CLOUD 3.5.2: notifications reliability phase 1 (retry worker + диагностика)
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок. - В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные …Читать полностью
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок.
- В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные подписки, подписки с ошибками и состояния `dispatch_state`.
- Добавлен ручной запуск push worker из админки и CLI-скрипт `scripts/push-worker.php` для cron/daemon (`php scripts/push-worker.php --loop`).
TSOY.CLOUD 3.5.3: notifications reliability phase 2 (Web Push payload + fallback)
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт. - Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддержив…Читать полностью
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт.
- Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддерживается endpoint’ом/браузером или произошла ошибка шифрования.
- Service Worker стал устойчивее к payload-парсингу: сначала `json()`, затем `text()+JSON.parse()`, и только потом fallback на серверную очередь.
TSOY.CLOUD 3.5.4: диагностика push-устройств в админке + тест push по подписке
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки. - Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления н…Читать полностью
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки.
- Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления на конкретное устройство прямо из админки.
- Тестовая отправка использует payload Web Push с fallback на wake-push и обновляет статус подписки (`last_seen_at` / `last_error`) для быстрой диагностики.
TSOY.CLOUD 3.5.5: фильтры и управление push-подписками в админке
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`. - Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице. - Управление подп…Читать полностью
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`.
- Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице.
- Управление подписками выполняется отдельным admin-route с CSRF-проверкой, без конфликта с общей формой сохранения настроек.
TSOY.CLOUD 3.5.6: бренд уведомлений из настроек + статус последнего push-теста
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`. - В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки. - Тест push…Читать полностью
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`.
- В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки.
- Тест push по подписке теперь сохраняет результат в БД (`last_test_*`), чтобы было видно, где payload работает, а где происходит fallback.
TSOY.CLOUD 3.5.7: статистика реальной доставки push + бренд уведомлений из настроек
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). - Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по …Читать полностью
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса).
- Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по конкретной подписке.
- Заголовок уведомлений теперь подтягивается из настроек сайта (брендинг), а не остаётся захардкоженным `TSOY.CLOUD`.
TSOY.CLOUD 3.5.8: hotfix названия уведомлений (бренд из настроек)
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`. - Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`. - Серверные push-уведомления и клиентск…Читать полностью
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`.
- Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`.
- Серверные push-уведомления и клиентские fallback-уведомления приведены к одному правилу брендинга.
TSOY.CLOUD 3.5.10: сводка + мини-график доставки push (payload/fallback/error)
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток. - Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём п…Читать полностью
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток.
- Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём попыток за день.
- Для истории графика добавлена серверная дневная статистика доставок (`push_delivery_daily_stats`), которая заполняется при реальных отправках push.
TSOY.CLOUD 3.5.11: админ-настройки разбиты на понятные разделы
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам. - Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, зво…Читать полностью
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам.
- Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, звонки и диагностика`), чтобы не искать нужный блок в длинной ленте карточек.
- Навигация по секциям адаптирована для мобильных устройств: список разделов прокручивается горизонтально и остаётся удобным на узких экранах.
TSOY.CLOUD 3.5.12: hotfix навигации по разделам настроек
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта. - Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.Читать полностью
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта.
- Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.
TSOY.CLOUD 3.5.13: Android-style настройки (меню слева, раздел справа)
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел. - Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком. - Добавлена сов…Читать полностью
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел.
- Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком.
- Добавлена совместимость с hash-переходами (`#pwa-notify-admin`): при открытии ссылки автоматически показывается нужный раздел настроек.
TSOY.CLOUD 3.5.14: выбор часового пояса по Гринвичу в настройках системы
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями. - Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода. - Пол…Читать полностью
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями.
- Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода.
- Поле ручного ввода IANA-зоны сохранено для точной настройки региональных зон и нестандартных сценариев.
TSOY.CLOUD 3.5.15: role-aware настройки для всех + Android-style меню разделов
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin). - Настройки переведены в Android-style режим: слева список разделов, справа выбранны…Читать полностью
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin).
- Настройки переведены в Android-style режим: слева список разделов, справа выбранный раздел; в `PWA и push` добавлен второй уровень (`Обновления`, `Очередь push`, `Устройства`).
- `admin_tester` теперь видит все админ-настройки, но может сохранять только пользовательские (тема/уведомления); админские секции остаются read-only.
- Исправлена проверка доступа к пользовательскому облаку: маршрут `Мои файлы` теперь использует capability `cloud` (отдельно от staff-дэшборда).
TSOY.CLOUD 3.5.16: админ-настройки разнесены по отдельным страницам
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню. - Переходы в меню теперь открывают соответствующ…Читать полностью
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню.
- Переходы в меню теперь открывают соответствующие settings-route (`settings_admin_*`), а не работают только как внутренний переключатель секций в одном URL.
- Внутри длинных разделов (например `PWA и push`) сохранён второй уровень навигации: `Обновления`, `Очередь push`, `Устройства`.
TSOY.CLOUD 3.5.17: hotfix вёрстки страницы настроек (desktop/mobile)
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки. - Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конф…Читать полностью
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки.
- Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конфликт с Bootstrap `col-lg-6` в секционном режиме).
- На мобильных пересобрана вёрстка меню/подменю и нижней панели сохранения: убран уезд вправо и горизонтальный overflow.
TSOY.CLOUD 3.5.18: hotfix блока БД и нижней панели сохранения в настройках
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока. - Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме. - Испр…Читать полностью
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока.
- Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме.
- Исправление сделано без изменения логики сохранения и маршрутов настроек.
TSOY.CLOUD 3.6.0: начало рефакторинга связки Профиль / Контакты / Мессенджер
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана. - Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление св…Читать полностью
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана.
- Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление связями, `Мессенджер` = диалоги/вложения/звонки.
- Визуально унифицированы верхние панели и поверхности через общий reusable partial `views/partials/social_suite.php` без вмешательства в сложную mobile-геометрию чата.
TSOY.CLOUD 3.6.1: следующий шаг по связке Контакты/Мессенджер + UX-фиксы настроек
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`. - В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка боль…Читать полностью
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`.
- В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка больше не "подпрыгивает" вверх).
- Уточнена логика названий в настройках: `Внешний вид профиля` (личное) и `Внешний вид сайта` (глобальный дизайн) вместо размытых `Внешний вид` / `Оформление`.
TSOY.CLOUD 3.6.2: убран лишний Social Hub, мессенджер закреплён за диалогами
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее. - В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через …Читать полностью
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее.
- В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через `Контакты` (кнопка `Открыть контакты`).
- В настройках подправлены UX-мелочи: выровнен блок `База данных` и уточнены названия дизайн-разделов (`Внешний вид профиля` / `Внешний вид сайта`).
TSOY.CLOUD 3.6.3: контакты = старт общения, мессенджер = только диалоги
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`. - `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат. - Переходы через `chat_start` теперь ко…Читать полностью
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`.
- `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат.
- Переходы через `chat_start` теперь корректно прокидывают `call=1`, поэтому звонок можно запускать напрямую из `Контактов`.
TSOY.CLOUD 3.6.4: визуальный полиш мессенджера (в стиле Контактов) без риска вернуть подбородок
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`. - Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога. - Из…Читать полностью
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`.
- Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога.
- Изменения выполнены только на уровне визуального CSS-слоя: mobile keyboard-layout логика чата не трогалась, чтобы не вернуть iPhone-баг с `подбородком`.
TSOY.CLOUD 3.6.5: второй полиш-проход мессенджера (диалоги, шапка, composer, плотность)
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными. - В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало поле…Читать полностью
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными.
- В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало полезным (с прямым переходом в `Контакты`).
- Плотность мессенджера (`telegram/compact/roomy`) теперь заметнее влияет на список диалогов, шапку и кнопки, а не только на bubble. Keyboard-layout логика не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.6: hotfix iPhone/PWA бренда уведомлений (строка from ...)
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`. - Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под бренди…Читать полностью
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`.
- Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под брендинг проекта.
- PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с тем же брендом, что используется в уведомлениях.
TSOY.CLOUD 3.6.7: hotfix mobile-overflow окна Диалоги в мессенджере
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport. - Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата). - Фикс сделан только…Читать полностью
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport.
- Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата).
- Фикс сделан только на уровне CSS ширин/отступов; keyboard/fullscreen логика мессенджера не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.8: ускорена отправка сообщений в мессенджере (без паузы от push)
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`). - Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату. - Теперь сообщение сохраняется…Читать полностью
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`).
- Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату.
- Теперь сообщение сохраняется и ответ в чат уходит сразу, а push ставится в очередь и отправляется после завершения ответа (best-effort), что делает интерфейс заметно быстрее и плавнее.
TSOY.CLOUD 3.6.9: фундамент для больших чатов (миллионы сообщений) без нагрузки на сервер
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса. - Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unr…Читать полностью
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса.
- Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unread по каждому диалогу на каждом обновлении.
- Добавлены индексы под большие переписки (`messages(conversation_id,id)`, visible/unread индексы, индексы диалогов по пользователю и `last_message_at`).
- Для апгрейдов сохранён fallback: если денормализованные счётчики ещё не заполнены, система временно использует старый расчёт unread и постепенно синхронизирует данные.
TSOY.CLOUD 3.6.10: иконки действий в Контактах (конверт/трубка/корзина)
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина. - Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`. - Сохранены `title` и `ar…Читать полностью
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина.
- Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`.
- Сохранены `title` и `aria-label`, чтобы смысл кнопок не терялся на ПК и мобильных устройствах.
TSOY.CLOUD 3.6.11: доведён UI действий в Контактах (+ строка Каталог/Найти)
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле. - Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну стро…Читать полностью
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле.
- Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну строку, а поле поиска вынесено отдельно ниже на полную ширину.
- Логика контактов и поиска не менялась: обновление только визуальное/UX.
TSOY.CLOUD 3.6.12: системные файлы вынесены в отдельную папку public/system
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`. - Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешён…Читать полностью
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`.
- Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешённых системных директорий и переиспользуемая логика для будущих системных ассетов.
- Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически переносятся в новую системную структуру при запуске приложения (best-effort, без поломки ссылок если перенос не удался).
TSOY.CLOUD 3.6.13: единый раздел «Внешний вид», готовые профили оформления и кириллические шрифты
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). - Для глобального оформления сайта добавлены готовые профили внешн…Читать полностью
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений).
- Для глобального оформления сайта добавлены готовые профили внешнего вида (чистый, рабочий, чтение, мягкий, ночной, psychedelic): профиль подставляет значения в поля и их можно донастроить вручную.
- Шрифтовые пресеты обновлены с упором на кириллицу: Manrope, PT Sans, Rubik и новый IBM Plex Sans (`plex`) подключены как глобальные варианты для интерфейса.
TSOY.CLOUD 3.6.14: UX-фикс профиля (кнопка «Написать» и удаление вложений)
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля. - У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста. - Исправле…Читать полностью
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля.
- У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста.
- Исправление делает интерфейс профиля логичнее и чище без изменения логики постов/комментариев.
TSOY.CLOUD 3.6.15: персональные режимы меню и публичного профиля для гостей
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. - Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрыв…Читать полностью
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`.
- Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрывать только меню, или скрывать меню и шапку сайта.
- Эти параметры сохраняются у каждого профиля-пользователя отдельно и влияют только на его собственный интерфейс/публичную страницу.
TSOY.CLOUD 3.6.16: контекстное меню сообщений (ПК/мобилка) + цитаты и реакции
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`. - Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным на…Читать полностью
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`.
- Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным нажатием.
- Реализация встроена в существующий dropdown сообщений и не затрагивает чувствительную mobile-геометрию composer (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.17: галочки прочтения сообщений в мессенджере
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет. - Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы. - Изменение не затрагивает мобильную гео…Читать полностью
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет.
- Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы.
- Изменение не затрагивает мобильную геометрию поля ввода и не должно вернуть баг с `подбородком`.
TSOY.CLOUD 3.6.18: «будильник» по сообщению в контекстном меню мессенджера
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению. - Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочит…Читать полностью
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению.
- Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочитано`).
- Уведомление отправляется отдельным push-типом `chat_nudge`, не затрагивая геометрию чата и без риска вернуть `подбородок`.
TSOY.CLOUD 3.6.19: старт голосовых сообщений в мессенджере (красный интерфейс записи)
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения. - Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение. - Аудио-вложения (в том числе голосо…Читать полностью
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения.
- Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение.
- Аудио-вложения (в том числе голосовые) теперь воспроизводятся прямо в сообщении через встроенный плеер, без отдельного скачивания.
TSOY.CLOUD 3.6.20: preloader загрузки сайта и отдельный статус установки PWA
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании. - Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показыва…Читать полностью
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании.
- Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показывается при установке через системную кнопку).
- Тот же слой используется в установщике сайта (`install.php`) при отправке формы, поэтому установка/переходы теперь воспринимаются как единый понятный flow.
TSOY.CLOUD 3.6.21: плавное переключение секций настроек + фиксы длинных имён в Контактах/Мессенджере
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера. - В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / тру…Читать полностью
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера.
- В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / трубка / корзина / человек+`): кнопки зафиксированы справа, текст ужимается внутри своей зоны.
- В шапке активного диалога `Мессенджера` кнопки действий справа закреплены в одну линию, а длинное имя собеседника аккуратно сокращается без поломки layout.
TSOY.CLOUD 3.6.22: hotfix preloader (без ступора на чатах и секциях настроек)
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`. - Preloader оставлен только для действительно длинных/понятных сценариев: первич…Читать полностью
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`.
- Preloader оставлен только для действительно длинных/понятных сценариев: первичная загрузка страницы, установка сайта (`install.php`) и установка PWA.
- Это уменьшает риск зависшего overlay и делает интерфейс заметно отзывчивее при обычной работе.
TSOY.CLOUD 3.6.23: hold-to-record голосовые + компактное предпрослушивание и прогресс установки
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению. - После записи голосового в composer появляется компактное предпрослушивание (мини-пле…Читать полностью
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению.
- После записи голосового в composer появляется компактное предпрослушивание (мини-плеер), а аудио-плееры в сообщениях стали компактнее и лучше подходят для узких экранов.
- В `Профиле` улучшено поведение длинных текстов в карточках друзей/страниц и в постах (текст больше не ломает layout), а в `install.php` добавлена мини-анимация этапов установки (БД / миграции / админ / готово).
TSOY.CLOUD 3.6.24: hotfix preloader на Профиле и в Мессенджере
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа. - Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы на…Читать полностью
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа.
- Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы начинают ощущаться живыми заметно раньше.
- `load/pageshow` оставлены только как страховка, плюс добавлен fail-safe таймер от зависшего overlay.
TSOY.CLOUD 3.6.25: hotfix отображения голосовых сообщений (плеер вместо файла)
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл. - Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла…Читать полностью
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл.
- Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла, даже если у файла в БД был сохранён неидеальный MIME-тип.
- Для новых записей добавлена нормализация MIME при загрузке, чтобы голосовые сразу сохранялись как audio и корректно рендерились во всех местах.
TSOY.CLOUD 3.6.26: компактная лента недавних файлов на главной
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов. - По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3). - Использован …Читать полностью
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов.
- По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3).
- Использован тот же механизм `load more`, что и в новостях/техрелизах, без отдельного нового JS.
TSOY.CLOUD 3.6.27: голосовые сообщения в одну компактную строку
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла. - Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения. - Фикс работает и в первичном ре…Читать полностью
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла.
- Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения.
- Фикс работает и в первичном рендере чата, и при обновлении сообщений через polling.
TSOY.CLOUD 3.6.28: tap-to-record для голосовых (второй тап — отправка)
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение. - Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно …Читать полностью
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение.
- Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно отправить обычной кнопкой.
- Геометрия мобильного composer не изменялась (фиксы против `подбородка` сохранены).
TSOY.CLOUD 3.6.29: одинаковый mini-player голосовых на ПК и телефоне
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку. - Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения). - Н…Читать полностью
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку.
- Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения).
- Новый mini-player работает и в первичном рендере чата, и при появлении сообщений через polling.
TSOY.CLOUD 3.6.30: персональные настройки preloader
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста. - Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать с…Читать полностью
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста.
- Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать свой вариант поведения preloader.
- Системные сценарии установки сайта/PWA сохранены: preloader для install/PWA работает корректно даже при минимальном режиме.
TSOY.CLOUD 3.6.31: hotfix воспроизведения голосовых на телефоне
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу. - Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`). - Скрытый аудио-элемент пер…Читать полностью
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу.
- Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`).
- Скрытый аудио-элемент переведён в совместимый visually-hidden режим (без `display:none`) для лучшей работы на iPhone/Safari.
TSOY.CLOUD 3.6.32: отдельная иконка PWA + fallback на favicon/logo
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения. - Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback. - `manifest` и `apple-touch-icon` теперь формируются дина…Читать полностью
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения.
- Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback.
- `manifest` и `apple-touch-icon` теперь формируются динамически из настроек брендинга, а не только из встроенных `/public/icons/...`.
TSOY.CLOUD 3.6.33: встроенный просмотр файлов в PWA (с возвратом назад)
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`. - После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска. - Кнопка `Открыть` в файлово…Читать полностью
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`.
- После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска.
- Кнопка `Открыть` в файловом проводнике тоже использует этот безопасный PWA-сценарий.
TSOY.CLOUD 3.6.34: hotfix mini-плеера голосовых на телефоне
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате). - Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания. - `audio.load()` больше не мешает запуску как основ…Читать полностью
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате).
- Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания.
- `audio.load()` больше не мешает запуску как основной путь: теперь это только fallback при ошибке `play()`.
TSOY.CLOUD 4.0.0: группы, мосты и формат messenger
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах. - Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и…Читать полностью
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах.
- Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и групповые настройки.
- Появился формат `messenger` (контакты + чат), а файлы из чата теперь хранятся отдельно и не попадают в `Недавние` на главной.
TSOY.CLOUD 4.1.0: страница групп, единый дизайн
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников. - Страница пользователей упрощена: только аккаунты и создание новых пользователей. - Унифицирован дизайн всего проек…Читать полностью
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников.
- Страница пользователей упрощена: только аккаунты и создание новых пользователей.
- Унифицирован дизайн всего проекта: профиль, мессенджер, контакты и другие страницы теперь полностью используют глобальные настройки скругления.
TSOY.CLOUD 5.8.20: стабильная авторизация после регистрации (CSRF hotfix)
- Исправлен критичный сценарий `CSRF token mismatch` после регистрации/входа в мобильных webview. - Формы входа и регистрации стали устойчивее к stale-страницам из кэша браузера/вебвью. - При рассинхроне CSRF теперь показывается корректный возврат и повтор де…Читать полностью
- Исправлен критичный сценарий `CSRF token mismatch` после регистрации/входа в мобильных webview.
- Формы входа и регистрации стали устойчивее к stale-страницам из кэша браузера/вебвью.
- При рассинхроне CSRF теперь показывается корректный возврат и повтор действия, вместо белой страницы с ошибкой.
TSOY.CLOUD 5.8.21: корректное обновление версии и авто-публикация релизов
- Исправлен формат ZIP-сборки релиза: пути теперь совместимы с Linux-распаковкой, обновления реально применяются к рабочим файлам. - Для текущей версии автоматически публикуются техрелиз и системная новость в БД без ручного создания в админке. - После деплоя …Читать полностью
- Исправлен формат ZIP-сборки релиза: пути теперь совместимы с Linux-распаковкой, обновления реально применяются к рабочим файлам.
- Для текущей версии автоматически публикуются техрелиз и системная новость в БД без ручного создания в админке.
- После деплоя версия в интерфейсе и релизные записи синхронизируются предсказуемо.
TSOY.CLOUD 5.8.22: контроль фактической версии после деплоя
- Добавлен серверный заголовок `X-TSOY-Version`, чтобы сразу видеть реальную версию работающего кода. - Документация дополнена проверками и инструкциями очистки артефактов от старых архивов с некорректными путями. - Это закрывает частую ситуацию, когда в подв…Читать полностью
- Добавлен серверный заголовок `X-TSOY-Version`, чтобы сразу видеть реальную версию работающего кода.
- Документация дополнена проверками и инструкциями очистки артефактов от старых архивов с некорректными путями.
- Это закрывает частую ситуацию, когда в подвале остаётся старая версия после неудачного обновления файлов.
TSOY.CLOUD 5.8.23: прокси/HTTPS-стабилизация и синхронизация конфигурации
- Унифицировано определение HTTPS за прокси/CDN, чтобы ссылки и secure-cookie формировались корректно. - Исправлены смежные точки: share/call-link URL, logout cookie cleanup, CSRF/theme/guest cookie secure-флаги. - Документация обновлена: для SQLite используе…Читать полностью
- Унифицировано определение HTTPS за прокси/CDN, чтобы ссылки и secure-cookie формировались корректно.
- Исправлены смежные точки: share/call-link URL, logout cookie cleanup, CSRF/theme/guest cookie secure-флаги.
- Документация обновлена: для SQLite используется `storage/app.sqlite`.
TSOY.CLOUD 5.8.24: hotfix bootstrap (fatal на старте)
- Исправлен фатал `Call to undefined function request_is_https()` после обновления. - Причина: вызов helper до подключения `app/core.php`. - Загрузка `core.php` перенесена в начало `app/bootstrap.php`.Читать полностью
- Исправлен фатал `Call to undefined function request_is_https()` после обновления.
- Причина: вызов helper до подключения `app/core.php`.
- Загрузка `core.php` перенесена в начало `app/bootstrap.php`.
Релиз v5.8.26
Админка БД: упрощён процесс массового удаления ненужных таблиц. · Теперь можно одним действием удалить сразу несколько выбранных таблиц с единым подтверждением. · app/admin_maintenance.php: добавлены `admin_db_unused_tables_report()` и `admin_db_drop_tables_batch()`. · Пакетное удаление защищено проверками: миграционное управление таблицей, сигналы использования в коде и внешние ключи.
Релиз v5.8.25
Админка БД: добавлен анализ потенциально неиспользуемых колонок прямо в разделе `/index.php?r=admin_db`. · Удаление колонок переведено в безопасный режим: только после явного подтверждения и только для проверенных случаев. · app/admin_maintenance.php: добавлены `admin_db_unused_columns_report()` и `admin_db_drop_column()` с эвристическим сканом кода проекта. · Проверки удаления: защита критичных имён (`id`, `*_id`, `*_at`), блокировка при индексах/PK/FK и повторная проверка использования в коде.
Релиз v5.8.24
Исправлен критичный фатал после деплоя: сайт снова открывается штатно (без `Call to undefined function request_is_https()`). · app/bootstrap.php: загрузка `app/core.php` перенесена в начало файла, до первого вызова `request_is_https()`. · Исправлен порядок инициализации bootstrap для совместимости с production-окружениями при `require_once app/bootstrap.php` из `index.php`.
TSOY.CLOUD 5.8.24: hotfix bootstrap (fatal на старте)
- Исправлен фатал `Call to undefined function request_is_https()` после обновления. - Причина: вызов helper до подключения `app/core.php`. - Загрузка `core.php` перенесена в начало `app/bootstrap.php`.Читать полностью
- Исправлен фатал `Call to undefined function request_is_https()` после обновления.
- Причина: вызов helper до подключения `app/core.php`.
- Загрузка `core.php` перенесена в начало `app/bootstrap.php`.
Релиз v5.8.23
Стабилизирована работа проекта за reverse-proxy/CDN: HTTPS-ссылки и cookie теперь формируются корректно в проксированных окружениях. · Снижён риск проблем с логином/CSRF/выходом из-за неверного определения схемы запроса. · app/core.php: добавлены `request_is_https()` и `request_scheme()` с поддержкой `HTTPS`, `X-Forwarded-Proto`, `X-Forwarded-SSL`, `Front-End-Https`. · app/bootstrap.php, app/auth.php, app/utils.php: secure-cookie логика переведена на единый helper (session/theme/csrf/guest token).
TSOY.CLOUD 5.8.23: прокси/HTTPS-стабилизация и синхронизация конфигурации
- Унифицировано определение HTTPS за прокси/CDN, чтобы ссылки и secure-cookie формировались корректно. - Исправлены смежные точки: share/call-link URL, logout cookie cleanup, CSRF/theme/guest cookie secure-флаги. - Документация обновлена: для SQLite используе…Читать полностью
- Унифицировано определение HTTPS за прокси/CDN, чтобы ссылки и secure-cookie формировались корректно.
- Исправлены смежные точки: share/call-link URL, logout cookie cleanup, CSRF/theme/guest cookie secure-флаги.
- Документация обновлена: для SQLite используется `storage/app.sqlite`.
Релиз v5.8.22
Исправлена диагностика обновлений: теперь легко проверить, какая версия реально работает на сервере. · Уточнён и зафиксирован безопасный деплой-процесс для production, чтобы версия в подвале и техрелизы всегда обновлялись. · index.php и install.php: добавлен HTTP-заголовок `X-TSOY-Version` с текущим `APP_VERSION` для быстрой проверки фактической версии после деплоя. · README.md: добавлены инструкции проверки версии через `curl -I` и очистки артефактов старых Windows-архивов (`*\\*`) на Linux.
TSOY.CLOUD 5.8.22: контроль фактической версии после деплоя
- Добавлен серверный заголовок `X-TSOY-Version`, чтобы сразу видеть реальную версию работающего кода. - Документация дополнена проверками и инструкциями очистки артефактов от старых архивов с некорректными путями. - Это закрывает частую ситуацию, когда в подв…Читать полностью
- Добавлен серверный заголовок `X-TSOY-Version`, чтобы сразу видеть реальную версию работающего кода.
- Документация дополнена проверками и инструкциями очистки артефактов от старых архивов с некорректными путями.
- Это закрывает частую ситуацию, когда в подвале остаётся старая версия после неудачного обновления файлов.
Релиз v2.3.8
Снижен лаг при открытии страниц. · Polling-задачи переведены в менее агрессивный режим.
Релиз v2.3.10
Исправлены критические проблемы отображения текста и уведомлений. · Подготовлена база для финальной правки кодировки.
Релиз v2.3.11
Полностью восстановлен текст интерфейса на корректной кириллице. · Исправлены сообщения профиля, чатов, звонков и административных страниц. · index.php восстановлен из стабильной версии и очищен от поврежденных строк. · Обновлены маршруты администрирования звонков: мониторинг, закрытие и удаление комнат.
Релиз v2.3.12
Исправлено отображение текста на странице звонка по ссылке. · Восстановлены подписи и действия в админ-панели. · Очищены поврежденные символы в views/call_room.php и views/admin.php. · В call_room добавлено управление закрытием комнаты для создателя и администратора.
Релиз v2.3.13
Зафиксировано правило: кодировка проекта только UTF-8 без BOM. · Добавлен .editorconfig с обязательным charset=utf-8. · Добавлен scripts/check-encoding.ps1 и подключён в scripts/make-release.ps1.
Релиз v2.3.14
Улучшено качество аудиозвонков в личных и публичных комнатах. · Добавлена автопопытка восстановления соединения при сетевых сбоях. · Вынесены единые WebRTC-параметры: ICE/STUN/TURN и аудио-профиль в настройки админа. · Убраны хардкоды RTCPeerConnection в chat/call_room/admin_call_monitor.
Релиз v2.3.15
Звонки стали отзывчивее без перегруза сервера: события обрабатываются быстрее после действий пользователя. · Стабильнее работа в фоне и после возврата в приложение/вкладку. · Переведены call polling-циклы на адаптивный single-flight алгоритм (без наложения запросов). · Добавлены таймауты запросов, backoff при ошибках и fast-retry после сигналов/действий.
Релиз v2.3.16
В админке добавлены импорт и экспорт базы данных в JSON для резервного копирования и переноса. · Добавлены сервисные операции очистки БД и файлов: RTC-мусор, старый аудит, удалённые файлы и сироты в uploads. · Добавлен модуль app/admin_maintenance.php с безопасным экспортом/импортом и обслуживанием хранилища. · Импорт БД выполняется с полной заменой данных таблиц приложения (через DELETE в транзакции, без TRUNCATE).
Релиз v2.3.17
Исправлена критическая ошибка отправки emoji/смайликов в мессенджере на MySQL. · После обновления сайт автоматически приводит старые таблицы чата и связанные таблицы к emoji-safe кодировке utf8mb4. · MySQL-подключение теперь принудительно использует SET NAMES/CHARACTER SET utf8mb4. · Добавлен runtime-check кодировки таблиц через INFORMATION_SCHEMA и best-effort конвертация в utf8mb4 только при необходимости.
Релиз v2.3.18
В админке БД добавлен визуальный статус проверки utf8mb4/emoji (для MySQL). · Теперь можно быстро увидеть, есть ли таблицы или колонки, которые ещё не готовы к emoji. · Добавлен отчёт admin_db_charset_report() по INFORMATION_SCHEMA: default charset/collation БД, таблицы и текстовые колонки. · Отчёт выведен в views/admin_db.php с компактной сводкой и таблицами проблемных объектов (если есть).
Релиз v2.3.19
Переработан блок смайликов в мессенджере: быстрые emoji, недавние emoji и удобная панель выбора. · Подключена библиотека emoji picker с поиском и категориями; добавлены быстрые кнопки, включая клоуна 🤡. · Локально подключена библиотека public/vendor/emoji-button/emoji-button.min.js (без CDN-зависимости в рантайме). · В chat composer добавено хранение недавних emoji в localStorage и fallback-режим, если библиотека недоступна.
Релиз v2.3.20
Исправлен баг мессенджера: новые сообщения теперь появляются в открытом чате без перезахода. · Если вы находитесь внизу ленты, чат автоматически прокручивается к новым сообщениям. · Добавлен lightweight endpoint chat_messages_poll (инкрементальная выдача сообщений по after_id). · Во views/chat.php добавлен single-flight polling и клиентский рендер новых сообщений без полной перезагрузки страницы.
Релиз v2.3.21
Список диалогов в мессенджере теперь обновляется автоматически: новые сообщения и непрочитанные появляются без перезахода в чат. · Превью последнего сообщения, время и бейдж непрочитанных синхронизируются прямо в открытом разделе «Мессенджер». · Добавлен endpoint chat_dialogs_poll с компактной JSON-выдачей списка диалогов для текущего пользователя. · Во views/chat.php добавлен отдельный single-flight polling списка диалогов с backoff, signature-check и обновлением DOM только при изменениях.
Релиз v2.3.22
Переработан интерфейс мессенджера в стиле PWA-мессенджеров: удобнее список диалогов, компактнее шапка чата и чище лента сообщений. · На телефоне чат занимает экран аккуратнее: более компактные action-кнопки, улучшенная шапка и удобнее поле ввода для быстрых сообщений. · Во views/chat.php обновлены layout/styling для desktop и mobile (split-pane, sticky composer, адаптивная шапка, улучшенные bubbles). · Серверный и клиентский рендер списка диалогов унифицированы: одинаковая разметка строк (аватар/имя/время/превью/unread badge).
Релиз v2.3.23
Исправлена проблема со «слетающей» авторизацией: сессия пользователя теперь сохраняется стабильнее, особенно в PWA и на мобильных устройствах. · Пользователю больше не нужно постоянно повторно входить в аккаунт при обычном использовании сайта. · Добавлена устойчивая инициализация PHP-сессии: cookie lifetime 30 дней, gc_maxlifetime 30 дней, httponly/samesite и корректный secure через HTTPS/X-Forwarded-Proto. · Сессии вынесены в project-local storage/sessions (если доступно), чтобы изолировать их от server-wide gc других сайтов/приложений.
Релиз v2.3.24
Исправлен UX мессенджера на ПК: форма ввода теперь закреплена поверх ленты сообщений и всегда видна, как в Telegram/WhatsApp. · Возвращён стеклянный (glass) вид мессенджера на телефоне и PWA-экране. · Добавлен endpoint chat_messages_before_poll (before_id) и server helper conversation_messages_before_for_user() для lazy-history. · Стартовая загрузка сообщений в чате уменьшена до компактной пачки, дальнейшая история догружается по scroll trigger.
Релиз v2.3.25
Исправлен критичный UX-баг мессенджера на ПК: при открытии диалога теперь сразу видны последние сообщения и форма ввода (без прокрутки всей страницы вниз). · Форма ввода закреплена поверх ленты сообщений, а прокрутка выполняется внутри окна чата. · Для desktop conversation pane добавлена жёсткая высота по viewport (CSS + JS syncDesktopMessengerViewport), чтобы контент не растягивал страницу. · chatMessages переведён в гарантированно внутренний scroll-container; composer остаётся fixed/overlay внутри card.
Релиз v2.3.26
Добавлен отдельный центр уведомлений: быстрые переключатели, статус разрешений браузера, Service Worker/PWA и тест уведомления на устройство. · Настройки уведомлений теперь можно менять без захода в профиль — прямо из раздела «Уведомления». · Маршрут notifications получил обработку POST (сохранение notify_desktop/notify_sound) и скорректирован порядок mark_seen/counts. · Глобальный runtime уведомлений переработан: user-scoped localStorage state, единый helper __TSOY_NOTIFY_RUNTIME (SW/device notify, permission/status/test).
Релиз v2.3.27
Добавлена публичная страница «О проекте» (`/about`) с описанием проекта и карточками участников/вклада. · В профиле (редактирование) для администратора добавлен блок управления страницей «О проекте», включая загрузку фото участников с устройства. · Добавлены маршрут `about`, pretty-route `/about` и POST-обработчик `post_like_toggle` с JSON-ответом для AJAX. · В `profile_edit` добавлено сохранение настроек страницы about через `settings` + хранение списка участников в JSON (`about_contributors_json`).
Релиз v2.3.28
Hotfix: исправлено битое сообщение после сохранения настроек в центре уведомлений (теперь отображается нормальная кириллица). · В `index.php` заменены оставшиеся mojibake-строки flash-сообщения `Настройки уведомлений сохранены.` в обработчиках профиля и центра уведомлений.
Релиз v2.3.29
Hotfix: исправлены оставшиеся «кракозябры» в системных сообщениях/заголовках из `index.php` (включая центр уведомлений и очистку аудита в разделе БД). · Выполнена массовая зачистка mojibake-строковых литералов в `index.php` (восстановлена нормальная кириллица в flash/title сообщениях). · Усилен `scripts/check-encoding.ps1`: проверка mojibake теперь использует кодовые точки (`U+00C2/U+00C3/U+00D0/U+00D1`), а не хрупкий текстовый regex.
Релиз v2.3.30
Ссылка на страницу «О проекте» добавлена в подвал рядом с версией проекта. · Настройки страницы «О проекте» вынесены из профиля в отдельный раздел администрирования в дашборде. · Добавлен маршрут `admin_about` + новая страница `views/admin_about.php`; сохранение настроек about перенесено из `profile_edit` в admin-раздел. · Расширен RBAC: новые роли (`global_admin`, `admin_tester`), нормализация политик по умолчанию, закреплённые инварианты для доступа к БД/политикам/настройкам.
Релиз v2.3.31
Исправлены права управления пользователями: первый пользователь всегда закреплён как `global_admin`, обычный администратор не может понижать/блокировать/удалять его и сбрасывать ему пароль. · Роль `admin_tester` теперь может пользоваться обычными функциями приложения (включая профиль и фото), при этом изменения в админ-разделах по-прежнему заблокированы. · Добавлены backend-инварианты для первого пользователя (`user_ensure_first_global_admin`, запрет бана/удаления первого пользователя) и защита операций над `global_admin` в `admin_users`. · Глобальный guard `admin_tester` сужен до write-операций админ-разделов, чтобы не ломать обычный пользовательский функционал.
Релиз v2.3.32
Исправлена логика публичных файлов: фото участников со страницы `/about` остаются публичными, но больше не попадают в ленту «Публичные файлы» на главной. · Улучшена навигация и нейминг: пользовательское облако переименовано в «Мои файлы», а `admin`-экран оформлен как «Файлы проекта». · В `app/files.php` добавлена фильтрация публичной ленты по исключениям (`files_public_feed_excluded_ids()`), сейчас туда входят фото участников из `about_contributors_json`. · Обновлены заголовки/подписи в `views/home.php`, `views/dashboard.php`, `views/admin.php`, `views/layout.php`, `views/staff.php`, `views/chat.php`, `views/contacts.php` для уменьшения путаницы между пользовательским и административным файловыми экранами.
Релиз v2.3.33
Добавлена отдельная «мемная» invite-регистрация для друзей с автоназначением ролей `admin` и `admin_tester` по токен-ссылке. · Страница спец-регистрации получила отдельный дизайн с анимациями и роль-специфичными сообщениями (admin/tester). · Добавлен модуль `app/friend_registration.php`: JSON-конфиг спец-регистрации, токены, invite-ссылки, нормализация и resolve роли по токену. · В `index.php` добавлены маршруты `friend_register` и `admin_friend_register`, а также pretty-route `/friend-invite/<token>`.
Релиз v2.3.34
Hotfix: устранены предупреждения Deprecated на PHP 8.4+ в модуле спец-регистрации друзей. · В `app/friend_registration.php` сигнатуры helper-функций обновлены с implicit nullable (`array $cfg = null`) на явный nullable тип (`?array $cfg = null`).
Релиз v2.3.35
В спец-регистрацию друзей встроен виджет «кошка-говешка» с анимированным блоком внутри формы. · В настройках спец-регистрации можно загрузить фото кошки с устройства, включать/выключать блок и настраивать подпись/бейдж. · Спец-регистрация расширена настройками `cat_*` в `app/friend_registration.php`; загрузка изображения реализована в `index.php` и хранится в `public/friend_register/`. · В `views/friend_register.php` добавлен анимированный cat-widget с безопасным fallback без картинки.
Релиз v2.3.36
Базовый пресет оформления снова по умолчанию `Default`, а `Psychedelic` оставлен как опциональный вариант в настройках. · Уведомления о сообщениях и событиях теперь открывают соответствующий раздел (чат или календарь), а не всегда центр уведомлений. · Добавлен JSON endpoint `chat_send_async` и клиентский submit-handler во `views/chat.php` для AJAX-отправки сообщения с поддержкой вложений. · В `notif_poll` добавлены target-ссылки (`chat`/`calendar`), а `views/partials/scripts.php` формирует отдельные device-notifications с корректным `data.url`.
Релиз v2.3.37
Мессенджер структурно облегчён: более компактный header/messages/composer stack, меньше визуальной тяжести и ближе к привычной мобильной логике. · Исправлено поведение поля ввода в мобильном полноэкранном чате: composer больше не “съезжает” вниз из-за наложенных padding/overlay-стилей. · В `views/chat.php` добавлены структурные классы (`chat-list-card`, `chat-conv-card`, `chat-conv-body`, `chat-composer-shell`) и финальный CSS override-блок с упрощённой layout-схемой. · Убран тяжёлый overlay-режим composer для conversation pane (через CSS overrides), сообщения снова живут в нормальном flex-stack без лишнего bottom-overlay padding.
Релиз v2.3.38
Перестроена DOM-структура окна диалога: `chatMessages` теперь единый контейнер на всю область чата, внутри которого находятся шапка, лента сообщений и composer. · Шапка диалога и панель ввода встроены внутрь общего контейнера как в современных мессенджерах, что улучшает поведение на мобильных экранах. · В `views/chat.php` `id=\"chatMessages\"` переведён в роль root-container conversation pane, а scroll-area вынесена в `id=\"chatMessagesScroll\"`. · JS-логика мессенджера обновлена на новый scroll-target (`chatMessagesScroll`) с backward fallback на старую структуру.
Релиз v2.3.39
Уменьшен зазор между клавиатурой и полем ввода в мобильном мессенджере (почти вплотную, несколько миллиметров). · Панель ввода в fullscreen-чате лучше поджимается к клавиатуре на iPhone/iOS. · В `views/chat.php` добавлен динамический CSS var `--chat-mobile-composer-gap` и логика `visualViewport`-детекта открытой клавиатуры. · При открытой клавиатуре fullscreen-pane чата растягивается до видимого нижнего края без лишнего white-gap из-за `visualViewport.offsetTop`.
Релиз v2.3.40
Исправлен большой пустой отступ между полем ввода и клавиатурой в мобильном мессенджере (fullscreen chat). · Панель ввода и лента сообщений теперь корректно сжимаются при открытии клавиатуры. · В `views/chat.php` снят конфликтующий `min-height`/жёсткая высота на mobile fullscreen-цепочке контейнеров (`chat-conv-body` → `#chatMessages` → scroll-wrap → `#chatMessagesScroll`). · Горячий фикс рассчитан на iOS/Safari/PWA сценарии, где клавиатура уменьшает viewport и ломает flex-layout с `min-height`.
Релиз v2.3.41
Дополнительно исправлен большой зазор над клавиатурой на iPhone: поле ввода поджимается ближе даже при включённой assistant/suggestions панели iOS. · В `views/chat.php` добавлена реальная компенсация нижнего зазора по измерению положения composer относительно viewport (а не только по `visualViewport.height`). · Учтён iOS-кейс, когда `visualViewport` и `window.innerHeight` расходятся на высоту assistant/suggestions панели клавиатуры.
Релиз v2.3.42
Для диагностики iPhone-отступа убрана встроенная (inline) панель быстрых смайликов из формы сообщения в мессенджере. · Кнопка смайликов в composer теперь открывает полный emoji picker, если inline-панель отключена. · Из `views/chat.php` удалён блок `chat-emoji-panel` внутри composer; JS-клик по `emojiBtn` переведён на fallback `toggleFullEmojiPicker()` при отсутствии inline-панели.
Релиз v2.3.43
Для диагностики iPhone-отступа убран набор layout-классов у нижнего блока `attachHint / Убрать вложение` в composer мессенджера. · В `views/chat.php` блок под composer (с `attachHint` и `attachClearBtn`) упрощён до обычного контейнера без `d-flex/.../mt-2`.
Релиз v2.3.44
Для диагностики iPhone-отступа убран класс `small text-secondary` у блока `attachHint` в composer мессенджера. · В `views/chat.php` элемент `#attachHint` оставлен без CSS-классов, чтобы исключить влияние типографики/line-height на высоту composer.
Релиз v2.3.45
Для диагностики iPhone-отступа удалён `id=\"attachHint\"` у нижнего блока composer и связанный CSS-минимум высоты. · В `views/chat.php` удалено правило `#chatConvPane #attachHint { min-height ... }`, а сам элемент оставлен без `id`, чтобы исключить его вклад в высоту composer.
Релиз v2.3.46
Мессенджер вынесен из общего `container py-4` в отдельное “полотно” layout (full-canvas host), чтобы уменьшить конфликты мобильного fullscreen-режима с обёртками страницы. · Это изменение направлено именно на iPhone-баг с большим отступом над клавиатурой: чат теперь живёт в более простой DOM-структуре без общей контейнерной обвязки страницы. · В `views/layout.php` добавлен route-aware режим `contentCanvasRoute` для `chat`: контент мессенджера рендерится в `chat-canvas-stage` вне `container py-4`. · В `views/chat.php` обновлены mobile fullscreen-селекторы, которые раньше были жёстко привязаны к `.container.py-4`, теперь они поддерживают `.chat-canvas-stage`.
Релиз v2.3.47
Мессенджер после фикса iPhone-клавиатуры дополнительно очищен и визуально облегчён: обновлены шапка страницы, список диалогов, полотно сообщений и composer. · Строка состояния редактирования в composer теперь показывается только в режиме редактирования, а не занимает место постоянно. · Из `views/chat.php` удалён временный JS-компенсатор `tightenComposerToViewportBottom()` и связанный runtime-костыль `--chat-mobile-composer-gap`, оставлена более простая `visualViewport`-синхронизация. · Добавлены финальные CSS-overrides для canvas-режима чата (`chat-canvas-stage`) без возврата к старой layout-обвязке `container py-4`.
Релиз v2.3.48
На главной в разделе «Новости» теперь по умолчанию показываются только первые записи, остальные открываются кнопкой «Загрузить ещё». · В истории версий (технические новости по версиям) добавлен такой же режим постепенной подгрузки списка через кнопку «Показать ещё версии». · В `views/layout.php` добавлен универсальный client-side `load more`-инициализатор для блоков с `data-load-more-*`. · Разметка новостей на главной (`views/home.php`) и модалки истории версий (`views/layout.php`) переведена на единый шаблон постепенного раскрытия списка.
Релиз v2.3.49
Исправлен повторный iPhone-баг в мессенджере с большим отступом между клавиатурой и полем ввода (runtime-компенсация viewport/composer для mobile fullscreen). · Новости на главной и технические заметки по версиям теперь действительно свёрнуты по умолчанию (первые 3 записи), остальные открываются через кнопку «Показать ещё / Загрузить ещё». · В `views/chat.php` возвращена измеряемая компенсация `visualViewport` по фактическому gap до composer (без возврата старого `--chat-mobile-composer-gap` костыля). · В `views/layout.php` исправлен клиентский `load more`-инициализатор (Safari-safe проверка вместо `ParentNode`) и добавлено серверное начальное сворачивание версий.
Релиз v2.3.50
В мессенджере убрана служебная подпись под именем собеседника; клик по фото/имени в шапке диалога теперь открывает профиль собеседника. · Профиль расширен: значок админ-роли для администраторов, список друзей, количество друзей, а также кнопки добавления/удаления из друзей прямо на странице профиля. · Добавлены helper-функции для видимости карточек разработчиков на `/about` (`about_developer_visibility_json`, `user_about_card_visible()`, `user_about_card_set_visible()`) и фильтрация в `users_about_developers()`. · Маршруты `post_create/post_update` получили поддержку `cover_device_file` через новый helper `post_cover_from_upload()` в `app/posts.php`.
Релиз v2.3.51
В мессенджере из composer удалён нижний блок `chat-attach-row` (подсказка/кнопка вложения), чтобы убрать лишнюю высоту и iPhone-gap («подбородок»). · Из `views/chat.php` удалена разметка `div.chat-attach-row`; JS обработчики вложений уже безопасно работают при отсутствии `attachHint/attachClearBtn`.
Релиз v2.3.52
Усилен iPhone-fix для мессенджера: composer в mobile fullscreen при открытой клавиатуре закрепляется в `fixed`-режиме относительно видимой области, чтобы убрать большой зазор над клавиатурой. · В `views/chat.php` добавлен режим `chat-composer-vv-fixed` + JS-синхронизация с `visualViewport` (адаптивно: `bottom=0` или компенсация `keyboardInset`, если fixed элемент уходит под клавиатуру).
Релиз v2.3.53
В мессенджере с composer снят класс `chat-sticky` (оставлен только `chat-composer-shell`) — hotfix для iPhone-отступа над клавиатурой. · В `views/chat.php` удалён `chat-sticky` у обёртки формы сообщений, чтобы исключить конфликт sticky/fixed логики в mobile fullscreen.
Релиз v2.3.54
Ещё один iPhone hotfix для мессенджера: при открытой клавиатуре `fixed`-composer больше не обрезается контейнерами чата (снят clipping/blurs на время mobile keyboard mode). · В `views/chat.php` добавлен режим `chat-composer-vv-mode`: при активной клавиатуре снимаются `overflow:hidden` и `backdrop-filter` у `chat-conv-card/chat-conv-body`, чтобы Safari не привязывал/не обрезал `position: fixed` composer внутри карточки.
Релиз v2.3.55
В мессенджере переписан mobile-composer режим для iPhone: поле ввода при открытой клавиатуре выносится в отдельный viewport-портал, чтобы не появлялся большой зазор над клавиатурой. · В `views/chat.php` реализован `composer portal` (spacer + перенос `.chat-composer-shell` в `body` при mobile keyboard mode) вместо прежней fixed/sticky-компенсации внутри карточки чата.
Релиз v2.3.56
Добавлена система мультипрофилей: у одного аккаунта можно создавать, переключать и удалять несколько профилей через меню по клику на имя/аватар в шапке. · Для ролей разработчиков (`global_admin`/`admin`/`admin_tester`) добавлен выбор, какой профиль показывать на странице `/about`. · В `app/migrations.php` добавлены `user_profiles`, колонки `users.active_profile_id/users.about_profile_id` и `posts.hide_from_guests`. · В `app/users.php` реализованы helper-ы мультипрофилей (bootstrap/create/switch/delete/sync/about-select) и overlay данных выбранного профиля в `/about`.
Релиз v2.3.57
Мессенджер откатан по фронтенду (`views/chat.php`) к состоянию релиза `2.3.46` — это версия, на которой исчезал iPhone-gap («подбородок») над клавиатурой. · Сравнение показало, что `views/layout.php` (перенос чата в `chat-canvas-stage`) остаётся правильным; регрессия появилась позже в `views/chat.php` после добавления mobile keyboard viewport-хаков (`chat-composer-vv-portal`, `chat-composer-vv-fixed`, `chat-composer-vv-mode`, spacer/portal composer). · Откат выполнен точечно только для мессенджера: `views/chat.php` взят из архива `releases/tsoycloud_v2.3.46_2026-02-22.zip`.
Релиз v2.3.58
Мультипрофили переработаны: теперь каждый профиль аккаунта — это отдельный пользователь со своим логином и собственной страницей `/user/<login>` (отдельные посты, файлы и медиа). · В меню профилей аккаунта создание профиля теперь запрашивает отдельный логин (`username`) и отображаемое имя; основной профиль нельзя удалить. · Логика `user_profiles_*` в `app/users.php` переведена с таблицы `user_profiles` на связанные записи `users` через `owner_account_user_id` (старую таблицу больше не используем как источник истины). · В `app/auth.php` добавлен `auth_session_apply_active_profile()` и `$_SESSION[\"auth_user_id\"]`: сессия хранит владельца аккаунта отдельно от активного профиля (`$_SESSION[\"user\"]`).
Релиз v2.3.59
Мессенджер улучшен поверх стабильной базы (без возврата mobile keyboard-хаков): имя/аватар собеседника в шапке снова открывают профиль, убрана лишняя служебная подпись. · В профиле добавлены отдельные блоки медиа: фото, видео и аудио (для владельца — из облака, для гостей/других пользователей — из видимых постов). · В `app/migrations.php` добавлены таблицы `post_comments` и `user_pages`. · В `app/posts.php` реализованы helpers комментариев и поддержка внутренних ссылок (`/page/...`) в `post_attachment_add_link()` для публикации страниц.
Релиз v2.3.60
Исправлено мобильное меню профилей в шапке: dropdown больше не уезжает влево на узких экранах (ограничена ширина, стабилизировано позиционирование). · В `views/layout.php` профильный dropdown переведен на `data-bs-display=\"static\"` и вынесен на отдельный класс `topbar-profile-menu`; в `views/partials/head.php` добавлены mobile-safe стили ширины/переполнения.
Релиз v2.3.61
Исправлен раздел «Медиа» в профиле: теперь он показывает только контент, который пользователь явно добавил в посты (обложки и вложения), а не все файлы из облака. · В `views/profile.php` блок `Медиа` переведен на единый источник данных (медиа из постов) для владельца и гостей; облачные файлы владельца больше не попадают туда автоматически.
Релиз v2.3.62
Профиль переведён на более современный шаблонный стиль: обновлены карточки, шапка профиля и добавлены верхние вкладки разделов (Посты/Друзья/Страницы/Медиа). · Разделы Фото/Видео/Аудио теперь работают как отдельные ручные галереи профиля: пользователь сам добавляет контент в галереи, а не получает автоподбор из облака/постов. · Добавлен helper `app/profile_media.php` и таблица `profile_media_items` (ручные галереи профиля) с миграцией в `app/migrations.php`. · Добавлен маршрут `profile_media_gallery` в `index.php` (добавление/удаление элементов галереи, загрузка файлов с устройства).
Релиз v2.3.63
Профиль ещё ближе к новому шаблону: усилен визуал шапки (cover/avatar/chips/статистика), обновлены карточки друзей/страниц/медиа и общий стиль карточек постов/модалок. · Улучшена навигация по разделам профиля через верхние вкладки с сохранением активной вкладки. · В `views/profile.php` расширен слой профильных стилей и добавлены счётчики/визуальные блоки без изменения бизнес-логики постов, комментариев и ролей.
Релиз v2.3.64
Посты на странице профиля ещё ближе к новому шаблону: добавлен header карточки (аватар/имя/@username/время), улучшен action-bar и визуал карточек. · Модалка комментариев профиля визуально переработана и на мобильных ведёт себя ближе к формату bottom-sheet. · В `views/profile.php` добавлены профильные UI-классы для карточек постов и комментариев без изменения текущей логики лайков/комментариев/прав доступа.
Релиз v2.3.65
Управление галереями профиля перенесено в модалку (вместо collapse), что ближе к новому шаблону и удобнее на мобильных устройствах. · Экран `Редактировать профиль` заметно переработан визуально: добавлен hero-preview профиля, улучшены блоки загрузки аватара/обложки и группировка полей. · В `views/profile.php` блок управления ручными галереями переведён на modal-layout без изменения логики форм `profile_media_gallery`. · В `views/profile_edit.php` добавлены новые UI-обёртки и стили (`profile-edit-header-*`, `profile-edit-fieldset`, `profile-edit-upload-*`) при сохранении прежних POST-полей.
Релиз v2.3.66
Профиль дополнительно отполирован под мобильные устройства: карточки друзей и страниц стали компактнее и аккуратнее на узких экранах. · В модалке комментариев улучшен блок ввода: форма стала ближе к привычному мобильному composer-формату. · В `views/profile.php` добавлены mobile-first стили и классы для списков друзей/страниц, медиасетки и composer-разметки комментариев без изменения бизнес-логики.
Релиз v3.0.0
Подготовлен крупный профильный апдейт 3.0: улучшен mobile UX профиля (Друзья/Страницы/Медиа), а форма комментариев в модалке стала ближе к привычному мобильному composer-формату. · Полностью переработан интерфейс мультипрофилей в шапке: новый dropdown с быстрым переключением, аватарами и статусами профилей. · В `views/layout.php` переписана разметка topbar dropdown и модалки `#userProfilesModal` без изменения существующих роутов/POST-действий (`user_profiles`). · В `views/partials/head.php` добавлен новый слой стилей для мультипрофильного UX (`topbar-profile-*`, `user-profiles-modal-modern`, `user-profile-card*`) с адаптацией под мобильные экраны.
Релиз v3.0.1
На странице профиля кнопка копирования публичной ссылки теперь копирует адрес в буфер и показывает диалог «Скопировано». · При открытии профиля по публичной ссылке `/user/<username>` скрывается боковое меню (desktop + mobile offcanvas), страница выглядит ближе к формату соцсети. · В `views/profile.php` обновлён helper `copyText()` для кнопок `.js-copy`: успешное копирование подтверждается диалогом, fallback остаётся только при ошибке clipboard API. · В `views/layout.php` добавлен режим публичной страницы профиля (`$publicProfilePageRoute`) с условным отключением sidebar/offcanvas и корректировкой mobile topbar-отступа.
Релиз v3.0.2
На страницах профиля боковое меню теперь скрывается только у гостей. Для авторизованных пользователей навигация в профиле снова доступна. · В `views/layout.php` режим “соц-страницы без меню” ограничен только гостевым просмотром публичного профиля (`$guestPublicProfileSocialMode`).
Релиз v3.0.3
Кнопки «Ссылка на профиль» и «Ссылка на пост» на странице профиля теперь копируют ссылку в буфер по одному клику. · В `views/profile.php` copy-handler для `.js-copy/.js-magnet` усилен: добавлены `preventDefault/stopPropagation` и fallback-копирование через `textarea + execCommand(copy)` без обязательного `prompt`.
Релиз v3.1.0
Конструктор пользовательских страниц серьёзно переработан: добавлены блоки «Статья», «Гайд» и «Плеер роликов» помимо галереи/ссылок. · В выборе файлов для конструктора страниц больше не нужны ID вручную: добавлен единый проводник файлов с папками, поиском, фильтрами и мультивыбором. · Добавлен reusable partial `views/partials/file_explorer_picker.php` (модалка + JS-компонент `TsoyFileExplorerPicker`) для повторного использования в разных разделах. · В `app/pages.php` расширена модель блоков страниц (`article`, `guide`, `video_player`) и обновлён сбор используемых file_id для рендера.
Релиз v3.2.0
Усилен PWA-режим для ПК и смартфонов: улучшен manifest (ярлыки быстрых действий, desktop/mobile launch-поведение, метаданные приложения). · Уведомления и звонки в PWA/браузере теперь надёжнее открывают нужный раздел по клику (чат, конкретный звонок, уведомления и т.д.). · Root и `public/service-worker.js` синхронизированы и переведены на единый hardened SW (navigation preload, deep-link `notificationclick`, управление файловым кешем через message API). · В Service Worker добавлен корректный bypass для `Range`-запросов, чтобы не ломать стриминг аудио/видео и просмотр медиа на мобильных устройствах.
Релиз v3.2.1
В разделе «Настройки → Брендинг» добавлена отдельная настройка названия проекта в шапке (верхняя панель и боковое меню). · Добавлен ключ настроек `site_header_name`; при пустом значении используется fallback на `site_name`. · В `views/layout.php` брендинг шапки переведён на отдельную переменную `$siteHeaderName`, не затрагивая title страниц и прочие места, где используется `site_name`.
Релиз v3.3.0
Проведена большая унификация визуального стиля проекта: карточки, навигация, формы, модалки и отступы лучше согласованы между разделами. · Раздел «Настройки → Оформление» расширен: добавлены настройки глобального шрифта, масштаба текста, ширины контента, контраста поверхностей и отдельная плотность мессенджера. · Расширен `ui_config()` и системные настройки (`ui_font_family`, `ui_font_scale`, `ui_content_width`, `ui_surface_contrast`, `ui_chat_density`) с валидацией в `index.php?r=admin_settings`. · В `views/partials/head.php` добавлены новые data-атрибуты UI и глобальные CSS-токены (font-scale, content-width, surface-contrast) для централизованного управления дизайном.
Релиз v3.3.1
В мессенджере выбор файла из облака переведён на единый проводник (папки, поиск, фильтры, превью), как в других разделах проекта. · Исправлено меню действий сообщения (`Изменить/Удалить`): dropdown больше не перекрывается соседними сообщениями. · В `views/chat.php` интегрирован reusable `TsoyFileExplorerPicker` для attach-модалки (mobile-safe сценарий через отдельную модалку picker-а). · Для строк сообщений добавлен z-index lift при `show.bs.dropdown` (`chat-row-menu-open`), чтобы меню действий не попадало под соседние bubbles.
Релиз v3.3.2
В «Центре уведомлений» блок с уведомлениями/событиями теперь показывается первым, а настройки уведомлений идут после него. · В `views/notifications.php` переставлен визуальный порядок колонок через grid-order (`notify-col-feed` перед `notify-col-settings`) и обновлён заголовок блока на «Все уведомления».
Релиз v3.3.3
Страница «Контакты» визуально приведена к стилю мессенджера: одинаковая шапка, поверхности, контуры и оттенки/градиенты. · В `views/contacts.php` добавлен локальный токенизированный стиль (`contacts-page`) с той же логикой surface/background, что и в мессенджере, включая реакции на `ui_surface_contrast` и `ui_density`.
Релиз v3.3.4
Проводник файлов в профиле (обложка и вложения постов) переведён на единое ядро `TsoyFileExplorerPicker`, как в мессенджере. · Вложения к посту с устройства в профиле переработаны в единый блок внутри модалки вложений (облако + устройство + ссылки), чтобы выбор работал стабильнее и понятнее. · В `views/profile.php` добавлен JS-слой унификации старых модалок вложений постов: облачные файлы выбираются через общий picker, а hidden-inputs собираются по mime (`attach_images/video/audio/files`). · В `app/files.php` расширен `files_admin_list()` (фильтры по владельцу и папке) и добавлены helper-функции `files_admin_owner_stats()` / `files_admin_folders_list()` для админского проводника.
Релиз v3.3.5
Исправлен двойной проводник в профиле: при выборе обложки поста больше не открывается одновременно новый и старый интерфейс. · Исправлены лишние кнопки «Сохранить / Отмена» под опубликованными постами (ошибка разметки edit-блока). · В `views/profile.php` удалены legacy JS-билдеры вложений постов (`js-att`/`js-att-edit`) и старые вкладки вложений теперь физически вырезаются из DOM после инициализации нового picker-слоя. · В `views/profile.php` убраны bootstrap-trigger атрибуты с кнопок выбора обложки (теперь открывается только `TsoyFileExplorerPicker`), а возврат старой attach-модалки после picker отключён.
Релиз v3.3.6
В конструкторе пользовательских страниц добавлен новый блок «Таблица» с ручным редактированием ячеек. · Для блока таблицы доступны действия: добавить/удалить строку и добавить/удалить столбец, а также режим «первая строка — заголовки». · В `app/pages.php` добавлена нормализация блока `table` (header + rows, ограничения размеров и длины ячеек). · В `views/my_pages.php` расширен page-builder: тип `table`, визуальный table-editor и сериализация таблицы в `blocks_json`.
Релиз v3.4.0
Добавлены полноценные push-уведомления на устройство (через Web Push + Service Worker) для сценариев, когда сайт/PWA закрыт. · Push-уведомления теперь приходят по ключевым событиям: сообщения, входящие звонки/приглашения в звонок, лайки постов, комментарии и добавления в друзья. · Добавлен `app/push.php`: VAPID-ключи (автогенерация), подписки Web Push, очередь уведомлений, payloadless Web Push dispatch и pull-механизм для SW. · В `app/migrations.php` добавлены таблицы `push_subscriptions` и `push_queue` (MySQL/SQLite) с индексами для подписок и очереди доставки.
Релиз v3.4.1
Исправлено мобильное открытие окна вложений в мессенджере: attach-модалки/проводник теперь открываются поверх fullscreen-чата. · Меню профиля/переключения мультипрофилей в мобильной шапке больше не уезжает влево: dropdown центрируется по viewport. · В `views/chat.php` поднят z-index attach-модалки и file-picker-модалки над mobile chat pane (`z-index: 2100`) и добавлена маркировка backdrop (`chat-over-chat-backdrop`). · В `views/chat.php` усилен mobile-open handler клипсы (`pointerup` + `touchend` + click guard), чтобы не терялись тапы в fullscreen-мессенджере.
Релиз v3.4.2
Исправлена навигация по клику на уведомления: уведомления теперь корректно открывают источник (чат, календарь, профиль/пост и т.д.) в браузере и PWA. · В `views/partials/scripts.php` `__tsoyNavigateFromNotification()` переведён на резолв ссылок через `appBasePath`, а fallback `Notification.onclick` теперь использует тот же навигатор. · В `service-worker.js` / `public/service-worker.js` `notificationclick` теперь резолвит `data.url` относительно `self.registration.scope` (а не `origin`), что исправляет deep-link в установках не в корне сайта.
Релиз v3.4.3
Уведомления стали информативнее: для новых сообщений показываются имя отправителя и фрагмент текста. · Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (там, где это поддерживает браузер/устройство). · В `notif_poll` добавлен preview последнего непрочитанного сообщения (`sender/body/url`), а клиентский polling в `views/partials/scripts.php` использует его для desktop-уведомлений и toast. · В `app/push.php` расширен payload Web Push: поддержка `data` и `action_urls`, а `push_notify_incoming_call()` теперь отправляет actions (`accept/close`) и URL принятия звонка.
Релиз v3.4.4
В дашборде (`Настройки`) добавлен отдельный блок настроек уведомлений: цвет, оформление toast/desktop-уведомлений, рингтон уведомлений и отдельный рингтон входящего звонка. · Добавлен блок `PWA и обновления`: политика обновления (manual/notify/auto), интервал проверки Service Worker, автозапрос persistent storage и toast-оповещения об обновлении PWA. · Добавлены новые ключи настроек в `app/settings.php`; сохранение/валидация реализованы в `index.php` (`admin_settings`). · В `views/layout.php` новые настройки прокидываются в `window.__TSOY_NOTIFY` (`ui/sounds/pwa`) для runtime-слоя.
Релиз v3.4.5
В настройках уведомлений добавлена загрузка своих рингтонов: отдельно для обычных уведомлений и отдельно для входящего звонка. · В админке можно прослушать загруженные рингтоны прямо в разделе настроек и удалить их при необходимости. · Добавлены настройки `notify_sound_custom_path` и `notify_call_sound_custom_path`, а в `admin_settings` реализована загрузка аудиофайлов в `public/sounds`. · Во фронтенде (`views/layout.php` + `views/partials/scripts.php`) runtime уведомлений получил поддержку кастомных аудио-файлов с fallback на синтезированные звуки, если браузер блокирует воспроизведение.
Релиз v3.5.0
Стабилизационный релиз: проведён общий cleanup проекта, снижён шум от временных артефактов и улучшена предсказуемость работы уведомлений/PWA-настроек. · В настройках уведомлений доработана работа со своими рингтонами: при замене старые файлы корректно очищаются, а слишком большие файлы не принимаются. · Удалены временные каталоги восстановления/аудита (`tmp_*`) из рабочей директории, которые засоряли поиск и увеличивали накладные расходы проверок. · В `scripts/check-encoding.ps1` добавлено универсальное исключение для временных каталогов `tmp_*`, чтобы сборочные проверки не сканировали техмусор.
Релиз v3.5.1
Hotfix рингтонов на телефонах: улучшено воспроизведение кастомных рингтонов уведомлений/звонка на мобильных браузерах и PWA. · В `views/partials/scripts.php` исправлен баг кастомного рингтона уведомлений: теперь Promise `audio.play()` реально проверяется, и при ошибке срабатывает fallback-звук. · Кастомные рингтоны теперь резолвятся через `appBasePath` (`__tsoyResolveAppUrl`) для корректной работы в установках проекта в подпапке сайта.
Релиз v3.5.2
Усилена надёжность уведомлений: добавлен серверный retry-worker для wake-push доставки с повторными попытками и backoff. · В админке (Настройки -> PWA и обновления) появился блок диагностики push-очереди: количество недоставленных элементов, состояние очереди и статус подписок. · В `push_queue` добавлены поля состояния доставки (`dispatch_state`, попытки, backoff, lock, last_error/status) и миграции для MySQL/SQLite. · В `app/push.php` реализованы функции очереди и worker-обработки (`claim/process due`, retry/backoff, статистика очереди).
Релиз v3.5.3
Уведомления стали стабильнее при закрытом PWA/сайте: сервер теперь пытается отправлять полноценный Web Push payload (с телом уведомления), а не только wake-push. · Сохранён fallback-режим (`wake-push + push_pull`) для совместимости, если endpoint/браузер не принимает payload. · В `app/push.php` добавлена payload-отправка Web Push (`aes128gcm`) с VAPID и шифрованием сообщения на стороне сервера (ECDH + HKDF + AES-128-GCM). · `push_dispatch_user()` теперь умеет отправлять payload в push и возвращает раздельную статистику `payload_sent` / `wake_sent`.
Релиз v3.5.4
В админке (`Настройки -> PWA и обновления`) добавлена диагностика push-устройств: список подписок, устройство/режим, последний успех доставки и ошибки. · Появилась кнопка `Тест push` для каждого устройства, чтобы быстро проверить доставку уведомлений на конкретную подписку. · В `app/push.php` добавлены helper-функции диагностики: `push_subscriptions_admin_list()`, `push_subscription_get()`, `push_subscription_test_send()`. · Добавлен route `index.php?r=push_test_subscription` (admin/settings), который отправляет тестовый push на выбранную подписку и пишет результат в flash.
Релиз v3.5.5
Диагностика push-устройств в админке стала практичнее: добавлены фильтры (поиск, active/inactive, только с ошибками). · Для push-подписок появились действия `Отключить / Включить / Удалить` прямо в таблице устройств. · В `app/push.php` добавлены admin-helper’ы управления подписками: `push_subscription_set_active()` и `push_subscription_delete_by_id()`, а список подписок получил серверные фильтры (`q`, `only_errors`, `state`). · В `index.php` добавлен route `push_subscription_admin_action` для безопасного управления подписками из админки (POST + CSRF + capability).
Релиз v3.5.6
Исправлен бренд в уведомлениях: заголовок уведомлений теперь подтягивается из настроек сайта, а не захардкожен как `TSOY.CLOUD`. · В диагностике push-устройств добавлена колонка `Последний тест` (успех/ошибка, режим `payload/wake`, HTTP-код, время). · В `app/push.php` добавлен helper `push_app_title()` (с кешем), и серверные push-события/очередь/тестовые уведомления переведены на имя сайта из `settings`. · В `views/layout.php` + `views/partials/scripts.php` runtime уведомлений получил `siteName/siteHeaderName`; browser/PWA fallback notifications и toast теперь используют бренд из настроек.
Релиз v3.5.7
В диагностике push-устройств добавлена статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). · Добавлены кнопки сброса статистики доставок: для одной подписки и для всех подписок сразу. · В `push_subscriptions` добавлены поля `push_stat_*` и миграции для MySQL/SQLite; реальные отправки в `push_dispatch_user()` записывают статистику по подписке (`payload/wake/fallback/error`). · В `app/push.php` реализованы helper’ы `push_subscription_delivery_stats_record()` и `push_subscription_delivery_stats_reset()`.
Релиз v3.5.8
Hotfix уведомлений: название в заголовке уведомления теперь берётся в приоритете из `Название в шапке`, затем из `Название сайта`. · Исправлен fallback тестового уведомления в центре уведомлений: больше не показывает захардкоженный `TSOY.CLOUD`. · В `views/notifications.php` fallback `new Notification(...)` переведён на бренд из `window.__TSOY_NOTIFY`. · В `views/partials/scripts.php` helper `__tsoyNotifyTitle()` теперь использует `siteHeaderName` раньше `siteName`.
Релиз v3.5.10
В диагностике push-устройств добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общие счётчики попыток. · Добавлен мини-график/спарклайн по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца показывает объём попыток за день. · В `app/push.php` `push_queue_stats()` расширен блоком `delivery_summary`, который агрегирует `push_stat_*` по всем push-подпискам и считает проценты (`payload/fallback/error`). · Добавлена таблица/миграция `push_delivery_daily_stats` и запись дневной статистики при реальных отправках push (`payload/wake/fallback/error`).
Релиз v3.5.11
Страница `Настройки` в дашборде больше не выглядит как сплошная простыня: добавлен блок быстрых переходов по разделам (якоря) и группировка по логическим секциям. · Появились явные секции: основные параметры, дизайн/уведомления, PWA/push, функции/звонки/диагностика — ориентироваться в настройках стало заметно проще. · В `views/admin_settings.php` добавлены якоря (`id`) для ключевых блоков настроек и верхняя навигационная панель без изменения backend-логики сохранения формы. · Страница сохранена как единая форма `admin_settings`, поэтому существующие `POST`-обработчики, `formaction` для push-диагностики и CSRF-проверки продолжают работать без миграций.
Релиз v3.5.12
Hotfix страницы `Настройки`: быстрые переходы по разделам теперь ведут в нужные блоки страницы, а не в корень сайта. · Убран sticky-режим блока `Разделы настроек`, из-за которого он перекрывал интерфейс при прокрутке. · В `views/admin_settings.php` ссылки разделов переведены с hash-only (`#...`) на route-aware (`index.php?r=admin_settings#...`) для корректной работы при наличии `<base>`/нестандартного base path. · Снята sticky-позиция с `admin-settings-nav-card` (оставлен статичный блок), чтобы навигация не накрывала карточки настроек ниже по странице.
Релиз v3.5.13
Страница `Настройки` переделана в Android-style режим: слева список разделов, справа показывается только выбранный раздел настроек. · Переключение разделов теперь происходит без переходов по странице/якорям; интерфейс не перекрывается и не дёргается. · В `views/admin_settings.php` реализован client-side секционный контроллер (`data-settings-nav` / `data-settings-section`) с переключением видимости блоков внутри одной формы. · Сохранена совместимость с текущим backend `admin_settings`: `POST`-логика, `formaction` кнопки push-диагностики и CSRF-проверка не менялись.
Релиз v3.5.14
В разделе `Система` настроек добавлен выпадающий список выбора часового пояса по Гринвичу (GMT/UTC offsets). · При выборе смещения из списка значение автоматически подставляется в поле часового пояса ниже, чтобы сохранить настройку одним кликом. · В `views/admin_settings.php` добавлена генерация preset-списка фиксированных зон `GMT-12 ... GMT+14` с валидными IANA-идентификаторами (`Etc/GMT±N`, `UTC`). · Добавлена JS-связка `systemTimezoneUtcPreset -> systemTimezoneInput`, которая подставляет выбранный preset в существующее поле `system_timezone` без изменений backend-валидации.
Релиз v3.5.15
Настройки переведены в Android-style режим с боковым меню разделов и вторым уровнем внутри `PWA и push` (`Обновления`, `Очередь push`, `Устройства`). · В главное меню добавлен отдельный пункт `Настройки` (после `Дашборд`), доступный всем авторизованным пользователям. · Добавлен route `settings` с доступом через `sections.settings`; legacy route `admin_settings` сохранён для совместимости админ-инструментов и внутренних redirect’ов. · `index.php` (`settings/admin_settings`) разделён по scope сохранения: личные настройки (theme + notify prefs) сохраняются всем ролям, глобальные админ-настройки — только при `admin.settings` и не в режиме `admin_tester`.
Релиз v3.5.16
Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении общего бокового меню. · Переходы в меню настроек теперь открывают соответствующий экран, а не просто переключают внутренние блоки в одном и том же URL. · В `index.php` добавлены route-level страницы настроек (`settings_admin_*`) с capability-gates через `admin.settings`; legacy `admin_settings` сохранён и перенаправлен в режим `Брендинг` внутри общего шаблона. · В `views/admin_settings.php` реализована route-aware навигация: единый шаблон использует разные `action`/initial section в зависимости от текущего settings-route и корректно обрабатывает hash-переходы (`#pwa-notify-admin`, подпункты PWA и др.).
Релиз v3.5.17
Hotfix страницы `Настройки`: пункты бокового меню снова выглядят как кнопки (без подчёркиваний) и заполняют всю ширину колонки. · На desktop видимый раздел настроек теперь растягивается на всю доступную ширину правой панели (как `WebRTC`), а не остаётся половинной карточкой. · В `views/admin_settings.php` для `.admin-settings-side-btn` добавлены `display:block` и `text-decoration:none`, что устраняет регресс после перевода пунктов меню в `<a>`. · В JS-section режиме добавлен CSS override для `.js-settings-block.is-visible` внутри `.row`: `flex-basis/max-width:100%` (исправлен конфликт с Bootstrap `col-lg-6`).
Релиз v3.5.18
Hotfix страницы `Настройки`: в разделе `База данных` убрана лишняя горизонтальная линия перед карточкой блока. · Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь подстраивается под тему оформления и остаётся читаемой в светлой и тёмной темах. · В `views/admin_settings.php` удалён лишний `<hr class=\"my-4\">` перед блоком `settings-db`. · Стили `admin-settings-savebar` переведены с жёстко тёмного фона (`rgba(20,22,30,...)`) на theme-aware фон через Bootstrap CSS variables (`--bs-body-bg-rgb`, `--bs-body-color`, `--bs-border-color-translucent`).
Релиз v3.6.0
Начат рефакторинг связки `Профиль / Контакты / Мессенджер`: на всех трёх экранах добавлен единый переключатель разделов (Social Hub) и явное описание роли каждого раздела. · `Профиль` теперь явно позиционируется как публичная страница пользователя (посты, медиа, страницы, друзья), `Контакты` — как каталог и управление связями, `Мессенджер` — как диалоги/вложения/звонки. · Добавлен reusable partial `views/partials/social_suite.php` (единый CSS для Social Hub: header/switcher/surfaces/role-map chips). · `views/profile.php`, `views/contacts.php`, `views/chat.php` подключены к `social_suite` и получили общий navigation shell без вмешательства в критичную mobile-геометрию композера мессенджера.
Релиз v3.6.1
Следующий шаг по связке `Контакты / Мессенджер`: в мессенджере блок `Быстрый старт` теперь показывает только контакты пользователя, а полный каталог вынесен в раздел `Контакты`. · В настройках исправлено выравнивание раздела `База данных`: карточка блока больше не поднимается выше меню слева. · В `views/chat.php` удалено дублирование каталога пользователей внутри мессенджера: список `Начать чат` переведён на `contacts_list($me_id)` + ссылка в `index.php?r=contacts`. · В `views/admin_settings.php` выровнен db-блок (`settings-db`) относительно общего grid/меню и обновлены подписи/подразделы блока дизайна (`ui/notify`) для разделения личных и глобальных настроек.
Релиз v3.6.2
Убран лишний `Social Hub` с экранов `Профиль / Контакты / Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс снова стал компактнее. · В `Мессенджере` закреплена роль экрана: только активные диалоги и общение. Новый чат создаётся через раздел `Контакты`. · Удалён временный partial `views/partials/social_suite.php` и его подключения из `views/profile.php`, `views/contacts.php`, `views/chat.php` (откат лишнего UI-слоя без влияния на backend). · В `views/chat.php` удалён дублирующий сценарий старта чатов из списка пользователей/контактов: оставлен переход в `index.php?r=contacts` и история активных диалогов.
Релиз v3.6.3
Следующий шаг по связке `Контакты / Мессенджер`: в карточках пользователей на странице `Контакты` добавлены явные действия `Написать` и `Позвонить`. · Мессенджер очищен от каталоговых элементов: в боковой панели оставлены только активные диалоги, без блока быстрого старта/списков людей. · `index.php` (`chat_start` и `chat?start=`) теперь прокидывает `call=1` в итоговый URL диалога, чтобы из внешних экранов можно было запускать звонок напрямую. · В `views/contacts.php` унифицированы action-кнопки карточек (`Написать` / `Позвонить`) для списка контактов и каталога пользователей.
Релиз v3.6.4
Дожат интерфейс мессенджера под единый стиль с `Контактами`: обновлены список диалогов, шапка диалога и composer (кнопки, границы, поверхности, типографика). · Список диалогов стал визуально ближе к карточкам контактов: более ровные поверхности, одинаковая логика hover/active, читаемые превью и время. · Изменения сделаны только в `views/chat.php` на уровне CSS/визуальных состояний (`chat-dialog-item`, `chat-dialog-head`, `chat-inputbar`, action-buttons). · Мобильная геометрия ввода/клавиатуры (`fixed/sticky/viewport` логика, fullscreen layout цепочка) не изменялась, чтобы не вернуть iPhone-баг с \"подбородком\".
Релиз v3.6.5
Мессенджер получил второй visual-pass: доработаны карточки диалогов, шапка активного диалога, кнопки действий и composer для более цельного и лёгкого вида. · В списке диалогов добавлена компактная CTA-кнопка `Контакты` в шапке списка и более полезное пустое состояние с переходом в `Контакты`. · В `views/chat.php` расширен UI-only CSS слой (polish pass 2): `chat-list-headbar`, `chat-dialog-item`, `chat-dialog-head`, `chat-head-btn`, `chat-compose-btn` и density overrides. · Добавлены только безопасные классы/микроразметка в `views/chat.php` (CTA в списке диалогов, классы кнопок) без изменения маршрутов, логики сообщений и звонков.
Релиз v3.6.6
Hotfix iPhone/PWA уведомлений: системная строка `from ...` теперь берёт бренд из настроек (`Название в шапке` → `Название сайта`), а не из старого захардкоженного `TSOY.CLOUD`. · PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с брендингом проекта, чтобы имя приложения и имя в уведомлениях совпадали. · В `index.php` добавлен route `manifest`, который отдаёт динамический Web App Manifest на основе текущих настроек брендинга (`site_header_name` / `site_name`). · В `views/partials/head.php` `<link rel=\"manifest\">` переведён на динамический route с cache-bust (`APP_VERSION` + hash бренда); `application-name` и `apple-mobile-web-app-title` переведены на приоритет `site_header_name`.
Релиз v3.6.7
Исправлен мобильный overflow окна `Диалоги` в мессенджере: карточка списка диалогов больше не вылезает за ширину экрана на iPhone/смартфонах. · Стабилизирована ширина mobile-раскладки мессенджера без изменений логики клавиатуры и без риска вернуть баг с `подбородком`. · В `views/chat.php` для mobile добавлен точечный фикс ширины: убраны отрицательные отступы `row g-3` (Bootstrap gutter overflow) и зажаты `#chatListPane`/карточка/тело списка в `max-width:100%`. · Изменение ограничено CSS-слоем страницы чата; fullscreen/composer/`visualViewport` логика не изменялась.
Релиз v3.6.8
Ускорена отправка сообщений в мессенджере: сообщение появляется заметно быстрее после нажатия `Отправить`, без ощущения паузы в 2–3 секунды. · Повышена плавность UX при отправке: сервер отдаёт ответ чату сразу, а push-уведомления больше не держат отправку сообщения. · В `index.php` (`chat_send_async`) push для нового сообщения переведён в queue-first режим: уведомление ставится в очередь без синхронной отправки (`sendNow=false`). · HTTP-ответ `chat_send_async` теперь завершается до фоновой попытки dispatch push (`fastcgi_finish_request` / flush), чтобы Web Push не блокировал отображение сообщения.
Релиз v3.6.9
Подготовлен серверный фундамент чата для больших историй переписки (сотни тысяч/миллионы сообщений) без изменения привычного интерфейса. · Список диалогов и polling чата стали легче для сервера за счёт оптимизации хранения unread-состояния и индексов под крупные переписки. · В `conversations` добавлены денормализованные unread-счётчики (`u1_unread_count`, `u2_unread_count`) и метаданные последнего сообщения (`last_message_id`, `last_message_preview`). · В `app/chat.php` `message_send()` / `conversation_mark_read()` обновляют unread-счётчики диалога; `message_delete_for_me()` и `conversation_clear_for_me()` синхронизируют их через пересчёт/сброс.
Релиз v3.6.10
Полиш страницы `Контакты`: действия `Написать`, `Позвонить`, `Удалить` в карточках заменены на компактные иконки (конверт, трубка, корзина) для более чистого интерфейса. · Сохранены подсказки (`title`) и `aria-label`, чтобы UX остался понятным и доступным на ПК и мобильных устройствах. · В `views/contacts.php` добавлены `contacts-actions` и `contacts-action-icon` (theme/density-friendly размеры икон-кнопок), заменена текстовая разметка кнопок в списке `Мои контакты` и `Каталог пользователей`. · Логика маршрутов и действий (`chat_start`, `chat_start&call=1`, add/remove contact) не изменялась.
Релиз v3.6.11
Доведён UI действий в `Контактах`: кнопка `В контакты` заменена на иконку `человек+`, чтобы все действия в карточках были в одном визуальном языке. · Заголовок `Каталог пользователей` и кнопка `Найти` теперь находятся в одной строке, поле поиска вынесено отдельно ниже на полную ширину. · В `views/contacts.php` кнопка добавления контакта переведена на `bi-person-plus` с `title`/`aria-label`; сохранена существующая POST-логика `action=add`. · Поиск в каталоге использует `form=\"contactsSearchForm\"` у кнопки `Найти`, чтобы держать правильную desktop/mobile компоновку без изменения backend-маршрута `contacts`.
Релиз v3.6.12
Системные файлы проекта (логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации) переведены в единую системную папку `public/system/...`. · Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически и мягко переносятся в новую системную структуру при запуске приложения. · Добавлен `app/system_assets.php`: единый helper для системных ассетов (безопасное сохранение upload-файлов, удаление только из разрешённых системных директорий, миграция legacy-путей). · В `index.php` (`admin_settings`) загрузка логотипа, favicon и кастомных рингтонов переведена на `system_assets_store_upload(...)` с хранением в `public/system/branding` и `public/system/sounds`.
Релиз v3.6.13
В настройках переработан раздел `Внешний вид`: вместо разрозненных пунктов `Внешний вид профиля` и `Внешний вид сайта` появился единый раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). · Для глобального оформления сайта добавлены готовые профили внешнего вида (несколько пресетов под разные сценарии: чистый, рабочий, чтение, мягкий, ночной, psychedelic). · Добавлен helper `ui_appearance_profiles()` в `app/bootstrap.php` с готовыми профилями оформления и пакетами значений для `ui_*` настроек. · В `views/admin_settings.php` объединена навигация дизайна в один top-level `Внешний вид`, добавлен UI выбора/подстановки профиля оформления и обновлены кириллические шрифтовые опции.
Релиз v3.6.14
Исправлен UX профиля: кнопка `Написать` больше не отображается на собственной карточке профиля. · У вложений постов в обычном просмотре убраны кнопки `Удалить`: удаление доступно только в режиме редактирования поста. · В `views/profile.php` кнопка перехода в чат скрыта для `is_self`. · Из обычного рендера вложений в `views/profile.php` удалены формы `post_attachment_delete`; удаление оставлено в edit-блоке (`js-del-att`).
Релиз v3.6.15
В личном разделе `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. · Для публичной страницы профиля добавлена персональная настройка вида для гостей: `показывать боковое меню`, `скрывать боковое меню`, `скрывать боковое меню и шапку сайта`. · В `users` добавлены персональные UI-поля `ui_sidebar_mode` и `guest_profile_chrome_mode` (миграции в `app/migrations.php`). · В `index.php` (`settings`) сохранение пользовательских настроек расширено: добавлен `user_update_ui_prefs(...)` и синхронизация значений в session snapshot.
Релиз v3.6.16
В мессенджере добавлено контекстное меню сообщения по правой кнопке мыши и по удержанию на мобильных устройствах. · Меню действий сообщения теперь включает `Изменить`, `Удалить`, `Цитировать` и `Реакция` (с выбором emoji). · Добавлена таблица `message_reactions` (MySQL/SQLite) и миграции/индексы в `app/migrations.php`. · В `app/chat.php` добавлены batch-подгрузка реакций для пачек сообщений (`chat_messages_payload_for_client`) и `message_reaction_toggle(...)`.
Релиз v3.6.17
В мессенджере у сообщений добавлена маленькая галочка статуса прочтения (`прочитано / не прочитано`). · Галочка отображается у ваших сообщений и обновляется в диалоге автоматически, когда собеседник читает чат. · В `app/chat.php` в payload сообщений добавлен `is_read`, а также helper `conversation_last_read_sent_message_id(...)` для лёгкого read-receipt sync. · В `chat_send_async` и `chat_messages_poll` (`index.php`) добавлен `read_upto_own_id`, чтобы фронт мог обновлять статусы уже отрисованных сообщений без перезагрузки.
Релиз v3.6.18
В контекстное меню сообщения мессенджера добавлен пункт `Будильник` (пинг-напоминание). · Будильник доступен для ваших сообщений и отправляет повторное уведомление собеседнику только если сообщение ещё не прочитано. · Добавлен route `chat_message_nudge` в `index.php` с проверками: сообщение принадлежит текущему пользователю, находится в этом диалоге и ещё не прочитано. · В `app/push.php` добавлен `push_notify_chat_message_reminder(...)` с отдельным типом `chat_nudge` и dedupe tag по сообщению.
Релиз v3.6.19
Начато внедрение голосовых сообщений в мессенджер: добавлена красная кнопка микрофона и аккуратное окно записи. · Голос записывается прямо в браузере/на устройстве и прикрепляется к сообщению как аудио-вложение. · В `views/chat.php` добавлены voice-recorder modal, UI состояния записи и интеграция с `MediaRecorder` (MVP) без изменения keyboard/fullscreen геометрии чата. · Записанный blob прикрепляется через существующий `chatFileInput` (`DataTransfer`) и уходит в уже существующий backend upload flow `chat_send_async` / `message_send`.
Релиз v3.6.20
Добавлен глобальный preloader при загрузке страниц сайта: пользователь видит аккуратный индикатор загрузки вместо “пустого” экрана. · Для PWA добавлен отдельный режим preloader `Идёт установка приложения…` при установке через системную кнопку. · В `views/partials/head.php` добавлен theme-aware overlay `#tsoyPreloader` (общий для сайта и установщика), работающий в светлой/тёмной теме без жёстко тёмного фона. · В `views/partials/scripts.php` добавлен runtime `window.__TSOY_PRELOADER` (show/hide/set) с автоскрытием после загрузки, показом на внутренних переходах и submit-формах (кроме AJAX submit с `preventDefault`).
Релиз v3.6.21
Исправлено переключение разделов в настройках: секции теперь открываются без ощущения полной перезагрузки страницы. · В `Контактах` длинные имена пользователей больше не раздвигают и не перестраивают иконки действий: текст ужимается/переносится внутри текстовой зоны, а кнопки остаются на месте. · В `views/admin_settings.php` клики по боковому меню настроек переведены на client-side section switch (`history.pushState`) вместо обязательной навигации по `settings_admin_*` route; `form action` динамически переключается по секции, поэтому сохранение остаётся корректным. · В `views/contacts.php` добавлены отдельные классы текстовой зоны (`contacts-person-*`), `contacts-actions` переведён в `nowrap`/`flex-shrink:0`, а длинные имена ограничены в 1–2 строки без сдвига иконок.
Релиз v3.6.22
Hotfix preloader: убран автопоказ на каждый внутренний клик, поэтому переключение секций настроек и переходы между чатами больше не должны “подвисать” из-за overlay. · Preloader сохранён там, где он реально полезен: первичная загрузка страницы, установка сайта и установка PWA. · В `views/partials/scripts.php` глобальный preloader переведён в explicit-flow режим: отключён автоперехват всех внутренних ссылок и обычных submit-форм. · Автопоказ preloader оставлен только для `install.php` submit и для форм с `data-preloader=\"1\"`; PWA install flow (`beforeinstallprompt`) сохранён отдельно.
Релиз v3.6.23
В `Профиле` длинные тексты в карточках друзей/страниц и в постах ведут себя аккуратнее: текст ужимается/переносится внутри своей зоны и не ломает действия/бейджи. · В `install.php` добавлена мини-анимация этапов установки (БД → миграции → админ → готово) с синхронизацией текста в preloader. · В `views/profile.php` добавлены clamp/overflow правила для карточек друзей/страниц и фикс action-зон в постах, чтобы длинные строки не выталкивали элементы интерфейса. · В `install.php` реализован submit-time stepper без изменения backend-логики: этапы анимируются на клиенте и обновляют `__TSOY_PRELOADER` в режиме `install-site`.
Релиз v3.6.24
Hotfix preloader: страницы `Профиль` и `Мессенджер` открываются заметно быстрее, overlay загрузки больше не ждёт долго все картинки/медиа. · Preloader теперь скрывается на этапе готовности DOM, а не только после полного `window.load`. · В `views/partials/scripts.php` логика initial preloader boot переведена на `DOMContentLoaded`/`interactive` + `requestAnimationFrame`, чтобы не блокировать UI на медиа-насыщенных страницах. · `window.load` и `pageshow` оставлены только как fallback-сигналы; добавлен hard fail-safe timeout на случай странных браузерных зависаний событий.
Релиз v3.6.25
Hotfix голосовых сообщений: голосовые `.webm` в мессенджере теперь отображаются плеером, а не только ссылкой на файл. · Фикс работает и для уже отправленных голосовых (по имени `voice_message_*`), и для новых записей. · В `app/files.php` добавлена нормализация MIME для browser voice-notes (`voice_message_*`), чтобы `.webm/.ogg/.m4a` не сохранялись как generic/video MIME. · В `app/chat.php` добавлен helper `chat_file_is_audio_like(...)`, а payload чата теперь отдаёт `file_is_audio` для корректного client render старых и новых голосовых.
Релиз v3.6.26
На главной странице блок недавних файлов больше не растягивает экран вниз: по умолчанию показываются первые 3 файла. · Остальные файлы открываются кнопкой `Показать ещё файлы` (порциями по 3), как в разделе новостей. · В `views/home.php` лента файлов переведена на существующий механизм `data-load-more-root` из `views/layout.php` без добавления нового JS-кода. · Для элементов файлов добавлено серверное начальное скрытие (`d-none`) после первых 3 записей, чтобы список был компактным сразу при рендере страницы.
Релиз v3.6.27
Hotfix голосовых сообщений в мессенджере: voice-notes отображаются компактной одной строкой без второй строки с именем файла. · Визуал голосового сообщения стал тоньше и аккуратнее, ближе к обычной строке сообщения. · В `views/chat.php` voice-note рендер (`voice_message_*`) уже использует отдельный inline-layout без file-link; в релиз включён hotfix компактности CSS (`.chat-voice-inline-row`, `.chat-audio-clip.is-voice-note`). · Серверный и polling JS рендеры голосовых сообщений синхронизированы: для voice-notes не выводится отдельная строка имени файла.
Релиз v3.6.28
Голосовые сообщения в мессенджере: один тап по микрофону запускает запись, повторный тап останавливает запись и сразу отправляет голосовое. · Если запись не удалось отправить автоматически, голосовое остаётся прикреплённым в composer и можно отправить вручную. · В `views/chat.php` обычный click/tap микрофона переведён на toggle-логику записи (`start/stop+auto-send`) без изменения mobile composer/fullscreen геометрии. · Добавлен helper программной отправки через существующий async submit (`chat_send_async`) после авто-прикрепления voice blob в composer.
Релиз v3.6.29
Голосовые сообщения в чате теперь воспроизводятся одинаково на ПК и телефоне: компактной одной кнопкой play/pause. · У voice-note больше нет зависимости от урезанных native audio-controls браузера на десктопе. · В `views/chat.php` voice-notes (`voice_message_*`) переведены на custom mini-player (кнопка + hidden audio) в server-side и polling-render. · Добавлена JS-делегация управления воспроизведением (play/pause, синхронизация иконки, автопауза предыдущего голосового).
Релиз v3.6.30
В `Настройки -> Внешний вид` добавлены персональные настройки preloader: режим (`умный / только установка-PWA / выключить`), компактный вид и показ текста. · Preloader теперь можно настроить под себя по каждому профилю аккаунта (профиль = отдельный user). · В `users` добавлены персональные UI-поля preloader (`ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text`) с загрузкой в session snapshot и применением в `views/partials/scripts.php`. · В `views/partials/head.php` добавлены вариации preloader (`compact`, скрытие текста), а runtime учитывает пользовательский режим без ломки install/PWA сценариев.
Релиз v3.6.31
Hotfix голосовых сообщений на телефоне: mini-player voice-note снова стабильно воспроизводится по тапу. · Поведение mini-player синхронизировано для mobile/desktop (play/pause одной кнопкой). · В `views/chat.php` для voice mini-player добавлен mobile-safe `touchend` handler с подавлением дубля `click`, чтобы iPhone/Safari не терял тап. · Скрытый `<audio>` переведён с `display:none` на visually-hidden класс; добавлен `audio.load()` перед `play()` для лучшей совместимости мобильных браузеров.
Релиз v3.6.32
В Брендинге добавлена отдельная настройка `Иконка PWA` (опционально) для установленного приложения. · Если PWA-иконка не задана, приложение теперь использует `favicon`, а затем `лого` как fallback. · Route `index.php?r=manifest` теперь динамически подменяет `icons` (и shortcut icons) из настроек брендинга вместо жёстких `/public/icons/...`. · В `views/partials/head.php` `apple-touch-icon` переведены на динамический PWA icon с cache-bust, а `manifest` cache-bust учитывает смену иконки.
Релиз v3.6.33
В PWA исправлен просмотр файлов: теперь файл открывается во встроенной странице-просмотрщике с кнопкой `Назад`, а не “захватывает” приложение без пути назад. · Кнопка `Открыть` в файловом проводнике тоже использует этот встроенный просмотр в standalone/PWA. · Добавлен route `index.php?r=file_viewer` с безопасной проверкой доступа к файлу и возвратом по `back` URL. · В `views/partials/scripts.php` добавлен standalone-PWA перехват ссылок `index.php?r=view&id=...` с перенаправлением во встроенный просмотрщик вместо raw-file response.
Релиз v3.6.34
Hotfix mini-плеера голосовых на телефоне: воспроизведение по тапу снова стабильно запускается. · Поведение mini-player выровнено между iPhone/Android и ПК (одна кнопка play/pause). · В `views/chat.php` mini-player получил прямые обработчики `touchend/click` на кнопке (а не только делегирование через контейнер сообщений) с защитой от двойного срабатывания. · Убран рискованный pre-play `audio.load()` как основной путь; добавлен fallback reload только при ошибке `play()`.
Релиз v4.0.0
Новый формат приложения `messenger`: отдельный упрощённый режим только для Контактов и Мессенджера с прямым открытием чата. · Страница `Админ → Пользователи` полностью переработана: аккаунт и его профили теперь управляются в одной карточке. · В модель пользователей добавлены `app_mode`, `group_id`, `group_role`, `allow_multiprofile`, `admin_password_hint`; добавлены таблицы `groups`, `group_members`, `group_bridges` и миграции/индексы для них. · Реализована backend-видимость по группам и мостам в `users_directory`, `contacts_list`, `conversation_get_or_create`, `conversations_for_user` и проверках `chat_start`/добавления контактов.
Релиз v4.1.0
Управление группами и мостами вынесено в отдельную страницу `Дашборд → Группы и мосты` с полным управлением: создание, переименование, удаление групп и мостов, просмотр участников. · Страница `Пользователи` очищена от группового управления, оставлены только аккаунты и создание; добавлена ссылка на новую страницу групп. · Добавлены backend-функции `group_rename()`, `group_delete()`, `group_bridge_delete()` в `app/users.php` для полного CRUD-управления группами и мостами. · Новый route `admin_groups` в `index.php` с POST-обработчиками: `create_group`, `rename_group`, `delete_group`, `set_bridge`, `delete_bridge`.
Релиз v4.2.0
В мессенджере при записи голосового сообщения появляется красная кнопка-корзина для отмены записи (как в Telegram). Работает и при тапе, и при удержании. · Добавлена функция «Удалить у всех»: отправитель может удалить своё сообщение не только для себя, но и для собеседника. · Добавлена кнопка `#voiceCancelBtn` (`.chat-voice-cancel-btn`) в inputbar мессенджера; появляется при `voiceTapRecording`/`voiceHoldRecording`, вызывает `voiceRecResetState()` для отмены. · В `app/chat.php` добавлена `message_delete_for_all()` — физическое удаление сообщения и его реакций; доступно только отправителю.
Релиз v4.3.0
Создана отдельная страница «Новости» со всеми админ- и системными новостями, пагинацией и кнопкой «Показать ещё». · На дашборде в блоке «Новости» теперь показываются только 2 последних записи и ссылка «Все новости →». · Создан `views/news.php` — standalone-страница новостей с `page_top`, раздельными блоками admin/system news и load-more (initial=10). · Добавлен маршрут `case "news"` в `index.php` затягивающий `views/news.php`.
Релиз v4.4.0
Администрирование новостей вынесено из дашборда сотрудников на отдельную страницу с полным CRUD (создание, чтение, редактирование, удаление). · Файловый проводник «Мои файлы» полностью переписан: карточный/списочный вид, drag-n-drop файлов в папки, зона загрузки, контекстное меню, иконки по типу файла, переключатель grid/list. · В `app/news.php` добавлены `news_get()` и `news_update()` для CRUD новостей. · В `index.php` добавлен маршрут `news_update` (POST, csrf, audit_log).
Релиз v4.5.0
Мессенджер переработан в стиле Telegram: кнопка «корзина» при записи голосового теперь слева, заголовок чата стал overlay поверх сообщений (больше полезной площади), упрощённый хедер (только «Назад» + имя/аватар). · Нажатие на имя/аватар в чате открывает карточку пользователя (Telegram-style slide-in панель) с действиями: звонок, ссылка, профиль, очистить чат. · `views/chat.php` — voiceCancelBtn перемещён перед attachBtn в HTML (trash слева при записи). · `views/chat.php` — заменён `.chat-dialog-head` на `.chat-overlay-head` (position: absolute, backdrop-filter, overlay поверх сообщений).
Релиз v4.6.0
Создана единая дизайн-система проекта (14 переиспользуемых компонентов): карточки, hover-эффекты, стеклянные панели, навигация, статусные индикаторы, зоны загрузки и др. · Unification поверхностных переменных (light/dark × soft/balanced/strong) — 6 тем теперь задаются в одном месте вместо дублирования в каждом view. · Создан `public/css/design-system.css` (382 строки, 14 компонентов): `.t-surface`, `.t-stat-card`/`.t-stat-grid`, `.t-card-hover`, `.t-info-card`, `.t-card-frosted`, `.t-section`/`.t-section-title`, `.t-page-border`, `.t-summary-grid`, `.t-status-pill`, `.t-list-hover`, `.t-status-dot`, `.t-sticky-bar`, `.t-nav-item`, `.t-upload-zone`. · В `views/partials/head.php` подключён `public/css/design-system.css` перед inline `<style>`.
Релиз v5.0.0
Система «Группы» переименована в «Домены» — организационные единицы теперь называются доменами. · Маршрут `admin_groups` → `admin_domains`; навигация, дашборд и все UI-тексты обновлены. · Миграция БД: таблицы `groups`→`domains`, `group_bridges`→`domain_bridges`, `group_members`→`domain_members`; колонки `group_id`→`domain_id`, `group_role`→`domain_role`, `is_global_group`→`is_root_domain`, `group_a_id`→`domain_a_id`, `group_b_id`→`domain_b_id`. · Поддержка MySQL и SQLite: `ALTER TABLE RENAME`, `RENAME COLUMN` / `CHANGE COLUMN` в зависимости от драйвера.
Релиз v5.1.0
Маршрут `dashboard` (файловый проводник) переименован в `skybox` — SkyBox, личное облачное хранилище. · Маршрут `staff` (панель администратора) переименован в `dashboard` — Дашборд. · `views/dashboard.php` → `views/skybox.php`; `views/staff.php` → `views/dashboard.php`; `views/admin.php` → `views/filehub.php`. · `index.php`: маршруты, capability map, case-блоки и все redirect/fallback URL обновлены.
Релиз v5.2.0
FileHub переписан на единый с SkyBox карточный интерфейс (grid/list, sidebar, поиск, breadcrumbs). · Выпадающее меню профиля полностью переработано: чистый список ссылок, компактное переключение профилей, убрана сетка кнопок. · `views/filehub.php` переписан с табличной разметки на `cloud-file-grid`/`cloud-file-card` из SkyBox. · `views/layout.php`: dropdown `.topbar-profile-menu` и модальное окно `#userProfilesModal` заменены новой разметкой с `.tpm-*` и `.upm-*` классами.
Релиз v5.3.0
Поле «Отображаемое имя» разделено на «Имя» и «Фамилия» — два отдельных поля повсюду в системе. · При регистрации теперь обязательно указать имя и фамилию. · Миграция: добавлены колонки `first_name` и `last_name` в таблицу `users`. · Колонка `display_name` сохранена для обратной совместимости — автоматически вычисляется из `first_name + last_name`.
Релиз v5.4.0
Настройка Preloader перенесена из личных настроек пользователя в глобальные настройки администратора (раздел «Дизайн»). · Push-подписки: автоматическая дедупликация устройств — при переподписке с того же устройства старая подписка заменяется. · Preloader: параметры `preloader_mode`, `preloader_compact`, `preloader_show_text` перенесены в таблицу `settings`. · Per-user параметры `ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text` больше не используются (колонки сохранены для совместимости).
Релиз v5.5.0
Защита от брутфорса: ограничение попыток входа (5 за 15 мин) с автоматической блокировкой по IP+логину. · Минимальная длина пароля — 8 символов (регистрация, смена пароля, создание пользователя). · Security headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS. · .htaccess deny для директорий `app/` и `storage/` — прямой доступ запрещён.
Релиз v5.6.0
Редактирование профиля: страница переверстана на CSS Grid — блоки «Смена пароля» и «Уведомления» теперь в боковой колонке справа (1fr + 380px). · Политики: галочки для admin и admin_tester разблокированы при редактировании global_admin. · Новые функции: `user_role_rank()`, `user_can_see_password()`, `user_get_password_hint()`, `domain_get_by_code()`, `domain_generate_short_code()`, `domain_regen_code()`. · `domain_create()` генерирует уникальный 3-char код вместо slug-транслитерации.
Релиз v5.7.0
Дашборд: полностью переработанная панель с KPI-виджетами — пользователи, сообщения, файлы, контент, звонки, аудит. · Дашборд: лента последних действий (10 записей) с иконками по типу операции и карточка «Новые пользователи». · Новая функция `dashboard_stats()` в `app/health.php` — агрегированная статистика из 15+ таблиц за один вызов. · Настройки дашборда: `dashboard_widgets_json`, `dashboard_refresh_interval`, `dashboard_show_activity`, `dashboard_compact` в `settings_defaults()`.
Релиз v5.8.0
Настройки: иконки Bootstrap Icons у каждого пункта сайдбара (палитра, щит, шестерёнка, телефон, БД и др.) во цветных плашках. · Настройки: быстрый поиск по всем разделам — поле с debounce-фильтрацией, счётчик совпадений, горячая клавиша Ctrl+K. · CSS: новые классы `.admin-settings-search`, `.admin-settings-side-icon`, `.admin-settings-section-hdr`, `.js-dirty-badge`, `.admin-settings-kbd-hint`. · CSS: анимация `settingsFadeIn` (opacity + translateY), `savebarPulse` для индикации dirty-state.
Релиз v5.8.1
Удаление пользователей: исправлен баг — удалённые пользователи теперь скрываются из основного списка, кнопка «Показать удалённых» для просмотра. · Удаление пользователей: бейдж «удалён» и кнопка «Восстановить» в карточке пользователя. · `users_accounts_with_profiles()` принимает параметр `$includeDeleted` — по умолчанию скрывает `is_deleted=1`. · Новая функция `user_restore()` для восстановления soft-deleted пользователей.
Релиз v5.8.2
Полное удаление аккаунта: администратор может безвозвратно удалить пользователя и все его данные (сообщения, файлы, посты, профили). · Полное удаление аккаунта: кнопка «Полное удаление» в панели управления пользователями с усиленным подтверждением. · Новая функция `user_delete_hard()` — полная очистка всех данных пользователя из 31+ таблиц и файловой системы (аватары, обложки, загруженные файлы). · Ручная очистка таблиц без FK CASCADE: `domain_members`, `short_links`, `boards`, `rtc_*` таблицы; nullify `created_by_user_id` в `domains` / `domain_bridges`.
Релиз v5.8.3
База данных: новая опция «Подключиться без миграции» — позволяет переключить конфиг на существующую БД с данными без переноса и без удаления данных. · Предотвращает потерю данных при повторном подключении к MySQL после обновления сайта (когда конфиг сбрасывается на SQLite). · Параметр `skip_migration` в admin_db POST-обработчике: проверяет подключение, запускает `ensure_schema()` (CREATE IF NOT EXISTS + инкрементальные миграции) и `ensure_mysql_utf8mb4()`, но НЕ вызывает `migrate_database()` / `db_truncate()`. · Разрешена отправка формы при `target === current` в режиме reconnect (для переподключения к той же БД).
Релиз v5.8.4
Доменная изоляция: администратор домена теперь видит в разделе «Пользователи» только пользователей своего домена, а не всех. · Новая политика «Мосты для доменных администраторов» (Настройки → Доступ): не видеть / только просмотр / полный доступ к пользователям мостовых доменов. · `users_accounts_with_profiles()` принимает `?array $filterDomainIds` — SQL фильтрует `domain_id IN (…)`. · Новые хелперы: `is_root_domain_admin()`, `admin_bridged_domain_ids()`, `admin_visible_domain_ids()`, `admin_can_manage_user()`, `admin_can_view_user()`.
Релиз v5.8.5
Дашборд: статистика фильтруется по домену — администратор домена видит метрики только своего домена, а не всего сервиса. · Политики: доменные политики (мосты, корневой админ, домен по умолчанию) перенесены из Настроек на страницу «Политики» для единообразного управления. · Новая функция `dashboard_stats_for_domains(array $domainIds)` в `app/health.php` — статистика, ограниченная набором доменов. · `views/dashboard.php` использует `admin_visible_domain_ids()` для выбора `dashboard_stats()` или `dashboard_stats_for_domains()`.
Релиз v5.8.6
Мессенджер: полная переработка интерфейса в стиле Telegram — боковой список диалогов, панель переписки, адаптивная мобильная раскладка. · Мессенджер: голосовые сообщения, эмодзи-пикер, вложения файлов из облака и устройства. · views/chat.php: 6589 → 2410 строк (−63%), IIFE-архитектура с 23 секциями, 98 функций, 51 слушателей событий. · views/profile.php: 2338 → 1247 строк (−47%), CSS-переменные через .pf-* namespace, Bootstrap 5.3.3 интеграция.
Релиз v5.8.7
Исправлена ошибка FK-ограничения при переключении с SQLite на MySQL: таблица news больше не требует существующего пользователя для системных записей. · news: author_user_id изменён с INT NOT NULL на INT NULL DEFAULT NULL; FK-ограничение fk_news_user удалено. · Миграция Stage 10.21: DROP FOREIGN KEY, MODIFY COLUMN, UPDATE author_user_id = 0 → NULL для существующих MySQL-установок.
Релиз v5.8.8
Исправлена ошибка «Incorrect string value» при переключении на MySQL: эмодзи в новостях и чейнджлоге теперь корректно сохраняются. · ensure_mysql_utf8mb4() вызывается ДО ensure_schema() — SET NAMES utf8mb4 теперь действует до любых INSERT. · Список таблиц в ensure_mysql_utf8mb4 расширен с 21 до 39 (добавлены domains, boards, push_*, short_links, profile_media_items и др.).
Релиз v5.8.9
Профиль: исправлено отображение аватара и обложки (неверное имя поля avatar_file_id → avatar_path). · Мессенджер: сообщения теперь отображаются в цветных облачках (свои — акцентные, чужие — серые). · profile.php: avatar_file_id → avatar_path, cover_file_id → cover_path (6 мест). · chat.php: добавлены CSS-классы msg-own / msg-other на элементы сообщений (PHP + JS).
Релиз v5.8.10
Мессенджер: окно чата теперь корректно помещается в экран на любом устройстве (ПК и мобильные). · layout.php: content-canvas-mode → flex column с height:100dvh для корректного заполнения viewport. · chat.php: messenger-shell заменён calc(100dvh-140px) на flex:1 + min-height:0 — автоматическое заполнение оставшегося пространства.
Релиз v5.8.11
Профиль: кнопка «Написать» теперь открывает диалог с пользователем, а не пустой мессенджер. · Мессенджер: заголовок «Мессенджер» скрывается когда активен диалог (и на ПК, и на мобильных) — больше места для сообщений. · profile.php: ссылка «Написать» peer= → user_id= (матчит параметр в chat_start роуте). · chat.php: .chat-page-head скрывается на всех брейкпоинтах когда есть активный чат (display:none!important).
Релиз v5.8.12
Мессенджер: заголовок скрыт на мобильных — диалоги занимают весь экран. · Мессенджер: кнопка действий (⋯) теперь внутри облачка сообщения, а не за его пределами. · chat.php: .chat-page-head display:none!important на @media ≤991.98px (скрыт всегда на мобильных). · chat.php: .msg-actions-btn перенесён внутрь bubble (top:.25rem right:.25rem вместо left/right:-.8rem).
Релиз v5.8.13
Мессенджер: панель ввода теперь всегда видна на экране, страница не прокручивается. · layout.php: html/body/app-shell получают height:100dvh + overflow:hidden через :has(.content-canvas-mode). · layout.php: sidebar ограничен 100dvh с overflow-y:auto в canvas-режиме.
Релиз v5.8.14
Мессенджер: исправлены read receipts — отметка «прочитано» снова обновляется без перезагрузки страницы. · Мессенджер: исправлен экран звонка — окно звонка теперь корректно открывается и закрывается. · index.php: добавлен JSON endpoint `chat_mark_read` (CSRF + проверка участника диалога). · index.php: добавлен route `chat_file` для `admin_chat_view` с проверкой прав `admin/users`.
Релиз v5.8.15
Мессенджер: панель ввода закреплена внизу экрана на ПК и мобильных, без провала по высоте. · Мессенджер: кнопки отправки/микрофона снова работают по ожидаемой логике (пусто — микрофон, есть текст — отправка). · views/chat.php: выровнена мобильная/desktop вёрстка compose-зоны, исправлены conditionals рендера send/mic. · views/chat.php: интегрирован Picmo (`public/vendor/picmo/*`) вместо тяжёлого рантайма старого picker.
Релиз v5.8.16
Звонки в мессенджере: исправлен сценарий «Связь: ожидание» без подключения — звонки снова устанавливаются. · Мессенджер на телефоне: устранён правый зазор, чат и зона ввода снова растягиваются на всю ширину экрана. · index.php: call/rtc роуты добавлены в whitelist messenger-mode (`call_start/call_poll/call_signal_send/...`) — больше нет редиректа в HTML для JSON API. · app/chat.php: `call_is_participant()` получил fallback на `caller/callee` для legacy/частично мигрированных записей `rtc_call_members`.
Релиз v5.8.17
Мобильный чат: устранён нижний «подбородок» и восстановлена корректная полноэкранная геометрия в mobile/PWA. · Мессенджер: новые сообщения снова появляются строго снизу, история подгружается только вверх. · views/chat.php: mobile fullscreen переведён на единый safe-area (компенсация только в composer), `body.chat-mobile-fullscreen` больше не дублирует нижний inset. · views/chat.php: `chatJumpBottom` вынесен из потока сообщений; `appendMessages()` всегда добавляет в конец, `prependMessages()` — только в начало.
Релиз v5.8.18
Обновления больше не переключают рабочий сайт с MySQL на SQLite после распаковки релиза. · Первичный запуск корректно открывает установщик, если реальная конфигурация БД отсутствует. · scripts/make-release.ps1: исключено принудительное добавление `storage/config.php` в релиз (опционально только через `-IncludeRuntimeConfig`). · app/core.php: `is_installed()` переведён на валидацию конфигурации (`mysql` поля / наличие sqlite-файла), а не на простой факт существования `storage/config.php`.
Управление жизненным циклом комнат звонков
- Создатель может завершать комнату звонка. - Админ может закрывать и удалять публичные комнаты.Читать полностью
- Создатель может завершать комнату звонка.
- Админ может закрывать и удалять публичные комнаты.
Оптимизация старта интерфейса
- Перенесены второстепенные polling-задачи в idle-фазу. - Снижен пиковый отклик главного потока при открытии страниц.Читать полностью
- Перенесены второстепенные polling-задачи в idle-фазу.
- Снижен пиковый отклик главного потока при открытии страниц.
Hotfix 2.3.9: стабилизация текста
- Проведена чистка поврежденных строк интерфейса. - Обновлены сообщения и статусы в основных маршрутах.Читать полностью
- Проведена чистка поврежденных строк интерфейса.
- Обновлены сообщения и статусы в основных маршрутах.
Hotfix 2.3.10: исправление кодировки
- Удалены поврежденные текстовые строки из ключевых экранов. - Исправлены уведомления профиля, чатов и панели. - Подготовлена база для финальной стабилизации.Читать полностью
- Удалены поврежденные текстовые строки из ключевых экранов.
- Исправлены уведомления профиля, чатов и панели.
- Подготовлена база для финальной стабилизации.
Hotfix 2.3.11: полная правка кодировки
- Восстановлен index.php из стабильной базы без поврежденных строк. - Исправлены системные сообщения и заголовки в маршрутах и админ-разделах. - Очищены тексты новостей: теперь только нормальная кириллица.Читать полностью
- Восстановлен index.php из стабильной базы без поврежденных строк.
- Исправлены системные сообщения и заголовки в маршрутах и админ-разделах.
- Очищены тексты новостей: теперь только нормальная кириллица.
Hotfix 2.3.12: исправлен экран звонка по ссылке
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room. - Исправлены поврежденные символы в views/call_room.php и views/admin.php. - Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.Читать полностью
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room.
- Исправлены поврежденные символы в views/call_room.php и views/admin.php.
- Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.
Policy 2.3.13: UTF-8 без BOM всегда
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM. - Добавлен .editorconfig с фиксированным charset=utf-8. - В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.Читать полностью
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM.
- Добавлен .editorconfig с фиксированным charset=utf-8.
- В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.
Call Quality 2.3.14: стабильнее звук и соединение
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках. - Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate. - Включено автоматическое ICE-переподключение при `d…Читать полностью
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках.
- Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate.
- Включено автоматическое ICE-переподключение при `disconnected/failed`, чтобы звонок не обрывался на смене сети.
Call Stability 2.3.15: быстрый отклик без «убийства» сервера
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов. - Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий. - Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.Читать полностью
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов.
- Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий.
- Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.
Admin DB Tools 2.3.16: импорт/экспорт БД и безопасная очистка
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта. - Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads. - Импорт выполн…Читать полностью
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта.
- Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads.
- Импорт выполняется с полной заменой данных таблиц приложения; перед импортом рекомендуется сделать экспорт БД и копию папки storage/.
Hotfix 2.3.17: emoji снова отправляются в мессенджере (MySQL utf8mb4)
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях. - Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`). - Добавлена автоматическая проверка и конвертация старых таблиц в ut…Читать полностью
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях.
- Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`).
- Добавлена автоматическая проверка и конвертация старых таблиц в utf8mb4 при запуске сайта (только при необходимости, без постоянных ALTER).
Admin DB 2.3.18: диагностика utf8mb4 / emoji для MySQL
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji. - Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть). - Это диагностический ре…Читать полностью
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji.
- Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть).
- Это диагностический режим (только чтение метаданных), чтобы быстро проверять состояние после миграций и импортов.
Messenger Emoji 2.3.19: полноценный picker + недавние + клоун 🤡
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление. - Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме). - В быстрый набор добавлен клоун 🤡; вы…Читать полностью
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление.
- Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме).
- В быстрый набор добавлен клоун 🤡; выбранные emoji сохраняются в недавние (localStorage).
Messenger Hotfix 2.3.20: сообщения видны сразу в открытом чате
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог. - Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы. …Читать полностью
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог.
- Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы.
- Если пользователь находится внизу чата, новые сообщения автоматически прокручиваются в видимую область.
Messenger Hotfix 2.3.21: список диалогов обновляется без перезахода
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата. - Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся…Читать полностью
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата.
- Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся данных.
- В открытом чате после прихода нового сообщения автоматически ускоряется обновление списка диалогов для быстрого показа превью и бейджей.
Messenger UI 2.3.22: PWA-интерфейс ближе к Telegram/WhatsApp
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается. - Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и комп…Читать полностью
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается.
- Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и компактнее на телефоне.
- UI-рефактор выполнен без изменения рабочих API сообщений и звонков, чтобы не ломать стабильность проекта.
Hotfix 2.3.23: стабильная авторизация (PWA/мобильные сессии)
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт. - Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS). - Добавлено скользящее продление session cook…Читать полностью
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт.
- Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS).
- Добавлено скользящее продление session cookie и project-local хранение сессий (storage/sessions), чтобы уменьшить влияние server-wide очистки сессий.
Messenger UX 2.3.24: фиксированная форма + lazy history x10 + glass mobile
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа. - История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а н…Читать полностью
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа.
- История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а новые сообщения подгружаются вниз компактными пачками.
- На мобильном/PWA экране восстановлен стеклянный визуальный стиль мессенджера (glass-эффект).
Messenger Hotfix 2.3.25: последние сообщения + форма ввода видны сразу
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт. - Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна…Читать полностью
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт.
- Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна в окне чата.
- Дополнительно стабилизирован glass-вид мессенджера на телефоне/PWA после UI-рефакторинга.
Notifications Center 2.3.26: быстрые настройки + проверка доставки + mobile chat keyboard fix
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA. - Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Se…Читать полностью
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA.
- Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Service Worker + fallback на Notification API).
- В мессенджере на мобильных исправлен лишний отступ между клавиатурой и полем ввода: окно чата теперь синхронизируется с VisualViewport, поле ввода ведёт себя стабильнее.
Profile & Social 2.3.27: about-страница, лайки постов, загрузка файлов с устройства
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото). - В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников…Читать полностью
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото).
- В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников с устройства.
- В постах профиля добавлены лайки и кнопка «Ссылка на пост».
- Убраны дефолтные кнопки «Скачать/Магнит» под вложениями в ленте постов; ссылки на файлы показываются только если владелец явно разрешил скачивание.
- При создании и редактировании постов теперь можно прикреплять файлы напрямую с устройства, а не только выбирать из облака.
Hotfix 2.3.28: кириллица в центре уведомлений
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений. - Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).Читать полностью
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений.
- Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).
Hotfix 2.3.29: полная зачистка кракозябр в index.php + усиленный encoding-check
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`. - Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и уст…Читать полностью
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`.
- Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и устранён.
- Усилен `scripts/check-encoding.ps1`: поиск кракозябр теперь работает по кодовым точкам (`U+00C2/U+00C3/U+00D0/U+00D1`), чтобы такие случаи не проходили в релиз.
TSOY.CLOUD 3.0: большой апдейт профилей и мультипрофилей
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону. - `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользова…Читать полностью
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону.
- `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользователь сам решает, что показать в профиле.
- Полностью обновлён UX мультипрофилей в шапке: понятный dropdown с быстрым переключением и новая модалка управления профилями аккаунта (аватары, статусы, действия, выбор профиля для `/about`).
- Сохранена вся текущая логика проекта (посты, друзья, роли, about, мультипрофили), изменения сосредоточены на удобстве и визуале.
TSOY.CLOUD 3.1.0: новый конструктор страниц + единый файловый проводник для выбора медиа
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок. - Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через…Читать полностью
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок.
- Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через единый проводник файлов (папки, поиск, фильтры по типам).
- Раздел «Медиа» в профиле также переведён на тот же проводник для ручного наполнения галерей фото/видео/аудио.
- Подготовлена база для дальнейшего переиспользования этого picker-компонента в других разделах проекта.
TSOY.CLOUD 3.2.0: большой PWA-апдейт (уведомления, офлайн-кеш, desktop/mobile режим)
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile). - Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-увед…Читать полностью
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile).
- Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-уведомления без Service Worker.
- Файловый офлайн-кеш стал удобнее: кнопки офлайн-режима показывают актуальный статус уже закешированных файлов, подготовлен runtime API для управления кешем.
- Service Worker синхронизирован и усилен для PWA-сценариев (deep-link notificationclick, безопасная обработка Range-запросов для медиа).
TSOY.CLOUD 3.3.0: единая система оформления + компактный мессенджер
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными. - В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельна…Читать полностью
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными.
- В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельная плотность мессенджера.
- Мессенджер получил более компактные облака сообщений (в том числе Telegram-like режим) без вмешательства в мобильную геометрию поля ввода и клавиатуры.
- Дизайн-ручки реализованы через общие UI-токены и остаются совместимыми с PWA-режимом.
TSOY.CLOUD 3.3.1: мессенджер (единый проводник вложений + fix меню сообщений) и улучшенная связка с “Оформлением”
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX. - Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не пр…Читать полностью
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX.
- Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не прячется под соседними сообщениями.
- Настройки `Оформление` сильнее связаны с мессенджером: ширина контента работает в canvas-режиме, а плотность/контраст теперь заметно влияют на чат.
- Геометрия composer/клавиатуры в чате не менялась, чтобы не вернуть баг с “подбородком” на iPhone.
TSOY.CLOUD 3.3.2: центр уведомлений — сначала уведомления, потом настройки
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений. - Обновлён заголовок верхнего блока для более понятной логики экрана.Читать полностью
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений.
- Обновлён заголовок верхнего блока для более понятной логики экрана.
TSOY.CLOUD 3.3.3: контакты и мессенджер теперь в одном визуальном стиле
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек. - Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессендже…Читать полностью
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек.
- Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессенджер.
TSOY.CLOUD 3.3.4: единый проводник в профиле и нормальное админ-хранилище с папками
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов. - В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/П…Читать полностью
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов.
- В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/ПК работали стабильнее.
- Админский экран `/index.php?r=admin` переименован в «Хранилище проекта» и получил папочную структуру с фильтрами по владельцу и папке.
TSOY.CLOUD 3.3.5: профиль (двойные проводники/лишние кнопки) и mobile-fix клипсы в мессенджере
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник. - Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена». - Копирование ссылок на…Читать полностью
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник.
- Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена».
- Копирование ссылок на профиль и пост переведено на фоновый toast «Скопировано» вместо модального alert.
- В мессенджере клипса (`📎`) теперь открывается через явный JS fallback для mobile/iPhone сценариев.
TSOY.CLOUD 3.3.6: в конструкторе страниц появился блок «Таблица»
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц. - Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы. - Есть переключатель «первая строка — заголовки» для красивого отображен…Читать полностью
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц.
- Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы.
- Есть переключатель «первая строка — заголовки» для красивого отображения таблицы на публичной странице.
TSOY.CLOUD 3.4.0: полноценный Web Push (закрытый PWA/сайт) + индикатор качества звонков
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт. - Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Work…Читать полностью
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт.
- Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Worker, а доставка идёт через серверную очередь событий.
- В аудиозвонках добавлен индикатор качества связи (RTT, джиттер, потери, битрейт) с понятным статусом (`отлично / хорошо / средне / с помехами / переподключение`).
- Улучшена стабильность звонков: при проблемах соединения клиент выполняет мягкое переподключение и показывает актуальный статус связи.
TSOY.CLOUD 3.4.1: mobile fix мессенджера (вложения) и центрирование меню профиля
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата. - Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстк…Читать полностью
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата.
- Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстке чата.
- Меню профиля/переключения мультипрофилей в мобильной шапке теперь центрируется по экрану и больше не уезжает влево.
TSOY.CLOUD 3.4.2: hotfix навигации по уведомлениям (deep-link в источник)
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.). - Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относи…Читать полностью
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.).
- Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относительно пути приложения / service worker scope).
TSOY.CLOUD 3.4.3: информативные уведомления (сообщения + действия для звонка)
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог. - Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлен…Читать полностью
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог.
- Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлениях).
- Улучшены payload-данные push-уведомлений для более точной навигации и действий из PWA/Service Worker.
TSOY.CLOUD 3.4.4: настройки уведомлений в дашборде + улучшенный PWA update flow
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка. - Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос p…Читать полностью
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка.
- Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос persistent storage и toast-уведомления об обновлении.
- PWA runtime доработан: регистрация SW учитывает путь приложения, обновления можно проверять/применять через runtime API, а входящие звонки в открытом приложении используют настраиваемый рингтон.
TSOY.CLOUD 3.4.5: свои рингтоны уведомлений и звонка
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка. - Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу. -…Читать полностью
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка.
- Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу.
- Runtime уведомлений использует кастомные файлы в открытом приложении/PWA (с fallback на встроенные звуки, если браузер блокирует воспроизведение).
TSOY.CLOUD 3.5.0: stability-сборка (cleanup, техдолг, аккуратные оптимизации)
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода. - Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только…Читать полностью
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода.
- Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только внутри `public/sounds` и лимит размера загрузки (5 MB).
- Сборочные проверки стали чище и быстрее: `check-encoding.ps1` теперь игнорирует временные каталоги `tmp_*`, чтобы случайные backup-папки не шумели в чекапе.
TSOY.CLOUD 3.5.1: hotfix рингтонов на телефонах
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук. - Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложе…Читать полностью
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук.
- Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложения, поэтому работают корректнее в PWA/подпапках сайта.
- Добавлен `audio unlock` по первому взаимодействию пользователя для лучшей совместимости с мобильными autoplay-ограничениями браузеров.
TSOY.CLOUD 3.5.2: notifications reliability phase 1 (retry worker + диагностика)
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок. - В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные …Читать полностью
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок.
- В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные подписки, подписки с ошибками и состояния `dispatch_state`.
- Добавлен ручной запуск push worker из админки и CLI-скрипт `scripts/push-worker.php` для cron/daemon (`php scripts/push-worker.php --loop`).
TSOY.CLOUD 3.5.3: notifications reliability phase 2 (Web Push payload + fallback)
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт. - Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддержив…Читать полностью
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт.
- Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддерживается endpoint’ом/браузером или произошла ошибка шифрования.
- Service Worker стал устойчивее к payload-парсингу: сначала `json()`, затем `text()+JSON.parse()`, и только потом fallback на серверную очередь.
TSOY.CLOUD 3.5.4: диагностика push-устройств в админке + тест push по подписке
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки. - Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления н…Читать полностью
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки.
- Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления на конкретное устройство прямо из админки.
- Тестовая отправка использует payload Web Push с fallback на wake-push и обновляет статус подписки (`last_seen_at` / `last_error`) для быстрой диагностики.
TSOY.CLOUD 3.5.5: фильтры и управление push-подписками в админке
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`. - Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице. - Управление подп…Читать полностью
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`.
- Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице.
- Управление подписками выполняется отдельным admin-route с CSRF-проверкой, без конфликта с общей формой сохранения настроек.
TSOY.CLOUD 3.5.6: бренд уведомлений из настроек + статус последнего push-теста
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`. - В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки. - Тест push…Читать полностью
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`.
- В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки.
- Тест push по подписке теперь сохраняет результат в БД (`last_test_*`), чтобы было видно, где payload работает, а где происходит fallback.
TSOY.CLOUD 3.5.7: статистика реальной доставки push + бренд уведомлений из настроек
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). - Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по …Читать полностью
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса).
- Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по конкретной подписке.
- Заголовок уведомлений теперь подтягивается из настроек сайта (брендинг), а не остаётся захардкоженным `TSOY.CLOUD`.
TSOY.CLOUD 3.5.8: hotfix названия уведомлений (бренд из настроек)
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`. - Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`. - Серверные push-уведомления и клиентск…Читать полностью
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`.
- Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`.
- Серверные push-уведомления и клиентские fallback-уведомления приведены к одному правилу брендинга.
TSOY.CLOUD 3.5.10: сводка + мини-график доставки push (payload/fallback/error)
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток. - Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём п…Читать полностью
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток.
- Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём попыток за день.
- Для истории графика добавлена серверная дневная статистика доставок (`push_delivery_daily_stats`), которая заполняется при реальных отправках push.
TSOY.CLOUD 3.5.11: админ-настройки разбиты на понятные разделы
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам. - Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, зво…Читать полностью
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам.
- Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, звонки и диагностика`), чтобы не искать нужный блок в длинной ленте карточек.
- Навигация по секциям адаптирована для мобильных устройств: список разделов прокручивается горизонтально и остаётся удобным на узких экранах.
TSOY.CLOUD 3.5.12: hotfix навигации по разделам настроек
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта. - Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.Читать полностью
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта.
- Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.
TSOY.CLOUD 3.5.13: Android-style настройки (меню слева, раздел справа)
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел. - Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком. - Добавлена сов…Читать полностью
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел.
- Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком.
- Добавлена совместимость с hash-переходами (`#pwa-notify-admin`): при открытии ссылки автоматически показывается нужный раздел настроек.
TSOY.CLOUD 3.5.14: выбор часового пояса по Гринвичу в настройках системы
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями. - Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода. - Пол…Читать полностью
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями.
- Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода.
- Поле ручного ввода IANA-зоны сохранено для точной настройки региональных зон и нестандартных сценариев.
TSOY.CLOUD 3.5.15: role-aware настройки для всех + Android-style меню разделов
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin). - Настройки переведены в Android-style режим: слева список разделов, справа выбранны…Читать полностью
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin).
- Настройки переведены в Android-style режим: слева список разделов, справа выбранный раздел; в `PWA и push` добавлен второй уровень (`Обновления`, `Очередь push`, `Устройства`).
- `admin_tester` теперь видит все админ-настройки, но может сохранять только пользовательские (тема/уведомления); админские секции остаются read-only.
- Исправлена проверка доступа к пользовательскому облаку: маршрут `Мои файлы` теперь использует capability `cloud` (отдельно от staff-дэшборда).
TSOY.CLOUD 3.5.16: админ-настройки разнесены по отдельным страницам
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню. - Переходы в меню теперь открывают соответствующ…Читать полностью
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню.
- Переходы в меню теперь открывают соответствующие settings-route (`settings_admin_*`), а не работают только как внутренний переключатель секций в одном URL.
- Внутри длинных разделов (например `PWA и push`) сохранён второй уровень навигации: `Обновления`, `Очередь push`, `Устройства`.
TSOY.CLOUD 3.5.17: hotfix вёрстки страницы настроек (desktop/mobile)
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки. - Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конф…Читать полностью
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки.
- Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конфликт с Bootstrap `col-lg-6` в секционном режиме).
- На мобильных пересобрана вёрстка меню/подменю и нижней панели сохранения: убран уезд вправо и горизонтальный overflow.
TSOY.CLOUD 3.5.18: hotfix блока БД и нижней панели сохранения в настройках
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока. - Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме. - Испр…Читать полностью
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока.
- Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме.
- Исправление сделано без изменения логики сохранения и маршрутов настроек.
TSOY.CLOUD 3.6.0: начало рефакторинга связки Профиль / Контакты / Мессенджер
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана. - Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление св…Читать полностью
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана.
- Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление связями, `Мессенджер` = диалоги/вложения/звонки.
- Визуально унифицированы верхние панели и поверхности через общий reusable partial `views/partials/social_suite.php` без вмешательства в сложную mobile-геометрию чата.
TSOY.CLOUD 3.6.1: следующий шаг по связке Контакты/Мессенджер + UX-фиксы настроек
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`. - В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка боль…Читать полностью
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`.
- В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка больше не "подпрыгивает" вверх).
- Уточнена логика названий в настройках: `Внешний вид профиля` (личное) и `Внешний вид сайта` (глобальный дизайн) вместо размытых `Внешний вид` / `Оформление`.
TSOY.CLOUD 3.6.2: убран лишний Social Hub, мессенджер закреплён за диалогами
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее. - В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через …Читать полностью
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее.
- В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через `Контакты` (кнопка `Открыть контакты`).
- В настройках подправлены UX-мелочи: выровнен блок `База данных` и уточнены названия дизайн-разделов (`Внешний вид профиля` / `Внешний вид сайта`).
TSOY.CLOUD 3.6.3: контакты = старт общения, мессенджер = только диалоги
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`. - `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат. - Переходы через `chat_start` теперь ко…Читать полностью
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`.
- `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат.
- Переходы через `chat_start` теперь корректно прокидывают `call=1`, поэтому звонок можно запускать напрямую из `Контактов`.
TSOY.CLOUD 3.6.4: визуальный полиш мессенджера (в стиле Контактов) без риска вернуть подбородок
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`. - Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога. - Из…Читать полностью
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`.
- Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога.
- Изменения выполнены только на уровне визуального CSS-слоя: mobile keyboard-layout логика чата не трогалась, чтобы не вернуть iPhone-баг с `подбородком`.
TSOY.CLOUD 3.6.5: второй полиш-проход мессенджера (диалоги, шапка, composer, плотность)
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными. - В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало поле…Читать полностью
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными.
- В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало полезным (с прямым переходом в `Контакты`).
- Плотность мессенджера (`telegram/compact/roomy`) теперь заметнее влияет на список диалогов, шапку и кнопки, а не только на bubble. Keyboard-layout логика не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.6: hotfix iPhone/PWA бренда уведомлений (строка from ...)
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`. - Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под бренди…Читать полностью
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`.
- Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под брендинг проекта.
- PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с тем же брендом, что используется в уведомлениях.
TSOY.CLOUD 3.6.7: hotfix mobile-overflow окна Диалоги в мессенджере
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport. - Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата). - Фикс сделан только…Читать полностью
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport.
- Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата).
- Фикс сделан только на уровне CSS ширин/отступов; keyboard/fullscreen логика мессенджера не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.8: ускорена отправка сообщений в мессенджере (без паузы от push)
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`). - Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату. - Теперь сообщение сохраняется…Читать полностью
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`).
- Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату.
- Теперь сообщение сохраняется и ответ в чат уходит сразу, а push ставится в очередь и отправляется после завершения ответа (best-effort), что делает интерфейс заметно быстрее и плавнее.
TSOY.CLOUD 3.6.9: фундамент для больших чатов (миллионы сообщений) без нагрузки на сервер
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса. - Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unr…Читать полностью
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса.
- Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unread по каждому диалогу на каждом обновлении.
- Добавлены индексы под большие переписки (`messages(conversation_id,id)`, visible/unread индексы, индексы диалогов по пользователю и `last_message_at`).
- Для апгрейдов сохранён fallback: если денормализованные счётчики ещё не заполнены, система временно использует старый расчёт unread и постепенно синхронизирует данные.
TSOY.CLOUD 3.6.10: иконки действий в Контактах (конверт/трубка/корзина)
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина. - Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`. - Сохранены `title` и `ar…Читать полностью
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина.
- Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`.
- Сохранены `title` и `aria-label`, чтобы смысл кнопок не терялся на ПК и мобильных устройствах.
TSOY.CLOUD 3.6.11: доведён UI действий в Контактах (+ строка Каталог/Найти)
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле. - Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну стро…Читать полностью
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле.
- Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну строку, а поле поиска вынесено отдельно ниже на полную ширину.
- Логика контактов и поиска не менялась: обновление только визуальное/UX.
TSOY.CLOUD 3.6.12: системные файлы вынесены в отдельную папку public/system
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`. - Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешён…Читать полностью
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`.
- Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешённых системных директорий и переиспользуемая логика для будущих системных ассетов.
- Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически переносятся в новую системную структуру при запуске приложения (best-effort, без поломки ссылок если перенос не удался).
TSOY.CLOUD 3.6.13: единый раздел «Внешний вид», готовые профили оформления и кириллические шрифты
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). - Для глобального оформления сайта добавлены готовые профили внешн…Читать полностью
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений).
- Для глобального оформления сайта добавлены готовые профили внешнего вида (чистый, рабочий, чтение, мягкий, ночной, psychedelic): профиль подставляет значения в поля и их можно донастроить вручную.
- Шрифтовые пресеты обновлены с упором на кириллицу: Manrope, PT Sans, Rubik и новый IBM Plex Sans (`plex`) подключены как глобальные варианты для интерфейса.
TSOY.CLOUD 3.6.14: UX-фикс профиля (кнопка «Написать» и удаление вложений)
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля. - У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста. - Исправле…Читать полностью
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля.
- У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста.
- Исправление делает интерфейс профиля логичнее и чище без изменения логики постов/комментариев.
TSOY.CLOUD 3.6.15: персональные режимы меню и публичного профиля для гостей
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. - Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрыв…Читать полностью
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`.
- Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрывать только меню, или скрывать меню и шапку сайта.
- Эти параметры сохраняются у каждого профиля-пользователя отдельно и влияют только на его собственный интерфейс/публичную страницу.
TSOY.CLOUD 3.6.16: контекстное меню сообщений (ПК/мобилка) + цитаты и реакции
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`. - Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным на…Читать полностью
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`.
- Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным нажатием.
- Реализация встроена в существующий dropdown сообщений и не затрагивает чувствительную mobile-геометрию composer (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.17: галочки прочтения сообщений в мессенджере
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет. - Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы. - Изменение не затрагивает мобильную гео…Читать полностью
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет.
- Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы.
- Изменение не затрагивает мобильную геометрию поля ввода и не должно вернуть баг с `подбородком`.
TSOY.CLOUD 3.6.18: «будильник» по сообщению в контекстном меню мессенджера
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению. - Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочит…Читать полностью
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению.
- Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочитано`).
- Уведомление отправляется отдельным push-типом `chat_nudge`, не затрагивая геометрию чата и без риска вернуть `подбородок`.
TSOY.CLOUD 3.6.19: старт голосовых сообщений в мессенджере (красный интерфейс записи)
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения. - Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение. - Аудио-вложения (в том числе голосо…Читать полностью
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения.
- Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение.
- Аудио-вложения (в том числе голосовые) теперь воспроизводятся прямо в сообщении через встроенный плеер, без отдельного скачивания.
TSOY.CLOUD 3.6.20: preloader загрузки сайта и отдельный статус установки PWA
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании. - Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показыва…Читать полностью
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании.
- Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показывается при установке через системную кнопку).
- Тот же слой используется в установщике сайта (`install.php`) при отправке формы, поэтому установка/переходы теперь воспринимаются как единый понятный flow.
TSOY.CLOUD 3.6.21: плавное переключение секций настроек + фиксы длинных имён в Контактах/Мессенджере
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера. - В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / тру…Читать полностью
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера.
- В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / трубка / корзина / человек+`): кнопки зафиксированы справа, текст ужимается внутри своей зоны.
- В шапке активного диалога `Мессенджера` кнопки действий справа закреплены в одну линию, а длинное имя собеседника аккуратно сокращается без поломки layout.
TSOY.CLOUD 3.6.22: hotfix preloader (без ступора на чатах и секциях настроек)
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`. - Preloader оставлен только для действительно длинных/понятных сценариев: первич…Читать полностью
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`.
- Preloader оставлен только для действительно длинных/понятных сценариев: первичная загрузка страницы, установка сайта (`install.php`) и установка PWA.
- Это уменьшает риск зависшего overlay и делает интерфейс заметно отзывчивее при обычной работе.
TSOY.CLOUD 3.6.23: hold-to-record голосовые + компактное предпрослушивание и прогресс установки
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению. - После записи голосового в composer появляется компактное предпрослушивание (мини-пле…Читать полностью
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению.
- После записи голосового в composer появляется компактное предпрослушивание (мини-плеер), а аудио-плееры в сообщениях стали компактнее и лучше подходят для узких экранов.
- В `Профиле` улучшено поведение длинных текстов в карточках друзей/страниц и в постах (текст больше не ломает layout), а в `install.php` добавлена мини-анимация этапов установки (БД / миграции / админ / готово).
TSOY.CLOUD 3.6.24: hotfix preloader на Профиле и в Мессенджере
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа. - Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы на…Читать полностью
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа.
- Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы начинают ощущаться живыми заметно раньше.
- `load/pageshow` оставлены только как страховка, плюс добавлен fail-safe таймер от зависшего overlay.
TSOY.CLOUD 3.6.25: hotfix отображения голосовых сообщений (плеер вместо файла)
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл. - Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла…Читать полностью
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл.
- Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла, даже если у файла в БД был сохранён неидеальный MIME-тип.
- Для новых записей добавлена нормализация MIME при загрузке, чтобы голосовые сразу сохранялись как audio и корректно рендерились во всех местах.
TSOY.CLOUD 3.6.26: компактная лента недавних файлов на главной
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов. - По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3). - Использован …Читать полностью
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов.
- По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3).
- Использован тот же механизм `load more`, что и в новостях/техрелизах, без отдельного нового JS.
TSOY.CLOUD 3.6.27: голосовые сообщения в одну компактную строку
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла. - Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения. - Фикс работает и в первичном ре…Читать полностью
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла.
- Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения.
- Фикс работает и в первичном рендере чата, и при обновлении сообщений через polling.
TSOY.CLOUD 3.6.28: tap-to-record для голосовых (второй тап — отправка)
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение. - Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно …Читать полностью
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение.
- Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно отправить обычной кнопкой.
- Геометрия мобильного composer не изменялась (фиксы против `подбородка` сохранены).
TSOY.CLOUD 3.6.29: одинаковый mini-player голосовых на ПК и телефоне
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку. - Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения). - Н…Читать полностью
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку.
- Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения).
- Новый mini-player работает и в первичном рендере чата, и при появлении сообщений через polling.
TSOY.CLOUD 3.6.30: персональные настройки preloader
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста. - Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать с…Читать полностью
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста.
- Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать свой вариант поведения preloader.
- Системные сценарии установки сайта/PWA сохранены: preloader для install/PWA работает корректно даже при минимальном режиме.
TSOY.CLOUD 3.6.31: hotfix воспроизведения голосовых на телефоне
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу. - Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`). - Скрытый аудио-элемент пер…Читать полностью
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу.
- Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`).
- Скрытый аудио-элемент переведён в совместимый visually-hidden режим (без `display:none`) для лучшей работы на iPhone/Safari.
TSOY.CLOUD 3.6.32: отдельная иконка PWA + fallback на favicon/logo
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения. - Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback. - `manifest` и `apple-touch-icon` теперь формируются дина…Читать полностью
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения.
- Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback.
- `manifest` и `apple-touch-icon` теперь формируются динамически из настроек брендинга, а не только из встроенных `/public/icons/...`.
TSOY.CLOUD 3.6.33: встроенный просмотр файлов в PWA (с возвратом назад)
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`. - После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска. - Кнопка `Открыть` в файлово…Читать полностью
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`.
- После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска.
- Кнопка `Открыть` в файловом проводнике тоже использует этот безопасный PWA-сценарий.
TSOY.CLOUD 3.6.34: hotfix mini-плеера голосовых на телефоне
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате). - Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания. - `audio.load()` больше не мешает запуску как основ…Читать полностью
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате).
- Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания.
- `audio.load()` больше не мешает запуску как основной путь: теперь это только fallback при ошибке `play()`.
TSOY.CLOUD 4.0.0: группы, мосты и формат messenger
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах. - Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и…Читать полностью
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах.
- Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и групповые настройки.
- Появился формат `messenger` (контакты + чат), а файлы из чата теперь хранятся отдельно и не попадают в `Недавние` на главной.
TSOY.CLOUD 4.1.0: страница групп, единый дизайн
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников. - Страница пользователей упрощена: только аккаунты и создание новых пользователей. - Унифицирован дизайн всего проек…Читать полностью
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников.
- Страница пользователей упрощена: только аккаунты и создание новых пользователей.
- Унифицирован дизайн всего проекта: профиль, мессенджер, контакты и другие страницы теперь полностью используют глобальные настройки скругления.
Релиз v2.3.8
Снижен лаг при открытии страниц. · Polling-задачи переведены в менее агрессивный режим.
Релиз v2.3.10
Исправлены критические проблемы отображения текста и уведомлений. · Подготовлена база для финальной правки кодировки.
Релиз v2.3.11
Полностью восстановлен текст интерфейса на корректной кириллице. · Исправлены сообщения профиля, чатов, звонков и административных страниц. · index.php восстановлен из стабильной версии и очищен от поврежденных строк. · Обновлены маршруты администрирования звонков: мониторинг, закрытие и удаление комнат.
Релиз v2.3.12
Исправлено отображение текста на странице звонка по ссылке. · Восстановлены подписи и действия в админ-панели. · Очищены поврежденные символы в views/call_room.php и views/admin.php. · В call_room добавлено управление закрытием комнаты для создателя и администратора.
Релиз v2.3.13
Зафиксировано правило: кодировка проекта только UTF-8 без BOM. · Добавлен .editorconfig с обязательным charset=utf-8. · Добавлен scripts/check-encoding.ps1 и подключён в scripts/make-release.ps1.
Релиз v2.3.14
Улучшено качество аудиозвонков в личных и публичных комнатах. · Добавлена автопопытка восстановления соединения при сетевых сбоях. · Вынесены единые WebRTC-параметры: ICE/STUN/TURN и аудио-профиль в настройки админа. · Убраны хардкоды RTCPeerConnection в chat/call_room/admin_call_monitor.
Релиз v2.3.15
Звонки стали отзывчивее без перегруза сервера: события обрабатываются быстрее после действий пользователя. · Стабильнее работа в фоне и после возврата в приложение/вкладку. · Переведены call polling-циклы на адаптивный single-flight алгоритм (без наложения запросов). · Добавлены таймауты запросов, backoff при ошибках и fast-retry после сигналов/действий.
Релиз v2.3.16
В админке добавлены импорт и экспорт базы данных в JSON для резервного копирования и переноса. · Добавлены сервисные операции очистки БД и файлов: RTC-мусор, старый аудит, удалённые файлы и сироты в uploads. · Добавлен модуль app/admin_maintenance.php с безопасным экспортом/импортом и обслуживанием хранилища. · Импорт БД выполняется с полной заменой данных таблиц приложения (через DELETE в транзакции, без TRUNCATE).
Релиз v2.3.17
Исправлена критическая ошибка отправки emoji/смайликов в мессенджере на MySQL. · После обновления сайт автоматически приводит старые таблицы чата и связанные таблицы к emoji-safe кодировке utf8mb4. · MySQL-подключение теперь принудительно использует SET NAMES/CHARACTER SET utf8mb4. · Добавлен runtime-check кодировки таблиц через INFORMATION_SCHEMA и best-effort конвертация в utf8mb4 только при необходимости.
Релиз v2.3.18
В админке БД добавлен визуальный статус проверки utf8mb4/emoji (для MySQL). · Теперь можно быстро увидеть, есть ли таблицы или колонки, которые ещё не готовы к emoji. · Добавлен отчёт admin_db_charset_report() по INFORMATION_SCHEMA: default charset/collation БД, таблицы и текстовые колонки. · Отчёт выведен в views/admin_db.php с компактной сводкой и таблицами проблемных объектов (если есть).
Релиз v2.3.19
Переработан блок смайликов в мессенджере: быстрые emoji, недавние emoji и удобная панель выбора. · Подключена библиотека emoji picker с поиском и категориями; добавлены быстрые кнопки, включая клоуна 🤡. · Локально подключена библиотека public/vendor/emoji-button/emoji-button.min.js (без CDN-зависимости в рантайме). · В chat composer добавено хранение недавних emoji в localStorage и fallback-режим, если библиотека недоступна.
Релиз v2.3.20
Исправлен баг мессенджера: новые сообщения теперь появляются в открытом чате без перезахода. · Если вы находитесь внизу ленты, чат автоматически прокручивается к новым сообщениям. · Добавлен lightweight endpoint chat_messages_poll (инкрементальная выдача сообщений по after_id). · Во views/chat.php добавлен single-flight polling и клиентский рендер новых сообщений без полной перезагрузки страницы.
Релиз v2.3.21
Список диалогов в мессенджере теперь обновляется автоматически: новые сообщения и непрочитанные появляются без перезахода в чат. · Превью последнего сообщения, время и бейдж непрочитанных синхронизируются прямо в открытом разделе «Мессенджер». · Добавлен endpoint chat_dialogs_poll с компактной JSON-выдачей списка диалогов для текущего пользователя. · Во views/chat.php добавлен отдельный single-flight polling списка диалогов с backoff, signature-check и обновлением DOM только при изменениях.
Релиз v2.3.22
Переработан интерфейс мессенджера в стиле PWA-мессенджеров: удобнее список диалогов, компактнее шапка чата и чище лента сообщений. · На телефоне чат занимает экран аккуратнее: более компактные action-кнопки, улучшенная шапка и удобнее поле ввода для быстрых сообщений. · Во views/chat.php обновлены layout/styling для desktop и mobile (split-pane, sticky composer, адаптивная шапка, улучшенные bubbles). · Серверный и клиентский рендер списка диалогов унифицированы: одинаковая разметка строк (аватар/имя/время/превью/unread badge).
Релиз v2.3.23
Исправлена проблема со «слетающей» авторизацией: сессия пользователя теперь сохраняется стабильнее, особенно в PWA и на мобильных устройствах. · Пользователю больше не нужно постоянно повторно входить в аккаунт при обычном использовании сайта. · Добавлена устойчивая инициализация PHP-сессии: cookie lifetime 30 дней, gc_maxlifetime 30 дней, httponly/samesite и корректный secure через HTTPS/X-Forwarded-Proto. · Сессии вынесены в project-local storage/sessions (если доступно), чтобы изолировать их от server-wide gc других сайтов/приложений.
Релиз v2.3.24
Исправлен UX мессенджера на ПК: форма ввода теперь закреплена поверх ленты сообщений и всегда видна, как в Telegram/WhatsApp. · Возвращён стеклянный (glass) вид мессенджера на телефоне и PWA-экране. · Добавлен endpoint chat_messages_before_poll (before_id) и server helper conversation_messages_before_for_user() для lazy-history. · Стартовая загрузка сообщений в чате уменьшена до компактной пачки, дальнейшая история догружается по scroll trigger.
Релиз v2.3.25
Исправлен критичный UX-баг мессенджера на ПК: при открытии диалога теперь сразу видны последние сообщения и форма ввода (без прокрутки всей страницы вниз). · Форма ввода закреплена поверх ленты сообщений, а прокрутка выполняется внутри окна чата. · Для desktop conversation pane добавлена жёсткая высота по viewport (CSS + JS syncDesktopMessengerViewport), чтобы контент не растягивал страницу. · chatMessages переведён в гарантированно внутренний scroll-container; composer остаётся fixed/overlay внутри card.
Релиз v2.3.26
Добавлен отдельный центр уведомлений: быстрые переключатели, статус разрешений браузера, Service Worker/PWA и тест уведомления на устройство. · Настройки уведомлений теперь можно менять без захода в профиль — прямо из раздела «Уведомления». · Маршрут notifications получил обработку POST (сохранение notify_desktop/notify_sound) и скорректирован порядок mark_seen/counts. · Глобальный runtime уведомлений переработан: user-scoped localStorage state, единый helper __TSOY_NOTIFY_RUNTIME (SW/device notify, permission/status/test).
Релиз v2.3.27
Добавлена публичная страница «О проекте» (`/about`) с описанием проекта и карточками участников/вклада. · В профиле (редактирование) для администратора добавлен блок управления страницей «О проекте», включая загрузку фото участников с устройства. · Добавлены маршрут `about`, pretty-route `/about` и POST-обработчик `post_like_toggle` с JSON-ответом для AJAX. · В `profile_edit` добавлено сохранение настроек страницы about через `settings` + хранение списка участников в JSON (`about_contributors_json`).
Релиз v2.3.28
Hotfix: исправлено битое сообщение после сохранения настроек в центре уведомлений (теперь отображается нормальная кириллица). · В `index.php` заменены оставшиеся mojibake-строки flash-сообщения `Настройки уведомлений сохранены.` в обработчиках профиля и центра уведомлений.
Релиз v2.3.29
Hotfix: исправлены оставшиеся «кракозябры» в системных сообщениях/заголовках из `index.php` (включая центр уведомлений и очистку аудита в разделе БД). · Выполнена массовая зачистка mojibake-строковых литералов в `index.php` (восстановлена нормальная кириллица в flash/title сообщениях). · Усилен `scripts/check-encoding.ps1`: проверка mojibake теперь использует кодовые точки (`U+00C2/U+00C3/U+00D0/U+00D1`), а не хрупкий текстовый regex.
Релиз v2.3.30
Ссылка на страницу «О проекте» добавлена в подвал рядом с версией проекта. · Настройки страницы «О проекте» вынесены из профиля в отдельный раздел администрирования в дашборде. · Добавлен маршрут `admin_about` + новая страница `views/admin_about.php`; сохранение настроек about перенесено из `profile_edit` в admin-раздел. · Расширен RBAC: новые роли (`global_admin`, `admin_tester`), нормализация политик по умолчанию, закреплённые инварианты для доступа к БД/политикам/настройкам.
Релиз v2.3.31
Исправлены права управления пользователями: первый пользователь всегда закреплён как `global_admin`, обычный администратор не может понижать/блокировать/удалять его и сбрасывать ему пароль. · Роль `admin_tester` теперь может пользоваться обычными функциями приложения (включая профиль и фото), при этом изменения в админ-разделах по-прежнему заблокированы. · Добавлены backend-инварианты для первого пользователя (`user_ensure_first_global_admin`, запрет бана/удаления первого пользователя) и защита операций над `global_admin` в `admin_users`. · Глобальный guard `admin_tester` сужен до write-операций админ-разделов, чтобы не ломать обычный пользовательский функционал.
Релиз v2.3.32
Исправлена логика публичных файлов: фото участников со страницы `/about` остаются публичными, но больше не попадают в ленту «Публичные файлы» на главной. · Улучшена навигация и нейминг: пользовательское облако переименовано в «Мои файлы», а `admin`-экран оформлен как «Файлы проекта». · В `app/files.php` добавлена фильтрация публичной ленты по исключениям (`files_public_feed_excluded_ids()`), сейчас туда входят фото участников из `about_contributors_json`. · Обновлены заголовки/подписи в `views/home.php`, `views/dashboard.php`, `views/admin.php`, `views/layout.php`, `views/staff.php`, `views/chat.php`, `views/contacts.php` для уменьшения путаницы между пользовательским и административным файловыми экранами.
Релиз v2.3.33
Добавлена отдельная «мемная» invite-регистрация для друзей с автоназначением ролей `admin` и `admin_tester` по токен-ссылке. · Страница спец-регистрации получила отдельный дизайн с анимациями и роль-специфичными сообщениями (admin/tester). · Добавлен модуль `app/friend_registration.php`: JSON-конфиг спец-регистрации, токены, invite-ссылки, нормализация и resolve роли по токену. · В `index.php` добавлены маршруты `friend_register` и `admin_friend_register`, а также pretty-route `/friend-invite/<token>`.
Релиз v2.3.34
Hotfix: устранены предупреждения Deprecated на PHP 8.4+ в модуле спец-регистрации друзей. · В `app/friend_registration.php` сигнатуры helper-функций обновлены с implicit nullable (`array $cfg = null`) на явный nullable тип (`?array $cfg = null`).
Релиз v2.3.35
В спец-регистрацию друзей встроен виджет «кошка-говешка» с анимированным блоком внутри формы. · В настройках спец-регистрации можно загрузить фото кошки с устройства, включать/выключать блок и настраивать подпись/бейдж. · Спец-регистрация расширена настройками `cat_*` в `app/friend_registration.php`; загрузка изображения реализована в `index.php` и хранится в `public/friend_register/`. · В `views/friend_register.php` добавлен анимированный cat-widget с безопасным fallback без картинки.
Релиз v2.3.36
Базовый пресет оформления снова по умолчанию `Default`, а `Psychedelic` оставлен как опциональный вариант в настройках. · Уведомления о сообщениях и событиях теперь открывают соответствующий раздел (чат или календарь), а не всегда центр уведомлений. · Добавлен JSON endpoint `chat_send_async` и клиентский submit-handler во `views/chat.php` для AJAX-отправки сообщения с поддержкой вложений. · В `notif_poll` добавлены target-ссылки (`chat`/`calendar`), а `views/partials/scripts.php` формирует отдельные device-notifications с корректным `data.url`.
Релиз v2.3.37
Мессенджер структурно облегчён: более компактный header/messages/composer stack, меньше визуальной тяжести и ближе к привычной мобильной логике. · Исправлено поведение поля ввода в мобильном полноэкранном чате: composer больше не “съезжает” вниз из-за наложенных padding/overlay-стилей. · В `views/chat.php` добавлены структурные классы (`chat-list-card`, `chat-conv-card`, `chat-conv-body`, `chat-composer-shell`) и финальный CSS override-блок с упрощённой layout-схемой. · Убран тяжёлый overlay-режим composer для conversation pane (через CSS overrides), сообщения снова живут в нормальном flex-stack без лишнего bottom-overlay padding.
Релиз v2.3.38
Перестроена DOM-структура окна диалога: `chatMessages` теперь единый контейнер на всю область чата, внутри которого находятся шапка, лента сообщений и composer. · Шапка диалога и панель ввода встроены внутрь общего контейнера как в современных мессенджерах, что улучшает поведение на мобильных экранах. · В `views/chat.php` `id=\"chatMessages\"` переведён в роль root-container conversation pane, а scroll-area вынесена в `id=\"chatMessagesScroll\"`. · JS-логика мессенджера обновлена на новый scroll-target (`chatMessagesScroll`) с backward fallback на старую структуру.
Релиз v2.3.39
Уменьшен зазор между клавиатурой и полем ввода в мобильном мессенджере (почти вплотную, несколько миллиметров). · Панель ввода в fullscreen-чате лучше поджимается к клавиатуре на iPhone/iOS. · В `views/chat.php` добавлен динамический CSS var `--chat-mobile-composer-gap` и логика `visualViewport`-детекта открытой клавиатуры. · При открытой клавиатуре fullscreen-pane чата растягивается до видимого нижнего края без лишнего white-gap из-за `visualViewport.offsetTop`.
Релиз v2.3.40
Исправлен большой пустой отступ между полем ввода и клавиатурой в мобильном мессенджере (fullscreen chat). · Панель ввода и лента сообщений теперь корректно сжимаются при открытии клавиатуры. · В `views/chat.php` снят конфликтующий `min-height`/жёсткая высота на mobile fullscreen-цепочке контейнеров (`chat-conv-body` → `#chatMessages` → scroll-wrap → `#chatMessagesScroll`). · Горячий фикс рассчитан на iOS/Safari/PWA сценарии, где клавиатура уменьшает viewport и ломает flex-layout с `min-height`.
Релиз v2.3.41
Дополнительно исправлен большой зазор над клавиатурой на iPhone: поле ввода поджимается ближе даже при включённой assistant/suggestions панели iOS. · В `views/chat.php` добавлена реальная компенсация нижнего зазора по измерению положения composer относительно viewport (а не только по `visualViewport.height`). · Учтён iOS-кейс, когда `visualViewport` и `window.innerHeight` расходятся на высоту assistant/suggestions панели клавиатуры.
Релиз v2.3.42
Для диагностики iPhone-отступа убрана встроенная (inline) панель быстрых смайликов из формы сообщения в мессенджере. · Кнопка смайликов в composer теперь открывает полный emoji picker, если inline-панель отключена. · Из `views/chat.php` удалён блок `chat-emoji-panel` внутри composer; JS-клик по `emojiBtn` переведён на fallback `toggleFullEmojiPicker()` при отсутствии inline-панели.
Релиз v2.3.43
Для диагностики iPhone-отступа убран набор layout-классов у нижнего блока `attachHint / Убрать вложение` в composer мессенджера. · В `views/chat.php` блок под composer (с `attachHint` и `attachClearBtn`) упрощён до обычного контейнера без `d-flex/.../mt-2`.
Релиз v2.3.44
Для диагностики iPhone-отступа убран класс `small text-secondary` у блока `attachHint` в composer мессенджера. · В `views/chat.php` элемент `#attachHint` оставлен без CSS-классов, чтобы исключить влияние типографики/line-height на высоту composer.
Релиз v2.3.45
Для диагностики iPhone-отступа удалён `id=\"attachHint\"` у нижнего блока composer и связанный CSS-минимум высоты. · В `views/chat.php` удалено правило `#chatConvPane #attachHint { min-height ... }`, а сам элемент оставлен без `id`, чтобы исключить его вклад в высоту composer.
Релиз v2.3.46
Мессенджер вынесен из общего `container py-4` в отдельное “полотно” layout (full-canvas host), чтобы уменьшить конфликты мобильного fullscreen-режима с обёртками страницы. · Это изменение направлено именно на iPhone-баг с большим отступом над клавиатурой: чат теперь живёт в более простой DOM-структуре без общей контейнерной обвязки страницы. · В `views/layout.php` добавлен route-aware режим `contentCanvasRoute` для `chat`: контент мессенджера рендерится в `chat-canvas-stage` вне `container py-4`. · В `views/chat.php` обновлены mobile fullscreen-селекторы, которые раньше были жёстко привязаны к `.container.py-4`, теперь они поддерживают `.chat-canvas-stage`.
Релиз v2.3.47
Мессенджер после фикса iPhone-клавиатуры дополнительно очищен и визуально облегчён: обновлены шапка страницы, список диалогов, полотно сообщений и composer. · Строка состояния редактирования в composer теперь показывается только в режиме редактирования, а не занимает место постоянно. · Из `views/chat.php` удалён временный JS-компенсатор `tightenComposerToViewportBottom()` и связанный runtime-костыль `--chat-mobile-composer-gap`, оставлена более простая `visualViewport`-синхронизация. · Добавлены финальные CSS-overrides для canvas-режима чата (`chat-canvas-stage`) без возврата к старой layout-обвязке `container py-4`.
Релиз v2.3.48
На главной в разделе «Новости» теперь по умолчанию показываются только первые записи, остальные открываются кнопкой «Загрузить ещё». · В истории версий (технические новости по версиям) добавлен такой же режим постепенной подгрузки списка через кнопку «Показать ещё версии». · В `views/layout.php` добавлен универсальный client-side `load more`-инициализатор для блоков с `data-load-more-*`. · Разметка новостей на главной (`views/home.php`) и модалки истории версий (`views/layout.php`) переведена на единый шаблон постепенного раскрытия списка.
Релиз v2.3.49
Исправлен повторный iPhone-баг в мессенджере с большим отступом между клавиатурой и полем ввода (runtime-компенсация viewport/composer для mobile fullscreen). · Новости на главной и технические заметки по версиям теперь действительно свёрнуты по умолчанию (первые 3 записи), остальные открываются через кнопку «Показать ещё / Загрузить ещё». · В `views/chat.php` возвращена измеряемая компенсация `visualViewport` по фактическому gap до composer (без возврата старого `--chat-mobile-composer-gap` костыля). · В `views/layout.php` исправлен клиентский `load more`-инициализатор (Safari-safe проверка вместо `ParentNode`) и добавлено серверное начальное сворачивание версий.
Релиз v2.3.50
В мессенджере убрана служебная подпись под именем собеседника; клик по фото/имени в шапке диалога теперь открывает профиль собеседника. · Профиль расширен: значок админ-роли для администраторов, список друзей, количество друзей, а также кнопки добавления/удаления из друзей прямо на странице профиля. · Добавлены helper-функции для видимости карточек разработчиков на `/about` (`about_developer_visibility_json`, `user_about_card_visible()`, `user_about_card_set_visible()`) и фильтрация в `users_about_developers()`. · Маршруты `post_create/post_update` получили поддержку `cover_device_file` через новый helper `post_cover_from_upload()` в `app/posts.php`.
Релиз v2.3.51
В мессенджере из composer удалён нижний блок `chat-attach-row` (подсказка/кнопка вложения), чтобы убрать лишнюю высоту и iPhone-gap («подбородок»). · Из `views/chat.php` удалена разметка `div.chat-attach-row`; JS обработчики вложений уже безопасно работают при отсутствии `attachHint/attachClearBtn`.
Релиз v2.3.52
Усилен iPhone-fix для мессенджера: composer в mobile fullscreen при открытой клавиатуре закрепляется в `fixed`-режиме относительно видимой области, чтобы убрать большой зазор над клавиатурой. · В `views/chat.php` добавлен режим `chat-composer-vv-fixed` + JS-синхронизация с `visualViewport` (адаптивно: `bottom=0` или компенсация `keyboardInset`, если fixed элемент уходит под клавиатуру).
Релиз v2.3.53
В мессенджере с composer снят класс `chat-sticky` (оставлен только `chat-composer-shell`) — hotfix для iPhone-отступа над клавиатурой. · В `views/chat.php` удалён `chat-sticky` у обёртки формы сообщений, чтобы исключить конфликт sticky/fixed логики в mobile fullscreen.
Релиз v2.3.54
Ещё один iPhone hotfix для мессенджера: при открытой клавиатуре `fixed`-composer больше не обрезается контейнерами чата (снят clipping/blurs на время mobile keyboard mode). · В `views/chat.php` добавлен режим `chat-composer-vv-mode`: при активной клавиатуре снимаются `overflow:hidden` и `backdrop-filter` у `chat-conv-card/chat-conv-body`, чтобы Safari не привязывал/не обрезал `position: fixed` composer внутри карточки.
Релиз v2.3.55
В мессенджере переписан mobile-composer режим для iPhone: поле ввода при открытой клавиатуре выносится в отдельный viewport-портал, чтобы не появлялся большой зазор над клавиатурой. · В `views/chat.php` реализован `composer portal` (spacer + перенос `.chat-composer-shell` в `body` при mobile keyboard mode) вместо прежней fixed/sticky-компенсации внутри карточки чата.
Релиз v2.3.56
Добавлена система мультипрофилей: у одного аккаунта можно создавать, переключать и удалять несколько профилей через меню по клику на имя/аватар в шапке. · Для ролей разработчиков (`global_admin`/`admin`/`admin_tester`) добавлен выбор, какой профиль показывать на странице `/about`. · В `app/migrations.php` добавлены `user_profiles`, колонки `users.active_profile_id/users.about_profile_id` и `posts.hide_from_guests`. · В `app/users.php` реализованы helper-ы мультипрофилей (bootstrap/create/switch/delete/sync/about-select) и overlay данных выбранного профиля в `/about`.
Релиз v2.3.57
Мессенджер откатан по фронтенду (`views/chat.php`) к состоянию релиза `2.3.46` — это версия, на которой исчезал iPhone-gap («подбородок») над клавиатурой. · Сравнение показало, что `views/layout.php` (перенос чата в `chat-canvas-stage`) остаётся правильным; регрессия появилась позже в `views/chat.php` после добавления mobile keyboard viewport-хаков (`chat-composer-vv-portal`, `chat-composer-vv-fixed`, `chat-composer-vv-mode`, spacer/portal composer). · Откат выполнен точечно только для мессенджера: `views/chat.php` взят из архива `releases/tsoycloud_v2.3.46_2026-02-22.zip`.
Релиз v2.3.58
Мультипрофили переработаны: теперь каждый профиль аккаунта — это отдельный пользователь со своим логином и собственной страницей `/user/<login>` (отдельные посты, файлы и медиа). · В меню профилей аккаунта создание профиля теперь запрашивает отдельный логин (`username`) и отображаемое имя; основной профиль нельзя удалить. · Логика `user_profiles_*` в `app/users.php` переведена с таблицы `user_profiles` на связанные записи `users` через `owner_account_user_id` (старую таблицу больше не используем как источник истины). · В `app/auth.php` добавлен `auth_session_apply_active_profile()` и `$_SESSION[\"auth_user_id\"]`: сессия хранит владельца аккаунта отдельно от активного профиля (`$_SESSION[\"user\"]`).
Релиз v2.3.59
Мессенджер улучшен поверх стабильной базы (без возврата mobile keyboard-хаков): имя/аватар собеседника в шапке снова открывают профиль, убрана лишняя служебная подпись. · В профиле добавлены отдельные блоки медиа: фото, видео и аудио (для владельца — из облака, для гостей/других пользователей — из видимых постов). · В `app/migrations.php` добавлены таблицы `post_comments` и `user_pages`. · В `app/posts.php` реализованы helpers комментариев и поддержка внутренних ссылок (`/page/...`) в `post_attachment_add_link()` для публикации страниц.
Релиз v2.3.60
Исправлено мобильное меню профилей в шапке: dropdown больше не уезжает влево на узких экранах (ограничена ширина, стабилизировано позиционирование). · В `views/layout.php` профильный dropdown переведен на `data-bs-display=\"static\"` и вынесен на отдельный класс `topbar-profile-menu`; в `views/partials/head.php` добавлены mobile-safe стили ширины/переполнения.
Релиз v2.3.61
Исправлен раздел «Медиа» в профиле: теперь он показывает только контент, который пользователь явно добавил в посты (обложки и вложения), а не все файлы из облака. · В `views/profile.php` блок `Медиа` переведен на единый источник данных (медиа из постов) для владельца и гостей; облачные файлы владельца больше не попадают туда автоматически.
Релиз v2.3.62
Профиль переведён на более современный шаблонный стиль: обновлены карточки, шапка профиля и добавлены верхние вкладки разделов (Посты/Друзья/Страницы/Медиа). · Разделы Фото/Видео/Аудио теперь работают как отдельные ручные галереи профиля: пользователь сам добавляет контент в галереи, а не получает автоподбор из облака/постов. · Добавлен helper `app/profile_media.php` и таблица `profile_media_items` (ручные галереи профиля) с миграцией в `app/migrations.php`. · Добавлен маршрут `profile_media_gallery` в `index.php` (добавление/удаление элементов галереи, загрузка файлов с устройства).
Релиз v2.3.63
Профиль ещё ближе к новому шаблону: усилен визуал шапки (cover/avatar/chips/статистика), обновлены карточки друзей/страниц/медиа и общий стиль карточек постов/модалок. · Улучшена навигация по разделам профиля через верхние вкладки с сохранением активной вкладки. · В `views/profile.php` расширен слой профильных стилей и добавлены счётчики/визуальные блоки без изменения бизнес-логики постов, комментариев и ролей.
Релиз v2.3.64
Посты на странице профиля ещё ближе к новому шаблону: добавлен header карточки (аватар/имя/@username/время), улучшен action-bar и визуал карточек. · Модалка комментариев профиля визуально переработана и на мобильных ведёт себя ближе к формату bottom-sheet. · В `views/profile.php` добавлены профильные UI-классы для карточек постов и комментариев без изменения текущей логики лайков/комментариев/прав доступа.
Релиз v2.3.65
Управление галереями профиля перенесено в модалку (вместо collapse), что ближе к новому шаблону и удобнее на мобильных устройствах. · Экран `Редактировать профиль` заметно переработан визуально: добавлен hero-preview профиля, улучшены блоки загрузки аватара/обложки и группировка полей. · В `views/profile.php` блок управления ручными галереями переведён на modal-layout без изменения логики форм `profile_media_gallery`. · В `views/profile_edit.php` добавлены новые UI-обёртки и стили (`profile-edit-header-*`, `profile-edit-fieldset`, `profile-edit-upload-*`) при сохранении прежних POST-полей.
Релиз v2.3.66
Профиль дополнительно отполирован под мобильные устройства: карточки друзей и страниц стали компактнее и аккуратнее на узких экранах. · В модалке комментариев улучшен блок ввода: форма стала ближе к привычному мобильному composer-формату. · В `views/profile.php` добавлены mobile-first стили и классы для списков друзей/страниц, медиасетки и composer-разметки комментариев без изменения бизнес-логики.
Релиз v3.0.0
Подготовлен крупный профильный апдейт 3.0: улучшен mobile UX профиля (Друзья/Страницы/Медиа), а форма комментариев в модалке стала ближе к привычному мобильному composer-формату. · Полностью переработан интерфейс мультипрофилей в шапке: новый dropdown с быстрым переключением, аватарами и статусами профилей. · В `views/layout.php` переписана разметка topbar dropdown и модалки `#userProfilesModal` без изменения существующих роутов/POST-действий (`user_profiles`). · В `views/partials/head.php` добавлен новый слой стилей для мультипрофильного UX (`topbar-profile-*`, `user-profiles-modal-modern`, `user-profile-card*`) с адаптацией под мобильные экраны.
Релиз v3.0.1
На странице профиля кнопка копирования публичной ссылки теперь копирует адрес в буфер и показывает диалог «Скопировано». · При открытии профиля по публичной ссылке `/user/<username>` скрывается боковое меню (desktop + mobile offcanvas), страница выглядит ближе к формату соцсети. · В `views/profile.php` обновлён helper `copyText()` для кнопок `.js-copy`: успешное копирование подтверждается диалогом, fallback остаётся только при ошибке clipboard API. · В `views/layout.php` добавлен режим публичной страницы профиля (`$publicProfilePageRoute`) с условным отключением sidebar/offcanvas и корректировкой mobile topbar-отступа.
Релиз v3.0.2
На страницах профиля боковое меню теперь скрывается только у гостей. Для авторизованных пользователей навигация в профиле снова доступна. · В `views/layout.php` режим “соц-страницы без меню” ограничен только гостевым просмотром публичного профиля (`$guestPublicProfileSocialMode`).
Релиз v3.0.3
Кнопки «Ссылка на профиль» и «Ссылка на пост» на странице профиля теперь копируют ссылку в буфер по одному клику. · В `views/profile.php` copy-handler для `.js-copy/.js-magnet` усилен: добавлены `preventDefault/stopPropagation` и fallback-копирование через `textarea + execCommand(copy)` без обязательного `prompt`.
Релиз v3.1.0
Конструктор пользовательских страниц серьёзно переработан: добавлены блоки «Статья», «Гайд» и «Плеер роликов» помимо галереи/ссылок. · В выборе файлов для конструктора страниц больше не нужны ID вручную: добавлен единый проводник файлов с папками, поиском, фильтрами и мультивыбором. · Добавлен reusable partial `views/partials/file_explorer_picker.php` (модалка + JS-компонент `TsoyFileExplorerPicker`) для повторного использования в разных разделах. · В `app/pages.php` расширена модель блоков страниц (`article`, `guide`, `video_player`) и обновлён сбор используемых file_id для рендера.
Релиз v3.2.0
Усилен PWA-режим для ПК и смартфонов: улучшен manifest (ярлыки быстрых действий, desktop/mobile launch-поведение, метаданные приложения). · Уведомления и звонки в PWA/браузере теперь надёжнее открывают нужный раздел по клику (чат, конкретный звонок, уведомления и т.д.). · Root и `public/service-worker.js` синхронизированы и переведены на единый hardened SW (navigation preload, deep-link `notificationclick`, управление файловым кешем через message API). · В Service Worker добавлен корректный bypass для `Range`-запросов, чтобы не ломать стриминг аудио/видео и просмотр медиа на мобильных устройствах.
Релиз v3.2.1
В разделе «Настройки → Брендинг» добавлена отдельная настройка названия проекта в шапке (верхняя панель и боковое меню). · Добавлен ключ настроек `site_header_name`; при пустом значении используется fallback на `site_name`. · В `views/layout.php` брендинг шапки переведён на отдельную переменную `$siteHeaderName`, не затрагивая title страниц и прочие места, где используется `site_name`.
Релиз v3.3.0
Проведена большая унификация визуального стиля проекта: карточки, навигация, формы, модалки и отступы лучше согласованы между разделами. · Раздел «Настройки → Оформление» расширен: добавлены настройки глобального шрифта, масштаба текста, ширины контента, контраста поверхностей и отдельная плотность мессенджера. · Расширен `ui_config()` и системные настройки (`ui_font_family`, `ui_font_scale`, `ui_content_width`, `ui_surface_contrast`, `ui_chat_density`) с валидацией в `index.php?r=admin_settings`. · В `views/partials/head.php` добавлены новые data-атрибуты UI и глобальные CSS-токены (font-scale, content-width, surface-contrast) для централизованного управления дизайном.
Релиз v3.3.1
В мессенджере выбор файла из облака переведён на единый проводник (папки, поиск, фильтры, превью), как в других разделах проекта. · Исправлено меню действий сообщения (`Изменить/Удалить`): dropdown больше не перекрывается соседними сообщениями. · В `views/chat.php` интегрирован reusable `TsoyFileExplorerPicker` для attach-модалки (mobile-safe сценарий через отдельную модалку picker-а). · Для строк сообщений добавлен z-index lift при `show.bs.dropdown` (`chat-row-menu-open`), чтобы меню действий не попадало под соседние bubbles.
Релиз v3.3.2
В «Центре уведомлений» блок с уведомлениями/событиями теперь показывается первым, а настройки уведомлений идут после него. · В `views/notifications.php` переставлен визуальный порядок колонок через grid-order (`notify-col-feed` перед `notify-col-settings`) и обновлён заголовок блока на «Все уведомления».
Релиз v3.3.3
Страница «Контакты» визуально приведена к стилю мессенджера: одинаковая шапка, поверхности, контуры и оттенки/градиенты. · В `views/contacts.php` добавлен локальный токенизированный стиль (`contacts-page`) с той же логикой surface/background, что и в мессенджере, включая реакции на `ui_surface_contrast` и `ui_density`.
Релиз v3.3.4
Проводник файлов в профиле (обложка и вложения постов) переведён на единое ядро `TsoyFileExplorerPicker`, как в мессенджере. · Вложения к посту с устройства в профиле переработаны в единый блок внутри модалки вложений (облако + устройство + ссылки), чтобы выбор работал стабильнее и понятнее. · В `views/profile.php` добавлен JS-слой унификации старых модалок вложений постов: облачные файлы выбираются через общий picker, а hidden-inputs собираются по mime (`attach_images/video/audio/files`). · В `app/files.php` расширен `files_admin_list()` (фильтры по владельцу и папке) и добавлены helper-функции `files_admin_owner_stats()` / `files_admin_folders_list()` для админского проводника.
Релиз v3.3.5
Исправлен двойной проводник в профиле: при выборе обложки поста больше не открывается одновременно новый и старый интерфейс. · Исправлены лишние кнопки «Сохранить / Отмена» под опубликованными постами (ошибка разметки edit-блока). · В `views/profile.php` удалены legacy JS-билдеры вложений постов (`js-att`/`js-att-edit`) и старые вкладки вложений теперь физически вырезаются из DOM после инициализации нового picker-слоя. · В `views/profile.php` убраны bootstrap-trigger атрибуты с кнопок выбора обложки (теперь открывается только `TsoyFileExplorerPicker`), а возврат старой attach-модалки после picker отключён.
Релиз v3.3.6
В конструкторе пользовательских страниц добавлен новый блок «Таблица» с ручным редактированием ячеек. · Для блока таблицы доступны действия: добавить/удалить строку и добавить/удалить столбец, а также режим «первая строка — заголовки». · В `app/pages.php` добавлена нормализация блока `table` (header + rows, ограничения размеров и длины ячеек). · В `views/my_pages.php` расширен page-builder: тип `table`, визуальный table-editor и сериализация таблицы в `blocks_json`.
Релиз v3.4.0
Добавлены полноценные push-уведомления на устройство (через Web Push + Service Worker) для сценариев, когда сайт/PWA закрыт. · Push-уведомления теперь приходят по ключевым событиям: сообщения, входящие звонки/приглашения в звонок, лайки постов, комментарии и добавления в друзья. · Добавлен `app/push.php`: VAPID-ключи (автогенерация), подписки Web Push, очередь уведомлений, payloadless Web Push dispatch и pull-механизм для SW. · В `app/migrations.php` добавлены таблицы `push_subscriptions` и `push_queue` (MySQL/SQLite) с индексами для подписок и очереди доставки.
Релиз v3.4.1
Исправлено мобильное открытие окна вложений в мессенджере: attach-модалки/проводник теперь открываются поверх fullscreen-чата. · Меню профиля/переключения мультипрофилей в мобильной шапке больше не уезжает влево: dropdown центрируется по viewport. · В `views/chat.php` поднят z-index attach-модалки и file-picker-модалки над mobile chat pane (`z-index: 2100`) и добавлена маркировка backdrop (`chat-over-chat-backdrop`). · В `views/chat.php` усилен mobile-open handler клипсы (`pointerup` + `touchend` + click guard), чтобы не терялись тапы в fullscreen-мессенджере.
Релиз v3.4.2
Исправлена навигация по клику на уведомления: уведомления теперь корректно открывают источник (чат, календарь, профиль/пост и т.д.) в браузере и PWA. · В `views/partials/scripts.php` `__tsoyNavigateFromNotification()` переведён на резолв ссылок через `appBasePath`, а fallback `Notification.onclick` теперь использует тот же навигатор. · В `service-worker.js` / `public/service-worker.js` `notificationclick` теперь резолвит `data.url` относительно `self.registration.scope` (а не `origin`), что исправляет deep-link в установках не в корне сайта.
Релиз v3.4.3
Уведомления стали информативнее: для новых сообщений показываются имя отправителя и фрагмент текста. · Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (там, где это поддерживает браузер/устройство). · В `notif_poll` добавлен preview последнего непрочитанного сообщения (`sender/body/url`), а клиентский polling в `views/partials/scripts.php` использует его для desktop-уведомлений и toast. · В `app/push.php` расширен payload Web Push: поддержка `data` и `action_urls`, а `push_notify_incoming_call()` теперь отправляет actions (`accept/close`) и URL принятия звонка.
Релиз v3.4.4
В дашборде (`Настройки`) добавлен отдельный блок настроек уведомлений: цвет, оформление toast/desktop-уведомлений, рингтон уведомлений и отдельный рингтон входящего звонка. · Добавлен блок `PWA и обновления`: политика обновления (manual/notify/auto), интервал проверки Service Worker, автозапрос persistent storage и toast-оповещения об обновлении PWA. · Добавлены новые ключи настроек в `app/settings.php`; сохранение/валидация реализованы в `index.php` (`admin_settings`). · В `views/layout.php` новые настройки прокидываются в `window.__TSOY_NOTIFY` (`ui/sounds/pwa`) для runtime-слоя.
Релиз v3.4.5
В настройках уведомлений добавлена загрузка своих рингтонов: отдельно для обычных уведомлений и отдельно для входящего звонка. · В админке можно прослушать загруженные рингтоны прямо в разделе настроек и удалить их при необходимости. · Добавлены настройки `notify_sound_custom_path` и `notify_call_sound_custom_path`, а в `admin_settings` реализована загрузка аудиофайлов в `public/sounds`. · Во фронтенде (`views/layout.php` + `views/partials/scripts.php`) runtime уведомлений получил поддержку кастомных аудио-файлов с fallback на синтезированные звуки, если браузер блокирует воспроизведение.
Релиз v3.5.0
Стабилизационный релиз: проведён общий cleanup проекта, снижён шум от временных артефактов и улучшена предсказуемость работы уведомлений/PWA-настроек. · В настройках уведомлений доработана работа со своими рингтонами: при замене старые файлы корректно очищаются, а слишком большие файлы не принимаются. · Удалены временные каталоги восстановления/аудита (`tmp_*`) из рабочей директории, которые засоряли поиск и увеличивали накладные расходы проверок. · В `scripts/check-encoding.ps1` добавлено универсальное исключение для временных каталогов `tmp_*`, чтобы сборочные проверки не сканировали техмусор.
Релиз v3.5.1
Hotfix рингтонов на телефонах: улучшено воспроизведение кастомных рингтонов уведомлений/звонка на мобильных браузерах и PWA. · В `views/partials/scripts.php` исправлен баг кастомного рингтона уведомлений: теперь Promise `audio.play()` реально проверяется, и при ошибке срабатывает fallback-звук. · Кастомные рингтоны теперь резолвятся через `appBasePath` (`__tsoyResolveAppUrl`) для корректной работы в установках проекта в подпапке сайта.
Релиз v3.5.2
Усилена надёжность уведомлений: добавлен серверный retry-worker для wake-push доставки с повторными попытками и backoff. · В админке (Настройки -> PWA и обновления) появился блок диагностики push-очереди: количество недоставленных элементов, состояние очереди и статус подписок. · В `push_queue` добавлены поля состояния доставки (`dispatch_state`, попытки, backoff, lock, last_error/status) и миграции для MySQL/SQLite. · В `app/push.php` реализованы функции очереди и worker-обработки (`claim/process due`, retry/backoff, статистика очереди).
Релиз v3.5.3
Уведомления стали стабильнее при закрытом PWA/сайте: сервер теперь пытается отправлять полноценный Web Push payload (с телом уведомления), а не только wake-push. · Сохранён fallback-режим (`wake-push + push_pull`) для совместимости, если endpoint/браузер не принимает payload. · В `app/push.php` добавлена payload-отправка Web Push (`aes128gcm`) с VAPID и шифрованием сообщения на стороне сервера (ECDH + HKDF + AES-128-GCM). · `push_dispatch_user()` теперь умеет отправлять payload в push и возвращает раздельную статистику `payload_sent` / `wake_sent`.
Релиз v3.5.4
В админке (`Настройки -> PWA и обновления`) добавлена диагностика push-устройств: список подписок, устройство/режим, последний успех доставки и ошибки. · Появилась кнопка `Тест push` для каждого устройства, чтобы быстро проверить доставку уведомлений на конкретную подписку. · В `app/push.php` добавлены helper-функции диагностики: `push_subscriptions_admin_list()`, `push_subscription_get()`, `push_subscription_test_send()`. · Добавлен route `index.php?r=push_test_subscription` (admin/settings), который отправляет тестовый push на выбранную подписку и пишет результат в flash.
Релиз v3.5.5
Диагностика push-устройств в админке стала практичнее: добавлены фильтры (поиск, active/inactive, только с ошибками). · Для push-подписок появились действия `Отключить / Включить / Удалить` прямо в таблице устройств. · В `app/push.php` добавлены admin-helper’ы управления подписками: `push_subscription_set_active()` и `push_subscription_delete_by_id()`, а список подписок получил серверные фильтры (`q`, `only_errors`, `state`). · В `index.php` добавлен route `push_subscription_admin_action` для безопасного управления подписками из админки (POST + CSRF + capability).
Релиз v3.5.6
Исправлен бренд в уведомлениях: заголовок уведомлений теперь подтягивается из настроек сайта, а не захардкожен как `TSOY.CLOUD`. · В диагностике push-устройств добавлена колонка `Последний тест` (успех/ошибка, режим `payload/wake`, HTTP-код, время). · В `app/push.php` добавлен helper `push_app_title()` (с кешем), и серверные push-события/очередь/тестовые уведомления переведены на имя сайта из `settings`. · В `views/layout.php` + `views/partials/scripts.php` runtime уведомлений получил `siteName/siteHeaderName`; browser/PWA fallback notifications и toast теперь используют бренд из настроек.
Релиз v3.5.7
В диагностике push-устройств добавлена статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). · Добавлены кнопки сброса статистики доставок: для одной подписки и для всех подписок сразу. · В `push_subscriptions` добавлены поля `push_stat_*` и миграции для MySQL/SQLite; реальные отправки в `push_dispatch_user()` записывают статистику по подписке (`payload/wake/fallback/error`). · В `app/push.php` реализованы helper’ы `push_subscription_delivery_stats_record()` и `push_subscription_delivery_stats_reset()`.
Релиз v3.5.8
Hotfix уведомлений: название в заголовке уведомления теперь берётся в приоритете из `Название в шапке`, затем из `Название сайта`. · Исправлен fallback тестового уведомления в центре уведомлений: больше не показывает захардкоженный `TSOY.CLOUD`. · В `views/notifications.php` fallback `new Notification(...)` переведён на бренд из `window.__TSOY_NOTIFY`. · В `views/partials/scripts.php` helper `__tsoyNotifyTitle()` теперь использует `siteHeaderName` раньше `siteName`.
Релиз v3.5.10
В диагностике push-устройств добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общие счётчики попыток. · Добавлен мини-график/спарклайн по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца показывает объём попыток за день. · В `app/push.php` `push_queue_stats()` расширен блоком `delivery_summary`, который агрегирует `push_stat_*` по всем push-подпискам и считает проценты (`payload/fallback/error`). · Добавлена таблица/миграция `push_delivery_daily_stats` и запись дневной статистики при реальных отправках push (`payload/wake/fallback/error`).
Релиз v3.5.11
Страница `Настройки` в дашборде больше не выглядит как сплошная простыня: добавлен блок быстрых переходов по разделам (якоря) и группировка по логическим секциям. · Появились явные секции: основные параметры, дизайн/уведомления, PWA/push, функции/звонки/диагностика — ориентироваться в настройках стало заметно проще. · В `views/admin_settings.php` добавлены якоря (`id`) для ключевых блоков настроек и верхняя навигационная панель без изменения backend-логики сохранения формы. · Страница сохранена как единая форма `admin_settings`, поэтому существующие `POST`-обработчики, `formaction` для push-диагностики и CSRF-проверки продолжают работать без миграций.
Релиз v3.5.12
Hotfix страницы `Настройки`: быстрые переходы по разделам теперь ведут в нужные блоки страницы, а не в корень сайта. · Убран sticky-режим блока `Разделы настроек`, из-за которого он перекрывал интерфейс при прокрутке. · В `views/admin_settings.php` ссылки разделов переведены с hash-only (`#...`) на route-aware (`index.php?r=admin_settings#...`) для корректной работы при наличии `<base>`/нестандартного base path. · Снята sticky-позиция с `admin-settings-nav-card` (оставлен статичный блок), чтобы навигация не накрывала карточки настроек ниже по странице.
Релиз v3.5.13
Страница `Настройки` переделана в Android-style режим: слева список разделов, справа показывается только выбранный раздел настроек. · Переключение разделов теперь происходит без переходов по странице/якорям; интерфейс не перекрывается и не дёргается. · В `views/admin_settings.php` реализован client-side секционный контроллер (`data-settings-nav` / `data-settings-section`) с переключением видимости блоков внутри одной формы. · Сохранена совместимость с текущим backend `admin_settings`: `POST`-логика, `formaction` кнопки push-диагностики и CSRF-проверка не менялись.
Релиз v3.5.14
В разделе `Система` настроек добавлен выпадающий список выбора часового пояса по Гринвичу (GMT/UTC offsets). · При выборе смещения из списка значение автоматически подставляется в поле часового пояса ниже, чтобы сохранить настройку одним кликом. · В `views/admin_settings.php` добавлена генерация preset-списка фиксированных зон `GMT-12 ... GMT+14` с валидными IANA-идентификаторами (`Etc/GMT±N`, `UTC`). · Добавлена JS-связка `systemTimezoneUtcPreset -> systemTimezoneInput`, которая подставляет выбранный preset в существующее поле `system_timezone` без изменений backend-валидации.
Релиз v3.5.15
Настройки переведены в Android-style режим с боковым меню разделов и вторым уровнем внутри `PWA и push` (`Обновления`, `Очередь push`, `Устройства`). · В главное меню добавлен отдельный пункт `Настройки` (после `Дашборд`), доступный всем авторизованным пользователям. · Добавлен route `settings` с доступом через `sections.settings`; legacy route `admin_settings` сохранён для совместимости админ-инструментов и внутренних redirect’ов. · `index.php` (`settings/admin_settings`) разделён по scope сохранения: личные настройки (theme + notify prefs) сохраняются всем ролям, глобальные админ-настройки — только при `admin.settings` и не в режиме `admin_tester`.
Релиз v3.5.16
Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении общего бокового меню. · Переходы в меню настроек теперь открывают соответствующий экран, а не просто переключают внутренние блоки в одном и том же URL. · В `index.php` добавлены route-level страницы настроек (`settings_admin_*`) с capability-gates через `admin.settings`; legacy `admin_settings` сохранён и перенаправлен в режим `Брендинг` внутри общего шаблона. · В `views/admin_settings.php` реализована route-aware навигация: единый шаблон использует разные `action`/initial section в зависимости от текущего settings-route и корректно обрабатывает hash-переходы (`#pwa-notify-admin`, подпункты PWA и др.).
Релиз v3.5.17
Hotfix страницы `Настройки`: пункты бокового меню снова выглядят как кнопки (без подчёркиваний) и заполняют всю ширину колонки. · На desktop видимый раздел настроек теперь растягивается на всю доступную ширину правой панели (как `WebRTC`), а не остаётся половинной карточкой. · В `views/admin_settings.php` для `.admin-settings-side-btn` добавлены `display:block` и `text-decoration:none`, что устраняет регресс после перевода пунктов меню в `<a>`. · В JS-section режиме добавлен CSS override для `.js-settings-block.is-visible` внутри `.row`: `flex-basis/max-width:100%` (исправлен конфликт с Bootstrap `col-lg-6`).
Релиз v3.5.18
Hotfix страницы `Настройки`: в разделе `База данных` убрана лишняя горизонтальная линия перед карточкой блока. · Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь подстраивается под тему оформления и остаётся читаемой в светлой и тёмной темах. · В `views/admin_settings.php` удалён лишний `<hr class=\"my-4\">` перед блоком `settings-db`. · Стили `admin-settings-savebar` переведены с жёстко тёмного фона (`rgba(20,22,30,...)`) на theme-aware фон через Bootstrap CSS variables (`--bs-body-bg-rgb`, `--bs-body-color`, `--bs-border-color-translucent`).
Релиз v3.6.0
Начат рефакторинг связки `Профиль / Контакты / Мессенджер`: на всех трёх экранах добавлен единый переключатель разделов (Social Hub) и явное описание роли каждого раздела. · `Профиль` теперь явно позиционируется как публичная страница пользователя (посты, медиа, страницы, друзья), `Контакты` — как каталог и управление связями, `Мессенджер` — как диалоги/вложения/звонки. · Добавлен reusable partial `views/partials/social_suite.php` (единый CSS для Social Hub: header/switcher/surfaces/role-map chips). · `views/profile.php`, `views/contacts.php`, `views/chat.php` подключены к `social_suite` и получили общий navigation shell без вмешательства в критичную mobile-геометрию композера мессенджера.
Релиз v3.6.1
Следующий шаг по связке `Контакты / Мессенджер`: в мессенджере блок `Быстрый старт` теперь показывает только контакты пользователя, а полный каталог вынесен в раздел `Контакты`. · В настройках исправлено выравнивание раздела `База данных`: карточка блока больше не поднимается выше меню слева. · В `views/chat.php` удалено дублирование каталога пользователей внутри мессенджера: список `Начать чат` переведён на `contacts_list($me_id)` + ссылка в `index.php?r=contacts`. · В `views/admin_settings.php` выровнен db-блок (`settings-db`) относительно общего grid/меню и обновлены подписи/подразделы блока дизайна (`ui/notify`) для разделения личных и глобальных настроек.
Релиз v3.6.2
Убран лишний `Social Hub` с экранов `Профиль / Контакты / Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс снова стал компактнее. · В `Мессенджере` закреплена роль экрана: только активные диалоги и общение. Новый чат создаётся через раздел `Контакты`. · Удалён временный partial `views/partials/social_suite.php` и его подключения из `views/profile.php`, `views/contacts.php`, `views/chat.php` (откат лишнего UI-слоя без влияния на backend). · В `views/chat.php` удалён дублирующий сценарий старта чатов из списка пользователей/контактов: оставлен переход в `index.php?r=contacts` и история активных диалогов.
Релиз v3.6.3
Следующий шаг по связке `Контакты / Мессенджер`: в карточках пользователей на странице `Контакты` добавлены явные действия `Написать` и `Позвонить`. · Мессенджер очищен от каталоговых элементов: в боковой панели оставлены только активные диалоги, без блока быстрого старта/списков людей. · `index.php` (`chat_start` и `chat?start=`) теперь прокидывает `call=1` в итоговый URL диалога, чтобы из внешних экранов можно было запускать звонок напрямую. · В `views/contacts.php` унифицированы action-кнопки карточек (`Написать` / `Позвонить`) для списка контактов и каталога пользователей.
Релиз v3.6.4
Дожат интерфейс мессенджера под единый стиль с `Контактами`: обновлены список диалогов, шапка диалога и composer (кнопки, границы, поверхности, типографика). · Список диалогов стал визуально ближе к карточкам контактов: более ровные поверхности, одинаковая логика hover/active, читаемые превью и время. · Изменения сделаны только в `views/chat.php` на уровне CSS/визуальных состояний (`chat-dialog-item`, `chat-dialog-head`, `chat-inputbar`, action-buttons). · Мобильная геометрия ввода/клавиатуры (`fixed/sticky/viewport` логика, fullscreen layout цепочка) не изменялась, чтобы не вернуть iPhone-баг с \"подбородком\".
Релиз v3.6.5
Мессенджер получил второй visual-pass: доработаны карточки диалогов, шапка активного диалога, кнопки действий и composer для более цельного и лёгкого вида. · В списке диалогов добавлена компактная CTA-кнопка `Контакты` в шапке списка и более полезное пустое состояние с переходом в `Контакты`. · В `views/chat.php` расширен UI-only CSS слой (polish pass 2): `chat-list-headbar`, `chat-dialog-item`, `chat-dialog-head`, `chat-head-btn`, `chat-compose-btn` и density overrides. · Добавлены только безопасные классы/микроразметка в `views/chat.php` (CTA в списке диалогов, классы кнопок) без изменения маршрутов, логики сообщений и звонков.
Релиз v3.6.6
Hotfix iPhone/PWA уведомлений: системная строка `from ...` теперь берёт бренд из настроек (`Название в шапке` → `Название сайта`), а не из старого захардкоженного `TSOY.CLOUD`. · PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с брендингом проекта, чтобы имя приложения и имя в уведомлениях совпадали. · В `index.php` добавлен route `manifest`, который отдаёт динамический Web App Manifest на основе текущих настроек брендинга (`site_header_name` / `site_name`). · В `views/partials/head.php` `<link rel=\"manifest\">` переведён на динамический route с cache-bust (`APP_VERSION` + hash бренда); `application-name` и `apple-mobile-web-app-title` переведены на приоритет `site_header_name`.
Релиз v3.6.7
Исправлен мобильный overflow окна `Диалоги` в мессенджере: карточка списка диалогов больше не вылезает за ширину экрана на iPhone/смартфонах. · Стабилизирована ширина mobile-раскладки мессенджера без изменений логики клавиатуры и без риска вернуть баг с `подбородком`. · В `views/chat.php` для mobile добавлен точечный фикс ширины: убраны отрицательные отступы `row g-3` (Bootstrap gutter overflow) и зажаты `#chatListPane`/карточка/тело списка в `max-width:100%`. · Изменение ограничено CSS-слоем страницы чата; fullscreen/composer/`visualViewport` логика не изменялась.
Релиз v3.6.8
Ускорена отправка сообщений в мессенджере: сообщение появляется заметно быстрее после нажатия `Отправить`, без ощущения паузы в 2–3 секунды. · Повышена плавность UX при отправке: сервер отдаёт ответ чату сразу, а push-уведомления больше не держат отправку сообщения. · В `index.php` (`chat_send_async`) push для нового сообщения переведён в queue-first режим: уведомление ставится в очередь без синхронной отправки (`sendNow=false`). · HTTP-ответ `chat_send_async` теперь завершается до фоновой попытки dispatch push (`fastcgi_finish_request` / flush), чтобы Web Push не блокировал отображение сообщения.
Релиз v3.6.9
Подготовлен серверный фундамент чата для больших историй переписки (сотни тысяч/миллионы сообщений) без изменения привычного интерфейса. · Список диалогов и polling чата стали легче для сервера за счёт оптимизации хранения unread-состояния и индексов под крупные переписки. · В `conversations` добавлены денормализованные unread-счётчики (`u1_unread_count`, `u2_unread_count`) и метаданные последнего сообщения (`last_message_id`, `last_message_preview`). · В `app/chat.php` `message_send()` / `conversation_mark_read()` обновляют unread-счётчики диалога; `message_delete_for_me()` и `conversation_clear_for_me()` синхронизируют их через пересчёт/сброс.
Релиз v3.6.10
Полиш страницы `Контакты`: действия `Написать`, `Позвонить`, `Удалить` в карточках заменены на компактные иконки (конверт, трубка, корзина) для более чистого интерфейса. · Сохранены подсказки (`title`) и `aria-label`, чтобы UX остался понятным и доступным на ПК и мобильных устройствах. · В `views/contacts.php` добавлены `contacts-actions` и `contacts-action-icon` (theme/density-friendly размеры икон-кнопок), заменена текстовая разметка кнопок в списке `Мои контакты` и `Каталог пользователей`. · Логика маршрутов и действий (`chat_start`, `chat_start&call=1`, add/remove contact) не изменялась.
Релиз v3.6.11
Доведён UI действий в `Контактах`: кнопка `В контакты` заменена на иконку `человек+`, чтобы все действия в карточках были в одном визуальном языке. · Заголовок `Каталог пользователей` и кнопка `Найти` теперь находятся в одной строке, поле поиска вынесено отдельно ниже на полную ширину. · В `views/contacts.php` кнопка добавления контакта переведена на `bi-person-plus` с `title`/`aria-label`; сохранена существующая POST-логика `action=add`. · Поиск в каталоге использует `form=\"contactsSearchForm\"` у кнопки `Найти`, чтобы держать правильную desktop/mobile компоновку без изменения backend-маршрута `contacts`.
Релиз v3.6.12
Системные файлы проекта (логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации) переведены в единую системную папку `public/system/...`. · Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически и мягко переносятся в новую системную структуру при запуске приложения. · Добавлен `app/system_assets.php`: единый helper для системных ассетов (безопасное сохранение upload-файлов, удаление только из разрешённых системных директорий, миграция legacy-путей). · В `index.php` (`admin_settings`) загрузка логотипа, favicon и кастомных рингтонов переведена на `system_assets_store_upload(...)` с хранением в `public/system/branding` и `public/system/sounds`.
Релиз v3.6.13
В настройках переработан раздел `Внешний вид`: вместо разрозненных пунктов `Внешний вид профиля` и `Внешний вид сайта` появился единый раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). · Для глобального оформления сайта добавлены готовые профили внешнего вида (несколько пресетов под разные сценарии: чистый, рабочий, чтение, мягкий, ночной, psychedelic). · Добавлен helper `ui_appearance_profiles()` в `app/bootstrap.php` с готовыми профилями оформления и пакетами значений для `ui_*` настроек. · В `views/admin_settings.php` объединена навигация дизайна в один top-level `Внешний вид`, добавлен UI выбора/подстановки профиля оформления и обновлены кириллические шрифтовые опции.
Релиз v3.6.14
Исправлен UX профиля: кнопка `Написать` больше не отображается на собственной карточке профиля. · У вложений постов в обычном просмотре убраны кнопки `Удалить`: удаление доступно только в режиме редактирования поста. · В `views/profile.php` кнопка перехода в чат скрыта для `is_self`. · Из обычного рендера вложений в `views/profile.php` удалены формы `post_attachment_delete`; удаление оставлено в edit-блоке (`js-del-att`).
Релиз v3.6.15
В личном разделе `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. · Для публичной страницы профиля добавлена персональная настройка вида для гостей: `показывать боковое меню`, `скрывать боковое меню`, `скрывать боковое меню и шапку сайта`. · В `users` добавлены персональные UI-поля `ui_sidebar_mode` и `guest_profile_chrome_mode` (миграции в `app/migrations.php`). · В `index.php` (`settings`) сохранение пользовательских настроек расширено: добавлен `user_update_ui_prefs(...)` и синхронизация значений в session snapshot.
Релиз v3.6.16
В мессенджере добавлено контекстное меню сообщения по правой кнопке мыши и по удержанию на мобильных устройствах. · Меню действий сообщения теперь включает `Изменить`, `Удалить`, `Цитировать` и `Реакция` (с выбором emoji). · Добавлена таблица `message_reactions` (MySQL/SQLite) и миграции/индексы в `app/migrations.php`. · В `app/chat.php` добавлены batch-подгрузка реакций для пачек сообщений (`chat_messages_payload_for_client`) и `message_reaction_toggle(...)`.
Релиз v3.6.17
В мессенджере у сообщений добавлена маленькая галочка статуса прочтения (`прочитано / не прочитано`). · Галочка отображается у ваших сообщений и обновляется в диалоге автоматически, когда собеседник читает чат. · В `app/chat.php` в payload сообщений добавлен `is_read`, а также helper `conversation_last_read_sent_message_id(...)` для лёгкого read-receipt sync. · В `chat_send_async` и `chat_messages_poll` (`index.php`) добавлен `read_upto_own_id`, чтобы фронт мог обновлять статусы уже отрисованных сообщений без перезагрузки.
Релиз v3.6.18
В контекстное меню сообщения мессенджера добавлен пункт `Будильник` (пинг-напоминание). · Будильник доступен для ваших сообщений и отправляет повторное уведомление собеседнику только если сообщение ещё не прочитано. · Добавлен route `chat_message_nudge` в `index.php` с проверками: сообщение принадлежит текущему пользователю, находится в этом диалоге и ещё не прочитано. · В `app/push.php` добавлен `push_notify_chat_message_reminder(...)` с отдельным типом `chat_nudge` и dedupe tag по сообщению.
Релиз v3.6.19
Начато внедрение голосовых сообщений в мессенджер: добавлена красная кнопка микрофона и аккуратное окно записи. · Голос записывается прямо в браузере/на устройстве и прикрепляется к сообщению как аудио-вложение. · В `views/chat.php` добавлены voice-recorder modal, UI состояния записи и интеграция с `MediaRecorder` (MVP) без изменения keyboard/fullscreen геометрии чата. · Записанный blob прикрепляется через существующий `chatFileInput` (`DataTransfer`) и уходит в уже существующий backend upload flow `chat_send_async` / `message_send`.
Релиз v3.6.20
Добавлен глобальный preloader при загрузке страниц сайта: пользователь видит аккуратный индикатор загрузки вместо “пустого” экрана. · Для PWA добавлен отдельный режим preloader `Идёт установка приложения…` при установке через системную кнопку. · В `views/partials/head.php` добавлен theme-aware overlay `#tsoyPreloader` (общий для сайта и установщика), работающий в светлой/тёмной теме без жёстко тёмного фона. · В `views/partials/scripts.php` добавлен runtime `window.__TSOY_PRELOADER` (show/hide/set) с автоскрытием после загрузки, показом на внутренних переходах и submit-формах (кроме AJAX submit с `preventDefault`).
Релиз v3.6.21
Исправлено переключение разделов в настройках: секции теперь открываются без ощущения полной перезагрузки страницы. · В `Контактах` длинные имена пользователей больше не раздвигают и не перестраивают иконки действий: текст ужимается/переносится внутри текстовой зоны, а кнопки остаются на месте. · В `views/admin_settings.php` клики по боковому меню настроек переведены на client-side section switch (`history.pushState`) вместо обязательной навигации по `settings_admin_*` route; `form action` динамически переключается по секции, поэтому сохранение остаётся корректным. · В `views/contacts.php` добавлены отдельные классы текстовой зоны (`contacts-person-*`), `contacts-actions` переведён в `nowrap`/`flex-shrink:0`, а длинные имена ограничены в 1–2 строки без сдвига иконок.
Релиз v3.6.22
Hotfix preloader: убран автопоказ на каждый внутренний клик, поэтому переключение секций настроек и переходы между чатами больше не должны “подвисать” из-за overlay. · Preloader сохранён там, где он реально полезен: первичная загрузка страницы, установка сайта и установка PWA. · В `views/partials/scripts.php` глобальный preloader переведён в explicit-flow режим: отключён автоперехват всех внутренних ссылок и обычных submit-форм. · Автопоказ preloader оставлен только для `install.php` submit и для форм с `data-preloader=\"1\"`; PWA install flow (`beforeinstallprompt`) сохранён отдельно.
Релиз v3.6.23
В `Профиле` длинные тексты в карточках друзей/страниц и в постах ведут себя аккуратнее: текст ужимается/переносится внутри своей зоны и не ломает действия/бейджи. · В `install.php` добавлена мини-анимация этапов установки (БД → миграции → админ → готово) с синхронизацией текста в preloader. · В `views/profile.php` добавлены clamp/overflow правила для карточек друзей/страниц и фикс action-зон в постах, чтобы длинные строки не выталкивали элементы интерфейса. · В `install.php` реализован submit-time stepper без изменения backend-логики: этапы анимируются на клиенте и обновляют `__TSOY_PRELOADER` в режиме `install-site`.
Релиз v3.6.24
Hotfix preloader: страницы `Профиль` и `Мессенджер` открываются заметно быстрее, overlay загрузки больше не ждёт долго все картинки/медиа. · Preloader теперь скрывается на этапе готовности DOM, а не только после полного `window.load`. · В `views/partials/scripts.php` логика initial preloader boot переведена на `DOMContentLoaded`/`interactive` + `requestAnimationFrame`, чтобы не блокировать UI на медиа-насыщенных страницах. · `window.load` и `pageshow` оставлены только как fallback-сигналы; добавлен hard fail-safe timeout на случай странных браузерных зависаний событий.
Релиз v3.6.25
Hotfix голосовых сообщений: голосовые `.webm` в мессенджере теперь отображаются плеером, а не только ссылкой на файл. · Фикс работает и для уже отправленных голосовых (по имени `voice_message_*`), и для новых записей. · В `app/files.php` добавлена нормализация MIME для browser voice-notes (`voice_message_*`), чтобы `.webm/.ogg/.m4a` не сохранялись как generic/video MIME. · В `app/chat.php` добавлен helper `chat_file_is_audio_like(...)`, а payload чата теперь отдаёт `file_is_audio` для корректного client render старых и новых голосовых.
Релиз v3.6.26
На главной странице блок недавних файлов больше не растягивает экран вниз: по умолчанию показываются первые 3 файла. · Остальные файлы открываются кнопкой `Показать ещё файлы` (порциями по 3), как в разделе новостей. · В `views/home.php` лента файлов переведена на существующий механизм `data-load-more-root` из `views/layout.php` без добавления нового JS-кода. · Для элементов файлов добавлено серверное начальное скрытие (`d-none`) после первых 3 записей, чтобы список был компактным сразу при рендере страницы.
Релиз v3.6.27
Hotfix голосовых сообщений в мессенджере: voice-notes отображаются компактной одной строкой без второй строки с именем файла. · Визуал голосового сообщения стал тоньше и аккуратнее, ближе к обычной строке сообщения. · В `views/chat.php` voice-note рендер (`voice_message_*`) уже использует отдельный inline-layout без file-link; в релиз включён hotfix компактности CSS (`.chat-voice-inline-row`, `.chat-audio-clip.is-voice-note`). · Серверный и polling JS рендеры голосовых сообщений синхронизированы: для voice-notes не выводится отдельная строка имени файла.
Релиз v3.6.28
Голосовые сообщения в мессенджере: один тап по микрофону запускает запись, повторный тап останавливает запись и сразу отправляет голосовое. · Если запись не удалось отправить автоматически, голосовое остаётся прикреплённым в composer и можно отправить вручную. · В `views/chat.php` обычный click/tap микрофона переведён на toggle-логику записи (`start/stop+auto-send`) без изменения mobile composer/fullscreen геометрии. · Добавлен helper программной отправки через существующий async submit (`chat_send_async`) после авто-прикрепления voice blob в composer.
Релиз v3.6.29
Голосовые сообщения в чате теперь воспроизводятся одинаково на ПК и телефоне: компактной одной кнопкой play/pause. · У voice-note больше нет зависимости от урезанных native audio-controls браузера на десктопе. · В `views/chat.php` voice-notes (`voice_message_*`) переведены на custom mini-player (кнопка + hidden audio) в server-side и polling-render. · Добавлена JS-делегация управления воспроизведением (play/pause, синхронизация иконки, автопауза предыдущего голосового).
Релиз v3.6.30
В `Настройки -> Внешний вид` добавлены персональные настройки preloader: режим (`умный / только установка-PWA / выключить`), компактный вид и показ текста. · Preloader теперь можно настроить под себя по каждому профилю аккаунта (профиль = отдельный user). · В `users` добавлены персональные UI-поля preloader (`ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text`) с загрузкой в session snapshot и применением в `views/partials/scripts.php`. · В `views/partials/head.php` добавлены вариации preloader (`compact`, скрытие текста), а runtime учитывает пользовательский режим без ломки install/PWA сценариев.
Релиз v3.6.31
Hotfix голосовых сообщений на телефоне: mini-player voice-note снова стабильно воспроизводится по тапу. · Поведение mini-player синхронизировано для mobile/desktop (play/pause одной кнопкой). · В `views/chat.php` для voice mini-player добавлен mobile-safe `touchend` handler с подавлением дубля `click`, чтобы iPhone/Safari не терял тап. · Скрытый `<audio>` переведён с `display:none` на visually-hidden класс; добавлен `audio.load()` перед `play()` для лучшей совместимости мобильных браузеров.
Релиз v3.6.32
В Брендинге добавлена отдельная настройка `Иконка PWA` (опционально) для установленного приложения. · Если PWA-иконка не задана, приложение теперь использует `favicon`, а затем `лого` как fallback. · Route `index.php?r=manifest` теперь динамически подменяет `icons` (и shortcut icons) из настроек брендинга вместо жёстких `/public/icons/...`. · В `views/partials/head.php` `apple-touch-icon` переведены на динамический PWA icon с cache-bust, а `manifest` cache-bust учитывает смену иконки.
Релиз v3.6.33
В PWA исправлен просмотр файлов: теперь файл открывается во встроенной странице-просмотрщике с кнопкой `Назад`, а не “захватывает” приложение без пути назад. · Кнопка `Открыть` в файловом проводнике тоже использует этот встроенный просмотр в standalone/PWA. · Добавлен route `index.php?r=file_viewer` с безопасной проверкой доступа к файлу и возвратом по `back` URL. · В `views/partials/scripts.php` добавлен standalone-PWA перехват ссылок `index.php?r=view&id=...` с перенаправлением во встроенный просмотрщик вместо raw-file response.
Релиз v3.6.34
Hotfix mini-плеера голосовых на телефоне: воспроизведение по тапу снова стабильно запускается. · Поведение mini-player выровнено между iPhone/Android и ПК (одна кнопка play/pause). · В `views/chat.php` mini-player получил прямые обработчики `touchend/click` на кнопке (а не только делегирование через контейнер сообщений) с защитой от двойного срабатывания. · Убран рискованный pre-play `audio.load()` как основной путь; добавлен fallback reload только при ошибке `play()`.
Релиз v4.0.0
Новый формат приложения `messenger`: отдельный упрощённый режим только для Контактов и Мессенджера с прямым открытием чата. · Страница `Админ → Пользователи` полностью переработана: аккаунт и его профили теперь управляются в одной карточке. · В модель пользователей добавлены `app_mode`, `group_id`, `group_role`, `allow_multiprofile`, `admin_password_hint`; добавлены таблицы `groups`, `group_members`, `group_bridges` и миграции/индексы для них. · Реализована backend-видимость по группам и мостам в `users_directory`, `contacts_list`, `conversation_get_or_create`, `conversations_for_user` и проверках `chat_start`/добавления контактов.
Релиз v4.1.0
Управление группами и мостами вынесено в отдельную страницу `Дашборд → Группы и мосты` с полным управлением: создание, переименование, удаление групп и мостов, просмотр участников. · Страница `Пользователи` очищена от группового управления, оставлены только аккаунты и создание; добавлена ссылка на новую страницу групп. · Добавлены backend-функции `group_rename()`, `group_delete()`, `group_bridge_delete()` в `app/users.php` для полного CRUD-управления группами и мостами. · Новый route `admin_groups` в `index.php` с POST-обработчиками: `create_group`, `rename_group`, `delete_group`, `set_bridge`, `delete_bridge`.
Релиз v4.2.0
В мессенджере при записи голосового сообщения появляется красная кнопка-корзина для отмены записи (как в Telegram). Работает и при тапе, и при удержании. · Добавлена функция «Удалить у всех»: отправитель может удалить своё сообщение не только для себя, но и для собеседника. · Добавлена кнопка `#voiceCancelBtn` (`.chat-voice-cancel-btn`) в inputbar мессенджера; появляется при `voiceTapRecording`/`voiceHoldRecording`, вызывает `voiceRecResetState()` для отмены. · В `app/chat.php` добавлена `message_delete_for_all()` — физическое удаление сообщения и его реакций; доступно только отправителю.
Релиз v4.3.0
Создана отдельная страница «Новости» со всеми админ- и системными новостями, пагинацией и кнопкой «Показать ещё». · На дашборде в блоке «Новости» теперь показываются только 2 последних записи и ссылка «Все новости →». · Создан `views/news.php` — standalone-страница новостей с `page_top`, раздельными блоками admin/system news и load-more (initial=10). · Добавлен маршрут `case "news"` в `index.php` затягивающий `views/news.php`.
Релиз v4.4.0
Администрирование новостей вынесено из дашборда сотрудников на отдельную страницу с полным CRUD (создание, чтение, редактирование, удаление). · Файловый проводник «Мои файлы» полностью переписан: карточный/списочный вид, drag-n-drop файлов в папки, зона загрузки, контекстное меню, иконки по типу файла, переключатель grid/list. · В `app/news.php` добавлены `news_get()` и `news_update()` для CRUD новостей. · В `index.php` добавлен маршрут `news_update` (POST, csrf, audit_log).
Релиз v4.5.0
Мессенджер переработан в стиле Telegram: кнопка «корзина» при записи голосового теперь слева, заголовок чата стал overlay поверх сообщений (больше полезной площади), упрощённый хедер (только «Назад» + имя/аватар). · Нажатие на имя/аватар в чате открывает карточку пользователя (Telegram-style slide-in панель) с действиями: звонок, ссылка, профиль, очистить чат. · `views/chat.php` — voiceCancelBtn перемещён перед attachBtn в HTML (trash слева при записи). · `views/chat.php` — заменён `.chat-dialog-head` на `.chat-overlay-head` (position: absolute, backdrop-filter, overlay поверх сообщений).
Релиз v4.6.0
Создана единая дизайн-система проекта (14 переиспользуемых компонентов): карточки, hover-эффекты, стеклянные панели, навигация, статусные индикаторы, зоны загрузки и др. · Unification поверхностных переменных (light/dark × soft/balanced/strong) — 6 тем теперь задаются в одном месте вместо дублирования в каждом view. · Создан `public/css/design-system.css` (382 строки, 14 компонентов): `.t-surface`, `.t-stat-card`/`.t-stat-grid`, `.t-card-hover`, `.t-info-card`, `.t-card-frosted`, `.t-section`/`.t-section-title`, `.t-page-border`, `.t-summary-grid`, `.t-status-pill`, `.t-list-hover`, `.t-status-dot`, `.t-sticky-bar`, `.t-nav-item`, `.t-upload-zone`. · В `views/partials/head.php` подключён `public/css/design-system.css` перед inline `<style>`.
Релиз v5.0.0
Система «Группы» переименована в «Домены» — организационные единицы теперь называются доменами. · Маршрут `admin_groups` → `admin_domains`; навигация, дашборд и все UI-тексты обновлены. · Миграция БД: таблицы `groups`→`domains`, `group_bridges`→`domain_bridges`, `group_members`→`domain_members`; колонки `group_id`→`domain_id`, `group_role`→`domain_role`, `is_global_group`→`is_root_domain`, `group_a_id`→`domain_a_id`, `group_b_id`→`domain_b_id`. · Поддержка MySQL и SQLite: `ALTER TABLE RENAME`, `RENAME COLUMN` / `CHANGE COLUMN` в зависимости от драйвера.
Релиз v5.1.0
Маршрут `dashboard` (файловый проводник) переименован в `skybox` — SkyBox, личное облачное хранилище. · Маршрут `staff` (панель администратора) переименован в `dashboard` — Дашборд. · `views/dashboard.php` → `views/skybox.php`; `views/staff.php` → `views/dashboard.php`; `views/admin.php` → `views/filehub.php`. · `index.php`: маршруты, capability map, case-блоки и все redirect/fallback URL обновлены.
Релиз v5.2.0
FileHub переписан на единый с SkyBox карточный интерфейс (grid/list, sidebar, поиск, breadcrumbs). · Выпадающее меню профиля полностью переработано: чистый список ссылок, компактное переключение профилей, убрана сетка кнопок. · `views/filehub.php` переписан с табличной разметки на `cloud-file-grid`/`cloud-file-card` из SkyBox. · `views/layout.php`: dropdown `.topbar-profile-menu` и модальное окно `#userProfilesModal` заменены новой разметкой с `.tpm-*` и `.upm-*` классами.
Релиз v5.3.0
Поле «Отображаемое имя» разделено на «Имя» и «Фамилия» — два отдельных поля повсюду в системе. · При регистрации теперь обязательно указать имя и фамилию. · Миграция: добавлены колонки `first_name` и `last_name` в таблицу `users`. · Колонка `display_name` сохранена для обратной совместимости — автоматически вычисляется из `first_name + last_name`.
Релиз v5.4.0
Настройка Preloader перенесена из личных настроек пользователя в глобальные настройки администратора (раздел «Дизайн»). · Push-подписки: автоматическая дедупликация устройств — при переподписке с того же устройства старая подписка заменяется. · Preloader: параметры `preloader_mode`, `preloader_compact`, `preloader_show_text` перенесены в таблицу `settings`. · Per-user параметры `ui_preloader_mode`, `ui_preloader_compact`, `ui_preloader_show_text` больше не используются (колонки сохранены для совместимости).
Релиз v5.5.0
Защита от брутфорса: ограничение попыток входа (5 за 15 мин) с автоматической блокировкой по IP+логину. · Минимальная длина пароля — 8 символов (регистрация, смена пароля, создание пользователя). · Security headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS. · .htaccess deny для директорий `app/` и `storage/` — прямой доступ запрещён.
Релиз v5.6.0
Редактирование профиля: страница переверстана на CSS Grid — блоки «Смена пароля» и «Уведомления» теперь в боковой колонке справа (1fr + 380px). · Политики: галочки для admin и admin_tester разблокированы при редактировании global_admin. · Новые функции: `user_role_rank()`, `user_can_see_password()`, `user_get_password_hint()`, `domain_get_by_code()`, `domain_generate_short_code()`, `domain_regen_code()`. · `domain_create()` генерирует уникальный 3-char код вместо slug-транслитерации.
Релиз v5.7.0
Дашборд: полностью переработанная панель с KPI-виджетами — пользователи, сообщения, файлы, контент, звонки, аудит. · Дашборд: лента последних действий (10 записей) с иконками по типу операции и карточка «Новые пользователи». · Новая функция `dashboard_stats()` в `app/health.php` — агрегированная статистика из 15+ таблиц за один вызов. · Настройки дашборда: `dashboard_widgets_json`, `dashboard_refresh_interval`, `dashboard_show_activity`, `dashboard_compact` в `settings_defaults()`.
Релиз v5.8.0
Настройки: иконки Bootstrap Icons у каждого пункта сайдбара (палитра, щит, шестерёнка, телефон, БД и др.) во цветных плашках. · Настройки: быстрый поиск по всем разделам — поле с debounce-фильтрацией, счётчик совпадений, горячая клавиша Ctrl+K. · CSS: новые классы `.admin-settings-search`, `.admin-settings-side-icon`, `.admin-settings-section-hdr`, `.js-dirty-badge`, `.admin-settings-kbd-hint`. · CSS: анимация `settingsFadeIn` (opacity + translateY), `savebarPulse` для индикации dirty-state.
Релиз v5.8.1
Удаление пользователей: исправлен баг — удалённые пользователи теперь скрываются из основного списка, кнопка «Показать удалённых» для просмотра. · Удаление пользователей: бейдж «удалён» и кнопка «Восстановить» в карточке пользователя. · `users_accounts_with_profiles()` принимает параметр `$includeDeleted` — по умолчанию скрывает `is_deleted=1`. · Новая функция `user_restore()` для восстановления soft-deleted пользователей.
Релиз v5.8.2
Полное удаление аккаунта: администратор может безвозвратно удалить пользователя и все его данные (сообщения, файлы, посты, профили). · Полное удаление аккаунта: кнопка «Полное удаление» в панели управления пользователями с усиленным подтверждением. · Новая функция `user_delete_hard()` — полная очистка всех данных пользователя из 31+ таблиц и файловой системы (аватары, обложки, загруженные файлы). · Ручная очистка таблиц без FK CASCADE: `domain_members`, `short_links`, `boards`, `rtc_*` таблицы; nullify `created_by_user_id` в `domains` / `domain_bridges`.
Релиз v5.8.3
База данных: новая опция «Подключиться без миграции» — позволяет переключить конфиг на существующую БД с данными без переноса и без удаления данных. · Предотвращает потерю данных при повторном подключении к MySQL после обновления сайта (когда конфиг сбрасывается на SQLite). · Параметр `skip_migration` в admin_db POST-обработчике: проверяет подключение, запускает `ensure_schema()` (CREATE IF NOT EXISTS + инкрементальные миграции) и `ensure_mysql_utf8mb4()`, но НЕ вызывает `migrate_database()` / `db_truncate()`. · Разрешена отправка формы при `target === current` в режиме reconnect (для переподключения к той же БД).
Релиз v5.8.4
Доменная изоляция: администратор домена теперь видит в разделе «Пользователи» только пользователей своего домена, а не всех. · Новая политика «Мосты для доменных администраторов» (Настройки → Доступ): не видеть / только просмотр / полный доступ к пользователям мостовых доменов. · `users_accounts_with_profiles()` принимает `?array $filterDomainIds` — SQL фильтрует `domain_id IN (…)`. · Новые хелперы: `is_root_domain_admin()`, `admin_bridged_domain_ids()`, `admin_visible_domain_ids()`, `admin_can_manage_user()`, `admin_can_view_user()`.
Релиз v5.8.5
Дашборд: статистика фильтруется по домену — администратор домена видит метрики только своего домена, а не всего сервиса. · Политики: доменные политики (мосты, корневой админ, домен по умолчанию) перенесены из Настроек на страницу «Политики» для единообразного управления. · Новая функция `dashboard_stats_for_domains(array $domainIds)` в `app/health.php` — статистика, ограниченная набором доменов. · `views/dashboard.php` использует `admin_visible_domain_ids()` для выбора `dashboard_stats()` или `dashboard_stats_for_domains()`.
Релиз v5.8.6
Мессенджер: полная переработка интерфейса в стиле Telegram — боковой список диалогов, панель переписки, адаптивная мобильная раскладка. · Мессенджер: голосовые сообщения, эмодзи-пикер, вложения файлов из облака и устройства. · views/chat.php: 6589 → 2410 строк (−63%), IIFE-архитектура с 23 секциями, 98 функций, 51 слушателей событий. · views/profile.php: 2338 → 1247 строк (−47%), CSS-переменные через .pf-* namespace, Bootstrap 5.3.3 интеграция.
Релиз v5.8.7
Исправлена ошибка FK-ограничения при переключении с SQLite на MySQL: таблица news больше не требует существующего пользователя для системных записей. · news: author_user_id изменён с INT NOT NULL на INT NULL DEFAULT NULL; FK-ограничение fk_news_user удалено. · Миграция Stage 10.21: DROP FOREIGN KEY, MODIFY COLUMN, UPDATE author_user_id = 0 → NULL для существующих MySQL-установок.
Релиз v5.8.8
Исправлена ошибка «Incorrect string value» при переключении на MySQL: эмодзи в новостях и чейнджлоге теперь корректно сохраняются. · ensure_mysql_utf8mb4() вызывается ДО ensure_schema() — SET NAMES utf8mb4 теперь действует до любых INSERT. · Список таблиц в ensure_mysql_utf8mb4 расширен с 21 до 39 (добавлены domains, boards, push_*, short_links, profile_media_items и др.).
Релиз v5.8.9
Профиль: исправлено отображение аватара и обложки (неверное имя поля avatar_file_id → avatar_path). · Мессенджер: сообщения теперь отображаются в цветных облачках (свои — акцентные, чужие — серые). · profile.php: avatar_file_id → avatar_path, cover_file_id → cover_path (6 мест). · chat.php: добавлены CSS-классы msg-own / msg-other на элементы сообщений (PHP + JS).
Релиз v5.8.10
Мессенджер: окно чата теперь корректно помещается в экран на любом устройстве (ПК и мобильные). · layout.php: content-canvas-mode → flex column с height:100dvh для корректного заполнения viewport. · chat.php: messenger-shell заменён calc(100dvh-140px) на flex:1 + min-height:0 — автоматическое заполнение оставшегося пространства.
Релиз v5.8.11
Профиль: кнопка «Написать» теперь открывает диалог с пользователем, а не пустой мессенджер. · Мессенджер: заголовок «Мессенджер» скрывается когда активен диалог (и на ПК, и на мобильных) — больше места для сообщений. · profile.php: ссылка «Написать» peer= → user_id= (матчит параметр в chat_start роуте). · chat.php: .chat-page-head скрывается на всех брейкпоинтах когда есть активный чат (display:none!important).
Релиз v5.8.12
Мессенджер: заголовок скрыт на мобильных — диалоги занимают весь экран. · Мессенджер: кнопка действий (⋯) теперь внутри облачка сообщения, а не за его пределами. · chat.php: .chat-page-head display:none!important на @media ≤991.98px (скрыт всегда на мобильных). · chat.php: .msg-actions-btn перенесён внутрь bubble (top:.25rem right:.25rem вместо left/right:-.8rem).
Релиз v5.8.13
Мессенджер: панель ввода теперь всегда видна на экране, страница не прокручивается. · layout.php: html/body/app-shell получают height:100dvh + overflow:hidden через :has(.content-canvas-mode). · layout.php: sidebar ограничен 100dvh с overflow-y:auto в canvas-режиме.
Релиз v5.8.14
Мессенджер: исправлены read receipts — отметка «прочитано» снова обновляется без перезагрузки страницы. · Мессенджер: исправлен экран звонка — окно звонка теперь корректно открывается и закрывается. · index.php: добавлен JSON endpoint `chat_mark_read` (CSRF + проверка участника диалога). · index.php: добавлен route `chat_file` для `admin_chat_view` с проверкой прав `admin/users`.
Релиз v5.8.15
Мессенджер: панель ввода закреплена внизу экрана на ПК и мобильных, без провала по высоте. · Мессенджер: кнопки отправки/микрофона снова работают по ожидаемой логике (пусто — микрофон, есть текст — отправка). · views/chat.php: выровнена мобильная/desktop вёрстка compose-зоны, исправлены conditionals рендера send/mic. · views/chat.php: интегрирован Picmo (`public/vendor/picmo/*`) вместо тяжёлого рантайма старого picker.
Релиз v5.8.16
Звонки в мессенджере: исправлен сценарий «Связь: ожидание» без подключения — звонки снова устанавливаются. · Мессенджер на телефоне: устранён правый зазор, чат и зона ввода снова растягиваются на всю ширину экрана. · index.php: call/rtc роуты добавлены в whitelist messenger-mode (`call_start/call_poll/call_signal_send/...`) — больше нет редиректа в HTML для JSON API. · app/chat.php: `call_is_participant()` получил fallback на `caller/callee` для legacy/частично мигрированных записей `rtc_call_members`.
Релиз v5.8.17
Мобильный чат: устранён нижний «подбородок» и восстановлена корректная полноэкранная геометрия в mobile/PWA. · Мессенджер: новые сообщения снова появляются строго снизу, история подгружается только вверх. · views/chat.php: mobile fullscreen переведён на единый safe-area (компенсация только в composer), `body.chat-mobile-fullscreen` больше не дублирует нижний inset. · views/chat.php: `chatJumpBottom` вынесен из потока сообщений; `appendMessages()` всегда добавляет в конец, `prependMessages()` — только в начало.
Управление жизненным циклом комнат звонков
- Создатель может завершать комнату звонка. - Админ может закрывать и удалять публичные комнаты.Читать полностью
- Создатель может завершать комнату звонка.
- Админ может закрывать и удалять публичные комнаты.
Оптимизация старта интерфейса
- Перенесены второстепенные polling-задачи в idle-фазу. - Снижен пиковый отклик главного потока при открытии страниц.Читать полностью
- Перенесены второстепенные polling-задачи в idle-фазу.
- Снижен пиковый отклик главного потока при открытии страниц.
Hotfix 2.3.9: стабилизация текста
- Проведена чистка поврежденных строк интерфейса. - Обновлены сообщения и статусы в основных маршрутах.Читать полностью
- Проведена чистка поврежденных строк интерфейса.
- Обновлены сообщения и статусы в основных маршрутах.
Hotfix 2.3.10: исправление кодировки
- Удалены поврежденные текстовые строки из ключевых экранов. - Исправлены уведомления профиля, чатов и панели. - Подготовлена база для финальной стабилизации.Читать полностью
- Удалены поврежденные текстовые строки из ключевых экранов.
- Исправлены уведомления профиля, чатов и панели.
- Подготовлена база для финальной стабилизации.
Hotfix 2.3.11: полная правка кодировки
- Восстановлен index.php из стабильной базы без поврежденных строк. - Исправлены системные сообщения и заголовки в маршрутах и админ-разделах. - Очищены тексты новостей: теперь только нормальная кириллица.Читать полностью
- Восстановлен index.php из стабильной базы без поврежденных строк.
- Исправлены системные сообщения и заголовки в маршрутах и админ-разделах.
- Очищены тексты новостей: теперь только нормальная кириллица.
Hotfix 2.3.12: исправлен экран звонка по ссылке
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room. - Исправлены поврежденные символы в views/call_room.php и views/admin.php. - Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.Читать полностью
- Восстановлены тексты и элементы интерфейса на странице /index.php?r=call_room.
- Исправлены поврежденные символы в views/call_room.php и views/admin.php.
- Добавлено закрытие комнаты создателем/админом прямо из экрана звонка.
Policy 2.3.13: UTF-8 без BOM всегда
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM. - Добавлен .editorconfig с фиксированным charset=utf-8. - В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.Читать полностью
- В проект добавлено обязательное правило кодировки: только UTF-8 without BOM.
- Добавлен .editorconfig с фиксированным charset=utf-8.
- В релизный процесс встроена автоматическая проверка scripts/check-encoding.ps1.
Call Quality 2.3.14: стабильнее звук и соединение
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках. - Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate. - Включено автоматическое ICE-переподключение при `d…Читать полностью
- В звонках убраны жестко прошитые STUN-серверы: теперь ICE/STUN/TURN задаются в админ-настройках.
- Добавлены параметры качества аудио: echo/noise suppression, AGC, channel count, sample rate, max bitrate.
- Включено автоматическое ICE-переподключение при `disconnected/failed`, чтобы звонок не обрывался на смене сети.
Call Stability 2.3.15: быстрый отклик без «убийства» сервера
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов. - Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий. - Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.Читать полностью
- Для звонков внедрён адаптивный polling: один активный запрос за цикл, без наложения и штормов.
- Добавлены таймауты, backoff при ошибках сети и fast-poll после сигналов/действий.
- Алгоритм применён в личных звонках, комнатах по ссылке и админ-мониторинге.
Admin DB Tools 2.3.16: импорт/экспорт БД и безопасная очистка
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта. - Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads. - Импорт выполн…Читать полностью
- В разделе администрирования БД добавлены экспорт базы в JSON и обратный импорт JSON-дампа проекта.
- Добавлены операции обслуживания: очистка RTC-сигналов/комнат, очистка старого аудита, удаление soft-deleted файлов и файлов-сирот в uploads.
- Импорт выполняется с полной заменой данных таблиц приложения; перед импортом рекомендуется сделать экспорт БД и копию папки storage/.
Hotfix 2.3.17: emoji снова отправляются в мессенджере (MySQL utf8mb4)
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях. - Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`). - Добавлена автоматическая проверка и конвертация старых таблиц в ut…Читать полностью
- Исправлена критическая ошибка `Incorrect string value` при отправке смайликов/emoji в сообщениях.
- Для MySQL-подключения принудительно включён utf8mb4 (`SET NAMES` / `SET CHARACTER SET`).
- Добавлена автоматическая проверка и конвертация старых таблиц в utf8mb4 при запуске сайта (только при необходимости, без постоянных ALTER).
Admin DB 2.3.18: диагностика utf8mb4 / emoji для MySQL
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji. - Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть). - Это диагностический ре…Читать полностью
- В разделе администрирования БД добавлен отчёт по кодировке MySQL для контроля поддержки emoji.
- Отчёт показывает default charset/collation базы, количество таблиц проекта и список таблиц/колонок с не-utf8mb4 кодировкой (если есть).
- Это диагностический режим (только чтение метаданных), чтобы быстро проверять состояние после миграций и импортов.
Messenger Emoji 2.3.19: полноценный picker + недавние + клоун 🤡
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление. - Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме). - В быстрый набор добавлен клоун 🤡; вы…Читать полностью
- Блок смайликов в мессенджере переработан: добавлены быстрые emoji, секция недавних и более удобное управление.
- Подключена библиотека emoji picker с поиском и категориями (локально, без зависимости от CDN в рантайме).
- В быстрый набор добавлен клоун 🤡; выбранные emoji сохраняются в недавние (localStorage).
Messenger Hotfix 2.3.20: сообщения видны сразу в открытом чате
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог. - Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы. …Читать полностью
- Исправлена проблема, когда уведомление о новом сообщении приходило, но в открытом чате сообщение не отображалось до повторного входа в диалог.
- Добавлен инкрементальный polling новых сообщений и дорисовка сообщений прямо в ленте без перезагрузки страницы.
- Если пользователь находится внизу чата, новые сообщения автоматически прокручиваются в видимую область.
Messenger Hotfix 2.3.21: список диалогов обновляется без перезахода
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата. - Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся…Читать полностью
- Исправлена проблема, когда новые сообщения были видны по уведомлениям, но список диалогов (превью/непрочитанные) обновлялся только после повторного открытия чата.
- Добавлен polling списка диалогов с компактной JSON-выдачей и обновлением только изменившихся данных.
- В открытом чате после прихода нового сообщения автоматически ускоряется обновление списка диалогов для быстрого показа превью и бейджей.
Messenger UI 2.3.22: PWA-интерфейс ближе к Telegram/WhatsApp
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается. - Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и комп…Читать полностью
- Переработан интерфейс мессенджера: список диалогов стал удобнее (аватары, время, превью, unread badge), а окно чата выглядит аккуратнее и быстрее читается.
- Обновлены шапка диалога, лента сообщений и поле ввода в стиле PWA-мессенджера: удобнее на ПК и компактнее на телефоне.
- UI-рефактор выполнен без изменения рабочих API сообщений и звонков, чтобы не ломать стабильность проекта.
Hotfix 2.3.23: стабильная авторизация (PWA/мобильные сессии)
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт. - Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS). - Добавлено скользящее продление session cook…Читать полностью
- Исправлена проблема, когда авторизация слетала и приходилось часто заново входить в аккаунт.
- Для PHP-сессий настроены стабильные cookie-параметры (30 дней, httponly, SameSite=Lax, корректный secure при HTTPS).
- Добавлено скользящее продление session cookie и project-local хранение сессий (storage/sessions), чтобы уменьшить влияние server-wide очистки сессий.
Messenger UX 2.3.24: фиксированная форма + lazy history x10 + glass mobile
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа. - История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а н…Читать полностью
- На ПК исправлена главная проблема длинных диалогов: форма ввода сообщений закреплена поверх ленты и всегда видна, больше не нужно листать страницу до самого низа.
- История сообщений теперь догружается по 10 сообщений при прокрутке вверх (lazy loading), а новые сообщения подгружаются вниз компактными пачками.
- На мобильном/PWA экране восстановлен стеклянный визуальный стиль мессенджера (glass-эффект).
Messenger Hotfix 2.3.25: последние сообщения + форма ввода видны сразу
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт. - Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна…Читать полностью
- Исправлен баг на ПК, из-за которого при открытии длинного диалога форма ввода оказывалась внизу страницы и до неё приходилось прокручивать весь сайт.
- Теперь по умолчанию открываются последние сообщения, а форма ввода закреплена поверх ленты и всегда видна в окне чата.
- Дополнительно стабилизирован glass-вид мессенджера на телефоне/PWA после UI-рефакторинга.
Notifications Center 2.3.26: быстрые настройки + проверка доставки + mobile chat keyboard fix
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA. - Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Se…Читать полностью
- Добавлен отдельный центр уведомлений: быстрые переключатели Push/браузерных уведомлений и звука, статус разрешений, Service Worker и режима PWA.
- Добавлена кнопка проверки уведомления на устройство и улучшена логика доставки через единый runtime helper (Service Worker + fallback на Notification API).
- В мессенджере на мобильных исправлен лишний отступ между клавиатурой и полем ввода: окно чата теперь синхронизируется с VisualViewport, поле ввода ведёт себя стабильнее.
Profile & Social 2.3.27: about-страница, лайки постов, загрузка файлов с устройства
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото). - В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников…Читать полностью
- Добавлена публичная страница `/about` с описанием проекта и карточками людей, внёсших вклад (с фото).
- В `Профиль → Редактирование` (для администратора) появился блок управления страницей «О проекте»: текст, авторы, роли, заметки и загрузка фото участников с устройства.
- В постах профиля добавлены лайки и кнопка «Ссылка на пост».
- Убраны дефолтные кнопки «Скачать/Магнит» под вложениями в ленте постов; ссылки на файлы показываются только если владелец явно разрешил скачивание.
- При создании и редактировании постов теперь можно прикреплять файлы напрямую с устройства, а не только выбирать из облака.
Hotfix 2.3.28: кириллица в центре уведомлений
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений. - Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).Читать полностью
- Исправлено битое flash-сообщение после сохранения настроек в центре уведомлений.
- Причина: в `index.php` оставалась строка в mojibake-виде; заменена на нормальную кириллицу (`Настройки уведомлений сохранены.`).
Hotfix 2.3.29: полная зачистка кракозябр в index.php + усиленный encoding-check
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`. - Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и уст…Читать полностью
- Исправлены оставшиеся битые строки в `index.php` (flash-сообщения и заголовки разделов), включая примеры из `Центра уведомлений` и `Админ → База данных`.
- Проведён полный проход по рабочим файлам проекта: активный mojibake был обнаружен в `index.php` и устранён.
- Усилен `scripts/check-encoding.ps1`: поиск кракозябр теперь работает по кодовым точкам (`U+00C2/U+00C3/U+00D0/U+00D1`), чтобы такие случаи не проходили в релиз.
TSOY.CLOUD 3.0: большой апдейт профилей и мультипрофилей
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону. - `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользова…Читать полностью
- Продолжена большая переработка профиля: мобильная вёрстка блоков `Друзья / Страницы / Медиа`, карточки постов и модалка комментариев стали аккуратнее и ближе к новому шаблону.
- `Фото / Видео / Аудио` оформлены как отдельные ручные галереи профиля: пользователь сам решает, что показать в профиле.
- Полностью обновлён UX мультипрофилей в шапке: понятный dropdown с быстрым переключением и новая модалка управления профилями аккаунта (аватары, статусы, действия, выбор профиля для `/about`).
- Сохранена вся текущая логика проекта (посты, друзья, роли, about, мультипрофили), изменения сосредоточены на удобстве и визуале.
TSOY.CLOUD 3.1.0: новый конструктор страниц + единый файловый проводник для выбора медиа
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок. - Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через…Читать полностью
- Переработан конструктор пользовательских страниц: теперь можно собирать не только галереи, но и статьи, обучающие гайды, плееры с роликами и блоки ссылок.
- Убрано ручное указание ID файлов в конструкторе страниц: выбор изображений и видео теперь идёт через единый проводник файлов (папки, поиск, фильтры по типам).
- Раздел «Медиа» в профиле также переведён на тот же проводник для ручного наполнения галерей фото/видео/аудио.
- Подготовлена база для дальнейшего переиспользования этого picker-компонента в других разделах проекта.
TSOY.CLOUD 3.2.0: большой PWA-апдейт (уведомления, офлайн-кеш, desktop/mobile режим)
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile). - Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-увед…Читать полностью
- Усилен PWA-режим на ПК и смартфонах: обновлён manifest (ярлыки быстрых действий, launch-поведение, совместимость desktop/mobile).
- Улучшена работа уведомлений и звонков: клик по уведомлению теперь надёжнее открывает нужный раздел/чат, включая fallback-уведомления без Service Worker.
- Файловый офлайн-кеш стал удобнее: кнопки офлайн-режима показывают актуальный статус уже закешированных файлов, подготовлен runtime API для управления кешем.
- Service Worker синхронизирован и усилен для PWA-сценариев (deep-link notificationclick, безопасная обработка Range-запросов для медиа).
TSOY.CLOUD 3.3.0: единая система оформления + компактный мессенджер
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными. - В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельна…Читать полностью
- Проведена большая унификация визуального стиля проекта: карточки, навигация, формы и модалки стали более согласованными.
- В `Настройки → Оформление` добавлены новые настройки дизайна: шрифт, масштаб текста, ширина контента, контраст поверхностей и отдельная плотность мессенджера.
- Мессенджер получил более компактные облака сообщений (в том числе Telegram-like режим) без вмешательства в мобильную геометрию поля ввода и клавиатуры.
- Дизайн-ручки реализованы через общие UI-токены и остаются совместимыми с PWA-режимом.
TSOY.CLOUD 3.3.1: мессенджер (единый проводник вложений + fix меню сообщений) и улучшенная связка с “Оформлением”
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX. - Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не пр…Читать полностью
- В мессенджере выбор вложений из облака переведён на единый файловый проводник (как в профиле и конструкторе страниц): папки, поиск, фильтры, превью и нормальный mobile UX.
- Исправлено перекрытие меню редактирования/удаления сообщения: dropdown больше не прячется под соседними сообщениями.
- Настройки `Оформление` сильнее связаны с мессенджером: ширина контента работает в canvas-режиме, а плотность/контраст теперь заметно влияют на чат.
- Геометрия composer/клавиатуры в чате не менялась, чтобы не вернуть баг с “подбородком” на iPhone.
TSOY.CLOUD 3.3.2: центр уведомлений — сначала уведомления, потом настройки
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений. - Обновлён заголовок верхнего блока для более понятной логики экрана.Читать полностью
- В центре уведомлений изменён порядок блоков: сначала показывается блок «Все уведомления» (события/сводка), а затем блок настроек уведомлений.
- Обновлён заголовок верхнего блока для более понятной логики экрана.
TSOY.CLOUD 3.3.3: контакты и мессенджер теперь в одном визуальном стиле
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек. - Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессендже…Читать полностью
- Страница «Контакты» приведена к визуальному стилю мессенджера: одинаковые поверхности, контуры, мягкий градиент шапки и тип карточек.
- Стили контактов теперь также реагируют на настройки `Оформление` (`Контраст поверхностей` и `Плотность`), как и мессенджер.
TSOY.CLOUD 3.3.4: единый проводник в профиле и нормальное админ-хранилище с папками
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов. - В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/П…Читать полностью
- Проводник в профиле при выборе обложки и вложений поста переведён на единое ядро (как в мессенджере): больше нет разрозненных списков/селекторов.
- В модалке вложений поста объединены блоки «Из облака», «С устройства» и «Ссылки», чтобы вложения с телефона/ПК работали стабильнее.
- Админский экран `/index.php?r=admin` переименован в «Хранилище проекта» и получил папочную структуру с фильтрами по владельцу и папке.
TSOY.CLOUD 3.3.5: профиль (двойные проводники/лишние кнопки) и mobile-fix клипсы в мессенджере
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник. - Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена». - Копирование ссылок на…Читать полностью
- В профиле устранён двойной проводник при выборе обложки поста: теперь открывается только новый единый проводник.
- Исправлена ошибка разметки, из-за которой у опубликованных постов могли появляться лишние кнопки «Сохранить / Отмена».
- Копирование ссылок на профиль и пост переведено на фоновый toast «Скопировано» вместо модального alert.
- В мессенджере клипса (`📎`) теперь открывается через явный JS fallback для mobile/iPhone сценариев.
TSOY.CLOUD 3.3.6: в конструкторе страниц появился блок «Таблица»
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц. - Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы. - Есть переключатель «первая строка — заголовки» для красивого отображен…Читать полностью
- В разделе «Мои страницы» добавлен новый блок `Таблица` для конструкторов страниц.
- Можно редактировать ячейки прямо в сетке и управлять структурой: добавлять/удалять строки и столбцы.
- Есть переключатель «первая строка — заголовки» для красивого отображения таблицы на публичной странице.
TSOY.CLOUD 3.4.0: полноценный Web Push (закрытый PWA/сайт) + индикатор качества звонков
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт. - Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Work…Читать полностью
- Реализованы настоящие Web Push-уведомления: сообщения, звонки, лайки, комментарии и добавления в друзья теперь могут приходить на устройство даже когда сайт/PWA закрыт.
- Подписка на push синхронизируется с настройкой уведомлений пользователя и Service Worker, а доставка идёт через серверную очередь событий.
- В аудиозвонках добавлен индикатор качества связи (RTT, джиттер, потери, битрейт) с понятным статусом (`отлично / хорошо / средне / с помехами / переподключение`).
- Улучшена стабильность звонков: при проблемах соединения клиент выполняет мягкое переподключение и показывает актуальный статус связи.
TSOY.CLOUD 3.4.1: mobile fix мессенджера (вложения) и центрирование меню профиля
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата. - Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстк…Читать полностью
- Исправлено открытие окна вложений в мессенджере на телефонах: attach-модалка и единый проводник теперь открываются поверх fullscreen-чата.
- Для клипсы (`📎`) усилена обработка tap/click на мобильных устройствах, чтобы тапы не терялись в сложной fixed-верстке чата.
- Меню профиля/переключения мультипрофилей в мобильной шапке теперь центрируется по экрану и больше не уезжает влево.
TSOY.CLOUD 3.4.2: hotfix навигации по уведомлениям (deep-link в источник)
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.). - Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относи…Читать полностью
- Исправлен переход по клику на уведомления: теперь уведомление корректно открывает именно источник события (чат, календарь, профиль/пост и т.д.).
- Починена обработка ссылок в браузере и PWA для установок проекта в подпапке сайта (deep-link резолвится относительно пути приложения / service worker scope).
TSOY.CLOUD 3.4.3: информативные уведомления (сообщения + действия для звонка)
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог. - Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлен…Читать полностью
- Уведомления о сообщениях теперь показывают отправителя и фрагмент текста сообщения, а клик ведёт сразу в нужный диалог.
- Для входящих звонков в уведомления добавлены действия «Принять» и «Отклонить» (если устройство/браузер поддерживает actions в уведомлениях).
- Улучшены payload-данные push-уведомлений для более точной навигации и действий из PWA/Service Worker.
TSOY.CLOUD 3.4.4: настройки уведомлений в дашборде + улучшенный PWA update flow
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка. - Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос p…Читать полностью
- В `Настройки` добавлен новый раздел для уведомлений: цвет, оформление, рингтон уведомлений и отдельный рингтон входящего звонка.
- Добавлен раздел `PWA и обновления`: политика обновления (`manual/notify/auto`), интервал проверки Service Worker, автозапрос persistent storage и toast-уведомления об обновлении.
- PWA runtime доработан: регистрация SW учитывает путь приложения, обновления можно проверять/применять через runtime API, а входящие звонки в открытом приложении используют настраиваемый рингтон.
TSOY.CLOUD 3.4.5: свои рингтоны уведомлений и звонка
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка. - Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу. -…Читать полностью
- В новом блоке настроек уведомлений теперь можно загрузить собственный рингтон для обычных уведомлений и отдельный рингтон для входящего звонка.
- Добавлено превью/прослушивание загруженных рингтонов прямо в админке и удаление кастомного файла по чекбоксу.
- Runtime уведомлений использует кастомные файлы в открытом приложении/PWA (с fallback на встроенные звуки, если браузер блокирует воспроизведение).
TSOY.CLOUD 3.5.0: stability-сборка (cleanup, техдолг, аккуратные оптимизации)
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода. - Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только…Читать полностью
- Проведён стабилизационный проход по проекту: убран техмусор, упрощены мелкие дубли в layout/head и улучшена поддерживаемость кода.
- Для кастомных рингтонов уведомлений/звонков усилена надёжность: удаление старых файлов при замене, безопасная очистка только внутри `public/sounds` и лимит размера загрузки (5 MB).
- Сборочные проверки стали чище и быстрее: `check-encoding.ps1` теперь игнорирует временные каталоги `tmp_*`, чтобы случайные backup-папки не шумели в чекапе.
TSOY.CLOUD 3.5.1: hotfix рингтонов на телефонах
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук. - Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложе…Читать полностью
- Исправлено воспроизведение кастомных рингтонов уведомлений на телефонах: теперь ошибка `audio.play()` корректно отслеживается и при необходимости включается fallback-звук.
- Кастомные рингтоны (уведомления/звонок) теперь резолвятся относительно пути приложения, поэтому работают корректнее в PWA/подпапках сайта.
- Добавлен `audio unlock` по первому взаимодействию пользователя для лучшей совместимости с мобильными autoplay-ограничениями браузеров.
TSOY.CLOUD 3.5.2: notifications reliability phase 1 (retry worker + диагностика)
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок. - В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные …Читать полностью
- Усилена надёжность доставки wake-push: в серверной очереди уведомлений появились состояния отправки, повторы с backoff и защита от зависших обработок.
- В `Настройки -> PWA и обновления` добавлена диагностика push-очереди: недоставленные элементы, активные подписки, подписки с ошибками и состояния `dispatch_state`.
- Добавлен ручной запуск push worker из админки и CLI-скрипт `scripts/push-worker.php` для cron/daemon (`php scripts/push-worker.php --loop`).
TSOY.CLOUD 3.5.3: notifications reliability phase 2 (Web Push payload + fallback)
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт. - Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддержив…Читать полностью
- Сервер теперь отправляет полноценный Web Push payload (тело уведомления) для поддерживаемых push-подписок, поэтому уведомления стабильнее приходят даже когда сайт/PWA закрыт.
- Сохранён совместимый fallback `wake-push + push_pull`, если payload не поддерживается endpoint’ом/браузером или произошла ошибка шифрования.
- Service Worker стал устойчивее к payload-парсингу: сначала `json()`, затем `text()+JSON.parse()`, и только потом fallback на серверную очередь.
TSOY.CLOUD 3.5.4: диагностика push-устройств в админке + тест push по подписке
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки. - Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления н…Читать полностью
- В `Настройки -> PWA и обновления` добавлен список push-устройств/подписок: пользователь, устройство, режим (`browser/standalone`), encoding, последний успех и ошибки.
- Для каждой подписки появилась кнопка `Тест push`, чтобы проверить доставку уведомления на конкретное устройство прямо из админки.
- Тестовая отправка использует payload Web Push с fallback на wake-push и обновляет статус подписки (`last_seen_at` / `last_error`) для быстрой диагностики.
TSOY.CLOUD 3.5.5: фильтры и управление push-подписками в админке
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`. - Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице. - Управление подп…Читать полностью
- В диагностике push-устройств появились фильтры: поиск по пользователю/устройству/endpoint, `active/inactive` и `только с ошибками`.
- Для каждой push-подписки доступны действия `Тест push`, `Отключить/Включить` и `Удалить` прямо в таблице.
- Управление подписками выполняется отдельным admin-route с CSRF-проверкой, без конфликта с общей формой сохранения настроек.
TSOY.CLOUD 3.5.6: бренд уведомлений из настроек + статус последнего push-теста
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`. - В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки. - Тест push…Читать полностью
- Заголовок уведомлений теперь берётся из настроек сайта (брендинг), а не остаётся захардкоженным как `TSOY.CLOUD`.
- В диагностике push-устройств добавлена колонка `Последний тест`: время, `OK/Fail`, режим `payload/wake`, HTTP-код и текст ошибки.
- Тест push по подписке теперь сохраняет результат в БД (`last_test_*`), чтобы было видно, где payload работает, а где происходит fallback.
TSOY.CLOUD 3.5.7: статистика реальной доставки push + бренд уведомлений из настроек
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса). - Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по …Читать полностью
- В диагностике push-устройств появилась статистика реальных доставок по подписке: `payload`, `wake`, `wake fallback`, `errors` (накопительно, с последнего сброса).
- Добавлены кнопки сброса статистики доставки push: глобально по всем подпискам и отдельно по конкретной подписке.
- Заголовок уведомлений теперь подтягивается из настроек сайта (брендинг), а не остаётся захардкоженным `TSOY.CLOUD`.
TSOY.CLOUD 3.5.8: hotfix названия уведомлений (бренд из настроек)
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`. - Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`. - Серверные push-уведомления и клиентск…Читать полностью
- Исправлен приоритет названия уведомлений: теперь сначала используется `Название в шапке`, затем `Название сайта`.
- Починен fallback тестового уведомления в центре уведомлений: больше нет захардкоженного `TSOY.CLOUD`.
- Серверные push-уведомления и клиентские fallback-уведомления приведены к одному правилу брендинга.
TSOY.CLOUD 3.5.10: сводка + мини-график доставки push (payload/fallback/error)
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток. - Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём п…Читать полностью
- В диагностике push добавлена агрегированная сводка по всем подпискам: `payload success rate`, `fallback rate`, `error rate` и общее число попыток.
- Добавлен мини-график по дням (14 дней): stacked bars `payload / wake / errors`, где высота столбца = объём попыток за день.
- Для истории графика добавлена серверная дневная статистика доставок (`push_delivery_daily_stats`), которая заполняется при реальных отправках push.
TSOY.CLOUD 3.5.11: админ-настройки разбиты на понятные разделы
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам. - Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, зво…Читать полностью
- Страница `Настройки` получила быстрый навигатор по разделам (якоря): теперь можно сразу перейти к брендингу, оформлению, PWA/push, WebRTC и другим блокам.
- Добавлена логическая группировка секций (`Основные параметры`, `Дизайн и уведомления`, `Функции, звонки и диагностика`), чтобы не искать нужный блок в длинной ленте карточек.
- Навигация по секциям адаптирована для мобильных устройств: список разделов прокручивается горизонтально и остаётся удобным на узких экранах.
TSOY.CLOUD 3.5.12: hotfix навигации по разделам настроек
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта. - Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.Читать полностью
- Исправлены кнопки блока «Разделы настроек»: переходы теперь корректно ведут к нужным секциям страницы `Настройки`, а не в корень сайта.
- Убран sticky-режим навигационного блока, из-за которого он перекрывал интерфейс при прокрутке.
TSOY.CLOUD 3.5.13: Android-style настройки (меню слева, раздел справа)
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел. - Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком. - Добавлена сов…Читать полностью
- Страница `Настройки` переделана в режим с боковым меню разделов: слева список категорий, справа открывается только выбранный раздел.
- Переключение секций происходит без переходов по странице и без перекрытия интерфейса навигационным блоком.
- Добавлена совместимость с hash-переходами (`#pwa-notify-admin`): при открытии ссылки автоматически показывается нужный раздел настроек.
TSOY.CLOUD 3.5.14: выбор часового пояса по Гринвичу в настройках системы
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями. - Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода. - Пол…Читать полностью
- В разделе `Система` добавлен выпадающий список выбора часового пояса по Гринвичу (`GMT/UTC`) с готовыми смещениями.
- Выбор смещения автоматически подставляет корректный timezone ID в поле `Часовой пояс`, чтобы настройка сохранялась без ручного ввода.
- Поле ручного ввода IANA-зоны сохранено для точной настройки региональных зон и нестандартных сценариев.
TSOY.CLOUD 3.5.15: role-aware настройки для всех + Android-style меню разделов
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin). - Настройки переведены в Android-style режим: слева список разделов, справа выбранны…Читать полностью
- В главное меню добавлен пункт `Настройки` для всех авторизованных пользователей; экран настроек стал role-aware (пользователь/модератор, админ, admin_tester, global_admin).
- Настройки переведены в Android-style режим: слева список разделов, справа выбранный раздел; в `PWA и push` добавлен второй уровень (`Обновления`, `Очередь push`, `Устройства`).
- `admin_tester` теперь видит все админ-настройки, но может сохранять только пользовательские (тема/уведомления); админские секции остаются read-only.
- Исправлена проверка доступа к пользовательскому облаку: маршрут `Мои файлы` теперь использует capability `cloud` (отдельно от staff-дэшборда).
TSOY.CLOUD 3.5.16: админ-настройки разнесены по отдельным страницам
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню. - Переходы в меню теперь открывают соответствующ…Читать полностью
- Админские настройки физически разнесены по отдельным страницам (`Брендинг`, `Доступ и лимиты`, `Система`, `Оформление`, `PWA и push`, `Звонки/диагностика`, `База данных`) при сохранении единого бокового меню.
- Переходы в меню теперь открывают соответствующие settings-route (`settings_admin_*`), а не работают только как внутренний переключатель секций в одном URL.
- Внутри длинных разделов (например `PWA и push`) сохранён второй уровень навигации: `Обновления`, `Очередь push`, `Устройства`.
TSOY.CLOUD 3.5.17: hotfix вёрстки страницы настроек (desktop/mobile)
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки. - Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конф…Читать полностью
- Исправлен регресс после перевода меню настроек на ссылки: пункты бокового меню снова отображаются как полноценные кнопки без подчёркиваний и на всю ширину колонки.
- Видимый раздел настроек в правой части теперь занимает всю доступную ширину (исправлен конфликт с Bootstrap `col-lg-6` в секционном режиме).
- На мобильных пересобрана вёрстка меню/подменю и нижней панели сохранения: убран уезд вправо и горизонтальный overflow.
TSOY.CLOUD 3.5.18: hotfix блока БД и нижней панели сохранения в настройках
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока. - Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме. - Испр…Читать полностью
- В разделе `База данных` на странице `Настройки` убрана лишняя горизонтальная линия перед карточкой блока.
- Нижняя панель сохранения (`Сохраняются все изменённые поля...`) теперь использует theme-aware цвета и остаётся читаемой в светлой/тёмной теме.
- Исправление сделано без изменения логики сохранения и маршрутов настроек.
TSOY.CLOUD 3.6.0: начало рефакторинга связки Профиль / Контакты / Мессенджер
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана. - Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление св…Читать полностью
- На страницах `Профиль`, `Контакты` и `Мессенджер` добавлен единый блок `Social Hub` с переключателем разделов и описанием назначения каждого экрана.
- Зафиксированы роли модулей: `Профиль` = публичная страница и контент, `Контакты` = каталог и управление связями, `Мессенджер` = диалоги/вложения/звонки.
- Визуально унифицированы верхние панели и поверхности через общий reusable partial `views/partials/social_suite.php` без вмешательства в сложную mobile-геометрию чата.
TSOY.CLOUD 3.6.1: следующий шаг по связке Контакты/Мессенджер + UX-фиксы настроек
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`. - В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка боль…Читать полностью
- В мессенджере блок `Быстрый старт` теперь использует только ваши контакты; полный каталог пользователей и управление связями оставлены в разделе `Контакты`.
- В настройках исправлено выравнивание блока `База данных` относительно бокового меню (карточка больше не "подпрыгивает" вверх).
- Уточнена логика названий в настройках: `Внешний вид профиля` (личное) и `Внешний вид сайта` (глобальный дизайн) вместо размытых `Внешний вид` / `Оформление`.
TSOY.CLOUD 3.6.2: убран лишний Social Hub, мессенджер закреплён за диалогами
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее. - В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через …Читать полностью
- Убран лишний UI-блок `Social Hub` с экранов `Профиль`, `Контакты` и `Мессенджер`: переключение между разделами остаётся в основном меню, интерфейс стал компактнее.
- В `Мессенджере` оставлены только активные диалоги и сам чат; новые диалоги создаются через `Контакты` (кнопка `Открыть контакты`).
- В настройках подправлены UX-мелочи: выровнен блок `База данных` и уточнены названия дизайн-разделов (`Внешний вид профиля` / `Внешний вид сайта`).
TSOY.CLOUD 3.6.3: контакты = старт общения, мессенджер = только диалоги
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`. - `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат. - Переходы через `chat_start` теперь ко…Читать полностью
- На странице `Контакты` у карточек пользователей добавлены явные действия `Написать` и `Позвонить`.
- `Мессенджер` очищен от каталоговых элементов: в боковой панели оставлена только история активных диалогов и сам чат.
- Переходы через `chat_start` теперь корректно прокидывают `call=1`, поэтому звонок можно запускать напрямую из `Контактов`.
TSOY.CLOUD 3.6.4: визуальный полиш мессенджера (в стиле Контактов) без риска вернуть подбородок
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`. - Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога. - Из…Читать полностью
- Обновлены список диалогов, шапка активного диалога и composer мессенджера: карточки, границы, кнопки и типографика приведены к стилю раздела `Контакты`.
- Улучшены состояния hover/active у диалогов, читаемость превью сообщений и кнопок в шапке диалога.
- Изменения выполнены только на уровне визуального CSS-слоя: mobile keyboard-layout логика чата не трогалась, чтобы не вернуть iPhone-баг с `подбородком`.
TSOY.CLOUD 3.6.5: второй полиш-проход мессенджера (диалоги, шапка, composer, плотность)
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными. - В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало поле…Читать полностью
- Доработаны карточки диалогов, шапка активного диалога и composer мессенджера: кнопки, поверхности, состояния hover/active и типографика стали более цельными.
- В шапке списка диалогов добавлена компактная CTA-кнопка `Контакты`, а пустое состояние стало полезным (с прямым переходом в `Контакты`).
- Плотность мессенджера (`telegram/compact/roomy`) теперь заметнее влияет на список диалогов, шапку и кнопки, а не только на bubble. Keyboard-layout логика не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.6: hotfix iPhone/PWA бренда уведомлений (строка from ...)
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`. - Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под бренди…Читать полностью
- Исправлен бренд iPhone/PWA уведомлений: системная строка `from ...` теперь берёт имя из настроек (`Название в шапке` → `Название сайта`), а не из старого `TSOY.CLOUD`.
- Добавлен динамический route `manifest`, чтобы Web App Manifest подстраивался под брендинг проекта.
- PWA meta-теги (`application-name`, `apple-mobile-web-app-title`) синхронизированы с тем же брендом, что используется в уведомлениях.
TSOY.CLOUD 3.6.7: hotfix mobile-overflow окна Диалоги в мессенджере
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport. - Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата). - Фикс сделан только…Читать полностью
- Исправлен небольшой выезд окна `Диалоги` за экран на телефонах (в т.ч. iPhone): список диалогов теперь укладывается в ширину viewport.
- Причина была в mobile-overflow от Bootstrap `row g-3` (отрицательные margins в canvas-режиме чата).
- Фикс сделан только на уровне CSS ширин/отступов; keyboard/fullscreen логика мессенджера не менялась (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.8: ускорена отправка сообщений в мессенджере (без паузы от push)
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`). - Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату. - Теперь сообщение сохраняется…Читать полностью
- Исправлена задержка при отправке сообщений в мессенджере (ощущение паузы 2–3 секунды после нажатия `Отправить`).
- Причина была в синхронной отправке Web Push прямо внутри `chat_send_async`: push мог тормозить HTTP-ответ чату.
- Теперь сообщение сохраняется и ответ в чат уходит сразу, а push ставится в очередь и отправляется после завершения ответа (best-effort), что делает интерфейс заметно быстрее и плавнее.
TSOY.CLOUD 3.6.9: фундамент для больших чатов (миллионы сообщений) без нагрузки на сервер
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса. - Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unr…Читать полностью
- Подготовлена серверная оптимизация чата для больших историй переписки: список диалогов и polling работают легче без изменения интерфейса.
- Добавлены денормализованные unread-счётчики в `conversations` (по каждому участнику), чтобы не считать `COUNT(*)` unread по каждому диалогу на каждом обновлении.
- Добавлены индексы под большие переписки (`messages(conversation_id,id)`, visible/unread индексы, индексы диалогов по пользователю и `last_message_at`).
- Для апгрейдов сохранён fallback: если денормализованные счётчики ещё не заполнены, система временно использует старый расчёт unread и постепенно синхронизирует данные.
TSOY.CLOUD 3.6.10: иконки действий в Контактах (конверт/трубка/корзина)
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина. - Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`. - Сохранены `title` и `ar…Читать полностью
- На странице `Контакты` действия в карточках (`Написать`, `Позвонить`, `Удалить`) заменены на компактные иконки: конверт, трубка и корзина.
- Интерфейс стал чище и плотнее, особенно в каталоге пользователей и в блоке `Мои контакты`.
- Сохранены `title` и `aria-label`, чтобы смысл кнопок не терялся на ПК и мобильных устройствах.
TSOY.CLOUD 3.6.11: доведён UI действий в Контактах (+ строка Каталог/Найти)
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле. - Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну стро…Читать полностью
- Кнопка `В контакты` в каталоге пользователей переведена на иконку `человек+`, чтобы все действия в карточках (`написать`, `позвонить`, `удалить`, `добавить`) были в одном стиле.
- Заголовок `Каталог пользователей` и кнопка `Найти` теперь собраны в одну строку, а поле поиска вынесено отдельно ниже на полную ширину.
- Логика контактов и поиска не менялась: обновление только визуальное/UX.
TSOY.CLOUD 3.6.12: системные файлы вынесены в отдельную папку public/system
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`. - Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешён…Читать полностью
- Логотип, favicon, кастомные звуки уведомлений/звонка и служебные ассеты спец-регистрации теперь хранятся в единой системной папке `public/system/...`.
- Добавлен общий helper для системных файлов: безопасное сохранение upload-ов, удаление только из разрешённых системных директорий и переиспользуемая логика для будущих системных ассетов.
- Старые пути (`public/branding`, `public/sounds`, `public/friend_register`) автоматически переносятся в новую системную структуру при запуске приложения (best-effort, без поломки ссылок если перенос не удался).
TSOY.CLOUD 3.6.13: единый раздел «Внешний вид», готовые профили оформления и кириллические шрифты
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений). - Для глобального оформления сайта добавлены готовые профили внешн…Читать полностью
- В настройках объединён дизайн-блок: вместо раздельных пунктов `Внешний вид профиля` и `Внешний вид сайта` теперь один раздел `Внешний вид` с подпунктами (профиль / сайт / стиль уведомлений).
- Для глобального оформления сайта добавлены готовые профили внешнего вида (чистый, рабочий, чтение, мягкий, ночной, psychedelic): профиль подставляет значения в поля и их можно донастроить вручную.
- Шрифтовые пресеты обновлены с упором на кириллицу: Manrope, PT Sans, Rubik и новый IBM Plex Sans (`plex`) подключены как глобальные варианты для интерфейса.
TSOY.CLOUD 3.6.14: UX-фикс профиля (кнопка «Написать» и удаление вложений)
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля. - У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста. - Исправле…Читать полностью
- На своей карточке профиля больше не показывается кнопка `Написать` — она остаётся только при просмотре чужого профиля.
- У вложений постов в обычном режиме просмотра убраны кнопки `Удалить`; удаление осталось только в режиме редактирования поста.
- Исправление делает интерфейс профиля логичнее и чище без изменения логики постов/комментариев.
TSOY.CLOUD 3.6.15: персональные режимы меню и публичного профиля для гостей
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`. - Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрыв…Читать полностью
- В `Настройки -> Внешний вид` добавлены персональные режимы основного бокового меню: `показывать всегда`, `скрывать всегда`, `по кнопке`.
- Для публичной страницы профиля (`/user/<login>`) добавлена личная настройка для гостей: показывать боковое меню, скрывать только меню, или скрывать меню и шапку сайта.
- Эти параметры сохраняются у каждого профиля-пользователя отдельно и влияют только на его собственный интерфейс/публичную страницу.
TSOY.CLOUD 3.6.16: контекстное меню сообщений (ПК/мобилка) + цитаты и реакции
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`. - Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным на…Читать полностью
- В мессенджере по правому клику мыши и по удержанию на телефоне открывается меню действий сообщения: `Изменить`, `Удалить`, `Цитировать`, `Реакция`.
- Добавлены emoji-реакции к сообщениям с отображением количества; свою реакцию можно переключать повторным нажатием.
- Реализация встроена в существующий dropdown сообщений и не затрагивает чувствительную mobile-геометрию composer (без риска вернуть `подбородок`).
TSOY.CLOUD 3.6.17: галочки прочтения сообщений в мессенджере
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет. - Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы. - Изменение не затрагивает мобильную гео…Читать полностью
- У ваших сообщений в мессенджере появилась компактная галочка статуса: сообщение прочитано или ещё нет.
- Статус прочтения обновляется в открытом диалоге автоматически через обычный polling, без перезагрузки страницы.
- Изменение не затрагивает мобильную геометрию поля ввода и не должно вернуть баг с `подбородком`.
TSOY.CLOUD 3.6.18: «будильник» по сообщению в контекстном меню мессенджера
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению. - Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочит…Читать полностью
- В контекстное меню сообщения добавлен пункт `Будильник` — повторное уведомление собеседнику по конкретному сообщению.
- Будильник работает только для ваших сообщений и только если сообщение ещё не прочитано (иначе пункт отключается/сервер вернёт `уже прочитано`).
- Уведомление отправляется отдельным push-типом `chat_nudge`, не затрагивая геометрию чата и без риска вернуть `подбородок`.
TSOY.CLOUD 3.6.19: старт голосовых сообщений в мессенджере (красный интерфейс записи)
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения. - Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение. - Аудио-вложения (в том числе голосо…Читать полностью
- В composer мессенджера добавлена красная кнопка микрофона: открывается аккуратное окно записи голосового сообщения.
- Запись выполняется через `MediaRecorder` прямо на устройстве и прикрепляется в чат как аудио-вложение.
- Аудио-вложения (в том числе голосовые) теперь воспроизводятся прямо в сообщении через встроенный плеер, без отдельного скачивания.
TSOY.CLOUD 3.6.20: preloader загрузки сайта и отдельный статус установки PWA
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании. - Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показыва…Читать полностью
- Добавлен глобальный preloader загрузки страниц: при открытии/переходе по сайту показывается аккуратный индикатор `Загрузка`, чтобы интерфейс не выглядел пустым при ожидании.
- Для PWA-установки добавлен отдельный режим `Идёт установка приложения…` (показывается при установке через системную кнопку).
- Тот же слой используется в установщике сайта (`install.php`) при отправке формы, поэтому установка/переходы теперь воспринимаются как единый понятный flow.
TSOY.CLOUD 3.6.21: плавное переключение секций настроек + фиксы длинных имён в Контактах/Мессенджере
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера. - В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / тру…Читать полностью
- Разделы в `Настройках` теперь переключаются мягко без полного визуального reload-эффекта: открывается нужный блок справа, а URL обновляется через историю браузера.
- В `Контактах` длинные имена пользователей больше не смещают иконки действий (`конверт / трубка / корзина / человек+`): кнопки зафиксированы справа, текст ужимается внутри своей зоны.
- В шапке активного диалога `Мессенджера` кнопки действий справа закреплены в одну линию, а длинное имя собеседника аккуратно сокращается без поломки layout.
TSOY.CLOUD 3.6.22: hotfix preloader (без ступора на чатах и секциях настроек)
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`. - Preloader оставлен только для действительно длинных/понятных сценариев: первич…Читать полностью
- Исправлен глобальный preloader: он больше не включается на каждый внутренний клик и не тормозит переключение секций в `Настройках` или переходы между диалогами в `Мессенджере`.
- Preloader оставлен только для действительно длинных/понятных сценариев: первичная загрузка страницы, установка сайта (`install.php`) и установка PWA.
- Это уменьшает риск зависшего overlay и делает интерфейс заметно отзывчивее при обычной работе.
TSOY.CLOUD 3.6.23: hold-to-record голосовые + компактное предпрослушивание и прогресс установки
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению. - После записи голосового в composer появляется компактное предпрослушивание (мини-пле…Читать полностью
- В `Мессенджере` добавлен мобильный режим `удерживай для записи`: зажмите красную кнопку микрофона, отпустите — запись остановится и автоматически прикрепится к сообщению.
- После записи голосового в composer появляется компактное предпрослушивание (мини-плеер), а аудио-плееры в сообщениях стали компактнее и лучше подходят для узких экранов.
- В `Профиле` улучшено поведение длинных текстов в карточках друзей/страниц и в постах (текст больше не ломает layout), а в `install.php` добавлена мини-анимация этапов установки (БД / миграции / админ / готово).
TSOY.CLOUD 3.6.24: hotfix preloader на Профиле и в Мессенджере
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа. - Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы на…Читать полностью
- Исправлен долгий preloader на страницах `Профиль` и `Мессенджер`: overlay загрузки больше не ждёт полный `window.load` со всеми картинками и медиа.
- Preloader теперь скрывается на этапе готовности DOM (`DOMContentLoaded`/`interactive`), поэтому страницы начинают ощущаться живыми заметно раньше.
- `load/pageshow` оставлены только как страховка, плюс добавлен fail-safe таймер от зависшего overlay.
TSOY.CLOUD 3.6.25: hotfix отображения голосовых сообщений (плеер вместо файла)
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл. - Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла…Читать полностью
- Исправлено отображение голосовых сообщений в мессенджере: записи вида `voice_message_*.webm` теперь показываются встроенным аудио-плеером, а не только ссылкой на файл.
- Фикс работает и для уже отправленных сообщений: чат распознаёт голосовые по имени файла, даже если у файла в БД был сохранён неидеальный MIME-тип.
- Для новых записей добавлена нормализация MIME при загрузке, чтобы голосовые сразу сохранялись как audio и корректно рендерились во всех местах.
TSOY.CLOUD 3.6.26: компактная лента недавних файлов на главной
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов. - По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3). - Использован …Читать полностью
- На главной странице блок `Недавние мои файлы` / `Недавние гостевые файлы` больше не создаёт длинный `подбородок` из списка файлов.
- По умолчанию показываются первые 3 файла, остальные открываются кнопкой `Показать ещё файлы` (порциями по 3).
- Использован тот же механизм `load more`, что и в новостях/техрелизах, без отдельного нового JS.
TSOY.CLOUD 3.6.27: голосовые сообщения в одну компактную строку
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла. - Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения. - Фикс работает и в первичном ре…Читать полностью
- Голосовые сообщения (`voice_message_*`) в мессенджере теперь отображаются компактной одной строкой без отдельной строки имени файла.
- Плеер voice-note визуально стал тоньше и аккуратнее, чтобы не раздувать высоту сообщения.
- Фикс работает и в первичном рендере чата, и при обновлении сообщений через polling.
TSOY.CLOUD 3.6.28: tap-to-record для голосовых (второй тап — отправка)
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение. - Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно …Читать полностью
- В мессенджере микрофон теперь работает в режиме toggle: первый тап запускает запись, второй тап останавливает запись и сразу отправляет голосовое сообщение.
- Если автоотправка не удалась, запись автоматически остаётся прикреплённой в поле ввода — её можно отправить обычной кнопкой.
- Геометрия мобильного composer не изменялась (фиксы против `подбородка` сохранены).
TSOY.CLOUD 3.6.29: одинаковый mini-player голосовых на ПК и телефоне
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку. - Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения). - Н…Читать полностью
- Голосовые сообщения в мессенджере теперь воспроизводятся одинаково на ПК и мобильных: компактной кнопкой play/pause в одну строку.
- Убрана зависимость от урезанных native audio-controls браузера на десктопе (где могла пропадать кнопка воспроизведения).
- Новый mini-player работает и в первичном рендере чата, и при появлении сообщений через polling.
TSOY.CLOUD 3.6.30: персональные настройки preloader
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста. - Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать с…Читать полностью
- В `Настройки -> Внешний вид` добавлены настройки preloader для текущего профиля: режим работы (`умный / только установка-PWA / выключить`), компактный вид и показ текста.
- Настройки персональные: у каждого профиля (профиль = отдельный user) можно выбрать свой вариант поведения preloader.
- Системные сценарии установки сайта/PWA сохранены: preloader для install/PWA работает корректно даже при минимальном режиме.
TSOY.CLOUD 3.6.31: hotfix воспроизведения голосовых на телефоне
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу. - Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`). - Скрытый аудио-элемент пер…Читать полностью
- Исправлено воспроизведение голосовых сообщений на мобильных устройствах: mini-player снова стабильно запускается по тапу.
- Для voice-note добавлен mobile-safe `touchend` с защитой от двойного срабатывания (`touchend` + `click`).
- Скрытый аудио-элемент переведён в совместимый visually-hidden режим (без `display:none`) для лучшей работы на iPhone/Safari.
TSOY.CLOUD 3.6.32: отдельная иконка PWA + fallback на favicon/logo
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения. - Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback. - `manifest` и `apple-touch-icon` теперь формируются дина…Читать полностью
- В `Настройки -> Брендинг` добавлена отдельная загрузка `Иконка PWA` для установленного приложения.
- Если отдельная PWA-иконка не задана, приложение использует `favicon`, а затем `лого` как fallback.
- `manifest` и `apple-touch-icon` теперь формируются динамически из настроек брендинга, а не только из встроенных `/public/icons/...`.
TSOY.CLOUD 3.6.33: встроенный просмотр файлов в PWA (с возвратом назад)
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`. - После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска. - Кнопка `Открыть` в файлово…Читать полностью
- В standalone/PWA просмотр файла теперь открывается не “сырым” `view`, а во встроенной странице-просмотрщике с кнопкой `Назад`.
- После просмотра файла в PWA можно вернуться обратно в приложение без закрытия и повторного запуска.
- Кнопка `Открыть` в файловом проводнике тоже использует этот безопасный PWA-сценарий.
TSOY.CLOUD 3.6.34: hotfix mini-плеера голосовых на телефоне
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате). - Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания. - `audio.load()` больше не мешает запуску как основ…Читать полностью
- Исправлен запуск воспроизведения голосовых сообщений на телефоне (mini-player в чате).
- Для кнопки mini-player добавлены прямые mobile-safe обработчики `touchend/click` с защитой от двойного срабатывания.
- `audio.load()` больше не мешает запуску как основной путь: теперь это только fallback при ошибке `play()`.
TSOY.CLOUD 4.0.0: группы, мосты и формат messenger
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах. - Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и…Читать полностью
- Добавлены группы пользователей и мосты между группами: можно гибко задавать, кто видит друг друга в контактах и чатах.
- Админ-раздел `Пользователи` переработан: аккаунт и его профили управляются в одной карточке, добавлены режим приложения, мультипрофиль и групповые настройки.
- Появился формат `messenger` (контакты + чат), а файлы из чата теперь хранятся отдельно и не попадают в `Недавние` на главной.
TSOY.CLOUD 4.1.0: страница групп, единый дизайн
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников. - Страница пользователей упрощена: только аккаунты и создание новых пользователей. - Унифицирован дизайн всего проек…Читать полностью
- Группы и мосты вынесены в отдельную страницу управления: создание, переименование, удаление групп, управление мостами и просмотр участников.
- Страница пользователей упрощена: только аккаунты и создание новых пользователей.
- Унифицирован дизайн всего проекта: профиль, мессенджер, контакты и другие страницы теперь полностью используют глобальные настройки скругления.