PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.29.0
Advanced Ads – Ad Manager & AdSense v1.29.0
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 / modules / import-export / classes / export.php
advanced-ads / modules / import-export / classes Last commit date
XmlEncoder.php 5 years ago export.php 5 years ago import.php 5 years ago
export.php
224 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 = array();
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, array( $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 = array();
64 $advads_ad_groups = get_option( 'advads-ad-groups', array() );
65
66 if ( in_array( 'ads', $content ) ) {
67 $advads_ad_weights = get_option( 'advads-ad-weights', array() );
68
69 $ads = array();
70 $export_fields = implode( ', ', array(
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 = array(
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 = array(
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', array(
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', array( $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 $filename = 'advanced-ads-' . date( 'Y-m-d' ) . '.xml';
197
198 try {
199 $encoded = Advanced_Ads_XmlEncoder::get_instance()->encode( $export, array( 'encoding' => get_option( 'blog_charset' ) ) );
200
201 header( 'Content-Description: File Transfer' );
202 header( 'Content-Disposition: attachment; filename=' . $filename );
203 header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true );
204 echo $encoded;
205
206 if ( defined( 'IMPORT_DEBUG' ) && IMPORT_DEBUG ) {
207 error_log( print_r( $encoded, true ) );
208 $decoded = Advanced_Ads_XmlEncoder::get_instance()->decode( $encoded );
209 error_log( 'result ' . var_export( $export === $decoded , true ) );
210 }
211
212 exit();
213
214 } catch ( Exception $e ) {
215 $this->messages[] = array( 'error', $e->getMessage() );
216 }
217 }
218 }
219
220 public function get_messages(){
221 return $this->messages;
222 }
223 }
224