PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.12.3
GiveWP – Donation Plugin and Fundraising Platform v2.12.3
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / admin / shortcodes / class-shortcode-button.php
give / includes / admin / shortcodes Last commit date
abstract-shortcode-generator.php 6 years ago admin-shortcodes.js 6 years ago class-shortcode-button.php 6 years ago mce-plugin.js 6 years ago shortcode-give-donation-grid.php 6 years ago shortcode-give-donation-history.php 6 years ago shortcode-give-donor-wall.php 6 years ago shortcode-give-form.php 6 years ago shortcode-give-goal.php 5 years ago shortcode-give-login.php 6 years ago shortcode-give-profile-editor.php 6 years ago shortcode-give-receipt.php 6 years ago shortcode-give-register.php 6 years ago shortcode-give-totals.php 6 years ago
class-shortcode-button.php
289 lines
1 <?php
2 /**
3 * Shortcode Button Class
4 *
5 * @package Give
6 * @subpackage Admin
7 * @author Paul Ryley
8 * @copyright Copyright (c) 2016, GiveWP
9 * @license https://opensource.org/licenses/gpl-license GNU Public License
10 * @version 1.0
11 * @since 1.3.0
12 */
13
14 // Exit if accessed directly.
15 if ( ! defined( 'ABSPATH' ) ) {
16 exit;
17 }
18
19 /**
20 * Class Give_Shortcode_Button
21 */
22 final class Give_Shortcode_Button {
23
24 /**
25 * All shortcode tags
26 *
27 * @since 1.0
28 */
29 public static $shortcodes;
30
31 /**
32 * Class constructor
33 */
34 public function __construct() {
35 add_action( 'current_screen', array( $this, 'init' ), 999 );
36 add_action( 'admin_init', array( $this, 'ajax_handler' ) );
37 }
38
39 /**
40 * Initialize
41 *
42 * @since 2.1.0
43 * @access public
44 */
45 public function init() {
46 if ( $this->is_add_button() ) {
47 add_filter( 'mce_external_plugins', array( $this, 'mce_external_plugins' ), 15 );
48
49 add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_assets' ) );
50 add_action( 'admin_enqueue_scripts', array( $this, 'admin_localize_scripts' ), 13 );
51 add_action( 'media_buttons', array( $this, 'shortcode_button' ) );
52 }
53 }
54
55
56 /**
57 * Ajax handler for shortcode
58 *
59 * @since 2.3.0
60 */
61 public function ajax_handler() {
62 add_action( 'wp_ajax_give_shortcode', array( $this, 'shortcode_ajax' ) );
63 }
64
65 /**
66 * Register any TinyMCE plugins
67 *
68 * @param array $plugin_array
69 *
70 * @return array|bool
71 *
72 * @since 1.0
73 */
74 public function mce_external_plugins( $plugin_array ) {
75
76 if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
77 return false;
78 }
79
80 $plugin_array['give_shortcode'] = GIVE_PLUGIN_URL . 'includes/admin/shortcodes/mce-plugin.js';
81
82 return $plugin_array;
83 }
84
85 /**
86 * Enqueue the admin assets
87 *
88 * @return void
89 *
90 * @since 1.0
91 */
92 public function admin_enqueue_assets() {
93 $direction = ( is_rtl() || isset( $_GET['d'] ) && 'rtl' === $_GET['d'] ) ? '.rtl' : '';
94
95 wp_enqueue_script(
96 'give_shortcode',
97 GIVE_PLUGIN_URL . 'assets/dist/js/admin-shortcodes.js',
98 array( 'jquery' ),
99 GIVE_VERSION,
100 true
101 );
102
103 wp_enqueue_style(
104 'give-admin-shortcode-button-style',
105 GIVE_PLUGIN_URL . 'assets/dist/css/admin-shortcode-button' . $direction . '.css',
106 array(),
107 GIVE_VERSION
108 );
109 }
110
111 /**
112 * Localize the admin scripts
113 *
114 * @return void
115 *
116 * @since 1.0
117 */
118 public function admin_localize_scripts() {
119
120 if ( ! empty( self::$shortcodes ) ) {
121
122 $variables = array();
123
124 foreach ( self::$shortcodes as $shortcode => $values ) {
125 if ( ! empty( $values['required'] ) ) {
126 $variables[ $shortcode ] = $values['required'];
127 }
128 }
129
130 wp_localize_script( 'give_shortcode', 'scShortcodes', $variables );
131 }
132 }
133
134 /**
135 * Adds the "Donation Form" button above the TinyMCE Editor on add/edit screens.
136 *
137 * @return string|bool
138 *
139 * @since 1.0
140 */
141 public function shortcode_button() {
142
143 $shortcodes = array();
144
145 foreach ( self::$shortcodes as $shortcode => $values ) {
146
147 /**
148 * Filters the condition for including the current shortcode
149 *
150 * @since 1.0
151 */
152 if ( apply_filters( sanitize_title( $shortcode ) . '_condition', true ) ) {
153
154 $shortcodes[ $shortcode ] = sprintf(
155 '<div class="sc-shortcode mce-menu-item give-shortcode-item-%1$s" data-shortcode="%2$s">%3$s</div>',
156 $shortcode,
157 $shortcode,
158 $values['label']
159 );
160 }
161 }
162
163 if ( ! empty( $shortcodes ) ) {
164
165 // check current WP version
166 $img = ( version_compare( get_bloginfo( 'version' ), '3.5', '<' ) )
167 ? '<img src="' . GIVE_PLUGIN_URL . 'assets/dist/images/give-media.png" />'
168 : '<span class="wp-media-buttons-icon" id="give-media-button" style="background-image: url(' . give_svg_icons( 'give_grey' ) . ');"></span>';
169
170 reset( $shortcodes );
171
172 if ( 1 === count( $shortcodes ) ) {
173
174 $shortcode = key( $shortcodes );
175
176 printf(
177 '<button type="button" class="button sc-shortcode" data-shortcode="%s">%s</button>',
178 $shortcode,
179 sprintf(
180 '%s %s %s',
181 $img,
182 __( 'Insert', 'give' ),
183 self::$shortcodes[ $shortcode ]['label']
184 )
185 );
186 } else {
187 printf(
188 '<div class="sc-wrap">' .
189 '<button class="button sc-button" type="button">%s %s</button>' .
190 '<div class="sc-menu mce-menu">%s</div>' .
191 '</div>',
192 $img,
193 __( 'GiveWP Shortcodes', 'give' ),
194 implode( '', array_values( $shortcodes ) )
195 );
196 }
197 }
198 }
199
200 /**
201 * Load the shortcode dialog fields via AJAX
202 *
203 * @todo: handle error
204 *
205 * @return void
206 *
207 * @since 1.0
208 */
209 public function shortcode_ajax() {
210 if ( ! current_user_can( 'edit_give_forms' ) ) {
211 wp_die();
212 }
213
214 $shortcode = isset( $_POST['shortcode'] ) ? $_POST['shortcode'] : false;
215 $response = false;
216
217 if ( $shortcode && array_key_exists( $shortcode, self::$shortcodes ) ) {
218
219 $data = self::$shortcodes[ $shortcode ];
220
221 if ( ! empty( $data['errors'] ) ) {
222 $data['btn_okay'] = array( esc_html__( 'Okay', 'give' ) );
223 }
224
225 $response = array(
226 'body' => $data['fields'],
227 'close' => $data['btn_close'],
228 'ok' => $data['btn_okay'],
229 'shortcode' => $shortcode,
230 'title' => $data['title'],
231 );
232 } else {
233 error_log( print_r( 'AJAX error!', 1 ) );
234 }
235
236 wp_send_json( $response );
237 }
238
239
240 /**
241 * Flag to check add shortcode button to current screen or not
242 *
243 * @since 2.1.0
244 * @access private
245 * @return bool
246 */
247 private function is_add_button() {
248 global $pagenow;
249
250 $shortcode_button_pages = apply_filters(
251 'give_shortcode_button_pages',
252 array(
253 'post.php',
254 'page.php',
255 'post-new.php',
256 'post-edit.php',
257 'edit.php',
258 )
259 );
260
261 $exclude_post_types = array( 'give_forms' );
262
263 /* @var WP_Screen $current_screen */
264 $current_screen = get_current_screen();
265
266 // Only run in admin post/page creation and edit screens
267 if (
268 ! is_admin()
269 || ! in_array( $pagenow, $shortcode_button_pages )
270 || in_array( $current_screen->post_type, $exclude_post_types )
271
272 /**
273 * Fire the filter
274 * Use this filter to show Give Shortcode button on custom pages
275 *
276 * @since 1.0
277 */
278 || ! apply_filters( 'give_shortcode_button_condition', true )
279 || empty( self::$shortcodes )
280 ) {
281 return false;
282 }
283
284 return true;
285 }
286 }
287
288 new Give_Shortcode_Button();
289