38217-vm/wp-content/plugins/mainwp-child/class/class-mainwp-child-wp-seopress.php
2026-02-05 17:08:59 +03:00

269 lines
9.1 KiB
PHP

<?php
/**
* MainWP WP SEOPress
*
* MainWP WP SEOPress Extension handler.
*
* @link https://mainwp.com/extension/wp-seopress/
*
* @package MainWP\Child
*
* Credits
*
* Plugin-Name: SEOPress
* Plugin URI: https://seopress.org?utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpseopressplugin
* Author: SEOPress
* Author URI: https://seopress.com/
* Licence: GPL v3
*/
namespace MainWP\Child;
// phpcs:disable PSR1.Classes.ClassDeclaration, WordPress.WP.AlternativeFunctions -- Required to achieve desired results. Pull requests appreciated.
/**
* Class MainWP_Child_WP_Seopress
*
* MainWP WP Seopress Extension handler.
*/
class MainWP_Child_WP_Seopress {
/**
* Public static variable to hold the single instance of the class.
*
* @var mixed Default null
*/
public static $instance = null;
/**
* Method instance()
*
* Create a public static instance.
*
* @return mixed Class instance.
*/
public static function instance() {
if ( null === static::$instance ) {
static::$instance = new self();
}
return static::$instance;
}
/**
* Fire off certain SEOPRESS plugin actions.
*
* @uses MainWP_Helper::write() Write response data to be sent to the MainWP Dashboard.
*/
public function action() {
if ( ! in_array( 'wp-seopress/seopress.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true ) ) {
$information['error'] = 'NO_SEOPRESS';
MainWP_Helper::write( $information );
}
$mwp_action = MainWP_System::instance()->validate_params( 'action' );
if ( ! empty( $mwp_action ) && method_exists( $this, $mwp_action ) ) {
$information = $this->{$mwp_action}();
MainWP_Helper::write( $information );
}
}
/**
* Check if Pro Version is active
*
* @return boolean
*/
protected function is_seopress_pro_version_active() {
return in_array( 'wp-seopress-pro/seopress-pro.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true );
}
/**
* Import the SEOPRESS plugin settings.
*
* @uses MainWP_Helper::write() Write response data to be sent to the MainWP Dashboard.
*
* @used-by MainWP_Child_WP_Seopress::action() Fire off certain SEOPRESS plugin actions.
*
* @throws MainWP_Exception Error message.
*/
public function export_settings() {
if ( ! function_exists( 'seopress_return_settings' ) ) {
$information['error'] = esc_html__( 'Settings could not be exported. Missing function `seopress_return_settings`', 'mainwp-child' );
return $information;
}
$settings = seopress_return_settings();
$information['settings'] = $settings;
$information['message'] = esc_html__( 'Export completed', 'mainwp-child' );
return $information;
}
/**
* Import the SEOPRESS plugin settings.
*
* @used-by MainWP_Child_WP_Seopress::action() Fire off certain SEOPRESS plugin actions.
*/
public function import_settings() {
// phpcs:disable WordPress.Security.NonceVerification
if ( isset( $_POST['settings'] ) ) {
if ( ! function_exists( 'seopress_do_import_settings' ) ) {
$information['error'] = esc_html__( 'Settings could not be imported. Missing function `seopress_do_import_settings`', 'mainwp-child' );
return $information;
}
$settings = json_decode( stripslashes( wp_unslash( $_POST['settings'] ) ), true ); //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
seopress_do_import_settings( $settings );
$information['message'] = esc_html__( 'Import completed', 'mainwp-child' );
return $information;
}
// phpcs:enable
}
/**
* Sync settings
*
* @return array
*/
public function sync_settings() { // phpcs:ignore -- NOSONAR - multi return.
if ( ! function_exists( 'seopress_mainwp_save_settings' ) ) {
$information['error'] = esc_html__( 'Settings could not be saved. Missing function `seopress_mainwp_save_settings`', 'mainwp-child' );
return $information;
}
// phpcs:disable WordPress.Security.NonceVerification
if ( isset( $_POST['settings'] ) ) {
$settings = wp_unslash( $_POST['settings'] ) ?? array(); //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$option = isset( $_POST['option'] ) ? sanitize_text_field( wp_unslash( $_POST['option'] ) ) : '';
// phpcs:enable
if ( empty( $option ) ) {
$information['error'] = esc_html__( 'Settings could not be saved. Missing option name.', 'mainwp-child' );
return $information;
}
if ( 'seopress_pro_option_name' === $option && ! $this->is_seopress_pro_version_active() ) {
$information['error'] = esc_html__( 'SEOPress Pro plugin is not active on child site.', 'mainwp-child' );
return $information;
}
if ( ! empty( $settings ) ) {
$settings = $this->sanitize_options( $settings );
}
seopress_mainwp_save_settings( $settings, $option );
$information['message'] = esc_html__( 'Save successful', 'mainwp-child' );
return $information;
}
}
/**
* Save pro licence
*
* @used-by MainWP_Child_WP_Seopress::action() Fire off certain SEOPRESS plugin actions.
*
* @return array
*/
public function save_pro_licence() {
if ( ! $this->is_seopress_pro_version_active() ) {
$information['error'] = esc_html__( 'SEOPress Pro plugin is not active on child site.', 'mainwp-child' );
return $information;
}
if ( ! function_exists( 'seopress_save_pro_licence' ) ) {
$information['error'] = esc_html__( 'Settings could not be saved. Missing function `seopress_save_pro_licence`', 'mainwp-child' );
return $information;
}
// phpcs:disable WordPress.Security.NonceVerification
$licence = isset( $_POST['licence'] ) ? wp_unslash( $_POST['licence'] ) : array(); //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
// phpcs:enable
$licence = $this->sanitize_options( $licence );
$response = seopress_save_pro_licence( $licence );
if ( ! is_wp_error( $response ) ) {
$information['message'] = esc_html__( 'Save successful', 'mainwp-child' );
} else {
$information['error'] = $response->get_error_message();
}
return $information;
}
/**
* Reset pro licence
*
* @used-by MainWP_Child_WP_Seopress::action() Fire off certain SEOPRESS plugin actions.
*
* @return array
*/
public function reset_pro_licence() {
if ( ! $this->is_seopress_pro_version_active() ) {
$information['error'] = esc_html__( 'SEOPress Pro plugin is not active on child site.', 'mainwp-child' );
return $information;
}
if ( ! function_exists( 'seopress_reset_pro_licence' ) ) {
$information['error'] = esc_html__( 'Licence could not be reset. Missing function `seopress_reset_pro_licence`', 'mainwp-child' );
return $information;
}
seopress_reset_pro_licence( $licence );
$information['message'] = esc_html__( 'Reset successful', 'mainwp-child' );
return $information;
}
/**
* Flush rewrite rules
*
* @used-by MainWP_Child_WP_Seopress::action() Fire off certain SEOPRESS plugin actions.
*
* @return array
*/
public function flush_rewrite_rules() {
if ( ! function_exists( 'seopress_flush_rewrite_rules' ) ) {
$information['error'] = esc_html__( 'Action could not be executed. Missing function `seopress_flush_rewrite_rules`', 'mainwp-child' );
return $information;
}
seopress_flush_rewrite_rules();
$information['message'] = esc_html__( 'Save successful', 'mainwp-child' );
return $information;
}
/**
* Sanitize the fields before saving
*
* @param mixed<string|array> $option The option to be sanitized.
*
* @return array
*/
private function sanitize_options( $option ) {
if ( is_array( $option ) ) {
foreach ( $option as $field => $value ) {
if ( is_numeric( $value ) ) {
$option[ $field ] = $value;
} elseif ( is_array( $value ) ) {
$option[ $field ] = $this->sanitize_options( $value );
} elseif ( 'seopress_robots_file' === $field || 'seopress_instant_indexing_google_api_key' === $field ) {
$option[ $field ] = wp_kses_post( wp_unslash( $value ) );
} else {
$option[ $field ] = wp_unslash( $value );
}
}
}
return $option;
}
}