PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.5.4
GiveWP – Donation Plugin and Fundraising Platform v2.5.4
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 7 years ago class-shortcode-button.php 6 years ago mce-plugin.js 8 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 6 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
285 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( '%s %s %s',
180 $img,
181 __( 'Insert', 'give' ),
182 self::$shortcodes[ $shortcode ]['label']
183 )
184 );
185 } else {
186 printf(
187 '<div class="sc-wrap">' .
188 '<button class="button sc-button" type="button">%s %s</button>' .
189 '<div class="sc-menu mce-menu">%s</div>' .
190 '</div>',
191 $img,
192 __( 'Give Shortcodes', 'give' ),
193 implode( '', array_values( $shortcodes ) )
194 );
195 }
196 }
197 }
198
199 /**
200 * Load the shortcode dialog fields via AJAX
201 * @todo: handle error
202 *
203 * @return void
204 *
205 * @since 1.0
206 */
207 public function shortcode_ajax() {
208 if( ! current_user_can( 'edit_give_forms' ) ) {
209 wp_die();
210 }
211
212 $shortcode = isset( $_POST['shortcode'] ) ? $_POST['shortcode'] : false;
213 $response = false;
214
215 if ( $shortcode && array_key_exists( $shortcode, self::$shortcodes ) ) {
216
217 $data = self::$shortcodes[ $shortcode ];
218
219 if ( ! empty( $data['errors'] ) ) {
220 $data['btn_okay'] = array( esc_html__( 'Okay', 'give' ) );
221 }
222
223 $response = array(
224 'body' => $data['fields'],
225 'close' => $data['btn_close'],
226 'ok' => $data['btn_okay'],
227 'shortcode' => $shortcode,
228 'title' => $data['title'],
229 );
230 } else {
231 error_log( print_r( 'AJAX error!', 1 ) );
232 }
233
234 wp_send_json( $response );
235 }
236
237
238 /**
239 * Flag to check add shortcode button to current screen or not
240 *
241 * @since 2.1.0
242 * @access private
243 * @return bool
244 */
245 private function is_add_button() {
246 global $pagenow;
247
248 $shortcode_button_pages = apply_filters( 'give_shortcode_button_pages', array(
249 'post.php',
250 'page.php',
251 'post-new.php',
252 'post-edit.php',
253 'edit.php',
254 ) );
255
256 $exclude_post_types = array( 'give_forms' );
257
258 /* @var WP_Screen $current_screen */
259 $current_screen = get_current_screen();
260
261 // Only run in admin post/page creation and edit screens
262 if (
263 ! is_admin()
264 || ! in_array( $pagenow, $shortcode_button_pages )
265 || in_array( $current_screen->post_type, $exclude_post_types )
266
267 /**
268 * Fire the filter
269 * Use this filter to show Give Shortcode button on custom pages
270 *
271 * @since 1.0
272 *
273 */
274 || ! apply_filters( 'give_shortcode_button_condition', true )
275 || empty( self::$shortcodes )
276 ) {
277 return false;
278 }
279
280 return true;
281 }
282 }
283
284 new Give_Shortcode_Button;
285