diff options
Diffstat (limited to 'library/Reporting/Database.php')
-rw-r--r-- | library/Reporting/Database.php | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/library/Reporting/Database.php b/library/Reporting/Database.php new file mode 100644 index 0000000..3dabe17 --- /dev/null +++ b/library/Reporting/Database.php @@ -0,0 +1,58 @@ +<?php +// Icinga Reporting | (c) 2018 Icinga GmbH | GPLv2 + +namespace Icinga\Module\Reporting; + +use Icinga\Application\Config; +use Icinga\Data\ResourceFactory; +use ipl\Sql; + +trait Database +{ + protected function getDb($resource = null) + { + $config = new Sql\Config(ResourceFactory::getResourceConfig( + $resource ?: Config::module('reporting')->get('backend', 'resource', 'reporting') + )); + + $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'"; + } + + $conn = new RetryConnection($config); + + return $conn; + } + + protected function listTimeframes() + { + $select = (new Sql\Select()) + ->from('timeframe') + ->columns(['id', 'name']); + + $timeframes = []; + + foreach ($this->getDb()->select($select) as $row) { + $timeframes[$row->id] = $row->name; + } + + return $timeframes; + } + + protected function listTemplates() + { + $select = (new Sql\Select()) + ->from('template') + ->columns(['id', 'name']); + + $templates = []; + + foreach ($this->getDb()->select($select) as $row) { + $templates[$row->id] = $row->name; + } + + return $templates; + } +} |