├── .gitignore
├── CHANGELOG.md
├── dist
├── autoload.php
└── composer
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_real.php
│ ├── autoload_classmap.php
│ ├── autoload_static.php
│ └── ClassLoader.php
├── .editorconfig
├── phpcs.xml
├── src
├── Migrate
│ ├── Models.php
│ └── AdvancedCustomFields.php
├── Unravel.php
└── Migrate.php
├── composer.json
├── LICENSE.md
├── unravel.php
├── README.md
└── composer.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | vendor
2 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ### 1.0.0: 06th February 2017
2 | * Release Unravel
3 |
--------------------------------------------------------------------------------
/dist/autoload.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Sober Coding Standards
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/dist/composer/autoload_psr4.php:
--------------------------------------------------------------------------------
1 | array($baseDir . '/src'),
10 | 'Composer\\Installers\\' => array($vendorDir . '/composer/installers/src/Composer/Installers'),
11 | );
12 |
--------------------------------------------------------------------------------
/src/Migrate/Models.php:
--------------------------------------------------------------------------------
1 | setDefaultPath('model-config');
12 | $this->setDestinationPath('models');
13 | $this->setOriginPath('sober/models/path');
14 |
15 | return $this;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/Migrate/AdvancedCustomFields.php:
--------------------------------------------------------------------------------
1 | setDefaultPath('acf-json');
12 | $this->setDestinationPath('models/acf');
13 | $this->setOriginPath('acf/settings/save_json');
14 |
15 | return $this;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "soberwp/unravel",
3 | "type": "wordpress-plugin",
4 | "license": "MIT",
5 | "description": "WordPress plugin to separate concerns for plugins Models and Advanced Custom Fields.",
6 | "homepage": "https://github.com/soberwp",
7 | "authors": [
8 | {
9 | "name": "Darren Jacoby",
10 | "email": "darren@jacoby.co.za",
11 | "homepage": "https://github.com/darrenjacoby"
12 | }
13 | ],
14 | "keywords": [
15 | "wordpress"
16 | ],
17 | "support": {
18 | "issues": "https://github.com/soberwp/unravel/issues"
19 | },
20 | "require": {
21 | "php": ">=5.4.0",
22 | "composer/installers": "~1.0"
23 | },
24 | "require-dev": {
25 | "squizlabs/php_codesniffer": "2.*"
26 | },
27 | "autoload": {
28 | "psr-4": {
29 | "Sober\\Unravel\\": "src/"
30 | }
31 | },
32 | "scripts": {
33 | "test": [
34 | "vendor/bin/phpcs --extensions=php --ignore=vendor/ ."
35 | ]
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) Darren Jacoby
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of
4 | this software and associated documentation files (the "Software"), to deal in
5 | the Software without restriction, including without limitation the rights to
6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7 | of the Software, and to permit persons to whom the Software is furnished to do
8 | so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | SOFTWARE.
20 |
--------------------------------------------------------------------------------
/unravel.php:
--------------------------------------------------------------------------------
1 | setup()->deregister();
41 | (new Models())->setup()->deregister();
42 | });
43 |
--------------------------------------------------------------------------------
/src/Unravel.php:
--------------------------------------------------------------------------------
1 | migrate();
15 | $this->path();
16 | $this->models();
17 | $this->acf();
18 | }
19 |
20 | /**
21 | * Migrate files
22 | */
23 | protected function migrate()
24 | {
25 | (new AdvancedCustomFields())->setup()->register();
26 | (new Models())->setup()->register();
27 | }
28 |
29 | /**
30 | * Set path
31 | */
32 | protected function path()
33 | {
34 | $this->path = wp_upload_dir();
35 | $this->path = rtrim($this->path['basedir'], 'uploads') . 'models'; // fix rtrim uploads name
36 | }
37 |
38 | /**
39 | * Plugin: Models
40 | */
41 | protected function models()
42 | {
43 | add_filter('sober/models/path', function () {
44 | return $this->path;
45 | });
46 | }
47 |
48 | /**
49 | * Plugin: Advanced Custom Fields
50 | */
51 | protected function acf()
52 | {
53 | add_filter('acf/settings/save_json', function () {
54 | return $this->path . '/acf';
55 | });
56 |
57 | add_filter('acf/settings/load_json', function ($paths) {
58 | unset($paths[0]);
59 | $paths[] = $this->path . '/acf';
60 | return $paths;
61 | });
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/Migrate.php:
--------------------------------------------------------------------------------
1 | destinationPath = wp_upload_dir();
22 | $this->destinationPath = rtrim($this->destinationPath['basedir'], 'uploads') . $folder; // fix rtrim uploads name
23 | }
24 |
25 | /**
26 | * Set destination path
27 | */
28 | protected function setDefaultPath($default)
29 | {
30 | $this->pathDefault = $default;
31 | }
32 |
33 | /**
34 | * Get origin path
35 | */
36 | protected function setOriginPath($filter)
37 | {
38 | $this->originPath = (has_filter($filter) ? apply_filters($filter, rtrim($this->originPath)) : get_stylesheet_directory() . '/' . $this->pathDefault);
39 | }
40 |
41 | /**
42 | * Folder exists
43 | */
44 | protected function folderExist($path)
45 | {
46 | if (file_exists($path)) return true;
47 | }
48 |
49 | /**
50 | * Register
51 | */
52 | public function register()
53 | {
54 | if ($this->folderExist($this->destinationPath)) return;
55 | if (!$this->folderExist($this->originPath)) return;
56 | rename($this->originPath, $this->destinationPath);
57 | }
58 |
59 | /**
60 | * Deregister
61 | */
62 |
63 | // make it work for advanced custom fields
64 | public function deregister()
65 | {
66 | $this->pathOrigin = get_stylesheet_directory() . '/' . $this->pathDefault;
67 | if ($this->folderExist($this->pathOrigin)) return;
68 | rename($this->destinationPath, $this->pathOrigin);
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/dist/composer/autoload_real.php:
--------------------------------------------------------------------------------
1 | = 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27 | if ($useStaticLoader) {
28 | require_once __DIR__ . '/autoload_static.php';
29 |
30 | call_user_func(\Composer\Autoload\ComposerStaticInitc8d0f8daae48ae5c95663bf9b42ca1a5::getInitializer($loader));
31 | } else {
32 | $map = require __DIR__ . '/autoload_namespaces.php';
33 | foreach ($map as $namespace => $path) {
34 | $loader->set($namespace, $path);
35 | }
36 |
37 | $map = require __DIR__ . '/autoload_psr4.php';
38 | foreach ($map as $namespace => $path) {
39 | $loader->setPsr4($namespace, $path);
40 | }
41 |
42 | $classMap = require __DIR__ . '/autoload_classmap.php';
43 | if ($classMap) {
44 | $loader->addClassMap($classMap);
45 | }
46 | }
47 |
48 | $loader->register(true);
49 |
50 | return $loader;
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Unravel
2 |
3 | **Please note that this package is deprecated and no longer supported in order to focus on more popular packages.**
4 |
5 | WordPress plugin to separate concerns for [Models](https://github.com/soberwp/models) and [Advanced Custom Fields](https://www.advancedcustomfields.com/) from your theme.
6 |
7 | ## Installation
8 |
9 | #### Composer:
10 |
11 | Recommended method; [Roots Bedrock](https://roots.io/bedrock/) and [WP-CLI](http://wp-cli.org/)
12 | ```shell
13 | $ composer require soberwp/unravel
14 | $ wp plugin activate unravel
15 | ```
16 |
17 | #### Manual:
18 |
19 | * Download the [zip file](https://github.com/soberwp/unravel/archive/master.zip)
20 | * Unzip to your sites plugin folder
21 | * Activate via WordPress
22 |
23 | #### Requirements:
24 |
25 | * [PHP](http://php.net/manual/en/install.php) >= 5.6.x
26 |
27 | ## Usage:
28 |
29 | Move your data/model config files out of your theme folder for better separation of concerns.
30 |
31 | **Unravel performs the following tasks;**
32 |
33 | * Moves folders `model-config/` and `acf-json/` within your theme to `wp-content/models/` (or `web/app/models/` for Bedrock).
34 | * Updates and overrides save/load filter paths for each plugin.
35 |
36 | **Deactivation;**
37 |
38 | * Data/model config files are moved back to their default locations within your theme.
39 |
40 | ## Updates
41 |
42 | #### Composer:
43 |
44 | * Change the composer.json version to ^1.0.0**
45 | * Check [CHANGELOG.md](CHANGELOG.md) for any breaking changes before updating.
46 |
47 | ```shell
48 | $ composer update
49 | ```
50 |
51 | #### WordPress:
52 |
53 | Includes support for [github-updater](https://github.com/afragen/github-updater) to keep track on updates through the WordPress backend.
54 | * Download [github-updater](https://github.com/afragen/github-updater)
55 | * Clone [github-updater](https://github.com/afragen/github-updater) to your sites plugins/ folder
56 | * Activate via WordPress
57 |
58 | ## Other
59 |
60 | * For updates follow [@withjacoby](https://twitter.com/withjacoby)
61 | * You can also [hire me](mailto:darren@jacoby.co.za) for WordPress or frontend work
62 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "51def890a1c51b21846ba9a9411928db",
8 | "packages": [
9 | {
10 | "name": "composer/installers",
11 | "version": "v1.2.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/composer/installers.git",
15 | "reference": "d78064c68299743e0161004f2de3a0204e33b804"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/composer/installers/zipball/d78064c68299743e0161004f2de3a0204e33b804",
20 | "reference": "d78064c68299743e0161004f2de3a0204e33b804",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "composer-plugin-api": "^1.0"
25 | },
26 | "replace": {
27 | "roundcube/plugin-installer": "*",
28 | "shama/baton": "*"
29 | },
30 | "require-dev": {
31 | "composer/composer": "1.0.*@dev",
32 | "phpunit/phpunit": "4.1.*"
33 | },
34 | "type": "composer-plugin",
35 | "extra": {
36 | "class": "Composer\\Installers\\Plugin",
37 | "branch-alias": {
38 | "dev-master": "1.0-dev"
39 | }
40 | },
41 | "autoload": {
42 | "psr-4": {
43 | "Composer\\Installers\\": "src/Composer/Installers"
44 | }
45 | },
46 | "notification-url": "https://packagist.org/downloads/",
47 | "license": [
48 | "MIT"
49 | ],
50 | "authors": [
51 | {
52 | "name": "Kyle Robinson Young",
53 | "email": "kyle@dontkry.com",
54 | "homepage": "https://github.com/shama"
55 | }
56 | ],
57 | "description": "A multi-framework Composer library installer",
58 | "homepage": "https://composer.github.io/installers/",
59 | "keywords": [
60 | "Craft",
61 | "Dolibarr",
62 | "Hurad",
63 | "ImageCMS",
64 | "MODX Evo",
65 | "Mautic",
66 | "OXID",
67 | "Plentymarkets",
68 | "RadPHP",
69 | "SMF",
70 | "Thelia",
71 | "WolfCMS",
72 | "agl",
73 | "aimeos",
74 | "annotatecms",
75 | "attogram",
76 | "bitrix",
77 | "cakephp",
78 | "chef",
79 | "cockpit",
80 | "codeigniter",
81 | "concrete5",
82 | "croogo",
83 | "dokuwiki",
84 | "drupal",
85 | "elgg",
86 | "expressionengine",
87 | "fuelphp",
88 | "grav",
89 | "installer",
90 | "joomla",
91 | "kohana",
92 | "laravel",
93 | "lithium",
94 | "magento",
95 | "mako",
96 | "mediawiki",
97 | "modulework",
98 | "moodle",
99 | "phpbb",
100 | "piwik",
101 | "ppi",
102 | "puppet",
103 | "reindex",
104 | "roundcube",
105 | "shopware",
106 | "silverstripe",
107 | "symfony",
108 | "typo3",
109 | "wordpress",
110 | "yawik",
111 | "zend",
112 | "zikula"
113 | ],
114 | "time": "2016-08-13T20:53:52+00:00"
115 | }
116 | ],
117 | "packages-dev": [
118 | {
119 | "name": "squizlabs/php_codesniffer",
120 | "version": "2.8.0",
121 | "source": {
122 | "type": "git",
123 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
124 | "reference": "86dd55a522238211f9f3631e3361703578941d9a"
125 | },
126 | "dist": {
127 | "type": "zip",
128 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/86dd55a522238211f9f3631e3361703578941d9a",
129 | "reference": "86dd55a522238211f9f3631e3361703578941d9a",
130 | "shasum": ""
131 | },
132 | "require": {
133 | "ext-simplexml": "*",
134 | "ext-tokenizer": "*",
135 | "ext-xmlwriter": "*",
136 | "php": ">=5.1.2"
137 | },
138 | "require-dev": {
139 | "phpunit/phpunit": "~4.0"
140 | },
141 | "bin": [
142 | "scripts/phpcs",
143 | "scripts/phpcbf"
144 | ],
145 | "type": "library",
146 | "extra": {
147 | "branch-alias": {
148 | "dev-master": "2.x-dev"
149 | }
150 | },
151 | "autoload": {
152 | "classmap": [
153 | "CodeSniffer.php",
154 | "CodeSniffer/CLI.php",
155 | "CodeSniffer/Exception.php",
156 | "CodeSniffer/File.php",
157 | "CodeSniffer/Fixer.php",
158 | "CodeSniffer/Report.php",
159 | "CodeSniffer/Reporting.php",
160 | "CodeSniffer/Sniff.php",
161 | "CodeSniffer/Tokens.php",
162 | "CodeSniffer/Reports/",
163 | "CodeSniffer/Tokenizers/",
164 | "CodeSniffer/DocGenerators/",
165 | "CodeSniffer/Standards/AbstractPatternSniff.php",
166 | "CodeSniffer/Standards/AbstractScopeSniff.php",
167 | "CodeSniffer/Standards/AbstractVariableSniff.php",
168 | "CodeSniffer/Standards/IncorrectPatternException.php",
169 | "CodeSniffer/Standards/Generic/Sniffs/",
170 | "CodeSniffer/Standards/MySource/Sniffs/",
171 | "CodeSniffer/Standards/PEAR/Sniffs/",
172 | "CodeSniffer/Standards/PSR1/Sniffs/",
173 | "CodeSniffer/Standards/PSR2/Sniffs/",
174 | "CodeSniffer/Standards/Squiz/Sniffs/",
175 | "CodeSniffer/Standards/Zend/Sniffs/"
176 | ]
177 | },
178 | "notification-url": "https://packagist.org/downloads/",
179 | "license": [
180 | "BSD-3-Clause"
181 | ],
182 | "authors": [
183 | {
184 | "name": "Greg Sherwood",
185 | "role": "lead"
186 | }
187 | ],
188 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
189 | "homepage": "http://www.squizlabs.com/php-codesniffer",
190 | "keywords": [
191 | "phpcs",
192 | "standards"
193 | ],
194 | "time": "2017-02-02T03:30:00+00:00"
195 | }
196 | ],
197 | "aliases": [],
198 | "minimum-stability": "stable",
199 | "stability-flags": [],
200 | "prefer-stable": false,
201 | "prefer-lowest": false,
202 | "platform": {
203 | "php": ">=5.4.0"
204 | },
205 | "platform-dev": []
206 | }
207 |
--------------------------------------------------------------------------------
/dist/composer/autoload_classmap.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/composer/installers/src/Composer/Installers/AglInstaller.php',
10 | 'Composer\\Installers\\AimeosInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AimeosInstaller.php',
11 | 'Composer\\Installers\\AnnotateCmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php',
12 | 'Composer\\Installers\\AsgardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AsgardInstaller.php',
13 | 'Composer\\Installers\\AttogramInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AttogramInstaller.php',
14 | 'Composer\\Installers\\BaseInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BaseInstaller.php',
15 | 'Composer\\Installers\\BitrixInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BitrixInstaller.php',
16 | 'Composer\\Installers\\BonefishInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BonefishInstaller.php',
17 | 'Composer\\Installers\\CakePHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php',
18 | 'Composer\\Installers\\ChefInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ChefInstaller.php',
19 | 'Composer\\Installers\\ClanCatsFrameworkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php',
20 | 'Composer\\Installers\\CockpitInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CockpitInstaller.php',
21 | 'Composer\\Installers\\CodeIgniterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php',
22 | 'Composer\\Installers\\Concrete5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Concrete5Installer.php',
23 | 'Composer\\Installers\\CraftInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
24 | 'Composer\\Installers\\CroogoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
25 | 'Composer\\Installers\\DecibelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
26 | 'Composer\\Installers\\DokuWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
27 | 'Composer\\Installers\\DolibarrInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
28 | 'Composer\\Installers\\DrupalInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
29 | 'Composer\\Installers\\ElggInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ElggInstaller.php',
30 | 'Composer\\Installers\\ExpressionEngineInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php',
31 | 'Composer\\Installers\\FuelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelInstaller.php',
32 | 'Composer\\Installers\\FuelphpInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php',
33 | 'Composer\\Installers\\GravInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/GravInstaller.php',
34 | 'Composer\\Installers\\HuradInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/HuradInstaller.php',
35 | 'Composer\\Installers\\ImageCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php',
36 | 'Composer\\Installers\\Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Installer.php',
37 | 'Composer\\Installers\\JoomlaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
38 | 'Composer\\Installers\\KirbyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
39 | 'Composer\\Installers\\KodiCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
40 | 'Composer\\Installers\\KohanaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
41 | 'Composer\\Installers\\LaravelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LaravelInstaller.php',
42 | 'Composer\\Installers\\LithiumInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LithiumInstaller.php',
43 | 'Composer\\Installers\\MODULEWorkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php',
44 | 'Composer\\Installers\\MODXEvoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php',
45 | 'Composer\\Installers\\MagentoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MagentoInstaller.php',
46 | 'Composer\\Installers\\MakoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MakoInstaller.php',
47 | 'Composer\\Installers\\MauticInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MauticInstaller.php',
48 | 'Composer\\Installers\\MediaWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php',
49 | 'Composer\\Installers\\MicroweberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php',
50 | 'Composer\\Installers\\MoodleInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MoodleInstaller.php',
51 | 'Composer\\Installers\\OctoberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OctoberInstaller.php',
52 | 'Composer\\Installers\\OxidInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OxidInstaller.php',
53 | 'Composer\\Installers\\PPIInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PPIInstaller.php',
54 | 'Composer\\Installers\\PhiftyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php',
55 | 'Composer\\Installers\\PhpBBInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php',
56 | 'Composer\\Installers\\PimcoreInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PimcoreInstaller.php',
57 | 'Composer\\Installers\\PiwikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PiwikInstaller.php',
58 | 'Composer\\Installers\\PlentymarketsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php',
59 | 'Composer\\Installers\\Plugin' => $vendorDir . '/composer/installers/src/Composer/Installers/Plugin.php',
60 | 'Composer\\Installers\\PrestashopInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php',
61 | 'Composer\\Installers\\PuppetInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PuppetInstaller.php',
62 | 'Composer\\Installers\\RadPHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
63 | 'Composer\\Installers\\ReIndexInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
64 | 'Composer\\Installers\\RedaxoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
65 | 'Composer\\Installers\\RoundcubeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
66 | 'Composer\\Installers\\SMFInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
67 | 'Composer\\Installers\\ShopwareInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php',
68 | 'Composer\\Installers\\SilverStripeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php',
69 | 'Composer\\Installers\\Symfony1Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
70 | 'Composer\\Installers\\TYPO3CmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
71 | 'Composer\\Installers\\TYPO3FlowInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
72 | 'Composer\\Installers\\TheliaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
73 | 'Composer\\Installers\\TuskInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
74 | 'Composer\\Installers\\VanillaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/VanillaInstaller.php',
75 | 'Composer\\Installers\\WHMCSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php',
76 | 'Composer\\Installers\\WolfCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php',
77 | 'Composer\\Installers\\WordPressInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WordPressInstaller.php',
78 | 'Composer\\Installers\\YawikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/YawikInstaller.php',
79 | 'Composer\\Installers\\ZendInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZendInstaller.php',
80 | 'Composer\\Installers\\ZikulaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php',
81 | 'Sober\\Unravel\\Migrate' => $baseDir . '/src/Migrate.php',
82 | 'Sober\\Unravel\\Migrate\\AdvancedCustomFields' => $baseDir . '/src/Migrate/AdvancedCustomFields.php',
83 | 'Sober\\Unravel\\Migrate\\Models' => $baseDir . '/src/Migrate/Models.php',
84 | 'Sober\\Unravel\\Unravel' => $baseDir . '/src/Unravel.php',
85 | );
86 |
--------------------------------------------------------------------------------
/dist/composer/autoload_static.php:
--------------------------------------------------------------------------------
1 |
11 | array (
12 | 'Sober\\Unravel\\' => 14,
13 | ),
14 | 'C' =>
15 | array (
16 | 'Composer\\Installers\\' => 20,
17 | ),
18 | );
19 |
20 | public static $prefixDirsPsr4 = array (
21 | 'Sober\\Unravel\\' =>
22 | array (
23 | 0 => __DIR__ . '/../..' . '/src',
24 | ),
25 | 'Composer\\Installers\\' =>
26 | array (
27 | 0 => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers',
28 | ),
29 | );
30 |
31 | public static $classMap = array (
32 | 'Composer\\Installers\\AglInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AglInstaller.php',
33 | 'Composer\\Installers\\AimeosInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AimeosInstaller.php',
34 | 'Composer\\Installers\\AnnotateCmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php',
35 | 'Composer\\Installers\\AsgardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AsgardInstaller.php',
36 | 'Composer\\Installers\\AttogramInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AttogramInstaller.php',
37 | 'Composer\\Installers\\BaseInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BaseInstaller.php',
38 | 'Composer\\Installers\\BitrixInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BitrixInstaller.php',
39 | 'Composer\\Installers\\BonefishInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BonefishInstaller.php',
40 | 'Composer\\Installers\\CakePHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php',
41 | 'Composer\\Installers\\ChefInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ChefInstaller.php',
42 | 'Composer\\Installers\\ClanCatsFrameworkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php',
43 | 'Composer\\Installers\\CockpitInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CockpitInstaller.php',
44 | 'Composer\\Installers\\CodeIgniterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php',
45 | 'Composer\\Installers\\Concrete5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Concrete5Installer.php',
46 | 'Composer\\Installers\\CraftInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
47 | 'Composer\\Installers\\CroogoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
48 | 'Composer\\Installers\\DecibelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
49 | 'Composer\\Installers\\DokuWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
50 | 'Composer\\Installers\\DolibarrInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
51 | 'Composer\\Installers\\DrupalInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
52 | 'Composer\\Installers\\ElggInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ElggInstaller.php',
53 | 'Composer\\Installers\\ExpressionEngineInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php',
54 | 'Composer\\Installers\\FuelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelInstaller.php',
55 | 'Composer\\Installers\\FuelphpInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php',
56 | 'Composer\\Installers\\GravInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/GravInstaller.php',
57 | 'Composer\\Installers\\HuradInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/HuradInstaller.php',
58 | 'Composer\\Installers\\ImageCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php',
59 | 'Composer\\Installers\\Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Installer.php',
60 | 'Composer\\Installers\\JoomlaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
61 | 'Composer\\Installers\\KirbyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
62 | 'Composer\\Installers\\KodiCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
63 | 'Composer\\Installers\\KohanaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
64 | 'Composer\\Installers\\LaravelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LaravelInstaller.php',
65 | 'Composer\\Installers\\LithiumInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LithiumInstaller.php',
66 | 'Composer\\Installers\\MODULEWorkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php',
67 | 'Composer\\Installers\\MODXEvoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php',
68 | 'Composer\\Installers\\MagentoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MagentoInstaller.php',
69 | 'Composer\\Installers\\MakoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MakoInstaller.php',
70 | 'Composer\\Installers\\MauticInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MauticInstaller.php',
71 | 'Composer\\Installers\\MediaWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php',
72 | 'Composer\\Installers\\MicroweberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php',
73 | 'Composer\\Installers\\MoodleInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MoodleInstaller.php',
74 | 'Composer\\Installers\\OctoberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OctoberInstaller.php',
75 | 'Composer\\Installers\\OxidInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OxidInstaller.php',
76 | 'Composer\\Installers\\PPIInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PPIInstaller.php',
77 | 'Composer\\Installers\\PhiftyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php',
78 | 'Composer\\Installers\\PhpBBInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php',
79 | 'Composer\\Installers\\PimcoreInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PimcoreInstaller.php',
80 | 'Composer\\Installers\\PiwikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PiwikInstaller.php',
81 | 'Composer\\Installers\\PlentymarketsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php',
82 | 'Composer\\Installers\\Plugin' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Plugin.php',
83 | 'Composer\\Installers\\PrestashopInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php',
84 | 'Composer\\Installers\\PuppetInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PuppetInstaller.php',
85 | 'Composer\\Installers\\RadPHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
86 | 'Composer\\Installers\\ReIndexInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
87 | 'Composer\\Installers\\RedaxoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
88 | 'Composer\\Installers\\RoundcubeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
89 | 'Composer\\Installers\\SMFInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
90 | 'Composer\\Installers\\ShopwareInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php',
91 | 'Composer\\Installers\\SilverStripeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php',
92 | 'Composer\\Installers\\Symfony1Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
93 | 'Composer\\Installers\\TYPO3CmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
94 | 'Composer\\Installers\\TYPO3FlowInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
95 | 'Composer\\Installers\\TheliaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
96 | 'Composer\\Installers\\TuskInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
97 | 'Composer\\Installers\\VanillaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/VanillaInstaller.php',
98 | 'Composer\\Installers\\WHMCSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php',
99 | 'Composer\\Installers\\WolfCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php',
100 | 'Composer\\Installers\\WordPressInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WordPressInstaller.php',
101 | 'Composer\\Installers\\YawikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/YawikInstaller.php',
102 | 'Composer\\Installers\\ZendInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZendInstaller.php',
103 | 'Composer\\Installers\\ZikulaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php',
104 | 'Sober\\Unravel\\Migrate' => __DIR__ . '/../..' . '/src/Migrate.php',
105 | 'Sober\\Unravel\\Migrate\\AdvancedCustomFields' => __DIR__ . '/../..' . '/src/Migrate/AdvancedCustomFields.php',
106 | 'Sober\\Unravel\\Migrate\\Models' => __DIR__ . '/../..' . '/src/Migrate/Models.php',
107 | 'Sober\\Unravel\\Unravel' => __DIR__ . '/../..' . '/src/Unravel.php',
108 | );
109 |
110 | public static function getInitializer(ClassLoader $loader)
111 | {
112 | return \Closure::bind(function () use ($loader) {
113 | $loader->prefixLengthsPsr4 = ComposerStaticInitc8d0f8daae48ae5c95663bf9b42ca1a5::$prefixLengthsPsr4;
114 | $loader->prefixDirsPsr4 = ComposerStaticInitc8d0f8daae48ae5c95663bf9b42ca1a5::$prefixDirsPsr4;
115 | $loader->classMap = ComposerStaticInitc8d0f8daae48ae5c95663bf9b42ca1a5::$classMap;
116 |
117 | }, null, ClassLoader::class);
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/dist/composer/ClassLoader.php:
--------------------------------------------------------------------------------
1 |
7 | * Jordi Boggiano
8 | *
9 | * For the full copyright and license information, please view the LICENSE
10 | * file that was distributed with this source code.
11 | */
12 |
13 | namespace Composer\Autoload;
14 |
15 | /**
16 | * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17 | *
18 | * $loader = new \Composer\Autoload\ClassLoader();
19 | *
20 | * // register classes with namespaces
21 | * $loader->add('Symfony\Component', __DIR__.'/component');
22 | * $loader->add('Symfony', __DIR__.'/framework');
23 | *
24 | * // activate the autoloader
25 | * $loader->register();
26 | *
27 | * // to enable searching the include path (eg. for PEAR packages)
28 | * $loader->setUseIncludePath(true);
29 | *
30 | * In this example, if you try to use a class in the Symfony\Component
31 | * namespace or one of its children (Symfony\Component\Console for instance),
32 | * the autoloader will first look for the class under the component/
33 | * directory, and it will then fallback to the framework/ directory if not
34 | * found before giving up.
35 | *
36 | * This class is loosely based on the Symfony UniversalClassLoader.
37 | *
38 | * @author Fabien Potencier
39 | * @author Jordi Boggiano
40 | * @see http://www.php-fig.org/psr/psr-0/
41 | * @see http://www.php-fig.org/psr/psr-4/
42 | */
43 | class ClassLoader
44 | {
45 | // PSR-4
46 | private $prefixLengthsPsr4 = array();
47 | private $prefixDirsPsr4 = array();
48 | private $fallbackDirsPsr4 = array();
49 |
50 | // PSR-0
51 | private $prefixesPsr0 = array();
52 | private $fallbackDirsPsr0 = array();
53 |
54 | private $useIncludePath = false;
55 | private $classMap = array();
56 | private $classMapAuthoritative = false;
57 | private $missingClasses = array();
58 | private $apcuPrefix;
59 |
60 | public function getPrefixes()
61 | {
62 | if (!empty($this->prefixesPsr0)) {
63 | return call_user_func_array('array_merge', $this->prefixesPsr0);
64 | }
65 |
66 | return array();
67 | }
68 |
69 | public function getPrefixesPsr4()
70 | {
71 | return $this->prefixDirsPsr4;
72 | }
73 |
74 | public function getFallbackDirs()
75 | {
76 | return $this->fallbackDirsPsr0;
77 | }
78 |
79 | public function getFallbackDirsPsr4()
80 | {
81 | return $this->fallbackDirsPsr4;
82 | }
83 |
84 | public function getClassMap()
85 | {
86 | return $this->classMap;
87 | }
88 |
89 | /**
90 | * @param array $classMap Class to filename map
91 | */
92 | public function addClassMap(array $classMap)
93 | {
94 | if ($this->classMap) {
95 | $this->classMap = array_merge($this->classMap, $classMap);
96 | } else {
97 | $this->classMap = $classMap;
98 | }
99 | }
100 |
101 | /**
102 | * Registers a set of PSR-0 directories for a given prefix, either
103 | * appending or prepending to the ones previously set for this prefix.
104 | *
105 | * @param string $prefix The prefix
106 | * @param array|string $paths The PSR-0 root directories
107 | * @param bool $prepend Whether to prepend the directories
108 | */
109 | public function add($prefix, $paths, $prepend = false)
110 | {
111 | if (!$prefix) {
112 | if ($prepend) {
113 | $this->fallbackDirsPsr0 = array_merge(
114 | (array) $paths,
115 | $this->fallbackDirsPsr0
116 | );
117 | } else {
118 | $this->fallbackDirsPsr0 = array_merge(
119 | $this->fallbackDirsPsr0,
120 | (array) $paths
121 | );
122 | }
123 |
124 | return;
125 | }
126 |
127 | $first = $prefix[0];
128 | if (!isset($this->prefixesPsr0[$first][$prefix])) {
129 | $this->prefixesPsr0[$first][$prefix] = (array) $paths;
130 |
131 | return;
132 | }
133 | if ($prepend) {
134 | $this->prefixesPsr0[$first][$prefix] = array_merge(
135 | (array) $paths,
136 | $this->prefixesPsr0[$first][$prefix]
137 | );
138 | } else {
139 | $this->prefixesPsr0[$first][$prefix] = array_merge(
140 | $this->prefixesPsr0[$first][$prefix],
141 | (array) $paths
142 | );
143 | }
144 | }
145 |
146 | /**
147 | * Registers a set of PSR-4 directories for a given namespace, either
148 | * appending or prepending to the ones previously set for this namespace.
149 | *
150 | * @param string $prefix The prefix/namespace, with trailing '\\'
151 | * @param array|string $paths The PSR-4 base directories
152 | * @param bool $prepend Whether to prepend the directories
153 | *
154 | * @throws \InvalidArgumentException
155 | */
156 | public function addPsr4($prefix, $paths, $prepend = false)
157 | {
158 | if (!$prefix) {
159 | // Register directories for the root namespace.
160 | if ($prepend) {
161 | $this->fallbackDirsPsr4 = array_merge(
162 | (array) $paths,
163 | $this->fallbackDirsPsr4
164 | );
165 | } else {
166 | $this->fallbackDirsPsr4 = array_merge(
167 | $this->fallbackDirsPsr4,
168 | (array) $paths
169 | );
170 | }
171 | } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
172 | // Register directories for a new namespace.
173 | $length = strlen($prefix);
174 | if ('\\' !== $prefix[$length - 1]) {
175 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
176 | }
177 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
178 | $this->prefixDirsPsr4[$prefix] = (array) $paths;
179 | } elseif ($prepend) {
180 | // Prepend directories for an already registered namespace.
181 | $this->prefixDirsPsr4[$prefix] = array_merge(
182 | (array) $paths,
183 | $this->prefixDirsPsr4[$prefix]
184 | );
185 | } else {
186 | // Append directories for an already registered namespace.
187 | $this->prefixDirsPsr4[$prefix] = array_merge(
188 | $this->prefixDirsPsr4[$prefix],
189 | (array) $paths
190 | );
191 | }
192 | }
193 |
194 | /**
195 | * Registers a set of PSR-0 directories for a given prefix,
196 | * replacing any others previously set for this prefix.
197 | *
198 | * @param string $prefix The prefix
199 | * @param array|string $paths The PSR-0 base directories
200 | */
201 | public function set($prefix, $paths)
202 | {
203 | if (!$prefix) {
204 | $this->fallbackDirsPsr0 = (array) $paths;
205 | } else {
206 | $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
207 | }
208 | }
209 |
210 | /**
211 | * Registers a set of PSR-4 directories for a given namespace,
212 | * replacing any others previously set for this namespace.
213 | *
214 | * @param string $prefix The prefix/namespace, with trailing '\\'
215 | * @param array|string $paths The PSR-4 base directories
216 | *
217 | * @throws \InvalidArgumentException
218 | */
219 | public function setPsr4($prefix, $paths)
220 | {
221 | if (!$prefix) {
222 | $this->fallbackDirsPsr4 = (array) $paths;
223 | } else {
224 | $length = strlen($prefix);
225 | if ('\\' !== $prefix[$length - 1]) {
226 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
227 | }
228 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
229 | $this->prefixDirsPsr4[$prefix] = (array) $paths;
230 | }
231 | }
232 |
233 | /**
234 | * Turns on searching the include path for class files.
235 | *
236 | * @param bool $useIncludePath
237 | */
238 | public function setUseIncludePath($useIncludePath)
239 | {
240 | $this->useIncludePath = $useIncludePath;
241 | }
242 |
243 | /**
244 | * Can be used to check if the autoloader uses the include path to check
245 | * for classes.
246 | *
247 | * @return bool
248 | */
249 | public function getUseIncludePath()
250 | {
251 | return $this->useIncludePath;
252 | }
253 |
254 | /**
255 | * Turns off searching the prefix and fallback directories for classes
256 | * that have not been registered with the class map.
257 | *
258 | * @param bool $classMapAuthoritative
259 | */
260 | public function setClassMapAuthoritative($classMapAuthoritative)
261 | {
262 | $this->classMapAuthoritative = $classMapAuthoritative;
263 | }
264 |
265 | /**
266 | * Should class lookup fail if not found in the current class map?
267 | *
268 | * @return bool
269 | */
270 | public function isClassMapAuthoritative()
271 | {
272 | return $this->classMapAuthoritative;
273 | }
274 |
275 | /**
276 | * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277 | *
278 | * @param string|null $apcuPrefix
279 | */
280 | public function setApcuPrefix($apcuPrefix)
281 | {
282 | $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
283 | }
284 |
285 | /**
286 | * The APCu prefix in use, or null if APCu caching is not enabled.
287 | *
288 | * @return string|null
289 | */
290 | public function getApcuPrefix()
291 | {
292 | return $this->apcuPrefix;
293 | }
294 |
295 | /**
296 | * Registers this instance as an autoloader.
297 | *
298 | * @param bool $prepend Whether to prepend the autoloader or not
299 | */
300 | public function register($prepend = false)
301 | {
302 | spl_autoload_register(array($this, 'loadClass'), true, $prepend);
303 | }
304 |
305 | /**
306 | * Unregisters this instance as an autoloader.
307 | */
308 | public function unregister()
309 | {
310 | spl_autoload_unregister(array($this, 'loadClass'));
311 | }
312 |
313 | /**
314 | * Loads the given class or interface.
315 | *
316 | * @param string $class The name of the class
317 | * @return bool|null True if loaded, null otherwise
318 | */
319 | public function loadClass($class)
320 | {
321 | if ($file = $this->findFile($class)) {
322 | includeFile($file);
323 |
324 | return true;
325 | }
326 | }
327 |
328 | /**
329 | * Finds the path to the file where the class is defined.
330 | *
331 | * @param string $class The name of the class
332 | *
333 | * @return string|false The path if found, false otherwise
334 | */
335 | public function findFile($class)
336 | {
337 | // class map lookup
338 | if (isset($this->classMap[$class])) {
339 | return $this->classMap[$class];
340 | }
341 | if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
342 | return false;
343 | }
344 | if (null !== $this->apcuPrefix) {
345 | $file = apcu_fetch($this->apcuPrefix.$class, $hit);
346 | if ($hit) {
347 | return $file;
348 | }
349 | }
350 |
351 | $file = $this->findFileWithExtension($class, '.php');
352 |
353 | // Search for Hack files if we are running on HHVM
354 | if (false === $file && defined('HHVM_VERSION')) {
355 | $file = $this->findFileWithExtension($class, '.hh');
356 | }
357 |
358 | if (null !== $this->apcuPrefix) {
359 | apcu_add($this->apcuPrefix.$class, $file);
360 | }
361 |
362 | if (false === $file) {
363 | // Remember that this class does not exist.
364 | $this->missingClasses[$class] = true;
365 | }
366 |
367 | return $file;
368 | }
369 |
370 | private function findFileWithExtension($class, $ext)
371 | {
372 | // PSR-4 lookup
373 | $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
374 |
375 | $first = $class[0];
376 | if (isset($this->prefixLengthsPsr4[$first])) {
377 | foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
378 | if (0 === strpos($class, $prefix)) {
379 | foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
380 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
381 | return $file;
382 | }
383 | }
384 | }
385 | }
386 | }
387 |
388 | // PSR-4 fallback dirs
389 | foreach ($this->fallbackDirsPsr4 as $dir) {
390 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
391 | return $file;
392 | }
393 | }
394 |
395 | // PSR-0 lookup
396 | if (false !== $pos = strrpos($class, '\\')) {
397 | // namespaced class name
398 | $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
399 | . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
400 | } else {
401 | // PEAR-like class name
402 | $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
403 | }
404 |
405 | if (isset($this->prefixesPsr0[$first])) {
406 | foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
407 | if (0 === strpos($class, $prefix)) {
408 | foreach ($dirs as $dir) {
409 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
410 | return $file;
411 | }
412 | }
413 | }
414 | }
415 | }
416 |
417 | // PSR-0 fallback dirs
418 | foreach ($this->fallbackDirsPsr0 as $dir) {
419 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
420 | return $file;
421 | }
422 | }
423 |
424 | // PSR-0 include paths.
425 | if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
426 | return $file;
427 | }
428 |
429 | return false;
430 | }
431 | }
432 |
433 | /**
434 | * Scope isolated include.
435 | *
436 | * Prevents access to $this/self from included files.
437 | */
438 | function includeFile($file)
439 | {
440 | include $file;
441 | }
442 |
--------------------------------------------------------------------------------