%PDF- %PDF-
Direktori : /home/langpiergz/www/wp-content/plugins/wp-statistics/includes/ |
Current File : /home/langpiergz/www/wp-content/plugins/wp-statistics/includes/class-wp-statistics-helper.php |
<?php namespace WP_STATISTICS; use Exception; use WP_STATISTICS; use WP_Statistics_Mail; class Helper { protected static $admin_notices = []; /** * WP Statistics WordPress Log * * @param $function * @param $message * @param $version */ public static function doing_it_wrong($function, $message, $version = '') { if (empty($version)) { $version = WP_STATISTICS_VERSION; } $message .= ' Backtrace: ' . wp_debug_backtrace_summary(); if (is_ajax()) { do_action('doing_it_wrong_run', $function, $message, $version); error_log("{$function} was called incorrectly. {$message}. This message was added in version {$version}."); } else { _doing_it_wrong($function, $message, $version); } } /** * Returns an array of site id's * * @return array */ public static function get_wp_sites_list() { $site_list = array(); $sites = get_sites(); foreach ($sites as $site) { $site_list[] = $site->blog_id; } return $site_list; } /** * What type of request is this? * * @param string $type admin, ajax, cron or frontend. * @return bool */ public static function is_request($type) { switch ($type) { case 'admin': return is_admin(); case 'ajax': return defined('DOING_AJAX'); case 'cron': return defined('DOING_CRON'); case 'wp-cli': return defined('WP_CLI') && WP_CLI; case 'frontend': return (!is_admin() || defined('DOING_AJAX')) && !defined('DOING_CRON') && !self::is_rest_request(); } } /** * Returns true if the request is a non-legacy REST API request. * * @return bool */ public static function is_rest_request() { if (empty($_SERVER['REQUEST_URI'])) { return false; } $rest_prefix = trailingslashit(rest_get_url_prefix()); return (false !== strpos($_SERVER['REQUEST_URI'], $rest_prefix)) or isset($_REQUEST['rest_route']); } /** * Check is Login Page * * @return bool */ public static function is_login_page() { // Check From global WordPress if (isset($GLOBALS['pagenow']) and in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'))) { return true; } if (defined('WP_CLI') && WP_CLI) { return false; } // Backward compatibility if (empty($_SERVER['SERVER_PROTOCOL']) or empty($_SERVER['HTTP_HOST'])) { return false; } // Check Native php $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'https') === false ? 'http' : 'https'; $host = sanitize_text_field(wp_unslash($_SERVER['HTTP_HOST'])); $script = sanitize_text_field(wp_unslash($_SERVER['SCRIPT_NAME'])); $currentURL = $protocol . '://' . $host . $script; $loginURL = wp_login_url(); if ($currentURL == $loginURL) { return true; } return false; } /** * Show Admin WordPress UI Notice * * @param $text * @param string $model * @param bool $close_button * @param bool $id * @param bool $echo * @param string $style_extra * @return string */ public static function wp_admin_notice($text, $model = "info", $close_button = true, $id = false, $echo = true, $style_extra = 'padding:6px 0') { $text = ' <div class="notice notice-' . $model . '' . ($close_button === true ? " is-dismissible" : "") . '"' . ($id != false ? ' id="' . $id . '"' : '') . '> <div style="' . $style_extra . '">' . $text . '</div> </div> '; if ($echo) { echo wp_kses_post($text); } else { return $text; } } /** * Get Screen ID * * @return string */ public static function get_screen_id() { $screen = get_current_screen(); $screen_id = $screen ? $screen->id : ''; return $screen_id; } /** * Get File Path Of Plugins File * * @param $path * @return string */ public static function get_file_path($path) { return wp_normalize_path(path_join(WP_STATISTICS_DIR, $path)); } /** * Check User is Used Cache Plugin * * @return array */ public static function is_active_cache_plugin() { $use = array('status' => false, 'plugin' => ''); /* WordPress core */ if (defined('WP_CACHE') && WP_CACHE) { $use = array('status' => true, 'plugin' => 'core'); } /* WP Rocket */ if (function_exists('get_rocket_cdn_url')) { $use = array('status' => true, 'plugin' => 'WP Rocket'); } /* WP Super Cache */ if (function_exists('wpsc_init')) { $use = array('status' => true, 'plugin' => 'WP Super Cache'); } /* Comet Cache */ if (function_exists('___wp_php_rv_initialize')) { $use = array('status' => true, 'plugin' => 'Comet Cache'); } /* WP Fastest Cache */ if (class_exists('WpFastestCache')) { $use = array('status' => true, 'plugin' => 'WP Fastest Cache'); } /* Cache Enabler */ if (defined('CE_MIN_WP')) { $use = array('status' => true, 'plugin' => 'Cache Enabler'); } /* W3 Total Cache */ if (defined('W3TC')) { $use = array('status' => true, 'plugin' => 'W3 Total Cache'); } return apply_filters('wp_statistics_cache_status', $use); } /** * Get WordPress Uploads DIR * * @param string $path * @return mixed * @default For WP Statistics Plugin is 'wp-statistics' dir */ public static function get_uploads_dir($path = '') { $upload_dir = wp_upload_dir(); return path_join($upload_dir['basedir'], $path); } /** * Get Robots List * * @param string $type * @return array|bool|string */ public static function get_robots_list($type = 'list') { global $WP_Statistics; # Set Default $list = array(); # Load From global if (isset($WP_Statistics->robots_list)) { $list = $WP_Statistics->robots_list; } # Load From file include WP_STATISTICS_DIR . "includes/defines/robots-list.php"; if (isset($wps_robots_list_array)) { $list = $wps_robots_list_array; } return ($type == "array" ? $list : implode("\n", $list)); } /** * Get URL Query Parameters List * * @param string $type * @return array|bool|string */ public static function get_query_params_allow_list($type = 'array') { # Set Default $list = []; if (Option::get('query_params_allow_list') !== false) { # Load from options $list = array_map('trim', explode("\n", Option::get('query_params_allow_list'))); } else { # Load the default options $list = self::get_default_query_params_allow_list(); } return ($type == "array" ? $list : implode("\n", $list)); } /** * Get the default URL Query Parameters List * @param string $type * @return array|string */ public static function get_default_query_params_allow_list($type = 'array') { include WP_STATISTICS_DIR . "includes/defines/query-params-allow-list.php"; $list = isset($wps_query_params_allow_list_array) ? $wps_query_params_allow_list_array : []; return ($type == "array" ? $list : implode("\n", $list)); } /** * Get Number Days From install this plugin * this method used for `ALL` Option in Time Range Pages */ public static function get_date_install_plugin() { global $wpdb; //Create Empty default Option $first_day = ''; //First Check Visitor Table , if not exist Web check Pages Table $list_tbl = array( 'visitor' => array('order_by' => 'ID', 'column' => 'last_counter'), 'pages' => array('order_by' => 'page_id', 'column' => 'date'), ); foreach ($list_tbl as $tbl => $val) { $first_day = $wpdb->get_var("SELECT `" . $val['column'] . "` FROM `" . WP_STATISTICS\DB::table($tbl) . "` ORDER BY `" . $val['order_by'] . "` ASC LIMIT 1"); if (!empty($first_day)) { break; } } //Calculate hit day if range is exist if (empty($first_day)) { return false; } else { return $first_day; } } /** * Check User Is Using Gutenberg Editor */ public static function is_gutenberg() { $current_screen = get_current_screen(); return ((method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor()) || (function_exists('is_gutenberg_page')) && is_gutenberg_page()); } /** * Get List WordPress Post Type * * @return array */ public static function get_list_post_type() { // Get default post types which are public (exclude media post type) $post_types = get_post_types(array('public' => true, '_builtin' => true), 'names', 'and'); $post_types = array_diff($post_types, ['attachment']); // Get custom post types which are public $custom_post_types = get_post_types(array('public' => true, '_builtin' => false), 'names', 'and'); foreach ($custom_post_types as $name) { $post_types[] = $name; } return $post_types; } public static function get_updated_list_post_type() { return array_map(function ($postType) { return in_array($postType, ['post', 'page', 'product', 'attachment']) ? $postType : 'post_type_' . $postType; }, self::get_list_post_type()); } /** * Check Url Scheme * * @param $url * @param array $accept * @return bool */ public static function check_url_scheme($url, $accept = array('http', 'https')) { $scheme = @parse_url($url, PHP_URL_SCHEME); return in_array($scheme, $accept); } /** * Get WordPress Version * * @return mixed|string */ public static function get_wordpress_version() { return get_bloginfo('version'); } /** * Convert Json To Array * * @param $json * @return bool|mixed */ public static function json_to_array($json) { // Sanitize Slash Data $data = wp_unslash($json); // Check Validate Json Data if (!empty($data) && is_string($data) && is_array(json_decode($data, true)) && json_last_error() == 0) { return json_decode($data, true); } return false; } /** * Standard Json Encode * * @param $array * @return false|string */ public static function standard_json_encode($array) { //Fixed entity decode Html foreach ((array)$array as $key => $value) { if (!is_scalar($value)) { continue; } $array[$key] = html_entity_decode((string)$value, ENT_QUOTES, 'UTF-8'); } return json_encode($array, JSON_UNESCAPED_SLASHES); } /** * Show Site Icon by Url * * @param $url * @param int $size * @param string $style * @return bool|string */ public static function show_site_icon($url, $size = 16, $style = '') { $url = preg_replace('/^https?:\/\//', '', $url); if ($url != "") { $img_url = "https://www.google.com/s2/favicons?domain=" . $url; return '<img src="' . $img_url . '" width="' . $size . '" height="' . $size . '" style="' . ($style == "" ? 'vertical-align: -3px;' : '') . '" />'; } return false; } /** * Get Domain name from url * e.g : https://wp-statistics.com/add-ons/ -> wp-statistics.com * * @param $url * @return mixed */ public static function get_domain_name($url) { //Remove protocol $url = preg_replace("(^https?://)", "", trim($url)); //remove w(3) $url = preg_replace('#^(http(s)?://)?w{3}\.#', '$1', $url); //remove all Query $url = explode("/", $url); return $url[0]; } /** * Get Site title By Url * * @param $url string e.g : wp-statistics.com * @return bool|string */ public static function get_site_title_by_url($url) { //Get Body Page $html = Helper::get_html_page($url); if ($html === false) { return false; } //Get Page Title if (class_exists('DOMDocument')) { $dom = new \DOMDocument; @$dom->loadHTML($html); $title = ''; if (isset($dom) and $dom->getElementsByTagName('title')->length > 0) { $title = $dom->getElementsByTagName('title')->item('0')->nodeValue; } return (wp_strip_all_tags($title) == "" ? false : wp_strip_all_tags($title)); } return false; } /** * Get Html Body Page By Url * * @param $url string e.g : wp-statistics.com * @return bool */ public static function get_html_page($url) { //sanitize Url $parse_url = wp_parse_url($url); $urls[] = esc_url_raw($url); //Check Protocol Url if (!array_key_exists('scheme', $parse_url)) { $urls = array(); $url_parse = wp_parse_url($url); foreach (array('http://', 'https://') as $scheme) { $urls[] = preg_replace('/([^:])(\/{2,})/', '$1/', $scheme . path_join((isset($url_parse['host']) ? $url_parse['host'] : ''), (isset($url_parse['path']) ? $url_parse['path'] : ''))); } } //Send Request for Get Page Html foreach ($urls as $page) { $response = wp_remote_get($page, array( 'timeout' => 30, 'user-agent' => "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36" )); if (is_wp_error($response)) { continue; } $data = wp_remote_retrieve_body($response); if (is_wp_error($data)) { continue; } return (wp_strip_all_tags($data) == "" ? false : $data); } return false; } /** * Generate Random String * * @param $num * @return string */ public static function random_string($num = 50) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $num; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } /** * Get Post List From custom Post Type * * @param array $args * @area utility * @return mixed */ public static function get_post_list($args = array()) { //Prepare Arg $defaults = array( 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => '-1', 'order' => 'ASC', 'fields' => 'ids' ); $args = wp_parse_args($args, $defaults); //Get Post List $query = new \WP_Query($args); $list = array(); foreach ($query->posts as $ID) { $list[$ID] = esc_html(get_the_title($ID)); } return $list; } /** * Check WordPress Post is Published * * @param $ID * @return bool */ public static function IsPostPublished($ID) { return get_post_status($ID) == 'public'; } /** * Generate RGBA colors * * @param $num * @param string $opacity * @param bool $quote * @return string */ public static function GenerateRgbaColor($num, $opacity = '1', $quote = true) { $hash = md5('color' . $num); $rgba = "rgba(%s, %s, %s, %s)"; $format = ($quote === true ? "'$rgba'" : $rgba); return sprintf($format, hexdec(substr($hash, 0, 2)), hexdec(substr($hash, 2, 2)), hexdec(substr($hash, 4, 2)), $opacity ); } /** * Remove Query String From Url * * @param $url * @return bool|string */ public static function RemoveQueryStringUrl($url) { return substr($url, 0, strrpos($url, "?")); } /** * * Filter certain query string in the URL based on Query Params Allowed List * @param string $url * @param array $allowedParams * @return string */ public static function FilterQueryStringUrl($url, $allowedParams) { // Get query from the URL $urlQuery = strpos($url, '?'); // Check if the URL has query strings if ($urlQuery !== false) { // Parse query strings passed via the URL parse_str(substr($url, $urlQuery + 1), $parsedQuery); // Loop through query params and unset ones not allowed foreach ($parsedQuery as $key => $value) { if (!in_array($key, $allowedParams)) { unset($parsedQuery[$key]); } } // Rebuild URL with allowed params $urlPath = substr($url, 0, $urlQuery); if (!empty($parsedQuery)) { $filteredQuery = http_build_query($parsedQuery); $url = $urlPath . '?' . $filteredQuery; } else { $url = $urlPath; } } return $url; } /** * Sort associative array * * @param $array * @param $subfield * @param int $type * @return void * @see https://stackoverflow.com/questions/1597736/how-to-sort-an-array-of-associative-arrays-by-value-of-a-given-key-in-php */ public static function SortByKeyValue(&$array, $subfield, $type = SORT_DESC) { $sort_array = array(); foreach ($array as $key => $row) { $sort_array[$key] = $row[$subfield]; } array_multisort($sort_array, $type, $array); } /** * Format array for the datepicker * * @param $array_to_strip * @return array */ public static function strip_array_indices($array_to_strip) { $NewArray = array(); foreach ($array_to_strip as $objArrayItem) { $NewArray[] = $objArrayItem; } return ($NewArray); } /** * Set All Option For DatePicker * * @example add_filter( 'wp_statistics_days_ago_request', array( '', 'set_all_option_datepicker' ) ); */ public static function set_all_option_datepicker() { $first_day = Helper::get_date_install_plugin(); return ($first_day === false ? 30 : (int)TimeZone::getNumberDayBetween($first_day)); } /** * Url Decode * * @param $value * @return string */ public static function getUrlDecode($value) { return utf8_decode(urldecode($value)); } /** * Check is Assoc Array * * @param array $arr * @return bool */ public static function isAssoc(array $arr) { if (array() === $arr) { return false; } return array_keys($arr) !== range(0, count($arr) - 1); } /** * Create Condition SQL * * @param array $args * @return string */ public static function getConditionSQL($args = array()) { // Create Empty SQL $sql = ''; // Check Number Params if (self::isAssoc($args)) { $condition[] = $args; } else { $condition = $args; } // Add WHERE if (count($condition) > 0) { $sql .= ' WHERE '; } // Push To SQL $i = 0; foreach ($condition as $params) { if ($i > 0) { $sql .= ' AND '; } if ($params['compare'] == "BETWEEN") { $sql .= $params['key'] . " " . $params['compare'] . " " . (is_numeric($params['from']) ? $params['from'] : "'" . $params['from'] . "'") . " AND " . (is_numeric($params['to']) ? $params['to'] : "'" . $params['to'] . "'"); } else { $sql .= $params['key'] . " " . $params['compare'] . " " . (is_numeric($params['value']) ? $params['value'] : "'" . $params['value'] . "'"); } $i++; } return $sql; } /** * Send Email * * @param $to * @param $subject * @param $content * @param bool $email_template * @param array $args * @return bool */ public static function send_mail($to, $subject, $content, $email_template = true, $args = array()) { // Email Template if ($email_template) { $email_template = wp_normalize_path(WP_STATISTICS_DIR . 'includes/admin/templates/emails/layout.php'); } // Email from $from_name = get_bloginfo('name'); $from_email = get_bloginfo('admin_email'); $from = sprintf('%s <%s>', $from_name, $from_email); //Template Arg $template_arg = array( 'title' => $subject, 'logo' => '', 'content' => $content, 'site_url' => home_url(), 'site_title' => get_bloginfo('name'), 'footer_text' => '', 'email_title' => apply_filters('wp_statistics_email_title', __('Email from', 'wp-statistics') . ' ' . parse_url(get_site_url())['host']), 'logo_image' => apply_filters('wp_statistics_email_logo', WP_STATISTICS_URL . 'assets/images/logo-statistics-header-blue.png'), 'logo_url' => apply_filters('wp_statistics_email_logo_url', get_bloginfo('url')), 'copyright' => apply_filters('wp_statistics_email_footer_copyright', Admin_Template::get_template('emails/copyright', array(), true)), 'email_header' => apply_filters('wp_statistics_email_header', ""), 'email_footer' => apply_filters('wp_statistics_email_footer', ""), 'is_rtl' => (is_rtl() ? true : false) ); $arg = wp_parse_args($args, $template_arg); /** * Send Email */ try { WP_Statistics_Mail::init() ->setFrom($from) ->setTo($to) ->setSubject($subject) ->setBody($content) ->setTemplate($email_template, $arg) ->send(); return true; } catch (Exception $e) { \WP_Statistics::log($e->getMessage()); return false; } } /** * Send SMS With WP SMS Plugin * * @param $to * @param $text * @return bool */ public static function send_sms($to, $text) { if (function_exists('wp_sms_send')) { $run = wp_sms_send($to, $text); return (is_wp_error($run) ? false : true); } return false; } /** * Get List Taxonomy * * @param bool $hide_empty * @return array */ public static function get_list_taxonomy($hide_empty = false) { $taxonomies = array('category' => __("Category", "wp-statistics"), "post_tag" => __("Tags", "wp-statistics")); $get_tax = get_taxonomies(array('public' => true, '_builtin' => false), 'objects', 'and'); foreach ($get_tax as $object) { $object = get_object_vars($object); if ($hide_empty === true) { $count_term_in_tax = wp_count_terms($object['name'], array('hide_empty' => false, 'parent' => 0)); if ($count_term_in_tax > 0 and isset($object['rewrite']['slug'])) { $taxonomies[$object['name']] = $object['labels']->name; } } else { if (isset($object['rewrite']['slug'])) { $taxonomies[$object['name']] = $object['labels']->name; } } } return $taxonomies; } /** * Create Condition Where Time in MySql * * @param string $field : date column name in database table * @param string $time : Time return * @param array $range : an array contain two Date e.g : array('start' => 'xx-xx-xx', 'end' => 'xx-xx-xx', 'is_day' => true, 'current_date' => true) * * ---- Time Range ----- * today * yesterday * week * month * year * total * “-x” (i.e., “-10” for the past 10 days) * ---------------------- * * @return string|bool */ public static function mysql_time_conditions($field = 'date', $time = 'total', $range = array()) { global $WP_Statistics; //Get Current Date From WP $current_date = TimeZone::getCurrentDate('Y-m-d'); //Create Field Sql $field_sql = function ($time) use ($current_date, $field, $WP_Statistics, $range) { $is_current = array_key_exists('current_date', $range); $getCurrentDate = TimeZone::getCurrentDate('Y-m-d', (int)$time); return "`$field` " . ($is_current === true ? '=' : 'BETWEEN') . " '{$getCurrentDate}'" . ($is_current === false ? " AND '{$current_date}'" : ""); }; //Check Time switch ($time) { case 'today': $where = "`$field` = '{$current_date}'"; break; case 'yesterday': $getCurrentDate = TimeZone::getTimeAgo(1, 'Y-m-d'); $where = "`$field` = '{$getCurrentDate}'"; break; case 'last-week': $fromDate = TimeZone::getTimeAgo(14, 'Y-m-d'); $toDate = TimeZone::getTimeAgo(7, 'Y-m-d'); $where = "`$field` BETWEEN '{$fromDate}' AND '{$toDate}'"; break; case 'week': $where = $field_sql(-7); break; case 'month': $where = $field_sql(-30); break; case '60days': $where = $field_sql(-60); break; case '90days': $where = $field_sql(-90); break; case 'year': $where = $field_sql(-365); break; case 'this-year': $fromDate = TimeZone::getLocalDate('Y-m-d', strtotime(date('Y-01-01'))); $toDate = TimeZone::getCurrentDate('Y-m-d'); $where = "`$field` BETWEEN '{$fromDate}' AND '{$toDate}'"; break; case 'last-year': $fromDate = TimeZone::getTimeAgo((365 * 2), 'Y-m-d'); $toDate = TimeZone::getTimeAgo(365, 'Y-m-d'); $where = "`$field` BETWEEN '{$fromDate}' AND '{$toDate}'"; break; case 'total': $where = ""; break; default: if (array_key_exists('is_day', $range)) { //Check a day if (TimeZone::isValidDate($time)) { $where = "`$field` = '{$time}'"; } else { $getCurrentDate = TimeZone::getCurrentDate('Y-m-d', $time); $where = "`$field` = '{$getCurrentDate}'"; } } elseif (array_key_exists('start', $range) and array_key_exists('end', $range)) { //Check Between Two Time $getCurrentDate = TimeZone::getCurrentDate('Y-m-d', '-0', strtotime($range['start'])); $getCurrentEndDate = TimeZone::getCurrentDate('Y-m-d', '-0', strtotime($range['end'])); $where = "`$field` BETWEEN '{$getCurrentDate}' AND '{$getCurrentEndDate}'"; } else { //Check From a Date To Now $where = $field_sql($time); } } return $where; } /** * Easy U-sort Array * * @param $a * @param $b * @return bool */ public static function compare_uri_hits($a, $b) { return $a[1] < $b[1]; } /** * Return Number Posts in WordPress * * @return int */ public static function getCountPosts() { $count_posts = wp_count_posts('post'); $ret = 0; if (is_object($count_posts)) { $ret = $count_posts->publish; } return $ret; } /** * Get Count Pages WordPress * * @return int */ public static function getCountPages() { $count_pages = wp_count_posts('page'); $ret = 0; if (is_object($count_pages)) { $ret = $count_pages->publish; } return $ret; } /** * Get All WordPress Count * * @return mixed */ public static function getCountComment() { global $wpdb; $countcomms = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->comments} WHERE comment_approved = '1'"); return $countcomms; } /** * Get Count Comment Spam * * @return mixed */ public static function getCountSpam() { return number_format_i18n(get_option('akismet_spam_count')); } /** * Get Count All WordPress Users * * @return mixed */ public static function getCountUsers() { $result = count_users(); return $result['total_users']; } /** * Return the last date a post was published on your site. * * @return string */ public static function getLastPostDate() { global $wpdb; $db_date = $wpdb->get_var("SELECT post_date FROM {$wpdb->posts} WHERE post_type='post' AND post_status='publish' ORDER BY post_date DESC LIMIT 1"); $date_format = get_option('date_format'); return TimeZone::getCurrentDate_i18n($date_format, $db_date, false); } /** * Returns the average number of days between posts on your site. * * @param bool $days * @return float */ public static function getAveragePost($days = false) { global $wpdb; $get_first_post = $wpdb->get_var("SELECT post_date FROM {$wpdb->posts} WHERE post_status = 'publish' ORDER BY post_date LIMIT 1"); $get_total_post = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'post'"); $days_spend = intval( (time() - strtotime($get_first_post)) / 86400 ); // 86400 = 60 * 60 * 24 = number of seconds in a day if ($days == true) { if ($get_total_post == 0) { $get_total_post = 1; } // Avoid divide by zero errors. return round($days_spend / $get_total_post, 0); } else { if ($days_spend == 0) { $days_spend = 1; } // Avoid divide by zero errors. return round($get_total_post / $days_spend, 2); } } /** * Returns the average number of days between comments on your site. * * @param bool $days * @return float */ public static function getAverageComment($days = false) { global $wpdb; $get_first_comment = $wpdb->get_var("SELECT comment_date FROM {$wpdb->comments} ORDER BY comment_date LIMIT 1"); $get_total_comment = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->comments} WHERE comment_approved = '1'"); $days_spend = intval( (time() - strtotime($get_first_comment)) / 86400 ); // 86400 = 60 * 60 * 24 = number of seconds in a day if ($days == true) { if ($get_total_comment == 0) { $get_total_comment = 1; } // Avoid divide by zero errors. return round($days_spend / $get_total_comment, 0); } else { if ($days_spend == 0) { $days_spend = 1; } // Avoid divide by zero errors. return round($get_total_comment / $days_spend, 2); } } /** * Returns the average number of days between user registrations on your site. * * @param bool $days * @return float */ public static function getAverageRegisterUser($days = false) { global $wpdb; $get_first_user = $wpdb->get_var("SELECT `user_registered` FROM {$wpdb->users} ORDER BY user_registered LIMIT 1"); $get_total_user = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->users}"); $days_spend = intval( (time() - strtotime($get_first_user)) / 86400 ); if ($days == true) { if ($get_total_user == 0) { $get_total_user = 1; } return round($days_spend / $get_total_user, 0); } else { if ($days_spend == 0) { $days_spend = 1; } return round($get_total_user / $days_spend, 2); } } /** * Add notice to display in the admin area * * @param $message * @param string $class * @param bool $is_dismissible * @since 13.2.5 */ public static function addAdminNotice($message, $class = 'info', $is_dismissible = true) { self::$admin_notices[] = array( 'message' => $message, 'class' => $class, 'is_dismissible' => (bool)$is_dismissible, ); } /** * Display all notices in the admin area * * @return void * @since 13.2.5 */ public static function displayAdminNotices() { foreach ((array)self::$admin_notices as $notice) : $dismissible = $notice['is_dismissible'] ? 'is-dismissible' : ''; ?> <div class="notice notice-<?php echo esc_attr($notice['class']); ?> <?php echo esc_attr($dismissible); ?>"> <p> <?php echo wp_kses_post($notice['message']); ?> </p> </div> <?php endforeach; } /** * Returns default parameters for hits request * * @return array */ public static function getHitsDefaultParams() { // Create Empty Params Object $params = array(); //track all page $params['track_all'] = (Pages::is_track_all_page() === true ? 1 : 0); //Set Page Type $get_page_type = Pages::get_page_type(); $params['current_page_type'] = $get_page_type['type']; $params['current_page_id'] = $get_page_type['id']; $params['search_query'] = (isset($get_page_type['search_query']) ? esc_html($get_page_type['search_query']) : ''); //page url $params['page_uri'] = base64_encode(Pages::get_page_uri()); //return Json Data return $params; } /** * The version number will be anonymous using this function * * @param $version * @return string * @example 106.2.124.0 -> 106.0.0.0 * */ public static function makeAnonymousVersion($version) { $mainVersion = substr($version, 0, strpos($version, '.')); $subVersion = substr($version, strpos($version, '.') + 1); $anonymousSubVersion = preg_replace('/[0-9]+/', '0', $subVersion); return "{$mainVersion}.{$anonymousSubVersion}"; } /** * Do not track browser detection * * @return bool */ public static function dntEnabled() { if (Option::get('do_not_track')) { return (isset($_SERVER['HTTP_DNT']) && $_SERVER['HTTP_DNT'] == 1) or (function_exists('getallheaders') && isset(getallheaders()['DNT']) && getallheaders()['DNT'] == 1); } return false; } public static function getRequestUri() { if (self::is_rest_request() and isset($_REQUEST['page_uri'])) { return base64_decode($_REQUEST['page_uri']); } return sanitize_url(wp_unslash($_SERVER['REQUEST_URI'])); } }