PluginProbe ʕ •ᴥ•ʔ
Hostinger Reach – AI-Powered Email Marketing for WordPress / 1.7.1
Hostinger Reach – AI-Powered Email Marketing for WordPress v1.7.1
1.7.2 1.7.1 1.7.0 1.6.0 1.5.9 1.5.8 1.5.7 1.5.6 1.5.5 1.5.4 1.5.3 1.5.2 1.5.1 1.5.0 1.4.12 1.4.11 1.4.10 1.4.9 1.4.8 1.4.7 trunk 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6
hostinger-reach / vendor / hostinger / hostinger-wp-menu-manager / src / Manager.php
hostinger-reach / vendor / hostinger / hostinger-wp-menu-manager / src Last commit date
templates 1 year ago Assets.php 1 month ago Manager.php 1 year ago Menus.php 1 month ago
Manager.php
272 lines
1 <?php
2
3 namespace Hostinger\WpMenuManager;
4
5 class Manager
6 {
7 /**
8 * @var Manager instance.
9 */
10 private static ?Manager $instance = null;
11
12 /**
13 * @var array
14 */
15 private array $objects = [];
16
17 /**
18 * @var array
19 */
20 public array $old_plugins = [
21 [
22 'name' => 'Hostinger',
23 'slug' => 'hostinger',
24 'version' => '3.0.0',
25 ],
26 [
27 'name' => 'Hostinger Affiliate Plugin',
28 'slug' => 'hostinger-affiliate-plugin',
29 'version' => '2.0.0',
30 ],
31 [
32 'name' => 'Hostinger AI Assistant',
33 'slug' => 'hostinger-ai-assistant',
34 'version' => '2.0.0',
35 ]
36 ];
37
38 /**
39 * @var array
40 */
41 public array $outdated_plugins = [];
42
43 /**
44 * @var array
45 */
46 public array $affected_plugins = [
47 'hostinger' => 'Hostinger Tools',
48 'hostinger-affiliate-plugin' => 'Hostinger Affiliate Connector',
49 'hostinger-ai-assistant' => 'Hostinger AI',
50 'hostinger-easy-onboarding' => 'Hostinger Easy Onboarding',
51 ];
52
53 /**
54 * Allow only one instance of class
55 *
56 * @return self
57 */
58 public static function getInstance(): self
59 {
60 if (null === self::$instance) {
61 self::$instance = new self();
62 }
63
64 return self::$instance;
65 }
66
67 /**
68 * @return array|string[]
69 */
70 public function getOutdatedPlugins(): array
71 {
72 return $this->outdated_plugins;
73 }
74
75 /**
76 * @return array
77 */
78 public function getAffectedActivePlugins(): array
79 {
80 include_once(ABSPATH . 'wp-admin/includes/plugin.php');
81
82 $plugins = [];
83
84 if (empty($this->getAffectedPlugins())) {
85 return [];
86 }
87
88 foreach ($this->getAffectedPlugins() as $plugin_slug => $plugin_name) {
89 if (\is_plugin_active($plugin_slug . DIRECTORY_SEPARATOR . $plugin_slug . '.php')) {
90 $plugins[$plugin_slug] = $plugin_name;
91 }
92 }
93
94 return $plugins;
95 }
96
97 /**
98 * @return array|string[]
99 */
100 public function getAffectedPlugins(): array
101 {
102 return $this->affected_plugins;
103 }
104
105 /**
106 * @return void
107 */
108 public function boot(): bool
109 {
110 // Locale.
111 $this->loadTextDomain();
112
113 // Modules.
114 $this->registerModules();
115
116 return true;
117 }
118
119 /**
120 * @return void
121 */
122 public function registerModules(): void
123 {
124 // Assets.
125 $this->objects['assets'] = new Assets();
126
127 // Menus.
128 $this->objects['menus'] = new Menus();
129
130 $this->addContainer();
131
132 // Init after container is added.
133 $this->objects['assets']->init();
134 $this->objects['menus']->init();
135 }
136
137 /**
138 * @return bool
139 */
140 public function addContainer(): bool
141 {
142 if (empty($this->objects)) {
143 return false;
144 }
145
146 foreach ($this->objects as $object) {
147 if (property_exists($object, 'manager')) {
148 $object->setManager($this);
149 }
150 }
151
152 return true;
153 }
154
155 /**
156 * @return string
157 */
158 public function getPluginInfo(): string
159 {
160 $plugin_url = '';
161
162 $plugins = get_plugins();
163 foreach ($plugins as $plugin_path => $plugin_info) {
164 if (str_contains(__FILE__, 'plugins/' . dirname($plugin_path) . '/')) {
165 $plugin_dir = dirname($plugin_path);
166
167 return plugins_url($plugin_dir);
168 }
169 }
170
171 return $plugin_url;
172 }
173
174 /**
175 * @return void
176 */
177 public function loadTextDomain(): void
178 {
179 load_plugin_textdomain(
180 'hostinger-wp-menu-package',
181 false,
182 dirname(dirname(plugin_basename(__FILE__))) . '/languages/'
183 );
184 }
185
186 /**
187 * @return bool
188 */
189 public function checkCompatibility(): bool
190 {
191 $outdated_plugins = false;
192
193 if (empty($this->old_plugins)) {
194 return false;
195 }
196
197 foreach ($this->old_plugins as $plugin_data) {
198 if ($this->checkOutdatedPluginVersion($plugin_data['slug'], $plugin_data['version'])) {
199 $outdated_plugins = true;
200 $this->outdated_plugins[$plugin_data['slug']] = $plugin_data['name'];
201 }
202 }
203
204 return $outdated_plugins;
205 }
206
207 /**
208 * If main hostinger plugin is outdated
209 *
210 * @return false
211 */
212 public function maybeDoCompatibilityRedirect(): bool
213 {
214 include_once(ABSPATH . 'wp-admin/includes/plugin.php');
215
216 $plugin_name = 'hostinger';
217 $current_uri = !empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
218
219 $plugin = current(array_filter($this->old_plugins, fn($p) => $p['slug'] === $plugin_name));
220
221 $hostinger_admin_url = parse_url(admin_url('admin.php?page=hostinger'), PHP_URL_PATH) . '?page=hostinger';
222
223 if (str_contains($current_uri, $hostinger_admin_url)) {
224 if (!$this->checkOutdatedPluginVersion($plugin['slug'], $plugin['version'])) {
225 wp_redirect(get_admin_url());
226 die();
227 }
228 }
229
230 return true;
231 }
232
233 /**
234 * @param $plugin_name
235 *
236 * @return string
237 */
238 private function getPluginVersion($plugin_name): string
239 {
240 $version = get_file_data(WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $plugin_name . DIRECTORY_SEPARATOR . $plugin_name . '.php', array('Version'), 'plugin');
241
242 if (empty($version[0])) {
243 return '';
244 }
245
246 return $version[0];
247 }
248
249 /**
250 * @param $plugin_name
251 * @param $compare_version
252 *
253 * @return bool
254 */
255 private function checkOutdatedPluginVersion($plugin_name, $compare_version): bool
256 {
257 include_once(ABSPATH . 'wp-admin/includes/plugin.php');
258
259 if (!\is_plugin_active($plugin_name . DIRECTORY_SEPARATOR . $plugin_name . '.php')) {
260 return false;
261 }
262
263 $version = $this->getPluginVersion($plugin_name);
264
265 if (empty($version)) {
266 return false;
267 }
268
269 return version_compare($version, $compare_version, '<');
270 }
271 }
272