You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.2 KiB
64 lines
1.2 KiB
<?php
|
|
|
|
namespace App;
|
|
|
|
use Symfony\Component\Yaml\Yaml;
|
|
|
|
class Configuration
|
|
{
|
|
protected $_screens;
|
|
protected $_layouts;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->_screens = [];
|
|
$this->_layouts = [];
|
|
}
|
|
|
|
public function load(string $file): void
|
|
{
|
|
$config = Yaml::parseFile($file);
|
|
|
|
foreach ($config['screens'] as $screen_name=>$screen)
|
|
{
|
|
$this->_screens[$screen_name] = app()->make(\App\Screen::class, [
|
|
'outputs'=>is_array($screen['output']) ? $screen['output'] : [$screen['output']]
|
|
]);
|
|
}
|
|
|
|
foreach ($config['layouts'] as $layout=>$data)
|
|
{
|
|
$this->_layouts[$layout] = app()->make(\App\Layout::class, ['screens'=>$data['screens'], 'links'=>$data['links']]);
|
|
}
|
|
}
|
|
|
|
public function getScreen(string $screen): Screen
|
|
{
|
|
return $this->_screens[$screen];
|
|
}
|
|
|
|
public function getPrimaryScreen(): Screen
|
|
{
|
|
return $this->getScreen($this->getPrimaryScreenName());
|
|
}
|
|
|
|
public function getPrimaryScreenName(): string
|
|
{
|
|
foreach ($this->_screens as $name=>$screen)
|
|
{
|
|
if ($screen->isPrimary())
|
|
return $name;
|
|
}
|
|
}
|
|
|
|
public function getLayout(string $layout): Layout
|
|
{
|
|
return $this->_layouts[$layout];
|
|
}
|
|
|
|
public function getLayouts(): array
|
|
{
|
|
return $this->_layouts;
|
|
}
|
|
|
|
}
|
|
|