PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.4
GiveWP – Donation Plugin and Fundraising Platform v2.2.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 / class-give-html-elements.php
give / includes Last commit date
admin 7 years ago api 7 years ago deprecated 7 years ago donors 7 years ago emails 7 years ago forms 7 years ago gateways 7 years ago libraries 7 years ago payments 7 years ago actions.php 7 years ago ajax-functions.php 7 years ago class-give-async-process.php 8 years ago class-give-background-updater.php 7 years ago class-give-cache.php 7 years ago class-give-cli-commands.php 8 years ago class-give-comment.php 7 years ago class-give-cron.php 8 years ago class-give-db-donor-meta.php 8 years ago class-give-db-donors.php 7 years ago class-give-db-form-meta.php 8 years ago class-give-db-logs-meta.php 8 years ago class-give-db-logs.php 7 years ago class-give-db-meta.php 7 years ago class-give-db-payment-meta.php 7 years ago class-give-db-sequential-ordering.php 7 years ago class-give-db-sessions.php 7 years ago class-give-db.php 7 years ago class-give-donate-form.php 8 years ago class-give-donor-wall-widget.php 7 years ago class-give-donor.php 7 years ago class-give-email-access.php 7 years ago class-give-html-elements.php 7 years ago class-give-license-handler.php 7 years ago class-give-logging.php 8 years ago class-give-readme-parser.php 8 years ago class-give-roles.php 8 years ago class-give-scripts.php 7 years ago class-give-session.php 7 years ago class-give-stats.php 8 years ago class-give-template-loader.php 8 years ago class-give-tooltips.php 8 years ago class-give-translation.php 8 years ago class-notices.php 7 years ago country-functions.php 8 years ago currency-functions.php 7 years ago error-tracking.php 8 years ago filters.php 7 years ago formatting.php 7 years ago import-functions.php 7 years ago install.php 7 years ago login-register.php 8 years ago misc-functions.php 7 years ago plugin-compatibility.php 8 years ago post-types.php 8 years ago price-functions.php 7 years ago process-donation.php 7 years ago shortcodes.php 7 years ago template-functions.php 8 years ago user-functions.php 7 years ago
class-give-html-elements.php
744 lines
1 <?php
2 /**
3 * HTML elements
4 *
5 * @package Give
6 * @subpackage Classes/Give_HTML_Elements
7 * @copyright Copyright (c) 2016, WordImpress
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Give_HTML_Elements Class
19 *
20 * A helper class for outputting common HTML elements, such as product drop downs.
21 *
22 * @since 1.0
23 */
24 class Give_HTML_Elements {
25
26 /**
27 * Donations Dropdown
28 *
29 * Renders an HTML Dropdown of all the donations.
30 *
31 * @since 1.0
32 * @access public
33 *
34 * @param array $args Arguments for the dropdown.
35 *
36 * @return string Donations dropdown.
37 */
38 public function donations_dropdown( $args = array() ) {
39
40 $defaults = array(
41 'name' => 'donations',
42 'id' => 'donations',
43 'class' => '',
44 'multiple' => false,
45 'selected' => 0,
46 'chosen' => false,
47 'number' => 30,
48 'placeholder' => __( 'Select a donation', 'give' ),
49 );
50
51 $args = wp_parse_args( $args, $defaults );
52
53 $payments = new Give_Payments_Query( array(
54 'number' => $args['number'],
55 ) );
56
57 $payments = $payments->get_payments();
58
59 $options = array();
60
61 // Provide nice human readable options.
62 if ( $payments ) {
63 $options[0] = $args['placeholder'];
64 foreach ( $payments as $payment ) {
65
66 $options[ absint( $payment->ID ) ] = esc_html( '#' . $payment->ID . ' - ' . $payment->email . ' - ' . $payment->form_title );
67
68 }
69 } else {
70 $options[0] = __( 'No donations found.', 'give' );
71 }
72
73 $output = $this->select( array(
74 'name' => $args['name'],
75 'selected' => $args['selected'],
76 'id' => $args['id'],
77 'class' => $args['class'],
78 'options' => $options,
79 'chosen' => $args['chosen'],
80 'multiple' => $args['multiple'],
81 'placeholder' => $args['placeholder'],
82 'select_atts' => $args['select_atts'],
83 'show_option_all' => false,
84 'show_option_none' => false,
85 ) );
86
87 return $output;
88 }
89
90 /**
91 * Give Forms Dropdown
92 *
93 * Renders an HTML Dropdown of all the Give Forms.
94 *
95 * @since 1.0
96 * @access public
97 *
98 * @param array $args Arguments for the dropdown.
99 *
100 * @return string Give forms dropdown.
101 */
102 public function forms_dropdown( $args = array() ) {
103
104 $defaults = array(
105 'name' => 'forms',
106 'id' => 'forms',
107 'class' => '',
108 'multiple' => false,
109 'selected' => 0,
110 'chosen' => false,
111 'number' => 30,
112 'placeholder' => esc_attr__( 'All Forms', 'give' ),
113 'data' => array(
114 'search-type' => 'form',
115 ),
116 'query_args' => array()
117 );
118
119 $args = wp_parse_args( $args, $defaults );
120
121 $form_args = wp_parse_args(
122 $args['query_args'],
123 array(
124 'post_type' => 'give_forms',
125 'orderby' => 'title',
126 'order' => 'ASC',
127 'posts_per_page' => $args['number'],
128 )
129 );
130
131 $cache_key = Give_Cache::get_key( 'give_forms', $form_args, false );
132
133 // Get forms from cache.
134 $forms = Give_Cache::get_db_query( $cache_key );
135
136 if ( is_null( $forms ) ) {
137 $forms = new WP_Query( $form_args );
138 $forms = $forms->posts;
139 Give_Cache::set_db_query( $cache_key, $forms );
140 }
141
142 $options = array();
143
144 // Ensure the selected.
145 if ( false !== $args['selected'] && $args['selected'] !== 0 ) {
146 $options[ $args['selected'] ] = get_the_title( $args['selected'] );
147 }
148
149 $options[0] = esc_html__( 'No forms found.', 'give' );
150 if ( ! empty( $forms ) ) {
151 $options[0] = $args['placeholder'];
152 foreach ( $forms as $form ) {
153 $form_title = empty( $form->post_title )
154 ? sprintf( __( 'Untitled (#%s)', 'give' ), $form->ID )
155 : $form->post_title;
156
157 $options[ absint( $form->ID ) ] = esc_html( $form_title );
158 }
159 }
160
161 $output = $this->select( array(
162 'name' => $args['name'],
163 'selected' => $args['selected'],
164 'id' => $args['id'],
165 'class' => $args['class'],
166 'options' => $options,
167 'chosen' => $args['chosen'],
168 'multiple' => $args['multiple'],
169 'placeholder' => $args['placeholder'],
170 'show_option_all' => false,
171 'show_option_none' => false,
172 'data' => $args['data'],
173 ) );
174
175 return $output;
176 }
177
178 /**
179 * Donors Dropdown
180 *
181 * Renders an HTML Dropdown of all donors.
182 *
183 * @since 1.0
184 * @access public
185 *
186 * @param array $args Arguments for the dropdown.
187 *
188 * @return string Donors dropdown.
189 */
190 public function donor_dropdown( $args = array() ) {
191
192 $defaults = array(
193 'name' => 'donors',
194 'id' => 'donors',
195 'class' => '',
196 'multiple' => false,
197 'selected' => 0,
198 'chosen' => true,
199 'placeholder' => esc_attr__( 'Select a Donor', 'give' ),
200 'number' => 30,
201 'data' => array(
202 'search-type' => 'donor',
203 ),
204 );
205
206 $args = wp_parse_args( $args, $defaults );
207
208 $donors = Give()->donors->get_donors( array(
209 'number' => $args['number'],
210 ) );
211
212 $options = array();
213
214 if ( $donors ) {
215 $options[0] = esc_html__( 'No donor attached', 'give' );
216 foreach ( $donors as $donor ) {
217 $donor = give_get_name_with_title_prefixes( $donor );
218 $options[ absint( $donor->id ) ] = esc_html( $donor->name . ' (' . $donor->email . ')' );
219 }
220 } else {
221 $options[0] = esc_html__( 'No donors found.', 'give' );
222 }
223
224 if ( ! empty( $args['selected'] ) ) {
225
226 // If a selected customer has been specified, we need to ensure it's in the initial list of customers displayed.
227 if ( ! array_key_exists( $args['selected'], $options ) ) {
228
229 $donor = new Give_Donor( $args['selected'] );
230
231 if ( $donor ) {
232 $donor = give_get_name_with_title_prefixes( $donor );
233 $options[ absint( $args['selected'] ) ] = esc_html( $donor->name . ' (' . $donor->email . ')' );
234
235 }
236 }
237 }
238
239 $output = $this->select( array(
240 'name' => $args['name'],
241 'selected' => $args['selected'],
242 'id' => $args['id'],
243 'class' => $args['class'] . ' give-customer-select',
244 'options' => $options,
245 'multiple' => $args['multiple'],
246 'chosen' => $args['chosen'],
247 'show_option_all' => false,
248 'show_option_none' => false,
249 'data' => $args['data'],
250 ) );
251
252 return $output;
253 }
254
255 /**
256 * Categories Dropdown
257 *
258 * Renders an HTML Dropdown of all the Categories.
259 *
260 * @since 1.0
261 * @access public
262 *
263 * @param string $name Name attribute of the dropdown. Default is 'give_forms_categories'.
264 * @param int $selected Category to select automatically. Default is 0.
265 * @param array $args Select box options.
266 *
267 * @return string Categories dropdown.
268 */
269 public function category_dropdown( $name = 'give_forms_categories', $selected = 0, $args = array() ) {
270 $categories = get_terms( 'give_forms_category', apply_filters( 'give_forms_category_dropdown', array() ) );
271
272 $options = array();
273
274 foreach ( $categories as $category ) {
275 $options[ absint( $category->term_id ) ] = esc_html( $category->name );
276 }
277
278 $output = $this->select( wp_parse_args( $args, array(
279 'name' => $name,
280 'selected' => $selected,
281 'options' => $options,
282 'show_option_all' => esc_html__( 'All Categories', 'give' ),
283 'show_option_none' => false,
284 ) ) );
285
286 return $output;
287 }
288
289 /**
290 * Tags Dropdown
291 *
292 * Renders an HTML Dropdown of all the Tags.
293 *
294 * @since 1.8
295 * @access public
296 *
297 * @param string $name Name attribute of the dropdown. Default is 'give_forms_tags'.
298 * @param int $selected Tag to select automatically. Default is 0.
299 * @param array $args Select box options.
300 *
301 * @return string Tags dropdown.
302 */
303 public function tags_dropdown( $name = 'give_forms_tags', $selected = 0, $args = array() ) {
304 $tags = get_terms( 'give_forms_tag', apply_filters( 'give_forms_tag_dropdown', array() ) );
305
306 $options = array();
307
308 foreach ( $tags as $tag ) {
309 $options[ absint( $tag->term_id ) ] = esc_html( $tag->name );
310 }
311
312 $output = $this->select( wp_parse_args( $args, array(
313 'name' => $name,
314 'selected' => $selected,
315 'options' => $options,
316 'show_option_all' => esc_html__( 'All Tags', 'give' ),
317 'show_option_none' => false,
318 ) ) );
319
320 return $output;
321 }
322
323 /**
324 * Years Dropdown
325 *
326 * Renders an HTML Dropdown of years.
327 *
328 * @since 1.0
329 * @access public
330 *
331 * @param string $name Name attribute of the dropdown. Default is 'year'.
332 * @param int $selected Year to select automatically. Default is 0.
333 * @param int $years_before Number of years before the current year the dropdown should start with. Default is 5.
334 * @param int $years_after Number of years after the current year the dropdown should finish at. Default is 0.
335 *
336 * @return string Years dropdown.
337 */
338 public function year_dropdown( $name = 'year', $selected = 0, $years_before = 5, $years_after = 0 ) {
339 $current = date( 'Y' );
340 $start_year = $current - absint( $years_before );
341 $end_year = $current + absint( $years_after );
342 $selected = empty( $selected ) ? date( 'Y' ) : $selected;
343 $options = array();
344
345 while ( $start_year <= $end_year ) {
346 $options[ absint( $start_year ) ] = $start_year;
347 $start_year ++;
348 }
349
350 $output = $this->select( array(
351 'name' => $name,
352 'selected' => $selected,
353 'options' => $options,
354 'show_option_all' => false,
355 'show_option_none' => false,
356 ) );
357
358 return $output;
359 }
360
361 /**
362 * Months Dropdown
363 *
364 * Renders an HTML Dropdown of months.
365 *
366 * @since 1.0
367 * @access public
368 *
369 * @param string $name Name attribute of the dropdown. Default is 'month'.
370 * @param int $selected Month to select automatically. Default is 0.
371 *
372 * @return string Months dropdown.
373 */
374 public function month_dropdown( $name = 'month', $selected = 0 ) {
375 $month = 1;
376 $options = array();
377 $selected = empty( $selected ) ? date( 'n' ) : $selected;
378
379 while ( $month <= 12 ) {
380 $options[ absint( $month ) ] = give_month_num_to_name( $month );
381 $month ++;
382 }
383
384 $output = $this->select( array(
385 'name' => $name,
386 'selected' => $selected,
387 'options' => $options,
388 'show_option_all' => false,
389 'show_option_none' => false,
390 ) );
391
392 return $output;
393 }
394
395 /**
396 * Dropdown
397 *
398 * Renders an HTML Dropdown.
399 *
400 * @since 1.0
401 * @access public
402 *
403 * @param array $args Arguments for the dropdown.
404 *
405 * @return string The dropdown.
406 */
407 public function select( $args = array() ) {
408 $defaults = array(
409 'options' => array(),
410 'name' => null,
411 'class' => '',
412 'id' => '',
413 'selected' => 0,
414 'chosen' => false,
415 'placeholder' => null,
416 'multiple' => false,
417 'select_atts' => false,
418 'show_option_all' => __( 'All', 'give' ),
419 'show_option_none' => __( 'None', 'give' ),
420 'data' => array(),
421 'readonly' => false,
422 'disabled' => false,
423 );
424
425 $args = wp_parse_args( $args, $defaults );
426
427 $data_elements = '';
428 foreach ( $args['data'] as $key => $value ) {
429 $data_elements .= ' data-' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
430 }
431
432 $multiple = '';
433 if ( $args['multiple'] ) {
434 $multiple = 'MULTIPLE';
435 }
436
437 if ( $args['chosen'] ) {
438 $args['class'] .= ' give-select-chosen';
439 }
440
441 $placeholder = '';
442 if ( $args['placeholder'] ) {
443 $placeholder = $args['placeholder'];
444 }
445
446 $output = sprintf(
447 '<select name="%1$s" id="%2$s" autocomplete="address-level4" class="give-select %3$s" %4$s %5$s placeholder="%6$s" data-placeholder="%6$s" %7$s>',
448 esc_attr( $args['name'] ),
449 esc_attr( sanitize_key( str_replace( '-', '_', $args['id'] ) ) ),
450 esc_attr( $args['class'] ),
451 $multiple,
452 $args['select_atts'],
453 $placeholder,
454 $data_elements
455 );
456
457 if ( $args['show_option_all'] ) {
458 if ( $args['multiple'] ) {
459 $selected = selected( true, in_array( 0, $args['selected'] ), false );
460 } else {
461 $selected = selected( $args['selected'], 0, false );
462 }
463 $output .= '<option value="all"' . $selected . '>' . esc_html( $args['show_option_all'] ) . '</option>';
464 }
465
466 if ( ! empty( $args['options'] ) ) {
467
468 if ( $args['show_option_none'] ) {
469 if ( $args['multiple'] ) {
470 $selected = selected( true, in_array( - 1, $args['selected'] ), false );
471 } else {
472 $selected = selected( $args['selected'], - 1, false );
473 }
474 $output .= '<option value="-1"' . $selected . '>' . esc_html( $args['show_option_none'] ) . '</option>';
475 }
476
477 foreach ( $args['options'] as $key => $option ) {
478
479 if ( $args['multiple'] && is_array( $args['selected'] ) ) {
480 $selected = selected( true, in_array( $key, $args['selected'] ), false );
481 } else {
482 $selected = selected( $args['selected'], $key, false );
483 }
484
485 $output .= '<option value="' . esc_attr( $key ) . '"' . $selected . '>' . esc_html( $option ) . '</option>';
486 }
487 }
488
489 $output .= '</select>';
490
491 return $output;
492 }
493
494 /**
495 * Checkbox
496 *
497 * Renders an HTML Checkbox.
498 *
499 * @since 1.0
500 * @access public
501 *
502 * @param array $args Arguments for the Checkbox.
503 *
504 * @return string The checkbox.
505 */
506 public function checkbox( $args = array() ) {
507 $defaults = array(
508 'name' => null,
509 'current' => null,
510 'class' => 'give-checkbox',
511 'options' => array(
512 'disabled' => false,
513 'readonly' => false,
514 ),
515 );
516
517 $args = wp_parse_args( $args, $defaults );
518
519 $options = '';
520 if ( ! empty( $args['options']['disabled'] ) ) {
521 $options .= ' disabled="disabled"';
522 } elseif ( ! empty( $args['options']['readonly'] ) ) {
523 $options .= ' readonly';
524 }
525
526 $output = '<input type="checkbox"' . $options . ' name="' . esc_attr( $args['name'] ) . '" id="' . esc_attr( $args['name'] ) . '" class="' . $args['class'] . ' ' . esc_attr( $args['name'] ) . '" ' . checked( 1, $args['current'], false ) . ' />';
527
528 return $output;
529 }
530
531 /**
532 * Text Field
533 *
534 * Renders an HTML Text field.
535 *
536 * @since 1.0
537 * @access public
538 *
539 * @param array $args Arguments for the text field.
540 *
541 * @return string The text field.
542 */
543 public function text( $args = array() ) {
544 // Backwards compatibility.
545 if ( func_num_args() > 1 ) {
546 $args = func_get_args();
547
548 $name = $args[0];
549 $value = isset( $args[1] ) ? $args[1] : '';
550 $label = isset( $args[2] ) ? $args[2] : '';
551 $desc = isset( $args[3] ) ? $args[3] : '';
552 }
553
554 $defaults = array(
555 'name' => isset( $name ) ? $name : 'text',
556 'value' => isset( $value ) ? $value : null,
557 'label' => isset( $label ) ? $label : null,
558 'desc' => isset( $desc ) ? $desc : null,
559 'placeholder' => '',
560 'class' => 'regular-text',
561 'disabled' => false,
562 'autocomplete' => '',
563 'data' => false,
564 );
565
566 $args = wp_parse_args( $args, $defaults );
567
568 $disabled = '';
569 if ( $args['disabled'] ) {
570 $disabled = ' disabled="disabled"';
571 }
572
573 $data = '';
574 if ( ! empty( $args['data'] ) ) {
575 foreach ( $args['data'] as $key => $value ) {
576 $data .= 'data-' . $key . '="' . $value . '" ';
577 }
578 }
579
580 $output = '<span id="give-' . sanitize_key( $args['name'] ) . '-wrap">';
581
582 $output .= '<label class="give-label" for="give-' . sanitize_key( $args['name'] ) . '">' . esc_html( $args['label'] ) . '</label>';
583
584 if ( ! empty( $args['desc'] ) ) {
585 $output .= '<span class="give-description">' . esc_html( $args['desc'] ) . '</span>';
586 }
587
588 $output .= '<input type="text" name="' . esc_attr( $args['name'] ) . '" id="' . esc_attr( $args['name'] ) . '" autocomplete="' . esc_attr( $args['autocomplete'] ) . '" value="' . esc_attr( $args['value'] ) . '" placeholder="' . esc_attr( $args['placeholder'] ) . '" class="' . $args['class'] . '" ' . $data . '' . $disabled . '/>';
589
590 $output .= '</span>';
591
592 return $output;
593 }
594
595 /**
596 * Date Picker
597 *
598 * Renders a date picker field.
599 *
600 * @since 1.5
601 * @access public
602 *
603 * @param array $args Arguments for the date picker.
604 *
605 * @return string The date picker.
606 */
607 public function date_field( $args = array() ) {
608
609 if ( empty( $args['class'] ) ) {
610 $args['class'] = 'give_datepicker';
611 } elseif ( ! strpos( $args['class'], 'give_datepicker' ) ) {
612 $args['class'] .= ' give_datepicker';
613 }
614
615 return $this->text( $args );
616 }
617
618 /**
619 * Textarea
620 *
621 * Renders an HTML textarea.
622 *
623 * @since 1.0
624 * @access public
625 *
626 * @param array $args Arguments for the textarea.
627 *
628 * @return string The textarea.
629 */
630 public function textarea( $args = array() ) {
631 $defaults = array(
632 'name' => 'textarea',
633 'value' => null,
634 'label' => null,
635 'desc' => null,
636 'class' => 'large-text',
637 'disabled' => false,
638 );
639
640 $args = wp_parse_args( $args, $defaults );
641
642 $disabled = '';
643 if ( $args['disabled'] ) {
644 $disabled = ' disabled="disabled"';
645 }
646
647 $output = '<span id="give-' . sanitize_key( $args['name'] ) . '-wrap">';
648
649 $output .= '<label class="give-label" for="give-' . sanitize_key( $args['name'] ) . '">' . esc_html( $args['label'] ) . '</label>';
650
651 $output .= '<textarea name="' . esc_attr( $args['name'] ) . '" id="' . esc_attr( $args['name'] ) . '" class="' . $args['class'] . '"' . $disabled . '>' . esc_attr( $args['value'] ) . '</textarea>';
652
653 if ( ! empty( $args['desc'] ) ) {
654 $output .= '<span class="give-description">' . esc_html( $args['desc'] ) . '</span>';
655 }
656
657 $output .= '</span>';
658
659 return $output;
660 }
661
662 /**
663 * User Search Field
664 *
665 * Renders an ajax user search field.
666 *
667 * @since 1.0
668 * @access public
669 *
670 * @param array $args Arguments for the search field.
671 *
672 * @return string The text field with ajax search.
673 */
674 public function ajax_user_search( $args = array() ) {
675
676 $defaults = array(
677 'name' => 'users',
678 'id' => 'users',
679 'class' => 'give-ajax-user-search',
680 'multiple' => false,
681 'selected' => 0,
682 'chosen' => true,
683 'number' => 30,
684 'select_atts' => '',
685 'placeholder' => __( 'Select a user', 'give' ),
686 'data' => array(
687 'search-type' => 'user',
688 ),
689 );
690
691 $args = wp_parse_args( $args, $defaults );
692
693 // Set initial args.
694 $get_users_args = array(
695 'number' => $args['number'],
696 );
697
698 // Ensure selected user is not included in initial query.
699 // This is because sites with many users, it's not a guarantee the selected user will be returned.
700 if ( ! empty( $args['selected'] ) ) {
701 $get_users_args['exclude'] = $args['selected'];
702 }
703
704 // Initial users array.
705 $users = apply_filters( 'give_ajax_user_search_initial_results', get_users( $get_users_args ), $args );
706
707 // Now add the selected user to the $users array if the arg is present.
708 if ( ! empty( $args['selected'] ) ) {
709 $selected_user = apply_filters( 'give_ajax_user_search_selected_results', get_users( "include={$args['selected']}" ), $args );;
710 $users = array_merge( $users, $selected_user );
711 }
712
713 $options = array();
714
715 if ( $users ) {
716 $options[0] = $args['placeholder'];
717 foreach ( $users as $user ) {
718 $options[ absint( $user->ID ) ] = esc_html( $user->user_login . ' (' . $user->user_email . ')' );
719 }
720 } else {
721 $options[0] = __( 'No users found.', 'give' );
722 }
723
724 $output = $this->select( array(
725 'name' => $args['name'],
726 'selected' => $args['selected'],
727 'id' => $args['id'],
728 'class' => $args['class'],
729 'options' => $options,
730 'chosen' => $args['chosen'],
731 'multiple' => $args['multiple'],
732 'placeholder' => $args['placeholder'],
733 'select_atts' => $args['select_atts'],
734 'show_option_all' => false,
735 'show_option_none' => false,
736 'data' => $args['data'],
737 ) );
738
739 return $output;
740
741 }
742
743 }
744