PluginProbe
Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization / 4.2.7
Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization v4.2.7
4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 2.5.5 2.5.6 2.5.7 3.0.0 3.0.1 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.11.0 3.11.1 3.11.2 3.11.3 3.12.0 3.12.1 All 134 releases
optimole-wp / inc / conflicts / conflict_manager.php

conflict_manager.php in Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization 4.2.7, at inc/conflicts/conflict_manager.php

162 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The Conflict Manager class, orchestrates conflicts.
4 *
5 * @package \Optimole\Inc\Conflicts
6 * @author Optimole <friends@optimole.com>
7 */
8
9 /**
10 * Class Optml_Conflict_Manager
11 *
12 * @since 2.0.6
13 */
14 class Optml_Conflict_Manager {
15 /**
16 * List of conflicts to watch.
17 *
18 * @since 2.0.6
19 * @access protected
20 * @var array $watched_conflicts
21 */
22 protected $watched_conflicts = [];
23 /**
24 * List of conflicts dismissed by user.
25 *
26 * @since 2.0.6
27 * @access protected
28 * @var array $dismissed_conflicts
29 */
30 protected $dismissed_conflicts = [];
31
32
33
34 /**
35 * Optml_Conflict_Manager constructor.
36 *
37 * @since 2.0.6
38 * @access public
39 * @param array $register_conflicts A list of conflicts to be registered.
40 */
41 public function __construct( $register_conflicts = [] ) {
42 $this->dismissed_conflicts = get_option( 'optml_dismissed_conflicts', [] );
43 if ( ! empty( $register_conflicts ) ) {
44 foreach ( $register_conflicts as $conflict_to_watch ) {
45 $this->watch( $conflict_to_watch );
46 }
47 }
48 }
49
50 /**
51 * Add a conflict to the watched conflicts.
52 *
53 * @since 2.0.6
54 * @access public
55 * @param string $conflict A conflict class name.
56 */
57 public function watch( $conflict ) {
58 if ( is_subclass_of( new $conflict(), 'Optml_Abstract_Conflict' ) ) {
59 array_push( $this->watched_conflicts, new $conflict() );
60 }
61 }
62
63 /**
64 * Dismiss conflict.
65 *
66 * @since 2.0.6
67 * @access public
68 * @param string $id The conflict ID.
69 *
70 * @return bool
71 */
72 public function dismiss_conflict( $id ) {
73 $this->dismissed_conflicts[ $id ] = 'true';
74 return update_option( 'optml_dismissed_conflicts', $this->dismissed_conflicts );
75 }
76
77 /**
78 * Get the conflict list.
79 *
80 * @since 2.0.6
81 * @access public
82 * @return array
83 */
84 public function get_conflict_list() {
85 $conflict_list = [];
86 if ( empty( $this->watched_conflicts ) ) {
87 return $conflict_list;
88 }
89
90 /**
91 * An instance of Optml_Abstract_Conflict
92 *
93 * @var Optml_Abstract_Conflict $conflict
94 */
95 foreach ( $this->watched_conflicts as $conflict ) {
96 if ( $conflict->is_active( $this->dismissed_conflicts ) ) {
97 array_push( $conflict_list, $conflict->get_conflict() );
98 }
99 }
100
101 // Sort conflicts by severity and priority.
102 usort(
103 $conflict_list,
104 function ( $item1, $item2 ) {
105 if ( ! isset( $item1['severity'] ) ) {
106 return -1;
107 }
108 if ( ! isset( $item2['severity'] ) ) {
109 return -1;
110 }
111 $severity_map = [
112 'high' => 0,
113 'medium' => 1,
114 'low' => 1,
115 ];
116
117 if ( $severity_map[ $item1['severity'] ] === $severity_map[ $item2['severity'] ] ) {
118 if ( ! isset( $item1['priority'] ) ) {
119 return 0;
120 }
121 if ( ! isset( $item2['priority'] ) ) {
122 return 0;
123 }
124 if ( $item1['priority'] === $item2['priority'] ) {
125 return 0;
126 }
127 return $item1['priority'] < $item2['priority'] ? -1 : +1;
128 }
129 return $severity_map[ $item1['severity'] ] < $severity_map[ $item2['severity'] ] ? -1 : 1;
130 }
131 );
132
133 return $conflict_list;
134 }
135
136 /**
137 * Get the total count for active conflicts.
138 *
139 * @since 2.0.6
140 * @access public
141 * @return int
142 */
143 public function get_conflict_count() {
144 if ( empty( $this->watched_conflicts ) ) {
145 return 0;
146 }
147
148 $count = 0;
149 /**
150 * An instance of Optml_Abstract_Conflict
151 *
152 * @var Optml_Abstract_Conflict $conflict
153 */
154 foreach ( $this->watched_conflicts as $conflict ) {
155 if ( $conflict->is_active( $this->dismissed_conflicts ) ) {
156 ++$count;
157 }
158 }
159 return $count;
160 }
161 }
162