| | 1 | <?php |
| | 2 | /** |
| | 3 | * BuddyPress XProfile Classes. |
| | 4 | * |
| | 5 | * @package BuddyPress |
| | 6 | * @subpackage XProfileClasses |
| | 7 | * @since 3.0.0 |
| | 8 | */ |
| | 9 | |
| | 10 | // Exit if accessed directly. |
| | 11 | defined( 'ABSPATH' ) || exit; |
| | 12 | |
| | 13 | /** |
| | 14 | * Telephone number xprofile field type. |
| | 15 | * |
| | 16 | * @since 3.0.0 |
| | 17 | */ |
| | 18 | class BP_XProfile_Field_Type_Telephone extends BP_XProfile_Field_Type { |
| | 19 | |
| | 20 | /** |
| | 21 | * Constructor for the telephone number field type. |
| | 22 | * |
| | 23 | * @since 3.0.0 |
| | 24 | */ |
| | 25 | public function __construct() { |
| | 26 | parent::__construct(); |
| | 27 | |
| | 28 | $this->category = _x( 'Single Fields', 'xprofile field type category', 'buddypress' ); |
| | 29 | $this->name = _x( 'Phone Number', 'xprofile field type', 'buddypress' ); |
| | 30 | |
| | 31 | $this->set_format( '/^.*$/', 'replace' ); |
| | 32 | |
| | 33 | /** |
| | 34 | * Fires inside __construct() method for BP_XProfile_Field_Type_Telephone class. |
| | 35 | * |
| | 36 | * @since 3.0.0 |
| | 37 | * |
| | 38 | * @param BP_XProfile_Field_Type_Telephone $this Current instance of the field type. |
| | 39 | */ |
| | 40 | do_action( 'bp_xprofile_field_type_telephone', $this ); |
| | 41 | } |
| | 42 | |
| | 43 | /** |
| | 44 | * Output the edit field HTML for this field type. |
| | 45 | * |
| | 46 | * Must be used inside the {@link bp_profile_fields()} template loop. |
| | 47 | * |
| | 48 | * @since 3.0.0 |
| | 49 | * |
| | 50 | * @param array $raw_properties Optional key/value array of |
| | 51 | * {@link http://dev.w3.org/html5/markup/input.text.html permitted attributes} |
| | 52 | * that you want to add. |
| | 53 | */ |
| | 54 | public function edit_field_html( array $raw_properties = array() ) { |
| | 55 | /* |
| | 56 | * User_id is a special optional parameter that certain other fields |
| | 57 | * types pass to {@link bp_the_profile_field_options()}. |
| | 58 | */ |
| | 59 | if ( isset( $raw_properties['user_id'] ) ) { |
| | 60 | unset( $raw_properties['user_id'] ); |
| | 61 | } |
| | 62 | |
| | 63 | $r = bp_parse_args( $raw_properties, array( |
| | 64 | 'type' => 'tel', |
| | 65 | 'value' => bp_get_the_profile_field_edit_value(), |
| | 66 | ) ); ?> |
| | 67 | |
| | 68 | <legend id="<?php bp_the_profile_field_input_name(); ?>-1"> |
| | 69 | <?php bp_the_profile_field_name(); ?> |
| | 70 | <?php bp_the_profile_field_required_label(); ?> |
| | 71 | </legend> |
| | 72 | |
| | 73 | <?php |
| | 74 | |
| | 75 | /** This action is documented in bp-xprofile/bp-xprofile-classes */ |
| | 76 | do_action( bp_get_the_profile_field_errors_action() ); ?> |
| | 77 | |
| | 78 | <input <?php echo $this->get_edit_field_html_elements( $r ); ?> aria-labelledby="<?php bp_the_profile_field_input_name(); ?>-1" aria-describedby="<?php bp_the_profile_field_input_name(); ?>-3"> |
| | 79 | |
| | 80 | <?php if ( bp_get_the_profile_field_description() ) : ?> |
| | 81 | <p class="description" id="<?php bp_the_profile_field_input_name(); ?>-3"><?php bp_the_profile_field_description(); ?></p> |
| | 82 | <?php endif; ?> |
| | 83 | |
| | 84 | <?php |
| | 85 | } |
| | 86 | |
| | 87 | /** |
| | 88 | * Output HTML for this field type on the wp-admin Profile Fields screen. |
| | 89 | * |
| | 90 | * Must be used inside the {@link bp_profile_fields()} template loop. |
| | 91 | * |
| | 92 | * @since 3.0.0 |
| | 93 | * |
| | 94 | * @param array $raw_properties Optional key/value array of permitted attributes that you want to add. |
| | 95 | */ |
| | 96 | public function admin_field_html( array $raw_properties = array() ) { |
| | 97 | $r = bp_parse_args( $raw_properties, array( |
| | 98 | 'type' => 'tel', |
| | 99 | ) ); ?> |
| | 100 | |
| | 101 | <label for="<?php bp_the_profile_field_input_name(); ?>" class="screen-reader-text"><?php |
| | 102 | /* translators: accessibility text */ |
| | 103 | esc_html_e( 'Phone Number', 'buddypress' ); |
| | 104 | ?></label> |
| | 105 | <input <?php echo $this->get_edit_field_html_elements( $r ); ?>> |
| | 106 | |
| | 107 | <?php |
| | 108 | } |
| | 109 | |
| | 110 | /** |
| | 111 | * This method usually outputs HTML for this field type's children options on the wp-admin Profile Fields |
| | 112 | * "Add Field" and "Edit Field" screens, but for this field type, we don't want it, so it's stubbed out. |
| | 113 | * |
| | 114 | * @since 3.0.0 |
| | 115 | * |
| | 116 | * @param BP_XProfile_Field $current_field The current profile field on the add/edit screen. |
| | 117 | * @param string $control_type Optional. HTML input type used to render the |
| | 118 | * current field's child options. |
| | 119 | */ |
| | 120 | public function admin_new_field_html( BP_XProfile_Field $current_field, $control_type = '' ) {} |
| | 121 | |
| | 122 | /** |
| | 123 | * Format URL values for display. |
| | 124 | * |
| | 125 | * @since 3.0.0 |
| | 126 | * |
| | 127 | * @param string $field_value The URL value, as saved in the database. |
| | 128 | * @param string|int $field_id Optional. ID of the field. |
| | 129 | * |
| | 130 | * @return string URL converted to a link. |
| | 131 | */ |
| | 132 | public static function display_filter( $field_value, $field_id = '' ) { |
| | 133 | $url = wp_strip_all_tags( $field_value ); |
| | 134 | $parts = parse_url( $url ); |
| | 135 | |
| | 136 | // Add the tel:// protocol to the field value. |
| | 137 | if ( isset( $parts['scheme'] ) && strtolower( $parts['scheme'] ) !== 'tel' ) { |
| | 138 | $url = preg_replace( '#^' . $parts['scheme'] . '#i', 'tel', $url ); |
| | 139 | $url_text = preg_replace( '#^tel://#i', '', $url ); |
| | 140 | } else { |
| | 141 | $url_text = $url; |
| | 142 | $url = 'tel://' . $url; |
| | 143 | } |
| | 144 | |
| | 145 | return sprintf( |
| | 146 | '<a href="%1$s" rel="nofollow">%2$s</a>', |
| | 147 | esc_url( $url, array( 'tel' ) ), |
| | 148 | esc_html( $url_text ) |
| | 149 | ); |
| | 150 | } |
| | 151 | } |