PluginProbe
Snippet Shortcodes / 5.1.1
Snippet Shortcodes v5.1.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 / hooks.php

hooks.php in Snippet Shortcodes 5.1.1, at includes/hooks.php

278 lines 9.8 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 * Build admin menu
7 */
8 function sh_cd_build_admin_menu() {
9
10 $allowed_viewer = sh_cd_permission_role();
11
12 add_menu_page( SH_CD_PLUGIN_NAME, SH_CD_PLUGIN_NAME, 'manage_options', 'sh-cd-shortcode-variables-main-menu', 'sh_cd_pages_your_shortcodes', 'dashicons-snippet-shortcodes' );
13
14 // Hide duplicated sub menu (wee hack!)
15 add_submenu_page( 'sh-cd-shortcode-variables-main-menu', '', '', 'manage_options', 'sh-cd-shortcode-variables-main-menu', 'sh_cd_pages_your_shortcodes');
16
17 // Add sub menus
18 add_submenu_page( 'sh-cd-shortcode-variables-main-menu', __( 'Your Shortcodes', SH_CD_SLUG ), __( 'Your shortcodes', SH_CD_SLUG ), $allowed_viewer, 'sh-cd-shortcode-variables-your-shortcodes', 'sh_cd_pages_your_shortcodes');
19 add_submenu_page( 'sh-cd-shortcode-variables-main-menu', __( 'Premade Shortcodes', SH_CD_SLUG ), __( 'Premade shortcodes', SH_CD_SLUG ), $allowed_viewer, 'sh-cd-shortcode-variables-sub-premade', 'sh_cd_premade_shortcodes_page');
20
21 add_submenu_page( 'sh-cd-shortcode-variables-main-menu', __( 'Import shortcodes', SH_CD_SLUG ), __( 'Import shortcodes', SH_CD_SLUG ), 'manage_options', 'sh-cd-import', 'sh_cd_admin_page_import' );
22
23 if( false === sh_cd_is_premium_plugin_activated() ) {
24 add_submenu_page( 'sh-cd-shortcode-variables-main-menu', '<i class="fa-solid fa-star"></i> ' . __( 'Upgrade to Premium', SH_CD_SLUG ), '<i class="fa-solid fa-star"></i> ' . __( 'Get Premium', SH_CD_SLUG ), 'manage_options', 'sh-cd-shortcode-variables-upgrade', 'sh_cd_page_upgrade');
25 }
26
27 do_action( 'sh-cd-admin-menu-upgrade' );
28
29 add_submenu_page( 'sh-cd-shortcode-variables-main-menu', __( 'Settings', SH_CD_SLUG ), __( 'Settings', SH_CD_SLUG ), 'manage_options', 'sh-cd-settings', 'sh_cd_settings_page_generic' );
30 add_submenu_page( 'sh-cd-shortcode-variables-main-menu', __( 'Help', SH_CD_SLUG ), __( 'Help', SH_CD_SLUG ), 'manage_options', 'sh-cd-help', 'sh_cd_help_page' );
31 }
32 add_action( 'admin_menu', 'sh_cd_build_admin_menu' );
33
34 /**
35 * Enqueue relevant CSS / JS
36 */
37 function sh_cd_enqueue_scripts() {
38
39 wp_enqueue_style( 'sh-cd-dashicon', plugins_url( '../assets/css/sh-cd-dashicon.css', __FILE__ ), [], SH_CD_PLUGIN_VERSION );
40
41 // Allow marketing.js on any page so admin's can dismiss admin notices anywhere
42 wp_enqueue_script( 'sh-cd-marketing', plugins_url( '../assets/js/marketing.js', __FILE__ ), [ 'jquery' ], SH_CD_PLUGIN_VERSION, true );
43
44 if ( ! sh_cd_is_snippet_shortcodes_admin_page() ) {
45 return;
46 }
47
48 $main_js_dependencies = [ 'jquery', 'sh-cd-clipboard' ];
49
50 // Tooltips
51 if ( sh_cd_tooltips_is_enabled() ) {
52 wp_enqueue_script( 'sh-cd-tooltip', plugins_url( '../assets/zerbratooltips/zebra_tooltips.min.js', __FILE__ ), [ ], SH_CD_PLUGIN_VERSION );
53 wp_enqueue_style( 'sh-cd-tooltip', plugins_url( '../assets/zerbratooltips/zebra_tooltips.min.css', __FILE__ ), [], SH_CD_PLUGIN_VERSION ) ;
54
55 $main_js_dependencies[] = 'sh-cd-tooltip';
56 }
57
58 // CSS
59 wp_enqueue_style( 'sh-cd', plugins_url( '../assets/css/sh-cd.css', __FILE__ ), [ 'sh-cd-dashicon' ], SH_CD_PLUGIN_VERSION );
60 wp_enqueue_style( 'sh-cd-fontawesome', plugins_url( '../assets/fontawesome/css/fontawesome.min.css', __FILE__ ), [], SH_CD_PLUGIN_VERSION );
61 wp_enqueue_style( 'sh-cd-fontawesome-solid', plugins_url( '../assets/fontawesome/css/solid.min.css', __FILE__ ), [ 'sh-cd-fontawesome' ], SH_CD_PLUGIN_VERSION );
62 wp_enqueue_style( 'sh-cd-fontawesome-regular', plugins_url( '../assets/fontawesome/css/regular.min.css', __FILE__ ), [ 'sh-cd-fontawesome' ], SH_CD_PLUGIN_VERSION );
63 wp_enqueue_style( 'sh-cd-fontawesome-brands', plugins_url( '../assets/fontawesome/css/brands.min.css', __FILE__ ), [ 'sh-cd-fontawesome' ], SH_CD_PLUGIN_VERSION );
64
65 // JS
66 wp_enqueue_script( 'sh-cd-clipboard', plugins_url( '../assets/js/clipboard.min.js', __FILE__ ), [], SH_CD_PLUGIN_VERSION, true );
67 wp_enqueue_script( 'sh-cd', plugins_url( '../assets/js/sh-cd.js', __FILE__ ), $main_js_dependencies, SH_CD_PLUGIN_VERSION, true );
68 wp_localize_script( 'sh-cd', 'sh_cd', sh_cd_js_config() );
69
70 }
71 add_action( 'admin_enqueue_scripts', 'sh_cd_enqueue_scripts' );
72
73 /**
74 * Determine if we are on a Snippet Shortcodes admin page
75 *
76 * @return bool
77 */
78 function sh_cd_is_snippet_shortcodes_admin_page() {
79
80 if ( true === empty( $_GET['page' ] ) ) {
81 return false;
82 }
83
84 $known_admin_pages = apply_filters( 'sh-cd-admin-pages', [ 'sh-cd-shortcode-variables-main-menu',
85 'sh-cd-shortcode-variables-your-shortcodes',
86 'sh-cd-shortcode-variables-sub-premade',
87 'sh-cd-import',
88 'sh-cd-shortcode-variables-upgrade',
89 'sh-cd-settings',
90 'sh-cd-help' ] );
91
92 return in_array( $_GET['page'], $known_admin_pages );
93 }
94
95 /**
96 * Config for JS
97 * @return array
98 */
99 function sh_cd_js_config() {
100 return [ 'editor' => sh_cd_default_editor_get(),
101 'page' => false === empty( $_GET['page'] ) ? $_GET['page'] : '',
102 'action' => false === empty( $_GET['action'] ) ? $_GET['action'] : '',
103 'security' => wp_create_nonce( 'sh-cd-security' ),
104 'premium' => sh_cd_is_premium(),
105 'text-delete-confirm' => __( 'Are you sure you wish to delete this shortcode?', SH_CD_SLUG ),
106 'text-add' => __( 'Add', SH_CD_SLUG ),
107 'text-save' => __( 'Save', SH_CD_SLUG ),
108 'text-saved' => __( 'Saved!', SH_CD_SLUG ),
109 'text-editor-change' => __( 'Changing the editor will cause any unsaved changes to be lost. Please ensure you have saved your shortcode before proceeding.', SH_CD_SLUG ),
110 'text-error' => __( 'Unfortunately something went wrong!', SH_CD_SLUG ),
111 'tooltips-enabled' => sh_cd_tooltips_is_enabled() ? 'yes' : 'no',
112 ];
113 }
114
115 /**
116 * Run installer on each version number change or install
117 */
118 function sh_cd_upgrade() {
119
120 if ( true === update_option( 'sh-cd-version-number-2021', SH_CD_PLUGIN_VERSION ) ) {
121
122 sh_cd_create_database_table();
123
124 sh_cd_create_database_table_multisite();
125
126 do_action( 'sh-cd-upgrade' );
127 }
128 }
129 add_action('admin_init', 'sh_cd_upgrade');
130
131
132 /**
133 Ajax handler for toggling disable status of a shortcode
134 **/
135 function sh_cd_ajax_toggle_status() {
136
137 if ( false === sh_cd_is_premium() ) {
138 wp_send_json( 'not-premium' );
139 }
140
141 check_ajax_referer( 'sh-cd-security', 'security' );
142
143 sh_cd_permission_check();
144
145 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
146
147 if ( false === empty( $id ) ) {
148
149 $new_status = sh_cd_toggle_status( $id );
150
151 wp_send_json( [ 'id' => $id, 'status' => $new_status, 'ok' => 1 ] );
152 }
153
154 wp_send_json( 'shortcode-not-found' );
155 }
156 add_action( 'wp_ajax_toggle_status', 'sh_cd_ajax_toggle_status' );
157
158 /**
159 Ajax handler for deleting a shortcode
160 **/
161 function sh_cd_ajax_delete_shortcode() {
162
163 check_ajax_referer( 'sh-cd-security', 'security' );
164
165 sh_cd_permission_check();
166
167 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
168
169 if ( false === empty( $id ) ) {
170
171 $result = sh_cd_db_shortcodes_delete( $id );
172
173 wp_send_json( [ 'id' => $id, 'ok' => $result ] );
174 }
175
176 wp_send_json( 'shortcode-not-found' );
177 }
178 add_action( 'wp_ajax_delete_shortcode', 'sh_cd_ajax_delete_shortcode' );
179
180 /**
181 Ajax handler for toggling disable status of a shortcode
182 **/
183 function sh_cd_ajax_toggle_multisite() {
184
185 if ( false === sh_cd_is_multisite_enabled() ) {
186 wp_send_json( 'not-premium' );
187 }
188
189 check_ajax_referer( 'sh-cd-security', 'security' );
190
191 sh_cd_permission_check();
192
193 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
194
195 if ( false === empty( $id ) ) {
196
197 $new_multisite = sh_cd_toggle_multisite( $id );
198
199 wp_send_json( [ 'id' => $id, 'multisite' => $new_multisite, 'ok' => 1 ] );
200 }
201
202 wp_send_json( 'shortcode-not-found' );
203 }
204 add_action( 'wp_ajax_toggle_multisite', 'sh_cd_ajax_toggle_multisite' );
205
206 /**
207 Ajax handler for saving shortcode inline
208 **/
209 function sh_cd_ajax_update_shortcode() {
210
211 if ( false === sh_cd_is_premium() ) {
212 wp_send_json( 'not-premium' );
213 }
214
215 check_ajax_referer( 'sh-cd-security', 'security' );
216
217 sh_cd_permission_check();
218
219 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
220 $content = ( false === empty( $_POST['content'] ) ) ? $_POST['content'] : '';
221
222 if ( false === empty( $id ) ) {
223
224 $result = sh_cd_db_shortcodes_update_content( $id, $content );
225
226 wp_send_json( [ 'id' => $id, 'ok' => ( true === $result ) ? 1 : 0 ] );
227 }
228
229 wp_send_json( 'shortcode-not-found' );
230 }
231 add_action( 'wp_ajax_update_shortcode', 'sh_cd_ajax_update_shortcode' );
232
233 /**
234 Ajax handler for adding shortcode inline
235 **/
236 function sh_cd_ajax_add_shortcode() {
237
238 if ( false === sh_cd_is_premium() ) {
239 wp_send_json( 'not-premium' );
240 }
241
242 check_ajax_referer( 'sh-cd-security', 'security' );
243
244 sh_cd_permission_check();
245
246 if( true === empty( $_POST['slug'] ) ) {
247 wp_send_json( [ 'id' => 0, 'ok' => 0, 'error_message' => __( 'Error: Please specify a "Slug".', SH_CD_SLUG ) ] );
248 }
249
250 if( true === empty( $_POST['content'] ) ) {
251 wp_send_json( [ 'id' => 0, 'ok' => 0, 'error_message' => __( 'Error: Please add something for "Content".', SH_CD_SLUG ) ] );
252 }
253
254 $shortcode = [ 'slug' => $_POST['slug'],
255 'previous_slug' => '',
256 'data' => $_POST['content'],
257 'disabled' => ! sh_cd_to_bool( $_POST[ 'enabled' ] ),
258 'multisite' => sh_cd_to_bool( $_POST[ 'multisite' ] )
259 ];
260
261 $result = sh_cd_db_shortcodes_save( $shortcode, true );
262
263 wp_send_json( [ 'shortcode' => $result, 'ok' => ( false !== $result ), 'error_message' => __( 'Error: There was an error when saving your shortcode.', SH_CD_SLUG ) ] );
264
265 }
266 add_action( 'wp_ajax_add_shortcode', 'sh_cd_ajax_add_shortcode' );
267
268 /**
269 * Replace shortcodes within menu titles.
270 *
271 * @param $title
272 * @return mixed
273 */
274 function sh_cd_menu_replace_shortcodes( $title ) {
275 return do_shortcode( $title );
276 }
277 add_filter('nav_menu_item_title', 'sh_cd_menu_replace_shortcodes', 10, 1);
278