Better error reporting
parent
09667920a2
commit
909fbc2626
|
@ -1,17 +1,19 @@
|
|||
<?php
|
||||
|
||||
require '../app/helpers/errors.php';
|
||||
|
||||
class Database {
|
||||
private $pdo;
|
||||
|
||||
public function __construct($options) {
|
||||
// pdo needed
|
||||
if ( !extension_loaded('pdo') ) {
|
||||
throw new Exception('PDO extension not loaded.');
|
||||
$error = getError('PDO extension not loaded.');
|
||||
}
|
||||
|
||||
// options check
|
||||
if (empty($options['type'])) {
|
||||
throw new Exception('Database type is not set.');
|
||||
$error = getError('Database type is not set.');
|
||||
}
|
||||
|
||||
// database type
|
||||
|
@ -23,19 +25,19 @@ class Database {
|
|||
$this->connectMysql($options);
|
||||
break;
|
||||
default:
|
||||
throw newException("Database type \"{$options['type']}\" is not supported.");
|
||||
$error = getError("Database type \"{$options['type']}\" is not supported.");
|
||||
}
|
||||
}
|
||||
|
||||
private function connectSqlite($options) {
|
||||
// pdo_sqlite extension is needed
|
||||
if (!extension_loaded('pdo_sqlite')) {
|
||||
throw new Exception('PDO extension for SQLite not loaded.');
|
||||
$error = getError('PDO extension for SQLite not loaded.');
|
||||
}
|
||||
|
||||
// SQLite options
|
||||
if (empty($options['dbFile']) || !file_exists($options['dbFile'])) {
|
||||
throw new Exception('SQLite database file not found.');
|
||||
$error = getError("SQLite database file \"{$dbFile}\" not found.");
|
||||
}
|
||||
|
||||
// connect to SQLite
|
||||
|
@ -43,19 +45,19 @@ class Database {
|
|||
$this->pdo = new PDO("sqlite:" . $options['dbFile']);
|
||||
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
} catch (PDOException $e) {
|
||||
throw new Exception('SQLite connection failed: ' . $e->getMessage());
|
||||
$error = getError('SQLite connection failed: ', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private function connectMysql($options) {
|
||||
// pdo_mysql extension is needed
|
||||
if (!extension_loaded('pdo_mysql')) {
|
||||
throw new Exception('PDO extension for MySQL not loaded.');
|
||||
$error = getError('PDO extension for MySQL not loaded.');
|
||||
}
|
||||
|
||||
// MySQL options
|
||||
if (empty($options['host']) || empty($options['dbname']) || empty($options['user'])) {
|
||||
throw new Exception('MySQL connection data is missing.');
|
||||
$error = getError('MySQL connection data is missing.');
|
||||
}
|
||||
|
||||
// Connect to MySQL
|
||||
|
@ -64,7 +66,7 @@ class Database {
|
|||
$this->pdo = new PDO($dsn, $options['user'], $options['password'] ?? '');
|
||||
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
} catch (PDOException $e) {
|
||||
throw new Exception('MySQL connection failed: ' . $e->getMessage());
|
||||
$error = getError('MySQL connection failed: ', $config['environment'], $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ return [
|
|||
// system info
|
||||
'version' => '0.1.1',
|
||||
// development has verbose error messages, production has not
|
||||
'environment' => 'production',
|
||||
'environment' => 'production1',
|
||||
|
||||
// *************************************
|
||||
// Maintained by the app, edit with care
|
||||
|
|
|
@ -7,19 +7,15 @@ function connectDB($config, $database = '', $platform_id = '') {
|
|||
if ($database === 'jilo') {
|
||||
try {
|
||||
$dbFile = $config['platforms'][$platform_id]['jilo_database'] ?? null;
|
||||
if (!$dbFile) {
|
||||
throw new Exception("Invalid platform ID \"$platform_id\", database file not found.");
|
||||
if (!$dbFile || !file_exists($dbFile)) {
|
||||
throw new Exception(getError("Invalid platform ID \"{$platform_id}\", database file \"{$dbFile}\"not found."));
|
||||
}
|
||||
$db = new Database([
|
||||
'type' => 'sqlite',
|
||||
'dbFile' => $dbFile,
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
if ($config['environment'] === 'production') {
|
||||
$error = 'There was an unexpected error. Please try again.';
|
||||
} else {
|
||||
$error = 'Error: ' . $e->getMessage();
|
||||
}
|
||||
$error = getError('Error connecting to DB.', $e->getMessage());
|
||||
include '../app/templates/block-message.php';
|
||||
exit();
|
||||
}
|
||||
|
@ -36,7 +32,7 @@ function connectDB($config, $database = '', $platform_id = '') {
|
|||
]);
|
||||
$pdo = $db->getConnection();
|
||||
} catch (Exception $e) {
|
||||
$error = 'Error: ' . $e->getMessage();
|
||||
$error = getError('Error connecting to DB.', $e->getMessage());
|
||||
include '../app/templates/block-message.php';
|
||||
exit();
|
||||
}
|
||||
|
@ -53,7 +49,7 @@ function connectDB($config, $database = '', $platform_id = '') {
|
|||
]);
|
||||
$pdo = $db->getConnection();
|
||||
} catch (Exception $e) {
|
||||
$error = 'Error: ' . $e->getMessage();
|
||||
$error = getError('Error connecting to DB.', $e->getMessage());
|
||||
include '../app/templates/block-message.php';
|
||||
exit();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
function getError($message, $error = '', $environment = null) {
|
||||
global $config;
|
||||
$environment = $config['environment'] ?? 'production';
|
||||
|
||||
if ($environment === 'production') {
|
||||
return 'There was an unexpected error. Please try again.';
|
||||
} else {
|
||||
return $error ?: $message;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -5,7 +5,7 @@ require '../app/classes/component.php';
|
|||
|
||||
// connect to database
|
||||
require '../app/helpers/database.php';
|
||||
$db = connectDB($config, 'jilo');
|
||||
$db = connectDB($config, 'jilo', $platform_id);
|
||||
|
||||
// specify time range
|
||||
include '../app/helpers/time_range.php';
|
||||
|
|
|
@ -5,7 +5,7 @@ require '../app/classes/conference.php';
|
|||
|
||||
// connect to database
|
||||
require '../app/helpers/database.php';
|
||||
$db = connectDB($config, 'jilo');
|
||||
$db = connectDB($config, 'jilo', $platform_id);
|
||||
|
||||
// specify time range
|
||||
include '../app/helpers/time_range.php';
|
||||
|
|
|
@ -4,9 +4,6 @@ require_once '../app/classes/database.php';
|
|||
require '../app/classes/conference.php';
|
||||
require '../app/classes/participant.php';
|
||||
|
||||
// by default we connect ot the first configured platform
|
||||
$platform_id = $_REQUEST['platform'] ?? '0';
|
||||
|
||||
// connect to database
|
||||
require '../app/helpers/database.php';
|
||||
$db = connectDB($config, 'jilo', $platform_id);
|
||||
|
|
|
@ -57,7 +57,7 @@ try {
|
|||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$error = $e->getMessage();
|
||||
$error = getError('There was an unexpected error. Please try again.', $e->getMessage());
|
||||
}
|
||||
|
||||
if (!empty($config['login_message'])) {
|
||||
|
|
|
@ -5,7 +5,7 @@ require '../app/classes/participant.php';
|
|||
|
||||
// connect to database
|
||||
require '../app/helpers/database.php';
|
||||
$db = connectDB($config, 'jilo');
|
||||
$db = connectDB($config, 'jilo', $platform_id);
|
||||
|
||||
// specify time range
|
||||
include '../app/helpers/time_range.php';
|
||||
|
|
|
@ -32,7 +32,7 @@ if ($config['registration_enabled'] === true) {
|
|||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$error = $e->getMessage();
|
||||
$error = getError('There was an unexpected error. Please try again.', $e->getMessage());
|
||||
}
|
||||
|
||||
include '../app/templates/block-message.php';
|
||||
|
|
|
@ -87,6 +87,9 @@ if (isset($_SESSION['error'])) {
|
|||
$error = $_SESSION['error'];
|
||||
}
|
||||
|
||||
// by default we connect ot the first configured platform
|
||||
$platform_id = $_REQUEST['platform'] ?? '0';
|
||||
|
||||
// page building
|
||||
if (in_array($page, $allowed_urls)) {
|
||||
// logout is a special case, as we can't use session vars for notices
|
||||
|
|
Loading…
Reference in New Issue