wp_back/wp-content/plugins/shortpixel-image-optimiser/class/view/shortpixel-plugin-request.php
2024-05-20 15:37:46 +03:00

226 lines
6.2 KiB
PHP

<?php
namespace ShortPixel;
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* User: simon
* Date: 11.04.2018
*/
// @todo This is used by feedback. Should be replaced a some point.
class ShortPixelPluginRequest {
/**
* Url for the request
*
* @var string
*/
private $url;
/**
* Api endpoint
*
* @var string
*/
private $data = array(
'server' => array(),
'user' => array(),
'wordpress' => array(
'deactivated_plugin' => array(),
),
);
/**
* Plugin file
*
* @var string
*/
private $plugin_file = '';
private $allow_tracking = 0;
public $request_successful = false;
function __construct( $_plugin_file, $url, $args ) {
$this->url = $url;
// Set variables
$this->allow_tracking = ($args['anonymous'] === false)? true : false;
$this->plugin_file = $_plugin_file;
$this->data['unique'] = md5( home_url() . get_bloginfo( 'admin_email' ) );
if ($args['anonymous'] == false)
$this->data['key'] = $args['key'];
$this->data['wordpress']['deactivated_plugin']['uninstall_reason'] = $args['reason'];
$this->data['wordpress']['deactivated_plugin']['uninstall_details'] = $args['details'];
// Start collecting data
$this->_collect_data();
$this->request_successful = $this->_send_request();
}
/**
* Collect all data for the request.
*
*/
private function _collect_data() {
$current_plugin = get_plugin_data( $this->plugin_file );
// Plugin data
$this->data['wordpress']['deactivated_plugin']['slug'] = $current_plugin['TextDomain'];
$this->data['wordpress']['deactivated_plugin']['name'] = $current_plugin['Name'];
$this->data['wordpress']['deactivated_plugin']['version'] = $current_plugin['Version'];
$this->data['wordpress']['deactivated_plugin']['author'] = $current_plugin['AuthorName'];
if ( $this->allow_tracking ) {
//$this->_collect_wordpress_data();
//$this->_collect_server_data();
$this->_collect_user_data();
}
}
/**
* Collect WordPress data.
*
*/
private function _collect_wordpress_data() {
$this->data['wordpress']['locale'] = ( get_bloginfo( 'version' ) >= 4.7 ) ? get_user_locale() : get_locale();
$this->data['wordpress']['wp_version'] = get_bloginfo( 'version' );
$this->data['wordpress']['multisite'] = is_multisite();
$this->data['wordpress']['themes'] = $this->get_themes();
$this->data['wordpress']['plugins'] = $this->get_plugins();
}
/**
* Collect server data.
*
*/
private function _collect_server_data() {
$this->data['server']['server'] = isset( $_SERVER['SERVER_SOFTWARE'] ) ? sanitize_text_field(wp_unslash($_SERVER['SERVER_SOFTWARE'])) : '';
$this->data['server']['php_version'] = phpversion();
$this->data['server']['url'] = esc_url(home_url());
}
/**
* Collect user data.
*
*/
private function _collect_user_data() {
$admin = get_user_by( 'email', get_bloginfo( 'admin_email' ) );
if ( ! $admin ) {
$this->data['user']['email'] = '';
$this->data['user']['first_name'] = '';
$this->data['user']['last_name'] = '';
}else{
$this->data['user']['email'] = get_bloginfo( 'admin_email' );
$this->data['user']['first_name'] = $admin->first_name;
$this->data['user']['last_name'] = $admin->last_name;
}
}
/**
* Get current themes
*
* @return array
*/
private function get_themes() {
$theme = wp_get_theme();
return array(
'installed' => $this->_get_installed_themes(),
'active' => array(
'slug' => get_stylesheet(),
'name' => $theme->get( 'Name' ),
'version' => $theme->get( 'Version' ),
'author' => $theme->get( 'Author' ),
),
);
}
/**
* Get an array of installed themes
*/
private function _get_installed_themes() {
$installed = wp_get_themes();
$theme = get_stylesheet();
$arr = array();
foreach ( $installed as $slug => $info ) {
if ( $slug === $theme ) {
continue;
}
$arr[ $slug ] = array(
'slug' => $slug,
'name' => $info->get( 'Name' ),
'version' => $info->get( 'Version' ),
'author' => $info->get( 'Author' )
);
};
return $arr;
}
/**
* Get a list of installed plugins
*/
private function get_plugins() {
if ( ! function_exists( 'get_plugins' ) ) {
include ABSPATH . '/wp-admin/includes/plugin.php';
}
$plugins = get_plugins();
$option = get_option( 'active_plugins', array() );
$active = array();
$installed = array();
foreach ( $plugins as $id => $info ) {
if ( in_array( $id, $active ) ) {
continue;
}
$id = explode( '/', $id );
$id = ucwords( str_replace( '-', ' ', $id[0] ) );
$installed[] = $id;
}
foreach ( $option as $id ) {
$id = explode( '/', $id );
$id = ucwords( str_replace( '-', ' ', $id[0] ) );
$active[] = $id;
}
return array(
'installed' => $installed,
'active' => $active,
);
}
/**
* Send dat to server.
*
*/
private function _send_request() {
$request = wp_remote_post( $this->url, array(
'method' => 'POST',
'timeout' => 20,
'redirection' => 5,
'httpversion' => '1.1',
'blocking' => true,
'body' => $this->data,
'user-agent' => 'MT/EPSILON-CUSTOMER-TRACKING/' . esc_url( home_url() )
) );
if ( is_wp_error( $request ) ) {
return false;
}
return true;
}
}