mirror of
https://github.com/Deutscher-Tischfussballbund/com_sportsmanager.git
synced 2026-06-10 06:27:52 +00:00
chore: replace database.php by splitting into init and update
This commit is contained in:
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\Language\Text;
|
||||||
|
use Joomla\CMS\Uri\Uri;
|
||||||
|
use Joomla\Database\DatabaseInterface;
|
||||||
|
use Joomla\Database\Mysql\MysqlDriver;
|
||||||
|
use Joomla\Database\Mysqli\MysqliDriver;
|
||||||
|
|
||||||
|
function initDatabase(): void
|
||||||
|
{
|
||||||
|
global $sportsmanager_database_local;
|
||||||
|
global $sportsmanager_database_external;
|
||||||
|
global $sportsmanager_joomla_path;
|
||||||
|
global $sportsmanager_joomla_url;
|
||||||
|
|
||||||
|
$sportsmanager_database_local = NULL;
|
||||||
|
$sportsmanager_database_external = NULL;
|
||||||
|
$sportsmanager_joomla_path = JPATH_ROOT;
|
||||||
|
$sportsmanager_joomla_url = Uri::base();
|
||||||
|
|
||||||
|
$sportsmanager_database_local = Factory::getContainer()->get(DatabaseInterface::class);
|
||||||
|
|
||||||
|
$query = "SELECT * FROM #__sportsmanager_einstellungen";
|
||||||
|
$sportsmanager_database_local->setQuery($query);
|
||||||
|
if (!$sportsmanager_database_local->execute()) {
|
||||||
|
die($sportsmanager_database_local->stderr(true));
|
||||||
|
}
|
||||||
|
$rows = $sportsmanager_database_local->loadObjectList();
|
||||||
|
|
||||||
|
$database_driver = "mysql";
|
||||||
|
$database_host = "";
|
||||||
|
$database_user = "";
|
||||||
|
$database_password = "";
|
||||||
|
$database_database = "";
|
||||||
|
$database_prefix = "jos_";
|
||||||
|
$joomla_path = "";
|
||||||
|
$joomla_url = "";
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
$name = mb_strtolower($row->name);
|
||||||
|
if ($name == "database_driver")
|
||||||
|
$database_driver = $row->wert;
|
||||||
|
else if ($name == "database_host")
|
||||||
|
$database_host = $row->wert;
|
||||||
|
else if ($name == "database_user")
|
||||||
|
$database_user = $row->wert;
|
||||||
|
else if ($name == "database_password")
|
||||||
|
$database_password = $row->wert;
|
||||||
|
else if ($name == "database_database")
|
||||||
|
$database_database = $row->wert;
|
||||||
|
else if ($name == "database_prefix")
|
||||||
|
$database_prefix = $row->wert;
|
||||||
|
else if ($name == "joomla_path")
|
||||||
|
$joomla_path = $row->wert;
|
||||||
|
else if ($name == "joomla_url")
|
||||||
|
$joomla_url = $row->wert;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($database_driver) && !empty($database_host) && !empty($database_user) && !empty($database_database) && !empty($database_prefix) && !empty($joomla_path) && !empty($joomla_url)) {
|
||||||
|
$option = array(); //prevent problems
|
||||||
|
|
||||||
|
$option['driver'] = $database_driver; // Database driver name
|
||||||
|
$option['host'] = $database_host; // Database host name
|
||||||
|
$option['user'] = $database_user; // User for database authentication
|
||||||
|
$option['password'] = $database_password; // Password for database authentication
|
||||||
|
$option['database'] = $database_database; // Database name
|
||||||
|
$option['prefix'] = $database_prefix; // Database prefix (may be empty)
|
||||||
|
|
||||||
|
$sportsmanager_database_external = match ($option['driver']) {
|
||||||
|
'mysql' => new MysqlDriver($option),
|
||||||
|
'mysqli' => new MysqliDriver($option),
|
||||||
|
default => NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($sportsmanager_database_external === NULL) {
|
||||||
|
echo "<strong>" . Text::_('COM_SPORTSMANAGER_CONNECTION_EXTERNAL_DB_FAILURE') . "</strong><br><br>";
|
||||||
|
} else {
|
||||||
|
$query = "SELECT wert FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'";
|
||||||
|
$sportsmanager_database_external->setQuery($query);
|
||||||
|
try {
|
||||||
|
if (!$sportsmanager_database_external->execute()) {
|
||||||
|
echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_TABLES') . "</strong><br><br>";
|
||||||
|
$sportsmanager_database_external = NULL;
|
||||||
|
} else {
|
||||||
|
$db_version = $sportsmanager_database_external->loadResult();
|
||||||
|
if ($db_version < 38) {
|
||||||
|
echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_VERSION') . "</strong><br><br>";
|
||||||
|
$sportsmanager_database_external = NULL;
|
||||||
|
} else if (!is_dir($joomla_path . DIRECTORY_SEPARATOR . "images" . DIRECTORY_SEPARATOR . "sportsmanager")) {
|
||||||
|
echo "<strong>" . Text::_('COM_SPORTSMANAGER_EXTERNAL_NO_IMAGES_FOLDER') . " '/images/sportsmanager'!</strong><br><br>";
|
||||||
|
$sportsmanager_database_external = NULL;
|
||||||
|
} else {
|
||||||
|
$sportsmanager_joomla_path = $joomla_path;
|
||||||
|
$sportsmanager_joomla_url = $joomla_url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
error_log($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isExternalDatabase(): bool
|
||||||
|
{
|
||||||
|
global $sportsmanager_database_external;
|
||||||
|
return $sportsmanager_database_external != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDatabase($forceLocalDB = FALSE)
|
||||||
|
{
|
||||||
|
global $sportsmanager_database_local;
|
||||||
|
global $sportsmanager_database_external;
|
||||||
|
if ($forceLocalDB || $sportsmanager_database_external == NULL)
|
||||||
|
$db = $sportsmanager_database_local;
|
||||||
|
else
|
||||||
|
$db = $sportsmanager_database_external;
|
||||||
|
|
||||||
|
return $db;
|
||||||
|
}
|
||||||
+819
-781
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user