Timber - Version 1.19.2

Version Description

Fixes and improvements

  • Handle for duplicate term names in difft taxes by @jarednova in #2390
  • Fix typo in resize error message. by @Web-Assembler in #2523
  • Add webp support to letterbox filter by @ThomasBerends in #2528
  • Update composer/installers from v1 to v2 by @adamtomat in #2543
  • Improve composer version ranges by @gchtr in #2550

  • @Web-Assembler made their first contribution in #2523

  • @ThomasBerends made their first contribution in #2528

  • Full Changelog: https://github.com/timber/timber/compare/1.19.1...1.19.2

Download this release

Release Info

Developer jarednova
Plugin Icon 128x128 Timber
Version 1.19.2
Comparing to
See all releases

Code changes from version 1.19.1 to 1.19.2

README.md CHANGED
@@ -14,7 +14,6 @@ By
14
  [![Coverage Status](https://img.shields.io/coveralls/timber/timber.svg?style=flat-square)](https://coveralls.io/github/timber/timber)
15
  [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/timber/timber.svg?style=flat-square)](https://scrutinizer-ci.com/g/timber/timber/?branch=master)
16
  [![Latest Stable Version](https://img.shields.io/packagist/v/timber/timber.svg?style=flat-square)](https://packagist.org/packages/timber/timber)
17
- [![WordPress Download Count](https://img.shields.io/wordpress/plugin/dt/timber-library.svg?style=flat-square)](https://wordpress.org/plugins/timber-library/)
18
  [![WordPress Rating](https://img.shields.io/wordpress/plugin/r/timber-library.svg?style=flat-square)](https://wordpress.org/support/plugin/timber-library/reviews/)
19
 
20
  ### Because WordPress is awesome, but the_loop isn't
@@ -118,6 +117,7 @@ Timber is great for any WordPress developer who cares about writing good, mainta
118
  #### Helpful Links
119
  * [**CSS Tricks**](https://css-tricks.com/timber-and-twig-reignited-my-love-for-wordpress/) introduction to Timber by [@tjFogarty](https://github.com/tjFogarty)
120
  * [**Twig for Timber Cheatsheet**](http://notlaura.com/the-twig-for-timber-cheatsheet/) by [@laras126](https://github.com/laras126)
 
121
  * [**TutsPlus**](http://code.tutsplus.com/articles/kick-start-wordpress-development-with-twig-introduction--cms-24781) A guide to getting started by [@ahmadawais](https://github.com/ahmadawais)
122
 
123
  #### Support
14
  [![Coverage Status](https://img.shields.io/coveralls/timber/timber.svg?style=flat-square)](https://coveralls.io/github/timber/timber)
15
  [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/timber/timber.svg?style=flat-square)](https://scrutinizer-ci.com/g/timber/timber/?branch=master)
16
  [![Latest Stable Version](https://img.shields.io/packagist/v/timber/timber.svg?style=flat-square)](https://packagist.org/packages/timber/timber)
 
17
  [![WordPress Rating](https://img.shields.io/wordpress/plugin/r/timber-library.svg?style=flat-square)](https://wordpress.org/support/plugin/timber-library/reviews/)
18
 
19
  ### Because WordPress is awesome, but the_loop isn't
117
  #### Helpful Links
118
  * [**CSS Tricks**](https://css-tricks.com/timber-and-twig-reignited-my-love-for-wordpress/) introduction to Timber by [@tjFogarty](https://github.com/tjFogarty)
119
  * [**Twig for Timber Cheatsheet**](http://notlaura.com/the-twig-for-timber-cheatsheet/) by [@laras126](https://github.com/laras126)
120
+ * [**Timber Cheatsheet**](https://gist.github.com/taotiwordpress/266fd95513f97f3c17748288579c56b9) by [@taotiwordpress](https://github.com/taotiwordpress)
121
  * [**TutsPlus**](http://code.tutsplus.com/articles/kick-start-wordpress-development-with-twig-introduction--cms-24781) A guide to getting started by [@ahmadawais](https://github.com/ahmadawais)
122
 
123
  #### Support
lib/Image/Operation/Letterbox.php CHANGED
@@ -115,6 +115,9 @@ class Letterbox extends ImageOperation {
115
  $quality = $quality / 10;
116
  $quality = round(10 - $quality);
117
  }
 
 
 
118
  }
119
  $image = $func($save_filename);
120
  imagecopy($bg, $image, $x, $y, 0, 0, $owt, $oht);
115
  $quality = $quality / 10;
116
  $quality = round(10 - $quality);
117
  }
118
+ } else if ( $ext == 'webp' ) {
119
+ $func = 'imagecreatefromwebp';
120
+ $save_func = 'imagewebp';
121
  }
122
  $image = $func($save_filename);
123
  imagecopy($bg, $image, $x, $y, 0, 0, $owt, $oht);
lib/Image/Operation/Resize.php CHANGED
@@ -212,7 +212,7 @@ class Resize extends ImageOperation {
212
  Helper::error_log('Error loading '.$image->error_data['error_loading_image']);
213
  } else {
214
  if ( !extension_loaded('gd') ) {
215
- Helper::error_log('Can not resize image, please installed php-gd');
216
  } else {
217
  Helper::error_log($image);
218
  }
212
  Helper::error_log('Error loading '.$image->error_data['error_loading_image']);
213
  } else {
214
  if ( !extension_loaded('gd') ) {
215
+ Helper::error_log('Can not resize image, please install php-gd');
216
  } else {
217
  Helper::error_log($image);
218
  }
lib/Term.php CHANGED
@@ -155,7 +155,7 @@ class Term extends Core implements CoreInterface {
155
 
156
  /**
157
  * @internal
158
- * @param int $tid
159
  * @return mixed
160
  */
161
  protected function get_term( $tid ) {
@@ -164,6 +164,19 @@ class Term extends Core implements CoreInterface {
164
  }
165
  $tid = self::get_tid($tid);
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  if ( isset($this->taxonomy) && strlen($this->taxonomy) ) {
168
  return get_term($tid, $this->taxonomy);
169
  } else {
@@ -181,9 +194,9 @@ class Term extends Core implements CoreInterface {
181
  /**
182
  * @internal
183
  * @param int $tid
184
- * @return int
185
  */
186
- protected function get_tid( $tid ) {
187
  global $wpdb;
188
  if ( is_numeric($tid) ) {
189
  return $tid;
@@ -192,15 +205,16 @@ class Term extends Core implements CoreInterface {
192
  $tid = $tid->term_id;
193
  }
194
  if ( is_numeric($tid) ) {
195
- $query = $wpdb->prepare("SELECT * FROM $wpdb->terms WHERE term_id = %d", $tid);
196
  } else {
197
- $query = $wpdb->prepare("SELECT * FROM $wpdb->terms WHERE slug = %s", $tid);
198
  }
199
- $result = $wpdb->get_row($query);
200
- if ( isset($result->term_id) ) {
201
- $result->ID = $result->term_id;
202
- $result->id = $result->term_id;
203
- return $result->ID;
 
204
  }
205
  return 0;
206
  }
155
 
156
  /**
157
  * @internal
158
+ * @param int|object|array $tid
159
  * @return mixed
160
  */
161
  protected function get_term( $tid ) {
164
  }
165
  $tid = self::get_tid($tid);
166
 
167
+ if ( is_array($tid) ) {
168
+ //there's more than one matching $term_id, let's figure out which is correct
169
+ if ( isset($this->taxonomy) && strlen($this->taxonomy) ) {
170
+ foreach( $tid as $term_id ) {
171
+ $maybe_term = get_term($term_id, $this->taxonomy);
172
+ if ( $maybe_term ) {
173
+ return $maybe_term;
174
+ }
175
+ }
176
+ }
177
+ $tid = $tid[0];
178
+ }
179
+
180
  if ( isset($this->taxonomy) && strlen($this->taxonomy) ) {
181
  return get_term($tid, $this->taxonomy);
182
  } else {
194
  /**
195
  * @internal
196
  * @param int $tid
197
+ * @return int|array
198
  */
199
+ protected static function get_tid( $tid ) {
200
  global $wpdb;
201
  if ( is_numeric($tid) ) {
202
  return $tid;
205
  $tid = $tid->term_id;
206
  }
207
  if ( is_numeric($tid) ) {
208
+ $query = $wpdb->prepare("SELECT term_id FROM $wpdb->terms WHERE term_id = %d", $tid);
209
  } else {
210
+ $query = $wpdb->prepare("SELECT term_id FROM $wpdb->terms WHERE slug = %s", $tid);
211
  }
212
+ $result = $wpdb->get_col($query);
213
+ if ( $result ) {
214
+ if ( count($result) == 1) {
215
+ return $result[0];
216
+ }
217
+ return $result;
218
  }
219
  return 0;
220
  }
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: jarednova
3
  Tags: template engine, templates, twig
4
  Requires at least: 4.9.8
5
- Tested up to: 5.8.1
6
- Stable tag: 1.19.1
7
  Requires PHP: 5.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -37,7 +37,20 @@ _Twig is the template language powering Timber; if you need a little background
37
  **Changes for Theme Developers**
38
 
39
  **Fixes and improvements**
40
- * Fix documented return type for Timber\Image::thumbnail #2463 (thanks @titouanmathis)
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
  = 1.19.1 =
43
 
2
  Contributors: jarednova
3
  Tags: template engine, templates, twig
4
  Requires at least: 4.9.8
5
+ Tested up to: 5.9.3
6
+ Stable tag: 1.19.2
7
  Requires PHP: 5.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
37
  **Changes for Theme Developers**
38
 
39
  **Fixes and improvements**
40
+
41
+ = 1.19.2 =
42
+
43
+ **Fixes and improvements**
44
+
45
+ * Handle for duplicate term names in difft taxes by @jarednova in #2390
46
+ * Fix typo in resize error message. by @Web-Assembler in #2523
47
+ * Add webp support to letterbox filter by @ThomasBerends in #2528
48
+ * Update composer/installers from v1 to v2 by @adamtomat in #2543
49
+ * Improve composer version ranges by @gchtr in #2550
50
+
51
+ * @Web-Assembler made their first contribution in #2523
52
+ * @ThomasBerends made their first contribution in #2528
53
+ * Full Changelog: https://github.com/timber/timber/compare/1.19.1...1.19.2
54
 
55
  = 1.19.1 =
56
 
timber.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Timber
4
  Description: The WordPress Timber Library allows you to write themes using the power of Twig templates.
5
  Plugin URI: https://upstatement.com/timber
6
  Author: Jared Novack + Upstatement
7
- Version: 1.19.1
8
  Author URI: http://upstatement.com/
9
  */
10
  // we look for Composer files first in the plugins dir.
4
  Description: The WordPress Timber Library allows you to write themes using the power of Twig templates.
5
  Plugin URI: https://upstatement.com/timber
6
  Author: Jared Novack + Upstatement
7
+ Version: 1.19.2
8
  Author URI: http://upstatement.com/
9
  */
10
  // we look for Composer files first in the plugins dir.
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit88b27880b72a8f9d46918e01e89ec929::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitb09ed3b21b75518e597c3ad55e79e76d::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -42,75 +42,30 @@ namespace Composer\Autoload;
42
  */
43
  class ClassLoader
44
  {
45
- /** @var ?string */
46
  private $vendorDir;
47
 
48
  // PSR-4
49
- /**
50
- * @var array[]
51
- * @psalm-var array<string, array<string, int>>
52
- */
53
  private $prefixLengthsPsr4 = array();
54
- /**
55
- * @var array[]
56
- * @psalm-var array<string, array<int, string>>
57
- */
58
  private $prefixDirsPsr4 = array();
59
- /**
60
- * @var array[]
61
- * @psalm-var array<string, string>
62
- */
63
  private $fallbackDirsPsr4 = array();
64
 
65
  // PSR-0
66
- /**
67
- * @var array[]
68
- * @psalm-var array<string, array<string, string[]>>
69
- */
70
  private $prefixesPsr0 = array();
71
- /**
72
- * @var array[]
73
- * @psalm-var array<string, string>
74
- */
75
  private $fallbackDirsPsr0 = array();
76
 
77
- /** @var bool */
78
  private $useIncludePath = false;
79
-
80
- /**
81
- * @var string[]
82
- * @psalm-var array<string, string>
83
- */
84
  private $classMap = array();
85
-
86
- /** @var bool */
87
  private $classMapAuthoritative = false;
88
-
89
- /**
90
- * @var bool[]
91
- * @psalm-var array<string, bool>
92
- */
93
  private $missingClasses = array();
94
-
95
- /** @var ?string */
96
  private $apcuPrefix;
97
 
98
- /**
99
- * @var self[]
100
- */
101
  private static $registeredLoaders = array();
102
 
103
- /**
104
- * @param ?string $vendorDir
105
- */
106
  public function __construct($vendorDir = null)
107
  {
108
  $this->vendorDir = $vendorDir;
109
  }
110
 
111
- /**
112
- * @return string[]
113
- */
114
  public function getPrefixes()
115
  {
116
  if (!empty($this->prefixesPsr0)) {
@@ -120,47 +75,28 @@ class ClassLoader
120
  return array();
121
  }
122
 
123
- /**
124
- * @return array[]
125
- * @psalm-return array<string, array<int, string>>
126
- */
127
  public function getPrefixesPsr4()
128
  {
129
  return $this->prefixDirsPsr4;
130
  }
131
 
132
- /**
133
- * @return array[]
134
- * @psalm-return array<string, string>
135
- */
136
  public function getFallbackDirs()
137
  {
138
  return $this->fallbackDirsPsr0;
139
  }
140
 
141
- /**
142
- * @return array[]
143
- * @psalm-return array<string, string>
144
- */
145
  public function getFallbackDirsPsr4()
146
  {
147
  return $this->fallbackDirsPsr4;
148
  }
149
 
150
- /**
151
- * @return string[] Array of classname => path
152
- * @psalm-var array<string, string>
153
- */
154
  public function getClassMap()
155
  {
156
  return $this->classMap;
157
  }
158
 
159
  /**
160
- * @param string[] $classMap Class to filename map
161
- * @psalm-param array<string, string> $classMap
162
- *
163
- * @return void
164
  */
165
  public function addClassMap(array $classMap)
166
  {
@@ -175,11 +111,9 @@ class ClassLoader
175
  * Registers a set of PSR-0 directories for a given prefix, either
176
  * appending or prepending to the ones previously set for this prefix.
177
  *
178
- * @param string $prefix The prefix
179
- * @param string[]|string $paths The PSR-0 root directories
180
- * @param bool $prepend Whether to prepend the directories
181
- *
182
- * @return void
183
  */
184
  public function add($prefix, $paths, $prepend = false)
185
  {
@@ -222,13 +156,11 @@ class ClassLoader
222
  * Registers a set of PSR-4 directories for a given namespace, either
223
  * appending or prepending to the ones previously set for this namespace.
224
  *
225
- * @param string $prefix The prefix/namespace, with trailing '\\'
226
- * @param string[]|string $paths The PSR-4 base directories
227
- * @param bool $prepend Whether to prepend the directories
228
  *
229
  * @throws \InvalidArgumentException
230
- *
231
- * @return void
232
  */
233
  public function addPsr4($prefix, $paths, $prepend = false)
234
  {
@@ -272,10 +204,8 @@ class ClassLoader
272
  * Registers a set of PSR-0 directories for a given prefix,
273
  * replacing any others previously set for this prefix.
274
  *
275
- * @param string $prefix The prefix
276
- * @param string[]|string $paths The PSR-0 base directories
277
- *
278
- * @return void
279
  */
280
  public function set($prefix, $paths)
281
  {
@@ -290,12 +220,10 @@ class ClassLoader
290
  * Registers a set of PSR-4 directories for a given namespace,
291
  * replacing any others previously set for this namespace.
292
  *
293
- * @param string $prefix The prefix/namespace, with trailing '\\'
294
- * @param string[]|string $paths The PSR-4 base directories
295
  *
296
  * @throws \InvalidArgumentException
297
- *
298
- * @return void
299
  */
300
  public function setPsr4($prefix, $paths)
301
  {
@@ -315,8 +243,6 @@ class ClassLoader
315
  * Turns on searching the include path for class files.
316
  *
317
  * @param bool $useIncludePath
318
- *
319
- * @return void
320
  */
321
  public function setUseIncludePath($useIncludePath)
322
  {
@@ -339,8 +265,6 @@ class ClassLoader
339
  * that have not been registered with the class map.
340
  *
341
  * @param bool $classMapAuthoritative
342
- *
343
- * @return void
344
  */
345
  public function setClassMapAuthoritative($classMapAuthoritative)
346
  {
@@ -361,8 +285,6 @@ class ClassLoader
361
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
362
  *
363
  * @param string|null $apcuPrefix
364
- *
365
- * @return void
366
  */
367
  public function setApcuPrefix($apcuPrefix)
368
  {
@@ -383,8 +305,6 @@ class ClassLoader
383
  * Registers this instance as an autoloader.
384
  *
385
  * @param bool $prepend Whether to prepend the autoloader or not
386
- *
387
- * @return void
388
  */
389
  public function register($prepend = false)
390
  {
@@ -404,8 +324,6 @@ class ClassLoader
404
 
405
  /**
406
  * Unregisters this instance as an autoloader.
407
- *
408
- * @return void
409
  */
410
  public function unregister()
411
  {
@@ -420,7 +338,7 @@ class ClassLoader
420
  * Loads the given class or interface.
421
  *
422
  * @param string $class The name of the class
423
- * @return true|null True if loaded, null otherwise
424
  */
425
  public function loadClass($class)
426
  {
@@ -429,8 +347,6 @@ class ClassLoader
429
 
430
  return true;
431
  }
432
-
433
- return null;
434
  }
435
 
436
  /**
@@ -485,11 +401,6 @@ class ClassLoader
485
  return self::$registeredLoaders;
486
  }
487
 
488
- /**
489
- * @param string $class
490
- * @param string $ext
491
- * @return string|false
492
- */
493
  private function findFileWithExtension($class, $ext)
494
  {
495
  // PSR-4 lookup
@@ -561,10 +472,6 @@ class ClassLoader
561
  * Scope isolated include.
562
  *
563
  * Prevents access to $this/self from included files.
564
- *
565
- * @param string $file
566
- * @return void
567
- * @private
568
  */
569
  function includeFile($file)
570
  {
42
  */
43
  class ClassLoader
44
  {
 
45
  private $vendorDir;
46
 
47
  // PSR-4
 
 
 
 
48
  private $prefixLengthsPsr4 = array();
 
 
 
 
49
  private $prefixDirsPsr4 = array();
 
 
 
 
50
  private $fallbackDirsPsr4 = array();
51
 
52
  // PSR-0
 
 
 
 
53
  private $prefixesPsr0 = array();
 
 
 
 
54
  private $fallbackDirsPsr0 = array();
55
 
 
56
  private $useIncludePath = false;
 
 
 
 
 
57
  private $classMap = array();
 
 
58
  private $classMapAuthoritative = false;
 
 
 
 
 
59
  private $missingClasses = array();
 
 
60
  private $apcuPrefix;
61
 
 
 
 
62
  private static $registeredLoaders = array();
63
 
 
 
 
64
  public function __construct($vendorDir = null)
65
  {
66
  $this->vendorDir = $vendorDir;
67
  }
68
 
 
 
 
69
  public function getPrefixes()
70
  {
71
  if (!empty($this->prefixesPsr0)) {
75
  return array();
76
  }
77
 
 
 
 
 
78
  public function getPrefixesPsr4()
79
  {
80
  return $this->prefixDirsPsr4;
81
  }
82
 
 
 
 
 
83
  public function getFallbackDirs()
84
  {
85
  return $this->fallbackDirsPsr0;
86
  }
87
 
 
 
 
 
88
  public function getFallbackDirsPsr4()
89
  {
90
  return $this->fallbackDirsPsr4;
91
  }
92
 
 
 
 
 
93
  public function getClassMap()
94
  {
95
  return $this->classMap;
96
  }
97
 
98
  /**
99
+ * @param array $classMap Class to filename map
 
 
 
100
  */
101
  public function addClassMap(array $classMap)
102
  {
111
  * Registers a set of PSR-0 directories for a given prefix, either
112
  * appending or prepending to the ones previously set for this prefix.
113
  *
114
+ * @param string $prefix The prefix
115
+ * @param array|string $paths The PSR-0 root directories
116
+ * @param bool $prepend Whether to prepend the directories
 
 
117
  */
118
  public function add($prefix, $paths, $prepend = false)
119
  {
156
  * Registers a set of PSR-4 directories for a given namespace, either
157
  * appending or prepending to the ones previously set for this namespace.
158
  *
159
+ * @param string $prefix The prefix/namespace, with trailing '\\'
160
+ * @param array|string $paths The PSR-4 base directories
161
+ * @param bool $prepend Whether to prepend the directories
162
  *
163
  * @throws \InvalidArgumentException
 
 
164
  */
165
  public function addPsr4($prefix, $paths, $prepend = false)
166
  {
204
  * Registers a set of PSR-0 directories for a given prefix,
205
  * replacing any others previously set for this prefix.
206
  *
207
+ * @param string $prefix The prefix
208
+ * @param array|string $paths The PSR-0 base directories
 
 
209
  */
210
  public function set($prefix, $paths)
211
  {
220
  * Registers a set of PSR-4 directories for a given namespace,
221
  * replacing any others previously set for this namespace.
222
  *
223
+ * @param string $prefix The prefix/namespace, with trailing '\\'
224
+ * @param array|string $paths The PSR-4 base directories
225
  *
226
  * @throws \InvalidArgumentException
 
 
227
  */
228
  public function setPsr4($prefix, $paths)
229
  {
243
  * Turns on searching the include path for class files.
244
  *
245
  * @param bool $useIncludePath
 
 
246
  */
247
  public function setUseIncludePath($useIncludePath)
248
  {
265
  * that have not been registered with the class map.
266
  *
267
  * @param bool $classMapAuthoritative
 
 
268
  */
269
  public function setClassMapAuthoritative($classMapAuthoritative)
270
  {
285
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
286
  *
287
  * @param string|null $apcuPrefix
 
 
288
  */
289
  public function setApcuPrefix($apcuPrefix)
290
  {
305
  * Registers this instance as an autoloader.
306
  *
307
  * @param bool $prepend Whether to prepend the autoloader or not
 
 
308
  */
309
  public function register($prepend = false)
310
  {
324
 
325
  /**
326
  * Unregisters this instance as an autoloader.
 
 
327
  */
328
  public function unregister()
329
  {
338
  * Loads the given class or interface.
339
  *
340
  * @param string $class The name of the class
341
+ * @return bool|null True if loaded, null otherwise
342
  */
343
  public function loadClass($class)
344
  {
347
 
348
  return true;
349
  }
 
 
350
  }
351
 
352
  /**
401
  return self::$registeredLoaders;
402
  }
403
 
 
 
 
 
 
404
  private function findFileWithExtension($class, $ext)
405
  {
406
  // PSR-4 lookup
472
  * Scope isolated include.
473
  *
474
  * Prevents access to $this/self from included files.
 
 
 
 
475
  */
476
  function includeFile($file)
477
  {
vendor/composer/InstalledVersions.php CHANGED
@@ -1,337 +1,351 @@
1
  <?php
2
 
3
- /*
4
- * This file is part of Composer.
5
- *
6
- * (c) Nils Adermann <naderman@naderman.de>
7
- * Jordi Boggiano <j.boggiano@seld.be>
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;
14
 
15
  use Composer\Autoload\ClassLoader;
16
  use Composer\Semver\VersionParser;
17
 
18
- /**
19
- * This class is copied in every Composer installed project and available to all
20
- *
21
- * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
22
- *
23
- * To require its presence, you can require `composer-runtime-api ^2.0`
24
- */
25
  class InstalledVersions
26
  {
27
- private static $installed;
28
- private static $canGetVendors;
29
- private static $installedByVendor = array();
30
-
31
- /**
32
- * Returns a list of all package names which are present, either by being installed, replaced or provided
33
- *
34
- * @return string[]
35
- * @psalm-return list<string>
36
- */
37
- public static function getInstalledPackages()
38
- {
39
- $packages = array();
40
- foreach (self::getInstalled() as $installed) {
41
- $packages[] = array_keys($installed['versions']);
42
- }
43
-
44
- if (1 === \count($packages)) {
45
- return $packages[0];
46
- }
47
-
48
- return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
49
- }
50
-
51
- /**
52
- * Returns a list of all package names with a specific type e.g. 'library'
53
- *
54
- * @param string $type
55
- * @return string[]
56
- * @psalm-return list<string>
57
- */
58
- public static function getInstalledPackagesByType($type)
59
- {
60
- $packagesByType = array();
61
-
62
- foreach (self::getInstalled() as $installed) {
63
- foreach ($installed['versions'] as $name => $package) {
64
- if (isset($package['type']) && $package['type'] === $type) {
65
- $packagesByType[] = $name;
66
- }
67
- }
68
- }
69
-
70
- return $packagesByType;
71
- }
72
-
73
- /**
74
- * Checks whether the given package is installed
75
- *
76
- * This also returns true if the package name is provided or replaced by another package
77
- *
78
- * @param string $packageName
79
- * @param bool $includeDevRequirements
80
- * @return bool
81
- */
82
- public static function isInstalled($packageName, $includeDevRequirements = true)
83
- {
84
- foreach (self::getInstalled() as $installed) {
85
- if (isset($installed['versions'][$packageName])) {
86
- return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
87
- }
88
- }
89
-
90
- return false;
91
- }
92
-
93
- /**
94
- * Checks whether the given package satisfies a version constraint
95
- *
96
- * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
97
- *
98
- * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
99
- *
100
- * @param VersionParser $parser Install composer/semver to have access to this class and functionality
101
- * @param string $packageName
102
- * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
103
- * @return bool
104
- */
105
- public static function satisfies(VersionParser $parser, $packageName, $constraint)
106
- {
107
- $constraint = $parser->parseConstraints($constraint);
108
- $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
109
-
110
- return $provided->matches($constraint);
111
- }
112
-
113
- /**
114
- * Returns a version constraint representing all the range(s) which are installed for a given package
115
- *
116
- * It is easier to use this via isInstalled() with the $constraint argument if you need to check
117
- * whether a given version of a package is installed, and not just whether it exists
118
- *
119
- * @param string $packageName
120
- * @return string Version constraint usable with composer/semver
121
- */
122
- public static function getVersionRanges($packageName)
123
- {
124
- foreach (self::getInstalled() as $installed) {
125
- if (!isset($installed['versions'][$packageName])) {
126
- continue;
127
- }
128
-
129
- $ranges = array();
130
- if (isset($installed['versions'][$packageName]['pretty_version'])) {
131
- $ranges[] = $installed['versions'][$packageName]['pretty_version'];
132
- }
133
- if (array_key_exists('aliases', $installed['versions'][$packageName])) {
134
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
135
- }
136
- if (array_key_exists('replaced', $installed['versions'][$packageName])) {
137
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
138
- }
139
- if (array_key_exists('provided', $installed['versions'][$packageName])) {
140
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
141
- }
142
-
143
- return implode(' || ', $ranges);
144
- }
145
-
146
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
147
- }
148
-
149
- /**
150
- * @param string $packageName
151
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
152
- */
153
- public static function getVersion($packageName)
154
- {
155
- foreach (self::getInstalled() as $installed) {
156
- if (!isset($installed['versions'][$packageName])) {
157
- continue;
158
- }
159
-
160
- if (!isset($installed['versions'][$packageName]['version'])) {
161
- return null;
162
- }
163
-
164
- return $installed['versions'][$packageName]['version'];
165
- }
166
-
167
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
168
- }
169
-
170
- /**
171
- * @param string $packageName
172
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
173
- */
174
- public static function getPrettyVersion($packageName)
175
- {
176
- foreach (self::getInstalled() as $installed) {
177
- if (!isset($installed['versions'][$packageName])) {
178
- continue;
179
- }
180
-
181
- if (!isset($installed['versions'][$packageName]['pretty_version'])) {
182
- return null;
183
- }
184
-
185
- return $installed['versions'][$packageName]['pretty_version'];
186
- }
187
-
188
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
189
- }
190
-
191
- /**
192
- * @param string $packageName
193
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
194
- */
195
- public static function getReference($packageName)
196
- {
197
- foreach (self::getInstalled() as $installed) {
198
- if (!isset($installed['versions'][$packageName])) {
199
- continue;
200
- }
201
-
202
- if (!isset($installed['versions'][$packageName]['reference'])) {
203
- return null;
204
- }
205
-
206
- return $installed['versions'][$packageName]['reference'];
207
- }
208
-
209
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
210
- }
211
-
212
- /**
213
- * @param string $packageName
214
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
215
- */
216
- public static function getInstallPath($packageName)
217
- {
218
- foreach (self::getInstalled() as $installed) {
219
- if (!isset($installed['versions'][$packageName])) {
220
- continue;
221
- }
222
-
223
- return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
224
- }
225
-
226
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
227
- }
228
-
229
- /**
230
- * @return array
231
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
232
- */
233
- public static function getRootPackage()
234
- {
235
- $installed = self::getInstalled();
236
-
237
- return $installed[0]['root'];
238
- }
239
-
240
- /**
241
- * Returns the raw installed.php data for custom implementations
242
- *
243
- * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
244
- * @return array[]
245
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
246
- */
247
- public static function getRawData()
248
- {
249
- @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
250
-
251
- if (null === self::$installed) {
252
- // only require the installed.php file if this file is loaded from its dumped location,
253
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
254
- if (substr(__DIR__, -8, 1) !== 'C') {
255
- self::$installed = include __DIR__ . '/installed.php';
256
- } else {
257
- self::$installed = array();
258
- }
259
- }
260
-
261
- return self::$installed;
262
- }
263
-
264
- /**
265
- * Returns the raw data of all installed.php which are currently loaded for custom implementations
266
- *
267
- * @return array[]
268
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
269
- */
270
- public static function getAllRawData()
271
- {
272
- return self::getInstalled();
273
- }
274
-
275
- /**
276
- * Lets you reload the static array from another file
277
- *
278
- * This is only useful for complex integrations in which a project needs to use
279
- * this class but then also needs to execute another project's autoloader in process,
280
- * and wants to ensure both projects have access to their version of installed.php.
281
- *
282
- * A typical case would be PHPUnit, where it would need to make sure it reads all
283
- * the data it needs from this class, then call reload() with
284
- * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
285
- * the project in which it runs can then also use this class safely, without
286
- * interference between PHPUnit's dependencies and the project's dependencies.
287
- *
288
- * @param array[] $data A vendor/composer/installed.php data set
289
- * @return void
290
- *
291
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
292
- */
293
- public static function reload($data)
294
- {
295
- self::$installed = $data;
296
- self::$installedByVendor = array();
297
- }
298
-
299
- /**
300
- * @return array[]
301
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
302
- */
303
- private static function getInstalled()
304
- {
305
- if (null === self::$canGetVendors) {
306
- self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
307
- }
308
-
309
- $installed = array();
310
-
311
- if (self::$canGetVendors) {
312
- foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
313
- if (isset(self::$installedByVendor[$vendorDir])) {
314
- $installed[] = self::$installedByVendor[$vendorDir];
315
- } elseif (is_file($vendorDir.'/composer/installed.php')) {
316
- $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
317
- if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
318
- self::$installed = $installed[count($installed) - 1];
319
- }
320
- }
321
- }
322
- }
323
-
324
- if (null === self::$installed) {
325
- // only require the installed.php file if this file is loaded from its dumped location,
326
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
327
- if (substr(__DIR__, -8, 1) !== 'C') {
328
- self::$installed = require __DIR__ . '/installed.php';
329
- } else {
330
- self::$installed = array();
331
- }
332
- }
333
- $installed[] = self::$installed;
334
-
335
- return $installed;
336
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
337
  }
1
  <?php
2
 
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
 
13
  namespace Composer;
14
 
15
  use Composer\Autoload\ClassLoader;
16
  use Composer\Semver\VersionParser;
17
 
18
+
19
+
20
+
21
+
22
+
 
 
23
  class InstalledVersions
24
  {
25
+ private static $installed = array (
26
+ 'root' =>
27
+ array (
28
+ 'pretty_version' => 'dev-master',
29
+ 'version' => 'dev-master',
30
+ 'aliases' =>
31
+ array (
32
+ ),
33
+ 'reference' => '218b45e5256e93fd9e7f36c388dca2a6660c8921',
34
+ 'name' => 'timber/timber',
35
+ ),
36
+ 'versions' =>
37
+ array (
38
+ 'altorouter/altorouter' =>
39
+ array (
40
+ 'pretty_version' => '2.0.2',
41
+ 'version' => '2.0.2.0',
42
+ 'aliases' =>
43
+ array (
44
+ ),
45
+ 'reference' => 'f6fede4f94ced7c22ba63a9b8af0bf2dc38e3cb2',
46
+ ),
47
+ 'composer/installers' =>
48
+ array (
49
+ 'pretty_version' => 'v1.12.0',
50
+ 'version' => '1.12.0.0',
51
+ 'aliases' =>
52
+ array (
53
+ ),
54
+ 'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
55
+ ),
56
+ 'roundcube/plugin-installer' =>
57
+ array (
58
+ 'replaced' =>
59
+ array (
60
+ 0 => '*',
61
+ ),
62
+ ),
63
+ 'shama/baton' =>
64
+ array (
65
+ 'replaced' =>
66
+ array (
67
+ 0 => '*',
68
+ ),
69
+ ),
70
+ 'symfony/polyfill-ctype' =>
71
+ array (
72
+ 'pretty_version' => 'v1.19.0',
73
+ 'version' => '1.19.0.0',
74
+ 'aliases' =>
75
+ array (
76
+ ),
77
+ 'reference' => 'aed596913b70fae57be53d86faa2e9ef85a2297b',
78
+ ),
79
+ 'timber/timber' =>
80
+ array (
81
+ 'pretty_version' => 'dev-master',
82
+ 'version' => 'dev-master',
83
+ 'aliases' =>
84
+ array (
85
+ ),
86
+ 'reference' => '218b45e5256e93fd9e7f36c388dca2a6660c8921',
87
+ ),
88
+ 'twig/cache-extension' =>
89
+ array (
90
+ 'pretty_version' => 'v1.5.0',
91
+ 'version' => '1.5.0.0',
92
+ 'aliases' =>
93
+ array (
94
+ ),
95
+ 'reference' => '2c243643f59132194458bd03c745b079bbb12e78',
96
+ ),
97
+ 'twig/twig' =>
98
+ array (
99
+ 'pretty_version' => 'v1.42.5',
100
+ 'version' => '1.42.5.0',
101
+ 'aliases' =>
102
+ array (
103
+ ),
104
+ 'reference' => '87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e',
105
+ ),
106
+ 'upstatement/routes' =>
107
+ array (
108
+ 'pretty_version' => '0.8.1',
109
+ 'version' => '0.8.1.0',
110
+ 'aliases' =>
111
+ array (
112
+ ),
113
+ 'reference' => '02eb866668f5478d794547aa79e73dd92a989ad9',
114
+ ),
115
+ ),
116
+ );
117
+ private static $canGetVendors;
118
+ private static $installedByVendor = array();
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+ public static function getInstalledPackages()
127
+ {
128
+ $packages = array();
129
+ foreach (self::getInstalled() as $installed) {
130
+ $packages[] = array_keys($installed['versions']);
131
+ }
132
+
133
+
134
+ if (1 === \count($packages)) {
135
+ return $packages[0];
136
+ }
137
+
138
+ return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
139
+ }
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+ public static function isInstalled($packageName)
150
+ {
151
+ foreach (self::getInstalled() as $installed) {
152
+ if (isset($installed['versions'][$packageName])) {
153
+ return true;
154
+ }
155
+ }
156
+
157
+ return false;
158
+ }
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
174
+ {
175
+ $constraint = $parser->parseConstraints($constraint);
176
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
177
+
178
+ return $provided->matches($constraint);
179
+ }
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+ public static function getVersionRanges($packageName)
191
+ {
192
+ foreach (self::getInstalled() as $installed) {
193
+ if (!isset($installed['versions'][$packageName])) {
194
+ continue;
195
+ }
196
+
197
+ $ranges = array();
198
+ if (isset($installed['versions'][$packageName]['pretty_version'])) {
199
+ $ranges[] = $installed['versions'][$packageName]['pretty_version'];
200
+ }
201
+ if (array_key_exists('aliases', $installed['versions'][$packageName])) {
202
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
203
+ }
204
+ if (array_key_exists('replaced', $installed['versions'][$packageName])) {
205
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
206
+ }
207
+ if (array_key_exists('provided', $installed['versions'][$packageName])) {
208
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
209
+ }
210
+
211
+ return implode(' || ', $ranges);
212
+ }
213
+
214
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
215
+ }
216
+
217
+
218
+
219
+
220
+
221
+ public static function getVersion($packageName)
222
+ {
223
+ foreach (self::getInstalled() as $installed) {
224
+ if (!isset($installed['versions'][$packageName])) {
225
+ continue;
226
+ }
227
+
228
+ if (!isset($installed['versions'][$packageName]['version'])) {
229
+ return null;
230
+ }
231
+
232
+ return $installed['versions'][$packageName]['version'];
233
+ }
234
+
235
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
236
+ }
237
+
238
+
239
+
240
+
241
+
242
+ public static function getPrettyVersion($packageName)
243
+ {
244
+ foreach (self::getInstalled() as $installed) {
245
+ if (!isset($installed['versions'][$packageName])) {
246
+ continue;
247
+ }
248
+
249
+ if (!isset($installed['versions'][$packageName]['pretty_version'])) {
250
+ return null;
251
+ }
252
+
253
+ return $installed['versions'][$packageName]['pretty_version'];
254
+ }
255
+
256
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
257
+ }
258
+
259
+
260
+
261
+
262
+
263
+ public static function getReference($packageName)
264
+ {
265
+ foreach (self::getInstalled() as $installed) {
266
+ if (!isset($installed['versions'][$packageName])) {
267
+ continue;
268
+ }
269
+
270
+ if (!isset($installed['versions'][$packageName]['reference'])) {
271
+ return null;
272
+ }
273
+
274
+ return $installed['versions'][$packageName]['reference'];
275
+ }
276
+
277
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
278
+ }
279
+
280
+
281
+
282
+
283
+
284
+ public static function getRootPackage()
285
+ {
286
+ $installed = self::getInstalled();
287
+
288
+ return $installed[0]['root'];
289
+ }
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+ public static function getRawData()
298
+ {
299
+ return self::$installed;
300
+ }
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+ public static function reload($data)
321
+ {
322
+ self::$installed = $data;
323
+ self::$installedByVendor = array();
324
+ }
325
+
326
+
327
+
328
+
329
+ private static function getInstalled()
330
+ {
331
+ if (null === self::$canGetVendors) {
332
+ self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
333
+ }
334
+
335
+ $installed = array();
336
+
337
+ if (self::$canGetVendors) {
338
+ foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
339
+ if (isset(self::$installedByVendor[$vendorDir])) {
340
+ $installed[] = self::$installedByVendor[$vendorDir];
341
+ } elseif (is_file($vendorDir.'/composer/installed.php')) {
342
+ $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
343
+ }
344
+ }
345
+ }
346
+
347
+ $installed[] = self::$installed;
348
+
349
+ return $installed;
350
+ }
351
  }
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit88b27880b72a8f9d46918e01e89ec929
6
  {
7
  private static $loader;
8
 
@@ -24,15 +24,15 @@ class ComposerAutoloaderInit88b27880b72a8f9d46918e01e89ec929
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit88b27880b72a8f9d46918e01e89ec929', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit88b27880b72a8f9d46918e01e89ec929', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\Composer\Autoload\ComposerStaticInit88b27880b72a8f9d46918e01e89ec929::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
@@ -53,19 +53,19 @@ class ComposerAutoloaderInit88b27880b72a8f9d46918e01e89ec929
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
- $includeFiles = Composer\Autoload\ComposerStaticInit88b27880b72a8f9d46918e01e89ec929::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
- composerRequire88b27880b72a8f9d46918e01e89ec929($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
- function composerRequire88b27880b72a8f9d46918e01e89ec929($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitb09ed3b21b75518e597c3ad55e79e76d
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInitb09ed3b21b75518e597c3ad55e79e76d', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInitb09ed3b21b75518e597c3ad55e79e76d', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
+ $includeFiles = Composer\Autoload\ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
+ composerRequireb09ed3b21b75518e597c3ad55e79e76d($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
+ function composerRequireb09ed3b21b75518e597c3ad55e79e76d($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit88b27880b72a8f9d46918e01e89ec929
8
  {
9
  public static $files = array (
10
  '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@@ -625,11 +625,11 @@ class ComposerStaticInit88b27880b72a8f9d46918e01e89ec929
625
  public static function getInitializer(ClassLoader $loader)
626
  {
627
  return \Closure::bind(function () use ($loader) {
628
- $loader->prefixLengthsPsr4 = ComposerStaticInit88b27880b72a8f9d46918e01e89ec929::$prefixLengthsPsr4;
629
- $loader->prefixDirsPsr4 = ComposerStaticInit88b27880b72a8f9d46918e01e89ec929::$prefixDirsPsr4;
630
- $loader->fallbackDirsPsr4 = ComposerStaticInit88b27880b72a8f9d46918e01e89ec929::$fallbackDirsPsr4;
631
- $loader->prefixesPsr0 = ComposerStaticInit88b27880b72a8f9d46918e01e89ec929::$prefixesPsr0;
632
- $loader->classMap = ComposerStaticInit88b27880b72a8f9d46918e01e89ec929::$classMap;
633
 
634
  }, null, ClassLoader::class);
635
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d
8
  {
9
  public static $files = array (
10
  '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
625
  public static function getInitializer(ClassLoader $loader)
626
  {
627
  return \Closure::bind(function () use ($loader) {
628
+ $loader->prefixLengthsPsr4 = ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d::$prefixLengthsPsr4;
629
+ $loader->prefixDirsPsr4 = ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d::$prefixDirsPsr4;
630
+ $loader->fallbackDirsPsr4 = ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d::$fallbackDirsPsr4;
631
+ $loader->prefixesPsr0 = ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d::$prefixesPsr0;
632
+ $loader->classMap = ComposerStaticInitb09ed3b21b75518e597c3ad55e79e76d::$classMap;
633
 
634
  }, null, ClassLoader::class);
635
  }
vendor/composer/installed.json CHANGED
@@ -251,12 +251,12 @@
251
  },
252
  "installation-source": "dist",
253
  "autoload": {
254
- "psr-4": {
255
- "Symfony\\Polyfill\\Ctype\\": ""
256
- },
257
  "files": [
258
  "bootstrap.php"
259
- ]
 
 
 
260
  },
261
  "notification-url": "https://packagist.org/downloads/",
262
  "license": [
251
  },
252
  "installation-source": "dist",
253
  "autoload": {
 
 
 
254
  "files": [
255
  "bootstrap.php"
256
+ ],
257
+ "psr-4": {
258
+ "Symfony\\Polyfill\\Ctype\\": ""
259
+ }
260
  },
261
  "notification-url": "https://packagist.org/downloads/",
262
  "license": [
vendor/composer/installed.php CHANGED
@@ -1,89 +1,92 @@
1
- <?php return array(
2
- 'root' => array(
3
- 'pretty_version' => '1.19.1.x-dev',
4
- 'version' => '1.19.1.9999999-dev',
5
- 'type' => 'library',
6
- 'install_path' => __DIR__ . '/../../',
7
- 'aliases' => array(),
8
- 'reference' => '3e213fbd3587eb36adec2d5a081824c4722a0acf',
9
- 'name' => 'timber/timber',
10
- 'dev' => false,
11
  ),
12
- 'versions' => array(
13
- 'altorouter/altorouter' => array(
14
- 'pretty_version' => '2.0.2',
15
- 'version' => '2.0.2.0',
16
- 'type' => 'library',
17
- 'install_path' => __DIR__ . '/../altorouter/altorouter',
18
- 'aliases' => array(),
19
- 'reference' => 'f6fede4f94ced7c22ba63a9b8af0bf2dc38e3cb2',
20
- 'dev_requirement' => false,
21
- ),
22
- 'composer/installers' => array(
23
- 'pretty_version' => 'v1.12.0',
24
- 'version' => '1.12.0.0',
25
- 'type' => 'composer-plugin',
26
- 'install_path' => __DIR__ . '/./installers',
27
- 'aliases' => array(),
28
- 'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
29
- 'dev_requirement' => false,
30
- ),
31
- 'roundcube/plugin-installer' => array(
32
- 'dev_requirement' => false,
33
- 'replaced' => array(
34
- 0 => '*',
35
- ),
36
- ),
37
- 'shama/baton' => array(
38
- 'dev_requirement' => false,
39
- 'replaced' => array(
40
- 0 => '*',
41
- ),
42
- ),
43
- 'symfony/polyfill-ctype' => array(
44
- 'pretty_version' => 'v1.19.0',
45
- 'version' => '1.19.0.0',
46
- 'type' => 'library',
47
- 'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
48
- 'aliases' => array(),
49
- 'reference' => 'aed596913b70fae57be53d86faa2e9ef85a2297b',
50
- 'dev_requirement' => false,
51
- ),
52
- 'timber/timber' => array(
53
- 'pretty_version' => '1.19.1.x-dev',
54
- 'version' => '1.19.1.9999999-dev',
55
- 'type' => 'library',
56
- 'install_path' => __DIR__ . '/../../',
57
- 'aliases' => array(),
58
- 'reference' => '3e213fbd3587eb36adec2d5a081824c4722a0acf',
59
- 'dev_requirement' => false,
60
- ),
61
- 'twig/cache-extension' => array(
62
- 'pretty_version' => 'v1.5.0',
63
- 'version' => '1.5.0.0',
64
- 'type' => 'library',
65
- 'install_path' => __DIR__ . '/../twig/cache-extension',
66
- 'aliases' => array(),
67
- 'reference' => '2c243643f59132194458bd03c745b079bbb12e78',
68
- 'dev_requirement' => false,
69
- ),
70
- 'twig/twig' => array(
71
- 'pretty_version' => 'v1.42.5',
72
- 'version' => '1.42.5.0',
73
- 'type' => 'library',
74
- 'install_path' => __DIR__ . '/../twig/twig',
75
- 'aliases' => array(),
76
- 'reference' => '87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e',
77
- 'dev_requirement' => false,
78
- ),
79
- 'upstatement/routes' => array(
80
- 'pretty_version' => '0.8.1',
81
- 'version' => '0.8.1.0',
82
- 'type' => 'library',
83
- 'install_path' => __DIR__ . '/../upstatement/routes',
84
- 'aliases' => array(),
85
- 'reference' => '02eb866668f5478d794547aa79e73dd92a989ad9',
86
- 'dev_requirement' => false,
87
- ),
88
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  );
1
+ <?php return array (
2
+ 'root' =>
3
+ array (
4
+ 'pretty_version' => 'dev-master',
5
+ 'version' => 'dev-master',
6
+ 'aliases' =>
7
+ array (
 
 
 
8
  ),
9
+ 'reference' => '218b45e5256e93fd9e7f36c388dca2a6660c8921',
10
+ 'name' => 'timber/timber',
11
+ ),
12
+ 'versions' =>
13
+ array (
14
+ 'altorouter/altorouter' =>
15
+ array (
16
+ 'pretty_version' => '2.0.2',
17
+ 'version' => '2.0.2.0',
18
+ 'aliases' =>
19
+ array (
20
+ ),
21
+ 'reference' => 'f6fede4f94ced7c22ba63a9b8af0bf2dc38e3cb2',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  ),
23
+ 'composer/installers' =>
24
+ array (
25
+ 'pretty_version' => 'v1.12.0',
26
+ 'version' => '1.12.0.0',
27
+ 'aliases' =>
28
+ array (
29
+ ),
30
+ 'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
31
+ ),
32
+ 'roundcube/plugin-installer' =>
33
+ array (
34
+ 'replaced' =>
35
+ array (
36
+ 0 => '*',
37
+ ),
38
+ ),
39
+ 'shama/baton' =>
40
+ array (
41
+ 'replaced' =>
42
+ array (
43
+ 0 => '*',
44
+ ),
45
+ ),
46
+ 'symfony/polyfill-ctype' =>
47
+ array (
48
+ 'pretty_version' => 'v1.19.0',
49
+ 'version' => '1.19.0.0',
50
+ 'aliases' =>
51
+ array (
52
+ ),
53
+ 'reference' => 'aed596913b70fae57be53d86faa2e9ef85a2297b',
54
+ ),
55
+ 'timber/timber' =>
56
+ array (
57
+ 'pretty_version' => 'dev-master',
58
+ 'version' => 'dev-master',
59
+ 'aliases' =>
60
+ array (
61
+ ),
62
+ 'reference' => '218b45e5256e93fd9e7f36c388dca2a6660c8921',
63
+ ),
64
+ 'twig/cache-extension' =>
65
+ array (
66
+ 'pretty_version' => 'v1.5.0',
67
+ 'version' => '1.5.0.0',
68
+ 'aliases' =>
69
+ array (
70
+ ),
71
+ 'reference' => '2c243643f59132194458bd03c745b079bbb12e78',
72
+ ),
73
+ 'twig/twig' =>
74
+ array (
75
+ 'pretty_version' => 'v1.42.5',
76
+ 'version' => '1.42.5.0',
77
+ 'aliases' =>
78
+ array (
79
+ ),
80
+ 'reference' => '87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e',
81
+ ),
82
+ 'upstatement/routes' =>
83
+ array (
84
+ 'pretty_version' => '0.8.1',
85
+ 'version' => '0.8.1.0',
86
+ 'aliases' =>
87
+ array (
88
+ ),
89
+ 'reference' => '02eb866668f5478d794547aa79e73dd92a989ad9',
90
+ ),
91
+ ),
92
  );