-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathAbstractAdapterDefinitionBuilder.php
More file actions
101 lines (83 loc) · 3.7 KB
/
Copy pathAbstractAdapterDefinitionBuilder.php
File metadata and controls
101 lines (83 loc) · 3.7 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
/*
* This file is part of the flysystem-bundle project.
*
* (c) Titouan Galopin <galopintitouan@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace League\FlysystemBundle\Adapter\Builder;
use League\Flysystem\UnixVisibility\PortableVisibilityConverter;
use League\FlysystemBundle\Exception\MissingPackageException;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* @author Titouan Galopin <galopintitouan@gmail.com>
*
* @internal
*/
abstract class AbstractAdapterDefinitionBuilder implements AdapterDefinitionBuilderInterface
{
final public function createDefinition(array $options, ?string $defaultVisibilityForDirectories): Definition
{
$this->ensureRequiredPackagesAvailable();
$resolver = new OptionsResolver();
$this->configureOptions($resolver);
$definition = new Definition();
$definition->setPublic(false);
$this->configureDefinition($definition, $resolver->resolve($options), $defaultVisibilityForDirectories);
return $definition;
}
abstract protected function getRequiredPackages(): array;
abstract protected function configureOptions(OptionsResolver $resolver);
abstract protected function configureDefinition(Definition $definition, array $options, ?string $defaultVisibilityForDirectories);
protected function configureUnixOptions(OptionsResolver $resolver): void
{
$resolver->setDefault('permissions', function (OptionsResolver $subResolver) {
$subResolver->setDefault('file', function (OptionsResolver $permsResolver) {
$permsResolver->setDefault('public', 0644);
$permsResolver->setAllowedTypes('public', 'scalar');
$permsResolver->setDefault('private', 0600);
$permsResolver->setAllowedTypes('private', 'scalar');
});
$subResolver->setDefault('dir', function (OptionsResolver $permsResolver) {
$permsResolver->setDefault('public', 0755);
$permsResolver->setAllowedTypes('public', 'scalar');
$permsResolver->setDefault('private', 0700);
$permsResolver->setAllowedTypes('private', 'scalar');
});
});
}
protected function createUnixDefinition(array $permissions, string $defaultVisibilityForDirectories): Definition
{
return (new Definition(PortableVisibilityConverter::class))
->setFactory([PortableVisibilityConverter::class, 'fromArray'])
->addArgument([
'file' => [
'public' => (int) $permissions['file']['public'],
'private' => (int) $permissions['file']['private'],
],
'dir' => [
'public' => (int) $permissions['dir']['public'],
'private' => (int) $permissions['dir']['private'],
],
])
->addArgument($defaultVisibilityForDirectories)
->setShared(false)
;
}
private function ensureRequiredPackagesAvailable(): void
{
$missingPackages = [];
foreach ($this->getRequiredPackages() as $requiredClass => $packageName) {
if (!class_exists($requiredClass)) {
$missingPackages[] = $packageName;
}
}
if (!$missingPackages) {
return;
}
throw new MissingPackageException(sprintf("Missing package%s, to use the \"%s\" adapter, run:\n\ncomposer require %s", \count($missingPackages) > 1 ? 's' : '', $this->getName(), implode(' ', $missingPackages)));
}
}