PluginProbe
Assistant – Every Day Productivity Apps / 0.4
Assistant – Every Day Productivity Apps v0.4
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 / Data / Transformers / PostTransformer.php

PostTransformer.php in Assistant – Every Day Productivity Apps 0.4, at backend/src/Data/Transformers/PostTransformer.php

136 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3
4 namespace FL\Assistant\Data\Transformers;
5
6 use FL\Assistant\Data\Repository\NotationsRepository;
7 use FL\Assistant\Data\Repository\TermsRepository;
8 use FL\Assistant\System\Integrations\BeaverBuilder;
9
10
11 /**
12 * Class PostTransformer
13 *
14 * Convert a WP_Post object to array suitable for REST output
15 *
16 * @package FL\Assistant\RestApi\Transformers
17 */
18 class PostTransformer {
19
20 protected $notations;
21 protected $terms;
22 protected $beaver_builder;
23
24 /**
25 * PostTransformer constructor.
26 *
27 * @param NotationsRepository $notations
28 * @param BeaverBuilder $beaver_builder
29 */
30 public function __construct(
31 NotationsRepository $notations,
32 TermsRepository $terms,
33 BeaverBuilder $beaver_builder
34 ) {
35 $this->notations = $notations;
36 $this->terms = $terms;
37 $this->beaver_builder = $beaver_builder;
38 }
39
40 /**
41 * Allow this class to be used as a callback for pagination
42 * @param \WP_Post $post
43 *
44 * @return array
45 */
46 public function __invoke( \WP_Post $post ) {
47 return $this->transform( $post );
48 }
49
50 /**
51 * @param \WP_Post $post
52 *
53 * @return array
54 */
55 public function transform( \WP_Post $post ) {
56 $author = get_the_author_meta( 'display_name', $post->post_author );
57 $date = get_the_date( '', $post );
58 $template = get_post_meta( $post->ID, '_wp_page_template', true );
59
60 $thumb_id = get_post_thumbnail_id( $post );
61 $thumb_data = wp_prepare_attachment_for_js( $thumb_id );
62
63 $response = [
64 'author' => $author,
65 'commentsAllowed' => 'open' === $post->comment_status ? true : false,
66 'excerpt' => $post->post_excerpt,
67 'date' => $date,
68 'editUrl' => get_edit_post_link( $post->ID, '' ),
69 'id' => $post->ID,
70 'labels' => [],
71 'order' => $post->menu_order,
72 'parent' => $post->post_parent,
73 'password' => $post->post_password,
74 'pingbacksAllowed' => 'open' === $post->ping_status ? true : false,
75 'slug' => $post->post_name,
76 'status' => $post->post_status,
77 'template' => empty( $template ) ? 'default' : $template,
78 'terms' => [],
79 'thumbnail' => get_the_post_thumbnail_url( $post, 'thumbnail' ),
80 'thumbnailData' => $thumb_data,
81 'title' => empty( $post->post_title ) ? __( '(no title)', 'fl-assistant' ) : $post->post_title,
82 'trashedStatus' => get_post_meta( $post->ID, '_wp_trash_meta_status', true ),
83 'type' => $post->post_type,
84 'url' => get_permalink( $post ),
85 'visibility' => 'public',
86 'commentsCount' => get_comments_number( $post->ID ),
87 'isSticky' => is_sticky( $post->ID ),
88 ];
89
90 // Post visibility.
91 if ( 'private' === $post->post_status ) {
92 $response['visibility'] = 'private';
93 } elseif ( ! empty( $post->post_password ) ) {
94 $response['visibility'] = 'protected';
95 }
96
97 // Beaver Builder data.
98 if ( $this->beaver_builder->is_installed() ) {
99 $response['bbCanEdit'] = $this->beaver_builder->can_edit_post( $post->ID );
100 $response['bbIsEnabled'] = \FLBuilderModel::is_builder_enabled( $post->ID );
101 $response['bbBranding'] = \FLBuilderModel::get_branding();
102 $response['bbEditUrl'] = \FLBuilderModel::get_edit_url( $post->ID );
103 }
104
105 // Favorites
106 $favorites = $this->notations->get_favorites( 'post', $post->ID, get_current_user_id() );
107 $response['isFavorite'] = ! ! count( $favorites );
108
109 // Labels
110 $labels = $this->notations->get_labels( 'post', $post->ID );
111 foreach ( $labels as $label ) {
112 $response['labels'][] = $label['label_id'];
113 }
114
115 // Terms
116 $taxonomies = get_object_taxonomies( $post->post_type, 'objects' );
117 foreach ( $taxonomies as $tax_slug => $tax ) {
118 if ( ! $tax->public || ! $tax->show_ui ) {
119 continue;
120 }
121 $response['terms'][ $tax_slug ] = $this->terms->find_where(
122 [
123 'taxonomy' => $tax_slug,
124 'object_ids' => [ $post->ID ],
125 'orderby' => 'name',
126 'order' => 'ASC',
127 'fields' => 'ids',
128 ]
129 );
130 }
131
132 return $response;
133 }
134
135 }
136