Automattic /
jetpack
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | abstract class Sharing_Source { |
||
| 4 | public $button_style; |
||
| 5 | public $smart; |
||
| 6 | protected $open_link_in_new; |
||
| 7 | protected $id; |
||
| 8 | |||
| 9 | public function __construct( $id, array $settings ) { |
||
| 10 | $this->id = $id; |
||
| 11 | /** |
||
| 12 | * Filter the way sharing links open. |
||
| 13 | * |
||
| 14 | * By default, sharing links open in a new window. |
||
| 15 | * |
||
| 16 | * @module sharedaddy |
||
| 17 | * |
||
| 18 | * @since 3.4.0 |
||
| 19 | * |
||
| 20 | * @param bool true Should Sharing links open in a new window. Default to true. |
||
| 21 | */ |
||
| 22 | $this->open_link_in_new = apply_filters( 'jetpack_open_sharing_in_new_window', true ); |
||
| 23 | |||
| 24 | if ( isset( $settings['button_style'] ) ) { |
||
| 25 | $this->button_style = $settings['button_style']; |
||
| 26 | } |
||
| 27 | |||
| 28 | if ( isset( $settings['smart'] ) ) { |
||
| 29 | $this->smart = $settings['smart']; |
||
| 30 | } |
||
| 31 | } |
||
| 32 | |||
| 33 | public function http() { |
||
| 34 | return is_ssl() ? 'https' : 'http'; |
||
| 35 | } |
||
| 36 | |||
| 37 | public function get_id() { |
||
| 38 | return $this->id; |
||
| 39 | } |
||
| 40 | |||
| 41 | public function get_class() { |
||
| 42 | return $this->id; |
||
| 43 | } |
||
| 44 | |||
| 45 | public function get_share_url( $post_id ) { |
||
| 46 | /** |
||
| 47 | * Filter the sharing permalink. |
||
| 48 | * |
||
| 49 | * @module sharedaddy |
||
| 50 | * |
||
| 51 | * @since 1.2.0 |
||
| 52 | * |
||
| 53 | * @param string get_permalink( $post_id ) Post Permalink. |
||
| 54 | * @param int $post_id Post ID. |
||
| 55 | * @param int $this->id Sharing ID. |
||
| 56 | */ |
||
| 57 | return apply_filters( 'sharing_permalink', get_permalink( $post_id ), $post_id, $this->id ); |
||
| 58 | } |
||
| 59 | |||
| 60 | public function get_share_title( $post_id ) { |
||
| 61 | $post = get_post( $post_id ); |
||
| 62 | /** |
||
| 63 | * Filter the sharing title. |
||
| 64 | * |
||
| 65 | * @module sharedaddy |
||
| 66 | * |
||
| 67 | * @since 2.8.0 |
||
| 68 | * |
||
| 69 | * @param string $post->post_title Post Title. |
||
| 70 | * @param int $post_id Post ID. |
||
| 71 | * @param int $this->id Sharing ID. |
||
| 72 | */ |
||
| 73 | $title = apply_filters( 'sharing_title', $post->post_title, $post_id, $this->id ); |
||
| 74 | |||
| 75 | return html_entity_decode( wp_kses( $title, null ) ); |
||
| 76 | } |
||
| 77 | |||
| 78 | public function has_custom_button_style() { |
||
| 79 | return false; |
||
| 80 | } |
||
| 81 | |||
| 82 | public function get_link( $url, $text, $title, $query = '', $id = false ) { |
||
| 83 | $args = func_get_args(); |
||
| 84 | $klasses = array( 'share-' . $this->get_class(), 'sd-button' ); |
||
| 85 | |||
| 86 | if ( 'icon' == $this->button_style || 'icon-text' == $this->button_style ) { |
||
| 87 | $klasses[] = 'share-icon'; |
||
| 88 | } |
||
| 89 | |||
| 90 | if ( 'icon' == $this->button_style ) { |
||
| 91 | $text = $title; |
||
| 92 | $klasses[] = 'no-text'; |
||
| 93 | |||
| 94 | if ( true == $this->open_link_in_new ) { |
||
| 95 | $text .= __( ' (Opens in new window)', 'jetpack' ); |
||
| 96 | } |
||
| 97 | } |
||
| 98 | |||
| 99 | /** |
||
| 100 | * Filter the sharing display ID. |
||
| 101 | * |
||
| 102 | * @module sharedaddy |
||
| 103 | * |
||
| 104 | * @since 3.4.0 |
||
| 105 | * |
||
| 106 | * @param int|false $id Sharing ID. |
||
| 107 | * @param object $this Sharing service properties. |
||
| 108 | * @param array $args Array of sharing service options. |
||
| 109 | */ |
||
| 110 | $id = apply_filters( 'jetpack_sharing_display_id', $id, $this, $args ); |
||
| 111 | /** |
||
| 112 | * Filter the sharing display link. |
||
| 113 | * |
||
| 114 | * @module sharedaddy |
||
| 115 | * |
||
| 116 | * @since 2.8.0 |
||
| 117 | * |
||
| 118 | * @param string $url Post URL. |
||
| 119 | * @param object $this Sharing service properties. |
||
| 120 | * @param int|false $id Sharing ID. |
||
| 121 | * @param array $args Array of sharing service options. |
||
| 122 | */ |
||
| 123 | $url = apply_filters( 'sharing_display_link', $url, $this, $id, $args ); // backwards compatibility |
||
| 124 | /** |
||
| 125 | * Filter the sharing display link. |
||
| 126 | * |
||
| 127 | * @module sharedaddy |
||
| 128 | * |
||
| 129 | * @since 2.8.0 |
||
| 130 | * |
||
| 131 | * @param string $url Post URL. |
||
| 132 | * @param object $this Sharing service properties. |
||
| 133 | * @param int|false $id Sharing ID. |
||
| 134 | * @param array $args Array of sharing service options. |
||
| 135 | */ |
||
| 136 | $url = apply_filters( 'jetpack_sharing_display_link', $url, $this, $id, $args ); |
||
| 137 | /** |
||
| 138 | * Filter the sharing display query. |
||
| 139 | * |
||
| 140 | * @module sharedaddy |
||
| 141 | * |
||
| 142 | * @since 2.8.0 |
||
| 143 | * |
||
| 144 | * @param string $query Sharing service URL parameter. |
||
| 145 | * @param object $this Sharing service properties. |
||
| 146 | * @param int|false $id Sharing ID. |
||
| 147 | * @param array $args Array of sharing service options. |
||
| 148 | */ |
||
| 149 | $query = apply_filters( 'jetpack_sharing_display_query', $query, $this, $id, $args ); |
||
| 150 | |||
| 151 | if ( ! empty( $query ) ) { |
||
| 152 | if ( false === stripos( $url, '?' ) ) { |
||
| 153 | $url .= '?' . $query; |
||
| 154 | } else { |
||
| 155 | $url .= '&' . $query; |
||
| 156 | } |
||
| 157 | } |
||
| 158 | |||
| 159 | if ( 'text' == $this->button_style ) { |
||
| 160 | $klasses[] = 'no-icon'; |
||
| 161 | } |
||
| 162 | |||
| 163 | /** |
||
| 164 | * Filter the sharing display classes. |
||
| 165 | * |
||
| 166 | * @module sharedaddy |
||
| 167 | * |
||
| 168 | * @since 3.4.0 |
||
| 169 | * |
||
| 170 | * @param array $klasses Sharing service classes. |
||
| 171 | * @param object $this Sharing service properties. |
||
| 172 | * @param int|false $id Sharing ID. |
||
| 173 | * @param array $args Array of sharing service options. |
||
| 174 | */ |
||
| 175 | $klasses = apply_filters( 'jetpack_sharing_display_classes', $klasses, $this, $id, $args ); |
||
| 176 | /** |
||
| 177 | * Filter the sharing display title. |
||
| 178 | * |
||
| 179 | * @module sharedaddy |
||
| 180 | * |
||
| 181 | * @since 3.4.0 |
||
| 182 | * |
||
| 183 | * @param string $title Sharing service title. |
||
| 184 | * @param object $this Sharing service properties. |
||
| 185 | * @param int|false $id Sharing ID. |
||
| 186 | * @param array $args Array of sharing service options. |
||
| 187 | */ |
||
| 188 | $title = apply_filters( 'jetpack_sharing_display_title', $title, $this, $id, $args ); |
||
| 189 | /** |
||
| 190 | * Filter the sharing display text. |
||
| 191 | * |
||
| 192 | * @module sharedaddy |
||
| 193 | * |
||
| 194 | * @since 3.4.0 |
||
| 195 | * |
||
| 196 | * @param string $text Sharing service text. |
||
| 197 | * @param object $this Sharing service properties. |
||
| 198 | * @param int|false $id Sharing ID. |
||
| 199 | * @param array $args Array of sharing service options. |
||
| 200 | */ |
||
| 201 | $text = apply_filters( 'jetpack_sharing_display_text', $text, $this, $id, $args ); |
||
| 202 | |||
| 203 | return sprintf( |
||
| 204 | '<a rel="nofollow" data-shared="%s" class="%s" href="%s"%s title="%s"><span%s>%s</span></a>', |
||
| 205 | ( $id ? esc_attr( $id ) : '' ), |
||
| 206 | implode( ' ', $klasses ), |
||
| 207 | $url, |
||
| 208 | ( true == $this->open_link_in_new ) ? ' target="_blank"' : '', |
||
| 209 | $title, |
||
| 210 | ( 'icon' == $this->button_style ) ? '></span><span class="sharing-screen-reader-text"' : '', |
||
| 211 | $text |
||
| 212 | ); |
||
| 213 | } |
||
| 214 | |||
| 215 | /** |
||
| 216 | * Get an unfiltered post permalink to use when generating a sharing URL with get_link. |
||
| 217 | * Use instead of get_share_url for non-official styles as get_permalink ensures that process_request |
||
| 218 | * will be executed more reliably, in the case that the filtered URL uses a service that strips query parameters. |
||
| 219 | * |
||
| 220 | * @since 3.7.0 |
||
| 221 | * @param int $post_id Post ID. |
||
| 222 | * @uses get_permalink |
||
| 223 | * @return string get_permalink( $post_id ) Post permalink. |
||
| 224 | */ |
||
| 225 | public function get_process_request_url( $post_id ) { |
||
| 226 | return get_permalink( $post_id ); |
||
| 227 | } |
||
| 228 | |||
| 229 | abstract public function get_name(); |
||
| 230 | abstract public function get_display( $post ); |
||
| 231 | |||
| 232 | public function display_header() { |
||
| 233 | } |
||
| 234 | |||
| 235 | public function display_footer() { |
||
| 236 | } |
||
| 237 | |||
| 238 | public function has_advanced_options() { |
||
| 239 | return false; |
||
| 240 | } |
||
| 241 | |||
| 242 | public function display_preview( $echo = true, $force_smart = false, $button_style = null ) { |
||
| 243 | $text = ' '; |
||
| 244 | $button_style = ( ! empty( $button_style ) ) ? $button_style : $this->button_style; |
||
| 245 | if ( ! $this->smart && ! $force_smart ) { |
||
| 246 | if ( $button_style != 'icon' ) { |
||
| 247 | $text = $this->get_name(); |
||
| 248 | } |
||
| 249 | } |
||
| 250 | |||
| 251 | $klasses = array( 'share-' . $this->get_class(), 'sd-button' ); |
||
| 252 | |||
| 253 | if ( $button_style == 'icon' || $button_style == 'icon-text' ) { |
||
| 254 | $klasses[] = 'share-icon'; |
||
| 255 | } |
||
| 256 | |||
| 257 | if ( $button_style == 'icon' ) { |
||
| 258 | $klasses[] = 'no-text'; |
||
| 259 | } |
||
| 260 | |||
| 261 | if ( $button_style == 'text' ) { |
||
| 262 | $klasses[] = 'no-icon'; |
||
| 263 | } |
||
| 264 | |||
| 265 | $link = sprintf( |
||
| 266 | '<a rel="nofollow" class="%s" href="javascript:void(0)" title="%s"><span>%s</span></a>', |
||
| 267 | implode( ' ', $klasses ), |
||
| 268 | $this->get_name(), |
||
| 269 | $text |
||
| 270 | ); |
||
| 271 | |||
| 272 | $smart = ( $this->smart || $force_smart ) ? 'on' : 'off'; |
||
| 273 | $return = "<div class='option option-smart-$smart'>$link</div>"; |
||
| 274 | if ( $echo ) { |
||
| 275 | echo $return; |
||
| 276 | } |
||
| 277 | |||
| 278 | return $return; |
||
| 279 | } |
||
| 280 | |||
| 281 | View Code Duplication | public function get_total( $post = false ) { |
|
| 282 | global $wpdb, $blog_id; |
||
| 283 | |||
| 284 | $name = strtolower( $this->get_id() ); |
||
| 285 | |||
| 286 | if ( $post == false ) { |
||
| 287 | // get total number of shares for service |
||
| 288 | return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT SUM( count ) FROM sharing_stats WHERE blog_id = %d AND share_service = %s', $blog_id, $name ) ); |
||
| 289 | } |
||
| 290 | |||
| 291 | // get total shares for a post |
||
| 292 | return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT count FROM sharing_stats WHERE blog_id = %d AND post_id = %d AND share_service = %s', $blog_id, $post->ID, $name ) ); |
||
| 293 | } |
||
| 294 | |||
| 295 | View Code Duplication | public function get_posts_total() { |
|
| 296 | global $wpdb, $blog_id; |
||
| 297 | |||
| 298 | $totals = array(); |
||
| 299 | $name = strtolower( $this->get_id() ); |
||
| 300 | |||
| 301 | $my_data = $wpdb->get_results( $wpdb->prepare( 'SELECT post_id as id, SUM( count ) as total FROM sharing_stats WHERE blog_id = %d AND share_service = %s GROUP BY post_id ORDER BY count DESC ', $blog_id, $name ) ); |
||
| 302 | |||
| 303 | if ( ! empty( $my_data ) ) { |
||
| 304 | foreach ( $my_data as $row ) { |
||
| 305 | $totals[] = new Sharing_Post_Total( $row->id, $row->total ); |
||
| 306 | } |
||
| 307 | } |
||
| 308 | |||
| 309 | usort( $totals, array( 'Sharing_Post_Total', 'cmp' ) ); |
||
| 310 | |||
| 311 | return $totals; |
||
| 312 | } |
||
| 313 | |||
| 314 | public function process_request( $post, array $post_data ) { |
||
| 315 | /** |
||
| 316 | * Fires when a post is shared via one of the sharing buttons. |
||
| 317 | * |
||
| 318 | * @module sharedaddy |
||
| 319 | * |
||
| 320 | * @since 1.1.0 |
||
| 321 | * |
||
| 322 | * @param array $args Aray of information about the sharing service. |
||
| 323 | */ |
||
| 324 | do_action( 'sharing_bump_stats', array( 'service' => $this, 'post' => $post ) ); |
||
| 325 | } |
||
| 326 | |||
| 327 | public function js_dialog( $name, $params = array() ) { |
||
| 328 | if ( true !== $this->open_link_in_new ) { |
||
| 329 | return; |
||
| 330 | } |
||
| 331 | |||
| 332 | $defaults = array( |
||
| 333 | 'menubar' => 1, |
||
| 334 | 'resizable' => 1, |
||
| 335 | 'width' => 600, |
||
| 336 | 'height' => 400, |
||
| 337 | ); |
||
| 338 | $params = array_merge( $defaults, $params ); |
||
| 339 | $opts = array(); |
||
| 340 | foreach ( $params as $key => $val ) { |
||
| 341 | $opts[] = "$key=$val"; |
||
| 342 | } |
||
| 343 | $opts = implode( ',', $opts ); |
||
| 344 | |||
| 345 | // Add JS after sharing-js has been enqueued. |
||
| 346 | wp_add_inline_script( 'sharing-js', |
||
| 347 | "var windowOpen; |
||
| 348 | jQuery( document.body ).on( 'click', 'a.share-$name', function() { |
||
| 349 | // If there's another sharing window open, close it. |
||
| 350 | if ( 'undefined' !== typeof windowOpen ) { |
||
| 351 | windowOpen.close(); |
||
| 352 | } |
||
| 353 | windowOpen = window.open( jQuery( this ).attr( 'href' ), 'wpcom$name', '$opts' ); |
||
| 354 | return false; |
||
| 355 | });" |
||
| 356 | ); |
||
| 357 | } |
||
| 358 | } |
||
| 359 | |||
| 360 | abstract class Sharing_Advanced_Source extends Sharing_Source { |
||
| 361 | public function has_advanced_options() { |
||
| 362 | return true; |
||
| 363 | } |
||
| 364 | |||
| 365 | abstract public function display_options(); |
||
| 366 | abstract public function update_options( array $data ); |
||
| 367 | abstract public function get_options(); |
||
| 368 | } |
||
| 369 | |||
| 370 | |||
| 371 | class Share_Email extends Sharing_Source { |
||
| 372 | public $shortname = 'email'; |
||
| 373 | public $genericon = '\f410'; |
||
| 374 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 375 | parent::__construct( $id, $settings ); |
||
| 376 | |||
| 377 | if ( 'official' == $this->button_style ) { |
||
| 378 | $this->smart = true; |
||
| 379 | } else { |
||
| 380 | $this->smart = false; |
||
| 381 | } |
||
| 382 | } |
||
| 383 | |||
| 384 | public function get_name() { |
||
| 385 | return _x( 'Email', 'as sharing source', 'jetpack' ); |
||
| 386 | } |
||
| 387 | |||
| 388 | // Default does nothing |
||
| 389 | public function process_request( $post, array $post_data ) { |
||
| 390 | $ajax = false; |
||
| 391 | if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) { |
||
| 392 | $ajax = true; |
||
| 393 | } |
||
| 394 | |||
| 395 | $source_email = $target_email = $source_name = false; |
||
| 396 | |||
| 397 | if ( isset( $post_data['source_email'] ) && is_email( $post_data['source_email'] ) ) { |
||
| 398 | $source_email = $post_data['source_email']; |
||
| 399 | } |
||
| 400 | |||
| 401 | if ( isset( $post_data['target_email'] ) && is_email( $post_data['target_email'] ) ) { |
||
| 402 | $target_email = $post_data['target_email']; |
||
| 403 | } |
||
| 404 | |||
| 405 | if ( isset( $post_data['source_name'] ) && strlen( $post_data['source_name'] ) < 200 ) { |
||
| 406 | $source_name = $post_data['source_name']; |
||
| 407 | } elseif ( isset( $post_data['source_name'] ) ) { |
||
| 408 | $source_name = substr( $post_data['source_name'], 0, 200 ); |
||
| 409 | } else { |
||
| 410 | $source_name = ''; |
||
| 411 | } |
||
| 412 | |||
| 413 | // Test email |
||
| 414 | $error = 1; // Failure in data |
||
| 415 | if ( empty( $post_data['source_f_name'] ) && $source_email && $target_email && $source_name ) { |
||
| 416 | /** |
||
| 417 | * Allow plugins to stop the email sharing button from running the shared message through Akismet. |
||
| 418 | * |
||
| 419 | * @module sharedaddy |
||
| 420 | * |
||
| 421 | * @since 1.1.0 |
||
| 422 | * |
||
| 423 | * @param bool true Should we check if the message isn't spam? |
||
| 424 | * @param object $post Post information. |
||
| 425 | * @param array $post_data Information about the shared message. |
||
| 426 | */ |
||
| 427 | if ( apply_filters( 'sharing_email_check', true, $post, $post_data ) ) { |
||
| 428 | $data = array( |
||
| 429 | 'post' => $post, |
||
| 430 | 'source' => $source_email, |
||
| 431 | 'target' => $target_email, |
||
| 432 | 'name' => $source_name, |
||
| 433 | 'sharing_source' => $this, |
||
| 434 | ); |
||
| 435 | // todo: implement an error message when email doesn't get sent. |
||
| 436 | /** |
||
| 437 | * Filter whether an email can be sent from the Email sharing button. |
||
| 438 | * |
||
| 439 | * @module sharedaddy |
||
| 440 | * |
||
| 441 | * @since 1.1.0 |
||
| 442 | * |
||
| 443 | * @param array $data Array of information about the shared message. |
||
| 444 | */ |
||
| 445 | if ( ( $data = apply_filters( 'sharing_email_can_send', $data ) ) !== false ) { |
||
| 446 | // Record stats |
||
| 447 | parent::process_request( $data['post'], $post_data ); |
||
| 448 | |||
| 449 | /** |
||
| 450 | * Fires when an email is sent via the Email sharing button. |
||
| 451 | * |
||
| 452 | * @module sharedaddy |
||
| 453 | * |
||
| 454 | * @since 1.1.0 |
||
| 455 | * |
||
| 456 | * @param array $data Array of information about the shared message. |
||
| 457 | */ |
||
| 458 | do_action( 'sharing_email_send_post', $data ); |
||
| 459 | } |
||
| 460 | |||
| 461 | // Return a positive regardless of whether the user is subscribed or not |
||
| 462 | if ( $ajax ) { |
||
| 463 | ?> |
||
| 464 | <div class="response"> |
||
| 465 | <div class="response-title"><?php _e( 'This post has been shared!', 'jetpack' ); ?></div> |
||
| 466 | <div class="response-sub"><?php printf( __( 'You have shared this post with %s', 'jetpack' ), esc_html( $target_email ) ); ?></div> |
||
| 467 | <div class="response-close"><a href="#" class="sharing_cancel"><?php _e( 'Close', 'jetpack' ); ?></a></div> |
||
| 468 | </div> |
||
| 469 | <?php |
||
| 470 | } else { |
||
| 471 | wp_safe_redirect( get_permalink( $post->ID ) . '?shared=email' ); |
||
| 472 | } |
||
| 473 | |||
| 474 | die(); |
||
| 475 | } else { |
||
| 476 | $error = 2; // Email check failed |
||
| 477 | } |
||
| 478 | } |
||
| 479 | |||
| 480 | if ( $ajax ) { |
||
| 481 | echo $error; |
||
| 482 | } else { |
||
| 483 | wp_safe_redirect( get_permalink( $post->ID ) . '?shared=email&msg=fail' ); |
||
| 484 | } |
||
| 485 | |||
| 486 | die(); |
||
| 487 | } |
||
| 488 | |||
| 489 | public function get_display( $post ) { |
||
| 490 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Email', 'share to', 'jetpack' ), __( 'Click to email this to a friend', 'jetpack' ), 'share=email' ); |
||
| 491 | } |
||
| 492 | |||
| 493 | /** |
||
| 494 | * Outputs the hidden email dialog |
||
| 495 | */ |
||
| 496 | public function display_footer() { |
||
| 497 | global $current_user; |
||
| 498 | |||
| 499 | $visible = $status = false; |
||
| 500 | ?> |
||
| 501 | <div id="sharing_email" style="display: none;"> |
||
| 502 | <form action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ); ?>" method="post"> |
||
| 503 | <label for="target_email"><?php _e( 'Send to Email Address', 'jetpack' ) ?></label> |
||
| 504 | <input type="email" name="target_email" id="target_email" value="" /> |
||
| 505 | |||
| 506 | <?php if ( is_user_logged_in() ) : ?> |
||
| 507 | <input type="hidden" name="source_name" value="<?php echo esc_attr( $current_user->display_name ); ?>" /> |
||
| 508 | <input type="hidden" name="source_email" value="<?php echo esc_attr( $current_user->user_email ); ?>" /> |
||
| 509 | <?php else : ?> |
||
| 510 | |||
| 511 | <label for="source_name"><?php _e( 'Your Name', 'jetpack' ) ?></label> |
||
| 512 | <input type="text" name="source_name" id="source_name" value="" /> |
||
| 513 | |||
| 514 | <label for="source_email"><?php _e( 'Your Email Address', 'jetpack' ) ?></label> |
||
| 515 | <input type="email" name="source_email" id="source_email" value="" /> |
||
| 516 | |||
| 517 | <?php endif; ?> |
||
| 518 | <input type="text" id="jetpack-source_f_name" name="source_f_name" class="input" value="" size="25" autocomplete="off" title="<?php esc_attr_e( 'This field is for validation and should not be changed', 'jetpack' ); ?>" /> |
||
| 519 | <?php |
||
| 520 | /** |
||
| 521 | * Fires when the Email sharing dialog is loaded. |
||
| 522 | * |
||
| 523 | * @module sharedaddy |
||
| 524 | * |
||
| 525 | * @since 1.1.0 |
||
| 526 | * |
||
| 527 | * @param string jetpack Eail sharing source. |
||
| 528 | */ |
||
| 529 | do_action( 'sharing_email_dialog', 'jetpack' ); |
||
| 530 | ?> |
||
| 531 | |||
| 532 | <img style="float: right; display: none" class="loading" src="<?php |
||
| 533 | /** This filter is documented in modules/stats.php */ |
||
| 534 | echo apply_filters( 'jetpack_static_url', plugin_dir_url( __FILE__ ) . 'images/loading.gif' ); ?>" alt="loading" width="16" height="16" /> |
||
| 535 | <input type="submit" value="<?php esc_attr_e( 'Send Email', 'jetpack' ); ?>" class="sharing_send" /> |
||
| 536 | <a rel="nofollow" href="#cancel" class="sharing_cancel"><?php _e( 'Cancel', 'jetpack' ); ?></a> |
||
| 537 | |||
| 538 | <div class="errors errors-1" style="display: none;"> |
||
| 539 | <?php _e( 'Post was not sent - check your email addresses!', 'jetpack' ); ?> |
||
| 540 | </div> |
||
| 541 | |||
| 542 | <div class="errors errors-2" style="display: none;"> |
||
| 543 | <?php _e( 'Email check failed, please try again', 'jetpack' ); ?> |
||
| 544 | </div> |
||
| 545 | |||
| 546 | <div class="errors errors-3" style="display: none;"> |
||
| 547 | <?php _e( 'Sorry, your blog cannot share posts by email.', 'jetpack' ); ?> |
||
| 548 | </div> |
||
| 549 | </form> |
||
| 550 | </div> |
||
| 551 | <?php |
||
| 552 | } |
||
| 553 | } |
||
| 554 | |||
| 555 | class Share_Twitter extends Sharing_Source { |
||
| 556 | public $shortname = 'twitter'; |
||
| 557 | public $genericon = '\f202'; |
||
| 558 | // 'https://dev.twitter.com/rest/reference/get/help/configuration' ( 2015/02/06 ) short_url_length is 22, short_url_length_https is 23 |
||
| 559 | public $short_url_length = 24; |
||
| 560 | |||
| 561 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 562 | parent::__construct( $id, $settings ); |
||
| 563 | |||
| 564 | if ( 'official' == $this->button_style ) { |
||
| 565 | $this->smart = true; |
||
| 566 | } else { |
||
| 567 | $this->smart = false; |
||
| 568 | } |
||
| 569 | } |
||
| 570 | |||
| 571 | public function get_name() { |
||
| 572 | return __( 'Twitter', 'jetpack' ); |
||
| 573 | } |
||
| 574 | |||
| 575 | function sharing_twitter_via( $post ) { |
||
| 576 | /** |
||
| 577 | * Allow third-party plugins to customize the Twitter username used as "twitter:site" Twitter Card Meta Tag. |
||
| 578 | * |
||
| 579 | * @module sharedaddy |
||
| 580 | * |
||
| 581 | * @since 3.0.0 |
||
| 582 | * |
||
| 583 | * @param string $string Twitter Username. |
||
| 584 | * @param array $args Array of Open Graph Meta Tags and Twitter Cards tags. |
||
| 585 | */ |
||
| 586 | $twitter_site_tag_value = apply_filters( 'jetpack_twitter_cards_site_tag', '', array() ); |
||
| 587 | |||
| 588 | /* |
||
| 589 | * Hack to remove the unwanted behavior of adding 'via @jetpack' which |
||
| 590 | * was introduced with the adding of the Twitter cards. |
||
| 591 | * This should be a temporary solution until a better method is setup. |
||
| 592 | */ |
||
| 593 | if ( 'jetpack' == $twitter_site_tag_value ) { |
||
| 594 | $twitter_site_tag_value = ''; |
||
| 595 | } |
||
| 596 | |||
| 597 | /** |
||
| 598 | * Filters the Twitter username used as "via" in the Twitter sharing button. |
||
| 599 | * |
||
| 600 | * @module sharedaddy |
||
| 601 | * |
||
| 602 | * @since 1.7.0 |
||
| 603 | * |
||
| 604 | * @param string $twitter_site_tag_value Twitter Username. |
||
| 605 | * @param int $post->ID Post ID. |
||
| 606 | */ |
||
| 607 | $twitter_site_tag_value = apply_filters( 'jetpack_sharing_twitter_via', $twitter_site_tag_value, $post->ID ); |
||
| 608 | |||
| 609 | // Strip out anything other than a letter, number, or underscore. |
||
| 610 | // This will prevent the inadvertent inclusion of an extra @, as well as normalizing the handle. |
||
| 611 | return preg_replace( '/[^\da-z_]+/i', '', $twitter_site_tag_value ); |
||
| 612 | } |
||
| 613 | |||
| 614 | public function get_related_accounts( $post ) { |
||
| 615 | /** |
||
| 616 | * Filter the list of related Twitter accounts added to the Twitter sharing button. |
||
| 617 | * |
||
| 618 | * @module sharedaddy |
||
| 619 | * |
||
| 620 | * @since 1.7.0 |
||
| 621 | * |
||
| 622 | * @param array $args Array of Twitter usernames. Format is 'username' => 'Optional description' |
||
| 623 | * @param int $post->ID Post ID. |
||
| 624 | */ |
||
| 625 | $related_accounts = apply_filters( 'jetpack_sharing_twitter_related', array(), $post->ID ); |
||
| 626 | |||
| 627 | // Example related string: account1,account2:Account 2 description,account3 |
||
| 628 | $related = array(); |
||
| 629 | |||
| 630 | foreach ( $related_accounts as $related_account_username => $related_account_description ) { |
||
| 631 | // Join the description onto the end of the username |
||
| 632 | if ( $related_account_description ) { |
||
| 633 | $related_account_username .= ':' . $related_account_description; |
||
| 634 | } |
||
| 635 | |||
| 636 | $related[] = $related_account_username; |
||
| 637 | } |
||
| 638 | |||
| 639 | return implode( ',', $related ); |
||
| 640 | } |
||
| 641 | |||
| 642 | public function get_display( $post ) { |
||
| 643 | $via = $this->sharing_twitter_via( $post ); |
||
| 644 | |||
| 645 | if ( $via ) { |
||
| 646 | $via = 'data-via="' . esc_attr( $via ) . '"'; |
||
| 647 | } else { |
||
| 648 | $via = ''; |
||
| 649 | } |
||
| 650 | |||
| 651 | $related = $this->get_related_accounts( $post ); |
||
| 652 | if ( ! empty( $related ) && $related !== $via ) { |
||
| 653 | $related = 'data-related="' . esc_attr( $related ) . '"'; |
||
| 654 | } else { |
||
| 655 | $related = ''; |
||
| 656 | } |
||
| 657 | |||
| 658 | if ( $this->smart ) { |
||
| 659 | $share_url = $this->get_share_url( $post->ID ); |
||
| 660 | $post_title = $this->get_share_title( $post->ID ); |
||
| 661 | return sprintf( |
||
| 662 | '<a href="https://twitter.com/share" class="twitter-share-button" data-url="%1$s" data-text="%2$s" %3$s %4$s>Tweet</a>', |
||
| 663 | esc_url( $share_url ), |
||
| 664 | esc_attr( $post_title ), |
||
| 665 | $via, |
||
| 666 | $related |
||
| 667 | ); |
||
| 668 | } else { |
||
| 669 | if ( |
||
| 670 | /** |
||
| 671 | * Allow plugins to disable sharing counts for specific sharing services. |
||
| 672 | * |
||
| 673 | * @module sharedaddy |
||
| 674 | * |
||
| 675 | * @since 3.0.0 |
||
| 676 | * |
||
| 677 | * @param bool true Should sharing counts be enabled for this specific service. Default to true. |
||
| 678 | * @param int $post->ID Post ID. |
||
| 679 | * @param string $str Sharing service name. |
||
| 680 | */ |
||
| 681 | apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'twitter' ) |
||
| 682 | ) { |
||
| 683 | sharing_register_post_for_share_counts( $post->ID ); |
||
| 684 | } |
||
| 685 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Twitter', 'share to', 'jetpack' ), __( 'Click to share on Twitter', 'jetpack' ), 'share=twitter', 'sharing-twitter-' . $post->ID ); |
||
| 686 | } |
||
| 687 | } |
||
| 688 | |||
| 689 | public function process_request( $post, array $post_data ) { |
||
| 690 | $post_title = $this->get_share_title( $post->ID ); |
||
| 691 | $post_link = $this->get_share_url( $post->ID ); |
||
| 692 | |||
| 693 | if ( function_exists( 'mb_stripos' ) ) { |
||
| 694 | $strlen = 'mb_strlen'; |
||
| 695 | $substr = 'mb_substr'; |
||
| 696 | } else { |
||
| 697 | $strlen = 'strlen'; |
||
| 698 | $substr = 'substr'; |
||
| 699 | } |
||
| 700 | |||
| 701 | $via = $this->sharing_twitter_via( $post ); |
||
| 702 | $related = $this->get_related_accounts( $post ); |
||
| 703 | if ( $via ) { |
||
| 704 | $sig = " via @$via"; |
||
| 705 | if ( $related === $via ) { |
||
| 706 | $related = false; |
||
| 707 | } |
||
| 708 | } else { |
||
| 709 | $via = false; |
||
| 710 | $sig = ''; |
||
| 711 | } |
||
| 712 | |||
| 713 | $suffix_length = $this->short_url_length + $strlen( $sig ); |
||
| 714 | // $sig is handled by twitter in their 'via' argument. |
||
| 715 | // $post_link is handled by twitter in their 'url' argument. |
||
| 716 | if ( 280 < $strlen( $post_title ) + $suffix_length ) { |
||
| 717 | // The -1 is for "\xE2\x80\xA6", a UTF-8 ellipsis. |
||
| 718 | $text = $substr( $post_title, 0, 280 - $suffix_length - 1 ) . "\xE2\x80\xA6"; |
||
| 719 | } else { |
||
| 720 | $text = $post_title; |
||
| 721 | } |
||
| 722 | |||
| 723 | // Record stats |
||
| 724 | parent::process_request( $post, $post_data ); |
||
| 725 | |||
| 726 | $url = $post_link; |
||
| 727 | $twitter_url = add_query_arg( |
||
| 728 | rawurlencode_deep( array_filter( compact( 'via', 'related', 'text', 'url' ) ) ), |
||
| 729 | 'https://twitter.com/intent/tweet' |
||
| 730 | ); |
||
| 731 | |||
| 732 | // Redirect to Twitter |
||
| 733 | wp_redirect( $twitter_url ); |
||
| 734 | die(); |
||
| 735 | } |
||
| 736 | |||
| 737 | public function has_custom_button_style() { |
||
| 738 | return $this->smart; |
||
| 739 | } |
||
| 740 | |||
| 741 | public function display_footer() { |
||
| 742 | if ( $this->smart ) { |
||
| 743 | ?> |
||
| 744 | <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> |
||
| 745 | <?php |
||
| 746 | } else { |
||
| 747 | $this->js_dialog( $this->shortname, array( 'height' => 350 ) ); |
||
| 748 | } |
||
| 749 | } |
||
| 750 | } |
||
| 751 | |||
| 752 | |||
| 753 | class Share_Reddit extends Sharing_Source { |
||
| 754 | public $shortname = 'reddit'; |
||
| 755 | public $genericon = '\f222'; |
||
| 756 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 757 | parent::__construct( $id, $settings ); |
||
| 758 | |||
| 759 | if ( 'official' == $this->button_style ) { |
||
| 760 | $this->smart = true; |
||
| 761 | } else { |
||
| 762 | $this->smart = false; |
||
| 763 | } |
||
| 764 | } |
||
| 765 | |||
| 766 | public function get_name() { |
||
| 767 | return __( 'Reddit', 'jetpack' ); |
||
| 768 | } |
||
| 769 | |||
| 770 | public function get_display( $post ) { |
||
| 771 | if ( $this->smart ) { |
||
| 772 | return '<div class="reddit_button"><iframe src="' . $this->http() . '://www.reddit.com/static/button/button1.html?newwindow=true&width=120&url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&title=' . rawurlencode( $this->get_share_title( $post->ID ) ) . '" height="22" width="120" scrolling="no" frameborder="0"></iframe></div>'; |
||
| 773 | View Code Duplication | } else { |
|
| 774 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Reddit', 'share to', 'jetpack' ), __( 'Click to share on Reddit', 'jetpack' ), 'share=reddit' ); |
||
| 775 | } |
||
| 776 | } |
||
| 777 | |||
| 778 | View Code Duplication | public function process_request( $post, array $post_data ) { |
|
| 779 | $reddit_url = $this->http() . '://reddit.com/submit?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&title=' . rawurlencode( $this->get_share_title( $post->ID ) ); |
||
| 780 | |||
| 781 | // Record stats |
||
| 782 | parent::process_request( $post, $post_data ); |
||
| 783 | |||
| 784 | // Redirect to Reddit |
||
| 785 | wp_redirect( $reddit_url ); |
||
| 786 | die(); |
||
|
0 ignored issues
–
show
|
|||
| 787 | } |
||
| 788 | } |
||
| 789 | |||
| 790 | class Share_LinkedIn extends Sharing_Source { |
||
| 791 | public $shortname = 'linkedin'; |
||
| 792 | public $genericon = '\f207'; |
||
| 793 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 794 | parent::__construct( $id, $settings ); |
||
| 795 | |||
| 796 | if ( 'official' == $this->button_style ) { |
||
| 797 | $this->smart = true; |
||
| 798 | } else { |
||
| 799 | $this->smart = false; |
||
| 800 | } |
||
| 801 | } |
||
| 802 | |||
| 803 | public function get_name() { |
||
| 804 | return __( 'LinkedIn', 'jetpack' ); |
||
| 805 | } |
||
| 806 | |||
| 807 | public function has_custom_button_style() { |
||
| 808 | return $this->smart; |
||
| 809 | } |
||
| 810 | |||
| 811 | public function get_display( $post ) { |
||
| 812 | $display = ''; |
||
| 813 | |||
| 814 | if ( $this->smart ) { |
||
| 815 | $share_url = $this->get_share_url( $post->ID ); |
||
| 816 | $display .= sprintf( '<div class="linkedin_button"><script type="in/share" data-url="%s" data-counter="right"></script></div>', esc_url( $share_url ) ); |
||
| 817 | View Code Duplication | } else { |
|
| 818 | $display = $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'LinkedIn', 'share to', 'jetpack' ), __( 'Click to share on LinkedIn', 'jetpack' ), 'share=linkedin', 'sharing-linkedin-' . $post->ID ); |
||
| 819 | } |
||
| 820 | |||
| 821 | /** This filter is already documented in modules/sharedaddy/sharing-sources.php */ |
||
| 822 | if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'linkedin' ) ) { |
||
| 823 | sharing_register_post_for_share_counts( $post->ID ); |
||
| 824 | } |
||
| 825 | |||
| 826 | return $display; |
||
| 827 | } |
||
| 828 | |||
| 829 | View Code Duplication | public function process_request( $post, array $post_data ) { |
|
| 830 | |||
| 831 | $post_link = $this->get_share_url( $post->ID ); |
||
| 832 | |||
| 833 | // Using the same URL as the official button, which is *not* LinkedIn's documented sharing link |
||
| 834 | // https://www.linkedin.com/cws/share?url={url}&token=&isFramed=false |
||
| 835 | $linkedin_url = add_query_arg( array( |
||
| 836 | 'url' => rawurlencode( $post_link ), |
||
| 837 | ), 'https://www.linkedin.com/cws/share?token=&isFramed=false' ); |
||
| 838 | |||
| 839 | // Record stats |
||
| 840 | parent::process_request( $post, $post_data ); |
||
| 841 | |||
| 842 | // Redirect to LinkedIn |
||
| 843 | wp_redirect( $linkedin_url ); |
||
| 844 | die(); |
||
| 845 | } |
||
| 846 | |||
| 847 | View Code Duplication | public function display_footer() { |
|
| 848 | if ( ! $this->smart ) { |
||
| 849 | $this->js_dialog( $this->shortname, array( 'width' => 580, 'height' => 450 ) ); |
||
| 850 | } else { |
||
| 851 | ?><script type="text/javascript"> |
||
| 852 | jQuery( document ).ready( function() { |
||
| 853 | jQuery.getScript( 'https://platform.linkedin.com/in.js?async=true', function success() { |
||
| 854 | IN.init(); |
||
| 855 | }); |
||
| 856 | }); |
||
| 857 | jQuery( document.body ).on( 'post-load', function() { |
||
| 858 | if ( typeof IN != 'undefined' ) |
||
| 859 | IN.parse(); |
||
| 860 | }); |
||
| 861 | </script><?php |
||
| 862 | } |
||
| 863 | } |
||
| 864 | } |
||
| 865 | |||
| 866 | class Share_Facebook extends Sharing_Source { |
||
| 867 | public $shortname = 'facebook'; |
||
| 868 | public $genericon = '\f204'; |
||
| 869 | private $share_type = 'default'; |
||
| 870 | |||
| 871 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 872 | parent::__construct( $id, $settings ); |
||
| 873 | |||
| 874 | if ( isset( $settings['share_type'] ) ) { |
||
| 875 | $this->share_type = $settings['share_type']; |
||
| 876 | } |
||
| 877 | |||
| 878 | if ( 'official' == $this->button_style ) { |
||
| 879 | $this->smart = true; |
||
| 880 | } else { |
||
| 881 | $this->smart = false; |
||
| 882 | } |
||
| 883 | } |
||
| 884 | |||
| 885 | public function get_name() { |
||
| 886 | return __( 'Facebook', 'jetpack' ); |
||
| 887 | } |
||
| 888 | |||
| 889 | public function display_header() { |
||
| 890 | } |
||
| 891 | |||
| 892 | View Code Duplication | function guess_locale_from_lang( $lang ) { |
|
| 893 | if ( 'en' == $lang || 'en_US' == $lang || ! $lang ) { |
||
| 894 | return 'en_US'; |
||
| 895 | } |
||
| 896 | |||
| 897 | if ( ! class_exists( 'GP_Locales' ) ) { |
||
| 898 | if ( ! defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) || ! file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) { |
||
| 899 | return false; |
||
| 900 | } |
||
| 901 | |||
| 902 | require JETPACK__GLOTPRESS_LOCALES_PATH; |
||
| 903 | } |
||
| 904 | |||
| 905 | if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { |
||
| 906 | // WP.com: get_locale() returns 'it' |
||
| 907 | $locale = GP_Locales::by_slug( $lang ); |
||
| 908 | } else { |
||
| 909 | // Jetpack: get_locale() returns 'it_IT'; |
||
| 910 | $locale = GP_Locales::by_field( 'wp_locale', $lang ); |
||
| 911 | } |
||
| 912 | |||
| 913 | if ( ! $locale ) { |
||
| 914 | return false; |
||
| 915 | } |
||
| 916 | |||
| 917 | if ( empty( $locale->facebook_locale ) ) { |
||
| 918 | if ( empty( $locale->wp_locale ) ) { |
||
| 919 | return false; |
||
| 920 | } else { |
||
| 921 | // Facebook SDK is smart enough to fall back to en_US if a |
||
| 922 | // locale isn't supported. Since supported Facebook locales |
||
| 923 | // can fall out of sync, we'll attempt to use the known |
||
| 924 | // wp_locale value and rely on said fallback. |
||
| 925 | return $locale->wp_locale; |
||
| 926 | } |
||
| 927 | } |
||
| 928 | |||
| 929 | return $locale->facebook_locale; |
||
| 930 | } |
||
| 931 | |||
| 932 | public function get_display( $post ) { |
||
| 933 | if ( $this->smart ) { |
||
| 934 | $share_url = $this->get_share_url( $post->ID ); |
||
| 935 | $fb_share_html = '<div class="fb-share-button" data-href="' . esc_attr( $share_url ) . '" data-layout="button_count"></div>'; |
||
| 936 | /** |
||
| 937 | * Filter the output of the Facebook Sharing button. |
||
| 938 | * |
||
| 939 | * @module sharedaddy |
||
| 940 | * |
||
| 941 | * @since 3.6.0 |
||
| 942 | * |
||
| 943 | * @param string $fb_share_html Facebook Sharing button HTML. |
||
| 944 | * @param string $share_url URL of the post to share. |
||
| 945 | */ |
||
| 946 | return apply_filters( 'jetpack_sharing_facebook_official_button_output', $fb_share_html, $share_url ); |
||
| 947 | } |
||
| 948 | |||
| 949 | /** This filter is already documented in modules/sharedaddy/sharing-sources.php */ |
||
| 950 | if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'facebook' ) ) { |
||
| 951 | sharing_register_post_for_share_counts( $post->ID ); |
||
| 952 | } |
||
| 953 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Facebook', 'share to', 'jetpack' ), __( 'Click to share on Facebook', 'jetpack' ), 'share=facebook', 'sharing-facebook-' . $post->ID ); |
||
| 954 | } |
||
| 955 | |||
| 956 | View Code Duplication | public function process_request( $post, array $post_data ) { |
|
| 957 | $fb_url = $this->http() . '://www.facebook.com/sharer.php?u=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&t=' . rawurlencode( $this->get_share_title( $post->ID ) ); |
||
| 958 | |||
| 959 | // Record stats |
||
| 960 | parent::process_request( $post, $post_data ); |
||
| 961 | |||
| 962 | // Redirect to Facebook |
||
| 963 | wp_redirect( $fb_url ); |
||
| 964 | die(); |
||
| 965 | } |
||
| 966 | |||
| 967 | public function display_footer() { |
||
| 968 | $this->js_dialog( $this->shortname ); |
||
| 969 | if ( $this->smart ) { |
||
| 970 | $locale = $this->guess_locale_from_lang( get_locale() ); |
||
| 971 | if ( ! $locale ) { |
||
| 972 | $locale = 'en_US'; |
||
| 973 | } |
||
| 974 | /** |
||
| 975 | * Filter the App ID used in the official Facebook Share button. |
||
| 976 | * |
||
| 977 | * @since 3.8.0 |
||
| 978 | * |
||
| 979 | * @param int $fb_app_id Facebook App ID. Default to 249643311490 (WordPress.com's App ID). |
||
| 980 | */ |
||
| 981 | $fb_app_id = apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' ); |
||
| 982 | if ( is_numeric( $fb_app_id ) ) { |
||
| 983 | $fb_app_id = '&appId=' . $fb_app_id; |
||
| 984 | } else { |
||
| 985 | $fb_app_id = ''; |
||
| 986 | } |
||
| 987 | ?><div id="fb-root"></div> |
||
| 988 | <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = 'https://connect.facebook.net/<?php echo $locale; ?>/sdk.js#xfbml=1<?php echo $fb_app_id; ?>&version=v2.3'; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> |
||
| 989 | <script> |
||
| 990 | jQuery( document.body ).on( 'post-load', function() { |
||
| 991 | if ( 'undefined' !== typeof FB ) { |
||
| 992 | FB.XFBML.parse(); |
||
| 993 | } |
||
| 994 | } ); |
||
| 995 | </script> |
||
| 996 | <?php |
||
| 997 | } |
||
| 998 | } |
||
| 999 | } |
||
| 1000 | |||
| 1001 | class Share_Print extends Sharing_Source { |
||
| 1002 | public $shortname = 'print'; |
||
| 1003 | public $genericon = '\f469'; |
||
| 1004 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 1005 | parent::__construct( $id, $settings ); |
||
| 1006 | |||
| 1007 | if ( 'official' == $this->button_style ) { |
||
| 1008 | $this->smart = true; |
||
| 1009 | } else { |
||
| 1010 | $this->smart = false; |
||
| 1011 | } |
||
| 1012 | } |
||
| 1013 | |||
| 1014 | public function get_name() { |
||
| 1015 | return __( 'Print', 'jetpack' ); |
||
| 1016 | } |
||
| 1017 | |||
| 1018 | public function get_display( $post ) { |
||
| 1019 | return $this->get_link( $this->get_process_request_url( $post->ID ) . ( ( is_single() || is_page() ) ? '#print': '' ), _x( 'Print', 'share to', 'jetpack' ), __( 'Click to print', 'jetpack' ) ); |
||
| 1020 | } |
||
| 1021 | } |
||
| 1022 | |||
| 1023 | class Share_PressThis extends Sharing_Source { |
||
| 1024 | public $shortname = 'pressthis'; |
||
| 1025 | public $genericon = '\f205'; |
||
| 1026 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 1027 | parent::__construct( $id, $settings ); |
||
| 1028 | |||
| 1029 | if ( 'official' == $this->button_style ) { |
||
| 1030 | $this->smart = true; |
||
| 1031 | } else { |
||
| 1032 | $this->smart = false; |
||
| 1033 | } |
||
| 1034 | } |
||
| 1035 | |||
| 1036 | public function get_name() { |
||
| 1037 | return __( 'Press This', 'jetpack' ); |
||
| 1038 | } |
||
| 1039 | |||
| 1040 | public function process_request( $post, array $post_data ) { |
||
| 1041 | global $current_user, $wp_version; |
||
| 1042 | |||
| 1043 | $primary_blog = (int) get_user_meta( $current_user->ID, 'primary_blog', true ); |
||
| 1044 | if ( $primary_blog ) { |
||
| 1045 | $primary_blog_details = get_blog_details( $primary_blog ); |
||
| 1046 | } else { |
||
| 1047 | $primary_blog_details = false; |
||
| 1048 | } |
||
| 1049 | |||
| 1050 | if ( $primary_blog_details ) { |
||
| 1051 | $blogs = array( $primary_blog_details ); |
||
| 1052 | } elseif ( function_exists( 'get_active_blogs_for_user' ) ) { |
||
| 1053 | $blogs = get_active_blogs_for_user(); |
||
| 1054 | if ( empty( $blogs ) ) { |
||
| 1055 | $blogs = get_blogs_of_user( $current_user->ID ); |
||
| 1056 | } |
||
| 1057 | } else { |
||
| 1058 | $blogs = get_blogs_of_user( $current_user->ID ); |
||
| 1059 | } |
||
| 1060 | |||
| 1061 | if ( empty( $blogs ) ) { |
||
| 1062 | wp_safe_redirect( get_permalink( $post->ID ) ); |
||
| 1063 | die(); |
||
| 1064 | } |
||
| 1065 | |||
| 1066 | $blog = current( $blogs ); |
||
| 1067 | |||
| 1068 | $args = array( |
||
| 1069 | 'u' => rawurlencode( $this->get_share_url( $post->ID ) ), |
||
| 1070 | ); |
||
| 1071 | |||
| 1072 | if ( version_compare( $wp_version, '4.9-RC1-42107', '>=' ) ) { |
||
| 1073 | $args[ 'url-scan-submit' ] = 'Scan'; |
||
| 1074 | $args[ '_wpnonce' ] = wp_create_nonce( 'scan-site' ); |
||
| 1075 | |||
| 1076 | } else { // Remove once 4.9 is the minimum. |
||
| 1077 | $args['t'] = rawurlencode( $this->get_share_title( $post->ID ) ); |
||
| 1078 | if ( isset( $_GET['sel'] ) ) { |
||
| 1079 | $args['s'] = rawurlencode( $_GET['sel'] ); |
||
| 1080 | } |
||
| 1081 | } |
||
| 1082 | |||
| 1083 | $url = $blog->siteurl . '/wp-admin/press-this.php'; |
||
| 1084 | $url = add_query_arg( $args, $url ); |
||
| 1085 | |||
| 1086 | // Record stats |
||
| 1087 | parent::process_request( $post, $post_data ); |
||
| 1088 | |||
| 1089 | // Redirect to Press This |
||
| 1090 | wp_redirect( $url ); |
||
| 1091 | die(); |
||
| 1092 | } |
||
| 1093 | |||
| 1094 | public function get_display( $post ) { |
||
| 1095 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Press This', 'share to', 'jetpack' ), __( 'Click to Press This!', 'jetpack' ), 'share=press-this' ); |
||
| 1096 | } |
||
| 1097 | } |
||
| 1098 | |||
| 1099 | class Share_GooglePlus1 extends Sharing_Source { |
||
| 1100 | public $shortname = 'googleplus1'; |
||
| 1101 | public $genericon = '\f218'; |
||
| 1102 | private $state = false; |
||
| 1103 | |||
| 1104 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 1105 | parent::__construct( $id, $settings ); |
||
| 1106 | |||
| 1107 | if ( 'official' == $this->button_style ) { |
||
| 1108 | $this->smart = true; |
||
| 1109 | } else { |
||
| 1110 | $this->smart = false; |
||
| 1111 | } |
||
| 1112 | } |
||
| 1113 | |||
| 1114 | public function get_name() { |
||
| 1115 | return __( 'Google', 'jetpack' ); |
||
| 1116 | } |
||
| 1117 | |||
| 1118 | public function has_custom_button_style() { |
||
| 1119 | return $this->smart; |
||
| 1120 | } |
||
| 1121 | |||
| 1122 | public function get_display( $post ) { |
||
| 1123 | |||
| 1124 | if ( $this->smart ) { |
||
| 1125 | $share_url = $this->get_share_url( $post->ID ); |
||
| 1126 | return '<div class="googleplus1_button"><div class="g-plus" data-action="share" data-annotation="bubble" data-href="' . esc_url( $share_url ) . '"></div></div>'; |
||
| 1127 | View Code Duplication | } else { |
|
| 1128 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Google', 'share to', 'jetpack' ), __( 'Click to share on Google+', 'jetpack' ), 'share=google-plus-1', 'sharing-google-' . $post->ID ); |
||
| 1129 | } |
||
| 1130 | } |
||
| 1131 | |||
| 1132 | public function get_state() { |
||
| 1133 | return $this->state; |
||
| 1134 | } |
||
| 1135 | |||
| 1136 | public function process_request( $post, array $post_data ) { |
||
| 1137 | |||
| 1138 | if ( isset( $post_data['state'] ) ) { |
||
| 1139 | $this->state = $post_data['state']; |
||
| 1140 | } |
||
| 1141 | // Record stats |
||
| 1142 | parent::process_request( $post, $post_data ); |
||
| 1143 | |||
| 1144 | // Redirect to Google +'s sharing endpoint |
||
| 1145 | $url = 'https://plus.google.com/share?url=' . rawurlencode( $this->get_share_url( $post->ID ) ); |
||
| 1146 | wp_redirect( $url ); |
||
| 1147 | die(); |
||
| 1148 | } |
||
| 1149 | |||
| 1150 | View Code Duplication | public function display_footer() { |
|
| 1151 | global $post; |
||
| 1152 | |||
| 1153 | if ( $this->smart ) { ?> |
||
| 1154 | <script> |
||
| 1155 | function renderGooglePlus1() { |
||
| 1156 | if ( 'undefined' === typeof gapi ) { |
||
| 1157 | return; |
||
| 1158 | } |
||
| 1159 | |||
| 1160 | jQuery( '.g-plus' ).each(function() { |
||
| 1161 | var $button = jQuery( this ); |
||
| 1162 | |||
| 1163 | if ( ! $button.data( 'gplus-rendered' ) ) { |
||
| 1164 | gapi.plusone.render( this, { |
||
| 1165 | href: $button.attr( 'data-href' ), |
||
| 1166 | size: $button.attr( 'data-size' ), |
||
| 1167 | annotation: $button.attr( 'data-annotation' ) |
||
| 1168 | }); |
||
| 1169 | |||
| 1170 | $button.data( 'gplus-rendered', true ); |
||
| 1171 | } |
||
| 1172 | }); |
||
| 1173 | } |
||
| 1174 | |||
| 1175 | (function() { |
||
| 1176 | var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; |
||
| 1177 | po.src = 'https://apis.google.com/js/platform.js'; |
||
| 1178 | po.innerHTML = '{"parsetags": "explicit"}'; |
||
| 1179 | po.onload = renderGooglePlus1; |
||
| 1180 | var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); |
||
| 1181 | })(); |
||
| 1182 | |||
| 1183 | jQuery( document.body ).on( 'post-load', renderGooglePlus1 ); |
||
| 1184 | </script> |
||
| 1185 | <?php |
||
| 1186 | } else { |
||
| 1187 | $this->js_dialog( 'google-plus-1', array( 'width' => 480, 'height' => 550 ) ); |
||
| 1188 | } |
||
| 1189 | } |
||
| 1190 | |||
| 1191 | View Code Duplication | public function get_total( $post = false ) { |
|
| 1192 | global $wpdb, $blog_id; |
||
| 1193 | |||
| 1194 | $name = strtolower( $this->get_id() ); |
||
| 1195 | |||
| 1196 | if ( $post == false ) { |
||
| 1197 | // get total number of shares for service |
||
| 1198 | return $wpdb->get_var( $wpdb->prepare( 'SELECT SUM( count ) FROM sharing_stats WHERE blog_id = %d AND share_service = %s', $blog_id, $name ) ); |
||
| 1199 | } |
||
| 1200 | |||
| 1201 | // get total shares for a post |
||
| 1202 | return $wpdb->get_var( $wpdb->prepare( 'SELECT count FROM sharing_stats WHERE blog_id = %d AND post_id = %d AND share_service = %s', $blog_id, $post->ID, $name ) ); |
||
| 1203 | } |
||
| 1204 | } |
||
| 1205 | |||
| 1206 | class Share_Custom extends Sharing_Advanced_Source { |
||
| 1207 | private $name; |
||
| 1208 | private $icon; |
||
| 1209 | private $url; |
||
| 1210 | public $smart = true; |
||
| 1211 | public $shortname; |
||
| 1212 | |||
| 1213 | public function get_class() { |
||
| 1214 | return 'custom share-custom-' . sanitize_html_class( strtolower( $this->name ) ); |
||
| 1215 | } |
||
| 1216 | |||
| 1217 | public function __construct( $id, array $settings ) { |
||
| 1218 | parent::__construct( $id, $settings ); |
||
| 1219 | |||
| 1220 | $opts = $this->get_options(); |
||
| 1221 | |||
| 1222 | if ( isset( $settings['name'] ) ) { |
||
| 1223 | $this->name = $settings['name']; |
||
| 1224 | $this->shortname = preg_replace( '/[^a-z0-9]*/', '', $settings['name'] ); |
||
| 1225 | } |
||
| 1226 | |||
| 1227 | if ( isset( $settings['icon'] ) ) { |
||
| 1228 | $this->icon = $settings['icon']; |
||
| 1229 | |||
| 1230 | $new_icon = esc_url_raw( wp_specialchars_decode( $this->icon, ENT_QUOTES ) ); |
||
| 1231 | $i = 0; |
||
| 1232 | while ( $new_icon != $this->icon ) { |
||
| 1233 | if ( $i > 5 ) { |
||
| 1234 | $this->icon = false; |
||
| 1235 | break; |
||
| 1236 | } else { |
||
| 1237 | $this->icon = $new_icon; |
||
| 1238 | $new_icon = esc_url_raw( wp_specialchars_decode( $this->icon, ENT_QUOTES ) ); |
||
| 1239 | } |
||
| 1240 | $i++; |
||
| 1241 | } |
||
| 1242 | } |
||
| 1243 | |||
| 1244 | if ( isset( $settings['url'] ) ) { |
||
| 1245 | $this->url = $settings['url']; |
||
| 1246 | } |
||
| 1247 | } |
||
| 1248 | |||
| 1249 | public function get_name() { |
||
| 1250 | return $this->name; |
||
| 1251 | } |
||
| 1252 | |||
| 1253 | public function get_display( $post ) { |
||
| 1254 | $str = $this->get_link( $this->get_process_request_url( $post->ID ), esc_html( $this->name ), sprintf( __( 'Click to share on %s', 'jetpack' ), esc_attr( $this->name ) ), 'share=' . $this->id ); |
||
| 1255 | return str_replace( '<span>', '<span style="' . esc_attr( 'background-image:url("' . addcslashes( esc_url_raw( $this->icon ), '"' ) . '");' ) . '">', $str ); |
||
| 1256 | } |
||
| 1257 | |||
| 1258 | public function process_request( $post, array $post_data ) { |
||
| 1259 | $url = str_replace( '&', '&', $this->url ); |
||
| 1260 | $url = str_replace( '%post_id%', rawurlencode( $post->ID ), $url ); |
||
| 1261 | $url = str_replace( '%post_url%', rawurlencode( $this->get_share_url( $post->ID ) ), $url ); |
||
| 1262 | $url = str_replace( '%post_full_url%', rawurlencode( get_permalink( $post->ID ) ), $url ); |
||
| 1263 | $url = str_replace( '%post_title%', rawurlencode( $this->get_share_title( $post->ID ) ), $url ); |
||
| 1264 | $url = str_replace( '%home_url%', rawurlencode( home_url() ), $url ); |
||
| 1265 | $url = str_replace( '%post_slug%', rawurlencode( $post->post_name ), $url ); |
||
| 1266 | |||
| 1267 | if ( strpos( $url, '%post_tags%' ) !== false ) { |
||
| 1268 | $tags = get_the_tags( $post->ID ); |
||
| 1269 | $tagged = ''; |
||
| 1270 | |||
| 1271 | if ( $tags ) { |
||
| 1272 | foreach ( $tags as $tag ) { |
||
| 1273 | $tagged[] = rawurlencode( $tag->name ); |
||
| 1274 | } |
||
| 1275 | |||
| 1276 | $tagged = implode( ',', $tagged ); |
||
| 1277 | } |
||
| 1278 | |||
| 1279 | $url = str_replace( '%post_tags%', $tagged, $url ); |
||
| 1280 | } |
||
| 1281 | |||
| 1282 | if ( strpos( $url, '%post_excerpt%' ) !== false ) { |
||
| 1283 | $url_excerpt = $post->post_excerpt; |
||
| 1284 | if ( empty( $url_excerpt ) ) { |
||
| 1285 | $url_excerpt = $post->post_content; |
||
| 1286 | } |
||
| 1287 | |||
| 1288 | $url_excerpt = strip_tags( strip_shortcodes( $url_excerpt ) ); |
||
| 1289 | $url_excerpt = wp_html_excerpt( $url_excerpt, 100 ); |
||
| 1290 | $url_excerpt = rtrim( preg_replace( '/[^ .]*$/', '', $url_excerpt ) ); |
||
| 1291 | $url = str_replace( '%post_excerpt%', rawurlencode( $url_excerpt ), $url ); |
||
| 1292 | } |
||
| 1293 | |||
| 1294 | // Record stats |
||
| 1295 | parent::process_request( $post, $post_data ); |
||
| 1296 | |||
| 1297 | // Redirect |
||
| 1298 | wp_redirect( $url ); |
||
| 1299 | die(); |
||
| 1300 | } |
||
| 1301 | |||
| 1302 | public function display_options() { |
||
| 1303 | ?> |
||
| 1304 | <div class="input"> |
||
| 1305 | <table class="form-table"> |
||
| 1306 | <tbody> |
||
| 1307 | <tr> |
||
| 1308 | <th scope="row"><?php _e( 'Label', 'jetpack' ); ?></th> |
||
| 1309 | <td><input type="text" name="name" value="<?php echo esc_attr( $this->name ); ?>" /></td> |
||
| 1310 | </tr> |
||
| 1311 | |||
| 1312 | <tr> |
||
| 1313 | <th scope="row"><?php _e( 'URL', 'jetpack' ); ?></th> |
||
| 1314 | <td><input type="text" name="url" value="<?php echo esc_attr( $this->url ); ?>" /></td> |
||
| 1315 | </tr> |
||
| 1316 | |||
| 1317 | <tr> |
||
| 1318 | <th scope="row"><?php _e( 'Icon', 'jetpack' ); ?></th> |
||
| 1319 | <td><input type="text" name="icon" value="<?php echo esc_attr( $this->icon ); ?>" /></td> |
||
| 1320 | </tr> |
||
| 1321 | |||
| 1322 | <tr> |
||
| 1323 | <th scope="row"></th> |
||
| 1324 | <td> |
||
| 1325 | <input class="button-secondary" type="submit" value="<?php esc_attr_e( 'Save', 'jetpack' ); ?>" /> |
||
| 1326 | <a href="#" class="remove"><small><?php _e( 'Remove Service', 'jetpack' ); ?></small></a> |
||
| 1327 | </td> |
||
| 1328 | </tr> |
||
| 1329 | </tbody> |
||
| 1330 | </table> |
||
| 1331 | </div> |
||
| 1332 | <?php |
||
| 1333 | } |
||
| 1334 | |||
| 1335 | public function update_options( array $data ) { |
||
| 1336 | $name = trim( wp_html_excerpt( wp_kses( stripslashes( $data['name'] ), array() ), 30 ) ); |
||
| 1337 | $url = trim( esc_url_raw( $data['url'] ) ); |
||
| 1338 | $icon = trim( esc_url_raw( $data['icon'] ) ); |
||
| 1339 | |||
| 1340 | if ( $name ) { |
||
| 1341 | $this->name = $name; |
||
| 1342 | } |
||
| 1343 | |||
| 1344 | if ( $url ) { |
||
| 1345 | $this->url = $url; |
||
| 1346 | } |
||
| 1347 | |||
| 1348 | if ( $icon ) { |
||
| 1349 | $this->icon = $icon; |
||
| 1350 | } |
||
| 1351 | } |
||
| 1352 | |||
| 1353 | public function get_options() { |
||
| 1354 | return array( |
||
| 1355 | 'name' => $this->name, |
||
| 1356 | 'icon' => $this->icon, |
||
| 1357 | 'url' => $this->url, |
||
| 1358 | ); |
||
| 1359 | } |
||
| 1360 | |||
| 1361 | public function display_preview( $echo = true, $force_smart = false, $button_style = null ) { |
||
| 1362 | $opts = $this->get_options(); |
||
| 1363 | |||
| 1364 | $text = ' '; |
||
| 1365 | if ( ! $this->smart ) { |
||
| 1366 | if ( $this->button_style != 'icon' ) { |
||
| 1367 | $text = $this->get_name(); |
||
| 1368 | } |
||
| 1369 | } |
||
| 1370 | |||
| 1371 | $klasses = array( 'share-' . $this->shortname ); |
||
| 1372 | |||
| 1373 | if ( $this->button_style == 'icon' || $this->button_style == 'icon-text' ) { |
||
| 1374 | $klasses[] = 'share-icon'; |
||
| 1375 | } |
||
| 1376 | |||
| 1377 | if ( $this->button_style == 'icon' ) { |
||
| 1378 | $text = ''; |
||
| 1379 | $klasses[] = 'no-text'; |
||
| 1380 | } |
||
| 1381 | |||
| 1382 | if ( $this->button_style == 'text' ) { |
||
| 1383 | $klasses[] = 'no-icon'; |
||
| 1384 | } |
||
| 1385 | |||
| 1386 | $link = sprintf( |
||
| 1387 | '<a rel="nofollow" class="%s" href="javascript:void(0)" title="%s"><span style="background-image:url("%s") !important;background-position:left center;background-repeat:no-repeat;">%s</span></a>', |
||
| 1388 | implode( ' ', $klasses ), |
||
| 1389 | $this->get_name(), |
||
| 1390 | addcslashes( esc_url_raw( $opts['icon'] ), '"' ), |
||
| 1391 | $text |
||
| 1392 | ); |
||
| 1393 | ?> |
||
| 1394 | <div class="option option-smart-off"> |
||
| 1395 | <?php echo $link ; ?> |
||
| 1396 | </div><?php |
||
| 1397 | } |
||
| 1398 | } |
||
| 1399 | |||
| 1400 | class Share_Tumblr extends Sharing_Source { |
||
| 1401 | public $shortname = 'tumblr'; |
||
| 1402 | public $genericon = '\f214'; |
||
| 1403 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 1404 | parent::__construct( $id, $settings ); |
||
| 1405 | if ( 'official' == $this->button_style ) { |
||
| 1406 | $this->smart = true; |
||
| 1407 | } else { |
||
| 1408 | $this->smart = false; |
||
| 1409 | } |
||
| 1410 | } |
||
| 1411 | |||
| 1412 | public function get_name() { |
||
| 1413 | return __( 'Tumblr', 'jetpack' ); |
||
| 1414 | } |
||
| 1415 | |||
| 1416 | public function get_display( $post ) { |
||
| 1417 | if ( $this->smart ) { |
||
| 1418 | $target = ''; |
||
| 1419 | if ( true == $this->open_link_in_new ) { |
||
| 1420 | $target = '_blank'; |
||
| 1421 | } |
||
| 1422 | |||
| 1423 | return '<a target="' . $target . '" href="https://www.tumblr.com/share/link/?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&name=' . rawurlencode( $this->get_share_title( $post->ID ) ) . '" title="' . __( 'Share on Tumblr', 'jetpack' ) . '" style="display:inline-block; text-indent:-9999px; overflow:hidden; width:62px; height:20px; background:url(\'https://platform.tumblr.com/v1/share_2.png\') top left no-repeat transparent;">' . __( 'Share on Tumblr', 'jetpack' ) . '</a>'; |
||
| 1424 | View Code Duplication | } else { |
|
| 1425 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Tumblr', 'share to', 'jetpack' ), __( 'Click to share on Tumblr', 'jetpack' ), 'share=tumblr' ); |
||
| 1426 | } |
||
| 1427 | } |
||
| 1428 | |||
| 1429 | View Code Duplication | public function process_request( $post, array $post_data ) { |
|
| 1430 | // Record stats |
||
| 1431 | parent::process_request( $post, $post_data ); |
||
| 1432 | |||
| 1433 | // Redirect to Tumblr's sharing endpoint (a la their bookmarklet) |
||
| 1434 | $url = 'https://www.tumblr.com/share?v=3&u=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&t=' . rawurlencode( $this->get_share_title( $post->ID ) ) . '&s='; |
||
| 1435 | wp_redirect( $url ); |
||
| 1436 | die(); |
||
| 1437 | } |
||
| 1438 | // http://www.tumblr.com/share?v=3&u=URL&t=TITLE&s= |
||
| 1439 | View Code Duplication | public function display_footer() { |
|
| 1440 | if ( $this->smart ) { |
||
| 1441 | ?><script type="text/javascript" src="https://platform.tumblr.com/v1/share.js"></script><?php |
||
| 1442 | } else { |
||
| 1443 | $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) ); |
||
| 1444 | } |
||
| 1445 | } |
||
| 1446 | } |
||
| 1447 | |||
| 1448 | class Share_Pinterest extends Sharing_Source { |
||
| 1449 | public $shortname = 'pinterest'; |
||
| 1450 | public $genericon = '\f209'; |
||
| 1451 | |||
| 1452 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 1453 | parent::__construct( $id, $settings ); |
||
| 1454 | if ( 'official' == $this->button_style ) { |
||
| 1455 | $this->smart = true; |
||
| 1456 | } else { |
||
| 1457 | $this->smart = false; |
||
| 1458 | } |
||
| 1459 | } |
||
| 1460 | |||
| 1461 | public function get_name() { |
||
| 1462 | return __( 'Pinterest', 'jetpack' ); |
||
| 1463 | } |
||
| 1464 | |||
| 1465 | public function get_image( $post ) { |
||
| 1466 | if ( class_exists( 'Jetpack_PostImages' ) ) { |
||
| 1467 | $image = Jetpack_PostImages::get_image( $post->ID, array( 'fallback_to_avatars' => true ) ); |
||
| 1468 | if ( ! empty( $image ) ) { |
||
| 1469 | return $image['src']; |
||
| 1470 | } |
||
| 1471 | } |
||
| 1472 | |||
| 1473 | /** |
||
| 1474 | * Filters the default image used by the Pinterest Pin It share button. |
||
| 1475 | * |
||
| 1476 | * @module sharedaddy |
||
| 1477 | * |
||
| 1478 | * @since 3.6.0 |
||
| 1479 | * |
||
| 1480 | * @param string $url Default image URL. |
||
| 1481 | */ |
||
| 1482 | return apply_filters( 'jetpack_sharing_pinterest_default_image', 'https://s0.wp.com/i/blank.jpg' ); |
||
| 1483 | } |
||
| 1484 | |||
| 1485 | public function get_external_url( $post ) { |
||
| 1486 | $url = 'https://www.pinterest.com/pin/create/button/?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&media=' . rawurlencode( $this->get_image( $post ) ) . '&description=' . rawurlencode( $post->post_title ); |
||
| 1487 | |||
| 1488 | /** |
||
| 1489 | * Filters the Pinterest share URL used in sharing button output. |
||
| 1490 | * |
||
| 1491 | * @module sharedaddy |
||
| 1492 | * |
||
| 1493 | * @since 3.6.0 |
||
| 1494 | * |
||
| 1495 | * @param string $url Pinterest share URL. |
||
| 1496 | */ |
||
| 1497 | return apply_filters( 'jetpack_sharing_pinterest_share_url', $url ); |
||
| 1498 | } |
||
| 1499 | |||
| 1500 | public function get_widget_type() { |
||
| 1501 | /** |
||
| 1502 | * Filters the Pinterest widget type. |
||
| 1503 | * |
||
| 1504 | * @see https://business.pinterest.com/en/widget-builder |
||
| 1505 | * |
||
| 1506 | * @module sharedaddy |
||
| 1507 | * |
||
| 1508 | * @since 3.6.0 |
||
| 1509 | * |
||
| 1510 | * @param string $type Pinterest widget type. Default of 'buttonPin' for single-image selection. 'buttonBookmark' for multi-image modal. |
||
| 1511 | */ |
||
| 1512 | return apply_filters( 'jetpack_sharing_pinterest_widget_type', 'buttonPin' ); |
||
| 1513 | } |
||
| 1514 | |||
| 1515 | public function get_display( $post ) { |
||
| 1516 | $display = ''; |
||
| 1517 | |||
| 1518 | if ( $this->smart ) { |
||
| 1519 | $display = sprintf( |
||
| 1520 | '<div class="pinterest_button"><a href="%s" data-pin-do="%s" data-pin-config="beside"><img src="//assets.pinterest.com/images/pidgets/pinit_fg_en_rect_gray_20.png" /></a></div>', |
||
| 1521 | esc_url( $this->get_external_url( $post ) ), |
||
| 1522 | esc_attr( $this->get_widget_type() ) |
||
| 1523 | ); |
||
| 1524 | View Code Duplication | } else { |
|
| 1525 | $display = $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Pinterest', 'share to', 'jetpack' ), __( 'Click to share on Pinterest', 'jetpack' ), 'share=pinterest', 'sharing-pinterest-' . $post->ID ); |
||
| 1526 | } |
||
| 1527 | |||
| 1528 | /** This filter is already documented in modules/sharedaddy/sharing-sources.php */ |
||
| 1529 | if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'linkedin' ) ) { |
||
| 1530 | sharing_register_post_for_share_counts( $post->ID ); |
||
| 1531 | } |
||
| 1532 | |||
| 1533 | return $display; |
||
| 1534 | } |
||
| 1535 | |||
| 1536 | public function process_request( $post, array $post_data ) { |
||
| 1537 | // Record stats |
||
| 1538 | parent::process_request( $post, $post_data ); |
||
| 1539 | // If we're triggering the multi-select panel, then we don't need to redirect to Pinterest |
||
| 1540 | if ( ! isset( $_GET['js_only'] ) ) { |
||
| 1541 | $pinterest_url = esc_url_raw( $this->get_external_url( $post ) ); |
||
| 1542 | wp_redirect( $pinterest_url ); |
||
| 1543 | } else { |
||
| 1544 | echo '// share count bumped'; |
||
| 1545 | } |
||
| 1546 | die(); |
||
| 1547 | } |
||
| 1548 | |||
| 1549 | public function display_footer() { |
||
| 1550 | /** |
||
| 1551 | * Filter the Pin it button appearing when hovering over images when using the official button style. |
||
| 1552 | * |
||
| 1553 | * @module sharedaddy |
||
| 1554 | * |
||
| 1555 | * @since 3.6.0 |
||
| 1556 | * |
||
| 1557 | * @param bool $jetpack_pinit_over True by default, displays the Pin it button when hovering over images. |
||
| 1558 | */ |
||
| 1559 | $jetpack_pinit_over = apply_filters( 'jetpack_pinit_over_button', true ); |
||
| 1560 | ?> |
||
| 1561 | <?php if ( $this->smart ) : ?> |
||
| 1562 | <script type="text/javascript"> |
||
| 1563 | // Pinterest shared resources |
||
| 1564 | var s = document.createElement("script"); |
||
| 1565 | s.type = "text/javascript"; |
||
| 1566 | s.async = true; |
||
| 1567 | <?php if ( $jetpack_pinit_over ) { |
||
| 1568 | echo "s.setAttribute('data-pin-hover', true);"; |
||
| 1569 | } ?> |
||
| 1570 | s.src = window.location.protocol + "//assets.pinterest.com/js/pinit.js"; |
||
| 1571 | var x = document.getElementsByTagName("script")[0]; |
||
| 1572 | x.parentNode.insertBefore(s, x); |
||
| 1573 | // if 'Pin it' button has 'counts' make container wider |
||
| 1574 | jQuery(window).load( function(){ jQuery( 'li.share-pinterest a span:visible' ).closest( '.share-pinterest' ).width( '80px' ); } ); |
||
| 1575 | </script> |
||
| 1576 | <?php elseif ( 'buttonPin' != $this->get_widget_type() ) : ?> |
||
| 1577 | <script type="text/javascript"> |
||
| 1578 | jQuery(document).ready( function(){ |
||
| 1579 | jQuery('body').on('click', 'a.share-pinterest', function(e){ |
||
| 1580 | e.preventDefault(); |
||
| 1581 | // Load Pinterest Bookmarklet code |
||
| 1582 | var s = document.createElement("script"); |
||
| 1583 | s.type = "text/javascript"; |
||
| 1584 | s.src = window.location.protocol + "//assets.pinterest.com/js/pinmarklet.js?r=" + ( Math.random() * 99999999 ); |
||
| 1585 | var x = document.getElementsByTagName("script")[0]; |
||
| 1586 | x.parentNode.insertBefore(s, x); |
||
| 1587 | // Trigger Stats |
||
| 1588 | var s = document.createElement("script"); |
||
| 1589 | s.type = "text/javascript"; |
||
| 1590 | s.src = this + ( this.toString().indexOf( '?' ) ? '&' : '?' ) + 'js_only=1'; |
||
| 1591 | var x = document.getElementsByTagName("script")[0]; |
||
| 1592 | x.parentNode.insertBefore(s, x); |
||
| 1593 | }); |
||
| 1594 | }); |
||
| 1595 | </script> |
||
| 1596 | <?php endif; |
||
| 1597 | } |
||
| 1598 | } |
||
| 1599 | |||
| 1600 | class Share_Pocket extends Sharing_Source { |
||
| 1601 | public $shortname = 'pocket'; |
||
| 1602 | public $genericon = '\f224'; |
||
| 1603 | |||
| 1604 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 1605 | parent::__construct( $id, $settings ); |
||
| 1606 | |||
| 1607 | if ( 'official' == $this->button_style ) { |
||
| 1608 | $this->smart = true; |
||
| 1609 | } else { |
||
| 1610 | $this->smart = false; |
||
| 1611 | } |
||
| 1612 | } |
||
| 1613 | |||
| 1614 | public function get_name() { |
||
| 1615 | return __( 'Pocket', 'jetpack' ); |
||
| 1616 | } |
||
| 1617 | |||
| 1618 | View Code Duplication | public function process_request( $post, array $post_data ) { |
|
| 1619 | // Record stats |
||
| 1620 | parent::process_request( $post, $post_data ); |
||
| 1621 | |||
| 1622 | $pocket_url = esc_url_raw( 'https://getpocket.com/save/?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&title=' . rawurlencode( $this->get_share_title( $post->ID ) ) ); |
||
| 1623 | wp_redirect( $pocket_url ); |
||
| 1624 | exit; |
||
| 1625 | } |
||
| 1626 | |||
| 1627 | public function get_display( $post ) { |
||
| 1628 | if ( $this->smart ) { |
||
| 1629 | $post_count = 'horizontal'; |
||
| 1630 | |||
| 1631 | $button = ''; |
||
| 1632 | $button .= '<div class="pocket_button">'; |
||
| 1633 | $button .= sprintf( '<a href="https://getpocket.com/save" class="pocket-btn" data-lang="%s" data-save-url="%s" data-pocket-count="%s" >%s</a>', 'en', esc_attr( $this->get_share_url( $post->ID ) ), $post_count, esc_attr__( 'Pocket', 'jetpack' ) ); |
||
| 1634 | $button .= '</div>'; |
||
| 1635 | |||
| 1636 | return $button; |
||
| 1637 | View Code Duplication | } else { |
|
| 1638 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Pocket', 'share to', 'jetpack' ), __( 'Click to share on Pocket', 'jetpack' ), 'share=pocket' ); |
||
| 1639 | } |
||
| 1640 | |||
| 1641 | } |
||
| 1642 | |||
| 1643 | View Code Duplication | function display_footer() { |
|
| 1644 | if ( $this->smart ) : |
||
| 1645 | ?> |
||
| 1646 | <script> |
||
| 1647 | // Don't use Pocket's default JS as it we need to force init new Pocket share buttons loaded via JS. |
||
| 1648 | function jetpack_sharing_pocket_init() { |
||
| 1649 | jQuery.getScript( 'https://widgets.getpocket.com/v1/j/btn.js?v=1' ); |
||
| 1650 | } |
||
| 1651 | jQuery( document ).ready( jetpack_sharing_pocket_init ); |
||
| 1652 | jQuery( document.body ).on( 'post-load', jetpack_sharing_pocket_init ); |
||
| 1653 | </script> |
||
| 1654 | <?php |
||
| 1655 | else : |
||
| 1656 | $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) ); |
||
| 1657 | endif; |
||
| 1658 | |||
| 1659 | } |
||
| 1660 | |||
| 1661 | } |
||
| 1662 | |||
| 1663 | class Share_Telegram extends Sharing_Source { |
||
| 1664 | public $shortname = 'telegram'; |
||
| 1665 | |||
| 1666 | public function __construct( $id, array $settings ) { |
||
| 1667 | parent::__construct( $id, $settings ); |
||
| 1668 | } |
||
| 1669 | |||
| 1670 | public function get_name() { |
||
| 1671 | return __( 'Telegram', 'jetpack' ); |
||
| 1672 | } |
||
| 1673 | View Code Duplication | public function process_request( $post, array $post_data ) { |
|
| 1674 | // Record stats |
||
| 1675 | parent::process_request( $post, $post_data ); |
||
| 1676 | $telegram_url = esc_url_raw( 'https://telegram.me/share/url?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&text=' . rawurlencode( $this->get_share_title( $post->ID ) ) ); |
||
| 1677 | wp_redirect( $telegram_url ); |
||
| 1678 | exit; |
||
| 1679 | } |
||
| 1680 | |||
| 1681 | public function get_display( $post ) { |
||
| 1682 | return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Telegram', 'share to', 'jetpack' ), __( 'Click to share on Telegram', 'jetpack' ), 'share=telegram' ); |
||
| 1683 | } |
||
| 1684 | |||
| 1685 | function display_footer() { |
||
| 1686 | $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) ); |
||
| 1687 | } |
||
| 1688 | } |
||
| 1689 | |||
| 1690 | class Jetpack_Share_WhatsApp extends Sharing_Source { |
||
| 1691 | public $shortname = 'jetpack-whatsapp'; |
||
| 1692 | |||
| 1693 | public function __construct( $id, array $settings ) { |
||
| 1694 | parent::__construct( $id, $settings ); |
||
| 1695 | } |
||
| 1696 | |||
| 1697 | public function get_name() { |
||
| 1698 | return __( 'WhatsApp', 'jetpack' ); |
||
| 1699 | } |
||
| 1700 | |||
| 1701 | public function get_display( $post ) { |
||
| 1702 | return $this->get_link( 'https://api.whatsapp.com/send?text=' . rawurlencode( $this->get_share_title( $post->ID ) ) . ' ' . rawurlencode( $this->get_share_url( $post->ID ) ), _x( 'WhatsApp', 'share to', 'jetpack' ), __( 'Click to share on WhatsApp', 'jetpack' ) ); |
||
| 1703 | } |
||
| 1704 | } |
||
| 1705 | |||
| 1706 | class Share_Skype extends Sharing_Source { |
||
| 1707 | public $shortname = 'skype'; |
||
| 1708 | public $genericon = '\f220'; |
||
| 1709 | private $share_type = 'default'; |
||
| 1710 | |||
| 1711 | View Code Duplication | public function __construct( $id, array $settings ) { |
|
| 1712 | parent::__construct( $id, $settings ); |
||
| 1713 | |||
| 1714 | if ( isset( $settings['share_type'] ) ) { |
||
| 1715 | $this->share_type = $settings['share_type']; |
||
| 1716 | } |
||
| 1717 | |||
| 1718 | if ( 'official' == $this->button_style ) { |
||
| 1719 | $this->smart = true; |
||
| 1720 | } else { |
||
| 1721 | $this->smart = false; |
||
| 1722 | } |
||
| 1723 | } |
||
| 1724 | |||
| 1725 | public function get_name() { |
||
| 1726 | return __( 'Skype', 'jetpack' ); |
||
| 1727 | } |
||
| 1728 | |||
| 1729 | public function get_display( $post ) { |
||
| 1730 | if ( $this->smart ) { |
||
| 1731 | $skype_share_html = sprintf( |
||
| 1732 | '<div class="skype-share" data-href="%1$s" data-lang="%2$s" data-style="small" data-source="jetpack" ></div>', |
||
| 1733 | esc_attr( $this->get_share_url( $post->ID ) ), |
||
| 1734 | 'en-US' |
||
| 1735 | ); |
||
| 1736 | return $skype_share_html; |
||
| 1737 | } |
||
| 1738 | |||
| 1739 | /** This filter is already documented in modules/sharedaddy/sharing-sources.php */ |
||
| 1740 | if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'skype' ) ) { |
||
| 1741 | sharing_register_post_for_share_counts( $post->ID ); |
||
| 1742 | } |
||
| 1743 | return $this->get_link( |
||
| 1744 | $this->get_process_request_url( $post->ID ), _x( 'Skype', 'share to', 'jetpack' ), __( 'Share on Skype', 'jetpack' ), 'share=skype', 'sharing-skype-' . $post->ID ); |
||
| 1745 | } |
||
| 1746 | |||
| 1747 | View Code Duplication | public function process_request( $post, array $post_data ) { |
|
| 1748 | $skype_url = sprintf( |
||
| 1749 | 'https://web.skype.com/share?url=%1$s&lang=%2$s=&source=jetpack', |
||
| 1750 | rawurlencode( $this->get_share_url( $post->ID ) ), |
||
| 1751 | 'en-US' |
||
| 1752 | ); |
||
| 1753 | |||
| 1754 | // Record stats |
||
| 1755 | parent::process_request( $post, $post_data ); |
||
| 1756 | |||
| 1757 | // Redirect to Skype |
||
| 1758 | wp_redirect( $skype_url ); |
||
| 1759 | die(); |
||
| 1760 | } |
||
| 1761 | |||
| 1762 | public function display_footer() { |
||
| 1763 | if ( $this->smart ) : |
||
| 1764 | ?> |
||
| 1765 | <script> |
||
| 1766 | (function(r, d, s) { |
||
| 1767 | r.loadSkypeWebSdkAsync = r.loadSkypeWebSdkAsync || function(p) { |
||
| 1768 | var js, sjs = d.getElementsByTagName(s)[0]; |
||
| 1769 | if (d.getElementById(p.id)) { return; } |
||
| 1770 | js = d.createElement(s); |
||
| 1771 | js.id = p.id; |
||
| 1772 | js.src = p.scriptToLoad; |
||
| 1773 | js.onload = p.callback |
||
| 1774 | sjs.parentNode.insertBefore(js, sjs); |
||
| 1775 | }; |
||
| 1776 | var p = { |
||
| 1777 | scriptToLoad: 'https://swx.cdn.skype.com/shared/v/latest/skypewebsdk.js', |
||
| 1778 | id: 'skype_web_sdk' |
||
| 1779 | }; |
||
| 1780 | r.loadSkypeWebSdkAsync(p); |
||
| 1781 | })(window, document, 'script'); |
||
| 1782 | </script> |
||
| 1783 | <?php |
||
| 1784 | else : |
||
| 1785 | $this->js_dialog( $this->shortname, array( 'width' => 305, 'height' => 665 ) ); |
||
| 1786 | endif; |
||
| 1787 | } |
||
| 1788 | } |
||
| 1789 |
An exit expression should only be used in rare cases. For example, if you write a short command line script.
In most cases however, using an
exitexpression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.