PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.26
Advanced Ads – Ad Manager & AdSense v2.0.26
2.0.26 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 / groups / class-group-ad-relation.php
advanced-ads / includes / groups Last commit date
types 3 weeks ago class-group-ad-relation.php 3 weeks ago class-group-factory.php 3 weeks ago class-group-ordered.php 1 year ago class-group-repository.php 3 weeks ago class-group-slider.php 3 weeks ago class-group-standard.php 1 year ago class-group-types.php 1 month ago class-groups.php 1 month ago index.php 1 year ago
class-group-ad-relation.php
131 lines
1 <?php
2 /**
3 * Manage group and ad relationship.
4 *
5 * @since 2.0.7
6 * @package AdvancedAds
7 * @author Advanced Ads <info@wpadvancedads.com>
8 */
9
10 namespace AdvancedAds\Groups;
11
12 use AdvancedAds\Constants;
13 use AdvancedAds\Abstracts\Group;
14
15 defined( 'ABSPATH' ) || exit;
16
17 /**
18 * Group ad relation class.
19 */
20 class Group_Ad_Relation {
21
22 /**
23 * Hold ads.
24 *
25 * @var array<string, mixed>
26 */
27 private $ads = [];
28
29 /**
30 * Create ad group relation.
31 *
32 * @param Group $group Group object.
33 *
34 * @return void
35 */
36 public function relate( &$group ): void {
37 $data = $group->get_data();
38 $changes = $group->get_changes();
39 $old_ads = $data['ad_weights'] ? array_keys( $data['ad_weights'] ) : [];
40 $new_ads = $changes['ad_weights'] ? array_keys( $changes['ad_weights'] ) : [];
41
42 $removed_ads = array_diff( $old_ads, $new_ads );
43 $added_ads = array_diff( $new_ads, $old_ads );
44
45 $affected_ad_ids = array_unique( array_map( 'intval', array_merge( $removed_ads, $added_ads ) ) );
46
47 if ( ! empty( $affected_ad_ids ) ) {
48 update_object_term_cache( $affected_ad_ids, Constants::TAXONOMY_GROUP );
49 }
50
51 $this->handle_removed_ads( $removed_ads, $group->get_id() );
52 $this->handle_added_ads( $added_ads, $group );
53 }
54
55 /**
56 * Handles the removed ads for a group.
57 *
58 * @param array<int, int> $removed_ads An array of ad IDs that have been removed.
59 * @param int $group_id The ID of the group.
60 *
61 * @return void
62 */
63 private function handle_removed_ads( $removed_ads, $group_id ): void {
64 foreach ( $removed_ads as $ad_id ) {
65 $terms = wp_get_object_terms( $ad_id, Constants::TAXONOMY_GROUP );
66 $term_ids = ( is_wp_error( $terms ) || empty( $terms ) )
67 ? (array) get_post_meta( $ad_id, Constants::AD_META_GROUP_IDS, true )
68 : wp_list_pluck( $terms, 'term_id' );
69
70 $term_ids = array_values( array_diff( array_map( 'intval', $term_ids ), [ (int) $group_id ] ) );
71
72 wp_set_object_terms( $ad_id, $term_ids, Constants::TAXONOMY_GROUP );
73 update_post_meta( $ad_id, Constants::AD_META_GROUP_IDS, $term_ids );
74 }
75 }
76
77 /**
78 * Handles the added ads for a group.
79 *
80 * @param array<int, int> $added_ads An array of ad IDs that have been added.
81 * @param Group $group Group instance.
82 *
83 * @return void
84 */
85 private function handle_added_ads( array $added_ads, &$group ): void {
86 $group_id = $group->get_id();
87 $ad_weights = $group->get_ad_weights();
88
89 foreach ( $added_ads as $ad_id ) {
90 /**
91 * Check if this ad is representing the current group and remove it in this case
92 * could cause an infinite loop otherwise.
93 */
94 if ( $this->is_ad_type_group( $ad_id, $group ) ) {
95 unset( $ad_weights[ $ad_id ] );
96 continue;
97 }
98
99 $terms = wp_get_object_terms( $ad_id, Constants::TAXONOMY_GROUP );
100
101 if ( ! is_wp_error( $terms ) ) {
102 $term_ids = wp_list_pluck( $terms, 'term_id' );
103 $term_ids[] = $group_id;
104 $term_ids = array_unique( $term_ids );
105
106 wp_set_object_terms( $ad_id, $term_ids, Constants::TAXONOMY_GROUP );
107 update_post_meta( $ad_id, Constants::AD_META_GROUP_IDS, $term_ids );
108 }
109 }
110
111 $group->set_ad_weights( $ad_weights );
112 }
113
114 /**
115 * Check if ad is of type 'group' and belongs to the current group.
116 *
117 * @param int $ad_id Ad id.
118 * @param Group $group Group instance.
119 *
120 * @return bool
121 */
122 private function is_ad_type_group( int $ad_id, Group $group ): bool {
123 if ( ! isset( $this->ads[ $ad_id ] ) ) {
124 $this->ads[ $ad_id ] = wp_advads_get_ad( $ad_id );
125 }
126
127 $ad = $this->ads[ $ad_id ];
128 return $ad && $ad->is_type( 'group' ) && $ad->get_group_id() === $group->get_id();
129 }
130 }
131