PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.39.2
Advanced Ads – Ad Manager & AdSense v1.39.2
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 / modules / import-export / classes / export.php
advanced-ads / modules / import-export / classes Last commit date
XmlEncoder.php 3 years ago export.php 3 years ago import.php 3 years ago
export.php
233 lines
1 <?php
2 /**
3 * Export functionality.
4 */
5 class Advanced_Ads_Export {
6 /**
7 * @var Advanced_Ads_Export
8 */
9 private static $instance;
10
11 /**
12 * Status messages
13 */
14 private $messages = [];
15
16 private function __construct() {
17
18 $page_hook = 'admin_page_advanced-ads-import-export';
19 // execute before headers are sent
20 add_action( 'load-' . $page_hook, [ $this, 'download_export_file' ] );
21 }
22
23 /**
24 * Return an instance of this class.
25 */
26 public static function get_instance() {
27 if ( null == self::$instance ) {
28 self::$instance = new self;
29 }
30 return self::$instance;
31 }
32
33 /**
34 * Handle form submissions
35 */
36 public function download_export_file() {
37 $action = Advanced_Ads_Admin::get_instance()->current_action();
38
39 if ( $action === 'export' ) {
40 if ( ! current_user_can( Advanced_Ads_Plugin::user_cap( 'advanced_ads_manage_options') ) ) {
41 return;
42 }
43
44 check_admin_referer( 'advads-export' );
45
46 if ( isset( $_POST['content'] ) ) {
47 $this->process( $_POST['content'] );
48 }
49 }
50 }
51
52 /**
53 * Generate XML file.
54 *
55 * @param array $content Types of content to be exported.
56 */
57 private function process( array $content ) {
58 global $wpdb;
59
60 @set_time_limit( 0 );
61 @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) );
62
63 $export = [];
64 $advads_ad_groups = get_option( 'advads-ad-groups', [] );
65
66 if ( in_array( 'ads', $content ) ) {
67 $advads_ad_weights = get_option( 'advads-ad-weights', [] );
68
69 $ads = [];
70 $export_fields = implode( ', ', [
71 'ID',
72 'post_date',
73 'post_date_gmt',
74 'post_content',
75 'post_title',
76 'post_password',
77 'post_name',
78 'post_status',
79 'post_modified',
80 'post_modified_gmt',
81 'guid'
82 ] );
83
84 $posts = $wpdb->get_results( $wpdb->prepare( "SELECT $export_fields FROM {$wpdb->posts} where post_type = '%s' and post_status not in ('trash', 'auto-draft')", Advanced_Ads::POST_TYPE_SLUG ), ARRAY_A );
85
86 $mime_types = array_filter( get_allowed_mime_types(), function( $mime_type ) {
87 return preg_match( '/image\//', $mime_type );
88 } );
89 $search = '/' . preg_quote( home_url(), '/' ) . '(\S+?)\.(' . implode( '|', array_keys( $mime_types ) ) . ')/i';
90 foreach ( $posts as $k => $post ) {
91 if ( ! empty( $post['post_content'] ) ) {
92 // wrap images in <advads_import_img></advads_import_img> tags
93 $post['post_content'] = preg_replace( $search, '<advads_import_img>\\0</advads_import_img>', $post['post_content'] );
94 }
95
96 $ads[$k] = $post;
97
98 if ( in_array( 'groups', $content ) ) {
99 $terms = wp_get_object_terms( $post['ID'], 'advanced_ads_groups' );
100
101 foreach ( (array) $terms as $term ) {
102 $group_info = [
103 'term_id' => $term->term_id,
104 'slug' => $term->slug,
105 'name' => $term->name,
106 ];
107
108 if ( isset( $advads_ad_groups[ $term->term_id ] ) ) {
109 $group_info += $advads_ad_groups[ $term->term_id ];
110 }
111
112 if ( isset( $advads_ad_weights[ $term->term_id ][ $post['ID'] ] ) ) {
113 $group_info['weight'] = $advads_ad_weights[ $term->term_id ][ $post['ID'] ];
114 }
115
116 $ads[ $k ]['groups'][] = $group_info;
117 }
118 }
119
120 $postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->postmeta} WHERE post_id = %d", absint( $post['ID'] ) ) );
121
122 foreach ( $postmeta as $meta ) {
123 if ( $meta->meta_key === '_edit_lock' ) {
124 continue;
125 }
126 if ( $meta->meta_key === Advanced_Ads_Ad::$options_meta_field ) {
127 $ad_options = maybe_unserialize( $meta->meta_value );
128 if ( isset( $ad_options['output']['image_id'] ) ) {
129 $image_id = absint( $ad_options['output']['image_id'] );
130 if ( $atached_img = wp_get_attachment_url( $image_id) ) {
131 $ads[ $k ]['attached_img_url'] = $atached_img;
132 }
133 }
134 $ads[ $k ]['meta_input'][ $meta->meta_key ] = $ad_options;
135 } else {
136 $ads[ $k ]['meta_input'] [$meta->meta_key ] = $meta->meta_value;
137 }
138 }
139 }
140
141 if ( $ads ) {
142 $export['ads'] = $ads;
143 }
144 }
145
146 if ( in_array( 'groups', $content ) ) {
147 $terms = Advanced_Ads::get_instance()->get_model()->get_ad_groups();
148 foreach ( $terms as $term ) {
149 $group_info = [
150 'term_id' => $term->term_id,
151 'slug' => $term->slug,
152 'name' => $term->name,
153 ];
154
155 if ( isset( $advads_ad_groups[ $term->term_id ] ) ) {
156 $group_info += $advads_ad_groups[ $term->term_id ];
157 }
158
159 $export['groups'][] = $group_info;
160 }
161 }
162
163 if ( in_array( 'placements', $content ) ) {
164 $placements = Advanced_Ads::get_instance()->get_model()->get_ad_placements_array();
165
166 // prevent nodes starting with number
167 foreach ( $placements as $key => &$placement ) {
168 $placement['key'] = $key;
169 }
170
171 $export['placements'] = array_values( $placements );
172 }
173
174 if ( in_array( 'options', $content, true ) ) {
175 /**
176 * Filters the list of options to be exported.
177 *
178 * @param $options An array of options
179 */
180 $export['options'] = array_filter( apply_filters( 'advanced-ads-export-options', [
181 ADVADS_SLUG => get_option( ADVADS_SLUG ),
182 GADSENSE_OPT_NAME => get_option( GADSENSE_OPT_NAME ),
183 Advanced_Ads_Privacy::OPTION_KEY => get_option( Advanced_Ads_Privacy::OPTION_KEY ),
184 Advanced_Ads_Ads_Txt_Strategy::OPTION => get_option( Advanced_Ads_Ads_Txt_Strategy::OPTION ),
185 ] ) );
186 }
187
188 do_action_ref_array( 'advanced-ads-export', [ $content, &$export ] );
189
190 if ( $export ) {
191 if ( defined( 'IMPORT_DEBUG' ) && IMPORT_DEBUG ) {
192 error_log( print_r( 'Array to decode', true ) );
193 error_log( print_r( $export, true) );
194 }
195
196 // add the root domain and the current date to the filename.
197 $filename = sprintf(
198 '%s-advanced-ads-export-%s.xml',
199 sanitize_title( preg_replace(
200 '#^(?:[^:]+:)?//(?:www\.)?([^/]+)#',
201 '$1',
202 get_bloginfo( 'url' )
203 ) ),
204 gmdate( 'Y-m-d' )
205 );
206
207 try {
208 $encoded = Advanced_Ads_XmlEncoder::get_instance()->encode( $export, [ 'encoding' => get_option( 'blog_charset' ) ] );
209
210 header( 'Content-Description: File Transfer' );
211 header( 'Content-Disposition: attachment; filename=' . $filename );
212 header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true );
213 echo $encoded;
214
215 if ( defined( 'IMPORT_DEBUG' ) && IMPORT_DEBUG ) {
216 error_log( print_r( $encoded, true ) );
217 $decoded = Advanced_Ads_XmlEncoder::get_instance()->decode( $encoded );
218 error_log( 'result ' . var_export( $export === $decoded , true ) );
219 }
220
221 exit();
222
223 } catch ( Exception $e ) {
224 $this->messages[] = [ 'error', $e->getMessage() ];
225 }
226 }
227 }
228
229 public function get_messages(){
230 return $this->messages;
231 }
232 }
233