PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.4.3
GiveWP – Donation Plugin and Fundraising Platform v2.4.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 7 years ago admin-shortcodes.js 7 years ago class-shortcode-button.php 7 years ago mce-plugin.js 8 years ago shortcode-give-donation-grid.php 7 years ago shortcode-give-donation-history.php 7 years ago shortcode-give-donor-wall.php 7 years ago shortcode-give-form.php 7 years ago shortcode-give-goal.php 7 years ago shortcode-give-login.php 7 years ago shortcode-give-profile-editor.php 7 years ago shortcode-give-receipt.php 7 years ago shortcode-give-register.php 7 years ago shortcode-give-totals.php 7 years ago
class-shortcode-button.php
282 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 *
202 * @return void
203 *
204 * @since 1.0
205 */
206 public function shortcode_ajax() {
207
208 $shortcode = isset( $_POST['shortcode'] ) ? $_POST['shortcode'] : false;
209 $response = false;
210
211 if ( $shortcode && array_key_exists( $shortcode, self::$shortcodes ) ) {
212
213 $data = self::$shortcodes[ $shortcode ];
214
215 if ( ! empty( $data['errors'] ) ) {
216 $data['btn_okay'] = array( esc_html__( 'Okay', 'give' ) );
217 }
218
219 $response = array(
220 'body' => $data['fields'],
221 'close' => $data['btn_close'],
222 'ok' => $data['btn_okay'],
223 'shortcode' => $shortcode,
224 'title' => $data['title'],
225 );
226 } else {
227 // todo: handle error
228 error_log( print_r( 'AJAX error!', 1 ) );
229 }
230
231 wp_send_json( $response );
232 }
233
234
235 /**
236 * Flag to check add shortcode button to current screen or not
237 *
238 * @since 2.1.0
239 * @access private
240 * @return bool
241 */
242 private function is_add_button() {
243 global $pagenow;
244
245 $shortcode_button_pages = apply_filters( 'give_shortcode_button_pages', array(
246 'post.php',
247 'page.php',
248 'post-new.php',
249 'post-edit.php',
250 'edit.php',
251 ) );
252
253 $exclude_post_types = array( 'give_forms' );
254
255 /* @var WP_Screen $current_screen */
256 $current_screen = get_current_screen();
257
258 // Only run in admin post/page creation and edit screens
259 if (
260 ! is_admin()
261 || ! in_array( $pagenow, $shortcode_button_pages )
262 || in_array( $current_screen->post_type, $exclude_post_types )
263
264 /**
265 * Fire the filter
266 * Use this filter to show Give Shortcode button on custom pages
267 *
268 * @since 1.0
269 *
270 */
271 || ! apply_filters( 'give_shortcode_button_condition', true )
272 || empty( self::$shortcodes )
273 ) {
274 return false;
275 }
276
277 return true;
278 }
279 }
280
281 new Give_Shortcode_Button;
282