34 Commits
Author SHA1 Message Date
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 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 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 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 b7259fdd6f refactor(permissions): replace hardcoded route middleware with auto-resolving CheckDashboardPermission
- New middleware extracts permission name from route name automatically
- dashboard.posts.index → view_any_post
- dashboard.admission-campaigns.store → view_any_admission_campaign
- vikon-updates, integration-credentials excluded from check
- Single middleware on parent group instead of 28 individual ones
2026-07-16 12:05:15 +05:00
F4ilji b8fd42d9f8 fix(security): add permission middleware to dashboard routes
Each route group now requires view_any_{resource} permission.
Without the permission, Spatie returns 403 Forbidden.
VIKON updates and integration-credentials remain unprotected.
2026-07-16 11:57:20 +05:00
F4ilji 9bac98d175 fix(logging): route EmailFetchException to email channel instead of app 2026-07-06 13:39:26 +05:00
F4ilji 769b2ff342 feat(logging): migrate remaining files to app channel — all Log:: calls now use domain channels 2026-07-05 23:32:01 +05:00
F4ilji 709c51ea49 remove: all deploy UI/backend code, keep _deploy folder only
- Delete DeployRunCommand, DeployController, deploy API routes
- Delete Dashboard/Deploy Vue pages and components
- Remove deploy route from web.php
- Remove deploy quick action from config
- Remove DeployRunCommand from ConsoleKernel
2026-07-02 17:36:42 +05:00
F4ilji c8693b8f0e fix: replace web middleware with minimal session+CSRF stack for deploy API 2026-07-02 17:34:27 +05:00
F4ilji 48ffd217b8 fix: secure deploy API, remove Docker-in-Docker, add DB backup
- Add web+superadmin middleware to /api/deploy routes
- Return JSON 403 in EnsureUserIsSuperadmin for API requests
- Remove Docker CLI and docker.sock from app container
- Replace docker compose restart with supervisorctl
- Add mysqldump backup step before migrations
2026-07-02 17:26:38 +05:00
F4ilji fce1d3f454 fix: proper route structure - API in api.php, web in web.php 2026-07-02 17:10:44 +05:00
F4ilji 8b312e0ecd fix: move deploy API routes to web group with session auth 2026-07-02 17:01:32 +05:00
F4ilji c80baf4807 fix: return JSON 401 for unauthenticated API requests 2026-07-02 13:38:03 +05:00
F4ilji 6fb0079e7c feat: add deploy route and sidebar navigation 2026-07-02 12:50:09 +05:00
F4ilji 73d123a62d feat: add deploy API endpoints 2026-07-02 12:48:09 +05:00
F4ilji 8bc5c367d6 revert: remove deploy UI, controller, actions, tasks, and routes
- Remove Deploy/Index.vue, DeployController, DeploySiteAction, DeployTask
- Remove deploy routes from web.php
- Remove deploy menu item from menuConfig
- Remove deploy button and methods from Main.vue
- Remove deploy logging channel from logging.php
- Keep _deploy/ folder for future CI/CD setup
2026-07-02 12:00:48 +05:00
F4ilji 8364b220cc feat: add Integration Credentials CRUD and Deploy UI
Integration Credentials:
- Add IntegrationCredential model with encrypted payload
- Add full CRUD: ManageIntegrationCredentialsAction, 4 Tasks, Controller, Requests
- Add migration for integration_credentials table
- Add Vue pages: Index, Create, Edit
- AI tasks now read API keys from DB instead of .env
- Add sidebar menu item

Deploy UI:
- Add DeployTask with full deploy lifecycle management
- Extend DeployController with index, log, history endpoints
- Add Deploy/Index.vue with live polling and deploy log viewer
- Add sidebar menu item and QuickAction for Sveden

UI:
- Add 'key' icon to SidebarNavItem
- Change deploy button color to amber in Main.vue
2026-07-02 01:03:13 +05:00
F4ilji c9fca0bf29 feat: add Sveden update feature
- SvedenController: upload zip and extract to public/sveden
- UpdateSvedenAction: orchestrates temp file handling and extraction
- ExtractSvedenArchiveTask: validates and extracts sveden/abitur folders with security checks
- Sveden.vue: upload UI with progress indicator
- Added routes: GET/POST /dashboard/sveden
- Added quick action: Обновить Sveden
2026-06-30 16:12:16 +05:00
F4ilji 886cac5f95 changes 2026-04-15 16:41:08 +05:00
F4ilji 2e77978d5c changes 2026-04-13 14:37:57 +05:00
F4ilji 9e35cf848d changes 2026-04-10 09:01:47 +05:00
F4ilji 2fc19530ad changes 2026-04-09 17:54:02 +05:00
F4ilji 4aa4b9cadf changes 2026-04-09 17:23:10 +05:00
F4ilji e986940680 changes 2026-04-09 09:09:17 +05:00
F4ilji 169a2f5654 changes 2026-04-08 14:14:38 +05:00
F4ilji 936b1fb5b0 changes 2026-04-07 17:54:26 +05:00
F4ilji 1256adba98 changes 2026-03-23 10:50:31 +05:00
F4ilji b1c4f7b054 changes 2026-03-21 15:40:18 +05:00
F4ilji d0a106159d changes 2026-03-21 00:53:49 +05:00
F4ilji 836452add6 Changes 2026-03-20 23:35:09 +05:00
F4ilji a3948c872e Changes 2026-03-20 21:47:02 +05:00