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