PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.25
Advanced Ads – Ad Manager & AdSense v2.0.25
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / includes / crons / class-ads.php
advanced-ads / includes / crons Last commit date
class-ads.php 1 week ago class-licenses.php 1 day ago
class-ads.php
151 lines
1 <?php
2 /**
3 * Crons Ads using Action Scheduler.
4 *
5 * @package AdvancedAds
6 */
7
8 namespace AdvancedAds\Crons;
9
10 use DateTimeImmutable;
11 use AdvancedAds\Constants;
12 use AdvancedAds\Abstracts\Ad;
13 use AdvancedAds\Framework\Interfaces\Integration_Interface;
14 use WP_Post;
15
16 defined( 'ABSPATH' ) || exit;
17
18 /**
19 * Crons Ads.
20 */
21 class Ads implements Integration_Interface {
22
23 /**
24 * Post ID allowed to bypass caps during cron expiration update.
25 *
26 * @var int
27 */
28 private $bypass_cap_post_id = 0;
29
30 /**
31 * Hook into WordPress
32 *
33 * @return void
34 */
35 public function hooks(): void {
36 add_action( 'advanced-ads-ad-pre-save', [ $this, 'save_expiration_date' ] );
37 add_action( Constants::CRON_JOB_AD_EXPIRATION, [ $this, 'update_ad_status' ] );
38 }
39
40 /**
41 * Create Action Scheduler job and save into independent meta
42 *
43 * @param Ad $ad Ad instance.
44 *
45 * @return void
46 */
47 public function save_expiration_date( Ad $ad ): void {
48 $post_id = $ad->get_id();
49 if ( ! $post_id || ! function_exists( 'as_unschedule_all_actions' ) ) {
50 return;
51 }
52
53 $args = [ $post_id ];
54 $group = 'advanced_ads';
55 $expiry = (int) $ad->get_expiry_date( 'edit' );
56
57 as_unschedule_all_actions(
58 Constants::CRON_JOB_AD_EXPIRATION,
59 $args,
60 $group
61 );
62
63 if ( $expiry <= 0 ) {
64 delete_post_meta( $post_id, Constants::AD_META_EXPIRATION_TIME );
65 return;
66 }
67
68 $datetime = ( new DateTimeImmutable() )->setTimestamp( $expiry );
69
70 update_post_meta(
71 $post_id,
72 Constants::AD_META_EXPIRATION_TIME,
73 $datetime->format( 'Y-m-d H:i:s' )
74 );
75
76 if ( $expiry <= time() ) {
77 $this->update_ad_status( $post_id );
78 return;
79 }
80
81 as_schedule_single_action(
82 $expiry,
83 Constants::CRON_JOB_AD_EXPIRATION,
84 $args,
85 $group,
86 true
87 );
88 }
89
90 /**
91 * Update post status to expired
92 *
93 * @param int $post_id Post ID.
94 *
95 * @return void
96 */
97 public function update_ad_status( $post_id ): void {
98 $post_id = absint( $post_id );
99 if ( ! $post_id ) {
100 return;
101 }
102
103 $post = get_post( $post_id );
104 if ( ! $post instanceof WP_Post || Constants::POST_TYPE_AD !== $post->post_type ) {
105 return;
106 }
107
108 if ( Constants::AD_STATUS_EXPIRED === $post->post_status || 'trash' === $post->post_status ) {
109 return;
110 }
111
112 $this->bypass_cap_post_id = $post_id;
113 add_filter( 'user_has_cap', [ $this, 'grant_edit_cap_for_expiration' ], 10, 3 );
114
115 kses_remove_filters();
116
117 wp_update_post(
118 [
119 'ID' => $post_id,
120 'post_status' => Constants::AD_STATUS_EXPIRED,
121 ]
122 );
123
124 kses_init_filters();
125
126 remove_filter( 'user_has_cap', [ $this, 'grant_edit_cap_for_expiration' ], 10 );
127 $this->bypass_cap_post_id = 0;
128 }
129
130 /**
131 * Allow Action Scheduler to expire ads when no user is logged in.
132 *
133 * @param array<string, bool> $allcaps All capabilities.
134 * @param array<int, string> $caps Required capabilities.
135 * @param array<int, mixed> $args Capability check args.
136 *
137 * @return array<string, bool>
138 */
139 public function grant_edit_cap_for_expiration( array $allcaps, array $caps, array $args ): array {
140 if ( ! $this->bypass_cap_post_id || empty( $args[0] ) || 'edit_post' !== $args[0] ) {
141 return $allcaps;
142 }
143
144 if ( isset( $args[2] ) && (int) $args[2] === $this->bypass_cap_post_id ) {
145 $allcaps['advanced_ads_edit_ads'] = true;
146 }
147
148 return $allcaps;
149 }
150 }
151