PluginProbe ʕ •ᴥ•ʔ
WP Job Manager / 2.4.7
WP Job Manager v2.4.7
2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.1.3 1.10.0 1.11.0 1.11.1 1.12.0 1.12.1 1.13.0 1.14.0 1.15.0 1.16.0 1.16.1 1.17.0 1.18.0 1.19.0 1.2.0 1.20.0 1.20.1 1.21.0 1.21.1 1.21.2 1.21.3 1.21.4 1.22.0 1.22.1 1.22.2 1.22.3 1.23.0 1.23.1 1.23.10 1.23.11 1.23.12 1.23.13 1.23.2 1.23.3 1.23.4 1.23.5 1.23.6 1.23.7 1.23.8 1.23.9 1.24.0 1.24.0.1 1.25.0 1.25.0.1 1.25.1 1.25.1.1 1.25.2 1.25.2.1 1.25.3 1.25.3.1 1.26.0 1.26.0.1 1.26.1 1.26.1.1 1.26.2 1.26.2.1 1.27.0 1.27.0.1 1.28.0 1.28.0.1 1.29.0 1.29.0.1 1.29.1 1.29.1.1 1.29.2 1.29.2.1 1.29.3 1.29.3.1 1.3.0 1.3.1 1.30.0 1.30.0.1 1.30.1 1.30.1.1 1.30.2 1.30.2.1 1.31.0 1.31.0.1 1.31.1 1.31.1.1 1.31.2 1.31.3 1.32.0 1.32.1 1.32.2 1.32.3 1.33.0 1.33.1 1.33.2 1.33.3 1.33.4 1.33.5 1.34.0 1.34.1 1.34.2 1.34.3 1.34.4 1.34.5 1.35.0 1.35.1 1.35.2 1.35.3 1.36.0 1.36.1 1.36.2 1.37.0 1.38.0 1.38.1 1.39.0 1.4.0 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.7.1 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 1.9.1 1.9.2 1.9.3 2.0.0 2.1.0 2.1.1 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.4.1
wp-job-manager / includes / class-job-listing-stats.php
wp-job-manager / includes Last commit date
3rd-party 4 days ago abstracts 3 months ago admin 2 weeks ago emails 2 weeks ago forms 4 days ago helper 3 months ago promoted-jobs 4 days ago ui 2 weeks ago widgets 2 weeks ago class-access-token.php 2 years ago class-dev-tools.php 2 years ago class-guest-session.php 2 years ago class-guest-user.php 2 years ago class-job-dashboard-shortcode.php 6 months ago class-job-listing-stats.php 2 years ago class-job-overlay.php 2 years ago class-stats-dashboard.php 2 years ago class-stats-script.php 3 months ago class-stats.php 3 months ago class-wp-job-manager-ajax.php 2 months ago class-wp-job-manager-api.php 6 years ago class-wp-job-manager-blocks.php 2 weeks ago class-wp-job-manager-cache-helper.php 3 months ago class-wp-job-manager-category-walker.php 6 years ago class-wp-job-manager-com-api.php 2 years ago class-wp-job-manager-data-cleaner.php 2 years ago class-wp-job-manager-data-exporter.php 3 months ago class-wp-job-manager-dependency-checker.php 2 years ago class-wp-job-manager-email-notifications.php 2 years ago class-wp-job-manager-forms.php 5 years ago class-wp-job-manager-geocode.php 2 weeks ago class-wp-job-manager-install.php 2 years ago class-wp-job-manager-post-types.php 4 days ago class-wp-job-manager-recaptcha.php 6 months ago class-wp-job-manager-rest-api.php 2 months ago class-wp-job-manager-shortcodes.php 2 weeks ago class-wp-job-manager-usage-tracking-data.php 2 years ago class-wp-job-manager-usage-tracking.php 2 years ago class-wp-job-manager-widget.php 2 weeks ago class-wp-job-manager.php 3 months ago trait-singleton.php 2 years ago
class-job-listing-stats.php
137 lines
1 <?php
2 /**
3 * File containing the class WP_Job_Manager_Stats
4 *
5 * @package wp-job-manager
6 */
7
8 namespace WP_Job_Manager;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit;
12 }
13
14 /**
15 * This class is responsible for initializing all aspects of stats for wpjm.
16 */
17 class Job_Listing_Stats {
18
19 const VIEW = 'job_view';
20 const VIEW_UNIQUE = 'job_view_unique';
21 const SEARCH_IMPRESSION = 'job_search_impression';
22 const APPLY_CLICK = 'job_apply_click';
23
24 /**
25 * Job listing post ID.
26 *
27 * @var mixed
28 */
29 private $job_id;
30
31 /**
32 * Start date of the period queried.
33 *
34 * @var string
35 */
36 private $start_date;
37
38 /**
39 * End date of the period queried.
40 *
41 * @var string
42 */
43 private $end_date;
44
45 /**
46 * Stats for a single job listing.
47 *
48 * @since 2.3.0
49 *
50 * @param int $job_id
51 * @param \DateTimeInterface[] $date_range Array of start and end date. Defaults to a range from the job's publishing date to the current day.
52 */
53 public function __construct( $job_id, $date_range = [] ) {
54
55 $this->job_id = $job_id;
56 $this->start_date = ( $date_range[0] ?? get_post_datetime( $job_id ) )->format( 'Y-m-d' );
57 $this->end_date = ( $date_range[1] ?? new \DateTime() )->format( 'Y-m-d' );
58 }
59
60 /**
61 * Get total counts for an event.
62 *
63 * @param string $event
64 *
65 * @return int
66 */
67 public function get_event_total( $event ) {
68
69 global $wpdb;
70
71 $cache_key = 'wpjm_stats_sum_' . $event . '_' . $this->job_id;
72 $sum = wp_cache_get( $cache_key, Stats::CACHE_GROUP );
73
74 if ( false !== $sum ) {
75 return $sum;
76 }
77
78 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
79 $sum = $wpdb->get_var(
80 $wpdb->prepare(
81 "SELECT SUM(count) FROM {$wpdb->wpjm_stats}
82 WHERE post_id = %d AND name = %s AND date BETWEEN %s AND %s",
83 $this->job_id,
84 $event,
85 $this->start_date,
86 $this->end_date,
87 )
88 );
89
90 $sum = is_numeric( $sum ) ? (int) $sum : 0;
91
92 wp_cache_set( $cache_key, $sum, Stats::CACHE_GROUP, HOUR_IN_SECONDS );
93
94 return $sum;
95 }
96
97 /**
98 * Get daily breakdown of stats for an event.
99 *
100 * @param string $event
101 *
102 * @return array
103 */
104 public function get_event_daily( $event ) {
105 global $wpdb;
106
107 $cache_key = 'wpjm_stats_daily_' . $event . '_' . $this->job_id;
108 $views = wp_cache_get( $cache_key, Stats::CACHE_GROUP );
109
110 if ( false !== $views ) {
111 return $views;
112 }
113
114 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
115 $views = $wpdb->get_results(
116 $wpdb->prepare(
117 "SELECT date, count FROM {$wpdb->wpjm_stats}
118 WHERE post_id = %d AND name = %s AND date BETWEEN %s AND %s
119 ORDER BY date ASC",
120 $this->job_id,
121 $event,
122 $this->start_date,
123 $this->end_date,
124 ),
125 OBJECT_K
126 );
127
128 $views = array_map( fn( $view ) => (int) $view->count, $views );
129
130 wp_cache_set( $cache_key, $views, Stats::CACHE_GROUP, strtotime( 'tomorrow' ) - time() );
131
132 return $views;
133
134 }
135
136 }
137