PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.9.2
Jetpack – WP Security, Backup, Speed, & Growth v13.9.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 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 2 years ago images 2 years ago img 2 years ago js 2 years ago archiveorg-book.php 5 years ago archiveorg.php 5 years ago archives.php 5 years ago bandcamp.php 3 years ago brightcove.php 5 years ago cartodb.php 5 years ago class.filter-embedded-html-objects.php 2 years ago codepen.php 5 years ago crowdsignal.php 2 years ago dailymotion.php 3 years ago descript.php 4 years ago facebook.php 2 years ago flatio.php 5 years ago flickr.php 2 years ago getty.php 2 years ago gist.php 3 years ago googleapps.php 2 years ago googlemaps.php 2 years ago googleplus.php 5 years ago gravatar.php 2 years ago houzz.php 5 years ago inline-pdfs.php 4 years ago instagram.php 3 years ago kickstarter.php 3 years ago mailchimp.php 3 years ago medium.php 3 years ago mixcloud.php 2 years ago others.php 2 years ago pinterest.php 2 years ago presentations.php 2 years ago quiz.php 4 years ago recipe.php 2 years ago scribd.php 5 years ago sitemap.php 5 years ago slideshare.php 5 years ago slideshow.php 2 years ago smartframe.php 3 years ago soundcloud.php 3 years ago spotify.php 2 years ago ted.php 5 years ago tweet.php 2 years ago twitchtv.php 5 years ago twitter-timeline.php 5 years ago unavailable.php 3 years ago untappd-menu.php 3 years ago upcoming-events.php 3 years ago ustream.php 5 years ago videopress.php 4 years ago vimeo.php 2 years ago vine.php 5 years ago vr.php 2 years ago wordads.php 5 years ago wufoo.php 3 years ago youtube.php 1 year ago
gravatar.php
219 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 add_shortcode( 'gravatar', 'jetpack_gravatar_shortcode' );
14 add_shortcode( 'gravatar_profile', 'jetpack_gravatar_profile_shortcode' );
15
16 /**
17 * Get gravatar using the email provided at the specified size.
18 *
19 * @since 4.5.0
20 *
21 * @param array $atts Shortcode attributes.
22 *
23 * @return bool|string
24 */
25 function jetpack_gravatar_shortcode( $atts ) {
26 $atts = shortcode_atts(
27 array(
28 'email' => '',
29 'size' => 96,
30 ),
31 $atts
32 );
33
34 if ( empty( $atts['email'] ) || ! is_email( $atts['email'] ) ) {
35 return false;
36 }
37
38 $atts['size'] = (int) $atts['size'];
39 if ( 0 > $atts['size'] ) {
40 $atts['size'] = 96;
41 }
42
43 return get_avatar( $atts['email'], $atts['size'] );
44 }
45
46 /**
47 * Display Gravatar profile
48 *
49 * @since 4.5.0
50 *
51 * @param array $atts Shortcode attributes.
52 *
53 * @uses shortcode_atts()
54 * @uses get_user_by()
55 * @uses is_email()
56 * @uses sanitize_email()
57 * @uses sanitize_user()
58 * @uses set_url_scheme()
59 * @uses wpcom_get_avatar_url()
60 * @uses get_user_attribute()
61 * @uses esc_url()
62 * @uses esc_html()
63 * @uses _e()
64 *
65 * @return string
66 */
67 function jetpack_gravatar_profile_shortcode( $atts ) {
68 // Give each use of the shortcode a unique ID.
69 static $instance = 0;
70
71 // Process passed attributes.
72 $atts = shortcode_atts(
73 array(
74 'who' => null,
75 ),
76 $atts,
77 'jetpack_gravatar_profile'
78 );
79
80 // Can specify username, user ID, or email address.
81 if ( is_numeric( $atts['who'] ) ) {
82 $user_id = (int) $atts['who'];
83 if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) {
84 // Bail if the user id is not a member of this site.
85 return false;
86 }
87 $user = get_user_by( 'id', $user_id );
88 } elseif ( is_email( $atts['who'] ) ) {
89 $user = get_user_by( 'email', sanitize_email( $atts['who'] ) );
90 } elseif ( is_string( $atts['who'] ) ) {
91 $user = get_user_by( 'login', sanitize_user( $atts['who'] ) );
92 } else {
93 $user = false;
94 }
95
96 // Bail if we don't have a user.
97 if ( false === $user ) {
98 return false;
99 }
100
101 $hashed_email = hash( 'sha256', strtolower( trim( $user->user_email ) ) );
102 $cache_key = 'jetpack_gravatar_profile_' . $hashed_email;
103 $profile = get_transient( $cache_key );
104
105 if ( empty( $profile ) ) {
106 $profile_url = sprintf(
107 'https://secure.gravatar.com/%s.json',
108 $hashed_email
109 );
110
111 $response = wp_remote_get(
112 esc_url_raw( $profile_url ),
113 array( 'User-Agent' => 'Jetpack Plugin Gravatar Profile Shortcode' )
114 );
115 $response_code = wp_remote_retrieve_response_code( $response );
116 $expire = 300; // Cache any errors for 5 minutes.
117 $profile = array();
118
119 if ( $response_code === 200 ) {
120 $profile = json_decode( wp_remote_retrieve_body( $response ), true );
121
122 if (
123 is_array( $profile )
124 && ! empty( $profile['entry'] )
125 && is_array( $profile['entry'] )
126 ) {
127 // Sucessfully fetched the profile. Cache for 15 minutes.
128 $expire = 900;
129 $profile = $profile['entry'][0];
130 }
131 }
132
133 set_transient( $cache_key, $profile, $expire );
134 }
135
136 // Fetching the profile returned an error. Bail.
137 if ( empty( $profile ) ) {
138 return false;
139 }
140
141 // Render the shortcode.
142 $gravatar_url = 'https://gravatar.com/' . $hashed_email;
143 $user_location = ! empty( $profile['currentLocation'] ) ? $profile['currentLocation'] : '';
144 $display_name = ! empty( $profile['displayName'] ) ? $profile['displayName'] : '';
145 $user_description = ! empty( $profile['aboutMe'] ) ? $profile['aboutMe'] : '';
146
147 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
148 $gravatar_url = 'https://gravatar.com/' . $user->user_login;
149 $avatar_url = wpcom_get_avatar_url( $user->ID, 96 );
150 $avatar_url = $avatar_url[0];
151 } else {
152 $avatar_url = get_avatar_url( $user->user_email, array( 'size' => 96 ) );
153 }
154
155 ob_start();
156
157 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
158 wp_enqueue_style( 'gravatar-style', plugins_url( '/css/gravatar-amp.css', __FILE__ ), array(), JETPACK__VERSION );
159 } else {
160 ?>
161 <script type="text/javascript">
162 ( function() {
163 if ( null === document.getElementById( 'gravatar-profile-embed-styles' ) ) {
164 var headID = document.getElementsByTagName( 'head' )[0];
165 var styleNode = document.createElement( 'style' );
166 styleNode.type = 'text/css';
167 styleNode.id = 'gravatar-profile-embed-styles';
168
169 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; }';
170
171 if ( document.all ) {
172 styleNode.innerText = gCSS;
173 } else {
174 styleNode.textContent = gCSS;
175 }
176
177 headID.appendChild( styleNode );
178 }
179 } )();
180 </script>
181 <?php
182 }
183 ?>
184
185 <div class="grofile vcard" id="grofile-embed-<?php echo esc_attr( $instance ); ?>">
186 <div class="grofile-inner">
187 <div class="grofile-left">
188 <div class="grofile-img">
189 <a href="<?php echo esc_url( $gravatar_url ); ?>">
190 <img src="<?php echo esc_url( $avatar_url ); ?>" width="96" height="96" class="no-grav gravatar photo" />
191 </a>
192 </div>
193 </div>
194 <div class="grofile-right">
195 <p class="grofile-name fn">
196 <strong><?php echo esc_html( $display_name ); ?></strong>
197 <?php
198 if ( ! empty( $user_location ) ) :
199 ?>
200 <br><span class="grofile-location adr"><?php echo esc_html( $user_location ); ?></span><?php endif; ?>
201 </p>
202 <p class="grofile-bio">
203 <strong><?php esc_html_e( 'Bio:', 'jetpack' ); ?></strong> <?php echo wp_kses_post( $user_description ); ?>
204 </p>
205 <p class="grofile-view">
206 <a href="<?php echo esc_url( $gravatar_url ); ?>"><?php esc_html_e( 'View complete profile', 'jetpack' ); ?></a>
207 </p>
208 </div>
209 <span class="grofile-clear">&nbsp;</span>
210 </div>
211 </div>
212 <?php
213
214 // Increment and return the rendered profile.
215 ++$instance;
216
217 return ob_get_clean();
218 }
219