PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.0.2
GiveWP – Donation Plugin and Fundraising Platform v2.0.2
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 8 years ago class-shortcode-button.php 8 years ago shortcode-give-donation-history.php 9 years ago shortcode-give-form.php 9 years ago shortcode-give-goal.php 8 years ago shortcode-give-login.php 9 years ago shortcode-give-profile-editor.php 9 years ago shortcode-give-receipt.php 9 years ago shortcode-give-register.php 9 years ago
class-shortcode-button.php
239 lines
1 <?php
2 /**
3 * Shortcode Button Class
4 *
5 * @package Give
6 * @subpackage Admin
7 * @author Paul Ryley
8 * @copyright Copyright (c) 2016, WordImpress
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
36 if ( is_admin() ) {
37 add_filter( 'mce_external_plugins', array( $this, 'mce_external_plugins' ), 15 );
38
39 add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_assets' ) );
40 add_action( 'admin_enqueue_scripts', array( $this, 'admin_localize_scripts' ), 13 );
41 add_action( 'media_buttons', array( $this, 'shortcode_button' ) );
42 }
43
44 add_action( "wp_ajax_give_shortcode", array( $this, 'shortcode_ajax' ) );
45 add_action( "wp_ajax_nopriv_give_shortcode", array( $this, 'shortcode_ajax' ) );
46 }
47
48 /**
49 * Register any TinyMCE plugins
50 *
51 * @param array $plugin_array
52 *
53 * @return array|bool
54 *
55 * @since 1.0
56 */
57 public function mce_external_plugins( $plugin_array ) {
58
59 if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
60 return false;
61 }
62
63 $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
64
65 $plugin_array['give_shortcode'] = GIVE_PLUGIN_URL . 'assets/js/admin/tinymce/mce-plugin' . $suffix . '.js';
66
67 return $plugin_array;
68 }
69
70 /**
71 * Enqueue the admin assets
72 *
73 * @return void
74 *
75 * @since 1.0
76 */
77 public function admin_enqueue_assets() {
78
79 $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
80
81 wp_enqueue_script(
82 'give_shortcode',
83 GIVE_PLUGIN_URL . 'assets/js/admin/admin-shortcodes' . $suffix . '.js',
84 array( 'jquery' ),
85 GIVE_VERSION,
86 true
87 );
88 }
89
90 /**
91 * Localize the admin scripts
92 *
93 * @return void
94 *
95 * @since 1.0
96 */
97 public function admin_localize_scripts() {
98
99 if ( ! empty( self::$shortcodes ) ) {
100
101 $variables = array();
102
103 foreach ( self::$shortcodes as $shortcode => $values ) {
104 if ( ! empty( $values['required'] ) ) {
105 $variables[ $shortcode ] = $values['required'];
106 }
107 }
108
109 wp_localize_script( 'give_shortcode', 'scShortcodes', $variables );
110 }
111 }
112
113 /**
114 * Adds the "Donation Form" button above the TinyMCE Editor on add/edit screens.
115 *
116 * @return string|bool
117 *
118 * @since 1.0
119 */
120 public function shortcode_button() {
121
122 $screen = get_current_screen();
123
124 // If we load wp editor by ajax then $screen will be empty which generate notice if we treat $screen as WP_Screen object.
125 // For example we are loading wp editor by ajax in repeater field.
126 if ( ! ( $screen instanceof WP_Screen ) ) {
127 return false;
128 }
129
130 $shortcode_button_pages = apply_filters( 'give_shortcode_button_pages', array(
131 'post.php',
132 'page.php',
133 'post-new.php',
134 'post-edit.php',
135 'edit.php',
136 'edit.php?post_type=page',
137 ) );
138
139 // Only run in admin post/page creation and edit screens
140 if ( in_array( $screen->parent_file, $shortcode_button_pages )
141 && apply_filters( 'give_shortcode_button_condition', true )
142 && ! empty( self::$shortcodes )
143 ) {
144
145 $shortcodes = array();
146
147 foreach ( self::$shortcodes as $shortcode => $values ) {
148
149 /**
150 * Filters the condition for including the current shortcode
151 *
152 * @since 1.0
153 */
154 if ( apply_filters( sanitize_title( $shortcode ) . '_condition', true ) ) {
155
156 $shortcodes[ $shortcode ] = sprintf(
157 '<div class="sc-shortcode mce-menu-item give-shortcode-item-%1$s" data-shortcode="%2$s">%3$s</div>',
158 $shortcode,
159 $shortcode,
160 $values['label']
161 );
162 }
163 }
164
165 if ( ! empty( $shortcodes ) ) {
166
167 // check current WP version
168 $img = ( version_compare( get_bloginfo( 'version' ), '3.5', '<' ) )
169 ? '<img src="' . GIVE_PLUGIN_URL . 'assets/images/give-media.png" />'
170 : '<span class="wp-media-buttons-icon" id="give-media-button" style="background-image: url(' . give_svg_icons( 'give_grey' ) . ');"></span>';
171
172 reset( $shortcodes );
173
174 if ( 1 === count( $shortcodes ) ) {
175
176 $shortcode = key( $shortcodes );
177
178 printf(
179 '<button type="button" class="button sc-shortcode" data-shortcode="%s">%s</button>',
180 $shortcode,
181 sprintf( '%s %s %s',
182 $img,
183 __( 'Insert', 'give' ),
184 self::$shortcodes[ $shortcode ]['label']
185 )
186 );
187 } else {
188 printf(
189 '<div class="sc-wrap">' .
190 '<button class="button sc-button" type="button">%s %s</button>' .
191 '<div class="sc-menu mce-menu">%s</div>' .
192 '</div>',
193 $img,
194 __( 'Give Shortcodes', 'give' ),
195 implode( '', array_values( $shortcodes ) )
196 );
197 }
198 }
199 }
200 }
201
202 /**
203 * Load the shortcode dialog fields via AJAX
204 *
205 * @return void
206 *
207 * @since 1.0
208 */
209 public function shortcode_ajax() {
210
211 $shortcode = isset( $_POST['shortcode'] ) ? $_POST['shortcode'] : false;
212 $response = false;
213
214 if ( $shortcode && array_key_exists( $shortcode, self::$shortcodes ) ) {
215
216 $data = self::$shortcodes[ $shortcode ];
217
218 if ( ! empty( $data['errors'] ) ) {
219 $data['btn_okay'] = array( esc_html__( 'Okay', 'give' ) );
220 }
221
222 $response = array(
223 'body' => $data['fields'],
224 'close' => $data['btn_close'],
225 'ok' => $data['btn_okay'],
226 'shortcode' => $shortcode,
227 'title' => $data['title'],
228 );
229 } else {
230 // todo: handle error
231 error_log( print_r( 'AJAX error!', 1 ) );
232 }
233
234 wp_send_json( $response );
235 }
236 }
237
238 new Give_Shortcode_Button;
239