diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:46:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:46:43 +0000 |
commit | 3e02d5aff85babc3ffbfcf52313f2108e313aa23 (patch) | |
tree | b01f3923360c20a6a504aff42d45670c58af3ec5 /library/Icinga/Common/Database.php | |
parent | Initial commit. (diff) | |
download | icingaweb2-upstream.tar.xz icingaweb2-upstream.zip |
Adding upstream version 2.12.1.upstream/2.12.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/Icinga/Common/Database.php')
-rw-r--r-- | library/Icinga/Common/Database.php | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/library/Icinga/Common/Database.php b/library/Icinga/Common/Database.php new file mode 100644 index 0000000..d54eb25 --- /dev/null +++ b/library/Icinga/Common/Database.php @@ -0,0 +1,56 @@ +<?php +/* Icinga Web 2 | (c) 2020 Icinga GmbH | GPLv2+ */ + +namespace Icinga\Common; + +use Icinga\Application\Config as IcingaConfig; +use Icinga\Data\ResourceFactory; +use ipl\Sql\Config as SqlConfig; +use ipl\Sql\Connection; +use LogicException; +use PDO; + +/** + * Trait for accessing the Icinga Web database + */ +trait Database +{ + /** + * Get a connection to the Icinga Web database + * + * @return Connection + * + * @throws \Icinga\Exception\ConfigurationError + */ + protected function getDb(): Connection + { + if (! $this->hasDb()) { + throw new LogicException('Please check if a db instance exists at all'); + } + + $config = new SqlConfig(ResourceFactory::getResourceConfig( + IcingaConfig::app()->get('global', 'config_resource') + )); + if ($config->db === 'mysql') { + $config->charset = 'utf8mb4'; + } + + $config->options = [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ]; + if ($config->db === 'mysql') { + $config->options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET SESSION SQL_MODE='STRICT_TRANS_TABLES" + . ",NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"; + } + + return new Connection($config); + } + + /** + * Check if db exists + * + * @return bool true if a database was found otherwise false + */ + protected function hasDb() + { + return (bool) IcingaConfig::app()->get('global', 'config_resource'); + } +} |