PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 3.3.1
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v3.3.1
3.3.1 V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 2.10.1 All 138 releases
bit-form / vendor / typisttech / imposter / src / Transformer.php

Transformer.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 3.3.1, at vendor/typisttech/imposter/src/Transformer.php

167 lines 4.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace TypistTech\Imposter;
6
7 use SplFileInfo;
8
9 class Transformer implements TransformerInterface
10 {
11 /**
12 * @var FilesystemInterface
13 */
14 private $filesystem;
15
16 /**
17 * @var string
18 */
19 private $namespacePrefix;
20
21 /**
22 * Transformer constructor.
23 *
24 * @param string $namespacePrefix
25 * @param FilesystemInterface $filesystem
26 */
27 public function __construct(string $namespacePrefix, FilesystemInterface $filesystem)
28 {
29 $this->namespacePrefix = StringUtil::ensureDoubleBackwardSlash($namespacePrefix);
30 $this->filesystem = $filesystem;
31 }
32
33 /**
34 * Transform a file or directory recursively.
35 *
36 * @todo Skip non-php files.
37 *
38 * @param string $target Path to the target file or directory.
39 *
40 * @return void
41 */
42 public function transform(string $target)
43 {
44 if ($this->filesystem->isFile($target)) {
45 $this->doTransform($target);
46
47 return;
48 }
49
50 $files = $this->filesystem->allFiles($target);
51
52 array_walk($files, function (SplFileInfo $file) {
53 $this->doTransform($file->getRealPath());
54 });
55 }
56
57 /**
58 * @param string $targetFile
59 *
60 * @return void
61 */
62 private function doTransform(string $targetFile)
63 {
64 $this->prefixNamespace($targetFile);
65 $this->prefixUseConst($targetFile);
66 $this->prefixUseFunction($targetFile);
67 $this->prefixUse($targetFile);
68 }
69
70 /**
71 * Prefix namespace at the given path.
72 *
73 * @param string $targetFile
74 *
75 * @return void
76 */
77 private function prefixNamespace(string $targetFile)
78 {
79 $pattern = sprintf(
80 '/(\s+)%1$s\\s+(?!(%2$s)|(Composer(\\\\|;)))/',
81 'namespace',
82 $this->namespacePrefix
83 );
84 $replacement = sprintf('%1$s %2$s', '${1}namespace', $this->namespacePrefix);
85
86 $this->replace($pattern, $replacement, $targetFile);
87 }
88
89 /**
90 * Replace string in the given file.
91 *
92 * @param string $pattern
93 * @param string $replacement
94 * @param string $targetFile
95 *
96 * @return void
97 */
98 private function replace(string $pattern, string $replacement, string $targetFile)
99 {
100 $this->filesystem->put(
101 $targetFile,
102 preg_replace(
103 $pattern,
104 $replacement,
105 $this->filesystem->get($targetFile)
106 )
107 );
108 }
109
110 /**
111 * Prefix `use const` keywords at the given path.
112 *
113 * @param string $targetFile
114 *
115 * @return void
116 */
117 private function prefixUseConst(string $targetFile)
118 {
119 $pattern = sprintf(
120 '/%1$s\\s+(?!(%2$s)|(\\\\(?!.*\\\\.*))|(Composer(\\\\|;)|(?!.*\\\\.*)))/',
121 'use const',
122 $this->namespacePrefix
123 );
124 $replacement = sprintf('%1$s %2$s', 'use const', $this->namespacePrefix);
125
126 $this->replace($pattern, $replacement, $targetFile);
127 }
128
129 /**
130 * Prefix `use function` keywords at the given path.
131 *
132 * @param string $targetFile
133 *
134 * @return void
135 */
136 private function prefixUseFunction(string $targetFile)
137 {
138 $pattern = sprintf(
139 '/%1$s\\s+(?!(%2$s)|(\\\\(?!.*\\\\.*))|(Composer(\\\\|;)|(?!.*\\\\.*)))/',
140 'use function',
141 $this->namespacePrefix
142 );
143 $replacement = sprintf('%1$s %2$s', 'use function', $this->namespacePrefix);
144
145 $this->replace($pattern, $replacement, $targetFile);
146 }
147
148 /**
149 * Prefix `use` keywords at the given path.
150 *
151 * @param string $targetFile
152 *
153 * @return void
154 */
155 private function prefixUse(string $targetFile)
156 {
157 $pattern = sprintf(
158 '/%1$s\\s+(?!(const)|(function)|(%2$s)|(\\\\(?!.*\\\\.*))|(Composer(\\\\|;)|(?!.*\\\\.*)))/',
159 'use',
160 $this->namespacePrefix
161 );
162 $replacement = sprintf('%1$s %2$s', 'use', $this->namespacePrefix);
163
164 $this->replace($pattern, $replacement, $targetFile);
165 }
166 }
167