<ul>
<li>CRITICAL: EventsController.php addEvent() and updateEvent() — $public undefined after extract($request): not present in defaults block. MySQL Fatal: Incorrect integer value "" for column "public". Fixed: added $public = $public ?? 0 in defaults block for both methods.</li>
<li>CRITICAL: EventsController.php addEventCategory() — groupid_fk set to NULL which SDBA serializes as empty string in SQL causing MySQL Fatal: Incorrect integer value "" for column "groupid_fk". Fixed: NULL → 0 cast for groupid_fk in all three INSERT/UPDATE arrays across addEventCategory(), addEvent(), updateEvent().</li>
<li>CRITICAL: EventsController.php updateEvent() — DateTimeZone constructed with raw $prevEve["TimeZone"] value which may contain full composite string "America/New_York - (UTC-05:00) New York" causing Fatal Exception. Fixed: extractTimezoneId pattern applied — strip after " - ", fallback to America/New_York.</li>
<li>CRITICAL: EventsController.php saversvpevent() — $eventDetails["activeacctid"] vs $_SESSION["activeacctid"] comparison missing null guards causing Warning: Undefined array key "activeacctid". Fixed: ?? null guards on both sides.</li>
<li>HIGH: events.controller.php saveUploadSettings action — $event_settingsId undefined variable (not in extract() nor $_POST defaults). Generated Warnings on lines 1111 and 1123. Fixed: $event_settingsId = isset($_POST["event_settingsId"]) ? $_POST["event_settingsId"] : null added before usage.</li>
<li>HIGH: inc/insert_update.php getEventTable action — extract($row_rsAll) called on undefined $row_rsAll (should be $eventItem) inside foreach loop, clobbering loop variable. Fixed: spurious extract() line removed.</li>
<li>HIGH: inc/insert_update.php uploadEventFile action — $domain undefined variable used in success json_encode link. Fixed: replaced with $_SERVER["HTTP_HOST"].</li>
<li>HIGH: inc/insert_update.php getDataEvent and getDataCateg actions — missing die() after echo json_encode() allowing execution to fall through to next action block. Fixed: die added after both.</li>
<li>MEDIUM: inc_event_listing_manager.php — operator precedence bug: $_SESSION["super_admin"] ?? false == 1 evaluates as ?? (false == 1) = ?? false = always false for logged-out. Fixed: (($_SESSION["super_admin"] ?? false) == 1).</li>
<li>MEDIUM: event_file_related_modal.php — str_replace on null: $eventsettingsQueryInfo["settings_filetypes_images"] and ["settings_filetypes_downloads"] accessed without ?? guard when DB record missing. Fixed: ?? "" added.</li>
<li>MEDIUM: event_modal.php — $liveMeet array accessed directly ($liveMeet["display"], ["network_idfk"], ["name"], ["image"], ["icon_class"]) without null guards when LiveMeet not configured. Fixed: ?? guards and () checks on all 5 accesses.</li>
<li>JS: custom_js.php — 3 uncovered JSON.parse(res) calls in delete event handler, event form submit handler, and getEventsById callback with no try/catch. PHP warnings prepended to JSON cause SyntaxError and swal stuck open. Fixed: all 3 wrapped in try/catch with swal error fallback. 4th JSON.parse fixed with console.error fallback.</li>
<li>JS: custom_js.php — hardcoded http:// protocol in ip-api.com AJAX call. Fixed: changed to protocol-relative //ip-api.com/json/.</li>
<li>SPEED: events_rsvp — no index on eventid_fk or activeacctid. EXPLAIN showed type=ALL 72 rows on per-event RSVP fetch. Added: idx_eventid_fk, idx_activeacctid. Post-fix: type=ref.</li>
<li>SPEED: domain_tblnm_event_permissions — no index on sitelinkid_fk or siteid_fk. EXPLAIN showed type=ALL 18 rows on every page load. Added: idx_sitelinkid_fk, idx_siteid_fk. Post-fix: type=ref rows=1.</li>
<li>SPEED N+1: list_events_categories.php and inc/insert_update.php getCategTable — parentCategoryQuery executed inside foreach loop (1 query per category row). Fixed: pre-cache all categories into array keyed by EventCategoryID before loop, lookup from cache in O(1).</li>
<li>SPEED N+1: upcoming_events_data.php — events_rsvp queried per-event inside render foreach. Fixed: single batch IN() query pre-fetches all RSVP data for current user; render loop uses array cache.</li>
</ul>