PluginProbe
Assistant – Every Day Productivity Apps / 1.1.0
Assistant – Every Day Productivity Apps v1.1.0
1.5.5 trunk 0.1.0 0.2.0 0.2.1 0.2.2 0.3.0 0.3.1 0.4 0.4.1 0.4.2 0.5.0 0.5.1 0.6.0 0.7.0 0.7.0.2 0.7.0.3 0.7.0.4 0.7.0.5 0.7.0.6 0.7.0.7 0.7.0.8 0.7.0.9 0.7.1 1.0 All 71 releases
← All changes | backend/src/Controllers/PostsExportController.php +161 -151 trunk1.1.0 View file →
@@ -1,151 +1,161 @@
1 -<?php
2 -
3 -namespace FL\Assistant\Controllers;
4 -
5 -use FL\Assistant\System\Contracts\ControllerAbstract;
6 -use FL\Assistant\System\View;
7 -use WP_REST_Server;
8 -
9 -/**
10 - * REST API logic for exporting posts.
11 - */
12 -class PostsExportController extends ControllerAbstract {
13 -
14 - protected $view;
15 -
16 - public function __construct( View $view ) {
17 - $this->view = $view;
18 - }
19 -
20 - /**
21 - * Register routes.
22 - */
23 - public function register_routes() {
24 - $this->route(
25 - '/posts/(?P<id>\d+)/export',
26 - [
27 - [
28 - 'methods' => WP_REST_Server::CREATABLE,
29 - 'callback' => [ $this, 'export_post' ],
30 - 'permission_callback' => function () {
31 - return current_user_can( 'export' );
32 - },
33 - ],
34 - ]
35 - );
36 - }
37 -
38 - /**
39 - * Export a single post.
40 - */
41 - public function export_post( $request ) {
42 -
43 - /* Get requested post data */
44 - $post_id = absint( $request->get_param( 'id' ) );
45 - $post = get_post( $post_id );
46 -
47 - /* Create temporary file */
48 - $upload_dir = wp_upload_dir( null, false );
49 - $file_url = $upload_dir['baseurl'] . '/assistant_export_' . $post->ID . '.xml';
50 - $file = $upload_dir['basedir'] . '/assistant_export_' . $post->ID . '.xml';
51 -
52 - /* Creates taxonomies string for xml export */
53 - $taxonomies = get_taxonomies( '', 'names' );
54 - $terms = wp_get_object_terms( $post->ID, $taxonomies );
55 -
56 - $taxonomies_str = '';
57 - foreach ( $terms as $term ) {
58 - $taxonomies_str .= '<category domain="' . $term->taxonomy . '" nicename="' . $term->slug . '">' . $this->wxr_cdata( $term->name ) . '</category>';
59 - }
60 -
61 - /* Creates comments string */
62 - $comments = get_comments( [ 'post_id' => $post->ID ] );
63 -
64 - $comment_str = '';
65 -
66 - foreach ( $comments as $comment ) {
67 -
68 - $comment_str .= '<wp:comment>
69 - <wp:comment_id>' . $comment->comment_ID . '</wp:comment_id>
70 - <wp:comment_author>' . $this->wxr_cdata( $comment->comment_author ) . '</wp:comment_author>
71 - <wp:comment_author_email>' . $this->wxr_cdata( $comment->comment_author_email ) . '</wp:comment_author_email>
72 - <wp:comment_author_url></wp:comment_author_url>
73 - <wp:comment_author_IP>' . $this->wxr_cdata( $comment->comment_author_ip ) . '</wp:comment_author_IP>
74 - <wp:comment_date>' . $this->wxr_cdata( $comment->comment_date ) . '</wp:comment_date>
75 - <wp:comment_date_gmt>' . $this->wxr_cdata( $comment->comment_date_gmt ) . '</wp:comment_date_gmt>
76 - <wp:comment_content>' . $this->wxr_cdata( $comment->comment_content ) . '</wp:comment_content>
77 - <wp:comment_approved>' . $this->wxr_cdata( $comment->comment_approved ) . '</wp:comment_approved>
78 - <wp:comment_type><![CDATA[]]></wp:comment_type>
79 - <wp:comment_parent>' . $comment->comment_parent . '</wp:comment_parent>
80 - <wp:comment_user_id>' . $comment->user_id . '</wp:comment_user_id>
81 - </wp:comment>
82 - ';
83 - }
84 -
85 - /* Creates post meta string */
86 - $meta_str = '';
87 - $meta_values = get_post_meta( $post->ID );
88 - foreach ( $meta_values as $key => $values ) {
89 - foreach ( $values as $value ) {
90 - /* Ignore BB history meta */
91 - if ( false !== strpos( $key, '_fl_builder_history' ) ) {
92 - continue;
93 - }
94 - $meta_str .= '<wp:postmeta>
95 - <wp:meta_key>' . $this->wxr_cdata( $key ) . '</wp:meta_key>
96 - <wp:meta_value>' . $this->wxr_cdata( $value ) . '</wp:meta_value>
97 - </wp:postmeta>
98 - ';
99 - }
100 - }
101 -
102 - /* Author data */
103 -
104 - $author_display_name = $this->wxr_cdata( get_the_author_meta( 'display_name', $post->post_author ) );
105 -
106 - /* Post content */
107 -
108 - $post_content = $this->wxr_cdata( $post->post_author );
109 - $post_excerpt = $this->wxr_cdata( $post->post_excerpt );
110 - $post_date = $this->wxr_cdata( $post->post_date );
111 - $post_date_gmt = $this->wxr_cdata( $post->post_date_gmt );
112 - $comment_status = $this->wxr_cdata( $post->comment_status );
113 - $ping_status = $this->wxr_cdata( $post->ping_status );
114 - $post_title = $this->wxr_cdata( $post->post_title );
115 - $post_status = $this->wxr_cdata( $post->post_status );
116 - $post_type = $this->wxr_cdata( $post->post_type );
117 -
118 - $export_data = $this->view->render_to_string(
119 - 'post-export',
120 - [
121 - 'post' => $post,
122 - 'taxonomy_data' => $taxonomies_str,
123 - 'comment_data' => $comment_str,
124 - 'meta_data' => $meta_str,
125 - 'author_name' => $author_display_name,
126 - 'post_content' => $post_content,
127 - 'post_excerpt' => $post_excerpt,
128 - 'post_date' => $post_date,
129 - 'post_date_gmt' => $post_date_gmt,
130 - 'comment_status' => $comment_status,
131 - 'ping_status' => $ping_status,
132 - 'post_title' => $post_title,
133 - 'post_status' => $post_status,
134 - 'post_type' => $post_type,
135 - ]
136 - );
137 -
138 - file_put_contents( $file, $export_data );
139 - update_option( 'fl_assistant_export_file', true );
140 - return $file_url;
141 - }
142 -
143 - function wxr_cdata( $str ) {
144 - if ( ! seems_utf8( $str ) ) {
145 - $str = utf8_encode( $str );
146 - }
147 - $str = '<![CDATA[' . str_replace( ']]>', ']]]]><![CDATA[>', $str ) . ']]>';
148 -
149 - return $str;
150 - }
151 -}
1 +<?php
2 +
3 +namespace FL\Assistant\Controllers;
4 +
5 +use FL\Assistant\System\Contracts\ControllerAbstract;
6 +use FL\Assistant\System\View;
7 +use WP_REST_Server;
8 +
9 +/**
10 + * REST API logic for exporting posts.
11 + */
12 +class PostsExportController extends ControllerAbstract {
13 +
14 + protected $view;
15 +
16 + public function __construct( View $view ) {
17 + $this->view = $view;
18 + }
19 +
20 + /**
21 + * Register routes.
22 + */
23 + public function register_routes() {
24 + $this->route(
25 + '/posts/(?P<id>\d+)/export',
26 + [
27 + [
28 + 'methods' => WP_REST_Server::CREATABLE,
29 + 'callback' => [ $this, 'export_post' ],
30 + 'permission_callback' => function () {
31 + return current_user_can( 'export' );
32 + },
33 + ],
34 + ]
35 + );
36 + }
37 +
38 + /**
39 + * Export a single post.
40 + */
41 + public function export_post( $request ) {
42 + $this->delete_exports();
43 +
44 + /* Get requested post data */
45 + $post_id = absint( $request->get_param( 'id' ) );
46 + $post = get_post( $post_id );
47 +
48 + /* Create temporary file */
49 + $upload_dir = wp_upload_dir( null, false );
50 + $file_url = $upload_dir['baseurl'] . '/assistant_export_' . $post->ID . '.xml';
51 + $file = $upload_dir['basedir'] . '/assistant_export_' . $post->ID . '.xml';
52 +
53 + /* Creates taxonomies string for xml export */
54 + $taxonomies = get_taxonomies( '', 'names' );
55 + $terms = wp_get_object_terms( $post->ID, $taxonomies );
56 +
57 + $taxonomies_str = '';
58 + foreach ( $terms as $term ) {
59 + $taxonomies_str .= '<category domain="' . $term->taxonomy . '" nicename="' . $term->slug . '">' . $this->wxr_cdata( $term->name ) . '</category>';
60 + }
61 +
62 + /* Creates comments string */
63 + $comments = get_comments( [ 'post_id' => $post->ID ] );
64 +
65 + $comment_str = '';
66 +
67 + foreach ( $comments as $comment ) {
68 +
69 + $comment_str .= '<wp:comment>
70 + <wp:comment_id>' . $comment->comment_ID . '</wp:comment_id>
71 + <wp:comment_author>' . $this->wxr_cdata( $comment->comment_author ) . '</wp:comment_author>
72 + <wp:comment_author_email>' . $this->wxr_cdata( $comment->comment_author_email ) . '</wp:comment_author_email>
73 + <wp:comment_author_url></wp:comment_author_url>
74 + <wp:comment_author_IP>' . $this->wxr_cdata( $comment->comment_author_ip ) . '</wp:comment_author_IP>
75 + <wp:comment_date>' . $this->wxr_cdata( $comment->comment_date ) . '</wp:comment_date>
76 + <wp:comment_date_gmt>' . $this->wxr_cdata( $comment->comment_date_gmt ) . '</wp:comment_date_gmt>
77 + <wp:comment_content>' . $this->wxr_cdata( $comment->comment_content ) . '</wp:comment_content>
78 + <wp:comment_approved>' . $this->wxr_cdata( $comment->comment_approved ) . '</wp:comment_approved>
79 + <wp:comment_type><![CDATA[]]></wp:comment_type>
80 + <wp:comment_parent>' . $comment->comment_parent . '</wp:comment_parent>
81 + <wp:comment_user_id>' . $comment->user_id . '</wp:comment_user_id>
82 + </wp:comment>
83 + ';
84 + }
85 +
86 + /* Creates post meta string */
87 + $meta_str = '';
88 + $meta_values = get_post_meta( $post->ID );
89 + foreach ( $meta_values as $key => $values ) {
90 + foreach ( $values as $value ) {
91 + $meta_str .= '<wp:postmeta>
92 + <wp:meta_key>' . $this->wxr_cdata( $key ) . '</wp:meta_key>
93 + <wp:meta_value>' . $this->wxr_cdata( $value ) . '</wp:meta_value>
94 + </wp:postmeta>
95 + ';
96 + }
97 + }
98 +
99 + /* Author data */
100 +
101 + $author_display_name = $this->wxr_cdata( get_the_author_meta( 'display_name', $post->post_author ) );
102 +
103 + /* Post content */
104 +
105 + $post_content = $this->wxr_cdata( $post->post_author );
106 + $post_excerpt = $this->wxr_cdata( $post->post_excerpt );
107 + $post_date = $this->wxr_cdata( $post->post_date );
108 + $post_date_gmt = $this->wxr_cdata( $post->post_date_gmt );
109 + $comment_status = $this->wxr_cdata( $post->comment_status );
110 + $ping_status = $this->wxr_cdata( $post->ping_status );
111 + $post_title = $this->wxr_cdata( $post->post_title );
112 + $post_status = $this->wxr_cdata( $post->post_status );
113 + $post_type = $this->wxr_cdata( $post->post_type );
114 +
115 + $export_data = $this->view->render_to_string(
116 + 'post-export',
117 + [
118 + 'post' => $post,
119 + 'taxonomy_data' => $taxonomies_str,
120 + 'comment_data' => $comment_str,
121 + 'meta_data' => $meta_str,
122 + 'author_name' => $author_display_name,
123 + 'post_content' => $post_content,
124 + 'post_excerpt' => $post_excerpt,
125 + 'post_date' => $post_date,
126 + 'post_date_gmt' => $post_date_gmt,
127 + 'comment_status' => $comment_status,
128 + 'ping_status' => $ping_status,
129 + 'post_title' => $post_title,
130 + 'post_status' => $post_status,
131 + 'post_type' => $post_type,
132 + ]
133 + );
134 +
135 + file_put_contents( $file, $export_data );
136 +
137 + return $file_url;
138 + }
139 +
140 + /**
141 + * Remove temporary export files.
142 + */
143 + public function delete_exports() {
144 + $upload_dir = wp_upload_dir( null, false );
145 + $files = glob( trailingslashit( $upload_dir['basedir'] ) . 'assistant_export_*.xml' );
146 +
147 + foreach ( $files as $file ) {
148 + unlink( $file );
149 + }
150 + }
151 +
152 +
153 + function wxr_cdata( $str ) {
154 + if ( ! seems_utf8( $str ) ) {
155 + $str = utf8_encode( $str );
156 + }
157 + $str = '<![CDATA[' . str_replace( ']]>', ']]]]><![CDATA[>', $str ) . ']]>';
158 +
159 + return $str;
160 + }
161 +}