first commit

This commit is contained in:
2024-07-15 11:28:08 +02:00
commit f52d538ea5
21891 changed files with 6161164 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
{
"name": "wpdesk\/wp-wpdesk-tracker",
"authors": [
{
"name": "Krzysiek",
"email": "krzysiek@wpdesk.pl"
}
],
"prefer-stable": true,
"minimum-stability": "stable",
"require": {
"php": ">=5.5"
},
"require-dev": {
"phpunit\/phpunit": "<7",
"wp-coding-standards\/wpcs": "^0.14.1",
"squizlabs\/php_codesniffer": "^3.0.2",
"mockery\/mockery": "*",
"10up\/wp_mock": "*",
"wimg\/php-compatibility": "^8"
},
"autoload": {
"classmap": [
"src\/"
]
},
"autoload-dev": {
"classmap": [
"src",
"tests\/"
]
},
"scripts": {
"test": "echo composer is alive",
"phpcs": "phpcs",
"phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
"phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
"phpunit-integration": "phpunit --configuration phpunit-integration.xml --coverage-text --colors=never",
"phpunit-integration-fast": "phpunit --configuration phpunit-integration.xml --no-coverage",
"docs": "apigen generate"
}
}

View File

@@ -0,0 +1,99 @@
/* Connect */
#wpdesk_tracker_connect {
margin-top: 30px;
}
#wpdesk_tracker_connect .wpdesk-logo {
background-image: url(../images/logo.png);
background-repeat: no-repeat;
background-size: 215px 62px;
display: block;
height: 62px;
margin: 0 auto;
width: 215px;
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
#wpdesk_tracker_connect .wpdesk-logo {
background-image: url(../images/logo@2x.png);
background-size: 215px 62px;
}
}
#wpdesk_tracker_connect .message p {
font-size: 14px;
}
#wpdesk_tracker_connect .plugin-card-bottom {
border-bottom: 1px solid #ddd;
margin-bottom: 10px;
}
#wpdesk_tracker_connect .button-allow {
float: right;
}
#wpdesk_tracker_connect .permissions .trigger {
display: block;
font-size: .9em;
text-align: center;
margin-bottom: 10px;
text-decoration: none;
}
#wpdesk_tracker_connect .permissions .permissions-details {
height: 0;
overflow: hidden;
margin: 0;
}
#wpdesk_tracker_connect .permissions.open .permissions-details {
height: auto;
padding: 10px 20px;
}
#wpdesk_tracker_connect .permissions ul {
margin: 0;
}
#wpdesk_tracker_connect .permissions ul li {
margin-bottom: 12px;
}
#wpdesk_tracker_connect .permissions ul li i.dashicons {
float: left;
font-size: 40px;
width: 40px;
height: 40px;
}
#wpdesk_tracker_connect .permissions ul li div {
margin-left: 55px;
}
#wpdesk_tracker_connect .permissions ul li div span {
font-weight: bold;
}
#wpdesk_tracker_connect .permissions ul li div p {
margin: 2px 0 0 0;
}
#wpdesk_tracker_connect .terms {
font-size: .9em;
padding: 5px;
}
#wpdesk_tracker_connect .terms a {
color: #999;
}
/* Deactivate */
.wpdesk_tracker_deactivate .reason-input {
display: none;
}
.wpdesk_tracker_deactivate .reason-input input[type=text] {
margin-left: 25px;
width: 350px;
}

View File

@@ -0,0 +1 @@
#wpdesk_tracker_connect{margin-top:30px}#wpdesk_tracker_connect .wpdesk-logo{background-image:url(../images/logo.png);background-repeat:no-repeat;background-size:215px 62px;display:block;height:62px;margin:0 auto;width:215px}@media (-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){#wpdesk_tracker_connect .wpdesk-logo{background-image:url(../images/logo@2x.png);background-size:215px 62px}}#wpdesk_tracker_connect .message p{font-size:14px}#wpdesk_tracker_connect .plugin-card-bottom{border-bottom:1px solid #ddd;margin-bottom:10px}#wpdesk_tracker_connect .button-allow{float:right}#wpdesk_tracker_connect .permissions .trigger{display:block;font-size:.9em;text-align:center;margin-bottom:10px;text-decoration:none}#wpdesk_tracker_connect .permissions .permissions-details{height:0;overflow:hidden;margin:0}#wpdesk_tracker_connect .permissions.open .permissions-details{height:auto;padding:10px 20px}#wpdesk_tracker_connect .permissions ul{margin:0}#wpdesk_tracker_connect .permissions ul li{margin-bottom:12px}#wpdesk_tracker_connect .permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#wpdesk_tracker_connect .permissions ul li div{margin-left:55px}#wpdesk_tracker_connect .permissions ul li div span{font-weight:bold}#wpdesk_tracker_connect .permissions ul li div p{margin:2px 0 0 0}#wpdesk_tracker_connect .terms{font-size:.9em;padding:5px}#wpdesk_tracker_connect .terms a{color:#999}.wpdesk_tracker_deactivate .reason-input{display:none}.wpdesk_tracker_deactivate .reason-input input[type=text]{margin-left:25px;width:350px}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,75 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Factory_Prefixed')) {
/**
* Can create and build tracker instance.
*
* Class WPDesk_Tracker_Factory
*/
class WPDesk_Tracker_Factory_Prefixed
{
/**
* Builds tracker instance.
*
* @param string $basename Plugin basename.
*
* @return WPDesk_Tracker built tracker.
*/
private function build_tracker($basename)
{
$sender = new \FSVendor\WPDesk_Tracker_Sender_Wordpress_To_WPDesk();
$sender = new \FSVendor\WPDesk_Tracker_Sender_Logged($sender);
$tracker = new \FSVendor\WPDesk_Tracker($basename, $sender);
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Gateways());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Identification());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Identification_Gdpr());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Jetpack());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_License_Emails());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Orders());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Orders_Country());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Orders_Month());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Plugins());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Products());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Products_Variations());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Server());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Settings());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Shipping_Classes());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Shipping_Methods());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Templates());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Theme());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_User_Agent());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Users());
$tracker->add_data_provider(new \FSVendor\WPDesk_Tracker_Data_Provider_Wordpress());
$tracker->init_hooks();
return $tracker;
}
/**
* Creates tracker instance.
*
* @param string $basename Plugin basename.
*
* @return WPDesk_Tracker created tracker.
*/
public function create_tracker($basename)
{
$tracker = $this->build_tracker($basename);
\do_action('wpdesk_tracker_initialized', $this);
return $tracker;
}
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
interface WPDesk_Tracker_Interface
{
/**
* Setter for object that sends data.
*
* @param WPDesk_Tracker_Sender $sender Object that can send payloads.
*/
public function set_sender(\WPDesk_Tracker_Sender $sender);
/**
* Attach data provider class to tracker
*
* @param WPDesk_Tracker_Data_Provider $provider
*
* @return void
*/
public function add_data_provider(\WPDesk_Tracker_Data_Provider $provider);
}

View File

@@ -0,0 +1,451 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker')) {
class WPDesk_Tracker implements \WPDesk_Tracker_Interface
{
/**
* @var string
*/
private $script_version = '11';
/**
* @var string
*/
private $plugin_basename = '';
/**
* @var string
*/
private $message_version = '4';
/**
* @var WPDesk_Tracker_Data_Provider[]
*/
private $providers = [];
/**
* @var WPDesk_Tracker_Sender
*/
private $sender;
/**
* @deprecated do not use. This is for backward compatibility only.
*/
public static function init($foo = null)
{
}
public function __construct($plugin_basename, \WPDesk_Tracker_Sender $sender)
{
$this->plugin_basename = $plugin_basename;
$this->set_sender($sender);
}
/**
* Setter for object that sends data.
*
* @param WPDesk_Tracker_Sender $sender Object that can send payloads.
*/
public function set_sender(\WPDesk_Tracker_Sender $sender)
{
$this->sender = $sender;
}
/**
* Hook into cron event.
*/
public function init_hooks()
{
\add_action('plugins_loaded', array($this, 'load_plugin_text_domain'));
\add_action('admin_init', array($this, 'init_schedule'));
\add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 100);
\add_action('wpdesk_tracker_send_event', array($this, 'send_tracking_data'));
\add_action('admin_menu', array($this, 'admin_menu'));
\add_action('admin_init', array($this, 'admin_init'));
\add_action('admin_notices', array($this, 'admin_notices'));
\add_action('wp_ajax_wpdesk_tracker_notice_handler', array($this, 'wp_ajax_wpdesk_tracker_notice_handler'));
\add_action('wp_ajax_wpdesk_tracker_deactivation_handler', array($this, 'wp_ajax_wpdesk_tracker_deactivation_handler'));
\add_action('update_option_wpdesk_helper_options', array($this, 'update_option_wpdesk_helper_options'), 10, 3);
\add_filter('option_wpdesk_helper_options', array($this, 'option_wpdesk_helper_options'), 10, 2);
\add_filter('default_option_wpdesk_helper_options', array($this, 'default_option_wpdesk_helper_options'), 10, 3);
\add_filter('wpdesk_tracker_data', array($this, 'wpdesk_tracker_message_version'));
\add_action('admin_bar_menu', array($this, 'admin_bar_menu'), 999);
\add_action('wp_head', array($this, 'wp_head'), 999);
\add_action('admin_head', array($this, 'wp_head'), 999);
global $pagenow;
if ('plugins.php' === $pagenow) {
\add_action('admin_footer', array($this, 'admin_footer'));
}
}
public function add_data_provider(\WPDesk_Tracker_Data_Provider $provider)
{
$this->providers[] = $provider;
}
public function wp_head()
{
if (\apply_filters('wpdesk_tracker_use_testdata', \false) && \apply_filters('wpdesk_tracker_show_testdata', \false)) {
include 'views/tracker-styles.php';
}
}
/**
* @param WP_Admin_Bar $wp_admin_bar
*/
public function admin_bar_menu($wp_admin_bar)
{
if (\apply_filters('wpdesk_tracker_use_testdata', \false) && \apply_filters('wpdesk_tracker_show_testdata', \false)) {
$args = array('id' => 'my_page', 'title' => 'WP Desk Test!', 'meta' => array('class' => 'wpdesk-tracker-test'));
$wp_admin_bar->add_node($args);
}
}
public function init_schedule()
{
$options = \get_option('wpdesk_helper_options');
if (!\is_array($options)) {
$options = array();
}
if (empty($options['wpdesk_tracker_agree'])) {
$options['wpdesk_tracker_agree'] = '0';
}
$wpdesk_tracker_agree = $options['wpdesk_tracker_agree'];
$wp_next_scheduled = \wp_next_scheduled('wpdesk_tracker_send_event');
if ($wpdesk_tracker_agree == '1' && !$wp_next_scheduled) {
\wp_schedule_event(\time(), 'daily', 'wpdesk_tracker_send_event');
}
if ($wpdesk_tracker_agree == '0' && $wp_next_scheduled) {
\wp_clear_scheduled_hook('wpdesk_tracker_send_event');
}
}
public function load_plugin_text_domain()
{
$wpdesk_translation = \load_plugin_textdomain('wpdesk-tracker', \false, $this->plugin_basename . '/inc/wpdesk-tracker/lang');
}
/**
* @return bool
*/
private function should_enable_wpdesk_tracker()
{
return \apply_filters('wpdesk_tracker_enabled', \true);
}
public function admin_footer()
{
if (!\is_network_admin() && $this->should_enable_wpdesk_tracker() && !\apply_filters('wpdesk_tracker_do_not_ask', \false)) {
$plugins = array('wpdesk-helper/wpdesk-helper.php' => 'wpdesk-helper/wpdesk-helper.php');
$plugins = \apply_filters('wpdesk_track_plugin_deactivation', $plugins);
include 'views/tracker-plugins-footer.php';
}
}
public function admin_enqueue_scripts()
{
$screen = \get_current_screen();
if ($screen->id == 'admin_page_wpdesk_tracker' || $screen->id == 'admin_page_wpdesk_tracker_deactivate') {
\wp_register_style('wpdesk-helper-tracker', \plugin_dir_url(__FILE__) . 'assets/css/tracker.css', array(), $this->script_version, 'all');
\wp_enqueue_style('wpdesk-helper-tracker');
}
}
public function admin_menu()
{
\add_submenu_page(null, 'WP Desk Tracker', 'WP Desk Tracker', 'manage_options', 'wpdesk_tracker', array($this, 'wpdesk_tracker_page'));
\add_submenu_page(null, 'Deactivate plugin', 'Deactivate plugin', 'manage_options', 'wpdesk_tracker_deactivate', array($this, 'wpdesk_tracker_deactivate'));
}
public function wp_ajax_wpdesk_tracker_deactivation_handler()
{
$this->send_deactivation_data();
}
public function wp_ajax_wpdesk_tracker_notice_handler()
{
$option = \get_option('wpdesk_helper_options');
if (!$option) {
\add_option('wpdesk_helper_options', array());
}
$type = '';
if (isset($_REQUEST['type'])) {
$type = $_REQUEST['type'];
}
if ($type == 'allow') {
$options = \get_option('wpdesk_helper_options', array());
if (!\is_array($options)) {
$options = array();
}
\update_option('wpdesk_helper_options', $options);
\delete_option('wpdesk_tracker_notice');
$options['wpdesk_tracker_agree'] = '1';
\update_option('wpdesk_helper_options', $options);
}
if ($type == 'dismiss') {
$options = \get_option('wpdesk_helper_options', array());
if (!\is_array($options)) {
$options = array();
}
if (\get_option('wpdesk_tracker_notice', '0') === '2') {
\update_option('wpdesk_tracker_notice', 'dismiss_all');
$options['wpdesk_tracker_agree'] = '0';
\update_option('wpdesk_helper_options', $options);
} else {
\update_option('wpdesk_tracker_notice', '2');
}
}
}
public function update_option_wpdesk_helper_options($old_value, $value, $option)
{
if (empty($old_value)) {
$old_value = array('wpdesk_tracker_agree' => '-1');
}
if (!isset($old_value['wpdesk_tracker_agree'])) {
$old_value['wpdesk_tracker_agree'] = '-1';
}
if (empty($value)) {
$value = array('wpdesk_tracker_agree' => '-1');
}
if (!isset($value['wpdesk_tracker_agree'])) {
$value['wpdesk_tracker_agree'] = '-1';
}
if ($old_value['wpdesk_tracker_agree'] != '1') {
if ($value['wpdesk_tracker_agree'] == '1') {
$this->send_tracking_data(\true, 'agree');
}
}
if ($old_value['wpdesk_tracker_agree'] != '0') {
if ($value['wpdesk_tracker_agree'] == '0') {
$this->send_tracking_data(\true, 'no');
\update_option('wpdesk_tracker_notice', 'dismiss_all');
}
}
}
public function option_wpdesk_helper_options($value, $option)
{
if (\apply_filters('wpdesk_tracker_do_not_ask', \false)) {
if (!\is_array($value)) {
$value = array();
}
$value['wpdesk_tracker_agree'] = 1;
}
return $value;
}
public function default_option_wpdesk_helper_options($default, $option = null, $passed_default = null)
{
if (\apply_filters('wpdesk_tracker_do_not_ask', \false)) {
$default = array();
$default['wpdesk_tracker_agree'] = 1;
}
return $default;
}
public function admin_notices()
{
if (!$this->should_enable_wpdesk_tracker()) {
return;
}
$screen = \get_current_screen();
$options = \get_option('wpdesk_helper_options', array());
if (!\is_array($options)) {
$options = array();
}
if (\get_option('wpdesk_tracker_notice', '0') != 'dismiss_all') {
if (empty($options['wpdesk_tracker_agree']) || $options['wpdesk_tracker_agree'] == '0') {
if (\in_array($screen->id, \apply_filters('wpdesk_tracker_notice_screens', array()))) {
$user = \wp_get_current_user();
$username = $user->first_name ? $user->first_name : $user->user_login;
$terms_url = \get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
$shop_url = \get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/' : 'https://www.wpdesk.net/';
include 'views/tracker-notice.php';
}
}
}
if ($screen->id == 'plugins') {
if (isset($_GET['wpdesk_tracker_opt_out'])) {
$options = \get_option('wpdesk_helper_options', array());
if (!\is_array($options)) {
$options = array();
}
\delete_option('wpdesk_tracker_notice');
$options['wpdesk_tracker_agree'] = '0';
\update_option('wpdesk_helper_options', $options);
include 'views/tracker-opt-out-notice.php';
}
}
}
public function wpdesk_tracker_page()
{
$user = \wp_get_current_user();
$username = $user->first_name ? $user->first_name : $user->user_login;
$allow_url = \admin_url('admin.php?page=wpdesk_tracker');
$allow_url = \add_query_arg('plugin', $_GET['plugin'], $allow_url);
$skip_url = $allow_url;
$allow_url = \add_query_arg('allow', '1', $allow_url);
$skip_url = \add_query_arg('allow', '0', $skip_url);
$terms_url = \get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
include 'views/tracker-connect.php';
}
public function wpdesk_tracker_deactivate()
{
$user = \wp_get_current_user();
$username = $user->first_name;
$plugin = $_GET['plugin'];
$active_plugins = \get_plugins();
$plugin_name = $active_plugins[$plugin]['Name'];
include 'views/tracker-deactivate.php';
}
public function admin_init()
{
if (isset($_GET['page']) && $_GET['page'] == 'wpdesk_tracker') {
if (isset($_GET['plugin']) && isset($_GET['allow'])) {
$options = \get_option('wpdesk_helper_options', array());
if (!\is_array($options)) {
$options = array();
}
if ($_GET['allow'] == '0') {
\remove_action('update_option_wpdesk_helper_options', array($this, 'update_option_wpdesk_helper_options'), 10, 3);
unset($options['wpdesk_tracker_agree']);
\update_option('wpdesk_helper_options', $options);
\add_action('update_option_wpdesk_helper_options', array($this, 'update_option_wpdesk_helper_options'), 10, 3);
$options['wpdesk_tracker_agree'] = '0';
\update_option('wpdesk_helper_options', $options);
\update_option('wpdesk_tracker_notice', '1');
} else {
\remove_action('update_option_wpdesk_helper_options', array($this, 'update_option_wpdesk_helper_options'), 10, 3);
unset($options['wpdesk_tracker_agree']);
\update_option('wpdesk_helper_options', $options);
\add_action('update_option_wpdesk_helper_options', array($this, 'update_option_wpdesk_helper_options'), 10, 3);
\delete_option('wpdesk_tracker_notice');
\update_option('wpdesk_tracker_agree', '1');
$options['wpdesk_tracker_agree'] = '1';
\update_option('wpdesk_helper_options', $options);
}
\wp_redirect(\admin_url('plugins.php'));
exit;
}
}
}
public function wpdesk_tracker_message_version($data)
{
$data['message_version'] = $this->message_version;
return $data;
}
public function send_deactivation_data()
{
$params = array();
$params['click_action'] = 'plugin_deactivation';
$params['plugin'] = $_REQUEST['plugin'];
$params['plugin_name'] = $_REQUEST['plugin_name'];
$params['reason'] = $_REQUEST['reason'];
if (!empty($_REQUEST['additional_info'])) {
$params['additional_info'] = $_REQUEST['additional_info'];
}
$this->send_payload_to_wpdesk(\apply_filters('wpdesk_tracker_deactivation_data', $params));
}
/**
* Decide whether to send tracking data or not.
*
* @param boolean $override
*/
public function send_tracking_data($override = \false, $click_action = null)
{
$options = \get_option('wpdesk_helper_options', array());
if (empty($options)) {
$options = array();
}
if (empty($options['wpdesk_tracker_agree'])) {
$options['wpdesk_tracker_agree'] = '0';
}
if (empty($click_action) && $options['wpdesk_tracker_agree'] == '0') {
return;
}
if (!$this->should_enable_wpdesk_tracker()) {
return;
}
// Dont trigger this on AJAX Requests
if (\defined('DOING_AJAX') && \DOING_AJAX) {
//return;
}
if (!\apply_filters('wpdesk_tracker_send_override', $override)) {
// Send a maximum of once per week by default.
$last_send = $this->get_last_send_time();
if ($last_send && $last_send > \apply_filters('wpdesk_tracker_last_send_interval', \strtotime('-1 week'))) {
return;
}
} else {
// Make sure there is at least a 1 hour delay between override sends, we dont want duplicate calls due to double clicking links.
$last_send = $this->get_last_send_time();
if (empty($click_action) && $last_send && $last_send > \strtotime('-1 hours')) {
return;
}
}
// Update time first before sending to ensure it is set
\update_option('wpdesk_tracker_last_send', \time());
if (empty($click_action) || $click_action == 'agree') {
$params = $this->get_tracking_data();
if (isset($params['active_plugins'])) {
foreach ($params['active_plugins'] as $plugin => $plugin_data) {
$option_name = 'plugin_activation_' . $plugin;
$activation_date = \get_option($option_name, '');
if ($activation_date != '') {
$params['active_plugins'][$plugin]['activation_date'] = $activation_date;
}
}
}
if (!empty($click_action)) {
$params['click_action'] = 'agree';
}
} else {
$params = array('click_action' => 'no');
$params['url'] = \home_url();
}
$params['localhost'] = 'no';
if (!empty($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR'] == '127.0.0.1') {
$params['localhost'] = 'yes';
}
$this->send_payload_to_wpdesk($params);
}
/**
* Sends payload to WPDesk servers.
*
* @param array $payload Payload to sent.
*
* @return bool If sending was successfull.
*/
private function send_payload_to_wpdesk(array $payload)
{
try {
$this->sender->send_payload($payload);
return \true;
} catch (\FSVendor\WPDesk_Tracker_Sender_Exception_WpError $e) {
return \false;
}
}
/**
* Get the last time tracking data was sent.
* @return int|bool
*/
private function get_last_send_time()
{
return \apply_filters('wpdesk_tracker_last_send_time', \get_option('wpdesk_tracker_last_send', \false));
}
/**
* @return array
*/
private function get_data_from_providers()
{
$data = array();
if (!empty($this->providers)) {
foreach ($this->providers as $provider) {
$data = \array_merge($data, $provider->get_data());
}
}
return $data;
}
/**
* Get all the tracking data.
* @return array
*/
private function get_tracking_data()
{
$data = $this->get_data_from_providers();
return \apply_filters('wpdesk_tracker_data', $data);
}
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Gateways')) {
/**
* Class WPDesk_Tracker_Data_Provider_Gateways
*/
class WPDesk_Tracker_Data_Provider_Gateways implements \WPDesk_Tracker_Data_Provider
{
/**
* Get a list of all active payment gateways.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$active_gateways = array();
$gateways = \WC()->payment_gateways->payment_gateways();
foreach ($gateways as $id => $gateway) {
if (isset($gateway->enabled) && 'yes' === $gateway->enabled) {
$active_gateways[$id] = array('title' => $gateway->title, 'supports' => $gateway->supports);
}
}
return ['gateways' => $active_gateways];
}
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Identification_Gdpr')) {
/**
* Class WPDesk_Tracker_Data_Provider_Identification_Gdpr
*/
class WPDesk_Tracker_Data_Provider_Identification_Gdpr implements \WPDesk_Tracker_Data_Provider
{
const DATA_KEY_DOMAIN_HASH = 'domain_hash';
const DATA_KEY_UNIQUE_HASH = 'unique_hash';
const DATA_KEY_EMAIL_HASH = 'email_hash';
const WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME = 'wpdesk_tracker_unique_hash';
/**
* Hash unique for wordpress instance.
*
* @return string
*/
private function get_unique_hash()
{
$hash = \get_option(self::WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME, \false);
if (!$hash) {
$hash = \md5(\uniqid() . \NONCE_SALT);
\update_option(self::WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME, $hash);
}
return $hash;
}
/**
* Get info that allows anonymous data rollup.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$data = [];
$data[self::DATA_KEY_DOMAIN_HASH] = \md5(\home_url() . \NONCE_SALT);
$data[self::DATA_KEY_UNIQUE_HASH] = $this->get_unique_hash();
$data[self::DATA_KEY_EMAIL_HASH] = \md5(\apply_filters('wpdesk_tracker_admin_email', \get_option('admin_email')) . \NONCE_SALT);
return $data;
}
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Identification')) {
/**
* Class WPDesk_Tracker_Data_Provider_Identification
*/
class WPDesk_Tracker_Data_Provider_Identification implements \WPDesk_Tracker_Data_Provider
{
/**
* Get info that allows session identification.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$data = [];
$data['url'] = \home_url();
$data['email'] = \apply_filters('wpdesk_tracker_admin_email', \get_option('admin_email'));
return $data;
}
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Jetpack')) {
/**
* Class WPDesk_Tracker_Data_Provider_Jetpack
*/
class WPDesk_Tracker_Data_Provider_Jetpack implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about jetpack.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$data = [];
$data['jetpack_version'] = \defined('FSVendor\\JETPACK__VERSION') ? \FSVendor\JETPACK__VERSION : 'none';
$data['jetpack_connected'] = \class_exists('FSVendor\\Jetpack') && \is_callable('Jetpack::is_active') && \FSVendor\Jetpack::is_active() ? 'yes' : 'no';
$data['jetpack_is_staging'] = \class_exists('FSVendor\\Jetpack') && \is_callable('Jetpack::is_staging_site') && \FSVendor\Jetpack::is_staging_site() ? 'yes' : 'no';
$data['connect_installed'] = \class_exists('FSVendor\\WC_Connect_Loader') ? 'yes' : 'no';
$data['connect_active'] = \class_exists('FSVendor\\WC_Connect_Loader') && \wp_next_scheduled('wc_connect_fetch_service_schemas') ? 'yes' : 'no';
return $data;
}
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_License_Emails')) {
/**
* Class WPDesk_Tracker_Data_Provider_License_Emails
*/
class WPDesk_Tracker_Data_Provider_License_Emails implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about license emails from api manager.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
global $wpdesk_helper_plugins;
$license_emails_email = array();
$license_emails = array();
if (!isset($wpdesk_helper_plugins)) {
$wpdesk_helper_plugins = array();
}
foreach ($wpdesk_helper_plugins as $key => $plugin) {
if (isset($plugin['api_manager'])) {
$api_manager = $plugin['api_manager'];
if (isset($api_manager->options[$api_manager->activation_email])) {
$license_emails_email[$api_manager->options[$api_manager->activation_email]] = $api_manager->options[$api_manager->activation_email];
}
}
}
foreach ($license_emails_email as $email) {
$license_emails[] = $email;
}
$data['license_emails'] = $license_emails;
return $data;
}
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Orders_Country')) {
/**
* Class WPDesk_Tracker_Data_Provider_Orders_Country
*/
class WPDesk_Tracker_Data_Provider_Orders_Country implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about shipping coutry per order.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
global $wpdb;
$query = $wpdb->get_results("\n \tSELECT m.meta_value AS shipping_country, p.post_status AS post_status , COUNT(p.ID) AS orders\n \tFROM {$wpdb->postmeta} m, {$wpdb->posts} p\n \tWHERE p.ID = m.post_id\n \tAND m.meta_key = '_shipping_country'\n \tGROUP BY shipping_country, post_status ORDER BY orders DESC");
$data['shipping_country_per_order'] = array();
if ($query) {
foreach ($query as $row) {
if (!isset($data['shipping_country_per_order'][$row->shipping_country])) {
$data['shipping_country_per_order'][$row->shipping_country] = array();
}
$data['shipping_country_per_order'][$row->shipping_country][$row->post_status] = $row->orders;
}
}
return $data;
}
}
}

View File

@@ -0,0 +1,48 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Orders_Month')) {
/**
* Class WPDesk_Tracker_Data_Provider_Orders_Month
*/
class WPDesk_Tracker_Data_Provider_Orders_Month implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about orders per month.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
global $wpdb;
$query = $wpdb->get_results("\n \tSELECT min(post_date) min, max(post_date) max, TIMESTAMPDIFF(MONTH, min(post_date), max(post_date) )+1 months\n \tFROM {$wpdb->posts} p\n \tWHERE p.post_type = 'shop_order'\n \tAND p.post_status = 'wc-completed'\n \t");
$data['orders_per_month'] = array();
if ($query) {
foreach ($query as $row) {
$data['orders_per_month']['first'] = $row->min;
$data['orders_per_month']['last'] = $row->max;
$data['orders_per_month']['months'] = $row->months;
if ($row->months != 0) {
if (isset($data['orders']) && isset($data['orders']['wc-completed'])) {
$data['orders_per_month']['per_month'] = \floatval($data['orders']['wc-completed']) / \floatval($row->months);
}
}
}
}
return $data;
}
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Orders')) {
/**
* Class WPDesk_Tracker_Data_Provider_Orders
*/
class WPDesk_Tracker_Data_Provider_Orders implements \WPDesk_Tracker_Data_Provider
{
/**
* Get order counts based on order status.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$order_count = array();
$order_count_data = \wp_count_posts('shop_order');
foreach (\wc_get_order_statuses() as $status_slug => $status_name) {
$order_count[$status_slug] = $order_count_data->{$status_slug};
}
return ['orders' => $order_count];
}
}
}

View File

@@ -0,0 +1,77 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('WPDesk_Tracker_Data_Provider')) {
/**
* Class WPDesk_Tracker_Data_Provider_Plugins
*/
class WPDesk_Tracker_Data_Provider_Plugins implements \WPDesk_Tracker_Data_Provider
{
/**
* Get all plugins grouped into activated or not.
*
* @return array
*/
private function get_all_plugins()
{
// Ensure get_plugins function is loaded
if (!\function_exists('get_plugins')) {
include \ABSPATH . '/wp-admin/includes/plugin.php';
}
$plugins = \get_plugins();
$active_plugins_keys = \get_option('active_plugins', array());
$active_plugins = array();
foreach ($plugins as $k => $v) {
// Take care of formatting the data how we want it.
$formatted = array();
$formatted['name'] = \strip_tags($v['Name']);
if (isset($v['Version'])) {
$formatted['version'] = \strip_tags($v['Version']);
}
if (isset($v['Author'])) {
$formatted['author'] = \strip_tags($v['Author']);
}
if (isset($v['Network'])) {
$formatted['network'] = \strip_tags($v['Network']);
}
if (isset($v['PluginURI'])) {
$formatted['plugin_uri'] = \strip_tags($v['PluginURI']);
}
if (\in_array($k, $active_plugins_keys)) {
// Remove active plugins from list so we can show active and inactive separately
unset($plugins[$k]);
$active_plugins[$k] = $formatted;
} else {
$plugins[$k] = $formatted;
}
}
return array('active_plugins' => $active_plugins, 'inactive_plugins' => $plugins);
}
/**
* Provides data
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$data = [];
$all_plugins = $this->get_all_plugins();
$data['active_plugins'] = $all_plugins['active_plugins'];
$data['inactive_plugins'] = $all_plugins['inactive_plugins'];
return $data;
}
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Products_Variations')) {
/**
* Class WPDesk_Tracker_Data_Provider_Products_Variations
*/
class WPDesk_Tracker_Data_Provider_Products_Variations implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about numer of variations.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$data['number_of_variations'] = 0;
$number_of_variations = \wp_count_posts('product_variation');
$data['number_of_variations'] = $number_of_variations;
return $data;
}
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Products')) {
/**
* Class WPDesk_Tracker_Data_Provider_Products
*/
class WPDesk_Tracker_Data_Provider_Products implements \WPDesk_Tracker_Data_Provider
{
/**
* Get product totals based on product type.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$product_count = array();
$product_count_data = \wp_count_posts('product');
$product_count['total'] = $product_count_data->publish;
$product_statuses = \get_terms('product_type', array('hide_empty' => 0));
foreach ($product_statuses as $product_status) {
$product_count[$product_status->name] = $product_status->count;
}
return ['products' => $product_count];
}
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Server')) {
/**
* Class WPDesk_Tracker_Data_Provider_Server
*/
class WPDesk_Tracker_Data_Provider_Server implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about bawic server data.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$server_data = array();
if (isset($_SERVER['SERVER_SOFTWARE']) && !empty($_SERVER['SERVER_SOFTWARE'])) {
$server_data['software'] = $_SERVER['SERVER_SOFTWARE'];
}
if (\function_exists('phpversion')) {
$server_data['php_version'] = \phpversion();
}
if (\function_exists('ini_get')) {
$server_data['php_post_max_size'] = \size_format(\wc_let_to_num(\ini_get('post_max_size')));
$server_data['php_time_limt'] = \ini_get('max_execution_time');
$server_data['php_max_input_vars'] = \ini_get('max_input_vars');
$server_data['php_suhosin'] = \extension_loaded('suhosin') ? 'Yes' : 'No';
}
global $wpdb;
$server_data['mysql_version'] = $wpdb->db_version();
$server_data['php_max_upload_size'] = \size_format(\wp_max_upload_size());
$server_data['php_default_timezone'] = \date_default_timezone_get();
$server_data['php_soap'] = \class_exists('SoapClient') ? 'Yes' : 'No';
$server_data['php_fsockopen'] = \function_exists('fsockopen') ? 'Yes' : 'No';
$server_data['php_curl'] = \function_exists('curl_init') ? 'Yes' : 'No';
return ['server' => $server_data];
}
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Settings')) {
/**
* Class WPDesk_Tracker_Data_Provider_Settings
*/
class WPDesk_Tracker_Data_Provider_Settings implements \WPDesk_Tracker_Data_Provider
{
/**
* Get all options starting with woocommerce_ prefix.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
return ['settings' => array('version' => \WC()->version, 'currency' => \get_woocommerce_currency(), 'base_location' => \WC()->countries->get_base_country(), 'selling_locations' => \WC()->countries->get_allowed_countries(), 'api_enabled' => \get_option('woocommerce_api_enabled'), 'weight_unit' => \get_option('woocommerce_weight_unit'), 'dimension_unit' => \get_option('woocommerce_dimension_unit'), 'download_method' => \get_option('woocommerce_file_download_method'), 'download_require_login' => \get_option('woocommerce_downloads_require_login'), 'calc_taxes' => \get_option('woocommerce_calc_taxes'), 'coupons_enabled' => \get_option('woocommerce_enable_coupons'), 'guest_checkout' => \get_option('woocommerce_enable_guest_checkout'), 'secure_checkout' => \get_option('woocommerce_force_ssl_checkout'), 'enable_signup_and_login_from_checkout' => \get_option('woocommerce_enable_signup_and_login_from_checkout'), 'enable_myaccount_registration' => \get_option('woocommerce_enable_myaccount_registration'), 'registration_generate_username' => \get_option('woocommerce_registration_generate_username'), 'registration_generate_password' => \get_option('woocommerce_registration_generate_password'))];
}
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Shipping_Classes')) {
/**
* Class WPDesk_Tracker_Data_Provider_Shipping_Classes
*/
class WPDesk_Tracker_Data_Provider_Shipping_Classes implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about number of shipping classes
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$data['number_of_shipping_classes'] = 0;
$shipping_classes = \WC()->shipping()->get_shipping_classes();
if (\is_array($shipping_classes)) {
$data['number_of_shipping_classes'] = \count($shipping_classes);
}
return $data;
}
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones')) {
/**
* Class WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones
*/
class WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones implements \WPDesk_Tracker_Data_Provider
{
/**
* Info about shipping methods in zones and by title.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
if (\class_exists('WC_Shipping_Zones')) {
$other_zones = \WC_Shipping_Zones::get_zones();
$zones = array();
foreach ($other_zones as $zone) {
$zones[] = \WC_Shipping_Zones::get_zone_by('zone_id', $zone['zone_id']);
}
$zones[] = \WC_Shipping_Zones::get_zone_by();
$data['shipping_methods_by_title'] = array();
$data['shipping_zones_by_name'] = array();
foreach ($zones as $zone) {
if (empty($data['shipping_zones_by_name'][$zone->get_zone_name()])) {
$data['shipping_zones_by_name'][$zone->get_zone_name()] = 1;
} else {
$data['shipping_zones_by_name'][$zone->get_zone_name()]++;
}
foreach ($zone->get_shipping_methods() as $shipping_method) {
if (empty($data['shipping_methods_by_title'][$shipping_method->method_title])) {
$data['shipping_methods_by_title'][$shipping_method->method_title] = 1;
} else {
$data['shipping_methods_by_title'][$shipping_method->method_title]++;
}
}
}
}
return $data;
}
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Shipping_Methods')) {
/**
* Class WPDesk_Tracker_Data_Provider_Shipping_Methods
*/
class WPDesk_Tracker_Data_Provider_Shipping_Methods implements \WPDesk_Tracker_Data_Provider
{
/**
* Get a list of all active shipping methods.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$active_methods = array();
$shipping_methods = \WC()->shipping->get_shipping_methods();
foreach ($shipping_methods as $id => $shipping_method) {
if (isset($shipping_method->enabled) && 'yes' === $shipping_method->enabled) {
$active_methods[$id] = array('title' => $shipping_method->title, 'tax_status' => $shipping_method->tax_status);
}
}
return ['shipping_methods' => $active_methods];
}
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Templates')) {
/**
* Class WPDesk_Tracker_Data_Provider_Templates
*/
class WPDesk_Tracker_Data_Provider_Templates implements \WPDesk_Tracker_Data_Provider
{
/**
* Look for any template override and return filenames.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$override_data = array();
$template_paths = \apply_filters('woocommerce_template_overrides_scan_paths', array('WooCommerce' => \WC()->plugin_path() . '/templates/'));
$scanned_files = array();
require_once \WC()->plugin_path() . '/includes/admin/class-wc-admin-status.php';
foreach ($template_paths as $plugin_name => $template_path) {
$scanned_files[$plugin_name] = \WC_Admin_Status::scan_template_files($template_path);
}
foreach ($scanned_files as $plugin_name => $files) {
foreach ($files as $file) {
if (\file_exists(\get_stylesheet_directory() . '/' . $file)) {
$theme_file = \get_stylesheet_directory() . '/' . $file;
} elseif (\file_exists(\get_stylesheet_directory() . '/woocommerce/' . $file)) {
$theme_file = \get_stylesheet_directory() . '/woocommerce/' . $file;
} elseif (\file_exists(\get_template_directory() . '/' . $file)) {
$theme_file = \get_template_directory() . '/' . $file;
} elseif (\file_exists(\get_template_directory() . '/woocommerce/' . $file)) {
$theme_file = \get_template_directory() . '/woocommerce/' . $file;
} else {
$theme_file = \false;
}
if (\false !== $theme_file) {
$override_data[] = \basename($theme_file);
}
}
}
return ['template_overrides' => $override_data];
}
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Theme')) {
/**
* Class WPDesk_Tracker_Data_Provider_Theme
*/
class WPDesk_Tracker_Data_Provider_Theme implements \WPDesk_Tracker_Data_Provider
{
/**
* Get the current theme info, theme name and version.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$theme_data = \wp_get_theme();
$theme_child_theme = \is_child_theme() ? 'Yes' : 'No';
return ['theme' => array('name' => $theme_data->Name, 'version' => $theme_data->Version, 'child_theme' => $theme_child_theme)];
}
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_User_Agent')) {
/**
* Class WPDesk_Tracker_Data_Provider_User_Agent
*/
class WPDesk_Tracker_Data_Provider_User_Agent implements \WPDesk_Tracker_Data_Provider
{
/**
* When an admin user logs in, there user agent is tracked in user meta and collected here.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
return ['admin_user_agents' => \array_filter((array) \get_option('woocommerce_tracker_ua', array()))];
}
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Users')) {
/**
* Class WPDesk_Tracker_Data_Provider_Users
*/
class WPDesk_Tracker_Data_Provider_Users implements \WPDesk_Tracker_Data_Provider
{
/**
* Get user totals based on user role.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$user_count = array();
$user_count_data = \count_users();
$user_count['total'] = $user_count_data['total_users'];
// Get user count based on user role
foreach ($user_count_data['avail_roles'] as $role => $count) {
$user_count[$role] = $count;
}
return ['users' => $user_count];
}
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Data_Provider_Wordpress')) {
/**
* Class WPDesk_Tracker_Data_Provider_Wordpress
*/
class WPDesk_Tracker_Data_Provider_Wordpress implements \WPDesk_Tracker_Data_Provider
{
/**
* Get WordPress related data.
*
* @return array Data provided to tracker.
*/
public function get_data()
{
$wp_data = array();
$memory = \wc_let_to_num(\WP_MEMORY_LIMIT);
if (\function_exists('memory_get_usage')) {
$system_memory = \wc_let_to_num(@\ini_get('memory_limit'));
$memory = \max($memory, $system_memory);
}
$wp_data['memory_limit'] = \size_format($memory);
$wp_data['debug_mode'] = \defined('WP_DEBUG') && \WP_DEBUG ? 'Yes' : 'No';
$wp_data['locale'] = \get_locale();
$wp_data['version'] = \get_bloginfo('version');
$wp_data['multisite'] = \is_multisite() ? 'Yes' : 'No';
return ['wp' => $wp_data];
}
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace FSVendor;
/**
* WP Desk Tracker
*
* @class WPDESK_Tracker
* @version 1.3.2
* @package WPDESK/Helper
* @category Class
* @author WP Desk
*/
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('WPDesk_Tracker_Data_Provider')) {
interface WPDesk_Tracker_Data_Provider
{
/**
* Provides data
*
* @return array Data provided to tracker.
*/
public function get_data();
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Sender_Exception_WpError')) {
class WPDesk_Tracker_Sender_Exception_WpError extends \RuntimeException
{
public function __construct($message = "", \WP_Error $wp_error)
{
$message = $message . ' WP_Error: ' . $wp_error->get_error_message();
parent::__construct($message, $wp_error->get_error_code());
}
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Sender_Logged')) {
class WPDesk_Tracker_Sender_Logged implements \WPDesk_Tracker_Sender
{
const LOGGER_SOURCE = 'wpdesk-sender';
/**
* Decorated sender.
*
* @var WPDesk_Tracker_Sender
*/
private $sender;
/**
* WPDesk_Tracker_Sender_Logged constructor.
*
* @param WPDesk_Tracker_Sender $sender Sender to decorate.
*/
public function __construct(\WPDesk_Tracker_Sender $sender)
{
$this->sender = $sender;
}
/**
* Sends payload logging payload and the response.
*
* @param array $payload Payload to send.
*
* @throws WPDesk_Tracker_Sender_Exception_WpError Error if send failed.
*
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
*/
public function send_payload(array $payload)
{
if (\class_exists('FSVendor\\WPDesk_Logger_Factory')) {
\FSVendor\WPDesk_Logger_Factory::log_message("Sender payload: " . \json_encode($payload), self::LOGGER_SOURCE, \FSVendor\WPDesk_Logger::DEBUG);
try {
$response = $this->sender->send_payload($payload);
\FSVendor\WPDesk_Logger_Factory::log_message('Sender response: ' . \json_encode($response), self::LOGGER_SOURCE, \FSVendor\WPDesk_Logger::DEBUG);
return $response;
} catch (\FSVendor\WPDesk_Tracker_Sender_Exception_WpError $exception) {
\FSVendor\WPDesk_Logger_Factory::log_exception($exception);
throw $exception;
}
} else {
return $this->sender->send_payload($payload);
}
}
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('FSVendor\\WPDesk_Tracker_Sender_Wordpress_To_WPDesk')) {
class WPDesk_Tracker_Sender_Wordpress_To_WPDesk implements \WPDesk_Tracker_Sender
{
/**
* URL to the WP Desk Tracker API endpoint.
* @var string
*/
private $api_url = 'https://data.wpdesk.org/?track=1';
private $test_api_url = 'https://testdata.wpdesk.org/?track=1';
private function get_api_url()
{
$api_url = $this->api_url;
if (\apply_filters('wpdesk_tracker_use_testdata', \false)) {
$api_url = $this->test_api_url;
}
return $api_url;
}
/**
* Sends payload to predefined receiver.
*
* @param array $payload Payload to send.
*
* @throws WPDesk_Tracker_Sender_Exception_WpError Error if send failed.
*
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
*/
public function send_payload(array $payload)
{
$response = \wp_remote_post($this->get_api_url(), array('method' => 'POST', 'timeout' => 5, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => \false, 'headers' => array('user-agent' => 'WPDeskTracker'), 'body' => \json_encode($payload), 'cookies' => array()));
if ($response instanceof \WP_Error) {
throw new \FSVendor\WPDesk_Tracker_Sender_Exception_WpError('Payload send error', $response);
} else {
return $response;
}
}
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
if (!\class_exists('WPDesk_Tracker_Sender')) {
interface WPDesk_Tracker_Sender
{
/**
* Sends payload to predefined receiver.
*
* @param array $payload Payload to send.
*
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
*/
public function send_payload(array $payload);
}
}

View File

@@ -0,0 +1,100 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
?>
<div id="wpdesk_tracker_connect" class="plugin-card">
<div class="message plugin-card-top">
<span class="wpdesk-logo"></span>
<p>
<?php
\printf(\__('Hey %s,', 'wpdesk-tracker'), $username);
?><br/>
<?php
\_e('Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information anonymously. If you skip this, that\'s okay! All plugins will work just fine.', 'wpdesk-tracker');
?>
</p>
</div>
<div class="actions plugin-card-bottom">
<a id="wpdesk_tracker_allow_button" href="<?php
echo $allow_url;
?>" class="button button-primary button-allow button-large"><?php
\_e('Allow & Continue &rarr;', 'wpdesk-tracker');
?></a>
<a href="<?php
echo $skip_url;
?>" class="button button-secondary"><?php
\_e('Skip', 'wpdesk-tracker');
?></a>
<div class="clear"></div>
</div>
<div class="permissions">
<a class="trigger" href="#"><?php
\_e('What permissions are being granted?', 'wpdesk-tracker');
?></a>
<div class="permissions-details">
<ul>
<li id="permission-site" class="permission site">
<i class="dashicons dashicons-admin-settings"></i>
<div>
<span><?php
\_e('Your Site Overview', 'wpdesk-tracker');
?></span>
<p><?php
\_e('WP version, PHP info', 'wpdesk-tracker');
?></p>
</div>
</li>
<li id="permission-events" class="permission events">
<i class="dashicons dashicons-admin-plugins"></i>
<div>
<span><?php
\_e('Plugin Usage', 'wpdesk-tracker');
?></span>
<p><?php
\_e('Current settings and usage information of WP Desk plugins', 'wpdesk-tracker');
?></p>
</div>
</li>
<li id="permission-store" class="permission store">
<i class="dashicons dashicons-store"></i>
<div>
<span><?php
\_e('Your Store Overview', 'wpdesk-tracker');
?></span>
<p><?php
\_e('Anonymized and non-sensitive store usage information', 'wpdesk-tracker');
?></p>
</div>
</li>
</ul>
<div class="terms">
<a href="<?php
echo $terms_url;
?>" target="_blank"><?php
\_e('Find out more &raquo;', 'wpdesk-tracker');
?></a>
</div>
</div>
</div>
</div>
<script type="text/javascript">
jQuery('.trigger').click(function(e) {
e.preventDefault();
if (jQuery(this).parent().hasClass('open')) {
jQuery(this).parent().removeClass('open')
}
else {
jQuery(this).parent().addClass('open');
}
});
</script>
<?php

View File

@@ -0,0 +1,182 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
?>
<h2><?php
echo \sprintf(\__('You are deactivating %s plugin.', 'wpdesk-tracker'), $plugin_name);
?></h2>
<div class="wpdesk_tracker_deactivate">
<div class="body">
<div class="panel" data-panel-id="confirm"><p></p></div>
<div class="panel active" data-panel-id="reasons">
<h4><strong><?php
\_e(' If you have a moment, please let us know why you are deactivating plugin (anonymous feedback):', 'wpdesk-tracker');
?></strong></h4>
<ul id="reasons-list">
<li class="reason">
<label>
<span>
<input type="radio" name="selected-reason" value="plugin_stopped_working">
</span>
<span><?php
\_e('The plugin suddenly stopped working', 'wpdesk-tracker');
?></span>
</label>
</li>
<li class="reason">
<label>
<span>
<input type="radio" name="selected-reason" value="broke_my_site">
</span>
<span><?php
\_e('The plugin broke my site', 'wpdesk-tracker');
?></span>
</label>
</li>
<li class="reason has-input">
<label>
<span>
<input type="radio" name="selected-reason" value="found_better_plugin">
</span>
<span><?php
\_e('I found a better plugin', 'wpdesk-tracker');
?></span>
</label>
<div id="found_better_plugin" class="reason-input">
<input type="text" name="better_plugin_name" placeholder="<?php
\_e('What\'s the plugin\'s name?', 'wpdesk-tracker');
?>">
</div>
</li>
<li class="reason">
<label>
<span>
<input type="radio" name="selected-reason" value="plugin_for_short_period">
</span>
<span><?php
\_e('I only needed the plugin for a short period', 'wpdesk-tracker');
?></span>
</label>
</li>
<li class="reason">
<label>
<span>
<input type="radio" name="selected-reason" value="no_longer_need">
</span>
<span><?php
\_e('I no longer need the plugin', 'wpdesk-tracker');
?></span>
</label>
</li>
<li class="reason">
<label>
<span>
<input type="radio" name="selected-reason" value="temporary_deactivation">
</span>
<span><?php
\_e('It\'s a temporary deactivation. I\'m just debugging an issue.', 'wpdesk-tracker');
?></span>
</label>
</li>
<li class="reason has-input">
<label>
<span>
<input type="radio" name="selected-reason" value="other">
</span>
<span><?php
\_e('Other', 'wpdesk-tracker');
?></span>
</label>
<div id="other" class="reason-input">
<input type="text" name="other" placeholder="<?php
\_e('Kindly tell us the reason so we can improve', 'wpdesk-tracker');
?>">
</div>
</li>
</ul>
</div>
</div>
<div class="footer">
<a href="#" class="button button-secondary button-close"><?php
\_e('Cancel', 'wpdesk-tracker');
?></a>
<a href="#" class="button button-primary button-deactivate allow-deactivate"><?php
\_e('Skip &amp; Deactivate', 'wpdesk-tracker');
?></a>
</div>
</div>
<script type="text/javascript">
jQuery('input[type=radio]').click(function(){
var reason = jQuery('input[name=selected-reason]:checked').val();
console.log(reason);
jQuery('.reason-input').hide();
if ( reason == 'found_better_plugin' ) {
jQuery('#found_better_plugin').show();
}
if ( reason == 'other' ) {
jQuery('#other').show();
}
jQuery('.wpdesk_tracker_deactivate .button-deactivate').html( '<?php
\_e('Submit &amp; Deactivate', 'wpdesk-tracker');
?>' );
})
jQuery('.button-deactivate').click(function(e){
e.preventDefault();
console.log('deactivate');
var reason = jQuery('input[name=selected-reason]:checked').val();
var plugin = '<?php
echo $plugin;
?>';
var plugin_name = '<?php
echo $plugin_name;
?>';
var additional_info = '';
if ( reason == 'found_better_plugin' ) {
additional_info = jQuery('#found_better_plugin input').val();
}
if ( reason == 'other' ) {
additional_info = jQuery('#other input').val();
}
console.log(reason);
if ( typeof reason != 'undefined' ) {
console.log('not undefined');
jQuery('.button').attr('disabled',true);
jQuery.ajax( '<?php
echo \admin_url('admin-ajax.php');
?>',
{
type: 'POST',
data: {
action: 'wpdesk_tracker_deactivation_handler',
reason: reason,
plugin: plugin,
plugin_name: plugin_name,
additional_info: additional_info,
}
}
).always(function() {
var url = '<?php
echo \str_replace('&amp;', '&', \admin_url(\wp_nonce_url('plugins.php?action=deactivate&plugin=' . $plugin . '&plugin_status=all&', 'deactivate-plugin_' . $plugin)));
?>';
window.location.href = url;
});
}
else {
var url = '<?php
echo \str_replace('&amp;', '&', \admin_url(\wp_nonce_url('plugins.php?action=deactivate&plugin=' . $plugin . '&plugin_status=all&', 'deactivate-plugin_' . $plugin)));
?>';
window.location.href = url;
}
})
jQuery('.button-close').click(function(e){
e.preventDefault();
window.history.back();
})
</script>
<?php

View File

@@ -0,0 +1,64 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
?>
<div id="wpdesk_tracker_notice" class="updated notice wpdesk_tracker_notice is-dismissible">
<p>
<?php
\printf(\__('Hey %s,', 'wpdesk-tracker'), $username);
?><br/>
<?php
\_e('We need your help to improve <strong>WP Desk plugins</strong>, so they are more useful for you and the rest of <strong>30,000+ users</strong>. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe.', 'wpdesk-tracker');
?>
<a href="<?php
echo $terms_url;
?>" target="_blank"><?php
\_e('Find out more &raquo;', 'wpdesk-tracker');
?></a>
</p>
<p>
<button id="wpdesk_tracker_allow_button_notice" class="button button-primary"><?php
\_e('Allow', 'wpdesk-tracker');
?></button>
</p>
</div>
<script type="text/javascript">
jQuery(document).on('click', '#wpdesk_tracker_notice .notice-dismiss',function(e){
e.preventDefault();
console.log('dismiss');
jQuery.ajax( '<?php
echo \admin_url('admin-ajax.php');
?>',
{
type: 'POST',
data: {
action: 'wpdesk_tracker_notice_handler',
type: 'dismiss',
}
}
);
})
jQuery(document).on('click', '#wpdesk_tracker_allow_button_notice',function(e){
e.preventDefault();
console.log('allow');
jQuery.ajax( '<?php
echo \admin_url('admin-ajax.php');
?>',
{
type: 'POST',
data: {
action: 'wpdesk_tracker_notice_handler',
type: 'allow',
}
}
);
jQuery('#wpdesk_tracker_notice').hide();
});
</script>
<?php

View File

@@ -0,0 +1,14 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
?>
<div id="wpdesk_tracker_notice" class="updated notice wpdesk_tracker_notice">
<p><?php
\_e('You successfully opted out of collecting usage data by WP Desk. If you change your mind, you can always opt in later in the plugin\'s quick links.', 'wpdesk-tracker');
?></p>
</div>
<?php

View File

@@ -0,0 +1,30 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
?>
<script type="text/javascript">
var wpdesk_track_deactivation_plugins = <?php
echo \json_encode($plugins);
?>;
jQuery("span.deactivate a").click(function(e){
var is_tracked = false;
var data_plugin = jQuery(this).closest('tr').attr('data-plugin');
var href = jQuery(this).attr('href');
jQuery.each( wpdesk_track_deactivation_plugins, function( key, value ) {
if ( value == data_plugin ) {
is_tracked = true;
}
});
if ( is_tracked ) {
e.preventDefault();
window.location.href = '<?php
echo \admin_url('admin.php?page=wpdesk_tracker_deactivate&plugin=');
?>' + '&plugin=' + data_plugin;
}
})
</script>
<?php

View File

@@ -0,0 +1,13 @@
<?php
namespace FSVendor;
if (!\defined('ABSPATH')) {
exit;
}
?>
<style>
.wpdesk-tracker-test div {
color: yellow !important;
}
</style><?php