diff --git a/app/Controllers/HomeController.php b/app/Controllers/HomeController.php index b2f28b55e626a02de841bad3294da004f1be8399..68816c0c5467e94d8eab202eb86834c1c9a94372 100644 --- a/app/Controllers/HomeController.php +++ b/app/Controllers/HomeController.php @@ -13,27 +13,27 @@ namespace App\Controllers; use App\Models\PodcastModel; use CodeIgniter\HTTP\RedirectResponse; use Config\Services; -use Exception; class HomeController extends BaseController { public function index(): RedirectResponse | string { - $sortOptions = ['activity', 'created_desc', 'created_asc']; - $sortBy = in_array($this->request->getGet('sort'), $sortOptions, true) ? $this->request->getGet( - 'sort' - ) : 'activity'; - - try { - $allPodcasts = (new PodcastModel())->getAllPodcasts($sortBy); - } catch (Exception) { - // Database connection has not been set or could not find the podcasts table + $db = db_connect(); + if ($db->getDatabase() === '' || ! $db->tableExists('podcasts')) { + // Database has not been set or could not find the podcasts table // Redirecting to install page because it is likely that Castopod has not been installed yet. // NB: as base_url wouldn't have been defined here, redirect to install wizard manually $route = Services::routes()->reverseRoute('install'); return redirect()->to(rtrim(host_url(), '/') . $route); } + $sortOptions = ['activity', 'created_desc', 'created_asc']; + $sortBy = in_array($this->request->getGet('sort'), $sortOptions, true) ? $this->request->getGet( + 'sort' + ) : 'activity'; + + $allPodcasts = (new PodcastModel())->getAllPodcasts($sortBy); + // check if there's only one podcast to redirect user to it if (count($allPodcasts) === 1) { return redirect()->route('podcast-activity', [$allPodcasts[0]->handle]);