| 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 | } |