Skip to content

Commit 913ca95

Browse files
committed
changes
1 parent f7a45a8 commit 913ca95

19 files changed

+442
-4
lines changed

src/DI/CompilerExtensionUtility.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,30 @@
33
namespace Utilitte\Nette\DI;
44

55
use Nette\DI\ContainerBuilder;
6+
use Nette\DI\Definitions\Definition;
67
use Nette\DI\Definitions\FactoryDefinition;
8+
use Nette\DI\Definitions\ServiceDefinition;
79

810
final class CompilerExtensionUtility
911
{
1012

1113
public static function getFactoryDefinitionByType(ContainerBuilder $builder, string $type): FactoryDefinition
1214
{
13-
$definition = $builder->getDefinitionByType($type);
15+
return self::assertFactoryDefinition($builder->getDefinitionByType($type));
16+
}
17+
18+
public static function assertFactoryDefinition(Definition $definition): FactoryDefinition
19+
{
1420
assert($definition instanceof FactoryDefinition);
1521

1622
return $definition;
1723
}
1824

25+
public static function assertServiceDefinition(Definition $definition): ServiceDefinition
26+
{
27+
assert($definition instanceof ServiceDefinition);
28+
29+
return $definition;
30+
}
31+
1932
}

src/DI/NetteExtension.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\DI;
4+
5+
use Nette\Application\UI\TemplateFactory;
6+
use Nette\Bridges\ApplicationLatte\LatteFactory;
7+
use Nette\DI\CompilerExtension;
8+
use Nette\DI\Definitions\FactoryDefinition;
9+
use Nette\DI\Definitions\ServiceDefinition;
10+
use Utilitte\Nette\Interfaces\LatteEngineExtensionInterface;
11+
use Utilitte\Nette\Interfaces\LatteFilterLoaderExtensionInterface;
12+
use Utilitte\Nette\Interfaces\LatteMacroExtensionInterface;
13+
use Utilitte\Nette\Interfaces\LatteTemplateExtensionInterface;
14+
15+
final class NetteExtension extends CompilerExtension
16+
{
17+
18+
public function beforeCompile(): void
19+
{
20+
$builder = $this->getContainerBuilder();
21+
22+
$factory = CompilerExtensionUtility::assertFactoryDefinition($builder->getDefinitionByType(LatteFactory::class));
23+
$result = $factory->getResultDefinition();
24+
25+
foreach ($builder->findByType(LatteEngineExtensionInterface::class) as $definition) {
26+
$result->addSetup('?->extendEngine(?);', [$definition, '@self']);
27+
}
28+
29+
foreach ($builder->findByType(LatteFilterLoaderExtensionInterface::class) as $definition) {
30+
$result->addSetup('?->addFilterLoader([?, "_invoke"]);', ['@self', $definition]);
31+
}
32+
33+
foreach ($builder->findByType(LatteMacroExtensionInterface::class) as $definition) {
34+
$result->addSetup('?->onCompile[] = fn ($engine) => ?->install($engine->getCompiler());', ['@self', $definition]);
35+
}
36+
37+
$factory = CompilerExtensionUtility::assertServiceDefinition($builder->getDefinitionByType(TemplateFactory::class));
38+
39+
foreach ($builder->findByType(LatteTemplateExtensionInterface::class) as $definition) {
40+
$factory->addSetup('?->onCreate[] = fn ($template) => ?->extendTemplate($template);', ['@self', $definition]);
41+
}
42+
}
43+
44+
}

src/DI/UtilityExtension.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
use Utilitte\Doctrine\FetchByIdentifiers;
1212
use Utilitte\Doctrine\Query\RawQueryFactory;
1313
use Utilitte\Doctrine\QueryMetadataExtractor;
14+
use Utilitte\Nette\Http\MaxUploadSize;
1415
use Utilitte\Nette\Latte\Macros;
1516
use Utilitte\Nette\UI\FlexibleMultiplierByIdentifierFactory;
17+
use Utilitte\Nette\UI\FlexibleTransferObjectMultiplier;
1618

1719
final class UtilityExtension extends CompilerExtension
1820
{
@@ -33,9 +35,15 @@ public function loadConfiguration(): void
3335
{
3436
$builder = $this->getContainerBuilder();
3537

38+
$builder->addDefinition($this->prefix('image'))
39+
->setFactory(MaxUploadSize::class);
40+
3641
$builder->addDefinition($this->prefix('flexibleMultiplier'))
3742
->setFactory(FlexibleMultiplierByIdentifierFactory::class);
3843

44+
$builder->addDefinition($this->prefix('flexibleTransferObjectMultiplier'))
45+
->setFactory(FlexibleTransferObjectMultiplier::class);
46+
3947
if (interface_exists(EntityManagerInterface::class) && class_exists(DoctrineIdentityExtractor::class)) {
4048
$builder->addDefinition($this->prefix('doctrine.identityExtractor'))
4149
->setType(DoctrineIdentityExtractor::class);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\Exceptions;
4+
5+
use Nette\Application\BadRequestException;
6+
7+
final class EntityIsNotValid extends BadRequestException
8+
{
9+
public function __construct(string $class, string $identifier)
10+
{
11+
parent::__construct(sprintf('Entity %s(%s) did not pass validation', $class, $identifier), 404);
12+
}
13+
}

src/Http/MaxUploadSize.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\Http;
4+
5+
use Nette\Forms\Controls\BaseControl;
6+
use Nette\Forms\Form;
7+
use Nette\Forms\Helpers;
8+
use Utilitte\Php\Numbers;
9+
10+
final class MaxUploadSize
11+
{
12+
13+
private int $maxBytes;
14+
15+
public function __construct(
16+
?int $maxBytes = null,
17+
)
18+
{
19+
$this->maxBytes = $maxBytes ?? Helpers::iniGetSize('upload_max_filesize');
20+
}
21+
22+
public function get(): int
23+
{
24+
return $this->maxBytes;
25+
}
26+
27+
public function toReadableString(): string
28+
{
29+
return Numbers::bytes($this->maxBytes);
30+
}
31+
32+
public function applyFormControlRule(BaseControl $control, string $message = 'The size of the uploaded file can be up to %s.'): void
33+
{
34+
$rules = $control->getRules();
35+
$rules->removeRule(Form::MAX_FILE_SIZE);
36+
$rules->addRule(Form::MAX_FILE_SIZE, sprintf($message, $this->toReadableString()), $this->maxBytes);
37+
}
38+
39+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\Interfaces;
4+
5+
use Latte\Engine;
6+
7+
interface LatteEngineExtensionInterface
8+
{
9+
10+
public function extendEngine(Engine $egine): void;
11+
12+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\Interfaces;
4+
5+
interface LatteFilterLoaderExtensionInterface
6+
{
7+
8+
public function _invoke(string $name): ?callable;
9+
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\Interfaces;
4+
5+
use Latte\Compiler;
6+
use Latte\Macros\MacroSet;
7+
8+
interface LatteMacroExtensionInterface
9+
{
10+
11+
public function install(Compiler $compiler): MacroSet;
12+
13+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\Interfaces;
4+
5+
use Nette\Application\UI\Template;
6+
7+
interface LatteTemplateExtensionInterface
8+
{
9+
10+
public function extendTemplate(Template $template): void;
11+
12+
}

src/Latte/AbstractFilterLoader.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Utilitte\Nette\Latte;
4+
5+
use Utilitte\Nette\Interfaces\LatteFilterLoaderExtensionInterface;
6+
7+
abstract class AbstractFilterLoader implements LatteFilterLoaderExtensionInterface
8+
{
9+
10+
final public function _invoke(string $name): ?callable
11+
{
12+
if ($name === __METHOD__) {
13+
return null;
14+
}
15+
16+
return method_exists($this, $name) ? [$this, $name] : null;
17+
}
18+
19+
}

0 commit comments

Comments
 (0)