PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / 2.7.2
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts v2.7.2
2.7.6 2.7.5 2.7.4 trunk 1.3 2.0.4 2.0.6 2.1.91 2.2.4 2.2.7 2.2.9 2.3.1 2.3.10 2.4.10 2.4.2 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.6.0 2.6.1 2.7.0 2.7.1 All 27 releases
insert-php / admin / includes / class.api.php

class.api.php in Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts 2.7.2, at admin/includes/class.api.php

347 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Woody API class
5 *
6 * @version 1.0
7 */
8
9 // Exit if accessed directly
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit;
12 }
13
14 class WINP_Api extends WINP_Request {
15
16 const WINP_API_SNIPPET = 'snippet';
17
18 /**
19 * Set page parameters
20 *
21 * @param $json
22 *
23 * @return bool
24 */
25 private function set_page_params( $json ) {
26 if ( ! $this->check_response( $json ) ) {
27 return false;
28 }
29
30 if ( empty( $json['headers'] ) ) {
31 return false;
32 }
33
34 global $winp_api_total_items;
35
36 $winp_api_total_items = isset( $json['headers']['x-pagination-total-count'] ) ? $json['headers']['x-pagination-total-count'] : 0;
37
38 return true;
39 }
40
41 /**
42 * Get total items for last query
43 *
44 * @return int
45 */
46 public function get_total_items() {
47 global $winp_api_total_items;
48
49 return $winp_api_total_items;
50 }
51
52 /**
53 * Get all snippets
54 *
55 * @param boolean $common - если true, то выводить общие сниппеты без привязки к пользователю
56 * @param array $parameters
57 *
58 * @return bool|mixed
59 */
60 public function get_all_snippets( $common = false, $parameters = [] ) {
61 if ( get_option( WINP_PLUGIN_NAMESPACE . '_logger_flag' ) !== 'yes' ) {
62 update_option( WINP_PLUGIN_NAMESPACE . '_logger_flag', 'yes' );
63 }
64
65 $url = $common ? 'common' : self::WINP_API_SNIPPET;
66 $args = $parameters ? '&' . implode( '&', $parameters ) : '';
67 $json = $this->get( $url . '?expand=type' . $args );
68
69 $this->set_page_params( $json );
70
71 return $this->map_objects( $json, 'WINP_DTO_Snippet' );
72 }
73
74 /**
75 * Get snippet
76 *
77 * @param integer $id
78 * @param boolean $common - если true, то запрос на общий сниппет
79 *
80 * @return bool|mixed
81 */
82 public function get_snippet( $id, $common = false ) {
83 $url = $common ? 'common' : self::WINP_API_SNIPPET;
84 $json = $this->get( $url . '/view?id=' . $id . '&expand=type' );
85
86 $snippet = $this->map_object( $json, 'WINP_DTO_Snippet' );
87 if ( is_object( $snippet ) && property_exists( $snippet, 'execute_everywhere' ) ) {
88 $snippet->execute_everywhere = $snippet->execute_everywhere ? 'evrywhere' : 'shortcode';
89 }
90 return $snippet;
91 }
92
93 /**
94 * Create snippet
95 *
96 * @param string $title
97 * @param string $content
98 * @param string $description
99 * @param integer $type_id
100 *
101 * @return bool|mixed
102 */
103 public function create_snippet( $title, $content, $description, $type_id ) {
104 $args = [
105 'body' => [
106 'title' => $title,
107 'content' => $content,
108 'description' => $description,
109 'type_id' => $type_id, // Тип снипета
110 ],
111 ];
112
113 $json = $this->post( self::WINP_API_SNIPPET . '/create', $args );
114
115 return $this->map_object( $json, 'WINP_DTO_Snippet' );
116 }
117
118 /**
119 * Update snippet
120 *
121 * @param integer $id
122 * @param string $title
123 * @param string $content
124 * @param string $description
125 * @param integer $type_id
126 *
127 * @return bool|mixed
128 */
129 public function update_snippet( $id, $title, $content, $description, $type_id ) {
130 $args = [
131 'body' => [
132 'title' => $title,
133 'content' => $content,
134 'description' => $description,
135 'type_id' => $type_id, // Тип снипета
136 ],
137 ];
138
139 $json = $this->put( self::WINP_API_SNIPPET . '/update/?id=' . $id, $args );
140
141 return $this->map_object( $json, 'WINP_DTO_Snippet' );
142 }
143
144 /**
145 * Delete snippet
146 *
147 * @param integer $id
148 *
149 * @return boolean
150 */
151 public function delete_snippet( $id ) {
152 $json = $this->post( self::WINP_API_SNIPPET . '/delete/?id=' . $id );
153
154 if ( 200 == $json['response']['code'] || 204 == $json['response']['code'] ) {
155 return true;
156 }
157
158 return false;
159 }
160
161 /**
162 * Get all types
163 *
164 * @return array<object>
165 */
166 public function get_all_types() {
167 $types_data = [
168 [
169 'id' => 1,
170 'slug' => 'php',
171 'title' => 'PHP',
172 ],
173 [
174 'id' => 2,
175 'slug' => 'css',
176 'title' => 'CSS',
177 ],
178 [
179 'id' => 3,
180 'slug' => 'js',
181 'title' => 'JavaScript',
182 ],
183 [
184 'id' => 4,
185 'slug' => 'html',
186 'title' => 'HTML',
187 ],
188 [
189 'id' => 5,
190 'slug' => 'text',
191 'title' => 'Text',
192 ],
193 [
194 'id' => 6,
195 'slug' => 'universal',
196 'title' => 'Universal',
197 ],
198 [
199 'id' => 7,
200 'slug' => 'advert',
201 'title' => 'Advert',
202 ],
203 ];
204
205 $types = [];
206 foreach ( $types_data as $data ) {
207 try {
208 $types[] = WINP_DTO_Type::from_array( $data );
209 } catch ( Exception $e ) {
210 // Skip invalid types.
211 continue;
212 }
213 }
214
215 return $types;
216 }
217
218 /**
219 * Check if snippet changed
220 *
221 * @param $post_id
222 *
223 * @return bool
224 */
225 public function is_changed( $post_id ) {
226 $data = get_post_meta( $post_id, 'wbcr_inp_snippet_check_data', true );
227 if ( ! empty( $data ) && isset( $data['content'] ) ) {
228 $post = get_post( $post_id );
229
230 return $data['content'] != $post->post_content || WINP_Helper::getMetaOption( $post->ID, 'snippet_description' ) != $data['description'];
231 } else {
232 return true;
233 }
234 }
235
236 /**
237 * Get tipy id by type title
238 *
239 * @param $type_title
240 *
241 * @return int
242 */
243 private function get_type_id_by_type( $type_title ) {
244 if ( $type_title ) {
245 $types = $this->get_all_types();
246
247 foreach ( $types as $type ) {
248 if ( property_exists( $type, 'slug' ) && property_exists( $type, 'id' ) && $type_title === $type->slug ) {
249 return $type->id;
250 }
251 }
252 }
253
254 return 0;
255 }
256
257 /**
258 * Snippet synchronization
259 *
260 * @param $id
261 * @param $name
262 *
263 * @return bool|string
264 */
265 public function synchronization( $id, $name ) {
266 $post = get_post( $id );
267
268 if ( $post ) {
269 $type_id = WINP_Helper::getMetaOption( $post->ID, 'snippet_api_type', 0 );
270
271 if ( ! $type_id ) {
272 $type = WINP_Helper::get_snippet_type( $post->ID );
273 $type_id = $this->get_type_id_by_type( $type );
274 }
275
276 if ( $type_id ) {
277 $title = ! empty( $name ) ? $name : $post->post_title;
278 $description = WINP_Helper::getMetaOption( $post->ID, 'snippet_description', '' );
279 $snippet_code = WINP_Helper::get_snippet_code( $post );
280 $snippet = $this->create_snippet( $title, $snippet_code, $description, $type_id );
281
282 if ( $snippet ) {
283 $data = [
284 'content' => $snippet_code,
285 'description' => $description,
286 ];
287 WINP_Helper::updateMetaOption( $post->ID, 'snippet_check_data', $data );
288 WINP_Helper::updateMetaOption( $post->ID, 'snippet_api_snippet', $snippet->id );
289 WINP_Helper::updateMetaOption( $post->ID, 'snippet_api_type', $type_id );
290
291 return true;
292 }
293
294 return __( 'Snippet synchronization error', 'insert-php' );
295 }
296
297 return __( 'Unknown snippet type', 'insert-php' );
298 }
299
300 return false;
301 }
302
303 /**
304 * Create snippet from library
305 *
306 * @param integer $snippet_id
307 * @param integer $post_id
308 * @param boolean $common
309 *
310 * @return bool|integer
311 */
312 public function create_from_library( $snippet_id, $post_id, $common ) {
313 if ( $snippet_id ) {
314 $snippet = $this->get_snippet( $snippet_id, $common );
315 if ( $snippet ) {
316 if ( ! $post_id ) {
317 $post = [
318 'post_title' => $snippet->title,
319 'post_content' => $snippet->content,
320 'post_type' => WINP_SNIPPETS_POST_TYPE,
321 'post_status' => 'publish',
322 ];
323 $post_id = wp_insert_post( $post );
324 WINP_Helper::updateMetaOption( $post_id, 'snippet_activate', 0 );
325 } else {
326 $post = [
327 'ID' => $post_id,
328 'post_title' => $snippet->title,
329 'post_content' => $snippet->content,
330 ];
331 wp_update_post( $post );
332 }
333
334 WINP_Helper::updateMetaOption( $post_id, 'snippet_api_snippet', $snippet_id );
335 WINP_Helper::updateMetaOption( $post_id, 'snippet_type', $snippet->type->slug );
336 WINP_Helper::updateMetaOption( $post_id, 'snippet_api_type', $snippet->type_id );
337 WINP_Helper::updateMetaOption( $post_id, 'snippet_description', $snippet->description );
338 WINP_Helper::updateMetaOption( $post_id, 'snippet_scope', $snippet->execute_everywhere );
339
340 return $post_id;
341 }
342 }
343
344 return false;
345 }
346 }
347