PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
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 / jetpack_vendor / automattic / jetpack-classic-theme-helper / src / class-social-links.php
jetpack / jetpack_vendor / automattic / jetpack-classic-theme-helper / src Last commit date
compat 9 months ago content-options 2 months ago custom-post-types 1 month ago featured-content 1 year ago responsive-videos 1 year ago social-menu 2 months ago class-featured-content.php 2 months ago class-main.php 1 month ago class-social-links.php 9 months ago content-options.php 9 months ago custom-content-types.php 8 months ago jetpack-color.php 2 years ago responsive-videos.php 2 years ago shared-functions.php 2 years ago site-breadcrumbs.php 9 months ago social-menu.php 9 months ago
class-social-links.php
273 lines
1 <?php
2 /**
3 * Theme Tools: Social Links.
4 *
5 * This feature will only be activated for themes that declare their support.
6 * This can be done by adding code similar to the following during the
7 * 'after_setup_theme' action:
8 *
9 * add_theme_support( 'social-links', array(
10 * 'facebook', 'twitter', 'linkedin', 'tumblr',
11 * ) );
12 *
13 * @package automattic/jetpack-classic-theme-helper
14 */
15
16 namespace Automattic\Jetpack\Classic_Theme_Helper;
17
18 use Automattic\Jetpack\Publicize\Publicize;
19 use Jetpack_Options;
20 use WP_Customize_Manager;
21
22 if ( ! class_exists( __NAMESPACE__ . '\Social_Links' ) ) {
23
24 /**
25 * Social_Links main class.
26 *
27 * @phan-constructor-used-for-side-effects
28 */
29 class Social_Links {
30
31 /**
32 * The links the user set for each service.
33 *
34 * @var array
35 */
36 private $links;
37
38 /**
39 * A Publicize object.
40 *
41 * @var Publicize
42 */
43 private $publicize;
44
45 /**
46 * An array with all services that are supported by both Publicize and the
47 * currently active theme.
48 *
49 * @var array
50 */
51 private $services = array();
52
53 /**
54 * An array of the services the theme supports
55 *
56 * @var array
57 */
58 private $theme_supported_services = array();
59
60 /**
61 * Constructor.
62 */
63 public function __construct() {
64 if ( ! ( ! wp_is_block_theme() && current_theme_supports( 'social-links' ) && function_exists( 'publicize_init' ) ) ) {
65 return;
66 }
67
68 $theme_support = get_theme_support( 'social-links' );
69
70 /*
71 An array of named arguments must be passed as the second parameter
72 * of add_theme_support().
73 */
74 if ( empty( $theme_support[0] ) ) {
75 return;
76 }
77
78 $this->theme_supported_services = $theme_support[0];
79 $this->links = class_exists( Jetpack_Options::class ) ? Jetpack_Options::get_option( 'social_links', array() ) : '';
80
81 $this->admin_setup();
82
83 add_filter( 'jetpack_has_social_links', array( $this, 'has_social_links' ) );
84 add_filter( 'jetpack_get_social_links', array( $this, 'get_social_links' ) );
85
86 foreach ( $theme_support[0] as $service ) {
87 add_filter( "pre_option_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // - `get_option( 'jetpack-service' );`
88 add_filter( "theme_mod_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // - `get_theme_mod( 'jetpack-service' );`
89 }
90 }
91
92 /**
93 * Init the admin setup.
94 */
95 public function admin_setup() {
96 if ( ! current_user_can( 'manage_options' ) ) {
97 return;
98 }
99
100 if ( ! is_admin() && ! $this->is_customize_preview() ) {
101 return;
102 }
103
104 // @phan-suppress-next-line PhanUndeclaredFunction -- See __construct() for the condition that ensures this function exists.
105 $this->publicize = publicize_init();
106 $publicize_services = $this->publicize->get_services( 'connected' );
107 $this->services = array_intersect( array_keys( $publicize_services ), $this->theme_supported_services );
108
109 add_action( 'publicize_connected', array( $this, 'check_links' ), 20 );
110 add_action( 'publicize_disconnected', array( $this, 'check_links' ), 20 );
111 add_action( 'customize_register', array( $this, 'customize_register' ) );
112 add_filter( 'sanitize_option_jetpack_options', array( $this, 'sanitize_link' ) );
113 }
114
115 /**
116 * Compares the currently saved links with the connected services and removes
117 * links from services that are no longer connected.
118 *
119 * @return void
120 */
121 public function check_links() {
122 $active_links = array_intersect_key( $this->links, array_flip( $this->services ) );
123
124 if ( $active_links !== $this->links ) {
125 $this->links = $active_links;
126 if ( class_exists( Jetpack_Options::class ) ) {
127 Jetpack_Options::update_option( 'social_links', $active_links );
128 }
129 }
130 }
131
132 /**
133 * Add social link dropdown to the Customizer.
134 *
135 * @param WP_Customize_Manager $wp_customize Theme Customizer object.
136 */
137 public function customize_register( $wp_customize ) {
138 $wp_customize->add_section(
139 'jetpack_social_links',
140 array(
141 'title' => esc_html__( 'Connect', 'jetpack-classic-theme-helper' ),
142 'priority' => 35,
143 )
144 );
145
146 if ( class_exists( Publicize::class ) ) {
147 foreach ( array_keys( $this->publicize->get_services( 'all' ) ) as $service ) {
148 $choices = $this->get_customize_select( $service );
149
150 if ( empty( $choices ) ) {
151 continue;
152 }
153
154 $wp_customize->add_setting(
155 "jetpack_options[social_links][$service]",
156 array(
157 'type' => 'option',
158 'default' => '',
159 )
160 );
161
162 $wp_customize->add_control(
163 "jetpack-$service",
164 array(
165 'label' => $this->publicize->get_service_label( $service ),
166 'section' => 'jetpack_social_links',
167 'settings' => "jetpack_options[social_links][$service]",
168 'type' => 'select',
169 'choices' => $choices,
170 )
171 );
172 }
173 }
174 }
175
176 /**
177 * Sanitizes social links.
178 *
179 * @param array $option The incoming values to be sanitized.
180 * @return array
181 */
182 public function sanitize_link( $option ) {
183 foreach ( $this->services as $service ) {
184 if ( ! empty( $option['social_links'][ $service ] ) ) {
185 $option['social_links'][ $service ] = esc_url_raw( $option['social_links'][ $service ] );
186 } else {
187 unset( $option['social_links'][ $service ] );
188 }
189 }
190
191 return $option;
192 }
193
194 /**
195 * Returns whether there are any social links set.
196 *
197 * @return bool
198 */
199 public function has_social_links() {
200 return ! empty( $this->links );
201 }
202
203 /**
204 * Return available social links.
205 *
206 * @return array
207 */
208 public function get_social_links() {
209 return $this->links;
210 }
211
212 /**
213 * Short-circuits get_option and get_theme_mod calls.
214 *
215 * @param string $link The incoming value to be replaced.
216 * @return string $link The social link that we've got.
217 */
218 public function get_social_link_filter( $link ) {
219 if ( preg_match( '/_jetpack-(.+)$/i', current_filter(), $matches ) && ! empty( $this->links[ $matches[1] ] ) ) {
220 return $this->links[ $matches[1] ];
221 }
222
223 return $link;
224 }
225
226 /**
227 * Puts together an array of choices for a specific service.
228 *
229 * @param string $service The social service.
230 * @return array An associative array with profile links and display names.
231 */
232 private function get_customize_select( $service ) {
233 $choices = array(
234 '' => __( '&mdash; Select &mdash;', 'jetpack-classic-theme-helper' ),
235 );
236
237 if ( isset( $this->links[ $service ] ) ) {
238 $choices[ $this->links[ $service ] ] = $this->links[ $service ];
239 }
240
241 if ( class_exists( Publicize::class ) ) {
242 $connected_services = $this->publicize->get_services( 'connected' );
243 if ( isset( $connected_services[ $service ] ) ) {
244 foreach ( $connected_services[ $service ] as $c ) {
245 $profile_link = $this->publicize->get_profile_link( $service, $c );
246
247 if ( false === $profile_link ) {
248 continue;
249 }
250
251 $choices[ $profile_link ] = $this->publicize->get_display_name( $service, $c );
252 }
253 }
254 }
255
256 if ( 1 === count( $choices ) ) {
257 return array();
258 }
259
260 return $choices;
261 }
262
263 /**
264 * Back-compat function for versions prior to 4.0.
265 */
266 private function is_customize_preview() {
267 global $wp_customize;
268 return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
269 }
270 }
271
272 } // - end if ( ! class_exists( 'Social_Links' )
273