- CLAUDE.md: přidány Gitea API credentials a UTF-8 poznámka
- .claude/settings.json: odebrán code-review plugin
- sql/migrate_encrypt_totp_secrets.php: smazán (migrace již proběhla)
- reports/: přidány pracovní reporty z 2026-03-12 a 2026-03-13
- dist: aktualizovány vendor a rate_limits
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SEC-1: nahrazen exec('fsutil') za PHP-native is_link()+realpath() v NasFileManager - eliminace command injection
- SEC-2: přidáno ověření aktuálního hesla při změně hesla (profile.php + DashProfile.jsx)
- BUG-1: attendance punch obalen do transakce s SELECT FOR UPDATE - prevence race condition při dvojkliku
- BUG-2: eliminován N+1 SQL dotaz pro VAT v invoice listu - výpočet přesunut do subquery
- BUG-5/6: delete a update attendance záznamů obaleny do transakcí - prevence nekonzistentního stavu
- BUG-7: opravena duplikace nabídky - přidáno chybějící pole unit v offer items
ESLint: 0 errors | PHPCS: 0 errors | Build: OK
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Backend: listFiles vrací full_path, detekce symlinků/junctions
- Backend: resolveProjectPath povoluje navigaci přes symlinky
- Frontend: zobrazení plné cesty pod breadcrumbem
- Frontend: ikona odkazu u symlinků s tooltipem cíle
- Fix: underline jen na názvu složky, ne na počtu položek
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- NasFileManager.php - filesystem helper (browse, upload, download, delete, rename, mkdir)
- project-files.php API - CRUD operace nad soubory projektu
- ProjectFileManager.jsx - React komponenta v detailu projektu
- Automaticke vytvoreni slozky pri vytvoreni projektu (rucne i z objednavky)
- Prejmenovani slozky pri zmene nazvu projektu
- Checkbox "Smazat i soubory na disku" pri mazani projektu/objednavky
- Path traversal ochrana, MIME validace, blocklist nebezpecnych typu
- Bily spinner v primary tlacitkach, ConfirmModal message jako div
- Case-insensitive rename fix pro Windows filesystem
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pridano pole responsible_user_id do tabulky projects s FK na users.
Select zodpovedne osoby v ProjectDetail, ProjectCreate a sloupec v seznamu projektu.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- attendance handlery pouzivaji getDbNow() misto PHP date()
- nova helper funkce getDbNow() v AttendanceHelpers.php
- audit log: cleanup endpoint (POST) s volbou stari zaznamu
- audit log: filtry na jednom radku
- dashboard: aktivita prejmenovana na Audit log s odkazem
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Nahrazeny tlacitka nahoru/dolu za @dnd-kit drag & drop (SortableRow + DragHandle),
stejny pattern jako v nabidkach.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
padding: 12px !important v @media max-width 480px prepisoval padding-top
pro fixed header offset. Pridan explicitni padding-top s header vyskou.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- audit-log.php: API endpoint s filtrovanim (akce, entita, datum, hledani) a stranovanim
- AuditLog.jsx: stranka s tabulkou, filtry, pagination, skeleton loading
- Sidebar: polozka "Audit log" pod Systemem (settings.audit permission)
- cleanup.php: CLI script - maze rate limit soubory >24h a audit log >90 dni
- Migrace: settings.audit permission
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- NotFound.jsx: 404 stranka misto redirectu na / (lazy-loaded)
- ErrorBoundary: CSS tridy misto inline stylu, DEV error stack, odkaz na Dashboard
- useFocusTrap hook: Tab/Shift+Tab cycling, auto-focus, restore focus on close
- ConfirmModal: focus trap integrovan
- admin-error-stack CSS pro DEV chybovy vypis
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SELECT * nahrazen explicitnimi sloupci ve 22 PHP souborech (69+ vyskytu)
- users-handlers.php: password_hash explicitne vyloucen z dotazu
- Overdue detekce presunuta do invoices.php routeru (1x pred dispatch misto 3x v handlerech)
- Validator.php: validacni helper s pravidly required, string, int, email, in, numeric
- PaginationHelper: PHPStan typy opraveny
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- useDebounce hook (300ms) integrovan do useListData pro debounce hledani
- useListData rozsiren o page/perPage/pagination parametry (priprava pro P2)
- Migracni SQL s indexy na attendance, invoices, quotations, refresh_tokens, audit_log
- Odstranen nepouzivany TCPDF z composer.json
- Vite build plugin: graceful handling kdyz composer neni v PATH
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Handler funkce extrahovany z API souboru do api/admin/handlers/
- config.php rozdeleny na helpers.php (funkce) a constants.php (konstanty)
- require_once odstranen z class souboru (AuditLog, JWTAuth, LeaveNotification)
- vendor/autoload.php presunuto do config.php bootstrap
- totp-handlers.php: pridany use deklarace pro TwoFactorAuth
- phpstan.neon: bootstrapFiles, scanDirectories, dynamicConstantNames
- Opraveny chybejici routing bloky v totp.php a session.php
Vysledek: phpcs 0 errors 0 warnings, PHPStan 0 errors, ESLint 0 errors
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>