AddOns.php
4 years ago
Categories.php
3 years ago
Packages.php
5 days ago
Settings.php
5 months ago
Stats.php
4 years ago
Templates.php
2 years ago
Welcome.php
5 months ago
Stats.php
116 lines
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * User: shahnuralam |
| 5 | * Date: 11/9/15 |
| 6 | * Time: 7:44 PM |
| 7 | */ |
| 8 | |
| 9 | namespace WPDM\Admin\Menu; |
| 10 | |
| 11 | |
| 12 | use WPDM\__\__; |
| 13 | use WPDM\__\Crypt; |
| 14 | use WPDM\__\FileSystem; |
| 15 | |
| 16 | class Stats |
| 17 | { |
| 18 | function __construct() |
| 19 | { |
| 20 | add_action('admin_menu', array($this, 'menu')); |
| 21 | add_action('admin_init', array($this, 'export')); |
| 22 | add_action('wp_ajax_wpdm_stats_get_packages', array($this, 'ajax_callback_get_packages')); |
| 23 | add_action('wp_ajax_wpdm_stats_get_users', array($this, 'ajax_callback_get_users')); |
| 24 | } |
| 25 | |
| 26 | function menu() |
| 27 | { |
| 28 | add_submenu_page('edit.php?post_type=wpdmpro', __("Stats ‹ Download Manager", "download-manager"), __("History", "download-manager"), WPDM_MENU_ACCESS_CAP, 'wpdm-stats', array($this, 'UI')); |
| 29 | } |
| 30 | |
| 31 | function UI() |
| 32 | { |
| 33 | include wpdm_admin_tpl_path("stats.php"); |
| 34 | } |
| 35 | |
| 36 | public function ajax_callback_get_packages() |
| 37 | { |
| 38 | __::isAuthentic('__spnonce', WPDM_PUB_NONCE, WPDM_MENU_ACCESS_CAP); |
| 39 | global $wpdb; |
| 40 | $posts_table = "{$wpdb->base_prefix}posts"; |
| 41 | $packages = []; |
| 42 | $term = wpdm_query_var('term'); |
| 43 | |
| 44 | if ($term) { |
| 45 | $result_rows = $wpdb->get_results("SELECT ID, post_title FROM $posts_table where `post_type` = 'wpdmpro' AND `post_title` LIKE '%" . $term . "%' "); |
| 46 | foreach ($result_rows as $row) { |
| 47 | array_push($packages, [ |
| 48 | 'id' => $row->ID, |
| 49 | 'text' => $row->post_title |
| 50 | ]); |
| 51 | } |
| 52 | } |
| 53 | //results key is necessary for jquery select2 |
| 54 | wp_send_json(["results" => $packages]); |
| 55 | } |
| 56 | |
| 57 | public function ajax_callback_get_users() |
| 58 | { |
| 59 | __::isAuthentic('__spnonce', WPDM_PUB_NONCE, WPDM_MENU_ACCESS_CAP); |
| 60 | global $wpdb; |
| 61 | $users_table = "{$wpdb->prefix}users"; |
| 62 | $term = wpdm_query_var('term'); |
| 63 | $users = []; |
| 64 | |
| 65 | if ($term) { |
| 66 | $result_rows = $wpdb->get_results("SELECT ID, user_login, display_name, user_email FROM $users_table where `display_name` LIKE '%" . $term . "%' OR `user_login` LIKE '%" . $term . "%' OR `user_email` LIKE '%" . $term . "%' "); |
| 67 | foreach ($result_rows as $row) { |
| 68 | $text = $row->display_name . " ( $row->user_login ) "; |
| 69 | array_push($users, [ |
| 70 | 'id' => $row->ID, |
| 71 | 'text' => $text |
| 72 | ]); |
| 73 | } |
| 74 | } |
| 75 | //results key is necessary for jquery select2 |
| 76 | wp_send_json(["results" => $users]); |
| 77 | } |
| 78 | |
| 79 | |
| 80 | |
| 81 | function export() |
| 82 | { |
| 83 | if (wpdm_query_var('page') == 'wpdm-stats' && wpdm_query_var('task') == 'export') { |
| 84 | if(!current_user_can(WPDM_ADMIN_CAP) || !wp_verify_nonce(wpdm_query_var('__xnonce'), NONCE_KEY)) die('Invalid nonce!'); |
| 85 | global $wpdb; |
| 86 | $sql = wpdm_query_var("hash") !== '' ? Crypt::decrypt(wpdm_query_var('hash')) : ""; |
| 87 | if(!$sql) $sql = "SELECT [##fields##] FROM {$wpdb->prefix}ahm_download_stats"; |
| 88 | //$data = $wpdb->get_results("select s.*, p.post_title as file from {$wpdb->prefix}ahm_download_stats s, {$wpdb->prefix}posts p where p.ID = s.pid order by id DESC"); |
| 89 | $total = $wpdb->get_var(str_replace("[##fields##]", "count(*) as total", $sql)); |
| 90 | WPDM()->fileSystem->downloadHeaders("download-stats.csv"); |
| 91 | ob_start(); |
| 92 | echo "Package ID,Package Name,User ID,User Name,User Email,Order ID,Date,Timestamp\r\n"; |
| 93 | ob_flush(); |
| 94 | $pages = $total / 20; |
| 95 | if ($pages > (int) $pages) $pages++; |
| 96 | |
| 97 | for ($i = 0; $i <= $pages; $i++) { |
| 98 | $start = $i * 20; |
| 99 | $data = $wpdb->get_results(str_replace("[##fields##]", "*", $sql)." limit $start, 20"); |
| 100 | ob_start(); |
| 101 | foreach ($data as $d) { |
| 102 | $package_name = get_the_title($d->pid); |
| 103 | $package_name = addslashes($package_name); |
| 104 | if ($d->uid > 0) { |
| 105 | $u = get_user_by('ID', $d->uid); |
| 106 | echo "{$d->pid},\"{$package_name}\",{$d->uid},\"{$u->display_name}\",\"{$u->user_email}\",{$d->oid},{$d->year}-{$d->month}-{$d->day},{$d->timestamp}\r\n"; |
| 107 | } else |
| 108 | echo "{$d->pid},\"{$package_name}\",-,\"-\",\"-\",{$d->oid},{$d->year}-{$d->month}-{$d->day},{$d->timestamp}\r\n"; |
| 109 | } |
| 110 | ob_flush(); |
| 111 | } |
| 112 | die(); |
| 113 | } |
| 114 | } |
| 115 | } |
| 116 |