PluginProbe
Snippet Shortcodes / 3.2
Snippet Shortcodes v3.2
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/db.php +212 -9 2.03.2 View file →
@@ -15,10 +15,12 @@
15 15
16 16 $sql = "CREATE TABLE $table_name (
17 17 id mediumint(9) NOT NULL AUTO_INCREMENT,
18 18 slug varchar(100) NOT NULL,
19 + previous_slug varchar(100) NOT NULL,
19 20 data text,
20 21 disabled bit default 0,
22 + multisite bit default 0,
21 23 UNIQUE KEY id (id)
22 24 ) $charset_collate;";
23 25
24 26 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
@@ -26,8 +28,32 @@
26 28 dbDelta( $sql );
27 29 }
28 30
29 31 /**
32 + * Build database table for multisite
33 + */
34 +function sh_cd_create_database_table_multisite() {
35 +
36 + global $wpdb;
37 +
38 + $table_name = $wpdb->base_prefix . SH_CD_TABLE_MULTISITE;
39 +
40 + $charset_collate = $wpdb->get_charset_collate();
41 +
42 + $sql = "CREATE TABLE $table_name (
43 + id mediumint(9) NOT NULL AUTO_INCREMENT,
44 + slug varchar(100) NOT NULL,
45 + data text,
46 + site_id int default 0,
47 + UNIQUE KEY id (id)
48 + ) $charset_collate;";
49 +
50 + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
51 +
52 + dbDelta( $sql );
53 +}
54 +
55 +/**
30 56 * Fetch all Shortcodes
31 57 *
32 58 * @return bool
33 59 */
@@ -38,8 +64,20 @@
38 64 return $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . SH_CD_TABLE . ' order by slug asc', ARRAY_A );
39 65 }
40 66
41 67 /**
68 + * Fetch all enabled Shortcodes
69 + *
70 + * @return bool
71 + */
72 +function sh_cd_db_shortcodes_all_enabled() {
73 +
74 + global $wpdb;
75 +
76 + return $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where disabled = 0 order by slug asc', ARRAY_A );
77 +}
78 +
79 +/**
42 80 * Fetch a shortcode by ID (mainly used for quick lookups in admin)
43 81 *
44 82 * @param $id
45 83 *
@@ -48,9 +86,9 @@
48 86 function sh_cd_db_shortcodes_by_id( $id ) {
49 87
50 88 global $wpdb;
51 89
52 - $sql = $wpdb->prepare('SELECT id, slug, data, disabled FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where id = %d', $id);
90 + $sql = $wpdb->prepare('SELECT id, slug, previous_slug, data, disabled, multisite FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where id = %d', $id);
53 91
54 92 return $wpdb->get_row( $sql, ARRAY_A );
55 93 }
56 94
@@ -64,13 +102,29 @@
64 102 function sh_cd_db_shortcodes_by_slug( $slug ) {
65 103
66 104 global $wpdb;
67 105
68 - $sql = $wpdb->prepare('SELECT data FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where slug = %s and disabled <> 1', $slug);
106 + $sqls = [];
69 107
70 - $row = $wpdb->get_var( $sql );
108 + // If multi site functionality is enabled, look there first for the shortcode!
109 + if ( true === sh_cd_is_multisite_enabled() ) {
71 110
72 - return ( false === empty( $row ) ? stripslashes( $row ) : NULL );
111 + $sqls[] = $wpdb->prepare('SELECT data FROM ' . $wpdb->base_prefix . SH_CD_TABLE_MULTISITE . ' where slug = %s', $slug);
112 + }
113 +
114 + $sqls[] = $wpdb->prepare('SELECT data FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where slug = %s and disabled <> 1', $slug);
115 +
116 + foreach ( $sqls as $sql ) {
117 +
118 + $row = $wpdb->get_var( $sql );
119 +
120 + if ( false === empty( $row ) ) {
121 +
122 + return stripslashes( $row );
123 + }
124 + }
125 +
126 + return NULL;
73 127 }
74 128
75 129 /**
76 130 * Get a Shortcode's slug from the slug ID
@@ -100,13 +154,17 @@
100 154 if ( false === is_admin() ) {
101 155 return false;
102 156 }
103 157
158 + $multi_site_enabled = sh_cd_is_multisite_enabled();
159 +
104 160 $shortcode = wp_parse_args( $shortcode, [
105 161 'id' => NULL,
106 162 'slug' => NULL,
163 + 'previous_slug' => NULL,
107 164 'data' => NULL,
108 - 'disabled' => 0
165 + 'disabled' => 0,
166 + 'multisite' => 0
109 167 ]);
110 168
111 169 // We need either a slug or an ID
112 170 if ( true === empty( $shortcode['slug'] ) && true === empty( $shortcode['id'] ) ) {
@@ -113,8 +171,9 @@
113 171 return false;
114 172 }
115 173
116 174 $shortcode['disabled'] = (int) $shortcode['disabled'];
175 + $shortcode['multisite'] = ( true === $multi_site_enabled ) ? (int) $shortcode['multisite'] : 0;
117 176
118 177 global $wpdb;
119 178
120 179 $result = false;
@@ -121,10 +180,9 @@
121 180
122 181 // Updating an existing shortcode?
123 182 if ( false === empty( $shortcode['id'] ) && true === is_numeric( $shortcode['id'] ) ){
124 183
125 - // Once set, a slug cannot be updated.
126 - unset( $shortcode['slug'] );
184 + $shortcode['slug'] = sh_cd_slug_generate( $shortcode['slug'], $shortcode['id'] );
127 185
128 186 $formats = sh_cd_db_get_formats( $shortcode );
129 187
130 188 $result = $wpdb->update(
@@ -135,8 +193,9 @@
135 193 [ '%d' ]
136 194 );
137 195
138 196 sh_cd_cache_delete_by_slug_or_key( $shortcode['id'] );
197 + sh_cd_cache_delete_by_slug_or_key( $shortcode['previous_slug'] );
139 198
140 199 // Adding a new shortcode
141 200 } else {
142 201
@@ -157,12 +216,97 @@
157 216 // a shortcode with the same slug previously exists.
158 217 sh_cd_cache_delete_by_slug_or_key( $shortcode['slug'] );
159 218 }
160 219
220 + if ( false !== $result ) {
221 +
222 + if ( 1 === $shortcode['multisite'] ) {
223 + sh_cd_db_shortcodes_multisite_insert( $shortcode['slug'], $shortcode['data'] );
224 + } else {
225 + sh_cd_db_shortcodes_multisite_delete( $shortcode['slug'] );
226 + }
227 +
228 + sh_cd_cache_delete( $shortcode['slug'] );
229 +
230 + return true;
231 + }
232 +
233 + return false;
234 +}
235 +
236 +
237 +/**
238 + * Insert a multisite shortcode
239 + *
240 + * @param $shortcode
241 + *
242 + * @return bool
243 + */
244 +function sh_cd_db_shortcodes_multisite_insert( $slug, $data ) {
245 +
246 + if ( false === is_admin() ) {
247 + return false;
248 + }
249 +
250 + sh_cd_db_shortcodes_multisite_delete( $slug );
251 +
252 + global $wpdb;
253 +
254 + $shortcode = [
255 + 'slug' => $slug,
256 + 'data' => $data,
257 + 'site_id' => get_current_blog_id()
258 + ];
259 +
260 + $formats = sh_cd_db_get_formats( $shortcode );
261 +
262 + $result = $wpdb->insert(
263 + $wpdb->base_prefix . SH_CD_TABLE_MULTISITE,
264 + $shortcode,
265 + $formats
266 + );
267 +
268 + sh_cd_cache_delete( $slug );
269 +
270 + do_action( 'sh_cd_multisite_changed', $slug );
271 +
161 272 return ( false !== $result );
162 273 }
163 274
164 275 /**
276 + * Delete a multisite shortcode
277 + *
278 + * @param $slug
279 + *
280 + * @return bool
281 + */
282 +function sh_cd_db_shortcodes_multisite_delete( $slug ) {
283 +
284 + global $wpdb;
285 +
286 + $result = $wpdb->delete( $wpdb->base_prefix . SH_CD_TABLE_MULTISITE, [ 'slug' => $slug ], [ '%s' ] );
287 +
288 + sh_cd_cache_delete( $slug );
289 +
290 + do_action( 'sh_cd_multisite_changed', $slug );
291 +
292 + return ( false !== $result );
293 +}
294 +
295 +/**
296 + * Fetch all multisite slugs
297 +
298 + * @return null|array
299 + */
300 +function sh_cd_db_shortcodes_multisite_slugs() {
301 +
302 + global $wpdb;
303 +
304 + return $wpdb->get_results( 'SELECT slug FROM ' . $wpdb->base_prefix . SH_CD_TABLE_MULTISITE, ARRAY_A );
305 +}
306 +
307 +
308 +/**
165 309 * Update a shortcode's status
166 310 *
167 311 * @param $shortcode
168 312 *
@@ -189,8 +333,48 @@
189 333 return ( false !== $result );
190 334 }
191 335
192 336 /**
337 + * Update a shortcode's multisite
338 + *
339 + * @param $shortcode
340 + *
341 + * @return bool
342 + */
343 +function sh_cd_db_shortcodes_update_multisite( $id, $multisite ) {
344 +
345 + if ( false === is_admin() ) {
346 + return false;
347 + }
348 +
349 + global $wpdb;
350 +
351 + $result = $wpdb->update(
352 + $wpdb->prefix . SH_CD_TABLE,
353 + [ 'multisite' => $multisite ],
354 + [ 'id' => $id ],
355 + [ '%d' ],
356 + [ '%d' ]
357 + );
358 +
359 + $shortcode = sh_cd_db_shortcodes_by_id( $id );
360 +
361 + if ( false === empty( $shortcode ) ) {
362 +
363 + if ( 1 === (int) $multisite ) {
364 + sh_cd_db_shortcodes_multisite_insert( $shortcode['slug'], $shortcode['data'] );
365 + } else {
366 + sh_cd_db_shortcodes_multisite_delete( $shortcode['slug'] );
367 + }
368 +
369 + }
370 +
371 + sh_cd_cache_delete_by_slug_or_key( $id );
372 +
373 + return ( false !== $result );
374 +}
375 +
376 +/**
193 377 * Update a shortcode's content
194 378 *
195 379 * @param $shortcode
196 380 *
@@ -211,8 +395,19 @@
211 395 [ '%s' ],
212 396 [ '%d' ]
213 397 );
214 398
399 + $shortcode = sh_cd_db_shortcodes_by_id( $id );
400 +
401 + if ( false === empty( $shortcode ) ) {
402 +
403 + if ( 1 === (int) $shortcode[ 'multisite' ] ) {
404 + sh_cd_db_shortcodes_multisite_insert( $shortcode['slug'], $shortcode['data'] );
405 + } else {
406 + sh_cd_db_shortcodes_multisite_delete( $shortcode['slug'] );
407 + }
408 +
409 + }
215 410 sh_cd_cache_delete_by_slug_or_key( $id );
216 411
217 412 return ( false !== $result );
218 413 }
@@ -252,10 +447,13 @@
252 447
253 448 $lookup = [
254 449 'id' => '%d',
255 450 'slug' => '%s',
451 + 'previous_slug' => '%s',
256 452 'data' => '%s',
257 - 'disabled' => '%d'
453 + 'disabled' => '%d',
454 + 'multisite' => '%d',
455 + 'site_id' => '%d'
258 456 ];
259 457
260 458 $formats = [];
261 459
@@ -272,12 +470,13 @@
272 470 /**
273 471 * Check if the slug already exists
274 472 *
275 473 * @param $slug
474 + * @param $existing_id
276 475 *
277 476 * @return bool
278 477 */
279 -function sh_cd_slug_is_unique( $slug ) {
478 +function sh_cd_slug_is_unique( $slug, $existing_id = NULL ) {
280 479
281 480 if ( true === empty( $slug ) ) {
282 481 return false;
283 482 }
@@ -284,8 +483,12 @@
284 483
285 484 global $wpdb;
286 485
287 486 $sql = $wpdb->prepare( 'SELECT count(slug) FROM ' . $wpdb->prefix . SH_CD_TABLE . ' where slug = %s', $slug );
487 +
488 + if ( false === empty( $existing_id ) ) {
489 + $sql .= $wpdb->prepare( ' and id <> %d', $existing_id );
490 + }
288 491
289 492 $row = $wpdb->get_var( $sql );
290 493
291 494 return ( empty( $row ) );