PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.11.14
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.11.14
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / vendor / codeinwp / themeisle-sdk / src / Modules / About_us.php

About_us.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.11.14, at vendor/codeinwp/themeisle-sdk/src/Modules/About_us.php

451 lines 15.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The about page model class for ThemeIsle SDK
4 *
5 * Here's how to hook it in your plugin:
6 *
7 * add_filter( <product_slug>_about_us_metadata', 'add_about_meta' );
8 *
9 * function add_about_meta($data) {
10 * return [
11 * 'location' => <top level page - e.g. themes.php>,
12 * 'logo' => <logo url>,
13 * 'page_menu' => [['text' => '', 'url' => '']], // optional
14 * 'has_upgrade_menu' => <condition>,
15 * 'upgrade_link' => <url>,
16 * 'upgrade_text' => 'Get Pro Version',
17 * 'review_link' => false, // Leave it empty for default WPorg link or false to hide it.
18 * ]
19 * }
20 *
21 * @package ThemeIsleSDK
22 * @subpackage Modules
23 * @copyright Copyright (c) 2023, Andrei Baicus
24 * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
25 * @since 3.2.42
26 */
27
28 namespace ThemeisleSDK\Modules;
29
30 use ThemeisleSDK\Common\Abstract_Module;
31 use ThemeisleSDK\Loader;
32 use ThemeisleSDK\Product;
33
34 // Exit if accessed directly.
35 if ( ! defined( 'ABSPATH' ) ) {
36 exit;
37 }
38
39 /**
40 * Promotions module for ThemeIsle SDK.
41 */
42 class About_Us extends Abstract_Module {
43 /**
44 * About data.
45 *
46 * @var array $about_data About page data, received from the filter.
47 *
48 * Shape of the $about_data property array:
49 * [
50 * 'location' => 'top level page',
51 * 'logo' => 'logo path',
52 * 'page_menu' => [['text' => '', 'url' => '']], // Optional
53 * 'has_upgrade_menu' => !defined('NEVE_PRO_VERSION'),
54 * 'upgrade_link' => 'upgrade url',
55 * 'upgrade_text' => 'Get Pro Version',
56 * ]
57 */
58 private $about_data = array();
59
60 /**
61 * Should we load this module.
62 *
63 * @param Product $product Product object.
64 *
65 * @return bool
66 */
67 public function can_load( $product ) {
68 if ( $this->is_from_partner( $product ) ) {
69 return false;
70 }
71
72 $this->about_data = apply_filters( $product->get_key() . '_about_us_metadata', array() );
73
74 return ! empty( $this->about_data );
75 }
76
77 /**
78 * Registers the hooks.
79 *
80 * @param Product $product Product to load.
81 */
82 public function load( $product ) {
83 $this->product = $product;
84
85 add_action( 'admin_menu', [ $this, 'add_submenu_pages' ] );
86 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_about_page_script' ] );
87 }
88
89 /**
90 * Adds submenu pages.
91 *
92 * @return void
93 */
94 public function add_submenu_pages() {
95 if ( ! isset( $this->about_data['location'] ) ) {
96 return;
97 }
98
99 add_submenu_page(
100 $this->about_data['location'],
101 Loader::$labels['about_us']['title'],
102 Loader::$labels['about_us']['title'],
103 'manage_options',
104 $this->get_about_page_slug(),
105 array( $this, 'render_about_us_page' ),
106 100
107 );
108
109 if ( ! isset( $this->about_data['has_upgrade_menu'] ) ) {
110 return;
111 }
112
113 if ( $this->about_data['has_upgrade_menu'] !== true ) {
114 return;
115 }
116
117 if ( ! isset( $this->about_data['upgrade_link'] ) ) {
118 return;
119 }
120
121 if ( ! isset( $this->about_data['upgrade_text'] ) ) {
122 return;
123 }
124
125 add_submenu_page(
126 $this->about_data['location'],
127 $this->about_data['upgrade_text'],
128 '<span class="tsdk-upg-menu-item">' . $this->about_data['upgrade_text'] . '</span>',
129 'manage_options',
130 $this->about_data['upgrade_link'],
131 '',
132 101
133 );
134 add_action(
135 'admin_footer',
136 function () {
137 ?>
138 <style>
139 .tsdk-upg-menu-item {
140 color: #009528;
141 }
142
143 .tsdk-upg-menu-item:hover {
144 color: #008a20;
145 }
146 </style>
147 <script type="text/javascript">
148 jQuery(document).ready(function ($) {
149 $('.tsdk-upg-menu-item').parent().attr('target', '_blank');
150 });
151 </script>
152 <?php
153 }
154 );
155 }
156
157 /**
158 * Render page content.
159 *
160 * @return void
161 */
162 public function render_about_us_page() {
163 echo '<div id="ti-sdk-about"></div>';
164 }
165
166 /**
167 * Enqueue scripts & styles.
168 *
169 * @return void
170 */
171 public function enqueue_about_page_script() {
172 $current_screen = get_current_screen();
173
174 if ( ! isset( $current_screen->id ) ) {
175 return;
176 }
177
178 if ( strpos( $current_screen->id, $this->get_about_page_slug() ) === false ) {
179 return;
180 }
181 global $themeisle_sdk_max_path;
182 $handle = 'ti-sdk-about-' . $this->product->get_key();
183 $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/about/about.asset.php';
184 $deps = array_merge( $asset_file['dependencies'], [ 'updates' ] );
185
186 do_action( 'themeisle_internal_page', $this->product->get_slug(), 'about_us' );
187
188 wp_register_script( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.js', $deps, $asset_file['version'], true );
189 wp_localize_script( $handle, 'tiSDKAboutData', $this->get_about_localization_data() );
190
191 wp_enqueue_script( $handle );
192 wp_enqueue_style( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.css', [ 'wp-components' ], $asset_file['version'] );
193 }
194
195 /**
196 * Get localized data.
197 *
198 * @return array
199 */
200 private function get_about_localization_data() {
201 $links = isset( $this->about_data['page_menu'] ) ? $this->about_data['page_menu'] : [];
202 $product_pages = isset( $this->about_data['product_pages'] ) ? $this->about_data['product_pages'] : [];
203
204 return [
205 'links' => $links,
206 'logoUrl' => $this->about_data['logo'],
207 'productPages' => $this->get_product_pages_data( $product_pages ),
208 'products' => $this->get_other_products_data(),
209 'homeUrl' => esc_url( home_url() ),
210 'pageSlug' => $this->get_about_page_slug(),
211 'currentProduct' => [
212 'slug' => $this->product->get_key(),
213 'name' => $this->product->get_name(),
214 ],
215 'teamImage' => $this->get_sdk_uri() . 'assets/images/team.jpg',
216 'strings' => [
217 'aboutUs' => Loader::$labels['about_us']['title'],
218 'heroHeader' => Loader::$labels['about_us']['heroHeader'],
219 'heroTextFirst' => Loader::$labels['about_us']['heroTextFirst'],
220 'heroTextSecond' => Loader::$labels['about_us']['heroTextSecond'],
221 'teamImageCaption' => Loader::$labels['about_us']['teamImageCaption'],
222 'newsHeading' => Loader::$labels['about_us']['newsHeading'],
223 'emailPlaceholder' => Loader::$labels['about_us']['emailPlaceholder'],
224 'signMeUp' => Loader::$labels['about_us']['signMeUp'],
225 'installNow' => Loader::$labels['about_us']['installNow'],
226 'activate' => Loader::$labels['about_us']['activate'],
227 'learnMore' => Loader::$labels['about_us']['learnMore'],
228 'installed' => Loader::$labels['about_us']['installed'],
229 'notInstalled' => Loader::$labels['about_us']['notInstalled'],
230 'active' => Loader::$labels['about_us']['active'],
231 ],
232 'canInstallPlugins' => current_user_can( 'install_plugins' ),
233 'canActivatePlugins' => current_user_can( 'activate_plugins' ),
234 'showReviewLink' => ! ( isset( $this->about_data['review_link'] ) && false === $this->about_data['review_link'] ),
235 ];
236 }
237
238 /**
239 * Get product pages data.
240 *
241 * @param array $product_pages Product pages.
242 *
243 * @return array
244 */
245 private function get_product_pages_data( $product_pages ) {
246
247 $otter_slug = 'otter-blocks';
248 $otter_plugin = [
249 'status' => 'not-installed',
250 ];
251 $otter_plugin['status'] = $this->is_plugin_installed( $otter_slug ) ? 'installed' : 'not-installed';
252 $otter_plugin['status'] = $this->is_plugin_active( $otter_slug ) ? 'active' : $otter_plugin['status'];
253 $otter_plugin['activationLink'] = $this->get_plugin_activation_link( $otter_slug );
254
255 $pages = [
256 'otter-page' => [
257 'name' => 'Otter Blocks',
258 'hash' => '#otter-page',
259 'product' => $otter_slug,
260 'plugin' => $otter_plugin,
261 'strings' => [
262 'heading' => Loader::$labels['about_us']['otter-page']['heading'],
263 'text' => Loader::$labels['about_us']['otter-page']['text'],
264 'buttons' => [
265 'install_otter_free' => Loader::$labels['about_us']['otter-page']['buttons']['install_otter_free'],
266 'install_now' => Loader::$labels['about_us']['otter-page']['buttons']['install_now'],
267 'learn_more' => Loader::$labels['about_us']['otter-page']['buttons']['learn_more'],
268 'learn_more_link' => tsdk_utmify( 'https://themeisle.com/plugins/otter-blocks/', 'otter-page', 'about-us' ),
269 ],
270 'features' => [
271 'advancedTitle' => Loader::$labels['about_us']['otter-page']['features']['advancedTitle'],
272 'advancedDesc' => Loader::$labels['about_us']['otter-page']['features']['advancedDesc'],
273 'fastTitle' => Loader::$labels['about_us']['otter-page']['features']['fastTitle'],
274 'fastDesc' => Loader::$labels['about_us']['otter-page']['features']['fastDesc'],
275 'mobileTitle' => Loader::$labels['about_us']['otter-page']['features']['mobileTitle'],
276 'mobileDesc' => Loader::$labels['about_us']['otter-page']['features']['mobileDesc'],
277 ],
278 'details' => [
279 's1Title' => Loader::$labels['about_us']['otter-page']['details']['s1Title'],
280 's1Text' => Loader::$labels['about_us']['otter-page']['details']['s1Text'],
281 's2Title' => Loader::$labels['about_us']['otter-page']['details']['s2Title'],
282 's2Text' => Loader::$labels['about_us']['otter-page']['details']['s2Text'],
283 's3Title' => Loader::$labels['about_us']['otter-page']['details']['s3Title'],
284 's3Text' => Loader::$labels['about_us']['otter-page']['details']['s3Text'],
285 's1Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-builder.png',
286 's2Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-patterns.png',
287 's3Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-library.png',
288 ],
289 'testimonials' => [
290 'heading' => Loader::$labels['about_us']['otter-page']['testimonials']['heading'],
291 'users' => [
292 [
293 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2021/05/avatar-03.png',
294 'name' => 'Michael Burry',
295 'text' => Loader::$labels['about_us']['otter-page']['testimonials']['users']['user_1'],
296 ],
297 [
298 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-04.png',
299 'name' => 'Maria Gonzales',
300 'text' => Loader::$labels['about_us']['otter-page']['testimonials']['users']['user_2'],
301 ],
302 [
303 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-05.png',
304 'name' => 'Florian Henckel',
305 'text' => Loader::$labels['about_us']['otter-page']['testimonials']['users']['user_3'],
306 ],
307 ],
308 ],
309 ],
310 ],
311 ];
312
313 return array_filter(
314 $pages,
315 function ( $page_data, $page_key ) use ( $product_pages ) {
316 return in_array( $page_key, $product_pages, true ) &&
317 isset( $page_data['plugin']['status'] ) &&
318 $page_data['plugin']['status'] === 'not-installed';
319 },
320 ARRAY_FILTER_USE_BOTH
321 );
322 }
323
324 /**
325 * Get products data.
326 *
327 * @return array
328 */
329 private function get_other_products_data() {
330 $products = [
331 'optimole-wp' => [
332 'name' => 'Optimole',
333 'description' => Loader::$labels['about_us']['others']['optimole_desc'],
334 ],
335 'neve' => [
336 'skip_api' => true,
337 'name' => 'Neve',
338 'description' => Loader::$labels['about_us']['others']['neve_desc'],
339 'icon' => $this->get_sdk_uri() . 'assets/images/neve.png',
340 ],
341 'learning-management-system' => [
342 'name' => 'Masteriyo LMS',
343 ],
344 'otter-blocks' => [
345 'name' => 'Otter',
346 ],
347 'tweet-old-post' => [
348 'name' => 'Revive Social',
349 ],
350 'feedzy-rss-feeds' => [
351 'name' => 'Feedzy',
352 ],
353 'woocommerce-product-addon' => [
354 'name' => 'PPOM',
355 'condition' => class_exists( 'WooCommerce', false ),
356 ],
357 'visualizer' => [
358 'name' => 'Visualizer',
359 ],
360 'wp-landing-kit' => [
361 'skip_api' => true,
362 'premiumUrl' => tsdk_utmify( 'https://themeisle.com/plugins/wp-landing-kit', $this->get_about_page_slug() ),
363 'name' => 'WP Landing Kit',
364 'description' => Loader::$labels['about_us']['others']['landingkit_desc'],
365 'icon' => $this->get_sdk_uri() . 'assets/images/wplk.png',
366 ],
367 'multiple-pages-generator-by-porthas' => [
368 'name' => 'MPG',
369 ],
370 'sparks-for-woocommerce' => [
371 'skip_api' => true,
372 'premiumUrl' => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce', $this->get_about_page_slug() ),
373 'name' => 'Sparks',
374 'description' => Loader::$labels['about_us']['others']['sparks_desc'],
375 'icon' => $this->get_sdk_uri() . 'assets/images/sparks.png',
376 'condition' => class_exists( 'WooCommerce', false ),
377 ],
378 'templates-patterns-collection' => [
379 'name' => 'Templates Cloud',
380 'description' => Loader::$labels['about_us']['others']['tpc_desc'],
381 ],
382 'wp-cloudflare-page-cache' => [
383 'name' => 'Super Page Cache',
384 ],
385 'hyve-lite' => [
386 'name' => 'Hyve Lite',
387 ],
388 'wp-full-stripe-free' => [
389 'name' => 'WP Full Pay',
390 ],
391 ];
392
393 foreach ( $products as $slug => $product ) {
394 if ( isset( $product['condition'] ) && ! $product['condition'] ) {
395 unset( $products[ $slug ] );
396 continue;
397 }
398
399 if ( $slug === 'neve' ) {
400 $theme = get_template();
401 $themes = wp_get_themes();
402
403 $products[ $slug ]['status'] = isset( $themes['neve'] ) ? 'installed' : 'not-installed';
404 $products[ $slug ]['status'] = $theme === 'neve' ? 'active' : $products[ $slug ]['status'];
405
406 $products[ $slug ]['activationLink'] = add_query_arg(
407 [
408 'stylesheet' => 'neve',
409 'action' => 'activate',
410 '_wpnonce' => wp_create_nonce( 'switch-theme_neve' ),
411 ],
412 admin_url( 'themes.php' )
413 );
414
415 continue;
416 }
417
418 $products[ $slug ]['status'] = $this->is_plugin_installed( $slug ) ? 'installed' : 'not-installed';
419 $products[ $slug ]['status'] = $this->is_plugin_active( $slug ) ? 'active' : $products[ $slug ]['status'];
420 $products[ $slug ]['activationLink'] = $this->get_plugin_activation_link( $slug );
421
422
423 if ( isset( $product['skip_api'] ) ) {
424 continue;
425 }
426
427 $api_data = $this->call_plugin_api( $slug );
428 if ( ! isset( $product['icon'] ) && ( isset( $api_data->icons['2x'] ) || $api_data->icons['1x'] ) ) {
429 $products[ $slug ]['icon'] = isset( $api_data->icons['2x'] ) ? $api_data->icons['2x'] : $api_data->icons['1x'];
430 }
431 if ( ! isset( $product['description'] ) && isset( $api_data->short_description ) ) {
432 $products[ $slug ]['description'] = $api_data->short_description;
433 }
434 if ( ! isset( $product['name'] ) && isset( $api_data->name ) ) {
435 $products[ $slug ]['name'] = $api_data->name;
436 }
437 }
438
439 return $products;
440 }
441
442 /**
443 * Get the page slug.
444 *
445 * @return string
446 */
447 private function get_about_page_slug() {
448 return 'ti-about-' . $this->product->get_key();
449 }
450 }
451