PluginProbe
Assistant – Every Day Productivity Apps / trunk
Assistant – Every Day Productivity Apps vtrunk
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
assistant / backend / src / Controllers / PostsExportController.php

PostsExportController.php in Assistant – Every Day Productivity Apps trunk, at backend/src/Controllers/PostsExportController.php

152 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
152