PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.9-a.7
Jetpack – WP Security, Backup, Speed, & Growth v15.9-a.7
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / widgets / flickr.php
jetpack / modules / widgets Last commit date
authors 6 months ago contact-info 6 months ago eu-cookie-law 6 months ago facebook-likebox 10 years ago flickr 6 months ago gallery 6 months ago goodreads 6 months ago google-translate 1 year ago image-widget 6 months ago instagram 3 months ago internet-defense-league 1 year ago milestone 3 months ago my-community 6 months ago social-icons 3 months ago social-media-icons 6 months ago top-posts 6 months ago wordpress-post-widget 2 days ago authors.php 6 months ago blog-stats.php 6 months ago class-jetpack-eu-cookie-law-widget.php 1 week ago class-jetpack-instagram-widget.php 5 months ago contact-info.php 1 week ago customizer-controls.css 6 months ago customizer-utils.js 1 year ago facebook-likebox.php 1 week ago flickr.php 6 months ago gallery.php 1 week ago goodreads.php 1 week ago google-translate.php 1 week ago gravatar-profile.css 6 months ago gravatar-profile.php 1 week ago image-widget.php 6 months ago internet-defense-league.php 6 months ago mailchimp.php 6 months ago milestone.php 6 months ago my-community.php 1 week ago rsslinks-widget.php 1 week ago simple-payments.php 6 months ago social-icons.php 2 weeks ago social-media-icons.php 6 months ago top-posts.php 1 week ago twitter-timeline-admin.js 1 year ago twitter-timeline.php 1 week ago upcoming-events.php 6 months ago wordpress-post-widget.php 6 months ago
flickr.php
262 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Flickr Widget, pulling recent photos from Flickr using RSS feed.
4 *
5 * This widget is now deprecated.
6 * Existing widgets will continue to work, but Flickr no longer displays RSS feeds,
7 * making it impossible for site owners to configure this widget.
8 * We consequently only register the widget if it's already in use on the site.
9 *
10 * @see https://github.com/Automattic/jetpack/issues/39824
11 *
12 * @package automattic/jetpack
13 */
14
15 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
16
17 /**
18 * Disable direct access/execution to/of the widget code.
19 */
20 if ( ! defined( 'ABSPATH' ) ) {
21 exit( 0 );
22 }
23
24 if ( ! class_exists( 'Jetpack_Flickr_Widget' ) ) {
25 /**
26 * Flickr Widget
27 *
28 * Display your recent Flickr photos.
29 */
30 class Jetpack_Flickr_Widget extends WP_Widget {
31 /**
32 * Constructor.
33 */
34 public function __construct() {
35 parent::__construct(
36 'flickr',
37 /** This filter is documented in modules/widgets/facebook-likebox.php */
38 apply_filters( 'jetpack_widget_name', esc_html__( 'Flickr', 'jetpack' ) ),
39 array(
40 'description' => esc_html__( 'Display your recent Flickr photos.', 'jetpack' ),
41 'customize_selective_refresh' => true,
42 ),
43 array()
44 );
45 }
46
47 /**
48 * Enqueue style.
49 */
50 public function enqueue_style() {
51 wp_enqueue_style( 'flickr-widget-style', plugins_url( 'flickr/style.css', __FILE__ ), array(), '20170405' );
52 }
53
54 /**
55 * Return an associative array of default values.
56 *
57 * These values are used in new widgets.
58 *
59 * @return array Default values for the widget options.
60 */
61 public function defaults() {
62 return array(
63 'title' => esc_html__( 'Flickr Photos', 'jetpack' ),
64 'items' => 4,
65 'target' => false,
66 'flickr_image_size' => 'thumbnail',
67 'flickr_rss_url' => '',
68 );
69 }
70
71 /**
72 * Front-end display of the widget.
73 *
74 * @html-template-var array $instance
75 * @html-template-var string|null $flickr_home
76 * @html-template-var string $photos';
77 *
78 * @param array $args Widget arguments.
79 * @param array $instance Saved values from database.
80 */
81 public function widget( $args, $instance ) {
82 $instance = wp_parse_args( $instance, $this->defaults() );
83
84 // Enqueue front end assets.
85 $this->enqueue_style();
86
87 if ( ! empty( $instance['flickr_rss_url'] ) ) {
88 /*
89 * Parse the URL, and rebuild a URL that's sure to display images.
90 * Some Flickr Feeds do not display images by default.
91 */
92 $flickr_parameters = wp_parse_url( htmlspecialchars_decode( $instance['flickr_rss_url'], ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 ) );
93
94 // Is it a Flickr Feed.
95 if (
96 ! empty( $flickr_parameters['host'] )
97 && ! empty( $flickr_parameters['query'] )
98 && str_contains( $flickr_parameters['host'], 'flickr' )
99 ) {
100 parse_str( $flickr_parameters['query'], $vars );
101
102 // Do we have an ID in the feed? Let's continue.
103 if ( isset( $vars['id'] ) ) {
104
105 // Flickr Feeds can be used for groups or for individuals.
106 if (
107 ! empty( $flickr_parameters['path'] )
108 && str_contains( $flickr_parameters['path'], 'groups' )
109 ) {
110 $feed_url = 'https://api.flickr.com/services/feeds/groups_pool.gne';
111 } else {
112 $feed_url = 'https://api.flickr.com/services/feeds/photos_public.gne';
113 }
114
115 // Build our new RSS feed.
116 $rss_url = sprintf(
117 '%1$s?id=%2$s&format=rss_200_enc',
118 esc_url( $feed_url ),
119 esc_attr( $vars['id'] )
120 );
121 }
122 }
123 }
124
125 // Still no RSS feed URL? Get a default feed from Flickr to grab interesting photos.
126 if ( empty( $rss_url ) ) {
127 $rss_url = 'https://api.flickr.com/services/feeds/photos_interesting.gne?format=rss_200';
128 }
129
130 $rss = fetch_feed( $rss_url );
131
132 $photos = '';
133 $flickr_home = null; // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- Used in flickr/widget.php template file.
134 if ( ! is_wp_error( $rss ) ) {
135 foreach ( $rss->get_items( 0, $instance['items'] ) as $photo ) {
136 switch ( $instance['flickr_image_size'] ) {
137 case 'thumbnail':
138 $src = $photo->get_enclosure()->get_thumbnail();
139 break;
140 case 'small':
141 $src = preg_match( '/src="(.*?)"/i', $photo->get_description(), $p );
142 $src = $p[1];
143 break;
144 case 'large':
145 $src = $photo->get_enclosure()->get_link();
146 break;
147 default:
148 $src = '';
149 break;
150 }
151
152 $photos .= '<a href="' . esc_url( $photo->get_permalink(), array( 'http', 'https' ) ) . '" ';
153 if ( $instance['target'] ) {
154 $photos .= 'target="_blank" rel="noopener noreferrer" ';
155 }
156 $photos .= '><img src="' . esc_url( $src, array( 'http', 'https' ) ) . '" ';
157 $photos .= 'alt="' . esc_attr( $photo->get_title() ) . '" ';
158 $photos .= 'title="' . esc_attr( $photo->get_title() ) . '" ';
159 $photos .= ' /></a>';
160 }
161 if ( ! empty( $photos ) ) {
162 $photos = apply_filters( 'jetpack_image_cdn_content', $photos );
163 }
164
165 $flickr_home = $rss->get_link(); // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- Used in flickr/widget.php template file.
166 }
167
168 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
169 if ( empty( $photos ) ) {
170 if ( current_user_can( 'edit_theme_options' ) ) {
171 printf(
172 '<p>%1$s<br />%2$s</p>',
173 esc_html__( 'There are no photos to display. Make sure your Flickr feed URL is correct, and that your pictures are publicly accessible.', 'jetpack' ),
174 esc_html__( '(Only admins can see this message)', 'jetpack' )
175 );
176 }
177 } else {
178 echo $args['before_title'] . $instance['title'] . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
179 require __DIR__ . '/flickr/widget.php';
180 }
181 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
182 /** This action is already documented in modules/widgets/gravatar-profile.php */
183 do_action( 'jetpack_stats_extra', 'widget_view', 'flickr' );
184 }
185
186 /**
187 * Back-end widget form.
188 *
189 * @html-template-var array $instance
190 *
191 * @param array $instance Previously saved values from database.
192 * @return string|void
193 */
194 public function form( $instance ) {
195 $instance = wp_parse_args( $instance, $this->defaults() );
196 require __DIR__ . '/flickr/form.php';
197 }
198
199 /**
200 * Sanitize widget form values as they are saved.
201 *
202 * @param array $new_instance Values just sent to be saved.
203 * @param array $old_instance Previously saved values from database.
204 * @return array Updated safe values to be saved.
205 */
206 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
207 $instance = array();
208
209 if ( isset( $new_instance['title'] ) ) {
210 $instance['title'] = wp_kses( $new_instance['title'], array() );
211 }
212
213 if ( isset( $new_instance['items'] ) ) {
214 $instance['items'] = (int) $new_instance['items'];
215 }
216
217 if ( isset( $new_instance['target'] ) ) {
218 $instance['target'] = (bool) $new_instance['target'];
219 }
220
221 if (
222 isset( $new_instance['flickr_image_size'] ) &&
223 in_array( $new_instance['flickr_image_size'], array( 'thumbnail', 'small', 'large' ), true )
224 ) {
225 $instance['flickr_image_size'] = $new_instance['flickr_image_size'];
226 } else {
227 $instance['flickr_image_size'] = 'thumbnail';
228 }
229
230 if ( isset( $new_instance['flickr_rss_url'] ) ) {
231 $instance['flickr_rss_url'] = esc_url( $new_instance['flickr_rss_url'], array( 'http', 'https' ) );
232
233 if ( strlen( $instance['flickr_rss_url'] ) < 10 ) {
234 $instance['flickr_rss_url'] = '';
235 }
236 }
237
238 return $instance;
239 }
240 }
241
242 /**
243 * Register Jetpack_Flickr_Widget widget.
244 */
245 function jetpack_register_flickr_widget() {
246 $transient = 'jetpack_flickr_widget::is_active';
247 $has_widget = get_transient( $transient );
248
249 if ( false === $has_widget ) {
250 $is_active_widget = is_active_widget( false, false, 'flickr', false );
251 $has_widget = (int) ! empty( $is_active_widget );
252 set_transient( $transient, $has_widget, 1 * HOUR_IN_SECONDS );
253 }
254
255 // [DEPRECATION]: Only register widget if active widget exists already
256 if ( $has_widget ) {
257 register_widget( 'Jetpack_Flickr_Widget' );
258 }
259 }
260 add_action( 'widgets_init', 'jetpack_register_flickr_widget' );
261 }
262