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 / groups / class-group-ad-relation.php
advanced-ads / includes / groups Last commit date
types 3 months ago class-group-ad-relation.php 5 days ago class-group-factory.php 1 day ago class-group-ordered.php 1 year ago class-group-repository.php 1 day ago class-group-slider.php 5 months ago class-group-standard.php 1 year ago class-group-types.php 1 day ago class-groups.php 1 day ago index.php 1 year ago
class-group-ad-relation.php
130 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
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 $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
67 if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
68 $term_ids = wp_list_pluck( $terms, 'term_id' );
69 $term_ids = array_diff( $term_ids, [ $group_id ] );
70 wp_set_object_terms( $ad_id, $term_ids, Constants::TAXONOMY_GROUP );
71 update_post_meta( $ad_id, Constants::AD_META_GROUP_IDS, $term_ids );
72 }
73 }
74 }
75
76 /**
77 * Handles the added ads for a group.
78 *
79 * @param array $added_ads An array of ad IDs that have been added.
80 * @param Group $group Group instance.
81 *
82 * @return void
83 */
84 private function handle_added_ads( array $added_ads, &$group ): void {
85 $group_id = $group->get_id();
86 $ad_weights = $group->get_ad_weights();
87
88 foreach ( $added_ads as $ad_id ) {
89 /**
90 * Check if this ad is representing the current group and remove it in this case
91 * could cause an infinite loop otherwise.
92 */
93 if ( $this->is_ad_type_group( $ad_id, $group ) ) {
94 unset( $ad_weights[ $ad_id ] );
95 continue;
96 }
97
98 $terms = wp_get_object_terms( $ad_id, Constants::TAXONOMY_GROUP );
99
100 if ( ! is_wp_error( $terms ) ) {
101 $term_ids = wp_list_pluck( $terms, 'term_id' );
102 $term_ids[] = $group_id;
103 $term_ids = array_unique( $term_ids );
104
105 wp_set_object_terms( $ad_id, $term_ids, Constants::TAXONOMY_GROUP );
106 update_post_meta( $ad_id, Constants::AD_META_GROUP_IDS, $term_ids );
107 }
108 }
109
110 $group->set_ad_weights( $ad_weights );
111 }
112
113 /**
114 * Check if ad is of type 'group' and belongs to the current group.
115 *
116 * @param int $ad_id Ad id.
117 * @param Group $group Group instance.
118 *
119 * @return bool
120 */
121 private function is_ad_type_group( int $ad_id, Group $group ): bool {
122 if ( ! isset( $this->ads[ $ad_id ] ) ) {
123 $this->ads[ $ad_id ] = wp_advads_get_ad( $ad_id );
124 }
125
126 $ad = $this->ads[ $ad_id ];
127 return $ad && $ad->is_type( 'group' ) && $ad->get_group_id() === $group->get_id();
128 }
129 }
130