| 1 |
<?php |
| 2 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly |
| 3 |
|
| 4 |
function mbt_goodreads_init() { |
| 5 |
add_action('mbt_integrate_settings_render', 'mbt_goodreads_settings_render', 9); |
| 6 |
add_action('mbt_settings_save', 'mbt_goodreads_settings_save'); |
| 7 |
add_action('wp_ajax_mbt_goodreads_developer_key_refresh', 'mbt_goodreads_developer_key_refresh_ajax'); |
| 8 |
add_filter('mbt_reviews_types', 'mbt_add_goodreads_reviews_type'); |
| 9 |
} |
| 10 |
add_action('mbt_init', 'mbt_goodreads_init'); |
| 11 |
|
| 12 |
function mbt_add_goodreads_reviews_type($reviews) { |
| 13 |
$dev_key = mbt_get_setting('goodreads_developer_key'); |
| 14 |
$disabled = empty($dev_key) ? '<a href="'.admin_url('admin.php?page=mbt_settings&mbt_current_tab=5').'">'.__('You must input your GoodReads Developer Key', 'mybooktable').'</a>' : ''; |
| 15 |
$reviews['goodreads'] = array( |
| 16 |
'name' => 'GoodReads Reviews', |
| 17 |
'callback' => 'mbt_get_goodreads_reviews', |
| 18 |
'book-check' => 'mbt_check_book_goodreads_reviews', |
| 19 |
'disabled' => $disabled, |
| 20 |
); |
| 21 |
return $reviews; |
| 22 |
} |
| 23 |
|
| 24 |
function mbt_goodreads_settings_save() { |
| 25 |
if(!isset($_REQUEST['mbt_goodreads_nonce']) || !wp_verify_nonce(sanitize_key($_REQUEST['mbt_goodreads_nonce']), 'mbt_goodreads_nonce')) { return; } |
| 26 |
if(isset($_REQUEST['mbt_goodreads_developer_key'])) { |
| 27 |
mbt_update_setting('goodreads_developer_key',sanitize_text_field(wp_unslash($_REQUEST['mbt_goodreads_developer_key']))); |
| 28 |
} |
| 29 |
} |
| 30 |
|
| 31 |
if(!function_exists('mbt_goodreads_developer_key_refresh_ajax')) { |
| 32 |
function mbt_goodreads_developer_key_refresh_ajax() { |
| 33 |
if(!isset($_REQUEST['mbt_nonce']) || !wp_verify_nonce(sanitize_key($_REQUEST['mbt_nonce']), 'mbt-ajax-nonce')) { die(); } |
| 34 |
if(!current_user_can('manage_options')) { die(); } |
| 35 |
if(isset($_REQUEST['data'])){ |
| 36 |
mbt_update_setting('goodreads_developer_key', sanitize_text_field(wp_unslash($_REQUEST['data']))); |
| 37 |
} |
| 38 |
echo(wp_kses_post(mbt_goodreads_developer_key_feedback())); |
| 39 |
die(); |
| 40 |
} |
| 41 |
} |
| 42 |
|
| 43 |
if(!function_exists('mbt_goodreads_developer_key_feedback')) { |
| 44 |
function mbt_goodreads_developer_key_feedback() { |
| 45 |
$output = ''; |
| 46 |
$goodreads_developer_key = mbt_get_setting("goodreads_developer_key"); |
| 47 |
if(!empty($goodreads_developer_key)) { |
| 48 |
$raw_response = wp_remote_get('https://www.goodreads.com/book/isbn?format=json&isbn=9780618640157&key='.$goodreads_developer_key); |
| 49 |
if(!is_wp_error($raw_response) and 200 == wp_remote_retrieve_response_code($raw_response)) { $response = json_decode(wp_remote_retrieve_body($raw_response)); } |
| 50 |
if(!empty($response->reviews_widget)) { |
| 51 |
$output .= '<span class="mbt_admin_message_success">'.__('Valid Developer Key', 'mybooktable').'</span>'; |
| 52 |
} else { |
| 53 |
$output .= '<span class="mbt_admin_message_failure">'.__('Invalid Developer Key', 'mybooktable').'</span>'; |
| 54 |
} |
| 55 |
} |
| 56 |
return $output; |
| 57 |
} |
| 58 |
} |
| 59 |
|
| 60 |
function mbt_goodreads_settings_render() { |
| 61 |
$mbt_goodreads_nonce = wp_nonce_field('mbt_goodreads_nonce', 'mbt_goodreads_nonce'); |
| 62 |
?> |
| 63 |
<table class="form-table"> |
| 64 |
<tbody> |
| 65 |
<tr> |
| 66 |
<th><label for="mbt_goodreads_developer_key"><?php esc_attr_e('GoodReads', 'mybooktable'); ?></label></th> |
| 67 |
<td> |
| 68 |
<?php echo wp_kses_post($mbt_goodreads_nonce);?> |
| 69 |
<div class="mbt_feedback_above mbt_feedback"></div> |
| 70 |
<label for="mbt_goodreads_developer_key" class="mbt-integrate-label">Developer Key:</label> |
| 71 |
<input type="text" id="mbt_goodreads_developer_key" name="mbt_goodreads_developer_key" value="<?php echo(esc_attr(mbt_get_setting('goodreads_developer_key'))); ?>" class="regular-text"> |
| 72 |
<div class="mbt_feedback_refresh mbt_feedback_refresh_initial" data-refresh-action="mbt_goodreads_developer_key_refresh" data-refresh-nonce="<?php echo(esc_attr(wp_create_nonce('mbt-ajax-nonce'))); ?>" data-element="mbt_goodreads_developer_key"></div> |
| 73 |
|
| 74 |
<p class="description"><?php |
| 75 |
/* translators: %s: link to tutorial */ |
| 76 |
echo sprintf(esc_html__('Insert your GoodReads Developer Key to %s on your book pages.', 'mybooktable'), |
| 77 |
'<a href="'.esc_url(admin_url('admin.php?page=mbt_settings&mbt_current_tab=3')).'" target="_blank">enable GoodReads reviews</a>'); ?> |
| 78 |
<p><a href="https://www.authormedia.com/how-to-add-goodreads-book-reviews-to-mybooktable/" target="_blank"> <?php esc_attr_e('Learn how to get a GoodReads Developer Key', 'mybooktable'); ?></a></p> |
| 79 |
</p> |
| 80 |
</td> |
| 81 |
</tr> |
| 82 |
</tbody> |
| 83 |
</table> |
| 84 |
<?php |
| 85 |
} |
| 86 |
|
| 87 |
function mbt_get_goodreads_reviews($post_id = 0) { |
| 88 |
if(empty($post_id)) { global $post; $post_id = $post->ID; } |
| 89 |
global $wp_version; |
| 90 |
|
| 91 |
$output = ''; |
| 92 |
$key = mbt_get_setting('goodreads_developer_key'); |
| 93 |
$isbn = get_post_meta($post_id, 'mbt_unique_id_isbn', true); |
| 94 |
if(!empty($key) and !empty($isbn)) { |
| 95 |
$query = apply_filters('mbt_goodreads_reviews_query', 'https://www.goodreads.com/book/isbn?format=json&isbn='.$isbn.'&key='.$key); |
| 96 |
$raw_response = wp_remote_get($query, array('timeout' => 3, 'user-agent' => 'WordPress/'.$wp_version.'; '.get_bloginfo('url'))); |
| 97 |
if(!is_wp_error($raw_response) and 200 == wp_remote_retrieve_response_code($raw_response)) { |
| 98 |
$response = json_decode(wp_remote_retrieve_body($raw_response)); |
| 99 |
$output = empty($response->reviews_widget) ? '' : $response->reviews_widget; |
| 100 |
$output = preg_replace("/<style>.*<\/style>/s", "", $output); |
| 101 |
$output = preg_replace("/http:\/\//s", "//", $output); |
| 102 |
} |
| 103 |
} |
| 104 |
return $output; |
| 105 |
} |
| 106 |
|
| 107 |
function mbt_check_book_goodreads_reviews($book_id) { |
| 108 |
$isbn = get_post_meta($book_id, 'mbt_unique_id_isbn', true); |
| 109 |
if(empty($isbn)) { |
| 110 |
return '<span class="mbt_admin_message_failure">'.__('No ISBN entered.', 'mybooktable').'</span>'; |
| 111 |
} else { |
| 112 |
$matches = array(); |
| 113 |
preg_match("/^([0-9][0-9\-]{8,}[0-9Xx])$/", $isbn, $matches); |
| 114 |
if(!empty($matches[1])) { |
| 115 |
$filtered_isbn = preg_replace("/[^0-9Xx]/", "", $isbn); |
| 116 |
return '<span class="mbt_admin_message_success">'.__('Valid ISBN', 'mybooktable').' <a href="https://www.isbnsearch.org/isbn/'.$filtered_isbn.'" target="_blank">'.__('(verify book)', 'mybooktable').'</a></span>'; |
| 117 |
} else { |
| 118 |
return '<span class="mbt_admin_message_failure">'.__('Invalid ISBN', 'mybooktable').'</span>'; |
| 119 |
} |
| 120 |
} |
| 121 |
} |
| 122 |
|