PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.5.2
Jetpack – WP Security, Backup, Speed, & Growth v12.5.2
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 / instagram-gallery / instagram-gallery.php
jetpack / extensions / blocks / instagram-gallery Last commit date
instagram-gallery.php 3 years ago
instagram-gallery.php
153 lines
1 <?php
2 /**
3 * Instagram Gallery Block.
4 *
5 * @since 8.5.0
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\Instagram_Gallery;
11
12 use Automattic\Jetpack\Blocks;
13 use Jetpack;
14 use Jetpack_Gutenberg;
15 use Jetpack_Instagram_Gallery_Helper;
16
17 const FEATURE_NAME = 'instagram-gallery';
18 const BLOCK_NAME = 'jetpack/' . FEATURE_NAME;
19
20 /**
21 * Registers the block for use in Gutenberg
22 * This is done via an action so that we can disable
23 * registration if we need to.
24 */
25 function register_block() {
26 if ( ( defined( 'IS_WPCOM' ) && IS_WPCOM ) || Jetpack::is_connection_ready() ) {
27 Blocks::jetpack_register_block(
28 BLOCK_NAME,
29 array( 'render_callback' => __NAMESPACE__ . '\render_block' )
30 );
31 }
32 }
33 add_action( 'init', __NAMESPACE__ . '\register_block' );
34
35 /**
36 * Instagram Gallery block render callback.
37 *
38 * @param array $attributes Array containing the Instagram Gallery block attributes.
39 * @param string $content The Instagram Gallery block content.
40 *
41 * @return string
42 */
43 function render_block( $attributes, $content ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
44 if ( ! array_key_exists( 'accessToken', $attributes ) ) {
45 return '';
46 }
47
48 $access_token = $attributes['accessToken'];
49 $columns = get_instagram_gallery_attribute( 'columns', $attributes );
50 $count = get_instagram_gallery_attribute( 'count', $attributes );
51 $is_stacked_on_mobile = get_instagram_gallery_attribute( 'isStackedOnMobile', $attributes );
52 $spacing = get_instagram_gallery_attribute( 'spacing', $attributes );
53
54 $grid_classes = Blocks::classes(
55 FEATURE_NAME,
56 $attributes,
57 array(
58 'wp-block-jetpack-instagram-gallery__grid',
59 'wp-block-jetpack-instagram-gallery__grid-columns-' . $columns,
60 ( $is_stacked_on_mobile ? 'is-stacked-on-mobile' : null ),
61 )
62 );
63
64 $grid_style = sprintf(
65 'grid-gap: %1$spx; --latest-instagram-posts-spacing: %1$spx;',
66 $spacing
67 );
68
69 if ( ! class_exists( 'Jetpack_Instagram_Gallery_Helper' ) ) {
70 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/class-jetpack-instagram-gallery-helper.php';
71 }
72 $gallery = Jetpack_Instagram_Gallery_Helper::get_instagram_gallery( $access_token, $count );
73
74 if ( is_wp_error( $gallery ) || ! property_exists( $gallery, 'images' ) || 'ERROR' === $gallery->images ) {
75 if ( ! current_user_can( 'edit_post', get_the_ID() ) ) {
76 return '';
77 }
78
79 $connection_unavailable = is_wp_error( $gallery ) && 'instagram_connection_unavailable' === $gallery->get_error_code();
80
81 $error_message = $connection_unavailable
82 ? $gallery->get_error_message()
83 : esc_html__( 'An error occurred in the Latest Instagram Posts block. Please try again later.', 'jetpack' );
84
85 $message = $error_message
86 . '<br />'
87 . esc_html__( '(Only administrators and the post author will see this message.)', 'jetpack' );
88 return Jetpack_Gutenberg::notice( $message, 'error', Blocks::classes( FEATURE_NAME, $attributes ) );
89 }
90
91 if ( empty( $gallery->images ) ) {
92 return '';
93 }
94
95 $images = array_slice( $gallery->images, 0, $count );
96
97 Jetpack_Gutenberg::load_assets_as_required( FEATURE_NAME );
98
99 ob_start();
100 ?>
101 <?php if ( Blocks::is_amp_request() ) : ?>
102 <style>
103 .wp-block-jetpack-instagram-gallery__grid .wp-block-jetpack-instagram-gallery__grid-post amp-img img {
104 object-fit: cover;
105 }
106 </style>
107 <?php endif; ?>
108 <div class="<?php echo esc_attr( $grid_classes ); ?>" style="<?php echo esc_attr( $grid_style ); ?>">
109 <?php foreach ( $images as $image ) : ?>
110 <a
111 class="wp-block-jetpack-instagram-gallery__grid-post"
112 href="<?php echo esc_url( $image->link ); ?>"
113 rel="noopener noreferrer"
114 target="_blank"
115 >
116 <img
117 alt="<?php echo esc_attr( $image->title ? $image->title : $image->link ); ?>"
118 src="<?php echo esc_url( $image->url ); ?>"
119 loading="lazy"
120 />
121 </a>
122 <?php endforeach; ?>
123 </div>
124
125 <?php
126 return ob_get_clean();
127 }
128
129 /**
130 * Get Instagram Gallery block attribute.
131 *
132 * @param string $attribute String containing the attribute name to get.
133 * @param array $attributes Array containing the Instagram Gallery block attributes.
134 *
135 * @return mixed
136 */
137 function get_instagram_gallery_attribute( $attribute, $attributes ) {
138 if ( array_key_exists( $attribute, $attributes ) ) {
139 return $attributes[ $attribute ];
140 }
141
142 $default_attributes = array(
143 'columns' => 3,
144 'count' => 9,
145 'isStackedOnMobile' => true,
146 'spacing' => 10,
147 );
148
149 if ( array_key_exists( $attribute, $default_attributes ) ) {
150 return $default_attributes[ $attribute ];
151 }
152 }
153