PluginProbe
Snippet Shortcodes / 5.2
Snippet Shortcodes v5.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
shortcode-variables / includes / hooks.php

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

280 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 / Export', SH_CD_SLUG ), __( 'Import / Export', 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 sh_cd_create_database_table_revisions();
127
128 do_action( 'sh-cd-upgrade' );
129 }
130 }
131 add_action('admin_init', 'sh_cd_upgrade');
132
133
134 /**
135 Ajax handler for toggling disable status of a shortcode
136 **/
137 function sh_cd_ajax_toggle_status() {
138
139 if ( false === sh_cd_is_premium() ) {
140 wp_send_json( 'not-premium' );
141 }
142
143 check_ajax_referer( 'sh-cd-security', 'security' );
144
145 sh_cd_permission_check();
146
147 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
148
149 if ( false === empty( $id ) ) {
150
151 $new_status = sh_cd_toggle_status( $id );
152
153 wp_send_json( [ 'id' => $id, 'status' => $new_status, 'ok' => 1 ] );
154 }
155
156 wp_send_json( 'shortcode-not-found' );
157 }
158 add_action( 'wp_ajax_toggle_status', 'sh_cd_ajax_toggle_status' );
159
160 /**
161 Ajax handler for deleting a shortcode
162 **/
163 function sh_cd_ajax_delete_shortcode() {
164
165 check_ajax_referer( 'sh-cd-security', 'security' );
166
167 sh_cd_permission_check();
168
169 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
170
171 if ( false === empty( $id ) ) {
172
173 $result = sh_cd_db_shortcodes_delete( $id );
174
175 wp_send_json( [ 'id' => $id, 'ok' => $result ] );
176 }
177
178 wp_send_json( 'shortcode-not-found' );
179 }
180 add_action( 'wp_ajax_delete_shortcode', 'sh_cd_ajax_delete_shortcode' );
181
182 /**
183 Ajax handler for toggling disable status of a shortcode
184 **/
185 function sh_cd_ajax_toggle_multisite() {
186
187 if ( false === sh_cd_is_multisite_enabled() ) {
188 wp_send_json( 'not-premium' );
189 }
190
191 check_ajax_referer( 'sh-cd-security', 'security' );
192
193 sh_cd_permission_check();
194
195 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
196
197 if ( false === empty( $id ) ) {
198
199 $new_multisite = sh_cd_toggle_multisite( $id );
200
201 wp_send_json( [ 'id' => $id, 'multisite' => $new_multisite, 'ok' => 1 ] );
202 }
203
204 wp_send_json( 'shortcode-not-found' );
205 }
206 add_action( 'wp_ajax_toggle_multisite', 'sh_cd_ajax_toggle_multisite' );
207
208 /**
209 Ajax handler for saving shortcode inline
210 **/
211 function sh_cd_ajax_update_shortcode() {
212
213 if ( false === sh_cd_is_premium() ) {
214 wp_send_json( 'not-premium' );
215 }
216
217 check_ajax_referer( 'sh-cd-security', 'security' );
218
219 sh_cd_permission_check();
220
221 $id = ( false === empty( $_POST['id'] ) ) ? (int) $_POST['id'] : NULL;
222 $content = ( false === empty( $_POST['content'] ) ) ? $_POST['content'] : '';
223
224 if ( false === empty( $id ) ) {
225
226 $result = sh_cd_db_shortcodes_update_content( $id, $content );
227
228 wp_send_json( [ 'id' => $id, 'ok' => ( true === $result ) ? 1 : 0 ] );
229 }
230
231 wp_send_json( 'shortcode-not-found' );
232 }
233 add_action( 'wp_ajax_update_shortcode', 'sh_cd_ajax_update_shortcode' );
234
235 /**
236 Ajax handler for adding shortcode inline
237 **/
238 function sh_cd_ajax_add_shortcode() {
239
240 if ( false === sh_cd_is_premium() ) {
241 wp_send_json( 'not-premium' );
242 }
243
244 check_ajax_referer( 'sh-cd-security', 'security' );
245
246 sh_cd_permission_check();
247
248 if( true === empty( $_POST['slug'] ) ) {
249 wp_send_json( [ 'id' => 0, 'ok' => 0, 'error_message' => __( 'Error: Please specify a "Slug".', SH_CD_SLUG ) ] );
250 }
251
252 if( true === empty( $_POST['content'] ) ) {
253 wp_send_json( [ 'id' => 0, 'ok' => 0, 'error_message' => __( 'Error: Please add something for "Content".', SH_CD_SLUG ) ] );
254 }
255
256 $shortcode = [ 'slug' => $_POST['slug'],
257 'previous_slug' => '',
258 'data' => $_POST['content'],
259 'disabled' => ! sh_cd_to_bool( $_POST[ 'enabled' ] ),
260 'multisite' => sh_cd_to_bool( $_POST[ 'multisite' ] )
261 ];
262
263 $result = sh_cd_db_shortcodes_save( $shortcode, true );
264
265 wp_send_json( [ 'shortcode' => $result, 'ok' => ( false !== $result ), 'error_message' => __( 'Error: There was an error when saving your shortcode.', SH_CD_SLUG ) ] );
266
267 }
268 add_action( 'wp_ajax_add_shortcode', 'sh_cd_ajax_add_shortcode' );
269
270 /**
271 * Replace shortcodes within menu titles.
272 *
273 * @param $title
274 * @return mixed
275 */
276 function sh_cd_menu_replace_shortcodes( $title ) {
277 return do_shortcode( $title );
278 }
279 add_filter('nav_menu_item_title', 'sh_cd_menu_replace_shortcodes', 10, 1);
280