- 14 May, 2026 1 commit
-
-
Mahmoud Aglan authored
- Default to admin/ClubManagement superadmin account - Login form uses 'username' field, not 'email' Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 13 May, 2026 14 commits
-
-
Mahmoud Aglan authored
Write report to sys_get_temp_dir() instead of tools/ directory, and suppress with @ so it doesn't crash the page. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Visit /tools/smoke-test in browser to get full HTML report - Dark UI with stats cards, error details, and "Copy for Claude" button - Requires settings.edit permission (admin only) - Still works via CLI: php tools/smoke_test.php [url] [email] [pass] Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- SessionFeedbackController used CONCAT(first_name_ar, last_name_ar) but coaches table has full_name_ar — causes 500 on feedback pages - Add missing feedback_coach_summary.php view (controller referenced it) - Enhance smoke_test.php with better error extraction and Claude-pasteable output Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
All JOIN and SELECT queries referencing 'disciplines' updated to use the actual table name 'sport_disciplines' in Tournaments and PlayerAffairs modules. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Phase_63_005: removed AFTER `time_tier` (column doesn't exist), use AFTER `is_active` instead; removed duplicate `booker_type` ADD (already in schema) - Phase_63_006: renamed FK `fk_pa_player` → `fk_pach_player` and `fk_ppl_player` → `fk_pplog_player` to avoid duplicate constraint names Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
DebugBar used self:: in heredoc causing undefined variable fatal error. Database query instrumentation now wrapped in try/catch so logging/debug can never crash actual queries. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
- 12 May, 2026 8 commits
-
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
Cast string params to int at the start of each controller method. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
- Phase_45_004: activity_pricing has no 'fee_type' column, use 'nonmember_rate_pm' as AFTER target instead - Seed Phase_52_001: system_config uses 'group_name' not 'category', and 'description_ar' not 'description', and needs 'config_type' Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Grid rewrite: - Fully interactive lanes×timeslots grid with click/drag cell selection - Click individual cells, drag-select rectangles, row headers (full lane), column headers (full time slot) - Inline booking panel slides up from bottom when cells are selected — no separate page needed, book directly from the grid - Recurring schedules shown as purple cells on the grid - Real-time refresh every 30s via AJAX - Visual pool dimensions display with lane numbers New: Weekly Schedules (pool_schedules): - Create recurring weekly templates (coach, academy, age group, gender, lanes) - Effective date range, color-coded, max swimmers per schedule - Auto-displayed on the grid for the matching day of week - Manage page with create form + list of all schedules with delete New: Pool Dashboard (/pool/{id}/dashboard): - KPI cards: today/week/month bookings, swimmers, revenue, utilization % - Heatmap: bookings per hour per day of week (last 30 days) with color intensity - Booking type breakdown with progress bars - Lane utilization bars (hours used vs available) - Peak hours chart with AI recommendations for increasing occupancy - Low-utilization detection + suggestions Updated pool index: - Cards with mini pool visual, 3 action buttons (grid, dashboard, schedules) - Better visual hierarchy and information density Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Medical records: upload with certificate type (ممارس/أكاديمي/دولي), auto-validity calculation, Board of Trustees approval workflow (pending → approved/rejected) - New /medical-approvals page for مجلس الأمناء with approve/reject actions - Mirror (المراية): interactive grid system for facility scheduling - create grids, assign coaches/academies to boxes, manage trainees (max 5 per box) - Facility dashboard: per-facility stats with day/week/month/custom date filtering - FacilityPricingService: reads club pricing rules from system_config, integrates with reservation creation as rate fallback - Pricing seed: official 2025 club ruleset for non-educational activities stored in system_config (member/non-member rates, entry tickets, general fees) - Updated sidebar menu with medical approvals link Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 11 May, 2026 3 commits
-
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
- Fix route URL mismatches in player show.php (card/activate, card/suspend, card/revoke, enroll/drop) - Fix Sports module permissions (was using temp.view/temp.add, now sports.view/sports.add/sports.convert) - Add CSRF middleware to Sports POST route - Fix AcademyEnrollment::getForPlayer() to JOIN academy/level names - Add NID auto-parsing API and JS to player create/edit (deduces DOB, age, gender, governorate) - Replace raw ID inputs in enrollment form with cascading dropdowns (academy→level→schedule) - Add profile photo upload to player create/edit/show with live preview - Add full player history timeline (enrollments, payments, medical, attendance) - Add sport→facility cascade filter to reservation create form - Make all code fields optional with auto-generation (Disciplines, Academies, Facilities, Levels) - Overhaul Sports create form with discipline dropdown and competitive level select Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 10 May, 2026 5 commits
-
-
Mahmoud Aglan authored
The service_catalog table does not have a 'category' column — the seed was inserting into it causing deployment to fail with "Unknown column 'category'". Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
- 05 May, 2026 8 commits
-
-
Mahmoud Aglan authored
Root cause found: app.js sets opacity:0 + transform:translateY(16px) on EVERY .card element at DOMContentLoaded, then relies on an IntersectionObserver to reveal them. When cards are already in viewport or content is tall, the observer fails to fire and cards stay invisible. Zooming triggered a layout recalculation that forced the observer to re-evaluate, making content reappear — explaining the user's symptom. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Phase_24 migration: converted to closure that checks information_schema before adding each column (column already exists on deployed DB). Phase_39 seed: check if permissions table exists before inserting (table was never created — skip gracefully). Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
The list disappearance was caused by multiple CSS properties creating GPU compositing layers that Chrome fails to paint correctly for tall content: 1. backdrop-filter on .top-header (sticky + blur = broken paint bounds) 2. animation on .page-content (creates layer on entire page) 3. transition:all on every table row (hundreds of compositing hints) 4. tableRowIn animation with transform (layer per animated row) 5. transition + hover on .card (unnecessary for a container) Removed all these GPU-triggering properties. The visual appearance is preserved (opacity 0.97 white background instead of blur, hover effects still work via :hover without transition). Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
The chart_of_accounts.name_en column is VARCHAR(200) NOT NULL. Both seeds were passing null which caused integrity constraint violations. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Root cause: transition with transform on .card promoted it to a GPU compositing layer. Chrome miscalculates paint bounds for tall containers with many children, causing content to clip until a zoom triggers repaint. Fixes: - Remove transform from .card transition (only box-shadow/border-color) - Use transform:none instead of translateY(0)/translateX(0) in animation end states to release the compositing layer after animation completes Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Shows opening debit/credit, period debit/credit, closing debit/credit columns matching standard Egyptian accounting trial balance format. Adds CSV export endpoint with UTF-8 BOM for Arabic Excel support. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Change .card overflow from hidden to visible. The hidden overflow caused Chrome to miscalculate paint regions for containers with many child elements (chart of accounts, rules, etc.), resulting in content being invisible until a repaint was triggered. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
- 03 May, 2026 1 commit
-
-
Mahmoud Aglan authored
-