HTML
1 year ago
views
5 months ago
Apply.php
6 months ago
Cron.php
1 year ago
CronJob.php
7 months ago
CronJobs.php
2 months ago
Crypt.php
1 month ago
DownloadStats.php
5 months ago
Email.php
5 days ago
EmailCron.php
1 year ago
FileSystem.php
1 year ago
Installer.php
14 hours ago
Messages.php
1 year ago
Query.php
4 months ago
Session.php
14 hours ago
Settings.php
4 years ago
SimpleMath.php
4 years ago
TempStorage.php
14 hours ago
Template.php
5 months ago
UI.php
6 months ago
Updater.php
4 years ago
UserAgent.php
2 years ago
__.php
1 month ago
__MailUI.php
3 years ago
DownloadStats.php
167 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Class DownloadStats |
| 4 | */ |
| 5 | |
| 6 | namespace WPDM\__; |
| 7 | |
| 8 | global $userDownloadCount; |
| 9 | $userDownloadCount = []; |
| 10 | |
| 11 | class DownloadStats |
| 12 | { |
| 13 | |
| 14 | private $dbTable; |
| 15 | |
| 16 | |
| 17 | function __construct() |
| 18 | { |
| 19 | global $wpdb; |
| 20 | $this->dbTable = "{$wpdb->prefix}ahm_download_stats"; |
| 21 | } |
| 22 | |
| 23 | /** |
| 24 | * @param $pid |
| 25 | * @param $filename |
| 26 | * @param $oid |
| 27 | */ |
| 28 | function add($pid, $filename, $oid = null){ |
| 29 | |
| 30 | if(defined("WPDM_DISABLE_STATS") && WPDM_DISABLE_STATS === true) return; |
| 31 | |
| 32 | global $wpdb; |
| 33 | |
| 34 | $current_user = wp_get_current_user(); |
| 35 | |
| 36 | //Handle downloads from email lock |
| 37 | if(wpdm_query_var('subscriber' )){ |
| 38 | $subscriber = Crypt::decrypt(wpdm_query_var('subscriber' )); |
| 39 | $wpdb->update("{$wpdb->prefix}ahm_emails", ['request_status' => 1], ['id' => $subscriber]); |
| 40 | } |
| 41 | |
| 42 | $uid = get_current_user_id(); |
| 43 | $ip = (get_option('__wpdm_noip') == 0) ? wpdm_get_client_ip() : ""; |
| 44 | $agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']); |
| 45 | $hash = "uniq_".md5($pid.$uid.date("Y-m-d-h-i").wpdm_get_client_ip()); |
| 46 | if((int)Session::get($hash) === 1 || wpdm_query_var('nostat', ['validate' => 'int']) === 1) return; |
| 47 | Session::set($hash, 1); |
| 48 | $version = get_post_meta($pid, '__wpdm_version', true); |
| 49 | $wpdb->insert("{$this->dbTable}", array('pid' => (int)$pid, 'uid' => (int)$uid, 'oid' => $oid, 'year' => date("Y"), 'month' => date("m"), 'day' => date("d"), 'timestamp' => time(), 'ip' => "$ip", 'filename' => $filename, 'agent' => $agent, 'version' => $version)); |
| 50 | update_post_meta($pid, '__wpdm_download_count', (int)get_post_meta($pid, '__wpdm_download_count', true) + 1); |
| 51 | |
| 52 | $this->updateUserDownloadCount($pid, $uid, $filename); |
| 53 | |
| 54 | if (is_user_logged_in()) { |
| 55 | $index = $current_user->ID; |
| 56 | } else { |
| 57 | $index = str_replace(".", "_", $ip); |
| 58 | if ($index == '') $index = uniqid(); |
| 59 | } |
| 60 | |
| 61 | if ($ip == '') $ip = $index; |
| 62 | Session::set('downloaded_' . $pid, $ip); |
| 63 | } |
| 64 | |
| 65 | /** |
| 66 | * Get user download count for the given package |
| 67 | * @param $packageID |
| 68 | * @param null $userID |
| 69 | * @return int|null |
| 70 | */ |
| 71 | function userDownloadCount($packageID, $userID = null) |
| 72 | { |
| 73 | global $wpdb, $userDownloadCount; |
| 74 | $packageID = (int)$packageID; |
| 75 | |
| 76 | if(!$userID) { |
| 77 | if(is_user_logged_in()) |
| 78 | $userID = get_current_user_id(); |
| 79 | else { |
| 80 | $userID = wpdm_get_client_ip(); |
| 81 | } |
| 82 | } |
| 83 | $userID = esc_sql($userID); |
| 84 | |
| 85 | $piduid = $packageID."_".$userID; |
| 86 | |
| 87 | if(isset($userDownloadCount[$piduid])) return $userDownloadCount[$piduid]; |
| 88 | $sql = "select download_count from {$wpdb->prefix}ahm_user_download_counts WHERE user = '{$userID}' and package_id = '{$packageID}'"; |
| 89 | $download_count = (int)$wpdb->get_var($sql); |
| 90 | $userDownloadCount[$piduid] = $download_count; |
| 91 | return $download_count; |
| 92 | } |
| 93 | |
| 94 | /** |
| 95 | * Reset user download count for the given package |
| 96 | * @param $packageID |
| 97 | * @param null $userID |
| 98 | * @return bool|int |
| 99 | */ |
| 100 | function resetUserDownloadCount($packageID, $userID = null) |
| 101 | { |
| 102 | global $wpdb; |
| 103 | $packageID = (int)$packageID; |
| 104 | $where['package_id'] = $packageID; |
| 105 | if($userID !== 'all') { |
| 106 | if (!$userID) { |
| 107 | if (is_user_logged_in()) |
| 108 | $userID = get_current_user_id(); |
| 109 | else { |
| 110 | $userID = wpdm_get_client_ip(); |
| 111 | } |
| 112 | } |
| 113 | $userID = esc_sql($userID); |
| 114 | $where['user'] = $userID; |
| 115 | } |
| 116 | return $wpdb->update("{$wpdb->prefix}ahm_user_download_counts", ['donwload_count' => 0], $where); |
| 117 | } |
| 118 | |
| 119 | /** |
| 120 | * Update user download count for the given package |
| 121 | * @param $packageID |
| 122 | * @param null $userID |
| 123 | */ |
| 124 | function updateUserDownloadCount($packageID, $userID = null, $file = '') |
| 125 | { |
| 126 | global $wpdb; |
| 127 | $packageID = (int)$packageID; |
| 128 | |
| 129 | if(!$userID) { |
| 130 | if(is_user_logged_in()) |
| 131 | $userID = get_current_user_id(); |
| 132 | else { |
| 133 | $userID = wpdm_get_client_ip(); |
| 134 | } |
| 135 | } |
| 136 | $userID = esc_sql($userID); |
| 137 | $download_count = (int)$this->userDownloadCount($packageID, $userID); |
| 138 | $download_count++; |
| 139 | $found = $wpdb->get_var("select count(ID) from {$wpdb->prefix}ahm_user_download_counts where user = '$userID' and package_id = '$packageID'"); |
| 140 | if(!$found) |
| 141 | $wpdb->insert("{$wpdb->prefix}ahm_user_download_counts", ['download_count' => $download_count, 'user' => $userID, 'package_id' => $packageID]); |
| 142 | else |
| 143 | $wpdb->update("{$wpdb->prefix}ahm_user_download_counts", ['download_count' => $download_count], ['user' => $userID, 'package_id' => $packageID]); |
| 144 | |
| 145 | do_action("wpdm_after_update_download_count", $packageID, $userID, $file); |
| 146 | } |
| 147 | |
| 148 | |
| 149 | |
| 150 | /** |
| 151 | * @deprecated Use <strong>add</strong> method, WPDM()->downloadHistory->add($pid, $filename, $oid = null); |
| 152 | * @param $pid |
| 153 | * @param $uid |
| 154 | * @param $oid |
| 155 | * @param string $filename |
| 156 | */ |
| 157 | function newStat($pid, $uid, $oid, $filename = "") |
| 158 | { |
| 159 | global $wpdb, $current_user; |
| 160 | return true; |
| 161 | |
| 162 | //Deprecated |
| 163 | } |
| 164 | |
| 165 | |
| 166 | } |
| 167 |