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 +310 -196 1.02.2.1 View file →
@@ -1,264 +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;
15 -
16 - return false;
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;
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;
33 -
34 - return false;
35 -
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;
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);
47 -
48 - return false;
49 -
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 );
50 96 }
51 97
52 -function sh_cd_save_shortcode($slug, $data, $id = false)
53 -{
54 - if (!is_admin())
55 - return false;
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 - if (false == $id && empty($slug))
58 - return false;
106 + if ( true === empty( $text ) ) {
107 + return;
108 + }
59 109
60 - global $wpdb;
110 + printf( '<div class="%s"><p>%s</p></div>',
111 + true === $error ? 'error' : 'updated',
112 + esc_html( $text )
113 + );
61 114
62 - $slug = sh_cd_get_slug($slug);
115 + //TODO: Hook this to use admin_notices
116 +}
63 117
64 - $result = false;
118 +/**
119 + * Fetch cache item
120 + *
121 + * @param $key
122 + *
123 + * @return mixed
124 + */
125 +function sh_cd_cache_get( $key ) {
65 126
66 - if ($id)
67 - {
68 - //Update data (Slug can never be updated!)
69 - $result = $wpdb->update(
70 - $wpdb->prefix . SH_CD_TABLE,
71 - array(
72 - 'data' => $data
73 - ),
74 - array( 'id' => $id),
75 - array(
76 - '%s'
77 - ),
78 - array( '%d' )
79 - );
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 );
80 158 }
81 - else
82 - {
83 - $result = $wpdb->insert(
84 - $wpdb->prefix . SH_CD_TABLE,
85 - array(
86 - 'slug' => $slug,
87 - 'data' => $data
88 - ),
89 - array(
90 - '%s',
91 - '%s'
92 - )
93 - );
94 - }
95 -
96 - if (false === $result) {
97 - return false;
98 - }
99 - else
100 - {
101 - return true;
102 - }
103 -
104 159 }
105 160
106 -function sh_cd_delete_shortcode($id)
107 -{
108 - if (!is_admin() || !is_numeric($id))
109 - return false;
161 +/**
162 + * Delete cache item
163 + *
164 + * @param $key
165 + *
166 + * @return mixed
167 + */
168 +function sh_cd_cache_delete( $key ) {
110 169
111 - global $wpdb;
170 + $key = sh_cd_cache_generate_key( $key );
112 171
113 - if (false === $wpdb->delete( $wpdb->prefix . SH_CD_TABLE, array( 'id' => $id ) )) {
114 - return false;
115 - }
116 - else {
117 - return true;
118 - }
119 -
172 + return delete_transient( $key );
120 173 }
121 174
122 -function sh_cd_get_slug($text)
123 -{
124 - if(!empty($text))
125 - {
126 - $text = sanitize_title($text);
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 +}
127 185
128 - $original_slug = $text;
186 +/**
187 + * Return link to list own shortcodes
188 + *
189 + * @return mixed
190 + */
191 +function sh_cd_link_your_shortcodes() {
129 192
130 - $try = 1;
193 + $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes');
131 194
132 - // If slug exists, then fetch a unique one!
133 - while (!sh_cd_is_slug_unique($text))
134 - {
135 - $text = $original_slug . '_' . $try;
136 -
137 - $try++;
138 - }
139 - }
195 + return esc_url( $link );
196 +}
140 197
141 - return $text;
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 );
142 208 }
143 209
144 -function sh_cd_is_slug_unique($slug)
145 -{
146 - if (!is_admin() || empty($slug))
147 - return false;
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 - global $wpdb;
217 + $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=edit&id=' . (int) $id );
150 218
151 - $sql = $wpdb->prepare('SELECT count(slug) FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where slug = %s', $slug);
219 + return esc_url( $link );
220 +}
152 221
153 - $row = $wpdb->get_var( $sql );
222 +/**
223 + * Return link to delete own shortcode
224 + *
225 + * @return mixed
226 + */
227 +function sh_cd_link_your_shortcodes_delete( $id ) {
154 228
155 - if(0 == $row)
156 - {
157 - return true;
158 - }
159 - else
160 - {
161 - return false;
162 - }
229 + $link = admin_url('admin.php?page=sh-cd-shortcode-variables-your-shortcodes&action=delete&id=' . (int) $id );
163 230
231 + return esc_url( $link );
232 +}
164 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 '';
165 252 }
166 253
167 -function sh_cd_create_database_table()
168 -{
169 - global $wpdb;
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 ) {
170 261
171 - $table_name = $wpdb->prefix . SH_CD_TABLE;
172 -
173 - $charset_collate = $wpdb->get_charset_collate();
262 + $data = [];
174 263
175 - $sql = "CREATE TABLE $table_name (
176 - id mediumint(9) NOT NULL AUTO_INCREMENT,
177 - slug varchar(100) NOT NULL,
178 - data text,
179 - UNIQUE KEY id (id)
180 - ) $charset_collate;";
264 + foreach ( $keys as $key ) {
181 265
182 - $wpdb->query($sql);
266 + if ( true === isset( $_POST[ $key ] ) ) {
267 + $data[ $key ] = $_POST[ $key ];
268 + } else {
269 + $data[ $key ] = '';
270 + }
183 271
272 + }
273 +
274 + return $data;
184 275 }
185 276
186 -function sh_cd_display_message($text, $error = false)
187 -{
188 - if (!empty($text))
189 - {
190 - $class = (($error) ? 'error' : 'updated');
277 +/**
278 + * Toggle the status of a shortcode
279 + *
280 + * @param $id
281 + */
282 +function sh_cd_toggle_status( $id ) {
191 283
192 - echo '<div class="' . $class . '">
193 - <p>' . $text . '</p>
194 - </div>';
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;
195 293 }
294 +
295 + return NULL;
196 296 }
197 297
198 -function sh_cd_create_dialog_jquery_code($title, $message, $class_used_to_prompt_confirmation, $js_call = false)
199 -{
200 - global $wp_scripts;
201 - $queryui = $wp_scripts->query('jquery-ui-core');
202 - $url = "//ajax.googleapis.com/ajax/libs/jqueryui/".$queryui->ver."/themes/smoothness/jquery-ui.css";
203 - wp_enqueue_script( 'jquery-ui-dialog' );
204 - wp_enqueue_style('jquery-ui-smoothness', $url, false, null);
205 298
206 - $id_hash = md5($title . $message . $class_used_to_prompt_confirmation);
299 +/**
300 + * Display a table of premade shortcodes
301 + *
302 + * @param string $display
303 + */
304 +function sh_cd_display_premade_shortcodes( $display = 'all' ) {
207 305
208 - ?>
209 - <div id='<?php echo $id_hash; ?>' title='<?php echo $title; ?>'>
210 - <p><?php echo $message; ?></p>
211 - </div>
212 - <script>
213 - jQuery(function($) {
214 -
215 - var $info = $('#<?php echo $id_hash; ?>');
216 -
217 - $info.dialog({
218 - 'dialogClass' : 'wp-dialog',
219 - 'modal' : true,
220 - 'autoOpen' : false
221 - });
222 -
223 - $('.<?php echo $class_used_to_prompt_confirmation; ?>').click(function(event) {
224 -
225 - event.preventDefault();
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() );
226 308
227 - target_url = $(this).attr('href');
228 -
229 - var $info = $('#<?php echo $id_hash; ?>');
230 -
231 - $info.dialog({
232 - 'dialogClass' : 'wp-dialog',
233 - 'modal' : true,
234 - 'autoOpen' : false,
235 - 'closeOnEscape' : true,
236 - 'buttons' : {
237 - 'Yes': function() {
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 + }
238 322
239 - <?php if ($js_call != false): ?>
240 - <?php echo $js_call; ?>
323 + $html = '<table class="widefat sh-cd-table" width="100%">
324 + <tr class="row-title">
325 + <th class="row-title" width="30%">Shortcode</th>';
241 326
242 - $(this).dialog('close');
243 - <?php else: ?>
244 - window.location.href = target_url;
245 - <?php endif; ?>
246 - },
247 - 'No': function() {
248 - $(this).dialog('close');
249 - }
250 - }
251 - });
327 + if ( true === $show_premium_col) {
328 + $html .= '<th class="row-title">Premium</th>';
329 + }
252 330
253 - $info.dialog('open');
254 - });
331 + $html .= '<th width="*">Description</th>
332 + </tr>';
255 333
256 - });
334 + $class = '';
257 335
336 + foreach ( $shortcodes as $key => $data ) {
258 337
338 + $class = ($class == 'alternate') ? '' : 'alternate';
259 339
340 + $shortcode = '[' . SH_CD_SHORTCODE. ' slug="' . $key . '"]';
260 341
261 - </script>
342 + $premium_shortcode = ( true === $data['premium'] );
262 343
263 - <?php
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 + );
264 378 }