1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* @file class-gravityview-field-gravatar.php |
4
|
|
|
* @package GravityView |
5
|
|
|
* @subpackage includes\fields |
6
|
|
|
*/ |
7
|
|
|
|
8
|
|
|
/** |
9
|
|
|
* @since TODO |
10
|
|
|
*/ |
11
|
|
|
class GravityView_Field_Gravatar extends GravityView_Field { |
12
|
|
|
|
13
|
|
|
var $name = 'gravatar'; |
14
|
|
|
|
15
|
|
|
var $is_searchable = false; |
16
|
|
|
|
17
|
|
|
var $group = 'gravityview'; |
18
|
|
|
|
19
|
|
|
var $contexts = array( 'single', 'multiple', 'export' ); |
20
|
|
|
|
21
|
|
|
public function __construct() { |
22
|
|
|
$this->label = esc_html__( 'Gravatar', 'gravityview' ); |
23
|
|
|
$this->description = esc_html__( 'A Gravatar is an image that represents a person online based on their email. Powered by gravatar.com.', 'gravityview' ); |
24
|
|
|
|
25
|
|
|
$this->add_hooks(); |
26
|
|
|
|
27
|
|
|
parent::__construct(); |
28
|
|
|
} |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* Add filters for this field |
32
|
|
|
*/ |
33
|
|
|
public function add_hooks() { |
34
|
|
|
add_filter( 'gravityview_entry_default_fields', array( $this, 'add_default_field' ), 10, 3 ); |
35
|
|
|
} |
36
|
|
|
|
37
|
|
|
/** |
38
|
|
|
* Add this field to the default fields in the GV field picker |
39
|
|
|
* |
40
|
|
|
* @param array $entry_default_fields Array of fields shown by default |
41
|
|
|
* @param string|array $form form_ID or form object |
42
|
|
|
* @param string $zone Either 'single', 'directory', 'edit', 'header', 'footer' |
43
|
|
|
* |
44
|
|
|
* @return array |
45
|
|
|
*/ |
46
|
|
|
function add_default_field( $entry_default_fields = array(), $form = array(), $zone = '' ) { |
|
|
|
|
47
|
|
|
|
48
|
|
|
if ( 'edit' === $zone ) { |
49
|
|
|
return $entry_default_fields; |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
$entry_default_fields[ $this->name ] = array( |
53
|
|
|
'label' => $this->label, |
54
|
|
|
'desc' => $this->description, |
55
|
|
|
'type' => $this->name, |
56
|
|
|
); |
57
|
|
|
|
58
|
|
|
return $entry_default_fields; |
59
|
|
|
} |
60
|
|
|
|
61
|
|
|
/** |
62
|
|
|
* Get either a Gravatar URL or complete image tag for a specified email address. |
63
|
|
|
* |
64
|
|
|
* @source https://gravatar.com/site/implement/images/php/ |
65
|
|
|
* |
66
|
|
|
* @param string $email The email address. Required. |
67
|
|
|
* @param int $size Size in pixels, 1 - 2048. Default: 80 |
68
|
|
|
* @param string $default Default imageset to use. Options: '404', 'mp', 'identicon', 'monsterid', 'wavatar', 'retro', 'robohash', 'blank', or a custom URL you provide to your preferred default image. Default: 'mp' |
69
|
|
|
* @param string $rating Maximum rating (inclusive) Options: 'g', 'pg', 'r', 'x'. Default: 'g' |
70
|
|
|
* @param bool $img True to return a complete IMG tag False for just the URL. Default: true |
71
|
|
|
* @param array $atts Optional, additional key/value attributes to include in the IMG tag |
72
|
|
|
* |
73
|
|
|
* @return string containing either just a URL or a complete image tag |
74
|
|
|
*/ |
75
|
|
|
static public function get_gravatar( $email, $size = 80, $default = 'mp', $rating = 'g', $img = true, $atts = array() ) { |
76
|
|
|
|
77
|
|
|
$size = (int) $size; |
78
|
|
|
|
79
|
|
|
if ( $size > 2048 ) { |
80
|
|
|
$size = 2048; |
81
|
|
|
} elseif ( $size < 1 ) { |
82
|
|
|
$size = 1; |
83
|
|
|
} |
84
|
|
|
|
85
|
|
|
$url = 'https://www.gravatar.com/avatar/'; |
86
|
|
|
$url .= md5( strtolower( trim( $email ) ) ); |
87
|
|
|
$url .= "?s={$size}&default={$default}&rating={$rating}"; |
88
|
|
|
if ( $img ) { |
89
|
|
|
$url = '<img src="' . esc_url( $url ) . '"'; |
90
|
|
|
|
91
|
|
|
foreach ( $atts as $key => $val ) { |
92
|
|
|
$url .= ' ' . esc_attr( $key ) . '="' . esc_attr( $val ) . '"'; |
93
|
|
|
} |
94
|
|
|
|
95
|
|
|
$url .= ' />'; |
96
|
|
|
} |
97
|
|
|
|
98
|
|
|
return $url; |
99
|
|
|
} |
100
|
|
|
|
101
|
|
|
/** |
102
|
|
|
* Get the email address to use, based on field settings |
103
|
|
|
* |
104
|
|
|
* @internal May change in the future! Don't rely on this. |
105
|
|
|
* |
106
|
|
|
* @param array $field_settings |
107
|
|
|
* @param array $entry Gravity Forms entry |
108
|
|
|
* |
109
|
|
|
* @return string Email address from field or from entry creator |
110
|
|
|
*/ |
111
|
|
|
static public function get_email( $field_settings, $entry ) { |
112
|
|
|
|
113
|
|
|
// There was no logged in user. |
114
|
|
|
switch ( $field_settings['email_field'] ) { |
115
|
|
|
case 'created_by_email': |
116
|
|
|
|
117
|
|
|
$created_by = \GV\Utils::get( $entry, 'created_by', null ); |
118
|
|
|
|
119
|
|
|
if ( empty( $created_by ) ) { |
120
|
|
|
return ''; |
121
|
|
|
} |
122
|
|
|
|
123
|
|
|
$user = get_user_by( 'id', $created_by ); |
124
|
|
|
|
125
|
|
|
$email = $user->user_email; |
126
|
|
|
break; |
127
|
|
|
default: |
128
|
|
|
$field_id = \GV\Utils::get( $field_settings, 'email_field' ); |
129
|
|
|
$email = rgar( $entry, $field_id ); |
130
|
|
|
break; |
131
|
|
|
} |
132
|
|
|
|
133
|
|
|
return $email; |
134
|
|
|
} |
135
|
|
|
|
136
|
|
|
/** |
137
|
|
|
* @inheritDoc |
138
|
|
|
*/ |
139
|
|
|
public function field_options( $field_options, $template_id, $field_id, $context, $input_type, $form_id ) { |
140
|
|
|
|
141
|
|
|
if ( 'edit' === $context ) { |
142
|
|
|
return $field_options; |
143
|
|
|
} |
144
|
|
|
|
145
|
|
|
$field_options['email_field'] = array( |
146
|
|
|
'type' => 'select', |
147
|
|
|
'label' => __( 'Email to Use', 'gravityview' ), |
148
|
|
|
'value' => 'created_by_email', |
149
|
|
|
'desc' => __( 'Which email should be used to generate the Gravatar?', 'gravityview' ), |
150
|
|
|
'choices' => $this->_get_email_field_choices( $form_id ), |
151
|
|
|
); |
152
|
|
|
|
153
|
|
|
$field_options['default'] = array( |
154
|
|
|
'type' => 'select', |
155
|
|
|
'label' => __( 'Default Image', 'gravityview' ), |
156
|
|
|
'desc' => __( 'Choose the default image to be shown when an email has no Gravatar.', 'gravityview' ) . ' <a href="https://en.gravatar.com/site/implement/images/">' . esc_html( sprintf( __( 'Read more about %s', 'gravityview' ), __( 'Default Image', 'gravityview' ) ) ) . '</a>', |
157
|
|
|
'value' => 'mp', |
158
|
|
|
'choices' => array( |
159
|
|
|
'mp' => __( 'Silhouetted Person', 'gravityview' ), |
160
|
|
|
'' => __( 'Gravatar Icon', 'gravityview' ), |
161
|
|
|
'identicon' => __( 'Abstract Geometric Patterns', 'gravityview' ), |
162
|
|
|
'monsterid' => __( 'Monster Faces', 'gravityview' ), |
163
|
|
|
'retro' => __( 'Arcade-style Faces', 'gravityview' ), |
164
|
|
|
'robohash' => __( 'Robot Faces', 'gravityview' ), |
165
|
|
|
'blank' => __( 'Transparent Image', 'gravityview' ), |
166
|
|
|
), |
167
|
|
|
); |
168
|
|
|
|
169
|
|
|
$field_options['size'] = array( |
170
|
|
|
'type' => 'number', |
171
|
|
|
'label' => __( 'Size in Pixels', 'gravityview' ), |
172
|
|
|
'value' => 80, |
173
|
|
|
'max' => 2048, |
174
|
|
|
'min' => 1, |
175
|
|
|
); |
176
|
|
|
|
177
|
|
|
$field_options['rating'] = array( |
178
|
|
|
'type' => 'radio', |
179
|
|
|
'label' => __( 'Maximum Rating', 'gravityview' ), |
180
|
|
|
'desc' => __( 'Gravatar allows users to self-rate their images so that they can indicate if an image is appropriate for a certain audience. Specify one of the following ratings to request images up to and including that rating.', 'gravityview' ) . ' <a href="https://en.gravatar.com/site/implement/images/#rating">' . esc_html( sprintf( __( 'Read more about %s', 'gravityview' ), __( 'Ratings', 'gravityview' ) ) ) . '</a>', |
181
|
|
|
'value' => 'g', |
182
|
|
|
'choices' => array( |
183
|
|
|
'g' => 'G', |
184
|
|
|
'pg' => 'PG', |
185
|
|
|
'r' => 'R', |
186
|
|
|
'x' => 'X', |
187
|
|
|
), |
188
|
|
|
); |
189
|
|
|
|
190
|
|
|
return $field_options; |
191
|
|
|
} |
192
|
|
|
|
193
|
|
|
/** |
194
|
|
|
* Get email fields for the form, as well as default choices |
195
|
|
|
* |
196
|
|
|
* @param int $form_id ID of the form to fetch fields for |
197
|
|
|
* |
198
|
|
|
* @return array Array keys are field IDs and value is field label |
199
|
|
|
*/ |
200
|
|
|
private function _get_email_field_choices( $form_id = 0 ) { |
201
|
|
|
|
202
|
|
|
$field_choices = array( |
203
|
|
|
'created_by_email' => __( 'Entry Creator: Email', 'gravityview' ), |
204
|
|
|
); |
205
|
|
|
|
206
|
|
|
$form = GFAPI::get_form( $form_id ); |
207
|
|
|
|
208
|
|
|
if ( ! $form ) { |
209
|
|
|
return $field_choices; |
210
|
|
|
} |
211
|
|
|
|
212
|
|
|
$email_fields = GFAPI::get_fields_by_type( $form, array( 'email' ) ); |
213
|
|
|
|
214
|
|
|
foreach ( $email_fields as $email_field ) { |
215
|
|
|
$email_field_id = $email_field['id']; |
216
|
|
|
$email_field_label = GVCommon::get_field_label( $form, $email_field_id ); |
217
|
|
|
$email_field_label = sprintf( __( 'Field: %s', 'gravityview' ), $email_field_label ); |
218
|
|
|
$field_choices[ $email_field_id ] = esc_html( $email_field_label ); |
219
|
|
|
} |
220
|
|
|
|
221
|
|
|
return $field_choices; |
222
|
|
|
} |
223
|
|
|
|
224
|
|
|
} |
225
|
|
|
|
226
|
|
|
new GravityView_Field_Gravatar; |
227
|
|
|
|
Adding explicit visibility (
private
,protected
, orpublic
) is generally recommend to communicate to other developers how, and from where this method is intended to be used.