/** * Show modules management page for an event. */ public function showModules(Event $event) { try { // Get all modules with completion counts and tier information for this event $modules = DB::table('modules') ->leftJoin(DB::raw('(SELECT module_id, COUNT(*) as completion_count FROM user_module_progress JOIN event_user ON user_module_progress.user_id = event_user.user_id WHERE event_user.event_id = ? AND user_module_progress.status = \'completed\' GROUP BY module_id) as completions'), 'modules.id', '=', 'completions.module_id') ->join('tiers', 'modules.tier_id', '=', 'tiers.id') ->select('modules.*', 'tiers.name as tier_name', DB::raw('COALESCE(completions.completion_count, 0) as completion_count')) ->setBindings([$event->id]) ->orderBy('tiers.order') ->orderBy('modules.order') ->get(); // Group modules by tier $tierModules = $modules->groupBy('tier_name'); // Get event's current module assignments $eventModules = DB::table('event_module') ->where('event_id', $event->id) ->pluck('module_id') ->toArray(); return view('admin.events.manage_modules', compact('event', 'tierModules', 'eventModules')); } catch (\Exception $e) { return redirect()->route('admin.events.index')->with('error', 'Error loading modules: ' . $e->getMessage()); } } /** * Update module assignments for an event. */ public function updateModules(Request $request, Event $event) { try { $moduleIds = $request->input('modules', []); // Sync the modules for this event DB::table('event_module')->where('event_id', $event->id)->delete(); foreach ($moduleIds as $moduleId) { DB::table('event_module')->insert([ 'event_id' => $event->id, 'module_id' => $moduleId, 'created_at' => now(), 'updated_at' => now(), ]); } return redirect()->route('admin.events.modules', $event)->with('success', 'Event modules updated successfully.'); } catch (\Exception $e) { return redirect()->route('admin.events.modules', $event)->with('error', 'Error updating modules: ' . $e->getMessage()); } } /** * Show tiers management page for an event. */ public function showTiers(Event $event) { try { $tiers = DB::table('tiers') ->leftJoin(DB::raw('(SELECT modules.tier_id, COUNT(DISTINCT user_module_progress.user_id) as user_count FROM user_module_progress JOIN modules ON user_module_progress.module_id = modules.id JOIN event_user ON user_module_progress.user_id = event_user.user_id WHERE event_user.event_id = ? AND user_module_progress.status = \'completed\' GROUP BY modules.tier_id) as completions'), 'tiers.id', '=', 'completions.tier_id') ->select('tiers.*', DB::raw('COALESCE(completions.user_count, 0) as user_count')) ->setBindings([$event->id]) ->orderBy('tiers.order') ->get(); // Get event's current tier assignments $eventTiers = DB::table('event_tier') ->where('event_id', $event->id) ->pluck('tier_id') ->toArray(); return view('admin.events.manage_tiers', compact('event', 'tiers', 'eventTiers')); } catch (\Exception $e) { return redirect()->route('admin.events.index')->with('error', 'Error loading tiers: ' . $e->getMessage()); } } /** * Update tier assignments for an event. */ public function updateTiers(Request $request, Event $event) { try { $tierIds = $request->input('tiers', []); // Sync the tiers for this event DB::table('event_tier')->where('event_id', $event->id)->delete(); foreach ($tierIds as $tierId) { DB::table('event_tier')->insert([ 'event_id' => $event->id, 'tier_id' => $tierId, 'created_at' => now(), 'updated_at' => now(), ]); } return redirect()->route('admin.events.tiers', $event)->with('success', 'Event tiers updated successfully.'); } catch (\Exception $e) { return redirect()->route('admin.events.tiers', $event)->with('error', 'Error updating tiers: ' . $e->getMessage()); } }