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
← All changes | includes/functions.php +282 -220 1.52.2.1 View file →
@@ -1,316 +1,378 @@
1 1 <?php
2 2
3 3 defined('ABSPATH') or die('Jog on!');
4 4
5 -function sh_cd_get_all_shortcodes()
6 -{
7 - global $wpdb;
5 +/**
6 + * Save / Insert a shortcode
7 + *
8 + * @return bool
9 + */
10 +function sh_cd_shortcodes_save_post() {
8 11
9 - $sql = 'SELECT * FROM ' . $wpdb->prefix . SH_CD_TABLE . ' order by slug asc';
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' ] );
10 14
11 - $rows = $wpdb->get_results( $sql );
15 + return sh_cd_db_shortcodes_save( $shortcode );
16 +}
12 17
13 - if (!is_null($rows))
14 - return $rows;
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 ){
15 27
16 - return false;
28 + // Ensure we have something to do!
29 + if ( true === empty( $user_defined_parameters ) || false === is_array( $user_defined_parameters ) ) {
30 + return $shortcode;
31 + }
17 32
33 + foreach ( $user_defined_parameters as $key => $value ) {
34 + $shortcode = str_replace( '%%' . $key . '%%', $value, $shortcode );
35 + }
36 +
37 + return $shortcode;
18 38 }
19 39
20 -function sh_cd_get_shortcode($id)
21 -{
22 - if (!is_admin())
23 - return false;
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 ) {
24 48
25 - global $wpdb;
49 + if ( true === empty( $slug ) ) {
50 + return NULL;
51 + }
26 52
27 - $sql = $wpdb->prepare('SELECT slug, data FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where id = %d', $id);
53 + $slug = sanitize_title( $slug );
28 54
29 - $row = $wpdb->get_row( $sql );
55 + $original_slug = $slug;
30 56
31 - if (!is_null($row))
32 - return $row;
57 + $try = 1;
33 58
34 - return false;
59 + // Ensure the slug is unique
60 + while ( false === sh_cd_slug_is_unique( $slug, $exising_id ) ) {
35 61
62 + $slug = sprintf( '%s_%d', $original_slug, $try );
63 +
64 + $try++;
65 + }
66 +
67 + return $slug;
36 68 }
37 -function sh_cd_get_shortcode_by_slug($slug)
38 -{
39 - global $wpdb;
40 69
41 - $sql = $wpdb->prepare('SELECT data FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where slug = %s', $slug);
70 +/**
71 + * Clone an existing shortcode!
72 + *
73 + * @param $id
74 + *
75 + * @return bool
76 + */
77 +function sh_cd_clone( $id ) {
42 78
43 - $row = $wpdb->get_var( $sql );
79 + if( false === sh_cd_license_is_premium() ) {
80 + return true;
81 + }
44 82
45 - if (!is_null($row))
46 - return stripslashes($row);
83 + if ( false === is_numeric( $id ) ) {
84 + return false;
85 + }
47 86
48 - return false;
87 + $to_be_cloned = sh_cd_db_shortcodes_by_id( $id );
49 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 );
50 96 }
51 -function sh_cd_get_slug_by_id($id)
52 -{
53 - global $wpdb;
54 97
55 - $sql = $wpdb->prepare('SELECT slug FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where id = %d', $id);
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 ) {
56 105
57 - $row = $wpdb->get_var( $sql );
106 + if ( true === empty( $text ) ) {
107 + return;
108 + }
58 109
59 - if (!is_null($row))
60 - return $row;
110 + printf( '<div class="%s"><p>%s</p></div>',
111 + true === $error ? 'error' : 'updated',
112 + esc_html( $text )
113 + );
61 114
62 - return false;
115 + //TODO: Hook this to use admin_notices
116 +}
63 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 );
64 130 }
65 131
66 -function sh_cd_save_shortcode($slug, $data, $id = false)
67 -{
68 - if (!is_admin())
69 - return false;
132 +/**
133 + * Set cache item
134 + *
135 + * @param $key
136 + * @param $data
137 + */
138 +function sh_cd_cache_set( $key, $data ) {
70 139
71 - if (false == $id && empty($slug))
72 - return false;
140 + $key = sh_cd_cache_generate_key( $key );
73 141
74 - global $wpdb;
142 + set_transient( $key, $data, 1 * HOUR_IN_SECONDS );
143 +}
75 144
76 - $slug = sh_cd_get_slug($slug);
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 ) {
77 151
78 - $result = false;
152 + if ( true === is_numeric( $slug_or_key ) ) {
79 153
80 - if ($id)
81 - {
82 - //Update data (Slug can never be updated!)
83 - $result = $wpdb->update(
84 - $wpdb->prefix . SH_CD_TABLE,
85 - array(
86 - 'data' => $data
87 - ),
88 - array( 'id' => $id),
89 - array(
90 - '%s'
91 - ),
92 - array( '%d' )
93 - );
154 + sh_cd_cache_delete( sh_cd_db_shortcodes_get_slug_by_id( $slug_or_key ) );
94 155
95 - sh_cd_delete_cache(sh_cd_get_slug_by_id($id));
156 + } else {
157 + sh_cd_cache_delete( $slug_or_key );
96 158 }
97 - else
98 - {
99 - $result = $wpdb->insert(
100 - $wpdb->prefix . SH_CD_TABLE,
101 - array(
102 - 'slug' => $slug,
103 - 'data' => $data
104 - ),
105 - array(
106 - '%s',
107 - '%s'
108 - )
109 - );
159 +}
110 160
111 - sh_cd_delete_cache($slug);
112 - }
161 +/**
162 + * Delete cache item
163 + *
164 + * @param $key
165 + *
166 + * @return mixed
167 + */
168 +function sh_cd_cache_delete( $key ) {
113 169
114 - if (false === $result) {
115 - return false;
116 - }
117 - else
118 - {
119 - return true;
120 - }
170 + $key = sh_cd_cache_generate_key( $key );
121 171
172 + return delete_transient( $key );
122 173 }
123 174
124 -function sh_cd_delete_shortcode($id)
125 -{
126 - if (!is_admin() || !is_numeric($id))
127 - return false;
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 +}
128 185
129 - global $wpdb;
186 +/**
187 + * Return link to list own shortcodes
188 + *
189 + * @return mixed
190 + */
191 +function sh_cd_link_your_shortcodes() {
130 192
131 - // Clear cached version
132 - sh_cd_delete_cache(sh_cd_get_slug_by_id($id));
193 + $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes');
133 194
134 - if (false === $wpdb->delete( $wpdb->prefix . SH_CD_TABLE, array( 'id' => $id ) )) {
135 - return false;
136 - }
137 - else {
138 - return true;
139 - }
195 + return esc_url( $link );
196 +}
140 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 );
141 208 }
142 209
143 -function sh_cd_get_slug($text)
144 -{
145 - if(!empty($text))
146 - {
147 - $text = sanitize_title($text);
210 +/**
211 + * Return link to edit own shortcode
212 + *
213 + * @return mixed
214 + */
215 +function sh_cd_link_your_shortcodes_edit( $id ) {
148 216
149 - $original_slug = $text;
217 + $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=edit&id=' . (int) $id );
150 218
151 - $try = 1;
152 - var_dump(in_array($text, sh_cd_shortcode_presets()));
219 + return esc_url( $link );
220 +}
153 221
154 - // If slug exists, then fetch a unique one!
155 - // v1.1: and ensure slug isn't a preset
156 - while (!sh_cd_is_slug_unique($text))
157 - {
158 - $text = $original_slug . '_' . $try;
222 +/**
223 + * Return link to delete own shortcode
224 + *
225 + * @return mixed
226 + */
227 +function sh_cd_link_your_shortcodes_delete( $id ) {
159 228
160 - $try++;
161 - }
162 - }
229 + $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=delete&id=' . (int) $id );
163 230
164 - return $text;
231 + return esc_url( $link );
165 232 }
166 233
167 -function sh_cd_is_slug_unique($slug)
168 -{
169 - if (!is_admin() || empty($slug))
170 - return false;
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 ) {
171 242
172 - // 1.1 Ensure slug is not a prefix
173 - if (sh_cd_is_shortcode_preset($slug))
174 - return false;
243 + if ( true === isset( $_POST[ $key ] ) ) {
244 + return $_POST[ $key ];
245 + }
175 246
176 - global $wpdb;
247 + if ( true === isset( $object[ $key ] ) ) {
248 + return $object[ $key ];
249 + }
177 250
178 - $sql = $wpdb->prepare('SELECT count(slug) FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where slug = %s', $slug);
251 + return '';
252 +}
179 253
180 - $row = $wpdb->get_var( $sql );
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 ) {
181 261
182 - if(0 == $row)
183 - {
184 - return true;
185 - }
186 - else
187 - {
188 - return false;
189 - }
262 + $data = [];
190 263
264 + foreach ( $keys as $key ) {
191 265
266 + if ( true === isset( $_POST[ $key ] ) ) {
267 + $data[ $key ] = $_POST[ $key ];
268 + } else {
269 + $data[ $key ] = '';
270 + }
271 +
272 + }
273 +
274 + return $data;
192 275 }
193 276
194 -function sh_cd_create_database_table()
195 -{
196 - global $wpdb;
277 +/**
278 + * Toggle the status of a shortcode
279 + *
280 + * @param $id
281 + */
282 +function sh_cd_toggle_status( $id ) {
197 283
198 - $table_name = $wpdb->prefix . SH_CD_TABLE;
284 + $slug = sh_cd_db_shortcodes_by_id( (int) $id );
199 285
200 - $charset_collate = $wpdb->get_charset_collate();
286 + if ( false === empty( $slug ) ) {
201 287
202 - $sql = "CREATE TABLE $table_name (
203 - id mediumint(9) NOT NULL AUTO_INCREMENT,
204 - slug varchar(100) NOT NULL,
205 - data text,
206 - UNIQUE KEY id (id)
207 - ) $charset_collate;";
288 + $status = ( 1 === (int) $slug['disabled'] ) ? 0 : 1 ;
208 289
209 - $wpdb->query($sql);
290 + sh_cd_db_shortcodes_update_status( $id, $status );
210 291
211 - update_option('sh-cd-version', SH_CD_PLUGIN_VERSION);
292 + return $status;
293 + }
212 294
295 + return NULL;
213 296 }
214 297
215 -function sh_cd_display_message($text, $error = false)
216 -{
217 - if (!empty($text))
218 - {
219 - $class = (($error) ? 'error' : 'updated');
220 298
221 - echo '<div class="' . $class . '">
222 - <p>' . $text . '</p>
223 - </div>';
224 - }
225 -}
299 +/**
300 + * Display a table of premade shortcodes
301 + *
302 + * @param string $display
303 + */
304 +function sh_cd_display_premade_shortcodes( $display = 'all' ) {
226 305
227 -function sh_cd_create_dialog_jquery_code($title, $message, $class_used_to_prompt_confirmation, $js_call = false)
228 -{
229 - global $wp_scripts;
230 - $queryui = $wp_scripts->query('jquery-ui-core');
231 - $url = "//ajax.googleapis.com/ajax/libs/jqueryui/".$queryui->ver."/themes/smoothness/jquery-ui.css";
232 - wp_enqueue_script( 'jquery-ui-dialog' );
233 - wp_enqueue_style('jquery-ui-smoothness', $url, false, null);
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() );
234 308
235 - $id_hash = md5($title . $message . $class_used_to_prompt_confirmation);
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 + }
236 322
237 - ?>
238 - <div id='<?php echo $id_hash; ?>' title='<?php echo $title; ?>'>
239 - <p><?php echo $message; ?></p>
240 - </div>
241 - <script>
242 - jQuery(function($) {
323 + $html = '<table class="widefat sh-cd-table" width="100%">
324 + <tr class="row-title">
325 + <th class="row-title" width="30%">Shortcode</th>';
243 326
244 - var $info = $('#<?php echo $id_hash; ?>');
327 + if ( true === $show_premium_col) {
328 + $html .= '<th class="row-title">Premium</th>';
329 + }
245 330
246 - $info.dialog({
247 - 'dialogClass' : 'wp-dialog',
248 - 'modal' : true,
249 - 'autoOpen' : false
250 - });
331 + $html .= '<th width="*">Description</th>
332 + </tr>';
251 333
252 - $('.<?php echo $class_used_to_prompt_confirmation; ?>').click(function(event) {
334 + $class = '';
253 335
254 - event.preventDefault();
336 + foreach ( $shortcodes as $key => $data ) {
255 337
256 - target_url = $(this).attr('href');
338 + $class = ($class == 'alternate') ? '' : 'alternate';
257 339
258 - var $info = $('#<?php echo $id_hash; ?>');
340 + $shortcode = '[' . SH_CD_SHORTCODE. ' slug="' . $key . '"]';
259 341
260 - $info.dialog({
261 - 'dialogClass' : 'wp-dialog',
262 - 'modal' : true,
263 - 'autoOpen' : false,
264 - 'closeOnEscape' : true,
265 - 'buttons' : {
266 - 'Yes': function() {
342 + $premium_shortcode = ( true === $data['premium'] );
267 343
268 - <?php if ($js_call != false): ?>
269 - <?php echo $js_call; ?>
344 + $html .= sprintf( '<tr class="%s"><td>%s</td>', $class, esc_html( $shortcode ) );
270 345
271 - $(this).dialog('close');
272 - <?php else: ?>
273 - window.location.href = target_url;
274 - <?php endif; ?>
275 - },
276 - 'No': function() {
277 - $(this).dialog('close');
278 - }
279 - }
280 - });
281 346
282 - $info.dialog('open');
283 - });
347 + if ( true === $show_premium_col) {
284 348
285 - });
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 + }
286 354
355 + $html .= sprintf( '<td>%s</td></tr>', esc_html( $data['description'] ) );
287 356
357 + }
288 358
359 + $html .= '</table>';
289 360
290 - </script>
291 -
292 - <?php
361 + return $html;
293 362 }
294 363
295 -function sh_cd_get_cache($key)
296 -{
297 - $key = sh_cd_generate_cache_key($key);
364 +/**
365 + * Display an upgrade button
366 + */
367 +function sh_cd_upgrade_button( $css_class = '', $link = NULL ) {
298 368
299 - return get_transient($key);
300 -}
301 -function sh_cd_set_cache($key, $data)
302 -{
303 - $key = sh_cd_generate_cache_key($key);
369 + $link = ( false === empty( $link ) ) ? $link : SH_CD_UPGRADE_LINK . '?hash=' . sh_cd_generate_site_hash() ;
304 370
305 - set_transient($key, $data, SH_CD_CACHING_TIME);
306 -}
307 -function sh_cd_delete_cache($key)
308 -{
309 - $key = sh_cd_generate_cache_key($key);
310 -
311 - return delete_transient($key);
312 -}
313 -function sh_cd_generate_cache_key($key)
314 -{
315 - return SH_CD_SHORTCODE . $key;
316 -}
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 +}