PluginProbe
Getwid – Gutenberg Blocks / 3.0.2
Getwid – Gutenberg Blocks v3.0.2
3.0.2 3.0.1 3.0.0 2.1.0 2.1.1 2.1.2 2.1.3 2.2.0 trunk 1.8.7 1.9.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9
getwid / includes / blocks / instagram.php

instagram.php in Getwid – Gutenberg Blocks 3.0.2, at includes/blocks/instagram.php

147 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Getwid\Blocks;
4
5 use Getwid\StringEncryption;
6
7 class Instagram extends AbstractBlock {
8
9 public function __construct() {
10
11 parent::__construct( 'getwid/instagram' );
12
13 add_action( 'wp_ajax_check_instagram_token', array( $this, 'check_instagram_token' ) );
14
15 register_block_type(
16 getwid_get_plugin_path( 'assets/blocks/instagram' ),
17 array(
18 'render_callback' => array( $this, 'render_callback' ),
19 )
20 );
21
22 getwid_maybe_add_option( 'getwid_instagram_token', '', true );
23 }
24
25 public function get_label() {
26 return __( 'Instagram', 'getwid' );
27 }
28
29 public function check_instagram_token() {
30
31 check_ajax_referer( 'getwid_nonce_check_instagram_token', 'nonce' );
32
33 $response = (bool) get_option( 'getwid_instagram_token', '' );
34
35 wp_send_json_success( $response );
36 }
37
38 public function render_callback( $attributes, $content ) {
39
40 $attributes = wp_parse_args(
41 $attributes,
42 array(
43 'photoCount' => 6,
44 'gridColumns' => 3,
45 'spacing' => 'default',
46 )
47 );
48 $encryption = new StringEncryption();
49
50 $access_token = $encryption->decrypt( get_option( 'getwid_instagram_token', '' ) );
51
52 if ( empty( $access_token ) ) {
53 if ( current_user_can( 'manage_options' ) ) {
54 return '<p>' . sprintf(
55 // translators: %s is a link.
56 __( 'Instagram Access Token is not set. <a href="%s">Connect Instagram Account</a>.', 'getwid' ),
57 esc_url( getwid()->settingsPage()->getTabUrl( 'general' ) )
58 ) . '</p>';
59 }
60
61 return '';
62 }
63
64 $instagram_media = get_transient( 'getwid_instagram_response_data' );
65
66 if ( false === $instagram_media ) {
67 $api_uri = 'https://graph.instagram.com/me/media?fields=id,media_type,media_url,permalink,caption,thumbnail_url&access_token=' . $access_token . '&limit=100';
68
69 $response = wp_remote_get(
70 $api_uri,
71 array( 'timeout' => 15 )
72 );
73
74 if ( is_wp_error( $response ) ) {
75 if ( current_user_can( 'manage_options' ) ) {
76 return '<p>' . esc_html( $response->get_error_message() ) . '</p>';
77 }
78
79 return '';
80 }
81
82 $instagram_media = json_decode( wp_remote_retrieve_body( $response ), false );
83
84 if ( JSON_ERROR_NONE === json_last_error() ) {
85 if ( isset( $instagram_media->data ) ) {
86 $expiration = intval( get_option( 'getwid_instagram_cache_timeout', 30 ) );
87
88 set_transient( 'getwid_instagram_response_data', $instagram_media, $expiration * MINUTE_IN_SECONDS );
89 } elseif ( current_user_can( 'manage_options' ) ) {
90 return '<p>' . esc_html( $instagram_media->error->message ) . '</p>';
91 } else {
92 return '';
93 }
94 } else {
95 return __( 'Error in json_decode.', 'getwid' );
96 }
97 }
98
99 $class = 'wp-block-getwid-instagram';
100 $block_name = 'wp-block-getwid-instagram';
101
102 if ( isset( $attributes['align'] ) ) {
103 $class .= ' align' . $attributes['align'];
104 }
105
106 $wrapper_class = 'wp-block-getwid-instagram__wrapper';
107 $wrapper_class .= ' has-' . $attributes['gridColumns'] . '-columns';
108
109 if ( isset( $attributes['spacing'] ) && 'default' !== $attributes['spacing'] ) {
110 $class .= ' has-spacing-' . $attributes['spacing'];
111 }
112
113 if ( isset( $attributes['className'] ) ) {
114 $class .= ' ' . $attributes['className'];
115 }
116
117 ob_start();
118 ?>
119 <div class="<?php echo esc_attr( $class ); ?>">
120 <div class="<?php echo esc_attr( $wrapper_class ); ?>">
121 <?php
122 $counter = 1;
123 foreach ( $instagram_media->data as $value ) {
124 if ( $counter <= $attributes['photoCount'] ) {
125 $extra_attr = array(
126 'block_name' => $block_name,
127 'post' => $value,
128 );
129 getwid_get_template_part( 'instagram/post', $attributes, false, $extra_attr );
130 }
131 ++$counter;
132 }
133 ?>
134 </div>
135 </div>
136 <?php
137
138 $result = ob_get_clean();
139
140 return $result;
141 }
142 }
143
144 getwid()->blocksManager()->addBlock(
145 new Instagram()
146 );
147