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;
 | |
| 
 | |
|     }
 | |
| }
 |