Completed
Push — master ( 859b10...711eb2 )
by
unknown
13:01
created

edit_field_html()   B

Complexity

Conditions 3
Paths 4

Size

Total Lines 32
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 21
nc 4
nop 1
dl 0
loc 32
rs 8.8571
c 0
b 0
f 0
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 View Code Duplication
	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'] ) ) {
138
			if ( strtolower( $parts['scheme'] ) !== 'tel' ) {
139
				$scheme = preg_quote( $parts['scheme'], '#' );
140
				$url    = preg_replace( '#^' . $scheme . '#i', 'tel', $url );
141
			}
142
143
			$url_text = preg_replace( '#^tel://#i', '', $url );
144
145
		} else {
146
			$url_text = $url;
147
			$url      = 'tel://' . $url;
148
		}
149
150
		return sprintf(
151
			'<a href="%1$s" rel="nofollow">%2$s</a>',
152
			esc_url( $url, array( 'tel' ) ),
153
			esc_html( $url_text )
154
		);
155
	}
156
}
157