OwlCyberSecurity - MANAGER
Edit File: PluginFamily.php
<?php namespace WPMedia\PluginFamily\Model; /** * Handles the data to be passed to the frontend. */ class PluginFamily { /** * An array of referrers for wp rocket. * * @var array */ protected $wp_rocket_referrer = [ 'imagify' => 'imagify', 'seo-by-rank-math' => '', 'backwpup' => '', 'uk-cookie-consent' => '', ]; /** * Get filtered plugins. * * @param string $main_plugin Main plugin installed. * * @return array */ public function get_filtered_plugins( string $main_plugin ): array { $plugins = require_once 'wp_media_plugins.php'; return $this->filter_plugins_by_activation( $plugins, $main_plugin ); } /** * Filter plugins family data by activation status and returns both categorized and uncategorized format. * * @param array $plugins Array of family plugins. * @param string $main_plugin Main plugin installed. * * @return array */ public function filter_plugins_by_activation( array $plugins, string $main_plugin ): array { if ( empty( $plugins ) ) { return []; } list( $active_plugins, $inactive_plugins ) = [ [], [] ]; foreach ( $plugins as $cat => $cat_data ) { foreach ( $cat_data['plugins'] as $plugin => $data ) { $plugin_path = $plugin . '.php'; $plugin_slug = dirname( $plugin ); $main_plugin_slug = dirname( $main_plugin ); $wpr_referrer = 'wp-rocket' !== $main_plugin_slug ? $this->wp_rocket_referrer[ $main_plugin_slug ] : ''; /** * Check for activated plugins and pop them out of the array * to re-add them back using array_merge to be displayed after * plugins that are not installed or not activated. */ if ( is_plugin_active( $plugin_path ) && $main_plugin . '.php' !== $plugin_path ) { // set cta data of active plugins. $plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [ 'text' => __( 'Activated', '%domain%' ), 'url' => '#', ]; // Send active plugin to new array. $active_plugins[ $plugin ] = $plugins[ $cat ]['plugins'][ $plugin ]; // Remove active plugin from current category. $active_plugin = $plugins[ $cat ]['plugins'][ $plugin ]; unset( $plugins[ $cat ]['plugins'][ $plugin ] ); // Send active plugin to the end of array in current category. $plugins[ $cat ]['plugins'][ $plugin ] = $active_plugin; // Remove category with active plugin from current array. $active_cat = $plugins[ $cat ]; unset( $plugins[ $cat ] ); // Send category with active plugins to the end of array. $plugins[ $cat ] = $active_cat; continue; } $install_activate_url = admin_url( 'admin-post.php' ); $args = [ 'action' => 'plugin_family_install_' . $plugin_slug, '_wpnonce' => wp_create_nonce( 'plugin_family_install_' . $plugin_slug ), 'plugin_to_install' => rawurlencode( $plugin ), ]; if ( 'imagify' === $plugin_slug ) { $args = [ 'action' => 'install_imagify_from_partner_' . $main_plugin_slug, '_wpnonce' => wp_create_nonce( 'install_imagify_from_partner' ), '_wp_http_referer' => rawurlencode( $this->get_current_url() ), ]; } $install_activate_url = add_query_arg( $args, $install_activate_url ); // Set Installation link. $plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [ 'text' => __( 'Install', '%domain%' ), 'url' => $install_activate_url, ]; // Create unique CTA data for WP Rocket. if ( 'wp-rocket/wp-rocket' === $plugin ) { $url = 'https://wp-rocket.me/?utm_source=' . $wpr_referrer . '-coupon&utm_medium=plugin&utm_campaign=' . $wpr_referrer; $plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [ 'text' => __( 'Get it Now', '%domain%' ), 'url' => $url, ]; $plugins[ $cat ]['plugins'][ $plugin ]['link'] = $url; } // Set activation text. if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_path ) ) { $plugins[ $cat ]['plugins'][ $plugin ]['cta']['text'] = __( 'Activate', '%domain%' ); if ( 'wp-rocket/wp-rocket' === $plugin ) { $plugins[ $cat ]['plugins'][ $plugin ]['cta']['url'] = $install_activate_url; } } // Send inactive plugins to new array. $inactive_plugins[ $plugin ] = $plugins[ $cat ]['plugins'][ $plugin ]; } // Remove main plugin from categorized array. if ( isset( $plugins[ $cat ]['plugins'][ $main_plugin ] ) ) { unset( $plugins[ $cat ]['plugins'][ $main_plugin ] ); } } $uncategorized = array_merge( $inactive_plugins, $active_plugins ); // Remove main plugin from uncategorized array. unset( $uncategorized[ $main_plugin ] ); return [ 'categorized' => $plugins, 'uncategorized' => $uncategorized, ]; } /** * Get the current URL. * Gotten from Imagify_Partner Package. * * @return string */ protected function get_current_url(): string { if ( ! isset( $_SERVER['SERVER_PORT'], $_SERVER['HTTP_HOST'] ) ) { return ''; } $port = (int) wp_unslash( $_SERVER['SERVER_PORT'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash $port = 80 !== $port && 443 !== $port ? ( ':' . $port ) : ''; $url = ! empty( $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'] ) ? $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'] : ( ! empty( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash return 'http' . ( is_ssl() ? 's' : '' ) . '://' . $_SERVER['HTTP_HOST'] . $port . $url; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash } }