PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.0.2
Jetpack – WP Security, Backup, Speed, & Growth v12.0.2
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / json-endpoints / class.wpcom-json-api-list-dropdown-pages-endpoint.php
jetpack / json-endpoints Last commit date
jetpack 3 years ago class.wpcom-json-api-add-widget-endpoint.php 3 years ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 5 years ago class.wpcom-json-api-bulk-delete-post-endpoint.php 4 years ago class.wpcom-json-api-bulk-restore-post-endpoint.php 4 years ago class.wpcom-json-api-bulk-update-comments-endpoint.php 4 years ago class.wpcom-json-api-comment-endpoint.php 4 years ago class.wpcom-json-api-delete-media-endpoint.php 4 years ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 3 years ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 5 years ago class.wpcom-json-api-get-comment-counts-endpoint.php 4 years ago class.wpcom-json-api-get-comment-endpoint.php 4 years ago class.wpcom-json-api-get-comment-history-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 4 years ago class.wpcom-json-api-get-customcss.php 4 years ago class.wpcom-json-api-get-media-endpoint.php 4 years ago class.wpcom-json-api-get-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-media-v1-2-endpoint.php 3 years ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-post-endpoint.php 4 years ago class.wpcom-json-api-get-post-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-site-endpoint.php 3 years ago class.wpcom-json-api-get-site-v1-2-endpoint.php 3 years ago class.wpcom-json-api-get-taxonomies-endpoint.php 4 years ago class.wpcom-json-api-get-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-get-term-endpoint.php 4 years ago class.wpcom-json-api-list-comments-endpoint.php 3 years ago class.wpcom-json-api-list-dropdown-pages-endpoint.php 3 years ago class.wpcom-json-api-list-embeds-endpoint.php 4 years ago class.wpcom-json-api-list-media-endpoint.php 4 years ago class.wpcom-json-api-list-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-list-media-v1-2-endpoint.php 3 years ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 4 years ago class.wpcom-json-api-list-post-types-endpoint.php 3 years ago class.wpcom-json-api-list-posts-endpoint.php 3 years ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 3 years ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 3 years ago class.wpcom-json-api-list-roles-endpoint.php 4 years ago class.wpcom-json-api-list-shortcodes-endpoint.php 4 years ago class.wpcom-json-api-list-terms-endpoint.php 4 years ago class.wpcom-json-api-list-users-endpoint.php 3 years ago class.wpcom-json-api-menus-v1-1-endpoint.php 4 years ago class.wpcom-json-api-post-endpoint.php 3 years ago class.wpcom-json-api-post-v1-1-endpoint.php 3 years ago class.wpcom-json-api-render-embed-endpoint.php 4 years ago class.wpcom-json-api-render-embed-reversal-endpoint.php 4 years ago class.wpcom-json-api-render-endpoint.php 3 years ago class.wpcom-json-api-render-shortcode-endpoint.php 4 years ago class.wpcom-json-api-sharing-buttons-endpoint.php 3 years ago class.wpcom-json-api-site-settings-endpoint.php 3 years ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 3 years ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 3 years ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 3 years ago class.wpcom-json-api-site-user-endpoint.php 4 years ago class.wpcom-json-api-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-update-comment-endpoint.php 3 years ago class.wpcom-json-api-update-customcss.php 4 years ago class.wpcom-json-api-update-media-endpoint.php 4 years ago class.wpcom-json-api-update-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-update-post-endpoint.php 3 years ago class.wpcom-json-api-update-post-v1-1-endpoint.php 3 years ago class.wpcom-json-api-update-post-v1-2-endpoint.php 3 years ago class.wpcom-json-api-update-site-homepage-endpoint.php 4 years ago class.wpcom-json-api-update-site-logo-endpoint.php 4 years ago class.wpcom-json-api-update-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-update-term-endpoint.php 4 years ago class.wpcom-json-api-update-user-endpoint.php 4 years ago class.wpcom-json-api-upload-media-endpoint.php 4 years ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 3 years ago
class.wpcom-json-api-list-dropdown-pages-endpoint.php
220 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 /**
4 * List dropdown pages endpoint.
5 */
6 new WPCOM_JSON_API_List_Dropdown_Pages_Endpoint(
7 array(
8
9 'description' => 'Get a list of pages to be displayed as options in a select-a-page-dropdown.',
10 'min_version' => '1.1',
11 'max_version' => '1.1',
12
13 'group' => 'posts',
14 'stat' => 'posts:dropdown-pages',
15
16 'method' => 'GET',
17 'path' => '/sites/%s/dropdown-pages/',
18 'path_labels' => array(
19 '$site' => '(int|string) Site ID or domain',
20 ),
21
22 'allow_fallback_to_jetpack_blog_token' => true,
23
24 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/dropdown-pages/',
25 )
26 );
27
28 /**
29 * Endpoint class responsible for listing pages to be displayed as options in a select-a-page-dropdown.
30 *
31 * /sites/%s/dropdown-pages/ -> $blog_id
32 */
33 class WPCOM_JSON_API_List_Dropdown_Pages_Endpoint extends WPCOM_JSON_API_Endpoint {
34
35 /**
36 * Page object format.
37 *
38 * @var array
39 */
40 public $dropdown_page_object_format = array(
41 'ID' => '(int) The page ID.',
42 'title' => '(string) The page title.',
43 'children' => '(array:dropdown_page) An array of child pages.',
44 );
45
46 /**
47 * The response format.
48 *
49 * @var array
50 */
51 public $response_format = array(
52 'found' => '(int) The number of pages found.',
53 'dropdown_pages' => '(array:dropdown_page) An array of dropdown_page objects.',
54 );
55
56 /**
57 * List of pages indexed by their page ID.
58 *
59 * @var array<int,WP_Post>
60 */
61 private $pages_by_id = array();
62
63 /**
64 * List of pages indexed by their parent page ID.
65 *
66 * @var array<int,WP_Post>
67 */
68 private $pages_by_parent = array();
69
70 /**
71 * API callback.
72 *
73 * @param string $path - the path.
74 * @param int $blog_id - the blog ID.
75 * @return stdClass[] $pages - An array of page objects. Each page object includes ID and title properties and may include children property. This makes each page object a tree-like data structure.
76 */
77 public function callback( $path = '', $blog_id = 0 ) {
78 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
79 if ( is_wp_error( $blog_id ) ) {
80 return $blog_id;
81 }
82
83 $pages = get_pages();
84
85 if ( empty( $pages ) ) {
86 return array(
87 'found' => 0,
88 'dropdown_pages' => array(),
89 );
90 }
91
92 $this->pages_by_id = self::to_pages_by_id( $pages );
93 $this->pages_by_parent = self::to_pages_by_parent( $pages );
94 $dropdown_pages = $this->create_dropdown_pages();
95 return array(
96 'found' => count( $dropdown_pages ),
97 'dropdown_pages' => $dropdown_pages,
98 );
99 }
100
101 /**
102 * Convert a list of pages to a list of pages by page ID.
103 *
104 * @param array<WP_Post> $pages - array of pages.
105 * @return array<int,WP_Post> $pages_by_page_id - indexed array of pages by page ID where index is page ID.
106 */
107 private static function to_pages_by_id( $pages ) {
108 $pages_by_page_id = array();
109 foreach ( $pages as $page ) {
110 if ( isset( $page->ID ) ) {
111 $pages_by_page_id[ $page->ID ] = $page;
112 }
113 }
114 return $pages_by_page_id;
115 }
116
117 /**
118 * Convert a list of pages to a list of pages by parent.
119 *
120 * @param array<WP_Post> $pages - array of pages.
121 * @return array<int,WP_Post> $pages_by_parent - indexed array of pages by parent where index is page ID.
122 */
123 private static function to_pages_by_parent( $pages ) {
124 $pages_by_parent = array();
125 foreach ( $pages as $page ) {
126 if ( empty( $page->post_parent ) ) {
127 $pages_by_parent['root'][] = $page;
128 } else {
129 $pages_by_parent[ $page->post_parent ][] = $page;
130 }
131 }
132 return $pages_by_parent;
133 }
134
135 /**
136 * Convert a list of pages to a list of dropdown pages.
137 *
138 * @return array<stdClass> $dropdown_pages - array of dropdown pages.
139 */
140 private function create_dropdown_pages() {
141 $dropdown_pages = array();
142
143 if ( ! empty( $this->pages_by_parent['root'] ) ) {
144 foreach ( $this->pages_by_parent['root'] as $root_page ) {
145 $dropdown_pages[] = $this->to_dropdown_page( $root_page );
146 }
147 }
148
149 if ( ! empty( $this->pages_by_id ) ) {
150 // In case there were some orphans
151 // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
152 foreach ( $this->pages_by_id as $_page_id => $page ) {
153 $dropdown_pages[] = $this->to_dropdown_page( $page );
154 }
155 }
156
157 return $dropdown_pages;
158 }
159
160 /**
161 * Convert a page to a dropdown page.
162 *
163 * @param WP_Post $page - the page.
164 * @return stdClass|false $dropdown_page - the dropdown page.
165 */
166 private function to_dropdown_page( $page ) {
167 if ( ! isset( $page->ID ) ) {
168 return false;
169 }
170
171 $title = $this->get_page_title( $page );
172
173 if ( ! isset( $this->pages_by_parent[ $page->ID ] ) ) {
174 unset( $this->pages_by_id[ $page->ID ] );
175 return (object) array(
176 'ID' => $page->ID,
177 'title' => $title,
178 );
179 }
180
181 $children = array();
182 foreach ( $this->pages_by_parent[ $page->ID ] as $child_page ) {
183 $children[] = $this->to_dropdown_page( $child_page );
184 }
185
186 unset( $this->pages_by_id[ $page->ID ] );
187 unset( $this->pages_by_parent[ $page->ID ] );
188 return (object) array(
189 'ID' => $page->ID,
190 'title' => $title,
191 'children' => $children,
192 );
193 }
194
195 /**
196 * Get the page title.
197 *
198 * @param WP_Post $page - the page.
199 * @return string $page_title - the page title.
200 */
201 private function get_page_title( $page ) {
202 $title = $page->post_title;
203 if ( '' === $title ) {
204 /* translators: %d: ID of a post. */
205 $title = sprintf( __( '#%d (no title)', 'jetpack' ), $page->ID );
206 }
207
208 /**
209 * Filters the page title when creating an HTML drop-down list of pages.
210 *
211 * @since 3.1.0
212 *
213 * @param string $title Page title.
214 * @param WP_Post $page Page data object.
215 */
216 $title = apply_filters( 'list_pages', $title, $page );
217 return $title;
218 }
219 }
220