PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.14
Advanced Ads – Ad Manager & AdSense v2.0.14
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
metaboxes 1 year ago pages 7 months ago placement 1 year ago class-action-links.php 1 year ago class-ad-list-table.php 1 year ago class-addon-box.php 1 year ago class-addon-updater.php 1 year ago class-admin-menu.php 7 months ago class-admin-notices.php 1 year ago class-ajax.php 8 months ago class-assets.php 1 year ago class-authors.php 1 year ago class-compatibility.php 1 year ago class-edd-updater.php 1 year ago class-groups-list-table.php 7 months ago class-header.php 1 year ago class-list-filters.php 1 year 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-placement-create-modal.php 1 year ago class-placement-edit-modal.php 1 year ago class-placement-list-table.php 1 year ago class-placement-quick-edit.php 1 year ago class-plugin-installer.php 1 year ago class-post-list.php 1 year ago class-post-types.php 1 year ago class-quick-bulk-edit.php 10 months ago class-screen-options.php 1 year 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 1 year ago class-welcome.php 1 year ago class-wordpress-dashboard.php 1 year ago index.php 2 years ago
class-version-control.php
223 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 * Download and install the desired version
47 *
48 * @return void
49 */
50 public function install_plugin(): void {
51 $this->check_user_capabilities();
52 wp_parse_str( Params::post( 'vars', '' ), $args );
53 $nonce = sanitize_key( $args['nonce'] ) ?? '';
54
55 if ( ! wp_verify_nonce( $nonce, 'advads-version-control' ) ) {
56 wp_send_json_error( 'Not authorized', 401 );
57 }
58
59 $exploded = explode( '|', $args['version'] );
60 $version = sanitize_text_field( $exploded[0] );
61 $package = sanitize_url( $exploded[1] );
62 $installer = new Plugin_Installer( $version, $package );
63 $result = $installer->install();
64
65 if ( is_wp_error( $result ) ) {
66 wp_send_json_error(
67 [
68 'error_code' => $result->get_error_code(),
69 'error_message' => $result->get_error_message(),
70 ],
71 400
72 );
73 }
74
75 if ( version_compare( $version, '2.0.0', '<' ) ) {
76 $placements = get_option( 'advads-ads-placements_backup', true );
77 update_option( 'advads-ads-placements', $placements );
78 delete_option( 'advads-ads-placements_backup' );
79 update_option( 'advanced_ads_db_version', '1.52.1' );
80 }
81
82 activate_plugin( plugin_basename( ADVADS_ABSPATH . basename( ADVADS_FILE ) ) );
83
84 wp_send_json_success(
85 [
86 'result' => $result,
87 'redirect' => admin_url( 'plugins.php?rollback=1' ),
88 ],
89 200
90 );
91 }
92
93 /**
94 * Get usable version, fetch from the info API if needed
95 *
96 * @return mixed|void
97 */
98 public function get_usable_versions() {
99 $this->check_user_capabilities();
100
101 if ( ! wp_verify_nonce( Params::post( 'nonce', '', FILTER_SANITIZE_FULL_SPECIAL_CHARS ), 'advads-version-control' ) ) {
102 wp_send_json_error( 'Not authorized', 401 );
103 }
104
105 $stored_versions = get_transient( self::VERSIONS_TRANSIENT );
106
107 if ( $stored_versions ) {
108 if ( wp_doing_ajax() ) {
109 wp_send_json_success( $stored_versions, 200 );
110 }
111
112 return $stored_versions;
113 }
114
115 $versions = $this->get_version_from_api();
116
117 if ( is_wp_error( $versions ) ) {
118 wp_send_json_error( $versions->get_error_message() . '>>' . $versions->get_error_message(), $versions->get_error_code() );
119 }
120
121 $versions = $this->filter_version_number( $versions );
122 set_transient( self::VERSIONS_TRANSIENT, $versions, 3 * HOUR_IN_SECONDS );
123 wp_send_json_success( $versions, 200 );
124 }
125
126 /**
127 * Perform capabilities check
128 *
129 * @return void
130 */
131 private function check_user_capabilities() {
132 if ( ! current_user_can( 'install_plugins' ) ) {
133 wp_send_json_error( 'Not enough permissions', 401 );
134 }
135 }
136
137 /**
138 * Filter the versions list from the info API
139 *
140 * - all updates until the last three minor updates
141 * - the last version before the last major update
142 *
143 * @param array $versions all version the info API.
144 *
145 * @return array
146 */
147 public function filter_version_number( $versions ) {
148 $results = [];
149
150 // Remove the "dev" version.
151 unset( $versions['trunk'] );
152
153 $version_numbers = array_keys( $versions );
154
155 usort( $version_numbers, 'version_compare' );
156
157 $version_numbers = array_reverse( $version_numbers );
158 array_shift( $version_numbers );
159
160 $major = '';
161 $minor = '';
162 $minor_version_changes = 0;
163 $major_version_changes = 0;
164
165 foreach ( $version_numbers as $number ) {
166 // Skip pre-release versions.
167 if ( preg_match( '/(rc|alpha|beta)/i', $number ) ) {
168 continue;
169 }
170
171 $parts = explode( '.', $number );
172 $major_part = $parts[1];
173 $minor_part = $parts[2];
174
175 if ( $major !== $major_part ) {
176 $major = $major_part;
177 ++$major_version_changes;
178 $minor_version_changes = 0;
179 }
180
181 if ( $minor !== $minor_part ) {
182 $minor = $minor_part;
183 ++$minor_version_changes;
184 }
185
186 if ( $minor_version_changes <= self::MINOR_VERSION_COUNT ) {
187 $results[ $number ] = $versions[ $number ];
188 }
189
190 if ( $major_version_changes >= self::MINOR_VERSION_COUNT ) {
191 break;
192 }
193 }
194
195 return [
196 'versions' => $results,
197 'order' => array_keys( $results ),
198 ];
199 }
200
201 /**
202 * Get all version from the info API
203 *
204 * @return array|\WP_Error
205 */
206 private function get_version_from_api() {
207 $aa_info = wp_remote_get( 'https://api.wordpress.org/plugins/info/1.0/advanced-ads.json' );
208
209 if ( is_wp_error( $aa_info ) ) {
210 return $aa_info;
211 }
212
213 $info = json_decode( wp_remote_retrieve_body( $aa_info ), true );
214
215 if ( $info['versions'] ) {
216 return $info['versions'];
217 }
218
219 // Likely a change in the WP info API.
220 return new \WP_Error( 404, __( 'Plugin info not found', 'advanced-ads' ) );
221 }
222 }
223