Skip to content

Commit

Permalink
Try: symfony extension
Browse files Browse the repository at this point in the history
  • Loading branch information
JanGalek committed Apr 6, 2018
1 parent cfca4ca commit b6a9989
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 103 deletions.
3 changes: 2 additions & 1 deletion composer.json
Expand Up @@ -19,7 +19,8 @@
"nette/utils": "^2.4|^3.0",
"nette/neon": "^2.4|^3.0@dev",
"nette/di": "^2.4|^3.0@dev",
"nette/bootstrap": "^2.4|^3.0@dev"
"nette/bootstrap": "^2.4|^3.0@dev",
"symfony/dependency-injection": "^4.0"
},
"require-dev": {
"nette/tester": "^1.7|^2.0",
Expand Down
8 changes: 4 additions & 4 deletions src/Galek/Utils/Calendar/Business/Shipper.php
Expand Up @@ -50,7 +50,7 @@ class Shipper implements IShipper
/**
* @var Calendar
*/
private $date;
private $currentDate;



Expand All @@ -72,8 +72,8 @@ public function getName(): string

public function getCurrentDate(): Calendar
{
if ($this->date) {
return $this->date;
if ($this->currentDate) {
return $this->currentDate;
}

$date = new Calendar('now', null, $this->configuration);
Expand All @@ -83,7 +83,7 @@ public function getCurrentDate(): Calendar

public function setCurrentDate(Calendar $date = null): void
{
$this->date = $date;
$this->currentDate = $date;
}


Expand Down
99 changes: 1 addition & 98 deletions src/Galek/Utils/Calendar/DI/Extension.php
Expand Up @@ -15,25 +15,7 @@

class Extension extends CompilerExtension
{
private $defaultWork = [
'start' => [
'hour' => 8,
'minute' => 0,
],
'end' => [
'hour' => 16,
'minute' => 30,
],
'weekend' => false,
];

private $defaultShipper = [
'endHour' => 14,
'endMinute' => 0,
'weekend' => false,
'deliveryTime' => 1,
];

use TExtension;

public function loadConfiguration(): void
{
Expand All @@ -46,83 +28,4 @@ public function loadConfiguration(): void
$builder->addDefinition($this->prefix('galek.calendar'))
->setFactory(Configurator::class, [$config]);
}


private function checkConfig(array & $config): void
{
$this->checkCountry($config);
$this->checkShippers($config);
$this->checkWork($config);
}


private function checkCountry(array & $config): void
{
foreach ($config as $group => $setting) {
if (!array_key_exists('country', $setting)) {
$config[$group][ 'country' ] = 'CzechRepublic';
}
}
}


private function checkShippers(array & $config): void
{
foreach ($config as $group => $setting) {
if (!array_key_exists('shippers', $setting)) {
$config[$group]['shippers'] = [];
} else {
foreach ($setting['shippers'] as $name => $shipper) {
if (!array_key_exists('endHour', $shipper)) {
$config[$group]['shippers'][$name]['endHour'] = $this->defaultShipper['endHour'];
}
if (!array_key_exists('endMinute', $shipper)) {
$config[$group]['shippers'][$name]['endMinute'] = $this->defaultShipper['endMinute'];
}
if (!array_key_exists('weekend', $shipper)) {
$config[$group]['shippers'][$name]['weekend'] = $this->defaultShipper['weekend'];
}
if (!array_key_exists('deliveryTime', $shipper)) {
$config[$group]['shippers'][$name]['deliveryTime'] = $this->defaultShipper['deliveryTime'];
}
}
}
}
}


private function checkWork(array & $config): void
{
foreach ($config as $group => $setting) {
if (!array_key_exists('work', $setting)) {
$config[$group]['work'] = $this->defaultWork;
} else {
if (!array_key_exists('start', $setting['work'])) {
$config[$group]['work']['start'] = $this->defaultWork['start'];
} else {
if (!array_key_exists('hour', $setting['work']['start'])) {
$config[$group]['work']['start']['hour'] = $this->defaultWork['start']['hour'];
}
if (!array_key_exists('minute', $setting['work']['start'])) {
$config[$group]['work']['start']['minute'] = $this->defaultWork['start']['minute'];
}
}
if (!array_key_exists('end', $setting['work'])) {
$config[$group]['work']['end'] = $this->defaultWork['end'];
} else {
if (!array_key_exists('hour', $setting['work']['end'])) {
$config[$group]['work']['end']['hour'] = $this->defaultWork['end']['hour'];
}
if (!array_key_exists('minute', $setting['work']['start'])) {
$config[$group]['work']['end']['minute'] = $this->defaultWork['end']['minute'];
}
}
if (!array_key_exists('weekend', $setting['work'])) {
$config[$group]['work']['weekend'] = $this->defaultWork['weekend'];
}
}
}
}


}
32 changes: 32 additions & 0 deletions src/Galek/Utils/Calendar/DI/SymfonyExtension.php
@@ -0,0 +1,32 @@
<?php
/**
* Created by PhpStorm.
* User: Galek
* Date: 6.4.2018
*/
declare(strict_types=1);

namespace Galek\Utils\Calendar\DI;


use Galek\Utils\Calendar\Configuration\Configurator;
use Symfony\Component\DependencyInjection\ContainerBuilder;


class SymfonyExtension extends \Symfony\Component\DependencyInjection\Extension\Extension
{
use TExtension;

/**
* Loads a specific configuration.
*
* @throws \InvalidArgumentException When provided tag is not defined in this extension
*/
public function load(array $configs, ContainerBuilder $container)
{
$this->checkConfig($configs);

$container->register('galek.calendar', Configurator::class)
->addArgument($configs);
}
}
122 changes: 122 additions & 0 deletions src/Galek/Utils/Calendar/DI/TExtension.php
@@ -0,0 +1,122 @@
<?php
/**
* Created by PhpStorm.
* User: Galek
* Date: 6.4.2018
*/
declare(strict_types=1);

namespace Galek\Utils\Calendar\DI;


trait TExtension
{
protected $defaultWork = [
'start' => [
'hour' => 8,
'minute' => 0,
],
'end' => [
'hour' => 16,
'minute' => 30,
],
'weekend' => false,
];

protected $defaultShipper = [
'endHour' => 14,
'endMinute' => 0,
'weekend' => false,
'deliveryTime' => 1,
];


public function loadConfiguration(): void
{
$builder = $this->getContainerBuilder();

$config = $this->getConfig();

$this->checkConfig($config);

$builder->addDefinition($this->prefix('galek.calendar'))
->setFactory(Configurator::class, [$config]);
}


protected function checkConfig(array & $config): void
{
$this->checkCountry($config);
$this->checkShippers($config);
$this->checkWork($config);
}


protected function checkCountry(array & $config): void
{
foreach ($config as $group => $setting) {
if (!array_key_exists('country', $setting)) {
$config[$group][ 'country' ] = 'CzechRepublic';
}
}
}


protected function checkShippers(array & $config): void
{
foreach ($config as $group => $setting) {
if (!array_key_exists('shippers', $setting)) {
$config[$group]['shippers'] = [];
} else {
foreach ($setting['shippers'] as $name => $shipper) {
if (!array_key_exists('endHour', $shipper)) {
$config[$group]['shippers'][$name]['endHour'] = $this->defaultShipper['endHour'];
}
if (!array_key_exists('endMinute', $shipper)) {
$config[$group]['shippers'][$name]['endMinute'] = $this->defaultShipper['endMinute'];
}
if (!array_key_exists('weekend', $shipper)) {
$config[$group]['shippers'][$name]['weekend'] = $this->defaultShipper['weekend'];
}
if (!array_key_exists('deliveryTime', $shipper)) {
$config[$group]['shippers'][$name]['deliveryTime'] = $this->defaultShipper['deliveryTime'];
}
}
}
}
}


protected function checkWork(array & $config): void
{
foreach ($config as $group => $setting) {
if (!array_key_exists('work', $setting)) {
$config[$group]['work'] = $this->defaultWork;
} else {
if (!array_key_exists('start', $setting['work'])) {
$config[$group]['work']['start'] = $this->defaultWork['start'];
} else {
if (!array_key_exists('hour', $setting['work']['start'])) {
$config[$group]['work']['start']['hour'] = $this->defaultWork['start']['hour'];
}
if (!array_key_exists('minute', $setting['work']['start'])) {
$config[$group]['work']['start']['minute'] = $this->defaultWork['start']['minute'];
}
}
if (!array_key_exists('end', $setting['work'])) {
$config[$group]['work']['end'] = $this->defaultWork['end'];
} else {
if (!array_key_exists('hour', $setting['work']['end'])) {
$config[$group]['work']['end']['hour'] = $this->defaultWork['end']['hour'];
}
if (!array_key_exists('minute', $setting['work']['start'])) {
$config[$group]['work']['end']['minute'] = $this->defaultWork['end']['minute'];
}
}
if (!array_key_exists('weekend', $setting['work'])) {
$config[$group]['work']['weekend'] = $this->defaultWork['weekend'];
}
}
}
}
}

0 comments on commit b6a9989

Please sign in to comment.