PluginProbe
Snippet Shortcodes / 3.0.1
Snippet Shortcodes v3.0.1
5.2.1 5.2 5.1.8 5.1.6 5.1.7 5.1.5 trunk 1.0 1.1 1.2 1.3 1.3.1 1.4 1.5 1.5.1 1.6 1.6.1 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.8 2.0 2.0.1 All 74 releases
shortcode-variables / includes / functions.php

functions.php in Snippet Shortcodes 3.0.1, at includes/functions.php

455 lines 9.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 defined('ABSPATH') or die('Jog on!');
4
5 /**
6 * Save / Insert a shortcode
7 *
8 * @return bool
9 */
10 function sh_cd_shortcodes_save_post() {
11
12 // Capture the raw $_POST fields, the save functions will process and validate the data
13 $shortcode = sh_cd_get_values_from_post( [ 'id', 'slug', 'previous_slug', 'data', 'disabled', 'multisite' ] );
14
15 return sh_cd_db_shortcodes_save( $shortcode );
16 }
17
18 /**
19 * Replace user parameters within a shortcode e.g. look for %%parameter%% and replace
20 *
21 * @param $shortcode
22 * @param $user_defined_parameters
23 *
24 * @return mixed
25 */
26 function sh_cd_apply_user_defined_parameters( $shortcode, $user_defined_parameters ){
27
28 // Ensure we have something to do!
29 if ( true === empty( $user_defined_parameters ) || false === is_array( $user_defined_parameters ) ) {
30 return $shortcode;
31 }
32
33 foreach ( $user_defined_parameters as $key => $value ) {
34 $shortcode = str_replace( '%%' . $key . '%%', $value, $shortcode );
35 }
36
37 return $shortcode;
38 }
39
40 /**
41 * Generate a unique slug
42 *
43 * @param $slug
44 *
45 * @return string
46 */
47 function sh_cd_slug_generate( $slug, $exising_id = NULL ) {
48
49 if ( true === empty( $slug ) ) {
50 return NULL;
51 }
52
53 $slug = sanitize_title( $slug );
54
55 $original_slug = $slug;
56
57 $try = 1;
58
59 // Ensure the slug is unique
60 while ( false === sh_cd_slug_is_unique( $slug, $exising_id ) ) {
61
62 $slug = sprintf( '%s_%d', $original_slug, $try );
63
64 $try++;
65 }
66
67 return $slug;
68 }
69
70 /**
71 * Clone an existing shortcode!
72 *
73 * @param $id
74 *
75 * @return bool
76 */
77 function sh_cd_clone( $id ) {
78
79 if( false === sh_cd_license_is_premium() ) {
80 return true;
81 }
82
83 if ( false === is_numeric( $id ) ) {
84 return false;
85 }
86
87 $to_be_cloned = sh_cd_db_shortcodes_by_id( $id );
88
89 if ( true === empty( $to_be_cloned ) ) {
90 return false;
91 }
92
93 unset( $to_be_cloned['id'] );
94
95 return sh_cd_db_shortcodes_save( $to_be_cloned );
96 }
97
98 /**
99 * Display message in admin UI
100 *
101 * @param $text
102 * @param bool $error
103 */
104 function sh_cd_message_display( $text, $error = false ) {
105
106 if ( true === empty( $text ) ) {
107 return;
108 }
109
110 printf( '<div class="%s"><p>%s</p></div>',
111 true === $error ? 'error' : 'updated',
112 esc_html( $text )
113 );
114
115 //TODO: Hook this to use admin_notices
116 }
117
118 /**
119 * Fetch cache item
120 *
121 * @param $key
122 *
123 * @return mixed
124 */
125 function sh_cd_cache_get( $key ) {
126
127 $key = sh_cd_cache_generate_key( $key );
128
129 return get_transient( $key );
130 }
131
132 /**
133 * Set cache item
134 *
135 * @param $key
136 * @param $data
137 */
138 function sh_cd_cache_set( $key, $data, $expire = NULL ) {
139
140
141 $expire = ( false === empty( $expire ) ) ? (int) $expire : 1 * HOUR_IN_SECONDS;
142
143 $key = sh_cd_cache_generate_key( $key );
144
145 set_transient( $key, $data, $expire );
146 }
147
148 /**
149 * Delete cache for given shortcode slug / ID
150 *
151 * @param $slug_or_key
152 */
153 function sh_cd_cache_delete_by_slug_or_key( $slug_or_key ) {
154
155 if ( true === is_numeric( $slug_or_key ) ) {
156
157 $slug_or_key = sh_cd_db_shortcodes_get_slug_by_id( $slug_or_key );
158
159 sh_cd_cache_delete( $slug_or_key );
160
161 } else {
162 sh_cd_cache_delete( $slug_or_key );
163 }
164
165 // Delete site option
166 $slug_or_key = SH_CD_PREFIX . $slug_or_key;
167
168 delete_site_option( $slug_or_key );
169
170 }
171
172 /**
173 * Delete cache item
174 *
175 * @param $key
176 *
177 * @return mixed
178 */
179 function sh_cd_cache_delete( $key ) {
180
181 $key = sh_cd_cache_generate_key( $key );
182
183 return delete_transient( $key );
184 }
185
186 /**
187 * Generate cache key
188 *
189 * @param $key
190 *
191 * @return string
192 */
193 function sh_cd_cache_generate_key( $key ) {
194 return SH_CD_SHORTCODE . SH_CD_PLUGIN_VERSION . $key;
195 }
196
197 /**
198 * Return link to list own shortcodes
199 *
200 * @return mixed
201 */
202 function sh_cd_link_your_shortcodes() {
203
204 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes');
205
206 return esc_url( $link );
207 }
208
209 /**
210 * Return link to add own shortcode
211 *
212 * @return mixed
213 */
214 function sh_cd_link_your_shortcodes_add() {
215
216 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=add');
217
218 return esc_url( $link );
219 }
220
221 /**
222 * Return link to edit own shortcode
223 *
224 * @return mixed
225 */
226 function sh_cd_link_your_shortcodes_edit( $id ) {
227
228 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=edit&id=' . (int) $id );
229
230 return esc_url( $link );
231 }
232
233 /**
234 * Return link to delete own shortcode
235 *
236 * @return mixed
237 */
238 function sh_cd_link_your_shortcodes_delete( $id ) {
239
240 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=delete&id=' . (int) $id );
241
242 return esc_url( $link );
243 }
244
245 /**
246 * Either fetch data from the $_POST object or from the array passed in!
247 *
248 * @param $object
249 * @param $key
250 * @return string
251 */
252 function sh_cd_get_value_from_post_or_obj( $object, $key ) {
253
254 if ( true === isset( $_POST[ $key ] ) ) {
255 return $_POST[ $key ];
256 }
257
258 if ( true === isset( $object[ $key ] ) ) {
259 return $object[ $key ];
260 }
261
262 return '';
263 }
264
265 /**
266 * Either fetch data from the $_POST object for the given object keys
267 *
268 * @param $meta_field
269 * @return string
270 */
271 function sh_cd_get_values_from_post( $keys ) {
272
273 $data = [];
274
275 foreach ( $keys as $key ) {
276
277 if ( true === isset( $_POST[ $key ] ) ) {
278 $data[ $key ] = $_POST[ $key ];
279 } else {
280 $data[ $key ] = '';
281 }
282
283 }
284
285 return $data;
286 }
287
288 /**
289 * Toggle the status of a shortcode
290 *
291 * @param $id
292 */
293 function sh_cd_toggle_status( $id ) {
294
295 $slug = sh_cd_db_shortcodes_by_id( (int) $id );
296
297 if ( false === empty( $slug ) ) {
298
299 $status = ( 1 === (int) $slug['disabled'] ) ? 0 : 1 ;
300
301 sh_cd_db_shortcodes_update_status( $id, $status );
302
303 return $status;
304 }
305
306 return NULL;
307 }
308
309 /**
310 * Toggle the multisite of a shortcode
311 *
312 * @param $id
313 */
314 function sh_cd_toggle_multisite( $id ) {
315
316 $slug = sh_cd_db_shortcodes_by_id( (int) $id );
317
318 if ( false === empty( $slug ) ) {
319
320 $multisite = ( 1 === (int) $slug['multisite'] ) ? 0 : 1 ;
321
322 sh_cd_db_shortcodes_update_multisite( $id, $multisite );
323
324 return $multisite;
325 }
326
327 return NULL;
328 }
329
330
331 /**
332 * Display a table of premade shortcodes
333 *
334 * @param string $display
335 */
336 function sh_cd_display_premade_shortcodes( $display = 'all' ) {
337
338 $premium_user = sh_cd_license_is_premium();
339 $upgrade_link = sprintf( '<a class="button" href="%s"><i class="fas fa-check"></i> Upgrade now</a>', sh_cd_license_upgrade_link() );
340
341 switch ( $display ) {
342 case 'free':
343 $shortcodes = sh_cd_shortcode_presets_free_list();
344 $show_premium_col = false;
345 break;
346 case 'premium':
347 $shortcodes = sh_cd_shortcode_presets_premium_list();
348 $show_premium_col = false;
349 break;
350 default:
351 $shortcodes = sh_cd_presets_both_lists();
352 $show_premium_col = true;
353 }
354
355 $html = '<table class="widefat sh-cd-table" width="100%">
356 <tr class="row-title">
357 <th class="row-title" width="30%">Shortcode</th>';
358
359 if ( true === $show_premium_col) {
360 $html .= '<th class="row-title">Premium</th>';
361 }
362
363 $html .= '<th width="*">Description</th>
364 </tr>';
365
366 $class = '';
367
368 foreach ( $shortcodes as $key => $data ) {
369
370 $class = ($class == 'alternate') ? '' : 'alternate';
371
372 $shortcode = '[' . SH_CD_SHORTCODE. ' slug="' . $key . '"]';
373
374 $premium_shortcode = ( true === $data['premium'] );
375
376 $html .= sprintf( '<tr class="%s"><td>%s</td>', $class, esc_html( $shortcode ) );
377
378
379 if ( true === $show_premium_col) {
380
381 $html .= sprintf( '<td align="middle">%s%s</td>',
382 ( true === $premium_shortcode && true === $premium_user ) ? '<i class="fas fa-check"></i>' : '',
383 ( true == $premium_shortcode && false === $premium_user ) ? $upgrade_link : ''
384 );
385 }
386
387 $html .= sprintf( '<td>%s</td></tr>', wp_kses_post( $data['description'] ) );
388
389 }
390
391 $html .= '</table>';
392
393 return $html;
394 }
395
396 /**
397 * Display an upgrade button
398 */
399 function sh_cd_upgrade_button( $css_class = '', $link = NULL ) {
400
401 $link = ( false === empty( $link ) ) ? $link : SH_CD_UPGRADE_LINK . '?hash=' . sh_cd_generate_site_hash() ;
402
403 echo sprintf('<a href="%s" class="button-primary sh-cd-upgrade-button%s"><i class="far fa-credit-card"></i> %s £%d %s</a>',
404 esc_url( $link ),
405 esc_attr( ' ' . $css_class ),
406 __('Upgrade to Premium for ', SH_CD_SLUG),
407 SH_CD_PREMIUM_PRICE,
408 __('a year ', SH_CD_SLUG)
409 );
410 }
411
412 /**
413 * Is multsite functionality active for this install?
414 *
415 * @return bool
416 */
417 function sh_cd_is_multisite_enabled() {
418
419 if ( false === is_multisite() ) {
420 return false;
421 }
422
423 if ( false === sh_cd_license_is_premium() ) {
424 return false;
425 }
426
427 return true;
428 }
429
430 /**
431 * Fetch all multisite slugs
432 *
433 * @return array|null
434 */
435 function sh_cd_multisite_slugs() {
436
437 if ( false === is_multisite() ) {
438 return [];
439 }
440
441 $cache = sh_cd_cache_get( 'sh-cd-multisite-slugs' );
442
443 if ( false !== $cache ) {
444 return $cache;
445 }
446
447 $slugs = sh_cd_db_shortcodes_multisite_slugs();
448
449 $slugs = ( false === empty( $slugs ) ) ? wp_list_pluck( $slugs, 'slug' ) : NULL;
450
451 // Cache this for a short time
452 sh_cd_cache_set( 'sh-cd-multisite-slugs', $slugs, 30 );
453
454 return ( true === is_array( $slugs ) ) ? $slugs : [];
455 }