PluginProbe
Getwid – Gutenberg Blocks / 2.0.13
Getwid – Gutenberg Blocks v2.0.13
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 2.0.13, at includes/blocks/instagram.php

198 lines 6.0 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 \Getwid\Blocks\AbstractBlock {
8
9 protected static $blockName = 'getwid/instagram';
10
11 public function __construct() {
12
13 parent::__construct( self::$blockName );
14
15 add_action( 'wp_ajax_check_instagram_token', [ $this, 'check_instagram_token'] );
16
17 register_block_type(
18 'getwid/instagram',
19 array(
20 'attributes' => array(
21 'photoCount' => array(
22 'type' => 'number',
23 'default' => 6
24 ),
25 'gridColumns' => array(
26 'type' => 'number',
27 'default' => 3
28 ),
29 'spacing' => array(
30 'type' => 'string',
31 'default' => 'default'
32 ),
33 'align' => array(
34 'type' => 'string'
35 ),
36 'className' => array(
37 'type' => 'string'
38 ),
39 ),
40 'render_callback' => [ $this, 'render_callback' ]
41 )
42 );
43
44 getwid_maybe_add_option( 'getwid_instagram_token', '', true );
45
46 if ( $this->isEnabled() ) {
47 add_filter( 'getwid/blocks_style_css/dependencies', [ $this, 'block_frontend_styles' ] );
48 }
49 }
50
51 public function getLabel() {
52 return __('Instagram', 'getwid');
53 }
54
55 public function check_instagram_token() {
56
57 check_ajax_referer( 'getwid_nonce_check_instagram_token', 'nonce' );
58
59 $response = (bool) get_option( 'getwid_instagram_token', '' );
60
61 wp_send_json_success( $response );
62 }
63
64 public function block_frontend_styles($styles) {
65
66 return $styles;
67 }
68
69 public function block_frontend_assets() {
70
71 if ( is_admin() ) {
72 return;
73 }
74
75 if ( FALSE == getwid()->assetsOptimization()->load_assets_on_demand() ) {
76 return;
77 }
78
79 $rtl = is_rtl() ? '.rtl' : '';
80
81 wp_enqueue_style(
82 self::$blockName,
83 getwid_get_plugin_url( 'assets/blocks/instagram/style' . $rtl . '.css' ),
84 [],
85 getwid()->settings()->getVersion()
86 );
87
88 }
89
90 public function render_callback( $attributes ) {
91
92 $encryption = new StringEncryption();
93
94 //Get Access Token
95 $access_token = $encryption->decrypt( get_option( 'getwid_instagram_token', '' ) );
96
97 //If Empty Token
98 if ( empty($access_token) ) {
99 if ( current_user_can('manage_options') ) {
100 return '<p>' . sprintf(
101 //translators: %s is a link
102 __( 'Instagram Access Token is not set. <a href="%s">Connect Instagram Account</a>.', 'getwid' ),
103 esc_url( getwid()->settingsPage()->getTabUrl('general') ) ) . '</p>';
104 } else {
105 return '';
106 }
107 }
108
109 $instagram_media = get_transient( 'getwid_instagram_response_data' );
110
111 if ( false === $instagram_media ) {
112
113 $api_uri = 'https://graph.instagram.com/me/media?fields=id,media_type,media_url,permalink,caption,thumbnail_url&access_token=' . $access_token . '&limit=100';
114
115 //Get data from Instagram
116 $response = wp_remote_get(
117 $api_uri,
118 array( 'timeout' => 15 )
119 );
120
121 if ( is_wp_error( $response ) ) {
122 if ( current_user_can('manage_options') ){
123 return '<p>' . $response->get_error_message() . '</p>';
124 } else {
125 return '';
126 }
127 } else {
128 $instagram_media = json_decode( wp_remote_retrieve_body( $response ), false );
129
130 //JSON valid
131 if ( json_last_error() === JSON_ERROR_NONE ) {
132 if ( isset($instagram_media->data) ) {
133
134 //Cache response
135 $expiration = intval( get_option( 'getwid_instagram_cache_timeout', 30 ) );
136
137 set_transient( 'getwid_instagram_response_data', $instagram_media, $expiration * MINUTE_IN_SECONDS );
138
139 } else {
140 if ( current_user_can( 'manage_options' ) ) {
141 return '<p>' . $instagram_media->error->message . '</p>';
142 } else {
143 return '';
144 }
145 }
146 } else {
147 return __( 'Error in json_decode.', 'getwid' );
148 }
149 }
150 }
151
152 $class = $block_name = 'wp-block-getwid-instagram';
153
154 if ( isset( $attributes[ 'align' ] ) ) {
155 $class .= ' align' . $attributes[ 'align' ];
156 }
157
158 $wrapper_class = 'wp-block-getwid-instagram__wrapper';
159 $wrapper_class .= " has-" . $attributes[ 'gridColumns' ] . "-columns";
160
161 if ( isset( $attributes[ 'spacing' ] ) && $attributes[ 'spacing' ] != 'default' ) {
162 $class .= ' has-spacing-' . $attributes[ 'spacing' ];
163 }
164
165 if ( isset( $attributes[ 'className' ] ) ) {
166 $class .= ' ' . $attributes[ 'className' ];
167 }
168
169 ob_start();
170 ?><div class="<?php echo esc_attr( $class ); ?>">
171 <div class="<?php echo esc_attr( $wrapper_class );?>">
172 <?php
173 $counter = 1;
174 foreach ( $instagram_media->data as $key => $value ) {
175 if ( $counter <= $attributes[ 'photoCount' ] ) {
176 $extra_attr = array(
177 'block_name' => $block_name,
178 'post' => $value
179 );
180 getwid_get_template_part( 'instagram/post', $attributes, false, $extra_attr );
181 }
182 $counter ++;
183 } // end foreach
184 ?></div>
185 </div><?php
186
187 $result = ob_get_clean();
188
189 $this->block_frontend_assets();
190
191 return $result;
192 }
193 }
194
195 getwid()->blocksManager()->addBlock(
196 new \Getwid\Blocks\Instagram()
197 );
198