XylotrechusZ
XylotrechusZ Shell
: /home/mjbynoyq/wazirandsons.pk/wp-content/plugins/copy-delete-posts/modules/review/ [ drwxr-xr-x ]
<?php
/**
* File for our cool review ask in the header
*
* @category Child Plugin
* @version v0.1.0
* @since v0.1.0
* @author iClyde <[email protected]>
*/
// Namespace
namespace Inisev\Subs;
// Disallow direct access
if (defined('ABSPATH')) {
/**
* Main class for handling the Review
*/
if (!class_exists('Inisev\Subs\Inisev_Review')) {
class Inisev_Review {
/**
* Local variables
*/
private $root; // __ROOT__ of plugin's root
private $file; // __FILE__ of plugin's root
private $slug; // Plugin's slug
private $name; // Name displayed in banner
private $days; // Days displayed in banner
private $minutes; // Minutes displayed in banner
private $debug = false; // If true it will display minutes
private $minimum_time = (30 * 24 * 60 * 60); // Minimum time required to display (in seconds)
// private $minimum_time = (3 * 60); // Minimum time required to display (in seconds)
private $remind_time = '+14 days'; // Time when banner will be reminded
private $time_between = '+2 days'; // Time when new banner can be displayed
/**
* Local URLs
*/
private $root_url; // Root URL for plugin's dir
private $assets_url; // Root URL for review assets
private $review_url; // Review URL
private $plugin_menu_url; // Plugin's settings menu
public $option_name = '_irb_h_bn_review'; // Option name for this module
public $using_since; // Check since user uses this plugin
/**
* __construct:
* Compile some variables for "future use"
* Such as slug of current plugin, root dir of plugin
*
* @param string $root_file __FILE__ of plugin's main file
* @param string $root_dir __DIR__ of plugin's main file
* @param string $individual_slug Individual slug - mostly plugin's slug
* @param string $display_name The name that will be displayed in the banner
* @param string $review_url The URL that will be served as review one
* @param string $plugin_menu_url Plugin menu slug example.com/wp-admin/admin.php?page=<this slug here>
* @return Inisev_Review The review object
*/
function __construct($root_file, $root_dir, $individual_slug, $display_name, $review_url, $plugin_menu_url) {
$this->file = $root_file;
$this->root = $root_dir;
$this->slug = $individual_slug;
$this->name = $display_name;
$this->review_url = $review_url;
$this->plugin_menu_url = admin_url('admin.php?page=' . $plugin_menu_url);
$this->root_url = plugin_dir_url($this->file);
$this->assets_url = $this->root_url . 'modules/review/assets/';
$option_name = $this->option_name;
$empty = ['users' => []];
$empty[$individual_slug] = time();
$data = get_option($option_name, false);
if ($data != false && isset($data) && is_array($data)) {
if (!array_key_exists($individual_slug, $data)) {
$data[$individual_slug] = time();
update_option($option_name, $data);
}
$this->using_since = $data;
} else {
if ($individual_slug == 'copy-delete-posts' && get_option('_cdp_review', false) != false) {
if (isset(get_option('_cdp_review', false)['installed'])) {
$empty[$individual_slug] = get_option('_cdp_review', false)['installed'];
}
}
update_option($option_name, $empty);
$this->using_since = $empty;
}
// Add handler for Ajax request
if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
// Check if slug is defined
if (isset($_POST['slug']) && !empty($_POST['slug'])) {
// Handle the request
add_action('wp_ajax_inisev_review', [&$this, 'handle_review_action']);
}
// Stop for POST
return;
}
add_action('wp_loaded', [&$this, 'init_review']);
}
/**
* __asset - Loads assets
*
* @param string $file path relative
* @return string file URL
*/
private function __asset($file) {
return $this->assets_url . $file;
}
/**
* __dir_asset - Loads assets
*
* @param string $file path relative
* @return string absolute path
*/
private function __dir_asset($file) {
return __DIR__ . '/assets' . '/' . $file;
}
/**
* _asset - Loads assets and automatically echo
*
* @param string $file path relative
* @echo string file URL
*/
private function _asset($file) {
echo $this->assets_url . $file;
}
/**
* _dir_asset - Loads assets and automatically echo
*
* @param string $file path relative
* @echo string absolute path
*/
private function _dir_asset($file) {
echo __DIR__ . '/assets' . '/' . $file;
}
/**
* can_be_displayed - check if the banner should be displayed
*
* @return bool true if banner can be displayed
*/
private function can_be_displayed() {
global $pagenow;
if ($pagenow == 'post.php' || $pagenow == 'profile.php') {
return false;
}
$uid = get_current_user_id();
if (!defined('IRB_H_CHECK_LOADED') && function_exists('get_current_user_id') && isset($uid) && intval($uid) > 0) {
$since = intval($this->using_since[$this->slug]);
$diff = time() - $since;
if ($diff > $this->minimum_time) {
$seconds = $diff;
$minutes = intval($diff / 60);
$hours = intval($minutes / 60);
$days = intval($hours / 24);
$this->days = $days;
$this->minutes = $minutes;
$data = $this->using_since;
if (isset($data['users']) && isset($data['users'][$uid])) {
if (isset($data['users'][$uid]['delay_between'])) {
if (time() <= intval($data['users'][$uid]['delay_between'])) {
return false;
}
}
if (isset($data['users'][$uid][$this->slug])) {
if (isset($data['users'][$uid][$this->slug]['remind'])) {
if (time() <= intval($data['users'][$uid][$this->slug]['remind'])) {
return false;
}
}
if (isset($data['users'][$uid][$this->slug]['dismiss'])) {
if ($data['users'][$uid][$this->slug]['dismiss'] == true || $data['users'][$uid][$this->slug]['dismiss'] == 'true') {
return false;
}
}
}
}
define('IRB_H_CHECK_LOADED', true);
return true;
} else return false;
} else return false;
}
/**
* add_assets - adds required assests by the banner
*
* @return void
*/
public function add_assets() {
if (!defined('IRB_H_ASSETS_LOADED')) {
define('IRB_H_ASSETS_LOADED', true);
wp_enqueue_script('inisev-review-script', $this->__asset('js/script.js'), [], filemtime($this->__dir_asset('js/script.js')), true);
wp_enqueue_style('inisev-review-style', $this->__asset('css/style.css'), [], filemtime($this->__dir_asset('css/style.css')));
wp_localize_script('inisev-review-script', 'inisev_review_dismiss', [
'nonce' => wp_create_nonce('inisev_review_dismiss'),
], true);
}
}
/**
* display_review - loads the HTML and prints it in the header only once
*
* @return void
*/
public function display_review() {
if (!defined('IRB_H_HTML_LOADED')) {
define('IRB_H_HTML_LOADED', true);
include_once __DIR__ . '/views/banner.php';
}
}
/**
* handle_review_action - Handles all POST actions
*
* @param string $_POST['token'] - must be === 'irbh'
* @param string $_POST['slug'] - the unique slug
* @param string $_POST['mode'] - the unique action remind/dismiss
*
* @return json returns it to browser
*/
public function handle_review_action() {
if (check_ajax_referer('inisev_review_dismiss', 'nonce', false) === false) {
return wp_send_json_error();
}
$slug = sanitize_text_field($_POST['slug']);
$mode = sanitize_text_field($_POST['mode']);
if (!empty($_POST['slug']) && isset($mode) && in_array($mode, ['dismiss', 'remind'])) {
$option_name = $this->option_name;
$data = get_option($option_name, false);
if ($data != false) {
$uid = get_current_user_id();
if (!array_key_exists('users', $data)) $data['users'] = [];
if (!array_key_exists($uid, $data['users'])) $data['users'][$uid] = [];
if (!array_key_exists($slug, $data['users'][$uid])) $data['users'][$uid][$slug] = [];
$data['users'][$uid]['delay_between'] = strtotime($this->time_between);
if ($mode == 'remind') {
$data['users'][$uid][$slug]['remind'] = strtotime($this->remind_time);
}
if ($mode == 'dismiss') {
$data['users'][$uid][$slug]['dismiss'] = true;
}
update_option($option_name, $data);
wp_send_json_success();
} else wp_send_json_error();
} else wp_send_json_error();
}
/**
* init_review - initialization when the user is authenticated already
*
* @return void
*/
public function init_review() {
if ($this->can_be_displayed()) {
add_action('admin_enqueue_scripts', [&$this, 'add_assets']);
add_action('admin_notices', [&$this, 'display_review']);
}
}
}
}
}