Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
Cache
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 5
56
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 hooks
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 on_rewrite
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 on_cache_level_change
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 add_to_runtime
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace NewfoldLabs\WP\Module\Performance\Cache;
4
5use NewfoldLabs\WP\ModuleLoader\Container;
6
7use function NewfoldLabs\WP\Module\Performance\get_cache_exclusion;
8use function NewfoldLabs\WP\Module\Performance\get_cache_level;
9
10/**
11 * Cache manager.
12 */
13class Cache {
14
15    /**
16     * Dependency injection container.
17     *
18     * @var Container
19     */
20    protected $container;
21
22    /**
23     * Constructor.
24     *
25     * @param Container $container the container
26     */
27    public function __construct( Container $container ) {
28        $this->container = $container;
29
30        $cacheManager = new CacheManager( $container );
31        $cachePurger  = new CachePurgingService( $cacheManager->get_instances() );
32
33        $container->set( 'cachePurger', $cachePurger );
34
35        new CacheExclusion( $container );
36
37        $container->set( 'hasMustUsePlugin', file_exists( WPMU_PLUGIN_DIR . '/endurance-page-cache.php' ) );
38
39        $this->hooks();
40
41        add_action( 'plugins_loaded', array( $this, 'hooks2' ) );
42
43        add_filter( 'newfold-runtime', array( $this, 'add_to_runtime' ), 100 );
44    }
45
46    /**
47     * Add hooks.
48     */
49    public function hooks() {
50
51        add_action( 'after_mod_rewrite_rules', array( $this, 'on_rewrite' ) );
52
53        add_action( 'newfold_container_set', array( $this, 'plugin_hooks' ) );
54        add_action( 'plugins_loaded', array( $this, 'hooks' ) );
55
56        add_action( 'newfold_container_set', array( $this, 'plugin_hooks' ) );
57    }
58
59    /**
60     * When updating mod rewrite rules, also update our rewrites as appropriate.
61     */
62    public function on_rewrite() {
63        $this->on_cache_level_change( get_cache_level() );
64    }
65
66    /**
67     * On cache level change, update the response headers.
68     *
69     * @param int|null $cacheLevel The cache level.
70     */
71    public function on_cache_level_change( $cacheLevel ) {
72        /**
73         * Respone Header Manager from container
74         *
75         * @var ResponseHeaderManager $responseHeaderManager
76         */
77        $responseHeaderManager = $this->container->get( 'responseHeaderManager' );
78        $responseHeaderManager->add_header( 'X-Newfold-Cache-Level', absint( $cacheLevel ) );
79
80        // Remove the old option from EPC, if it exists.
81        if ( $this->container->get( 'hasMustUsePlugin' ) && absint( get_option( 'endurance_cache_level', 0 ) ) ) {
82            update_option( 'endurance_cache_level', 0 );
83            delete_option( 'endurance_cache_level' );
84        }
85    }
86
87    /**
88     * Add to Newfold SDK runtime.
89     *
90     * @param array $sdk SDK data.
91     * @return array SDK data.
92     */
93    public function add_to_runtime( $sdk ) {
94
95        $values = array(
96            'level'     => get_cache_level(),
97            'exclusion' => get_cache_exclusion(),
98        );
99
100        return array_merge( $sdk, array( 'cache' => $values ) );
101    }
102}