PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.21
Advanced Ads – Ad Manager & AdSense v2.0.21
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 / admin / class-version-control.php
advanced-ads / includes / admin Last commit date
ads 3 months ago groups 3 months ago metaboxes 1 year ago pages 3 months ago placements 2 months ago class-action-links.php 1 year ago class-addon-box.php 1 year ago class-addon-updater.php 3 months ago class-admin-menu.php 3 months ago class-admin-notices.php 1 year ago class-ajax.php 3 months ago class-assets.php 3 months ago class-authors.php 1 year ago class-compatibility.php 1 year ago class-edd-updater.php 3 months ago class-list-filters.php 2 months ago class-marketing.php 1 year ago class-metabox-ad-settings.php 1 year ago class-metabox-ad.php 1 year ago class-misc.php 1 year ago class-page-quick-edit.php 1 year ago class-plugin-installer.php 1 year ago class-post-list.php 1 year ago class-post-types.php 3 months ago class-screen-options.php 3 months ago class-settings.php 1 year ago class-shortcode-creator.php 1 year ago class-system-info.php 1 year ago class-tinymce.php 2 years ago class-translation-promo.php 1 year ago class-upgrades.php 1 year ago class-version-control.php 3 months ago class-welcome.php 1 year ago class-wordpress-dashboard.php 1 year ago index.php 2 years ago
class-version-control.php
222 lines
1 <?php
2 /**
3 * Admin Version Control.
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 * @since 1.50.0
8 */
9
10 namespace AdvancedAds\Admin;
11
12 use AdvancedAds\Framework\Utilities\Params;
13 use AdvancedAds\Framework\Interfaces\Integration_Interface;
14
15 defined( 'ABSPATH' ) || exit;
16
17 /**
18 * Admin Version Control.
19 */
20 class Version_Control implements Integration_Interface {
21 /**
22 * Includes up to this amount of latest minor version into the usable version, including all the in between patches.
23 *
24 * @var int
25 */
26 private const MINOR_VERSION_COUNT = 3;
27
28 /**
29 * The version list transient name
30 *
31 * @var string
32 */
33 public const VERSIONS_TRANSIENT = 'advads-versions-list';
34
35 /**
36 * Hook into WordPress.
37 *
38 * @return void
39 */
40 public function hooks(): void {
41 add_action( 'wp_ajax_advads_get_usable_versions', [ $this, 'get_usable_versions' ] );
42 add_action( 'wp_ajax_advads_install_alternate_version', [ $this, 'install_plugin' ] );
43 }
44
45 /**
46 * Get usable version, fetch from the info API if needed
47 *
48 * @return mixed|void
49 */
50 public function get_usable_versions() {
51 $this->check_user_capabilities();
52
53 if ( ! wp_verify_nonce( Params::post( 'nonce', '', FILTER_SANITIZE_FULL_SPECIAL_CHARS ), 'advads-version-control' ) ) {
54 wp_send_json_error( 'Not authorized', 401 );
55 }
56
57 $stored_versions = get_transient( self::VERSIONS_TRANSIENT );
58
59 if ( $stored_versions ) {
60 if ( wp_doing_ajax() ) {
61 wp_send_json_success( $stored_versions, 200 );
62 }
63
64 return $stored_versions;
65 }
66
67 $versions = $this->get_version_from_api();
68
69 if ( is_wp_error( $versions ) ) {
70 wp_send_json_error( $versions->get_error_message() . '>>' . $versions->get_error_message(), $versions->get_error_code() );
71 }
72
73 $versions = $this->filter_version_number( $versions );
74 set_transient( self::VERSIONS_TRANSIENT, $versions, 3 * HOUR_IN_SECONDS );
75 wp_send_json_success( $versions, 200 );
76 }
77
78 /**
79 * Download and install the desired version
80 *
81 * @return void
82 */
83 public function install_plugin(): void {
84 $this->check_user_capabilities();
85 $nonce = sanitize_key( Params::post( 'version-control-nonce', '' ) );
86
87 if ( ! wp_verify_nonce( $nonce, 'advads-version-control' ) ) {
88 wp_send_json_error( 'Not authorized', 401 );
89 }
90
91 $exploded = explode( '|', Params::post( 'version', '' ) );
92 $version = sanitize_text_field( $exploded[0] );
93 $package = sanitize_url( $exploded[1] );
94 $installer = new Plugin_Installer( $version, $package );
95 $result = $installer->install();
96
97 if ( is_wp_error( $result ) ) {
98 wp_send_json_error(
99 [
100 'error_code' => $result->get_error_code(),
101 'error_message' => $result->get_error_message(),
102 ],
103 400
104 );
105 }
106
107 if ( version_compare( $version, '2.0.0', '<' ) ) {
108 $placements = get_option( 'advads-ads-placements_backup', true );
109 update_option( 'advads-ads-placements', $placements );
110 delete_option( 'advads-ads-placements_backup' );
111 update_option( 'advanced_ads_db_version', '1.52.1' );
112 }
113
114 activate_plugin( plugin_basename( ADVADS_ABSPATH . basename( ADVADS_FILE ) ) );
115
116 wp_send_json_success(
117 [
118 'result' => $result,
119 'redirect' => admin_url( 'plugins.php?rollback=1' ),
120 ],
121 200
122 );
123 }
124
125 /**
126 * Perform capabilities check
127 *
128 * @return void
129 */
130 private function check_user_capabilities() {
131 if ( ! current_user_can( 'install_plugins' ) ) {
132 wp_send_json_error( 'Not enough permissions', 401 );
133 }
134 }
135
136 /**
137 * Filter the versions list from the info API
138 *
139 * - all updates until the last three minor updates
140 * - the last version before the last major update
141 *
142 * @param array $versions all version the info API.
143 *
144 * @return array
145 */
146 public function filter_version_number( $versions ) {
147 $results = [];
148
149 // Remove the "dev" version.
150 unset( $versions['trunk'] );
151
152 $version_numbers = array_keys( $versions );
153
154 usort( $version_numbers, 'version_compare' );
155
156 $version_numbers = array_reverse( $version_numbers );
157 array_shift( $version_numbers );
158
159 $major = '';
160 $minor = '';
161 $minor_version_changes = 0;
162 $major_version_changes = 0;
163
164 foreach ( $version_numbers as $number ) {
165 // Skip pre-release versions.
166 if ( preg_match( '/(rc|alpha|beta)/i', $number ) ) {
167 continue;
168 }
169
170 $parts = explode( '.', $number );
171 $major_part = $parts[1];
172 $minor_part = $parts[2];
173
174 if ( $major !== $major_part ) {
175 $major = $major_part;
176 ++$major_version_changes;
177 $minor_version_changes = 0;
178 }
179
180 if ( $minor !== $minor_part ) {
181 $minor = $minor_part;
182 ++$minor_version_changes;
183 }
184
185 if ( $minor_version_changes <= self::MINOR_VERSION_COUNT ) {
186 $results[ $number ] = $versions[ $number ];
187 }
188
189 if ( $major_version_changes >= self::MINOR_VERSION_COUNT ) {
190 break;
191 }
192 }
193
194 return [
195 'versions' => $results,
196 'order' => array_keys( $results ),
197 ];
198 }
199
200 /**
201 * Get all version from the info API
202 *
203 * @return array|\WP_Error
204 */
205 private function get_version_from_api() {
206 $aa_info = wp_remote_get( 'https://api.wordpress.org/plugins/info/1.0/advanced-ads.json' );
207
208 if ( is_wp_error( $aa_info ) ) {
209 return $aa_info;
210 }
211
212 $info = json_decode( wp_remote_retrieve_body( $aa_info ), true );
213
214 if ( $info['versions'] ) {
215 return $info['versions'];
216 }
217
218 // Likely a change in the WP info API.
219 return new \WP_Error( 404, __( 'Plugin info not found', 'advanced-ads' ) );
220 }
221 }
222