where('is_active', true) ->orderBy('sort_order', 'asc') ->orderBy('name', 'asc') ->get() ->toArray(); return array_map(function ($item) { return [ 'id' => $item->id, 'platform' => $item->platform, 'name' => $item->name, 'url' => $item->url, 'icon' => $item->icon, 'sort_order' => $item->sort_order, ]; }, $socialMedia); } catch (\Exception $e) { Log::error('Error fetching active social media: ' . $e->getMessage()); throw $e; } } /** * Get all social media settings (including inactive) for admin */ public function getAllSocialMediaSettings(): array { try { $settings = DB::table('social_media_settings') ->orderBy('sort_order', 'asc') ->orderBy('name', 'asc') ->get() ->toArray(); return array_map(function ($item) { return [ 'id' => $item->id, 'platform' => $item->platform, 'name' => $item->name, 'url' => $item->url, 'icon' => $item->icon, 'is_active' => (bool) $item->is_active, 'sort_order' => $item->sort_order, 'created_at' => $item->created_at, 'updated_at' => $item->updated_at, ]; }, $settings); } catch (\Exception $e) { Log::error('Error fetching all social media settings: ' . $e->getMessage()); throw $e; } } /** * Update social media settings (bulk update) */ public function updateSocialMediaSettings(array $socialMediaData): array { try { // Clear existing settings DB::table('social_media_settings')->truncate(); // Insert new settings $insertData = []; foreach ($socialMediaData as $index => $item) { $insertData[] = [ 'platform' => $item['platform'], 'name' => $item['name'], 'url' => $item['url'], 'icon' => $item['icon'] ?? null, 'is_active' => $item['is_active'] ?? true, 'sort_order' => $item['sort_order'] ?? $index, 'created_at' => now(), 'updated_at' => now(), ]; } DB::table('social_media_settings')->insert($insertData); // Return updated settings return $this->getAllSocialMediaSettings(); } catch (\Exception $e) { Log::error('Error updating social media settings: ' . $e->getMessage()); throw $e; } } /** * Add a single social media platform */ public function addSocialMediaPlatform(array $data): array { try { $id = DB::table('social_media_settings')->insertGetId([ 'platform' => $data['platform'], 'name' => $data['name'], 'url' => $data['url'], 'icon' => $data['icon'] ?? null, 'is_active' => $data['is_active'] ?? true, 'sort_order' => $data['sort_order'] ?? 0, 'created_at' => now(), 'updated_at' => now(), ]); return $this->getAllSocialMediaSettings(); } catch (\Exception $e) { Log::error('Error adding social media platform: ' . $e->getMessage()); throw $e; } } /** * Update a single social media platform */ public function updateSocialMediaPlatform(int $id, array $data): array { try { DB::table('social_media_settings') ->where('id', $id) ->update([ 'platform' => $data['platform'], 'name' => $data['name'], 'url' => $data['url'], 'icon' => $data['icon'] ?? null, 'is_active' => $data['is_active'] ?? true, 'sort_order' => $data['sort_order'] ?? 0, 'updated_at' => now(), ]); return $this->getAllSocialMediaSettings(); } catch (\Exception $e) { Log::error('Error updating social media platform: ' . $e->getMessage()); throw $e; } } /** * Delete a social media platform */ public function deleteSocialMediaPlatform(int $id): array { try { DB::table('social_media_settings')->where('id', $id)->delete(); return $this->getAllSocialMediaSettings(); } catch (\Exception $e) { Log::error('Error deleting social media platform: ' . $e->getMessage()); throw $e; } } /** * Toggle active status of a social media platform */ public function toggleSocialMediaPlatform(int $id): array { try { $platform = DB::table('social_media_settings')->where('id', $id)->first(); if (!$platform) { throw new \Exception('Social media platform not found'); } DB::table('social_media_settings') ->where('id', $id) ->update([ 'is_active' => !$platform->is_active, 'updated_at' => now(), ]); return $this->getAllSocialMediaSettings(); } catch (\Exception $e) { Log::error('Error toggling social media platform: ' . $e->getMessage()); throw $e; } } }