226 lines
6.2 KiB
PHP
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;
|
|
|
|
}
|
|
}
|