PluginProbe
MyBookTable Bookstore by Stormhill Media / trunk
MyBookTable Bookstore by Stormhill Media vtrunk
3.6.5 trunk
mybooktable / includes / extras / goodreads.php

goodreads.php in MyBookTable Bookstore by Stormhill Media trunk, at includes/extras/goodreads.php

122 lines 6.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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