PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / shortcodes / gravatar.php
jetpack / modules / shortcodes Last commit date
css 1 month ago images 1 year ago img 2 months ago js 7 months ago archiveorg-book.php 7 months ago archiveorg.php 1 month ago archives.php 1 week ago bandcamp.php 7 months ago brightcove.php 6 months ago cartodb.php 7 months ago class.filter-embedded-html-objects.php 7 months ago codepen.php 7 months ago crowdsignal.php 6 months ago dailymotion.php 7 months ago descript.php 7 months ago facebook.php 7 months ago flatio.php 7 months ago flickr.php 7 months ago getty.php 7 months ago gist.php 7 months ago googleapps.php 7 months ago googlemaps.php 1 month ago googleplus.php 7 months ago gravatar.php 7 months ago houzz.php 7 months ago inline-pdfs.php 7 months ago instagram.php 7 months ago kickstarter.php 7 months ago mailchimp.php 1 month ago medium.php 7 months ago mixcloud.php 7 months ago others.php 7 months ago pinterest.php 7 months ago presentations.php 7 months ago quiz.php 7 months ago recipe.php 2 weeks ago scribd.php 7 months ago shortcode-utils.php 7 months ago sitemap.php 7 months ago slideshare.php 7 months ago slideshow.php 2 weeks ago smartframe.php 7 months ago soundcloud.php 1 month ago spotify.php 7 months ago ted.php 7 months ago tweet.php 7 months ago twitchtv.php 2 weeks ago twitter-timeline.php 7 months ago twitter.php 7 months ago unavailable.php 7 months ago untappd-menu.php 7 months ago upcoming-events.php 7 months ago ustream.php 7 months ago videopress.php 7 months ago vimeo.php 1 month ago vine.php 7 months ago vr.php 1 month ago wufoo.php 7 months ago youtube.php 4 months ago
gravatar.php
223 lines
1 <?php
2 /**
3 * Gravatar shortcode for avatar and profile.
4 *
5 * Usage:
6 *
7 * [gravatar email="user@example.org" size="48"]
8 * [gravatar_profile who="user@example.org"]
9 *
10 * @package automattic/jetpack
11 */
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit( 0 );
15 }
16
17 add_shortcode( 'gravatar', 'jetpack_gravatar_shortcode' );
18 add_shortcode( 'gravatar_profile', 'jetpack_gravatar_profile_shortcode' );
19
20 /**
21 * Get gravatar using the email provided at the specified size.
22 *
23 * @since 4.5.0
24 *
25 * @param array $atts Shortcode attributes.
26 *
27 * @return bool|string
28 */
29 function jetpack_gravatar_shortcode( $atts ) {
30 $atts = shortcode_atts(
31 array(
32 'email' => '',
33 'size' => 96,
34 ),
35 $atts
36 );
37
38 if ( empty( $atts['email'] ) || ! is_email( $atts['email'] ) ) {
39 return false;
40 }
41
42 $atts['size'] = (int) $atts['size'];
43 if ( 0 > $atts['size'] ) {
44 $atts['size'] = 96;
45 }
46
47 return get_avatar( $atts['email'], $atts['size'] );
48 }
49
50 /**
51 * Display Gravatar profile
52 *
53 * @since 4.5.0
54 *
55 * @param array $atts Shortcode attributes.
56 *
57 * @uses shortcode_atts()
58 * @uses get_user_by()
59 * @uses is_email()
60 * @uses sanitize_email()
61 * @uses sanitize_user()
62 * @uses set_url_scheme()
63 * @uses wpcom_get_avatar_url()
64 * @uses get_user_attribute()
65 * @uses esc_url()
66 * @uses esc_html()
67 * @uses _e()
68 *
69 * @return string
70 */
71 function jetpack_gravatar_profile_shortcode( $atts ) {
72 // Give each use of the shortcode a unique ID.
73 static $instance = 0;
74
75 // Process passed attributes.
76 $atts = shortcode_atts(
77 array(
78 'who' => null,
79 ),
80 $atts,
81 'jetpack_gravatar_profile'
82 );
83
84 // Can specify username, user ID, or email address.
85 if ( is_numeric( $atts['who'] ) ) {
86 $user_id = (int) $atts['who'];
87 if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) {
88 // Bail if the user id is not a member of this site.
89 return false;
90 }
91 $user = get_user_by( 'id', $user_id );
92 } elseif ( is_email( $atts['who'] ) ) {
93 $user = get_user_by( 'email', sanitize_email( $atts['who'] ) );
94 } elseif ( is_string( $atts['who'] ) ) {
95 $user = get_user_by( 'login', sanitize_user( $atts['who'] ) );
96 } else {
97 $user = false;
98 }
99
100 // Bail if we don't have a user.
101 if ( false === $user ) {
102 return false;
103 }
104
105 $hashed_email = hash( 'sha256', strtolower( trim( $user->user_email ) ) );
106 $cache_key = 'jetpack_gravatar_profile_' . $hashed_email;
107 $profile = get_transient( $cache_key );
108
109 if ( empty( $profile ) ) {
110 $profile_url = sprintf(
111 'https://secure.gravatar.com/%s.json',
112 $hashed_email
113 );
114
115 $response = wp_remote_get(
116 esc_url_raw( $profile_url ),
117 array( 'User-Agent' => 'Jetpack Plugin Gravatar Profile Shortcode' )
118 );
119 $response_code = wp_remote_retrieve_response_code( $response );
120 $expire = 300; // Cache any errors for 5 minutes.
121 $profile = array();
122
123 if ( $response_code === 200 ) {
124 $profile = json_decode( wp_remote_retrieve_body( $response ), true );
125
126 if (
127 is_array( $profile )
128 && ! empty( $profile['entry'] )
129 && is_array( $profile['entry'] )
130 ) {
131 // Sucessfully fetched the profile. Cache for 15 minutes.
132 $expire = 900;
133 $profile = $profile['entry'][0];
134 }
135 }
136
137 set_transient( $cache_key, $profile, $expire );
138 }
139
140 // Fetching the profile returned an error. Bail.
141 if ( empty( $profile ) ) {
142 return false;
143 }
144
145 // Render the shortcode.
146 $gravatar_url = 'https://gravatar.com/' . $hashed_email;
147 $user_location = ! empty( $profile['currentLocation'] ) ? $profile['currentLocation'] : '';
148 $display_name = ! empty( $profile['displayName'] ) ? $profile['displayName'] : '';
149 $user_description = ! empty( $profile['aboutMe'] ) ? $profile['aboutMe'] : '';
150
151 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
152 $gravatar_url = 'https://gravatar.com/' . $user->user_login;
153 $avatar_url = wpcom_get_avatar_url( $user->ID, 96 );
154 $avatar_url = $avatar_url[0];
155 } else {
156 $avatar_url = get_avatar_url( $user->user_email, array( 'size' => 96 ) );
157 }
158
159 ob_start();
160
161 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
162 wp_enqueue_style( 'gravatar-style', plugins_url( '/css/gravatar-amp.css', __FILE__ ), array(), JETPACK__VERSION );
163 } else {
164 ?>
165 <script type="text/javascript">
166 ( function() {
167 if ( null === document.getElementById( 'gravatar-profile-embed-styles' ) ) {
168 var headID = document.getElementsByTagName( 'head' )[0];
169 var styleNode = document.createElement( 'style' );
170 styleNode.type = 'text/css';
171 styleNode.id = 'gravatar-profile-embed-styles';
172
173 var gCSS = '.grofile-wrap { border: solid 1px #f0f0f1; padding: 10px; } .grofile { padding: 0 0 5px 0; } .grofile-left { float: left; display: block; width: 96px; margin-right: 15px; } .grofile .gravatar { margin-bottom: 5px; } .grofile-clear { clear: left; font-size: 1px; height: 1px; } .grofile ul li a { text-indent: -99999px; } .grofile .grofile-left a:hover { text-decoration: none !important; border: none !important; } .grofile-name { margin-top: 0; }';
174
175 if ( document.all ) {
176 styleNode.innerText = gCSS;
177 } else {
178 styleNode.textContent = gCSS;
179 }
180
181 headID.appendChild( styleNode );
182 }
183 } )();
184 </script>
185 <?php
186 }
187 ?>
188
189 <div class="grofile vcard" id="grofile-embed-<?php echo esc_attr( $instance ); ?>">
190 <div class="grofile-inner">
191 <div class="grofile-left">
192 <div class="grofile-img">
193 <a href="<?php echo esc_url( $gravatar_url ); ?>">
194 <img src="<?php echo esc_url( $avatar_url ); ?>" width="96" height="96" class="no-grav gravatar photo" />
195 </a>
196 </div>
197 </div>
198 <div class="grofile-right">
199 <p class="grofile-name fn">
200 <strong><?php echo esc_html( $display_name ); ?></strong>
201 <?php
202 if ( ! empty( $user_location ) ) :
203 ?>
204 <br><span class="grofile-location adr"><?php echo esc_html( $user_location ); ?></span><?php endif; ?>
205 </p>
206 <p class="grofile-bio">
207 <strong><?php esc_html_e( 'Bio:', 'jetpack' ); ?></strong> <?php echo wp_kses_post( $user_description ); ?>
208 </p>
209 <p class="grofile-view">
210 <a href="<?php echo esc_url( $gravatar_url ); ?>"><?php esc_html_e( 'View complete profile', 'jetpack' ); ?></a>
211 </p>
212 </div>
213 <span class="grofile-clear">&nbsp;</span>
214 </div>
215 </div>
216 <?php
217
218 // Increment and return the rendered profile.
219 ++$instance;
220
221 return ob_get_clean();
222 }
223