fix: check for database connection and podcasts table existence before redirecting to install

fix signature regex
This commit is contained in:
Yassine Doghri 2021-06-10 13:18:58 +00:00
commit eb74e81c3d
No known key found for this signature in database
GPG key ID: 3E7F89498B960C9F
6 changed files with 22 additions and 29 deletions

View file

@ -11,25 +11,25 @@ declare(strict_types=1);
namespace App\Controllers;
use App\Models\PodcastModel;
use CodeIgniter\Database\Exceptions\DatabaseException;
use CodeIgniter\HTTP\RedirectResponse;
use Config\Services;
use mysqli_sql_exception;
class HomeController extends BaseController
{
public function index(): RedirectResponse | string
{
try {
$allPodcasts = (new PodcastModel())->findAll();
} catch (mysqli_sql_exception | DatabaseException) {
// An error was caught when retrieving the podcasts from the database.
$connections = \CodeIgniter\Database\Config::getConnections();
$db = db_connect();
if ($connections === [] || ! $db->tableExists('podcasts')) {
// Cannot connect to the database or cannot find the podcasts table
// Redirecting to install page because it is likely that Castopod Host 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);
}
$allPodcasts = (new PodcastModel())->findAll();
// check if there's only one podcast to redirect user to it
if (count($allPodcasts) === 1) {
return redirect()->route('podcast-activity', [$allPodcasts[0]->name]);