Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.12% covered (success)
94.12%
16 / 17
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Autoloader_Locator
94.12% covered (success)
94.12%
16 / 17
75.00% covered (warning)
75.00%
3 / 4
9.02
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 find_latest_autoloader
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
4
 get_autoloader_path
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 get_autoloader_version
85.71% covered (warning)
85.71%
6 / 7
0.00% covered (danger)
0.00%
0 / 1
3.03
1<?php
2/* HEADER */ // phpcs:ignore
3
4use Automattic\Jetpack\Autoloader\AutoloadGenerator;
5
6/**
7 * This class locates autoloaders.
8 */
9class Autoloader_Locator {
10
11    /**
12     * The object for comparing autoloader versions.
13     *
14     * @var Version_Selector
15     */
16    private $version_selector;
17
18    /**
19     * The constructor.
20     *
21     * @param Version_Selector $version_selector The version selector object.
22     */
23    public function __construct( $version_selector ) {
24        $this->version_selector = $version_selector;
25    }
26
27    /**
28     * Finds the path to the plugin with the latest autoloader.
29     *
30     * @param array  $plugin_paths An array of plugin paths.
31     * @param string $latest_version The latest version reference. @phan-output-reference.
32     *
33     * @return string|null
34     */
35    public function find_latest_autoloader( $plugin_paths, &$latest_version ) {
36        $latest_plugin = null;
37
38        foreach ( $plugin_paths as $plugin_path ) {
39            $version = $this->get_autoloader_version( $plugin_path );
40            if ( ! $version || ! $this->version_selector->is_version_update_required( $latest_version, $version ) ) {
41                continue;
42            }
43
44            $latest_version = $version;
45            $latest_plugin  = $plugin_path;
46        }
47
48        return $latest_plugin;
49    }
50
51    /**
52     * Gets the path to the autoloader.
53     *
54     * @param string $plugin_path The path to the plugin.
55     *
56     * @return string
57     */
58    public function get_autoloader_path( $plugin_path ) {
59        return trailingslashit( $plugin_path ) . 'vendor/autoload_packages.php';
60    }
61
62    /**
63     * Gets the version for the autoloader.
64     *
65     * @param string $plugin_path The path to the plugin.
66     *
67     * @return string|null
68     */
69    public function get_autoloader_version( $plugin_path ) {
70        $classmap = trailingslashit( $plugin_path ) . 'vendor/composer/jetpack_autoload_classmap.php';
71        if ( ! file_exists( $classmap ) ) {
72            return null;
73        }
74
75        $classmap = require $classmap;
76        if ( isset( $classmap[ AutoloadGenerator::class ] ) ) {
77            return $classmap[ AutoloadGenerator::class ]['version'];
78        }
79
80        return null;
81    }
82}