PluginProbe
Powerkit – Supercharge your WordPress Site / 2.9.0
Powerkit – Supercharge your WordPress Site v2.9.0
3.1.1 3.1.0 3.0.9 3.0.8 trunk 2.2.6 2.2.7 2.2.8 2.2.9 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 All 87 releases
powerkit / extensions / connect / class-powerkit-connect.php

class-powerkit-connect.php in Powerkit – Supercharge your WordPress Site 2.9.0, at extensions/connect/class-powerkit-connect.php

500 lines 17.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Connect
4 *
5 * @package Powerkit
6 * @subpackage Extensions
7 */
8
9 if ( class_exists( 'Powerkit_Module' ) ) {
10 /**
11 * Init module
12 */
13 class Powerkit_Connect extends Powerkit_Module {
14
15 /**
16 * Register module
17 */
18 public function register() {
19 $this->name = 'connect';
20 $this->slug = 'connect';
21 $this->type = 'extension';
22 $this->category = 'basic';
23 $this->public = false;
24 $this->enabled = true;
25 }
26
27 /**
28 * Initialize module
29 */
30 public function initialize() {
31 add_action( 'admin_menu', array( $this, 'register_options_page' ) );
32 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
33 add_action( 'customize_controls_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
34 add_action( 'wp_ajax_powerkit_reset_cache', array( $this, 'ajax_reset_cache' ) );
35 add_action( 'wp_ajax_nopriv_powerkit_reset_cache', array( $this, 'ajax_reset_cache' ) );
36 }
37
38 /**
39 * Register admin page
40 *
41 * @since 1.0.0
42 */
43 public function register_options_page() {
44 add_options_page( esc_html__( 'Connect', 'powerkit' ), esc_html__( 'Connect', 'powerkit' ), 'manage_options', powerkit_get_page_slug( $this->slug ), array( $this, 'build_options_page' ) );
45 }
46
47 /**
48 * Build admin page
49 *
50 * @since 1.0.0
51 */
52 public function build_options_page() {
53 if ( ! current_user_can( 'manage_options' ) ) {
54 wp_die( esc_html__( 'You do not have sufficient rights to view this page.', 'powerkit' ) );
55 }
56 $this->logout_account();
57 $this->save_options_page();
58 ?>
59
60 <div class="wrap">
61 <h1><?php esc_html_e( 'Connect', 'powerkit' ); ?></h1>
62
63 <div class="settings">
64 <?php $connect_list = apply_filters( 'powerkit_register_connect_list', array() ); ?>
65
66 <?php if ( $connect_list ) : ?>
67 <div class="tabs">
68 <?php
69 $connect_list = array_values( $connect_list );
70
71 $tab = sanitize_title( isset( $_GET['tab'] ) ? $_GET['tab'] : $connect_list[0]['id'] ); // Input var ok; sanitization ok.
72 ?>
73
74 <nav class="nav-tab-wrapper woo-nav-tab-wrapper">
75 <?php
76 foreach ( $connect_list as $item ) {
77 $class = ( $item['id'] === $tab ) ? 'nav-tab-active' : ''; // Input var ok.
78 printf(
79 '<a class="nav-tab %4$s" href="%1$s&tab=%2$s">%3$s</a>',
80 esc_url( powerkit_get_page_url( $this->slug ) ),
81 esc_attr( $item['id'] ),
82 esc_html( $item['name'] ),
83 esc_attr( $class )
84 );
85 }
86 ?>
87 </nav>
88
89 <?php
90 foreach ( $connect_list as $item ) {
91 // Instagram tab.
92 if ( 'instagram' === $item['id'] && $item['id'] === $tab ) { // Input var ok.
93 ?>
94 <div id="tab-<?php echo esc_attr( $item['id'] ); ?>" class="tab-wrap">
95 <?php $this->instagram_custom_tab( $tab ); ?>
96 </div>
97 <?php
98 // Facebook tab.
99 } elseif ( 'facebook' === $item['id'] && $item['id'] === $tab ) { // Input var ok.
100 ?>
101 <div id="tab-<?php echo esc_attr( $item['id'] ); ?>" class="tab-wrap">
102 <?php $this->facebook_custom_tab( $tab ); ?>
103 </div>
104 <?php
105 // Twitter tab.
106 } elseif ( 'twitter' === $item['id'] && $item['id'] === $tab ) { // Input var ok.
107 ?>
108 <div id="tab-<?php echo esc_attr( $item['id'] ); ?>" class="tab-wrap">
109 <?php $this->twitter_custom_tab( $tab ); ?>
110 </div>
111 <?php
112 } elseif ( $item['id'] === $tab ) {
113 ?>
114 <form class="basic" method="post">
115 <div id="tab-<?php echo esc_attr( $item['id'] ); ?>" class="tab-wrap">
116 <!-- Render Fields -->
117 <?php
118 if ( isset( $item['fields'] ) && $item['fields'] ) {
119 ?>
120 <table class="form-table">
121 <tbody>
122 <?php
123 foreach ( $item['fields'] as $field ) {
124 ?>
125 <tr>
126 <th scope="row"><label class="title" for="<?php echo esc_attr( $field['key'] ); ?>"><?php echo esc_html( $field['caption'] ); ?></label></th>
127 <td>
128 <input class="regular-text" id="<?php echo esc_attr( $field['key'] ); ?>" name="<?php echo esc_attr( $field['key'] ); ?>" type="text" value="<?php echo esc_attr( powerkit_connect( $field['key'] ) ); ?>" />
129
130 <?php if ( isset( $field['instruction'] ) ) { ?>
131 <p><?php echo wp_kses_post( $field['instruction'] ); ?></p>
132 <?php } ?>
133 </td>
134 </tr>
135 <?php
136 }
137 ?>
138 </tbody>
139 </table>
140 <?php
141 }
142 ?>
143 </div>
144
145 <?php wp_nonce_field(); ?>
146
147 <p class="submit">
148 <input class="button button-primary" name="save_settings" type="submit" value="<?php esc_html_e( 'Save changes', 'powerkit' ); ?>" />
149 </p>
150 </form>
151 <?php
152 }
153 }
154 ?>
155 </div>
156 <?php else : ?>
157 <p class="submit">
158 <?php esc_html_e( 'The list of social network settings is empty!!!', 'powerkit' ); ?>
159 </p>
160 <?php endif; ?>
161 </div>
162 </div>
163
164 <style>
165 .tab-badge-success {
166 display: inline-block;
167 border: 1px solid #46b450;
168 padding: 0.5rem 0.75rem;
169 color: #32373c;
170 font-weight: 600;
171 border-radius: 5px;
172 margin-top: 1rem;
173 }
174 </style>
175 <?php
176 }
177
178 /**
179 * Instagram custom tab
180 *
181 * @param string $tab The name of tab.
182 */
183 public function instagram_custom_tab( $tab ) {
184 $this->msg_disabled_api();
185
186 require_once plugin_dir_path( __FILE__ ) . 'tab-instagram.php';
187 }
188
189 /**
190 * Facebook custom tab
191 *
192 * @param string $tab The name of tab.
193 */
194 public function facebook_custom_tab( $tab ) {
195 $this->msg_disabled_api();
196
197 require_once plugin_dir_path( __FILE__ ) . 'tab-facebook.php';
198 }
199
200 /**
201 * Twitter custom tab
202 *
203 * @param string $tab The name of tab.
204 */
205 public function twitter_custom_tab( $tab ) {
206 $this->msg_disabled_api();
207
208 require_once plugin_dir_path( __FILE__ ) . 'tab-twitter.php';
209 }
210
211 /**
212 * Output message for disabled api
213 */
214 public function msg_disabled_api() {
215 ?>
216 <br>
217 <div class="notice notice-error inline">
218 <p>
219 <?php
220 /* translators: %s: link connect */
221 echo sprintf( 'Automatic sync has been disabled on July 16, 2023. Please <a target="_blank" href="%s">read more</a> for details.', 'https://codesupply.co/social-integrations/' );
222 ?>
223 </p>
224 </div>
225 <?php
226 }
227
228 /**
229 * Settings save
230 */
231 public function save_options_page() {
232 if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'] ) ) { // Input var ok; sanitization ok.
233 return;
234 }
235
236 if ( isset( $_POST['save_settings'] ) ) { // Input var ok.
237 // Save social params.
238 $connect_list = apply_filters( 'powerkit_register_connect_list', array() );
239 foreach ( $connect_list as $item ) {
240 $id = $item['id'];
241 if ( isset( $item['fields'] ) && $item['fields'] ) {
242 foreach ( $item['fields'] as $field ) {
243 if ( isset( $_POST[ $field['key'] ] ) ) { // Input var ok.
244 update_option( $field['key'], sanitize_text_field( wp_unslash( $_POST[ $field['key'] ] ) ) ); // Input var ok.
245 }
246 }
247 }
248 }
249
250 self::reset_cache();
251
252 printf( '<div id="message" class="updated fade"><p><strong>%s</strong></p></div>', esc_html__( 'The settings are saved.', 'powerkit' ) );
253 }
254
255 if ( isset( $_POST['save_instagram_settings'] ) ) { // Input var ok.
256 if ( isset( $_POST['powerkit_connect_instagram_username'] ) ) { // Input var ok.
257 update_option( 'powerkit_connect_instagram_username', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_instagram_username'] ) ) ); // Input var ok.
258 }
259 if ( isset( $_POST['powerkit_connect_instagram_custom_name'] ) ) { // Input var ok.
260 update_option( 'powerkit_connect_instagram_custom_name', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_instagram_custom_name'] ) ) ); // Input var ok.
261 }
262 if ( isset( $_POST['powerkit_connect_instagram_following'] ) ) { // Input var ok.
263 update_option( 'powerkit_connect_instagram_following', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_instagram_following'] ) ) ); // Input var ok.
264 }
265 if ( isset( $_POST['powerkit_connect_instagram_custom_followers'] ) ) { // Input var ok.
266 update_option( 'powerkit_connect_instagram_custom_followers', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_instagram_custom_followers'] ) ) ); // Input var ok.
267 }
268 if ( isset( $_POST['powerkit_connect_instagram_custom_avatar'] ) ) { // Input var ok.
269 update_option( 'powerkit_connect_instagram_custom_avatar', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_instagram_custom_avatar'] ) ) ); // Input var ok.
270 }
271 if ( isset( $_POST['powerkit_connect_instagram_custom_avatar_2x'] ) ) { // Input var ok.
272 update_option( 'powerkit_connect_instagram_custom_avatar_2x', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_instagram_custom_avatar_2x'] ) ) ); // Input var ok.
273 }
274 if ( isset( $_POST['powerkit_connect_instagram_feed'] ) ) { // Input var ok.
275 update_option( 'powerkit_connect_instagram_feed', $_POST['powerkit_connect_instagram_feed'] ); // Input var ok.
276 } else {
277 delete_option( 'powerkit_connect_instagram_feed' );
278 }
279
280 printf( '<div id="message" class="updated fade"><p><strong>%s</strong></p></div>', esc_html__( 'The settings are saved.', 'powerkit' ) );
281 }
282
283 if ( isset( $_POST['save_facebook_settings'] ) ) { // Input var ok.
284 if ( isset( $_POST['powerkit_connect_facebook_app_id'] ) ) { // Input var ok.
285 update_option( 'powerkit_connect_facebook_app_id', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_facebook_app_id'] ) ) ); // Input var ok.
286 }
287
288 printf( '<div id="message" class="updated fade"><p><strong>%s</strong></p></div>', esc_html__( 'The settings are saved.', 'powerkit' ) );
289 }
290
291 if ( isset( $_POST['save_twitter_settings'] ) ) { // Input var ok.
292 if ( isset( $_POST['powerkit_connect_twitter_username'] ) ) { // Input var ok.
293 update_option( 'powerkit_connect_twitter_username', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_twitter_username'] ) ) ); // Input var ok.
294 }
295 if ( isset( $_POST['powerkit_connect_twitter_custom_name'] ) ) { // Input var ok.
296 update_option( 'powerkit_connect_twitter_custom_name', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_twitter_custom_name'] ) ) ); // Input var ok.
297 }
298 if ( isset( $_POST['powerkit_connect_twitter_following'] ) ) { // Input var ok.
299 update_option( 'powerkit_connect_twitter_following', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_twitter_following'] ) ) ); // Input var ok.
300 }
301 if ( isset( $_POST['powerkit_connect_twitter_custom_followers'] ) ) { // Input var ok.
302 update_option( 'powerkit_connect_twitter_custom_followers', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_twitter_custom_followers'] ) ) ); // Input var ok.
303 }
304 if ( isset( $_POST['powerkit_connect_twitter_custom_avatar'] ) ) { // Input var ok.
305 update_option( 'powerkit_connect_twitter_custom_avatar', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_twitter_custom_avatar'] ) ) ); // Input var ok.
306 }
307 if ( isset( $_POST['powerkit_connect_twitter_custom_avatar_2x'] ) ) { // Input var ok.
308 update_option( 'powerkit_connect_twitter_custom_avatar_2x', sanitize_text_field( wp_unslash( $_POST['powerkit_connect_twitter_custom_avatar_2x'] ) ) ); // Input var ok.
309 }
310 if ( isset( $_POST['powerkit_connect_twitter_feed'] ) ) { // Input var ok.
311 update_option( 'powerkit_connect_twitter_feed', $_POST['powerkit_connect_twitter_feed'] ); // Input var ok.
312 } else {
313 delete_option( 'powerkit_connect_twitter_feed' );
314 }
315
316 printf( '<div id="message" class="updated fade"><p><strong>%s</strong></p></div>', esc_html__( 'The settings are saved.', 'powerkit' ) );
317 }
318 }
319
320 /**
321 * Logout account
322 */
323 public function logout_account() {
324 if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'] ) ) { // Input var ok; sanitization ok.
325 return;
326 }
327
328 if ( isset( $_POST['logout_account'] ) ) { // Input var ok.
329
330 // Logout Instagram.
331 if ( isset( $_POST['logout_account_type'] ) && 'instagram' === $_POST['logout_account_type'] ) {
332 delete_option( 'powerkit_connect_instagram_app_type' );
333 delete_option( 'powerkit_connect_instagram_app_access_token' );
334 delete_option( 'powerkit_connect_instagram_app_user_id' );
335 delete_option( 'powerkit_connect_instagram_app_username' );
336 delete_option( 'powerkit_connect_instagram_app_refresh_time' );
337 }
338
339 // Logout Facebook.
340 if ( isset( $_POST['logout_account_type'] ) && 'facebook' === $_POST['logout_account_type'] ) {
341 delete_option( 'powerkit_connect_facebook_app_access_token' );
342 delete_option( 'powerkit_connect_facebook_app_accounts' );
343 }
344
345 // Logout Facebook.
346 if ( isset( $_POST['logout_account_type'] ) && 'twitter' === $_POST['logout_account_type'] ) {
347 delete_option( 'powerkit_connect_twitter_app_consumer_key' );
348 delete_option( 'powerkit_connect_twitter_app_consumer_secret' );
349 delete_option( 'powerkit_connect_twitter_app_user_id' );
350 delete_option( 'powerkit_connect_twitter_app_screen_name' );
351 delete_option( 'powerkit_connect_twitter_app_oauth_token' );
352 delete_option( 'powerkit_connect_twitter_app_oauth_token_secret' );
353 }
354
355 if ( isset( $_POST['logout_account_type'] ) ) {
356 $this->location_reset_cache( $_POST['logout_account_type'] );
357 }
358
359 printf( '<div id="message" class="updated fade"><p><strong>%s</strong></p></div>', esc_html__( 'Account disabled successfully.', 'powerkit' ) );
360 }
361 }
362
363 /**
364 * Tab reset cache
365 *
366 * @param string $slug Slug of tab.
367 */
368 public function location_reset_cache( $slug ) {
369
370 // Base.
371 $list = array(
372 'powerkit_social_follow',
373 'powerkit_social_links_counter',
374 );
375
376 // Instagram.
377 if ( 'instagram' === $slug ) {
378 $list = array_merge(
379 $list,
380 array(
381 'powerkit_instagram_data',
382 'powerkit_instagram_recent',
383 )
384 );
385
386 }
387
388 // Twitter.
389 if ( 'twitter' === $slug ) {
390 $list = array_merge(
391 $list,
392 array(
393 'powerkit_twitter_data',
394 'powerkit_twitter_block_cache',
395 'powerkit_twitter_shortcode_cache',
396 'powerkit_twitter_widget_cache',
397 )
398 );
399 }
400
401 self::reset_cache( $list );
402 }
403
404 /**
405 * Ajax Reset cache
406 */
407 public function ajax_reset_cache() {
408 powerkit_uuid_hash();
409
410 // Check wpnonce.
411 if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'] ) ) { // Input var ok; sanitization ok.
412 return;
413 }
414
415 $list = apply_filters( 'powerkit_ajax_reset_cache', array() );
416
417 if ( ! isset( $_REQUEST['page'] ) ) { // Input var ok.
418 return false;
419 }
420
421 $page = sanitize_key( $_REQUEST['page'] ); // Input var ok; sanitization ok.
422
423 if ( ! isset( $list[ $page ] ) ) {
424 return false;
425 }
426
427 self::reset_cache( $list[ $page ] );
428
429 die();
430 }
431
432 /**
433 * Reset cache
434 *
435 * @param array $list Reset list.
436 */
437 public static function reset_cache( $list = false ) {
438 if ( is_array( $list ) ) {
439
440 $list = $list;
441
442 } elseif ( is_string( $list ) && $list ) {
443
444 $list = explode( ' ', $list );
445
446 } else {
447 $list = apply_filters( 'powerkit_reset_cache', array() );
448
449 $puck = array();
450
451 foreach ( $list as $item ) {
452 if ( is_array( $item ) ) {
453 $puck = array_merge( $puck, $item );
454 } elseif ( is_string( $item ) ) {
455 $puck = array_merge( $puck, explode( ' ', $item ) );
456 }
457 }
458
459 $list = $puck;
460 }
461
462 if ( $list ) {
463 global $wpdb;
464
465 foreach ( $list as $option_name ) {
466 $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->options WHERE option_name LIKE '%%%s%%'", $option_name ) ); // db call ok; no-cache ok.
467 $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key LIKE '%%%s%%'", $option_name ) ); // db call ok; no-cache ok.
468 }
469
470 printf( '<div id="message" class="updated fade"><p><strong>%s</strong></p></div>', esc_html__( 'Cache purged.', 'powerkit' ) );
471 }
472 }
473
474 /**
475 * Register the stylesheets and JavaScript for the admin area.
476 *
477 * @param string $page Current page.
478 */
479 public function enqueue_scripts( $page ) {
480 if ( is_customize_preview() || 'toplevel_page_powerkit_manager' === $page || 'settings_page_powerkit_connect' === $page ) {
481
482 wp_enqueue_script( 'jquery-ui-sortable' );
483
484 wp_enqueue_style( 'admin-powerkit-connect', plugin_dir_url( __FILE__ ) . 'css/admin-powerkit-connect.css', array(), powerkit_get_setting( 'version' ), false );
485 wp_enqueue_script( 'admin-powerkit-connect', plugin_dir_url( __FILE__ ) . 'js/admin-powerkit-connect.js', array( 'jquery' ), powerkit_get_setting( 'version' ), false );
486
487 wp_localize_script(
488 'admin-powerkit-connect',
489 'pk_connect',
490 array(
491 'ajax_url' => admin_url( 'admin-ajax.php' ),
492 )
493 );
494 }
495 }
496 }
497
498 new Powerkit_Connect();
499 }
500