PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.1.5
Jetpack – WP Security, Backup, Speed, & Growth v13.1.5
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 / extensions / blocks / sharing-button / sharing-button.php
jetpack / extensions / blocks / sharing-button Last commit date
components 2 years ago class-sharing-source-block.php 2 years ago sharing-button.php 2 years ago
sharing-button.php
161 lines
1 <?php
2 /**
3 * Sharing Buttons Block.
4 *
5 * @since 11.x
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\Sharing_Button_Block;
11
12 use Automattic\Jetpack\Blocks;
13 use Jetpack_Gutenberg;
14
15 require_once __DIR__ . '/class-sharing-source-block.php';
16 require_once __DIR__ . '/components/social-icons.php';
17
18 /**
19 * Registers the block for use in Gutenberg
20 * This is done via an action so that we can disable
21 * registration if we need to.
22 */
23 function register_block() {
24 Blocks::jetpack_register_block(
25 __DIR__,
26 array( 'render_callback' => __NAMESPACE__ . '\render_block' )
27 );
28 }
29 add_action( 'init', __NAMESPACE__ . '\register_block' );
30
31 /**
32 * Sharing Buttons block registration/dependency declaration.
33 *
34 * @param array $attr Array containing the Sharing Buttons block attributes.
35 * @param string $content String containing the Sharing Buttons block content.
36 * @param object $block Object containing block data.
37 *
38 * @return string
39 */
40 function render_block( $attr, $content, $block ) {
41 $service_name = $attr['service'];
42 $title = $attr['label'] ?? $service_name;
43 $icon = get_social_logo( $service_name );
44 $style_type = $block->context['styleType'] ?? 'icon-text';
45 $post_id = $block->context['postId'] ?? 0;
46 $data_shared = sprintf(
47 'sharing-%1$s-%2$d',
48 $service_name,
49 $post_id
50 );
51
52 $services = get_services();
53 $service = new $services[ $service_name ]( $service_name, array() );
54 $link_props = $service->get_link(
55 $post_id,
56 'share=' . esc_attr( $service_name ) . '&nb=1',
57 esc_attr( $data_shared )
58 );
59 $link_url = $link_props['url'];
60 $link_classes = sprintf(
61 'jetpack-sharing-button__button style-%1$s share-%2$s',
62 $style_type,
63 $service_name
64 );
65 $link_aria_label = sprintf(
66 /* translators: %s refers to a string representation of sharing service, e.g. Facebook */
67 esc_html__( 'Share on %s', 'jetpack' ),
68 esc_html( $title )
69 );
70
71 $styles = array();
72 if (
73 array_key_exists( 'iconColorValue', $block->context )
74 && ! empty( $block->context['iconColorValue'] )
75 ) {
76 $styles['color'] = $block->context['iconColorValue'];
77 }
78 if (
79 array_key_exists( 'iconBackgroundColorValue', $block->context )
80 && ! empty( $block->context['iconBackgroundColorValue'] )
81 ) {
82 $styles['background-color'] = $block->context['iconBackgroundColorValue'];
83 }
84 $link_styles = '';
85 foreach ( $styles as $property => $value ) {
86 $link_styles .= $property . ':' . $value . ';';
87 }
88
89 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
90
91 $component = '<li class="jetpack-sharing-button__list-item">';
92 $component .= sprintf(
93 '<a href="%1$s" target="_blank" rel="nofollow noopener noreferrer" class="%2$s" style="%3$s" data-service="%4$s" data-shared="%5$s" aria-label="%6$s">',
94 esc_url( $link_url ),
95 esc_attr( $link_classes ),
96 esc_attr( $link_styles ),
97 esc_attr( $service_name ),
98 esc_attr( $data_shared ),
99 esc_attr( $link_aria_label )
100 );
101 $component .= $style_type !== 'text' ? $icon : '';
102 $component .= '<span class="jetpack-sharing-button__service-label" aria-hidden="true">' . esc_html( $title ) . '</span>';
103 $component .= '</a>';
104 $component .= '</li>';
105
106 return $component;
107 }
108
109 /**
110 * Get services for the Sharing Buttons block.
111 *
112 * @return array Array of services.
113 */
114 function get_services() {
115 $services = array(
116 'print' => Share_Print_Block::class,
117 'mail' => Share_Email_Block::class,
118 'facebook' => Share_Facebook_Block::class,
119 'linkedin' => Share_LinkedIn_Block::class,
120 'reddit' => Share_Reddit_Block::class,
121 'twitter' => Share_Twitter_Block::class,
122 'tumblr' => Share_Tumblr_Block::class,
123 'pinterest' => Share_Pinterest_Block::class,
124 'pocket' => Share_Pocket_Block::class,
125 'telegram' => Share_Telegram_Block::class,
126 'whatsapp' => Jetpack_Share_WhatsApp_Block::class,
127 'mastodon' => Share_Mastodon_Block::class,
128 'nextdoor' => Share_Nextdoor_Block::class,
129 'x' => Share_X_Block::class,
130 );
131
132 return $services;
133 }
134
135 /**
136 * Launch sharing requests on page load when a specific query string is used.
137 *
138 * @return void
139 */
140 function sharing_process_requests() {
141 global $post;
142
143 // Only process if: single post and share={service} defined
144 if ( ( is_page() || is_single() ) && isset( $_GET['share'] ) && is_string( $_GET['share'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
145 $services = get_services();
146 $service_name = sanitize_text_field( wp_unslash( $_GET['share'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
147
148 // Only allow services that have been defined in get_services().
149 if ( ! array_key_exists( $service_name, $services ) ) {
150 return;
151 }
152
153 $service = new $services[ ( $service_name ) ]( $service_name, array() ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
154 if ( $service ) {
155 $service->process_request( $post, $_POST ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
156 }
157 }
158 }
159
160 add_action( 'template_redirect', __NAMESPACE__ . '\sharing_process_requests', 9 );
161