PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 7.1
Jetpack – WP Security, Backup, Speed, & Growth v7.1
16.2-beta 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 All 501 releases
jetpack / modules / shortcodes / gravatar.php

gravatar.php in Jetpack – WP Security, Backup, Speed, & Growth 7.1, at modules/shortcodes/gravatar.php

162 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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
11 add_shortcode( 'gravatar', 'jetpack_gravatar_shortcode' );
12 add_shortcode( 'gravatar_profile', 'jetpack_gravatar_profile_shortcode' );
13
14 /**
15 * Get gravatar using the email provided at the specified size.
16 *
17 * @since 4.5.0
18 *
19 * @param array $atts Shortcode attributes.
20 *
21 * @return bool|string
22 */
23 function jetpack_gravatar_shortcode( $atts ) {
24 $atts = shortcode_atts(
25 array(
26 'email' => '',
27 'size' => 96,
28 ),
29 $atts
30 );
31
32 if ( empty( $atts['email'] ) || ! is_email( $atts['email'] ) ) {
33 return false;
34 }
35
36 $atts['size'] = intval( $atts['size'] );
37 if ( 0 > $atts['size'] ) {
38 $atts['size'] = 96;
39 }
40
41 return get_avatar( $atts['email'], $atts['size'] );
42 }
43
44 /**
45 * Display Gravatar profile
46 *
47 * @since 4.5.0
48 *
49 * @param array $atts Shortcode attributes.
50 *
51 * @uses shortcode_atts()
52 * @uses get_user_by()
53 * @uses is_email()
54 * @uses sanitize_email()
55 * @uses sanitize_user()
56 * @uses set_url_scheme()
57 * @uses wpcom_get_avatar_url()
58 * @uses get_user_attribute()
59 * @uses esc_url()
60 * @uses esc_html()
61 * @uses _e()
62 *
63 * @return string
64 */
65 function jetpack_gravatar_profile_shortcode( $atts ) {
66 // Give each use of the shortcode a unique ID
67 static $instance = 0;
68
69 // Process passed attributes
70 $atts = shortcode_atts(
71 array(
72 'who' => null,
73 ),
74 $atts,
75 'jetpack_gravatar_profile'
76 );
77
78 // Can specify username, user ID, or email address
79 if ( is_numeric( $atts['who'] ) ) {
80 $user = get_user_by( 'id', (int) $atts['who'] );
81 } elseif ( is_email( $atts['who'] ) ) {
82 $user = get_user_by( 'email', sanitize_email( $atts['who'] ) );
83 } elseif ( is_string( $atts['who'] ) ) {
84 $user = get_user_by( 'login', sanitize_user( $atts['who'] ) );
85 } else {
86 $user = false;
87 }
88
89 // Bail if we don't have a user
90 if ( false === $user ) {
91 return false;
92 }
93
94 // Render the shortcode
95 $gravatar_url = set_url_scheme( 'http://gravatar.com/' . $user->user_login );
96
97 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
98 $avatar_url = wpcom_get_avatar_url( $user->ID, 96 );
99 $avatar_url = $avatar_url[0];
100 $user_location = get_user_attribute( $user->ID, 'location' );
101 } else {
102 $avatar_url = get_avatar_url( $user->user_email, array( 'size' => 96 ) );
103 $user_location = get_user_meta( $user->ID, 'location', true );
104 }
105
106 ob_start();
107
108 ?>
109 <script type="text/javascript">
110 ( function() {
111 if ( null === document.getElementById( 'gravatar-profile-embed-styles' ) ) {
112 var headID = document.getElementsByTagName( 'head' )[0];
113 var styleNode = document.createElement( 'style' );
114 styleNode.type = 'text/css';
115 styleNode.id = 'gravatar-profile-embed-styles';
116
117 var gCSS = '.grofile-wrap { border: solid 1px #eee; 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; }';
118
119 if ( document.all ) {
120 styleNode.innerText = gCSS;
121 } else {
122 styleNode.textContent = gCSS;
123 }
124
125 headID.appendChild( styleNode );
126 }
127 } )();
128 </script>
129
130 <div class="grofile vcard" id="grofile-embed-<?php echo esc_attr( $instance ); ?>">
131 <div class="grofile-inner">
132 <div class="grofile-left">
133 <div class="grofile-img">
134 <a href="<?php echo esc_url( $gravatar_url ); ?>">
135 <img src="<?php echo esc_url( $avatar_url ); ?>" width="96" height="96" class="no-grav gravatar photo" />
136 </a>
137 </div>
138 </div>
139 <div class="grofile-right">
140 <p class="grofile-name fn">
141 <strong><?php echo esc_html( $user->display_name ); ?></strong>
142 <?php
143 if ( ! empty( $user_location ) ) :
144 ?>
145 <br><span class="grofile-location adr"><?php echo esc_html( $user_location ); ?></span><?php endif; ?>
146 </p>
147 <p class="grofile-bio"><strong><?php esc_html_e( 'Bio:', 'jetpack' ); ?></strong> <?php echo wp_kses_post( $user->description ); ?></p>
148 <p class="grofile-view">
149 <a href="<?php echo esc_url( $gravatar_url ); ?>"><?php esc_html_e( 'View complete profile', 'jetpack' ); ?></a>
150 </p>
151 </div>
152 <span class="grofile-clear">&nbsp;</span>
153 </div>
154 </div>
155 <?php
156
157 // Increment and return the rendered profile
158 $instance++;
159
160 return ob_get_clean();
161 }
162