PluginProbe
Snippet Shortcodes / 2.2.1
Snippet Shortcodes v2.2.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 2.2.1, at includes/functions.php

378 lines 8.0 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' ] );
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 ) {
139
140 $key = sh_cd_cache_generate_key( $key );
141
142 set_transient( $key, $data, 1 * HOUR_IN_SECONDS );
143 }
144
145 /**
146 * Delete cache for given shortcode slug / ID
147 *
148 * @param $slug_or_key
149 */
150 function sh_cd_cache_delete_by_slug_or_key( $slug_or_key ) {
151
152 if ( true === is_numeric( $slug_or_key ) ) {
153
154 sh_cd_cache_delete( sh_cd_db_shortcodes_get_slug_by_id( $slug_or_key ) );
155
156 } else {
157 sh_cd_cache_delete( $slug_or_key );
158 }
159 }
160
161 /**
162 * Delete cache item
163 *
164 * @param $key
165 *
166 * @return mixed
167 */
168 function sh_cd_cache_delete( $key ) {
169
170 $key = sh_cd_cache_generate_key( $key );
171
172 return delete_transient( $key );
173 }
174
175 /**
176 * Generate cache key
177 *
178 * @param $key
179 *
180 * @return string
181 */
182 function sh_cd_cache_generate_key( $key ) {
183 return SH_CD_SHORTCODE . $key;
184 }
185
186 /**
187 * Return link to list own shortcodes
188 *
189 * @return mixed
190 */
191 function sh_cd_link_your_shortcodes() {
192
193 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes');
194
195 return esc_url( $link );
196 }
197
198 /**
199 * Return link to add own shortcode
200 *
201 * @return mixed
202 */
203 function sh_cd_link_your_shortcodes_add() {
204
205 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=add');
206
207 return esc_url( $link );
208 }
209
210 /**
211 * Return link to edit own shortcode
212 *
213 * @return mixed
214 */
215 function sh_cd_link_your_shortcodes_edit( $id ) {
216
217 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=edit&id=' . (int) $id );
218
219 return esc_url( $link );
220 }
221
222 /**
223 * Return link to delete own shortcode
224 *
225 * @return mixed
226 */
227 function sh_cd_link_your_shortcodes_delete( $id ) {
228
229 $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=delete&id=' . (int) $id );
230
231 return esc_url( $link );
232 }
233
234 /**
235 * Either fetch data from the $_POST object or from the array passed in!
236 *
237 * @param $object
238 * @param $key
239 * @return string
240 */
241 function sh_cd_get_value_from_post_or_obj( $object, $key ) {
242
243 if ( true === isset( $_POST[ $key ] ) ) {
244 return $_POST[ $key ];
245 }
246
247 if ( true === isset( $object[ $key ] ) ) {
248 return $object[ $key ];
249 }
250
251 return '';
252 }
253
254 /**
255 * Either fetch data from the $_POST object for the given object keys
256 *
257 * @param $meta_field
258 * @return string
259 */
260 function sh_cd_get_values_from_post( $keys ) {
261
262 $data = [];
263
264 foreach ( $keys as $key ) {
265
266 if ( true === isset( $_POST[ $key ] ) ) {
267 $data[ $key ] = $_POST[ $key ];
268 } else {
269 $data[ $key ] = '';
270 }
271
272 }
273
274 return $data;
275 }
276
277 /**
278 * Toggle the status of a shortcode
279 *
280 * @param $id
281 */
282 function sh_cd_toggle_status( $id ) {
283
284 $slug = sh_cd_db_shortcodes_by_id( (int) $id );
285
286 if ( false === empty( $slug ) ) {
287
288 $status = ( 1 === (int) $slug['disabled'] ) ? 0 : 1 ;
289
290 sh_cd_db_shortcodes_update_status( $id, $status );
291
292 return $status;
293 }
294
295 return NULL;
296 }
297
298
299 /**
300 * Display a table of premade shortcodes
301 *
302 * @param string $display
303 */
304 function sh_cd_display_premade_shortcodes( $display = 'all' ) {
305
306 $premium_user = sh_cd_license_is_premium();
307 $upgrade_link = sprintf( '<a class="button" href="%s"><i class="fas fa-check"></i> Upgrade now</a>', sh_cd_license_upgrade_link() );
308
309 switch ( $display ) {
310 case 'free':
311 $shortcodes = sh_cd_shortcode_presets_free_list();
312 $show_premium_col = false;
313 break;
314 case 'premium':
315 $shortcodes = sh_cd_shortcode_presets_premium_list();
316 $show_premium_col = false;
317 break;
318 default:
319 $shortcodes = sh_cd_presets_both_lists();
320 $show_premium_col = true;
321 }
322
323 $html = '<table class="widefat sh-cd-table" width="100%">
324 <tr class="row-title">
325 <th class="row-title" width="30%">Shortcode</th>';
326
327 if ( true === $show_premium_col) {
328 $html .= '<th class="row-title">Premium</th>';
329 }
330
331 $html .= '<th width="*">Description</th>
332 </tr>';
333
334 $class = '';
335
336 foreach ( $shortcodes as $key => $data ) {
337
338 $class = ($class == 'alternate') ? '' : 'alternate';
339
340 $shortcode = '[' . SH_CD_SHORTCODE. ' slug="' . $key . '"]';
341
342 $premium_shortcode = ( true === $data['premium'] );
343
344 $html .= sprintf( '<tr class="%s"><td>%s</td>', $class, esc_html( $shortcode ) );
345
346
347 if ( true === $show_premium_col) {
348
349 $html .= sprintf( '<td align="middle">%s%s</td>',
350 ( true === $premium_shortcode && true === $premium_user ) ? '<i class="fas fa-check"></i>' : '',
351 ( true == $premium_shortcode && false === $premium_user ) ? $upgrade_link : ''
352 );
353 }
354
355 $html .= sprintf( '<td>%s</td></tr>', esc_html( $data['description'] ) );
356
357 }
358
359 $html .= '</table>';
360
361 return $html;
362 }
363
364 /**
365 * Display an upgrade button
366 */
367 function sh_cd_upgrade_button( $css_class = '', $link = NULL ) {
368
369 $link = ( false === empty( $link ) ) ? $link : SH_CD_UPGRADE_LINK . '?hash=' . sh_cd_generate_site_hash() ;
370
371 echo sprintf('<a href="%s" class="button-primary sh-cd-upgrade-button%s"><i class="far fa-credit-card"></i> %s £%d %s</a>',
372 esc_url( $link ),
373 esc_attr( ' ' . $css_class ),
374 __('Upgrade to Premium for ', SH_CD_SLUG),
375 SH_CD_PREMIUM_PRICE,
376 __('a year ', SH_CD_SLUG)
377 );
378 }