PluginProbe ʕ •ᴥ•ʔ
Shortcoder — Create Shortcodes for Anything / 4.1.4
Shortcoder — Create Shortcodes for Anything v4.1.4
trunk 3.0 3.0.1 3.1 3.2 3.3 3.4 3.4.1 4.0 4.0.1 4.0.2 4.0.3 4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2 4.3 4.4 4.5 4.6 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.1 5.2 5.2.1 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.4 5.5 5.6 5.7 5.8 6.0 6.1 6.2 6.3 6.3.1 6.3.2 6.4 6.5 6.5.1 6.5.2 6.5.3
shortcoder / admin / sc-admin.php
shortcoder / admin Last commit date
css 8 years ago images 8 years ago js 8 years ago sc-admin.php 8 years ago sc-insert.php 8 years ago
sc-admin.php
555 lines
1 <?php
2
3 class Shortcoder_Admin{
4
5 private static $pagehook = 'settings_page_shortcoder';
6
7 public static function init(){
8
9 // Add menu
10 add_action( 'admin_menu', array( __class__, 'add_menu' ) );
11
12 // Enqueue the scripts and styles
13 add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_scripts' ) );
14
15 // Register the action for admin ajax features
16 add_action( 'wp_ajax_sc_admin_ajax', array( __CLASS__, 'admin_ajax' ) );
17
18 // Register action links
19 add_filter( 'plugin_action_links_' . SC_BASE_NAME, array( __CLASS__, 'action_links' ) );
20
21 // Add Quick Tag button to the editor
22 add_action( 'admin_footer', array( __class__, 'add_qt_button' ) );
23
24 // Add TinyMCE button
25 add_action( 'admin_init', array( __class__, 'register_mce' ) );
26
27 }
28
29 public static function add_menu(){
30
31 add_options_page( 'Shortcoder', 'Shortcoder', 'manage_options', 'shortcoder', array( __class__, 'admin_page' ) );
32
33 }
34
35 public static function enqueue_scripts( $hook ){
36
37 if( $hook == self::$pagehook ){
38
39 wp_enqueue_style( 'sc-admin-css', SC_ADMIN_URL . '/css/style.css', array(), SC_VERSION );
40
41 wp_enqueue_script( 'jquery' );
42 wp_enqueue_script( 'sc-admin-js', SC_ADMIN_URL . '/js/script.js', array( 'jquery' ), SC_VERSION );
43
44 }
45 }
46
47 public static function admin_page(){
48
49 echo '<div class="wrap">';
50 echo '<div class="head_wrap">';
51 echo '<h1 class="sc_title">Shortcoder <span class="title-count">' . SC_VERSION . '</span></h1>';
52 self::top_sharebar();
53 self::print_notice();
54 echo '</div>';
55
56 echo '<div id="content">';
57
58 $g = self::clean_get();
59
60 if( !isset( $g[ 'action' ] ) ){
61 $g[ 'action' ] = 'list';
62 }
63
64 if( $g[ 'action' ] == 'list' ){
65 self::list_shortcodes();
66 }
67
68 if( $g[ 'action' ] == 'edit' ){
69 self::edit_shortcode();
70 }
71
72 if( $g[ 'action' ] == 'new' ){
73 self::new_shortcode();
74 }
75
76 echo '</div>';
77
78 self::page_bottom();
79
80 echo '</div>';
81
82 }
83
84 public static function list_shortcodes(){
85
86 Shortcoder_Import::check_import();
87
88 $shortcodes = Shortcoder::list_all();
89 $g = self::clean_get();
90
91 echo '<h3 class="page_title">' . __( 'List of shortcodes created', 'shortcoder' ) . ' (' . count( $shortcodes ) . ')';
92 echo '<span class="sc_menu">';
93
94 echo '<span class="button search_btn" title="' . __( 'Search shortcodes', 'shortcoder' ) . '"><span class="dashicons dashicons-search"></span><input type="search" class="search_box" placeholder="Search ..."/></span>';
95
96 echo '<label for="import" class="button"><span class="dashicons dashicons-download"></span><em>' . __( 'Import shortcodes', 'shortcoder' ) . '</em></label>';
97
98 echo '<a href="' . self::get_link(array(
99 'action' => 'sc_export',
100 '_wpnonce' => wp_create_nonce( 'sc_export_data' )
101 ), 'admin-ajax.php' ) . '" class="button"><span class="dashicons dashicons-upload"></span><em>' . __( 'Export shortcodes', 'shortcoder' ) . '</em></a>';
102
103
104 echo '<button class="button sort_btn" title="' . __( 'Sort list', 'shortcoder' ) . '"><span class="dashicons dashicons-menu"></span> <span class="dashicons dashicons-arrow-down-alt sort_icon"></span></button>';
105
106 echo '<a href="' . self::get_link(array( 'action' => 'new' )) . '" class="button button-primary sc_new_btn"><span class="dashicons dashicons-plus"></span> ' . __( 'Create a new shortcode', 'shortcoder' ) . '</a>';
107
108 echo '</span>';
109 echo '</h3>';
110
111 if( isset( $g[ 'sort' ] ) ){
112 $sort = $g[ 'sort' ];
113 if( $sort == 'asc' ){
114 uksort($shortcodes, 'strcasecmp' );
115 }else if( $sort == 'desc' ){
116 uksort($shortcodes, 'strcasecmp' );
117 $shortcodes = array_reverse( $shortcodes, True );
118 }
119 }
120
121 echo '<ul class="sc_list" data-empty="' . __( 'No shortcodes are created. Go ahead create one !', 'shortcoder' ) . '">';
122 foreach( $shortcodes as $name => $data ){
123
124 $data = wp_parse_args( $data, Shortcoder::defaults() );
125
126 $link = self::get_link(array(
127 'action' => 'edit',
128 'id' => base64_encode( $name )
129 ));
130
131 $delete_link = self::get_link(array(
132 'action' => 'sc_admin_ajax',
133 'do' => 'delete',
134 'id' => base64_encode( $name ),
135 '_wpnonce' => wp_create_nonce( 'sc_delete_nonce' )
136 ), 'admin-ajax.php' );
137
138 $disabled_text = ( $data[ 'disabled' ] == '1' ) ? '<small class="disabled_text">' . __( 'Temporarily disabled', 'shortcoder' ) . '</small>' : '';
139
140 echo '<li data-name="' . esc_attr( $name ) . '">';
141 echo '<a href="' . $link . '" class="sc_link" title="' . __( 'Edit shortcode', 'shortcoder' ) . '">' . esc_attr( $name ) . $disabled_text . '</a>';
142 echo '<span class="sc_controls">';
143 echo '<a href="#" class="sc_copy" title="' . __( 'Copy shortcode', 'shortcoder' ) . '"><span class="dashicons dashicons-editor-code"></span></a>';
144 echo '<a href="' . $delete_link . '" class="sc_delete" title="' . __( 'Delete', 'shortcoder' ) . '"><span class="dashicons dashicons-trash"></span></a>';
145 echo '</span>';
146
147 echo '<input type="text" value="' . self::get_shortcode( $name ) . '" class="sc_copy_box" readonly="readonly" title="' . __( 'Copy shortcode', 'shortcoder' ) . '" />';
148
149 echo '</li>';
150
151 }
152 echo '</ul>';
153
154 Shortcoder_Import::import_form();
155
156 }
157
158 public static function new_shortcode(){
159 self::edit_shortcode( 'new' );
160 }
161
162 public static function edit_shortcode( $action = 'edit' ){
163
164 self::save_shortcode();
165
166 $shortcodes = Shortcoder::list_all();
167 $g = self::clean_get();
168
169 $page_title = __( 'New shortcode', 'shortcoder' );
170 $action_btn = __( 'Create shortcode', 'shortcoder' );
171 $sc_name = '';
172 $values = array();
173
174 if( $action == 'edit' ){
175
176 $page_title = __( 'Edit shortcode', 'shortcoder' );
177 $action_btn = __( 'Save settings', 'shortcoder' );
178
179 if( !isset( $g[ 'id' ] ) ){
180 echo '<p align="center">' . __( 'No shortcode ID provided !' ) . '</p>';
181 return false;
182 }
183
184 $sc_name = base64_decode( $g[ 'id' ] );
185
186 if( !array_key_exists( $sc_name, $shortcodes ) ){
187 echo '<p align="center">' . __( 'Invalid shortcode ID or no such shortcode with name [' . esc_attr( $sc_name ) . '] exists !' ) . '</p>';
188 return false;
189 }
190
191 $values = $shortcodes[ $sc_name ];
192
193 }
194
195 $values = wp_parse_args( $values, Shortcoder::defaults() );
196
197 echo '<h3 class="page_title">' . $page_title;
198 echo '<div class="sc_menu">';
199 echo '<a href="' . self::get_link() . '" class="button sc_back_btn"><span class="dashicons dashicons-arrow-left-alt2"></span> ' . __( 'Back', 'shortcoder' ) . '</a>';
200 echo '</div>';
201 echo '</h3>';
202
203 echo '<form method="post">';
204
205 echo '<div class="sc_section">';
206 echo '<label for="sc_name">' . __( 'Name', 'shortcoder' ) . '</label>';
207 echo '<div class="sc_name_wrap"><input type="text" id="sc_name" name="sc_name" value="' . esc_attr( $sc_name ) . '" class="widefat" required="required" ' . ( ( $action == 'edit' ) ? 'readonly="readonly"' : 'placeholder="' . __( 'Enter a name for the shortcode, case sensitive', 'shortcoder' ) . '"' ) . ' pattern="[a-zA-z0-9 \-]+" />';
208 echo ( $action == 'edit' ) ? '<div class="copy_shortcode">Your shortcode is - <strong contenteditable>' . self::get_shortcode( $sc_name ) . '</strong></div>' : '';
209 echo ( $action != 'edit' ) ? '<div class="copy_shortcode">' . __( 'Allowed characters A to Z, a to z, 0 to 9, hyphens, underscores and space', 'shortcoder' ) . '</div>' : '';
210 echo '</div></div>';
211
212 echo '<div class="sc_section">';
213 echo '<label for="sc_content">' . __( 'Shortcode content', 'shortcoder' ) . '</label>';
214
215 $editor_type = isset( $g[ 'editor' ] ) ? intval( $g[ 'editor' ] ) : 0;
216
217 if( $editor_type == 2 ){
218 self::load_codemirror_editor( $values[ 'content' ] );
219 }else{
220 wp_editor( $values[ 'content' ], 'sc_content', array( 'wpautop'=> false, 'textarea_rows'=> 15, 'tinymce' => ( $editor_type == 1 ) ) );
221 }
222
223 echo '</div>';
224
225 echo '<p class="sc_note">' . __( 'Note: You can use any HTML, JavaScript, CSS as shortcode content. Shortcoder does not manipulate the shortcode content. What you provide above is what you get as output. Please verify the shortcode content for any syntax or JavaScript errors.', 'shortcoder' ) . '</p>';
226
227 echo '<h4>' . __( 'Settings', 'shortcoder' ) . '</h4>';
228 echo '<div class="sc_section">';
229 echo '<label><input type="checkbox" name="sc_disable" value="1" ' . checked( $values[ 'disabled' ], '1', false ) . '/> ' . __( 'Temporarily disable this shortcode', 'shortcoder' ) . '</label>';
230 echo '<label><input type="checkbox" name="sc_hide_admin" value="1" ' . checked( $values[ 'hide_admin' ], '1', false ) . '/> ' . __( 'Disable this Shortcode for administrators' ) . '</label>';
231 echo '</div>';
232
233 $device_options = array(
234 'all' => __( 'On both desktop and mobile devices', 'shortcoder' ),
235 'mobile_only' => __( 'On mobile devices alone', 'shortcoder' ),
236 'desktop_only' => __( 'On desktops alone', 'shortcoder' )
237 );
238
239 echo '<h4>' . __( 'Visibility', 'shortcoder' ) . '</h4>';
240 echo '<div class="sc_section">';
241 echo '<label>' . __( 'Show this shortcode', 'shortcoder' );
242 echo '<select name="sc_devices">';
243 foreach( $device_options as $id => $name ){
244 echo '<option value="' . $id . '" ' . selected( $values[ 'devices' ], $id ) . '>' . $name . '</option>';
245 }
246 echo '</select></label>';
247 echo '</div>';
248
249 wp_nonce_field( 'sc_edit_nonce' );
250
251 echo '<footer class="page_footer">';
252 echo '<button class="button button-primary">' . $action_btn . '</button>';
253
254 if( $action == 'edit' ){
255 $delete_link = self::get_link(array(
256 'action' => 'sc_admin_ajax',
257 'do' => 'delete',
258 'id' => base64_encode( $sc_name ),
259 '_wpnonce' => wp_create_nonce( 'sc_delete_nonce' )
260 ), 'admin-ajax.php' );
261 echo '<a href="' . $delete_link . '" class="button sc_delete_ep" title="' . __( 'Delete', 'shortcoder' ) . '"><span class="dashicons dashicons-trash"></span></a>';
262 }
263
264 echo '</footer>';
265
266 echo '</form>';
267
268 $sc_wp_params = Shortcoder::wp_params_list();
269
270 echo '<ul class="params_wrap">';
271 echo '<li>' . __( 'WordPress information', 'shortcoder' ) . '<ul class="wp_params">';
272 foreach( $sc_wp_params as $id => $name ){
273 echo '<li data-id="' . $id . '">' . $name . '</li>';
274 }
275 echo '</ul></li>';
276 echo '<li>' . __( 'Custom parameter', 'shortcoder' ) . '<ul>';
277 echo '<li class="cp_form"><h4>' . __( 'Enter custom parameter name', 'shortcoder' ) . '</h4>';
278 echo '<input type="text" class="cp_box" pattern="[a-zA-Z0-9]+"/> <button class="button cp_btn">' . __( 'Insert parameter', 'shortcoder' ) . '</button><p class="cp_info"><small>' . __( 'Only alphabets and numbers allowed. Custom parameters are case insensitive', 'shortcoder' ) . '</small></p></li>';
279 echo '</ul></li>';
280 echo '</ul>';
281 }
282
283 public static function save_shortcode(){
284
285 if( $_POST && check_admin_referer( 'sc_edit_nonce' ) ){
286
287 $p = wp_parse_args( self::clean_post(), array(
288 'sc_name' => '',
289 'sc_content' => '',
290 'sc_disable' => 0,
291 'sc_hide_admin' => 0,
292 'sc_devices' => 'all',
293 ));
294
295 if( !trim( $p[ 'sc_name' ] ) ){
296 self::print_notice( 0 );
297 return false;
298 }
299
300 $shortcodes = Shortcoder::list_all();
301 $name = self::clean_name( $p[ 'sc_name' ] );
302 $values = array(
303 'content' => $p[ 'sc_content' ],
304 'disabled' => $p[ 'sc_disable' ],
305 'hide_admin' => $p[ 'sc_hide_admin' ],
306 'devices' => $p[ 'sc_devices' ]
307 );
308
309 if( array_key_exists( $name, $shortcodes ) ){
310 self::print_notice( 2 );
311 }else{
312 self::print_notice( 1 );
313 }
314
315 $shortcodes[ $name ] = $values;
316
317 update_option( 'shortcoder_data', $shortcodes );
318
319 /*
320 wp_safe_redirect( self::get_link( array(
321 'action' => 'edit',
322 'name' => urlencode( $name ),
323 'msg' => ( $todo == 'new' ) ? 1 : 2
324 )));*/
325 }
326
327 }
328
329 public static function delete_shortcode( $name ){
330
331 $shortcodes = Shortcoder::list_all();
332
333 if( array_key_exists( $name, $shortcodes ) ){
334 unset( $shortcodes[ $name ] );
335 update_option( 'shortcoder_data', $shortcodes );
336 return true;
337 }else{
338 return false;
339 }
340
341 }
342
343 public static function get_link( $params = array(), $page = 'options-general.php' ){
344
345 $params[ 'page' ] = 'shortcoder';
346 return add_query_arg( $params, admin_url( $page ) );
347
348 }
349
350 public static function get_shortcode( $name = '' ){
351 return esc_attr( '[sc name="' . $name . '"]' );
352 }
353
354 public static function admin_ajax(){
355
356 $g = self::clean_get();
357
358 if( $g[ 'do' ] == 'delete' && isset( $g[ 'id' ] ) && check_admin_referer( 'sc_delete_nonce' ) ){
359 $sc_name = base64_decode( $g[ 'id' ] );
360 if( self::delete_shortcode( $sc_name ) ){
361 echo 'DELETED';
362 }else{
363 echo 'FAILED';
364 }
365 }
366
367 if( $g[ 'do' ] == 'insert_shortcode' ){
368 include_once( 'sc-insert.php' );
369 }
370
371 die(0);
372 }
373
374 public static function add_qt_button(){
375
376 $screen = get_current_screen();
377 if( self::$pagehook == $screen->id )
378 return;
379
380 echo '
381 <script>
382 window.onload = function(){
383 if( typeof QTags === "function" ){
384 QTags.addButton( "QT_sc_insert", "Shortcoder", sc_show_insert );
385 }
386 }
387 function sc_show_insert(){
388 tb_show( "Insert a Shortcode", "' . admin_url( 'admin-ajax.php?action=sc_admin_ajax&do=insert_shortcode&TB_iframe=true' ) . '" );
389 }
390 </script>';
391 }
392
393 public static function register_mce(){
394 add_filter( 'mce_buttons', array( __class__, 'register_mce_button' ) );
395 add_filter( 'mce_external_plugins', array( __class__, 'register_mce_js' ) );
396 }
397
398 public static function register_mce_button( $buttons ){
399
400 if( self::is_sc_admin() )
401 return $buttons;
402
403 array_push( $buttons, 'separator', 'shortcoder' );
404 return $buttons;
405 }
406
407 public static function register_mce_js( $plugins ){
408
409 if( self::is_sc_admin() )
410 return $plugins;
411
412 $plugins[ 'shortcoder' ] = SC_ADMIN_URL . '/js/tinymce/editor_plugin.js';
413 return $plugins;
414 }
415
416 public static function load_codemirror_editor( $value ){
417 echo '<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/codemirror.min.css" rel="stylesheet">';
418 echo '<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/codemirror.min.js"></script>';
419 echo '<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/mode/htmlmixed/htmlmixed.min.js"></script>';
420 echo '<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/mode/css/css.min.js"></script>';
421 echo '<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/mode/xml/xml.min.js"></script>';
422 echo '<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/mode/javascript/javascript.min.js"></script>';
423
424 echo '<textarea name="sc_content" id="sc_content">' . esc_textarea( $value ) . '</textarea>';
425
426 echo '<script>var sc_cm_editor = true;</script>';
427 }
428
429 public static function page_bottom(){
430
431 echo '<div class="coffee_box">
432 <div class="coffee_amt_wrap">
433 <p><select class="coffee_amt">
434 <option value="2">$2</option>
435 <option value="3">$3</option>
436 <option value="4">$4</option>
437 <option value="5" selected="selected">$5</option>
438 <option value="6">$6</option>
439 <option value="7">$7</option>
440 <option value="8">$8</option>
441 <option value="9">$9</option>
442 <option value="10">$10</option>
443 <option value="11">$11</option>
444 <option value="12">$12</option>
445 <option value="">Custom</option>
446 </select></p>
447 <a class="button button-primary buy_coffee_btn" href="https://www.paypal.me/vaakash/5" data-link="https://www.paypal.me/vaakash/" target="_blank">Buy me a coffee !</a>
448 </div>
449 <h2>Buy me a coffee !</h2>
450 <p>Thank you for using Shortcoder. If you found the plugin useful buy me a coffee ! Your donation will motivate and make me happy for all the efforts. You can donate via PayPal.</p>';
451 echo '</div>';
452
453 echo '<p class="credits_box"><img src="' . SC_ADMIN_URL . '/images/aw.png" /> Created by <a href="https://goo.gl/aHKnsM" target="_blank">Aakash Chakravarthy</a> - Follow me on <a href="https://twitter.com/vaakash" target="_blank">Twitter</a>, <a href="https://fb.com/aakashweb" target="_blank">Facebook</a>, <a href="https://www.linkedin.com/in/vaakash/" target="_blank">LinkedIn</a>. Check out <a href="https://goo.gl/OAxx4l" target="_blank">my other works</a>.
454
455 <a href="https://goo.gl/ltvnIE" class="rate_link" target="_blank">Rate <span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span> if you like Shortcoder</a>
456
457 </p>';
458
459 }
460
461 public static function top_sharebar(){
462 echo '
463 <div class="top_sharebar">
464
465 <a href="https://goo.gl/r8Qr7Y" class="help_link" target="_blank" title="Help"><span class="dashicons dashicons-editor-help"></span></a>
466 <a href="https://goo.gl/URfxp2" class="help_link" target="_blank" title="Report issue"><span class="dashicons dashicons-flag"></span></a>
467 <a href="https://goo.gl/ltvnIE" class="help_link" target="_blank" title="Rate 5 stars"><span class="dashicons dashicons-star-filled"></span></a>
468
469 <a class="share_btn googleplus" href="https://plus.google.com/share?url=https%3A%2F%2Fwww.aakashweb.com%2Fwordpress-plugins%2Fshortcoder%2F" target="_blank"><span class="dashicons dashicons-googleplus"></span> Share</a>
470 <a class="share_btn twitter" href="https://twitter.com/intent/tweet?ref_src=twsrc%5Etfw&related=vaakash&text=Check%20out%20Shortcoder,%20a%20%23wordpress%20plugin%20to%20create%20shortcodes%20for%20HTML,%20JavaScript%20snippets%20easily&tw_p=tweetbutton&url=https%3A%2F%2Fwww.aakashweb.com%2Fwordpress-plugins%2Fshortcoder%2F&via=vaakash" target="_blank"><span class="dashicons dashicons-twitter"></span> Tweet about Shortcoder</a>
471
472 </div>';
473 }
474
475 public static function action_links( $links ){
476 array_unshift( $links, '<a href="https://goo.gl/qMF3iE" target="_blank">Donate</a>' );
477 array_unshift( $links, '<a href="'. esc_url( admin_url( 'options-general.php?page=shortcoder' ) ) .'">⚙️ Settings</a>' );
478 return $links;
479 }
480
481 public static function print_notice( $id = '' ){
482
483 $g = self::clean_get();
484 $type = 'success';
485 $msg = '';
486
487 if( $id == '' ){
488 if( !isset( $g[ 'msg' ] ) ){
489 return false;
490 }
491 $id = $g[ 'msg' ];
492 }
493
494 if( $id == 0 ){
495 $msg = __( 'Shortcode name is empty. Cannot save settings !', 'shortcoder' );
496 $type = 'error';
497 }
498
499 if( $id == 1 ){
500 $msg = __( 'Shortcode created successfully', 'shortcoder' );
501 }
502
503 if( $id == 2 ){
504 $msg = __( 'Shortcode updated successfully', 'shortcoder' );
505 }
506
507 if( $id == 3 ){
508 $msg = __( 'Shortcode deleted successfully', 'shortcoder' );
509 }
510
511 if( $msg != '' ){
512 echo '<div class="notice notice-' . $type . ' is-dismissible"><p>' . $msg . '</p></div>';
513 }
514 }
515
516 public static function clean_name( $name = '' ){
517
518 return trim( preg_replace('/[^0-9a-zA-Z\- _]/', '', $name ) );
519
520 }
521
522 public static function clean_get(){
523
524 foreach( $_GET as $k=>$v ){
525 $_GET[$k] = sanitize_text_field( $v );
526 }
527
528 return $_GET;
529 }
530
531 public static function clean_post(){
532
533 return stripslashes_deep( $_POST );
534
535 }
536
537 public static function is_sc_admin(){
538
539 if( !function_exists( 'get_current_screen' ) )
540 return false;
541
542 $screen = get_current_screen();
543 if( self::$pagehook == $screen->id ){
544 return true;
545 }else{
546 return false;
547 }
548
549 }
550
551 }
552
553 Shortcoder_Admin::init();
554
555 ?>