PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.35.1
MailPoet – Newsletters, Email Marketing, and Automation v5.35.1
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor / automattic / jetpack-autoloader / src / AutoloadGenerator.php
mailpoet / vendor / automattic / jetpack-autoloader / src Last commit date
AutoloadFileWriter.php 11 months ago AutoloadGenerator.php 11 months ago AutoloadProcessor.php 11 months ago CustomAutoloaderPlugin.php 11 months ago ManifestGenerator.php 11 months ago autoload.php 11 months ago class-autoloader-handler.php 11 months ago class-autoloader-locator.php 11 months ago class-autoloader.php 11 months ago class-container.php 11 months ago class-hook-manager.php 11 months ago class-latest-autoloader-guard.php 11 months ago class-manifest-reader.php 11 months ago class-path-processor.php 11 months ago class-php-autoloader.php 11 months ago class-plugin-locator.php 11 months ago class-plugins-handler.php 11 months ago class-shutdown-handler.php 11 months ago class-version-loader.php 11 months ago class-version-selector.php 11 months ago index.php 11 months ago
AutoloadGenerator.php
242 lines
1 <?php
2 namespace Automattic\Jetpack\Autoloader;
3 if (!defined('ABSPATH')) exit;
4 use Composer\Composer;
5 use Composer\Config;
6 use Composer\Installer\InstallationManager;
7 use Composer\IO\IOInterface;
8 use Composer\Package\PackageInterface;
9 use Composer\Repository\InstalledRepositoryInterface;
10 use Composer\Util\Filesystem;
11 use Composer\Util\PackageSorter;
12 class AutoloadGenerator {
13 const VERSION = '5.0.8';
14 private $io;
15 private $filesystem;
16 public function __construct( IOInterface $io ) {
17 $this->io = $io;
18 $this->filesystem = new Filesystem();
19 }
20 public function dump(
21 Composer $composer,
22 Config $config,
23 InstalledRepositoryInterface $localRepo,
24 PackageInterface $mainPackage,
25 InstallationManager $installationManager,
26 $targetDir,
27 $scanPsrPackages = false,
28 $suffix = null
29 ) {
30 $this->filesystem->ensureDirectoryExists( $config->get( 'vendor-dir' ) );
31 $packageMap = $composer->getAutoloadGenerator()->buildPackageMap( $installationManager, $mainPackage, $localRepo->getCanonicalPackages() );
32 $autoloads = $this->parseAutoloads( $packageMap, $mainPackage );
33 // Convert the autoloads into a format that the manifest generator can consume more easily.
34 $basePath = $this->filesystem->normalizePath( realpath( getcwd() ) );
35 $vendorPath = $this->filesystem->normalizePath( realpath( $config->get( 'vendor-dir' ) ) );
36 $processedAutoloads = $this->processAutoloads( $autoloads, $scanPsrPackages, $vendorPath, $basePath );
37 unset( $packageMap, $autoloads );
38 // Make sure none of the legacy files remain that can lead to problems with the autoloader.
39 $this->removeLegacyFiles( $vendorPath );
40 // Write all of the files now that we're done.
41 $this->writeAutoloaderFiles( $vendorPath . '/jetpack-autoloader/', $suffix );
42 $this->writeManifests( $vendorPath . '/' . $targetDir, $processedAutoloads );
43 if ( ! $scanPsrPackages ) {
44 $this->io->writeError( '<warning>You are generating an unoptimized autoloader. If this is a production build, consider using the -o option.</warning>' );
45 }
46 }
47 public function parseAutoloads( array $packageMap, PackageInterface $mainPackage ) {
48 $rootPackageMap = array_shift( $packageMap );
49 $sortedPackageMap = $this->sortPackageMap( $packageMap );
50 $sortedPackageMap[] = $rootPackageMap;
51 array_unshift( $packageMap, $rootPackageMap );
52 $psr0 = $this->parseAutoloadsType( $packageMap, 'psr-0', $mainPackage );
53 $psr4 = $this->parseAutoloadsType( $packageMap, 'psr-4', $mainPackage );
54 $classmap = $this->parseAutoloadsType( array_reverse( $sortedPackageMap ), 'classmap', $mainPackage );
55 $files = $this->parseAutoloadsType( $sortedPackageMap, 'files', $mainPackage );
56 krsort( $psr0 );
57 krsort( $psr4 );
58 return array(
59 'psr-0' => $psr0,
60 'psr-4' => $psr4,
61 'classmap' => $classmap,
62 'files' => $files,
63 );
64 }
65 protected function sortPackageMap( array $packageMap ) {
66 $packages = array();
67 $paths = array();
68 foreach ( $packageMap as $item ) {
69 list( $package, $path ) = $item;
70 $name = $package->getName();
71 $packages[ $name ] = $package;
72 $paths[ $name ] = $path;
73 }
74 $sortedPackages = PackageSorter::sortPackages( $packages );
75 $sortedPackageMap = array();
76 foreach ( $sortedPackages as $package ) {
77 $name = $package->getName();
78 $sortedPackageMap[] = array( $packages[ $name ], $paths[ $name ] );
79 }
80 return $sortedPackageMap;
81 }
82 protected function getFileIdentifier( PackageInterface $package, $path ) {
83 return md5( $package->getName() . ':' . $path );
84 }
85 protected function getPathCode( Filesystem $filesystem, $basePath, $vendorPath, $path ) {
86 if ( ! $filesystem->isAbsolutePath( $path ) ) {
87 $path = $basePath . '/' . $path;
88 }
89 $path = $filesystem->normalizePath( $path );
90 $baseDir = '';
91 if ( 0 === strpos( $path . '/', $vendorPath . '/' ) ) {
92 $path = substr( $path, strlen( $vendorPath ) );
93 $baseDir = '$vendorDir';
94 if ( false !== $path ) {
95 $baseDir .= ' . ';
96 }
97 } else {
98 $path = $filesystem->normalizePath( $filesystem->findShortestPath( $basePath, $path, true ) );
99 if ( ! $filesystem->isAbsolutePath( $path ) ) {
100 $baseDir = '$baseDir . ';
101 $path = '/' . $path;
102 }
103 }
104 if ( strpos( $path, '.phar' ) !== false ) {
105 $baseDir = "'phar://' . " . $baseDir;
106 }
107 // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
108 return $baseDir . ( ( false !== $path ) ? var_export( $path, true ) : '' );
109 }
110 protected function parseAutoloadsType( array $packageMap, $type, PackageInterface $mainPackage ) {
111 $autoloads = array();
112 foreach ( $packageMap as $item ) {
113 list($package, $installPath) = $item;
114 $autoload = $package->getAutoload();
115 $version = $package->getVersion(); // Version of the class comes from the package - should we try to parse it?
116 // Store our own actual package version, not "dev-trunk" or whatever.
117 if ( $package->getName() === 'automattic/jetpack-autoloader' ) {
118 $version = self::VERSION;
119 }
120 if ( $package === $mainPackage ) {
121 $autoload = array_merge_recursive( $autoload, $package->getDevAutoload() );
122 }
123 if ( null !== $package->getTargetDir() && $package !== $mainPackage ) {
124 $installPath = substr( $installPath, 0, -strlen( '/' . $package->getTargetDir() ) );
125 }
126 if ( in_array( $type, array( 'psr-4', 'psr-0' ), true ) && isset( $autoload[ $type ] ) && is_array( $autoload[ $type ] ) ) {
127 foreach ( $autoload[ $type ] as $namespace => $paths ) {
128 $paths = is_array( $paths ) ? $paths : array( $paths );
129 foreach ( $paths as $path ) {
130 $relativePath = empty( $installPath ) ? ( empty( $path ) ? '.' : $path ) : $installPath . '/' . $path;
131 $autoloads[ $namespace ][] = array(
132 'path' => $relativePath,
133 'version' => $version,
134 );
135 }
136 }
137 }
138 if ( 'classmap' === $type && isset( $autoload['classmap'] ) && is_array( $autoload['classmap'] ) ) {
139 foreach ( $autoload['classmap'] as $paths ) {
140 $paths = is_array( $paths ) ? $paths : array( $paths );
141 foreach ( $paths as $path ) {
142 $relativePath = empty( $installPath ) ? ( empty( $path ) ? '.' : $path ) : $installPath . '/' . $path;
143 $autoloads[] = array(
144 'path' => $relativePath,
145 'version' => $version,
146 );
147 }
148 }
149 }
150 if ( 'files' === $type && isset( $autoload['files'] ) && is_array( $autoload['files'] ) ) {
151 foreach ( $autoload['files'] as $paths ) {
152 $paths = is_array( $paths ) ? $paths : array( $paths );
153 foreach ( $paths as $path ) {
154 $relativePath = empty( $installPath ) ? ( empty( $path ) ? '.' : $path ) : $installPath . '/' . $path;
155 $autoloads[ $this->getFileIdentifier( $package, $path ) ] = array(
156 'path' => $relativePath,
157 'version' => $version,
158 );
159 }
160 }
161 }
162 }
163 return $autoloads;
164 }
165 private function processAutoloads( $autoloads, $scanPsrPackages, $vendorPath, $basePath ) {
166 $processor = new AutoloadProcessor(
167 function ( $path, $excludedClasses, $namespace ) use ( $basePath ) {
168 $dir = $this->filesystem->normalizePath(
169 $this->filesystem->isAbsolutePath( $path ) ? $path : $basePath . '/' . $path
170 );
171 // Composer 2.4 changed the name of the class.
172 if ( class_exists( \Composer\ClassMapGenerator\ClassMapGenerator::class ) ) {
173 if ( ! is_dir( $dir ) && ! is_file( $dir ) ) {
174 return array();
175 }
176 $generator = new \Composer\ClassMapGenerator\ClassMapGenerator();
177 $generator->scanPaths( $dir, $excludedClasses, 'classmap', empty( $namespace ) ? null : $namespace );
178 return $generator->getClassMap()->getMap();
179 }
180 return \Composer\Autoload\ClassMapGenerator::createMap(
181 $dir,
182 $excludedClasses,
183 null, // Don't pass the IOInterface since the normal autoload generation will have reported already.
184 empty( $namespace ) ? null : $namespace
185 );
186 },
187 function ( $path ) use ( $basePath, $vendorPath ) {
188 return $this->getPathCode( $this->filesystem, $basePath, $vendorPath, $path );
189 }
190 );
191 return array(
192 'psr-4' => $processor->processPsr4Packages( $autoloads, $scanPsrPackages ),
193 'classmap' => $processor->processClassmap( $autoloads, $scanPsrPackages ),
194 'files' => $processor->processFiles( $autoloads ),
195 );
196 }
197 private function removeLegacyFiles( $outDir ) {
198 $files = array(
199 'autoload_functions.php',
200 'class-autoloader-handler.php',
201 'class-classes-handler.php',
202 'class-files-handler.php',
203 'class-plugins-handler.php',
204 'class-version-selector.php',
205 );
206 foreach ( $files as $file ) {
207 $this->filesystem->remove( $outDir . '/' . $file );
208 }
209 }
210 private function writeAutoloaderFiles( $outDir, $suffix ) {
211 $this->io->writeError( "<info>Generating jetpack autoloader ($outDir)</info>" );
212 // We will remove all autoloader files to generate this again.
213 $this->filesystem->emptyDirectory( $outDir );
214 // Write the autoloader files.
215 AutoloadFileWriter::copyAutoloaderFiles( $this->io, $outDir, $suffix );
216 }
217 private function writeManifests( $outDir, $processedAutoloads ) {
218 $this->io->writeError( "<info>Generating jetpack autoloader manifests ($outDir)</info>" );
219 $manifestFiles = array(
220 'classmap' => 'jetpack_autoload_classmap.php',
221 'psr-4' => 'jetpack_autoload_psr4.php',
222 'files' => 'jetpack_autoload_filemap.php',
223 );
224 foreach ( $manifestFiles as $key => $file ) {
225 // Make sure the file doesn't exist so it isn't there if we don't write it.
226 $this->filesystem->remove( $outDir . '/' . $file );
227 if ( empty( $processedAutoloads[ $key ] ) ) {
228 continue;
229 }
230 $content = ManifestGenerator::buildManifest( $key, $file, $processedAutoloads[ $key ] );
231 if ( empty( $content ) ) {
232 continue;
233 }
234 if ( file_put_contents( $outDir . '/' . $file, $content ) ) {
235 $this->io->writeError( " <info>Generated: $file</info>" );
236 } else {
237 $this->io->writeError( " <error>Error: $file</error>" );
238 }
239 }
240 }
241 }
242