PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.5
GiveWP – Donation Plugin and Fundraising Platform v2.2.5
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 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 8 years ago shortcode-give-donor-wall.php 7 years ago shortcode-give-form.php 8 years ago shortcode-give-goal.php 8 years ago shortcode-give-login.php 8 years ago shortcode-give-profile-editor.php 8 years ago shortcode-give-receipt.php 8 years ago shortcode-give-register.php 8 years ago shortcode-give-totals.php 8 years ago
class-shortcode-button.php
272 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 add_action( 'admin_init', array( $this, 'init'), 999 );
36 }
37
38 /**
39 * Initialize
40 *
41 * @since 2.1.0
42 * @access public
43 */
44 public function init(){
45 if ( $this->is_add_button() ) {
46 add_filter( 'mce_external_plugins', array( $this, 'mce_external_plugins' ), 15 );
47
48 add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_assets' ) );
49 add_action( 'admin_enqueue_scripts', array( $this, 'admin_localize_scripts' ), 13 );
50 add_action( 'media_buttons', array( $this, 'shortcode_button' ) );
51 }
52
53 add_action( "wp_ajax_give_shortcode", array( $this, 'shortcode_ajax' ) );
54 add_action( "wp_ajax_nopriv_give_shortcode", array( $this, 'shortcode_ajax' ) );
55 }
56
57 /**
58 * Register any TinyMCE plugins
59 *
60 * @param array $plugin_array
61 *
62 * @return array|bool
63 *
64 * @since 1.0
65 */
66 public function mce_external_plugins( $plugin_array ) {
67
68 if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
69 return false;
70 }
71
72 $plugin_array['give_shortcode'] = GIVE_PLUGIN_URL . 'includes/admin/shortcodes/mce-plugin.js';
73
74 return $plugin_array;
75 }
76
77 /**
78 * Enqueue the admin assets
79 *
80 * @return void
81 *
82 * @since 1.0
83 */
84 public function admin_enqueue_assets() {
85 $direction = ( is_rtl() || isset( $_GET['d'] ) && 'rtl' === $_GET['d'] ) ? '.rtl' : '';
86
87 wp_enqueue_script(
88 'give_shortcode',
89 GIVE_PLUGIN_URL . 'assets/dist/js/admin-shortcodes.js',
90 array( 'jquery' ),
91 GIVE_VERSION,
92 true
93 );
94
95 wp_enqueue_style(
96 'give-admin-shortcode-button-style',
97 GIVE_PLUGIN_URL . 'assets/dist/css/admin-shortcode-button' . $direction . '.css',
98 array(),
99 GIVE_VERSION
100 );
101 }
102
103 /**
104 * Localize the admin scripts
105 *
106 * @return void
107 *
108 * @since 1.0
109 */
110 public function admin_localize_scripts() {
111
112 if ( ! empty( self::$shortcodes ) ) {
113
114 $variables = array();
115
116 foreach ( self::$shortcodes as $shortcode => $values ) {
117 if ( ! empty( $values['required'] ) ) {
118 $variables[ $shortcode ] = $values['required'];
119 }
120 }
121
122 wp_localize_script( 'give_shortcode', 'scShortcodes', $variables );
123 }
124 }
125
126 /**
127 * Adds the "Donation Form" button above the TinyMCE Editor on add/edit screens.
128 *
129 * @return string|bool
130 *
131 * @since 1.0
132 */
133 public function shortcode_button() {
134
135 $shortcodes = array();
136
137 foreach ( self::$shortcodes as $shortcode => $values ) {
138
139 /**
140 * Filters the condition for including the current shortcode
141 *
142 * @since 1.0
143 */
144 if ( apply_filters( sanitize_title( $shortcode ) . '_condition', true ) ) {
145
146 $shortcodes[ $shortcode ] = sprintf(
147 '<div class="sc-shortcode mce-menu-item give-shortcode-item-%1$s" data-shortcode="%2$s">%3$s</div>',
148 $shortcode,
149 $shortcode,
150 $values['label']
151 );
152 }
153 }
154
155 if ( ! empty( $shortcodes ) ) {
156
157 // check current WP version
158 $img = ( version_compare( get_bloginfo( 'version' ), '3.5', '<' ) )
159 ? '<img src="' . GIVE_PLUGIN_URL . 'assets/dist/images/give-media.png" />'
160 : '<span class="wp-media-buttons-icon" id="give-media-button" style="background-image: url(' . give_svg_icons( 'give_grey' ) . ');"></span>';
161
162 reset( $shortcodes );
163
164 if ( 1 === count( $shortcodes ) ) {
165
166 $shortcode = key( $shortcodes );
167
168 printf(
169 '<button type="button" class="button sc-shortcode" data-shortcode="%s">%s</button>',
170 $shortcode,
171 sprintf( '%s %s %s',
172 $img,
173 __( 'Insert', 'give' ),
174 self::$shortcodes[ $shortcode ]['label']
175 )
176 );
177 } else {
178 printf(
179 '<div class="sc-wrap">' .
180 '<button class="button sc-button" type="button">%s %s</button>' .
181 '<div class="sc-menu mce-menu">%s</div>' .
182 '</div>',
183 $img,
184 __( 'Give Shortcodes', 'give' ),
185 implode( '', array_values( $shortcodes ) )
186 );
187 }
188 }
189 }
190
191 /**
192 * Load the shortcode dialog fields via AJAX
193 *
194 * @return void
195 *
196 * @since 1.0
197 */
198 public function shortcode_ajax() {
199
200 $shortcode = isset( $_POST['shortcode'] ) ? $_POST['shortcode'] : false;
201 $response = false;
202
203 if ( $shortcode && array_key_exists( $shortcode, self::$shortcodes ) ) {
204
205 $data = self::$shortcodes[ $shortcode ];
206
207 if ( ! empty( $data['errors'] ) ) {
208 $data['btn_okay'] = array( esc_html__( 'Okay', 'give' ) );
209 }
210
211 $response = array(
212 'body' => $data['fields'],
213 'close' => $data['btn_close'],
214 'ok' => $data['btn_okay'],
215 'shortcode' => $shortcode,
216 'title' => $data['title'],
217 );
218 } else {
219 // todo: handle error
220 error_log( print_r( 'AJAX error!', 1 ) );
221 }
222
223 wp_send_json( $response );
224 }
225
226
227 /**
228 * Flag to check add shortcode button to current screen or not
229 *
230 * @since 2.1.0
231 * @access private
232 * @return bool
233 */
234 private function is_add_button() {
235 global $pagenow;
236
237 $shortcode_button_pages = apply_filters( 'give_shortcode_button_pages', array(
238 'post.php',
239 'page.php',
240 'post-new.php',
241 'post-edit.php',
242 'edit.php',
243 'edit.php?post_type=page',
244 ) );
245
246 $setting_page = give_get_current_setting_page();
247
248 // Only run in admin post/page creation and edit screens
249 if (
250 ! is_admin()
251 || ! in_array( $pagenow, $shortcode_button_pages )
252 || ( 'give-settings' === $setting_page )
253
254 /**
255 * Fire the filter
256 * Use this filter to show Give Shortcode button on custom pages
257 *
258 * @since 1.0
259 *
260 */
261 || ! apply_filters( 'give_shortcode_button_condition', true )
262 || empty( self::$shortcodes )
263 ) {
264 return false;
265 }
266
267 return true;
268 }
269 }
270
271 new Give_Shortcode_Button;
272