PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 2.5.2
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v2.5.2
3.4.3 3.4.2 3.4.1 3.4.0 3.3.9 3.3.8 3.3.7 3.3.6 3.3.5 3.3.4 3.3.3 3.3.2 3.3.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 2.3.0 2.3.1 All 196 releases
← All changes | includes/class-convertkit-settings.php +34 -287 3.3.52.5.2 View file →
@@ -44,8 +44,11 @@
44 44 } else {
45 45 $this->settings = array_merge( $this->get_defaults(), $settings );
46 46 }
47 47
48 + // Update Access Token when refreshed by the API class.
49 + add_action( 'convertkit_api_refresh_token', array( $this, 'update_credentials' ), 10, 2 );
50 +
48 51 }
49 52
50 53 /**
51 54 * Returns Plugin settings.
@@ -158,13 +161,10 @@
158 161 * @return bool
159 162 */
160 163 public function has_api_key_and_secret() {
161 164
162 - _deprecated_function( __FUNCTION__, '2.6.3', 'has_access_and_refresh_token()' );
165 + return $this->has_api_key() && $this->has_api_secret();
163 166
164 - // Use check for access and refresh token.
165 - return $this->has_access_and_refresh_token();
166 -
167 167 }
168 168
169 169 /**
170 170 * Returns the Access Token Plugin setting.
@@ -174,11 +174,8 @@
174 174 * @return string
175 175 */
176 176 public function get_access_token() {
177 177
178 - // Reload settings from options table, to ensure we have the latest tokens.
179 - $this->refresh_settings();
180 -
181 178 // Return Access Token from settings.
182 179 return $this->settings['access_token'];
183 180
184 181 }
@@ -204,11 +201,8 @@
204 201 * @return string
205 202 */
206 203 public function get_refresh_token() {
207 204
208 - // Reload settings from options table, to ensure we have the latest tokens.
209 - $this->refresh_settings();
210 -
211 205 // Return Refresh Token from settings.
212 206 return $this->settings['refresh_token'];
213 207
214 208 }
@@ -294,86 +288,23 @@
294 288
295 289 }
296 290
297 291 /**
298 - * Returns the Default Form Position Plugin setting.
299 - *
300 - * @since 2.5.8
301 - *
302 - * @param string $post_type Post Type.
303 - * @return string|int Default Form (default|form id)
304 - */
305 - public function get_default_form_position( $post_type ) {
306 -
307 - // Return after_content if this Post Type's position doesn't exist as a setting.
308 - if ( ! array_key_exists( $post_type . '_form_position', $this->settings ) ) {
309 - return 'after_content';
310 - }
311 -
312 - return $this->settings[ $post_type . '_form_position' ];
313 -
314 - }
315 -
316 - /**
317 - * Returns the Default Form Position Element Plugin setting.
318 - *
319 - * @since 2.6.1
320 - *
321 - * @param string $post_type Post Type.
322 - * @return string Element to insert form after
323 - */
324 - public function get_default_form_position_element( $post_type ) {
325 -
326 - // Return after_content if this Post Type's position doesn't exist as a setting.
327 - if ( ! array_key_exists( $post_type . '_form_position_element', $this->settings ) ) {
328 - return 'p';
329 - }
330 -
331 - return $this->settings[ $post_type . '_form_position_element' ];
332 -
333 - }
334 -
335 - /**
336 - * Returns the Default Form Position Index Plugin setting.
337 - *
338 - * @since 2.6.1
339 - *
340 - * @param string $post_type Post Type.
341 - * @return int Number of elements before inserting form
342 - */
343 - public function get_default_form_position_element_index( $post_type ) {
344 -
345 - // Return 1 if this Post Type's position index doesn't exist as a setting.
346 - if ( ! array_key_exists( $post_type . '_form_position_element_index', $this->settings ) ) {
347 - return 1;
348 - }
349 -
350 - return (int) $this->settings[ $post_type . '_form_position_element_index' ];
351 -
352 - }
353 -
354 - /**
355 292 * Returns the Global non-inline Form Plugin setting.
356 293 *
357 294 * @since 2.3.3
358 295 *
359 - * @return array
296 + * @return string|int Non-inline Form (blank string|form id)
360 297 */
361 298 public function get_non_inline_form() {
362 299
363 - // Return blank array if no inline form is specified.
300 + // Return blank string if no inline form is specified.
364 301 if ( ! $this->has_non_inline_form() ) {
365 - return array();
302 + return '';
366 303 }
367 304
368 - // 2.6.8 and earlier stored a single Form ID in a string.
369 - if ( is_string( $this->settings['non_inline_form'] ) ) {
370 - return array( (int) $this->settings['non_inline_form'] );
371 - }
305 + return $this->settings['non_inline_form'];
372 306
373 - // Cast values to integers and return.
374 - return array_map( 'intval', $this->settings['non_inline_form'] );
375 -
376 307 }
377 308
378 309 /**
379 310 * Returns whether the Global non-inline Form has been set in the Plugin settings.
@@ -383,128 +314,13 @@
383 314 * @return bool Global non-inline Form setting specified in Plugin Settings.
384 315 */
385 316 public function has_non_inline_form() {
386 317
387 - // 2.6.8 and earlier stored a single Form ID in a string.
388 - if ( is_string( $this->settings['non_inline_form'] ) ) {
389 - if ( ! empty( $this->settings['non_inline_form'] ) ) {
390 - return true;
391 - }
318 + return ( ! empty( $this->settings['non_inline_form'] ) ? true : false );
392 319
393 - return false;
394 - }
395 -
396 - return ( count( $this->settings['non_inline_form'] ) > 0 ? true : false );
397 -
398 320 }
399 321
400 322 /**
401 - * Returns whether the Global non-inline Form setting should honor the Page / Post
402 - * None setting.
403 - *
404 - * @since 2.7.3
405 - *
406 - * @return bool
407 - */
408 - public function non_inline_form_honor_none_setting() {
409 -
410 - return ( $this->settings['non_inline_form_honor_none_setting'] === 'on' ? true : false );
411 -
412 - }
413 -
414 - /**
415 - * Returns whether the Non-inline Form Limit per Session setting has been set in the Plugin settings.
416 - *
417 - * @since 3.0.0
418 - *
419 - * @return bool
420 - */
421 - public function non_inline_form_limit_per_session() {
422 -
423 - return ( $this->settings['non_inline_form_limit_per_session'] === 'on' ? true : false );
424 -
425 - }
426 -
427 - /**
428 - * Returns the reCAPTCHA Site Key Plugin setting.
429 - *
430 - * @since 3.0.0
431 - *
432 - * @return string
433 - */
434 - public function recaptcha_site_key() {
435 -
436 - return $this->settings['recaptcha_site_key'];
437 -
438 - }
439 -
440 - /**
441 - * Returns whether the reCAPTCHA Site Key has been set in the Plugin settings.
442 - *
443 - * @since 3.0.0
444 - *
445 - * @return bool
446 - */
447 - public function has_recaptcha_site_key() {
448 -
449 - return ! empty( $this->recaptcha_site_key() );
450 -
451 - }
452 -
453 - /**
454 - * Returns the reCAPTCHA Secret Key Plugin setting.
455 - *
456 - * @since 3.0.0
457 - *
458 - * @return string
459 - */
460 - public function recaptcha_secret_key() {
461 -
462 - return $this->settings['recaptcha_secret_key'];
463 -
464 - }
465 -
466 - /**
467 - * Returns whether the reCAPTCHA Secret Key has been set in the Plugin settings.
468 - *
469 - * @since 3.0.0
470 - *
471 - * @return bool
472 - */
473 - public function has_recaptcha_secret_key() {
474 -
475 - return ! empty( $this->recaptcha_secret_key() );
476 -
477 - }
478 -
479 - /**
480 - * Returns whether the reCAPTCH Site Key and Secret Key are defined
481 - * in the Plugin settings.
482 - *
483 - * @since 3.0.0
484 - *
485 - * @return bool
486 - */
487 - public function has_recaptcha_site_and_secret_keys() {
488 -
489 - return $this->has_recaptcha_site_key() && $this->has_recaptcha_secret_key();
490 -
491 - }
492 -
493 - /**
494 - * Returns the reCAPTCHA minimum score Plugin setting.
495 - *
496 - * @since 3.0.0
497 - *
498 - * @return float
499 - */
500 - public function recaptcha_minimum_score() {
501 -
502 - return (float) $this->settings['recaptcha_minimum_score'];
503 -
504 - }
505 -
506 - /**
507 323 * Returns whether debugging is enabled in the Plugin settings.
508 324 *
509 325 * @since 1.9.6
510 326 *
@@ -542,34 +358,8 @@
542 358
543 359 }
544 360
545 361 /**
546 - * Returns whether the Add New Landing Page / Member Content button is disabled in the Plugin settings.
547 - *
548 - * @since 3.2.0
549 - *
550 - * @return bool
551 - */
552 - public function add_new_button_disabled() {
553 -
554 - return ( $this->settings['no_add_new_button'] === 'on' ? true : false );
555 -
556 - }
557 -
558 - /**
559 - * Returns whether usage tracking is enabled in the Plugin settings.
560 - *
561 - * @since 3.0.4
562 - *
563 - * @return bool
564 - */
565 - public function usage_tracking() {
566 -
567 - return ( $this->settings['usage_tracking'] === 'on' ? true : false );
568 -
569 - }
570 -
571 - /**
572 362 * The default settings, used when the ConvertKit Plugin Settings haven't been saved
573 363 * e.g. on a new installation.
574 364 *
575 365 * @since 1.9.6
@@ -579,40 +369,26 @@
579 369 public function get_defaults() {
580 370
581 371 $defaults = array(
582 372 // OAuth.
583 - 'access_token' => '', // string.
584 - 'refresh_token' => '', // string.
585 - 'token_expires' => '', // integer.
373 + 'access_token' => '', // string.
374 + 'refresh_token' => '', // string.
375 + 'token_expires' => '', // integer.
586 376
587 377 // API Key. Retained if needed for backward compat.
588 - 'api_key' => '', // string.
589 - 'api_secret' => '', // string.
378 + 'api_key' => '', // string.
379 + 'api_secret' => '', // string.
590 380
591 - // Site Wide.
592 - 'non_inline_form' => array(), // array.
593 - 'non_inline_form_honor_none_setting' => '', // blank|on.
594 - 'non_inline_form_limit_per_session' => '', // blank|on.
595 -
596 - // reCAPTCHA.
597 - 'recaptcha_site_key' => '', // string.
598 - 'recaptcha_secret_key' => '', // string.
599 - 'recaptcha_minimum_score' => 0.5, // float.
600 -
601 - // Advanced.
602 - 'debug' => '', // blank|on.
603 - 'no_scripts' => '', // blank|on.
604 - 'no_css' => '', // blank|on.
605 - 'no_add_new_button' => '', // blank|on.
606 - 'usage_tracking' => '', // blank|on.
381 + // Settings.
382 + 'non_inline_form' => '', // string.
383 + 'debug' => '', // blank|on.
384 + 'no_scripts' => '', // blank|on.
385 + 'no_css' => '', // blank|on.
607 386 );
608 387
609 388 // Add Post Type Default Forms.
610 389 foreach ( convertkit_get_supported_post_types() as $post_type ) {
611 - $defaults[ $post_type . '_form' ] = 0; // -1, 0 or Form ID.
612 - $defaults[ $post_type . '_form_position' ] = 'after_content'; // before_content,after_content,before_after_content,element.
613 - $defaults[ $post_type . '_form_position_element' ] = 'p';
614 - $defaults[ $post_type . '_form_position_element_index' ] = 1;
390 + $defaults[ $post_type . '_form' ] = 0; // -1, 0 or Form ID.
615 391 }
616 392
617 393 /**
618 394 * The default settings, used when the ConvertKit Plugin Settings haven't been saved
@@ -628,39 +404,36 @@
628 404
629 405 }
630 406
631 407 /**
632 - * Saves the new access token, refresh token and its expiry, and schedules
633 - * a WordPress Cron event to refresh the token on expiry.
408 + * Saves the new access token, refresh token and its expiry when the API
409 + * class automatically refreshes an outdated access token.
634 410 *
635 - * @since 2.8.3
411 + * @since 2.5.0
636 412 *
637 - * @param array $result New Access Token, Refresh Token and Expiry.
413 + * @param array $result New Access Token, Refresh Token and Expiry.
414 + * @param string $client_id OAuth Client ID used for the Access and Refresh Tokens.
638 415 */
639 - public function update_credentials( $result ) {
416 + public function update_credentials( $result, $client_id ) {
640 417
641 - // Remove any existing persistent notice.
642 - WP_ConvertKit()->get_class( 'admin_notices' )->delete( 'authorization_failed' );
418 + // Don't save these credentials if they're not for this Client ID.
419 + // They're for another ConvertKit Plugin that uses OAuth.
420 + if ( $client_id !== CONVERTKIT_OAUTH_CLIENT_ID ) {
421 + return;
422 + }
643 423
644 424 $this->save(
645 425 array(
646 426 'access_token' => $result['access_token'],
647 427 'refresh_token' => $result['refresh_token'],
648 - 'token_expires' => ( time() + $result['expires_in'] ),
428 + 'token_expires' => ( $result['created_at'] + $result['expires_in'] ),
649 429 )
650 430 );
651 431
652 - // Clear any existing scheduled WordPress Cron event.
653 - wp_clear_scheduled_hook( 'convertkit_refresh_token' );
654 -
655 - // Schedule a WordPress Cron event to refresh the token on expiry.
656 - wp_schedule_single_event( ( time() + $result['expires_in'] ), 'convertkit_refresh_token' );
657 -
658 432 }
659 433
660 434 /**
661 - * Deletes any existing access token, refresh token and its expiry from the Plugin settings,
662 - * and clears any existing scheduled WordPress Cron event to refresh the token on expiry.
435 + * Deletes any existing access token, refresh token and its expiry from the Plugin settings.
663 436 *
664 437 * @since 2.5.0
665 438 */
666 439 public function delete_credentials() {
@@ -666,22 +439,14 @@
666 439 public function delete_credentials() {
667 440
668 441 $this->save(
669 442 array(
670 - // OAuth.
671 443 'access_token' => '',
672 444 'refresh_token' => '',
673 445 'token_expires' => '',
674 -
675 - // API Key.
676 - 'api_key' => '',
677 - 'api_secret' => '',
678 446 )
679 447 );
680 448
681 - // Clear any existing scheduled WordPress Cron event.
682 - wp_clear_scheduled_hook( 'convertkit_refresh_token' );
683 -
684 449 }
685 450
686 451 /**
687 452 * Saves the given array of settings to the WordPress options table.
@@ -694,27 +459,9 @@
694 459
695 460 update_option( self::SETTINGS_NAME, array_merge( $this->get(), $settings ) );
696 461
697 462 // Reload settings in class, to reflect changes.
698 - $this->refresh_settings();
699 -
700 - }
701 -
702 - /**
703 - * Reloads settings from the options table so this instance has the latest values.
704 - *
705 - * @since 3.1.1
706 - */
707 - private function refresh_settings() {
708 -
709 - $settings = get_option( self::SETTINGS_NAME );
710 -
711 - if ( ! $settings ) {
712 - $this->settings = $this->get_defaults();
713 - return;
714 - }
715 -
716 - $this->settings = array_merge( $this->get_defaults(), $settings );
463 + $this->settings = get_option( self::SETTINGS_NAME );
717 464
718 465 }
719 466
720 467 }