F4ilji
b53db18826
fix: add personal data policy link to consent banner
2026-09-18 23:59:12 +05:00
F4ilji
da7e6368f7
fix: update consent banner text
2026-09-18 23:58:23 +05:00
F4ilji
1efa9df9ba
fix: update consent banner text on public site
2026-09-18 23:55:50 +05:00
F4ilji
19c0cdef5b
fix: remove links from consent banner
2026-09-18 23:52:32 +05:00
F4ilji
5ef1049be3
feat: update consent banner with detailed cookie policy text
2026-09-18 23:47:40 +05:00
F4ilji
d6c0f48d48
feat(analytics): add site analytics with grouped navigation sections
...
- Add Analytics container: models, tasks, jobs, controllers, routes, services
- Add analytics config with section groups (structure, institute, content, services)
- Add database tables: analytics_sessions, analytics_hits, analytics_daily_stats
- Add frontend: Analytics page, section detail, chart, overview, navigation components
- Add consent banner and JS tracking service (sendBeacon + Inertia listener)
- Add permission sync for view_analytics, view_any_analytic
- Fix trailing slash URL matching in GetNavigationSectionsTask
- Fix event propagation on expand arrows in navigation sections
- Fix RecordVisitJob to not depend on dropped analytics_geo_cache table
- Replace plain text views/visitors with badge-style icons
- Group navigation sections by category with separate blocks
- Add config-driven non-CMS sections (faculties, divisions, DPO, journals)
- Remove Events, TV, Sveden from analytics sections
2026-09-18 22:18:04 +05:00
F4ilji
4a776a42e2
fix: resolve image upload issues in posts
...
- Dashboard: disable submit button during uploads, show upload errors, guard against pending uploads
- Filament: add maxParallelUploads(1) to fix race condition (filamentphp#13306)
- Filament: add image/webp to gallery acceptedFileTypes, increase resize 30->50
- Dashboard: add image/webp to gallery input accept
- Add missing notifications table migration for Filament databaseNotifications
2026-09-18 02:25:36 +05:00
F4ilji
cc08cdbc97
fix: 405 error on schedule upload/edit
...
- Edit.vue: move _method PUT from Inertia options to FormData (Inertia v2 ignores it in options)
- Upload.vue: add forceFormData: true for reliable multipart/form-data
- AccessCheck: add logging when abort() is triggered with non-200 code
- UploadSchedulesController: add request logging for diagnostics
- php.ini: increase max_file_uploads from 20 to 50 for bulk uploads
2026-09-18 01:32:34 +05:00
F4ilji
bf77cb634c
fix(departments): fix contact info editing, cache invalidation, and pivot data display
...
- User model: add missing pivot columns (service_email, service_phone, cabinet, sort) to departments_work() and departments_teach() withPivot
- ListDepartmentWorkersAction/TeachersAction: fix where() to wherePivot() for position filters
- Dashboard Workers/Teachers Index.vue: display validation errors in add/edit modals
- Dashboard Workers/Teachers Index.vue: add links to client person pages
- DepartmentCacheService: clear person_* cache when department data changes
- Filament WorkersRelationManager/TeachersRelationManager: fix pivot columns in table (pivot.position etc), add cache clearing on edit/detach/bulk actions
2026-09-18 01:32:27 +05:00
F4ilji
e0e80fc430
fix: hide slider on main page when no slides available
2026-09-17 14:12:54 +05:00
F4ilji
9023fdd7e7
fix(schedule): restore original Index.vue with SSR-safe fixes
2026-08-31 20:31:35 +05:00
F4ilji
d6a10d46c7
fix(schedule): case-sensitive import MainPageNavbar (Linux)
2026-08-31 20:23:36 +05:00
F4ilji
a1183f91f6
fix(schedule): merge duplicate script blocks into one
2026-08-31 20:20:59 +05:00
F4ilji
774de4a6ab
fix(deploy): explicit SSR restart after build + defensive props
2026-08-31 20:05:39 +05:00
F4ilji
712f172071
fix(schedule): SSR-safe props to prevent null component hydration error
2026-08-31 19:45:12 +05:00
F4ilji
e6d223d15c
feat(schedules): add 'select all N' across pages
...
- Add GetAllScheduleIdsAction + GetFilteredScheduleIdsTask
- Add GET /dashboard/schedules/all-ids route returning filtered IDs
- Add selectAllFiltered method to Index.vue
- Button 'Выбрать все N' appears when total > per-page count
2026-08-20 11:31:04 +05:00
F4ilji
24387d6767
feat(schedules): add bulk delete via checkboxes
...
- Add BulkDeleteSchedulesTask, BulkDeleteSchedulesAction
- Add route DELETE /dashboard/schedules/bulk-destroy
- Add bulkDestroy method to ScheduleController
- Update Index.vue: select all/individual checkboxes, bulk actions bar
- Fix CheckDashboardPermission: replace naive /s$/ regex with Str::singular()
to resolve irregular plurals (faculties→faculty, categories→category)
2026-08-20 11:16:53 +05:00
F4ilji
f8d55092e5
fix: add null guard in generateSlug to prevent SSR crash on null tab titles
2026-08-03 11:52:36 +05:00
F4ilji
63e456088d
feat(dashboard): add Roles CRUD with permission-based menu filtering
...
- Roles CRUD: List/Create/Update/Delete actions, controller, requests
- Roles Vue pages: Index, Create, Edit (Options API, DashboardLayout)
- SidebarNav: filter menu items by user permissions via Inertia shared data
- HandleInertiaRequests: share permissions and roles arrays to frontend
- HttpKernel: register dashboard.permission middleware alias
- SidebarNavItem: add shield-check icon mapping
2026-08-03 10:39:15 +05:00
F4ilji
d4ef7daeb1
feat(dashboard): add page export/import functionality
...
- ExportPageAction: exports page with SEO and section path as JSON
- ImportPageAction: imports page from JSON, resolves section by slug path
- PageController: export/download and import endpoints
- Routes: GET /{page}/export, POST /import
- Index.vue: export button per row, import button in header (local only)
- Import restricted to APP_ENV=local (backend + frontend check)
2026-08-03 10:21:14 +05:00
F4ilji
4f4bed0899
fix(menu): use 'view_any_role' instead of 'view_any_shield::role'
...
Permission name mismatch between menuConfig and DB was hiding the Roles tab.
2026-07-16 11:35:44 +05:00
F4ilji
8db442a34a
Revert "fix(ssr): add Vue lifecycle guard plugin to suppress browser API errors in SSR hooks"
...
This reverts commit bb74bb48ba .
2026-07-07 11:22:32 +05:00
F4ilji
bb74bb48ba
fix(ssr): add Vue lifecycle guard plugin to suppress browser API errors in SSR hooks
2026-07-06 21:18:33 +05:00
F4ilji
6db62d9961
fix(ssr): suppress lifecycle hook errors (nextSibling null) at process level to prevent SSR crashes
2026-07-06 21:16:12 +05:00
F4ilji
63b71b87df
fix(ssr): always return {head,body} from createInertiaApp — .then() fallback for undefined resolve
2026-07-06 18:59:24 +05:00
F4ilji
f575325fa7
fix(ssr): remove window polyfill that broke Inertia SSR detection (typeof window check)
2026-07-06 18:53:06 +05:00
F4ilji
5fddb97cbf
fix(ssr): return empty string on SSR failure instead of throwing to prevent undefined response
2026-07-06 18:30:26 +05:00
F4ilji
778ea67cb4
fix(ssr): add addEventListener/removeEventListener to document and window polyfills
2026-07-06 18:22:22 +05:00
F4ilji
48ab0b384e
fix(ssr): add getElementById and other DOM methods to document polyfill
2026-07-06 18:05:35 +05:00
F4ilji
4c0152ae0f
fix(ssr): polyfill localStorage/sessionStorage, guard BasicListBadge filters prop, remove this. from template
2026-07-06 17:57:28 +05:00
F4ilji
eda69f4e37
fix(ssr): polyfill IntersectionObserver for Node.js SSR runtime
2026-07-06 17:53:46 +05:00
F4ilji
520533ef1f
fix(ssr): null-safe campaign access to prevent TypeError during SSR
2026-07-06 14:11:38 +05:00
F4ilji
65f4220932
fix(vikon): store version in file instead of cache to prevent revert after TTL expiry
2026-07-06 13:28:22 +05:00
F4ilji
b454c1ce97
fix(ssr): add null-check for breadcrumbs.page in Page.vue to prevent TypeError during SSR
2026-07-05 23:51:40 +05:00
F4ilji
e3eda2adbc
fix(vikon): revert to api_domain for authorize URL, use vikon_core redirect_uri
2026-07-05 22:39:21 +05:00
F4ilji
fd7de347d4
fix: null-safe role check, enable SQLite test DB, improve TinyMCE paste handling
2026-07-05 22:34:04 +05:00
F4ilji
bec37c0e22
fix(vikon): use auth_domain for OAuth authorize URL instead of api_domain
2026-07-05 22:31:51 +05:00
F4ilji
a372f725cd
fix(ssr): embed Ziggy routes as fallback for SSR context
...
ZiggyVue needs routes in its config, but page.props.ziggy from the
server may not carry them in the SSR worker. Importing the static
Ziggy config ensures routes are always available.
2026-07-05 21:56:51 +05:00
F4ilji
09771bf8ad
fix(ssr): remove conflicting RouteMixin that caused 'Cannot read properties of undefined (reading index)'
...
RouteMixin received the full Inertia page object instead of page.props,
producing a Ziggy config without routes. ZiggyVue already provides the
route() function with the correct config, so the duplicate mixin is
unnecessary.
2026-07-05 21:47:03 +05:00
F4ilji
a80a60bdbe
feat(vikon): redesign UI with update all button, specialized icons, and manual ZIP upload
2026-07-05 18:00:49 +05:00
F4ilji
a18765aafa
feat(vikon): merge update buttons into single flow with all parts selected by default
2026-07-05 13:10:49 +05:00
F4ilji
af86841ebc
feat(vikon): improve part update UI with per-part status indicators and Russian messages
2026-07-05 12:53:44 +05:00
F4ilji
08c04c5615
feat(vikon): show disabled modules with warning instead of hiding them
2026-07-05 12:34:44 +05:00
F4ilji
8cf195efb0
refactor(vikon): fetch parts from VIKON API instead of hardcoded config
2026-07-05 11:32:54 +05:00
F4ilji
9a9521c570
fix(vikon): initialize selectedParts arrays to prevent crash on checkbox click
2026-07-05 11:11:24 +05:00
F4ilji
d83364432e
feat(vikon): replace part select with checkboxes for multi-selection
2026-07-05 09:55:45 +05:00
F4ilji
1d423adc12
feat(vikon): add part selection UI to Vue dashboard
2026-07-05 02:52:50 +05:00
F4ilji
a4fef0bb3d
feat(dashboard): add DashboardError.vue with full error context display
2026-07-05 01:18:04 +05:00
F4ilji
204e31c06d
fix(vikon): show detailed error message with HTTP status code
2026-07-04 21:33:20 +05:00
F4ilji
87732720ef
feat(vikon): merge core update + FM sync into single Update button
2026-07-04 21:25:29 +05:00