blob: f7e378b4115832aa36af14eafb3da8078339246d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?php
namespace Icinga\Module\Director\Web\Table;
use Icinga\Application\Icinga;
use Icinga\Application\Modules\Module;
use Icinga\Exception\ProgrammingError;
class TableLoader
{
/** @return QuickTable */
public static function load($name, Module $module = null)
{
if ($module === null) {
$basedir = Icinga::app()->getApplicationDir('tables');
$ns = '\\Icinga\\Web\\Tables\\';
} else {
$basedir = $module->getBaseDir() . '/application/tables';
$ns = '\\Icinga\\Module\\' . ucfirst($module->getName()) . '\\Tables\\';
}
if (preg_match('~^[a-z0-9/]+$~i', $name)) {
$parts = preg_split('~/~', $name);
$class = ucfirst(array_pop($parts)) . 'Table';
$file = sprintf('%s/%s/%s.php', rtrim($basedir, '/'), implode('/', $parts), $class);
if (file_exists($file)) {
require_once($file);
/** @var QuickTable $class */
$class = $ns . $class;
return new $class();
}
}
throw new ProgrammingError(sprintf('Cannot load %s (%s), no such table', $name, $file));
}
}
|