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