MBT_VERSION,
'api_key' => '',
'api_key_status' => 0,
'api_key_message' => '',
'upgrade_active' => false,
'installed' => '',
'installed_examples' => false,
'booktable_page' => 0,
'compatibility_mode' => true,
'style_pack' => mbt_get_default_style_pack(),
'image_size' => 'medium',
'reviews_type' => 'none',
'enable_socialmedia_single_book' => false,
'enable_socialmedia_book_excerpt' => false,
'enable_seo' => true,
'buybutton_shadowbox' => 'none',
'enable_breadcrumbs' => true,
'show_series' => true,
'show_find_bookstore' => true,
'show_find_bookstore_buybuttons_shadowbox' => true,
'show_about_author' => true,
'book_button_size' => 'medium',
'listing_button_size' => 'medium',
'widget_button_size' => 'medium',
'posts_per_page' => 12,
'enable_default_affiliates' => false,
'google_api_key' => '',
'product_name' => __('Books', 'mybooktable'),
'product_slug' => _x('books', 'URL slug', 'mybooktable'),
'hide_domc_notice' => false,
'domc_notice_text' => __('Disclosure of Material Connection: Some of the links in the page above are "affiliate links." This means if you click on the link and purchase the item, I will receive an affiliate commission. I am disclosing this in accordance with the Federal Trade Commission\'s 16 CFR, Part 255: "Guides Concerning the Use of Endorsements and Testimonials in Advertising."', 'mybooktable'),
);
$mbt_settings = apply_filters("mbt_default_settings", $mbt_settings);
update_option("mbt_settings", apply_filters("mbt_update_settings", $mbt_settings));
}
function mbt_get_setting($name) {
global $mbt_settings;
return isset($mbt_settings[$name]) ? $mbt_settings[$name] : NULL;
}
function mbt_update_setting($name, $value) {
global $mbt_settings;
$mbt_settings[$name] = $value;
update_option("mbt_settings", apply_filters("mbt_update_settings", $mbt_settings));
}
/*---------------------------------------------------------*/
/* General */
/*---------------------------------------------------------*/
function mbt_save_taxonomy_image($taxonomy, $term, $url) {
$taxonomy_images = get_option($taxonomy."_meta");
if(empty($taxonomy_images)) { $taxonomy_images = array(); }
$taxonomy_images[$term] = $url;
update_option($taxonomy."_meta", $taxonomy_images);
}
function mbt_get_taxonomy_image($taxonomy, $term) {
$taxonomy_images = get_option($taxonomy."_meta");
if(empty($taxonomy_images)) { $taxonomy_images = array(); }
return isset($taxonomy_images[$term]) ? $taxonomy_images[$term] : '';
}
function mbt_save_author_priority($author_id, $priority) {
$author_priorities = mbt_get_setting("author_priorities");
if(empty($author_priorities)) { $author_priorities = array(); }
$author_priorities[$author_id] = $priority;
mbt_update_setting("author_priorities", $author_priorities);
}
function mbt_get_author_priority($author_id) {
$author_priorities = mbt_get_setting("author_priorities");
if(empty($author_priorities)) { $author_priorities = array(); }
return isset($author_priorities[$author_id]) ? $author_priorities[$author_id] : 50;
}
function mbt_get_posts_per_page() {
$posts_per_page = mbt_get_setting('posts_per_page');
return empty($posts_per_page) ? get_option('posts_per_page') : $posts_per_page;
}
function mbt_is_mbt_page() {
return (is_post_type_archive('mbt_book') or is_tax('mbt_author') or is_tax('mbt_genre') or is_tax('mbt_series') or is_tax('mbt_tag') or is_singular('mbt_book') or mbt_is_booktable_page() or mbt_is_archive_query());
}
function mbt_is_mbt_admin_page() {
global $pagenow;
$screen = get_current_screen();
return is_admin() and (
($pagenow == 'edit.php' and $screen->post_type == 'mbt_book') or
($pagenow == 'post.php' and $screen->post_type == 'mbt_book') or
($pagenow == 'post-new.php' and $screen->post_type == 'mbt_book') or
(($pagenow == 'edit-tags.php' or $pagenow == 'term.php') and $screen->taxonomy == 'mbt_author') or
(($pagenow == 'edit-tags.php' or $pagenow == 'term.php') and $screen->taxonomy == 'mbt_genre') or
(($pagenow == 'edit-tags.php' or $pagenow == 'term.php') and $screen->taxonomy == 'mbt_series') or
(($pagenow == 'edit-tags.php' or $pagenow == 'term.php') and $screen->taxonomy == 'mbt_tag') or
($pagenow == 'admin.php' and $screen->id == 'mybooktable_page_mbt_import') or
($pagenow == 'admin.php' and $screen->id == 'mybooktable_page_mbt_sort_books') or
($pagenow == 'admin.php' and $screen->id == 'toplevel_page_mbt_dashboard') or
($pagenow == 'admin.php' and $screen->id == 'mybooktable_page_mbt_settings') or
($pagenow == 'admin.php' and $screen->id == 'mybooktable_page_mbt_help')
);
}
function mbt_is_booktable_page() {
global $mbt_is_booktable_page;
return !empty($mbt_is_booktable_page);
}
function mbt_get_booktable_url() {
if(mbt_get_setting('booktable_page') <= 0 or !get_page(mbt_get_setting('booktable_page'))) {
$url = get_post_type_archive_link('mbt_book');
} else {
$url = get_permalink(mbt_get_setting('booktable_page'));
}
return $url;
}
function mbt_get_product_name() {
$name = mbt_get_setting('product_name');
return apply_filters('mbt_product_name', empty($name) ? __('Books', 'mybooktable') : $name);
}
function mbt_get_product_slug() {
$slug = mbt_get_setting('product_slug');
return apply_filters('mbt_product_slug', empty($slug) ? _x('books', 'URL slug', 'mybooktable') : $slug);
}
function mbt_get_reviews_types() {
// The 'mbt_reviews_boxes' filter is deprecated, but still supported
return apply_filters('mbt_reviews_boxes', apply_filters('mbt_reviews_types', array()));
}
function mbt_add_disabled_reviews_types($reviews) {
$reviews['amazon'] = array(
'name' => __('Amazon Reviews','mybooktable'),
'disabled' => mbt_get_upgrade_message(),
);
return $reviews;
}
//add_filter('mbt_reviews_types', 'mbt_add_disabled_reviews_types', 9);
function mbt_get_wp_filesystem($nonce_url) {
require_once(ABSPATH.'wp-admin/includes/file.php');
ob_start();
$creds = request_filesystem_credentials($nonce_url, '', false, false, null);
$output = ob_get_contents();
ob_end_clean();
if($creds === false) { return $output; }
if(!WP_Filesystem($creds)) {
ob_start();
request_filesystem_credentials($nonce_url, '', true, false, null);
$output = ob_get_contents();
ob_end_clean();
return $output;
}
return '';
}
function mbt_download_and_insert_attachment($url) {
$raw_response = wp_remote_get($url, array('timeout' => 3));
if(is_wp_error($raw_response) or wp_remote_retrieve_response_code($raw_response) != 200) { return 0; }
$file_data = wp_remote_retrieve_body($raw_response);
$nonce_url = wp_nonce_url('admin.php', 'mbt_download_and_insert_attachment');
$output = mbt_get_wp_filesystem($nonce_url);
if(!empty($output)) { return 0; }
global $wp_filesystem, $wpdb;
$url_parts = wp_parse_url($url);
$filename = basename($url_parts['path']);
$filename = preg_replace('/[^A-Za-z0-9_.]/', '', $filename);
$upload_dir = wp_upload_dir();
$filepath = $upload_dir['path'].'/'.$filename;
$fileurl = $upload_dir['url'].'/'.$filename;
if($wp_filesystem->exists($filepath)) {
$existing_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=%s", $fileurl));
if(!empty($existing_id)) { return $existing_id; } else { return 0; }
}
if(!$wp_filesystem->put_contents($filepath, $file_data, FS_CHMOD_FILE)) { return 0; }
$filetype = wp_check_filetype(basename($filepath), null);
$attachment = array(
'guid' => $fileurl,
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $filepath);
require_once(ABSPATH.'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id, $filepath);
wp_update_attachment_metadata($attach_id, $attach_data);
return $attach_id;
}
function mbt_copy_and_insert_attachment($path) {
$nonce_url = wp_nonce_url('admin.php', 'mbt_copy_and_insert_attachment');
$output = mbt_get_wp_filesystem($nonce_url);
if(!empty($output)) { return 0; }
global $wp_filesystem, $wpdb;
$filename = basename($path);
$filename = preg_replace('/[^A-Za-z0-9_.]/', '', $filename);
$upload_dir = wp_upload_dir();
$filepath = $upload_dir['path'].'/'.$filename;
$fileurl = $upload_dir['url'].'/'.$filename;
if($wp_filesystem->exists($filepath)) {
$existing_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=%s", $fileurl));
if(!empty($existing_id)) { return $existing_id; } else { return 0; }
}
if(!$wp_filesystem->copy($path, $filepath, false, FS_CHMOD_FILE)) { return 0; }
$filetype = wp_check_filetype(basename($filepath), null);
$attachment = array(
'guid' => $fileurl,
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $filepath);
require_once(ABSPATH.'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id, $filepath);
wp_update_attachment_metadata($attach_id, $attach_data);
return $attach_id;
}
function mbt_add_book_pages_to_front_page_options($pages, $args) {
if(!is_array($args) or !isset($args['name']) or $args['name'] !== 'page_on_front') { return $pages; }
$books_query = new WP_Query(array('post_type' => 'mbt_book', 'posts_per_page' => -1));
$books = $books_query->posts;
foreach($books as $book) {
$book->post_title = __('Book Page', 'mybooktable').': '.$book->post_title;
}
return array_merge($pages, $books);
}
add_filter('get_pages', 'mbt_add_book_pages_to_front_page_options', 10, 2);
function mbt_push_query($name, $query) {
global $wp_query, $posts, $post, $id, $mbt_query_stack;
if(empty($mbt_query_stack)) { $mbt_query_stack = array(); }
$mbt_query_stack[] = array(
'name' => $name,
'wp_query' => $wp_query,
'posts' => $posts,
'post' => $post,
'id' => $id,
);
$wp_query = $query;
$posts = $query->posts;
$post = $query->post;
$id = $query->post ? $query->post->ID : NULL;
}
function mbt_pop_query($name) {
global $wp_query, $posts, $post, $id, $mbt_query_stack;
if(empty($mbt_query_stack)) { return; }
$query = array_pop($mbt_query_stack);
if($name !== $query['name']) {
trigger_error('MyBookTable tried to close '.esc_attr($name).' query but was prevented by '.esc_attr($query['name']).' query!', E_USER_WARNING);
$mbt_query_stack[] = $query;
return;
}
$wp_query = $query['wp_query'];
$posts = $query['posts'];
$post = $query['post'];
$id = $query['id'];
}
/*---------------------------------------------------------*/
/* Display Modes */
/*---------------------------------------------------------*/
function mbt_get_book_display_modes() {
$modes = apply_filters('mbt_display_modes', array());
foreach($modes as $slug => $mode) {
if(empty($modes[$slug]['name'])) { $modes[$slug]['name'] = __('Unnamed', 'mybooktable'); }
if(empty($modes[$slug]['supports'])) { $modes[$slug]['supports'] = array(); }
}
return $modes;
}
function mbt_add_default_book_display_modes($modes) {
$modes['storefront'] = array('name' => __('Storefront', 'mybooktable'), 'supports' => array('embedding', 'sale_price'));
$modes['singlecolumn'] = array('name' => __('Beautiful Page', 'mybooktable'), 'supports' => array('embedding', 'teaser', 'sortable_sections'));
return $modes;
}
add_filter('mbt_display_modes', 'mbt_add_default_book_display_modes');
function mbt_get_default_book_display_mode() {
return apply_filters('mbt_default_book_display_mode', 'singlecolumn');
}
function mbt_get_book_display_mode($post_id) {
$display_mode = get_post_meta($post_id, 'mbt_display_mode', true);
$display_modes = mbt_get_book_display_modes();
if(empty($display_modes[$display_mode])) { $display_mode = mbt_get_default_book_display_mode(); }
return $display_mode;
}
function mbt_book_display_mode_supports($display_mode, $supports) {
$display_modes = mbt_get_book_display_modes();
if(empty($display_modes[$display_mode])) { $display_mode = mbt_get_default_book_display_mode(); }
return array_search($supports, $display_modes[$display_mode]['supports']) !== FALSE;
}
add_action('admin_footer-edit.php', 'mbt_book_bulk_change_display_mode_admin_footer');
function mbt_book_bulk_change_display_mode_admin_footer() {
$display_modes = mbt_get_book_display_modes();
global $post_type;
if($post_type == 'mbt_book') {
?>
current_action();
if(substr($action, 0, 16) == 'mbt-switch-mode-') {
check_admin_referer('bulk-posts');
$selected_mode = substr($action, 16);
$display_modes = mbt_get_book_display_modes();
if(empty($display_modes[$selected_mode])) { return; }
$post_ids = array_map('intval', isset($_REQUEST['post']) ? $_REQUEST['post'] : array());
if(empty($post_ids)) { return; }
$books_updated = 0;
foreach($post_ids as $post_id) {
update_post_meta($post_id, 'mbt_display_mode', $selected_mode);
$books_updated++;
}
wp_safe_redirect(add_query_arg(array('paged' => $wp_list_table->get_pagenum(), 'mbt-books-updated' => $books_updated), admin_url('edit.php?post_type=mbt_book')));
exit();
}
}
add_action('admin_notices', 'mbt_book_bulk_change_display_mode_admin_notices');
function mbt_book_bulk_change_display_mode_admin_notices() {
global $post_type, $pagenow;
$books_updated = filter_input( INPUT_GET,'mbt-books-updated');
if($pagenow == 'edit.php' && $post_type == 'mbt_book' && isset($books_updated) && intval($books_updated)) {
/* translators: %s: the number of books */
$message = sprintf(_n('%s Book updated.', '%s books updated.', intval($books_updated)), number_format_i18n(intval($books_updated)));
echo('
');
}
}
function mbt_get_sorted_content_sections($display_mode) {
$sections = apply_filters('mbt_get_'.$display_mode.'_content_sections', array());
$prioritized_sections = array();
foreach($sections as $id => $section) { $prioritized_sections[] = array_merge($section, array('id' => $id)); }
$prioritize = function($a, $b) { return ($a['priority'] == $b['priority']) ? 0 : (($a['priority'] < $b['priority']) ? -1 : 1); };
usort($prioritized_sections, $prioritize);
$sections_order = mbt_get_setting('book_section_order_'.$display_mode);
if(empty($sections_order)) { $sections_order = array(); }
$sorted_sections = array();
$order_index = 0;
foreach($prioritized_sections as $section) {
$index = array_search($section['id'], $sections_order);
if($index === false) {
$sorted_sections[] = $section;
} else {
while(empty($sections[$sections_order[$order_index]])) { $order_index += 1; }
$order_section = $sections[$sections_order[$order_index]];
$sorted_sections[] = array_merge($order_section, array('id' => $sections_order[$order_index], 'priority' => $section['priority']));
$order_index += 1;
}
}
return $sorted_sections;
}
function mbt_render_book_section($post_id, $section_id, $content, $title='') {
$output = '';
$title = apply_filters('mbt_book_section_title', $title, $post_id, $section_id);
$content = apply_filters('mbt_book_section_content', $content, $post_id, $section_id);
if(!empty($content)) {
$output .= '';
$output .= '';
if($title) { $output .= '
'.$title.'
'; }
$output .= '
'.$content.'
';
$output .= '
';
}
return apply_filters('mbt_render_book_section', $output, $post_id, $section_id, $content, $title);
}
/*---------------------------------------------------------*/
/* Importers */
/*---------------------------------------------------------*/
function mbt_get_importers() {
return apply_filters('mbt_importers', array());
}
function mbt_add_disabled_importers($importers) {
/*$importers['amazon'] = array(
'name' => __('Amazon Bulk Book Importer', 'mybooktable'),
'desc' => __('Import your books in bulk from Amazon with a list of ISBNs.', 'mybooktable'),
'disabled' => mbt_get_upgrade_message(),
);*/
$importers['uiee'] = array(
'name' => __('UIEE File', 'mybooktable'),
'desc' => __('Import your books from a UIEE (Universal Information Exchange Environment) File.', 'mybooktable'),
'disabled' => mbt_get_upgrade_message(),
);
return $importers;
}
add_filter('mbt_importers', 'mbt_add_disabled_importers', 9);
function mbt_import_book($book) {
$defaults = array(
'post_status' => 'publish',
'source_id' => null,
'title' => '',
'content' => '',
'excerpt' => '',
'authors' => array(),
'series' => array(),
'genres' => array(),
'tags' => array(),
'buybuttons' => '',
'image_id' => '',
'unique_id_isbn' => '',
'unique_id_asin' => '',
'series_order' => '',
'display_mode' => '',
'show_instant_preview' => '',
'sample_url' => '',
'sample_audio' => '',
'sample_video' => '',
'price' => '',
'sale_price' => '',
'ebook_price' => '',
'audiobook_price' => '',
'publisher_name' => '',
'publisher_url' => '',
'publication_year' => '',
'star_rating' => '',
'book_format' => '',
'book_length' => '',
'narrator' => '',
'illustrator' => '',
'bg_color' => '',
'bg_color_alt' => '',
'button_color' => '',
'imported_book_id' => '',
);
$book = array_merge($defaults, $book);
if(!empty($book['unique_id'])) { $book['unique_id_isbn'] = $book['unique_id']; }
if(!empty($book['imported_book_id']) and ($imported_book = get_post($book['imported_book_id']))) {
$post_id = wp_update_post(array(
'ID' => $imported_book->ID,
'post_title' => $book['title'],
));
$old_buybuttons = get_post_meta($post_id, 'mbt_buybuttons', true);
if(empty($old_buybuttons)) { update_post_meta($post_id, 'mbt_buybuttons', $book['buybuttons']); }
if(!empty($book['image_id'])) { update_post_meta($post_id, 'mbt_book_image_id', $book['image_id']); }
if(!empty($book['unique_id_isbn'])) { update_post_meta($post_id, 'unique_id_isbn', $book['unique_id_isbn']); }
if(!empty($book['unique_id_asin'])) { update_post_meta($post_id, 'unique_id_asin', $book['unique_id_asin']); }
if(!empty($book['series_order'])) { update_post_meta($post_id, 'mbt_series_order', $book['series_order']); }
if(!empty($book['display_mode'])) { update_post_meta($post_id, 'mbt_display_mode', $book['display_mode']); }
if(!empty($book['authors'])) { wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['authors'], 'mbt_author'), 'mbt_author'); }
if(!empty($book['series'])) { wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['series'], 'mbt_series'), 'mbt_series'); }
if(!empty($book['genres'])) { wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['genres'], 'mbt_genre'), 'mbt_genre'); }
if(!empty($book['tags'])) { wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['tags'], 'mbt_tag'), 'mbt_tag'); }
if(!empty($book['show_instant_preview'])) { update_post_meta($post_id, 'mbt_show_instant_preview', $book['show_instant_preview']); }
if(!empty($book['sample_url'])) { update_post_meta($post_id, 'mbt_sample_url', $book['sample_url']); }
if(!empty($book['sample_audio'])) { update_post_meta($post_id, 'mbt_sample_audio', $book['sample_audio']); }
if(!empty($book['sample_video'])) { update_post_meta($post_id, 'mbt_sample_video', $book['sample_video']); }
if(!empty($book['price'])) { update_post_meta($post_id, 'mbt_price', $book['price']); }
if(!empty($book['sale_price'])) { update_post_meta($post_id, 'mbt_sale_price', $book['sale_price']); }
if(!empty($book['ebook_price'])) { update_post_meta($post_id, 'mbt_ebook_price', $book['ebook_price']); }
if(!empty($book['audiobook_price'])) { update_post_meta($post_id, 'mbt_audiobook_price', $book['audiobook_price']); }
if(!empty($book['publisher_name'])) { update_post_meta($post_id, 'mbt_publisher_name', $book['publisher_name']); }
if(!empty($book['publisher_url'])) { update_post_meta($post_id, 'mbt_publisher_url', $book['publisher_url']); }
if(!empty($book['publication_year'])) { update_post_meta($post_id, 'mbt_publication_year', $book['publication_year']); }
if(!empty($book['star_rating'])) { update_post_meta($post_id, 'mbt_star_rating', $book['star_rating']); }
if(!empty($book['book_format'])) { update_post_meta($post_id, 'mbt_book_format', $book['book_format']); }
if(!empty($book['book_length'])) { update_post_meta($post_id, 'mbt_book_length', $book['book_length']); }
if(!empty($book['narrator'])) { update_post_meta($post_id, 'mbt_narrator', $book['narrator']); }
if(!empty($book['illustrator'])) { update_post_meta($post_id, 'mbt_illustrator', $book['illustrator']); }
if(!empty($book['bg_color'])) { update_post_meta($post_id, 'mbt_bg_color', $book['bg_color']); }
if(!empty($book['bg_color_alt'])) { update_post_meta($post_id, 'mbt_bg_color_alt', $book['bg_color_alt']); }
if(!empty($book['button_color'])) { update_post_meta($post_id, 'mbt_button_color', $book['button_color']); }
} else {
$post_id = wp_insert_post(array(
'post_title' => $book['title'],
'post_content' => $book['content'],
'post_excerpt' => $book['excerpt'],
'post_status' => $book['post_status'],
'post_type' => 'mbt_book'
));
update_post_meta($post_id, 'mbt_buybuttons', $book['buybuttons']);
update_post_meta($post_id, 'mbt_unique_id_isbn', $book['unique_id_isbn']);
update_post_meta($post_id, 'mbt_unique_id_asin', $book['unique_id_asin']);
update_post_meta($post_id, 'mbt_series_order', $book['series_order']);
update_post_meta($post_id, 'mbt_display_mode', $book['display_mode']);
wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['authors'], 'mbt_author'), 'mbt_author');
wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['series'], 'mbt_series'), 'mbt_series');
wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['genres'], 'mbt_genre'), 'mbt_genre');
wp_set_object_terms($post_id, mbt_import_taxonomy_terms($book['tags'], 'mbt_tag'), 'mbt_tag');
update_post_meta($post_id, 'mbt_show_instant_preview', $book['show_instant_preview']);
update_post_meta($post_id, 'mbt_sample_url', $book['sample_url']);
update_post_meta($post_id, 'mbt_sample_audio', $book['sample_audio']);
update_post_meta($post_id, 'mbt_sample_video', $book['sample_video']);
update_post_meta($post_id, 'mbt_price', $book['price']);
update_post_meta($post_id, 'mbt_sale_price', $book['sale_price']);
update_post_meta($post_id, 'mbt_ebook_price', $book['ebook_price']);
update_post_meta($post_id, 'mbt_audiobook_price', $book['audiobook_price']);
update_post_meta($post_id, 'mbt_publisher_name', $book['publisher_name']);
update_post_meta($post_id, 'mbt_publisher_url', $book['publisher_url']);
update_post_meta($post_id, 'mbt_publication_year', $book['publication_year']);
update_post_meta($post_id, 'mbt_star_rating', $book['star_rating']);
update_post_meta($post_id, 'mbt_book_format', $book['book_format']);
update_post_meta($post_id, 'mbt_book_length', $book['book_length']);
update_post_meta($post_id, 'mbt_narrator', $book['narrator']);
update_post_meta($post_id, 'mbt_illustrator', $book['illustrator']);
update_post_meta($post_id, 'mbt_bg_color', $book['bg_color']);
update_post_meta($post_id, 'mbt_bg_color_alt', $book['bg_color_alt']);
update_post_meta($post_id, 'mbt_button_color', $book['button_color']);
if(!empty($book['source_id'])) { update_post_meta($book['source_id'], 'mbt_imported_book_id', $post_id); }
// download and import the book image
if(isset($book['image_src']) && !empty($book['image_src'])) {
$imgurl = stripslashes($book['image_src']);
$attach_id = sh_mbt_download_and_insert_attachment_2($imgurl,$book['title']);
if(isset($attach_id) && !empty($attach_id)){
update_post_meta($post_id, 'mbt_book_image_id', $attach_id);
}
}
}
return $post_id;
}
function mbt_import_taxonomy_terms($term_names, $taxonomy) {
$returns = array();
foreach($term_names as $name) {
if(term_exists($name, $taxonomy)) {
$new_term = (array)get_term_by('name', $name, $taxonomy);
} else {
$new_term = (array)wp_insert_term($name, $taxonomy);
}
$returns[] = $new_term['term_id'];
}
return $returns;
}
/*---------------------------------------------------------*/
/* Pages */
/*---------------------------------------------------------*/
function mbt_add_custom_page($name, $function, $permissions="edit_posts") {
$add_page = function() use ($name, $permissions, $function) {
add_submenu_page("mbt_dashboard", "", "", $permissions, $name, $function);
};
$remove_page = function() use ($name) {
remove_submenu_page("mbt_dashboard", $name);
};
add_action('admin_menu', $add_page, 9);
add_action('admin_head', $remove_page);
}
function mbt_get_custom_page_url($name) {
return admin_url('admin.php?page='.$name);
}
/*---------------------------------------------------------*/
/* Styles */
/*---------------------------------------------------------*/
function mbt_image_url($image) {
$url = mbt_current_style_url($image);
return apply_filters('mbt_image_url', empty($url) ? plugins_url('styles/'.mbt_get_default_style_pack().'/'.$image, dirname(__FILE__)) : $url, $image);
}
function mbt_current_style_url($file) {
$style = mbt_get_setting('style_pack');
if(empty($style)) { $style = mbt_get_default_style_pack(); }
$url = mbt_style_url($file, $style);
if(empty($url) and $style !== mbt_get_default_style_pack()) { $url = mbt_style_url($file, mbt_get_default_style_pack()); }
return $url;
}
function mbt_style_url($file, $style) {
foreach(mbt_get_style_folders() as $folder) {
if(file_exists($folder['dir'].'/'.$style)) {
if(file_exists($folder['dir'].'/'.$style.'/'.$file)) {
return $folder['url'].'/'.rawurlencode($style).'/'.$file;
}
}
}
$meta = mbt_get_style_pack_meta($style);
if($meta['template']) { return mbt_style_url($file, $meta['template']); }
return '';
}
function mbt_get_style_packs() {
$folders = mbt_get_style_folders();
$styles = array();
foreach($folders as $folder) {
if(file_exists($folder['dir']) and $handle = opendir($folder['dir'])) {
while(false !== ($entry = readdir($handle))) {
if ($entry != '.' and $entry != '..' and !in_array($entry, $styles)) {
$styles[] = $entry;
}
}
closedir($handle);
}
}
sort($styles);
return $styles;
}
function mbt_get_style_pack_meta($style) {
$default_headers = array(
'name' => 'Style Pack Name',
'stylepack_uri' => 'Style Pack URI',
'template' => 'Template',
'version' => 'Version',
'desc' => 'Description',
'author' => 'Author',
'author_uri' => 'Author URI',
);
$data = array(
'name' => $style,
'stylepack_uri' => '',
'template' => '',
'version' => '',
'desc' => '',
'author' => '',
'author_uri' => '',
);
$readme = '';
foreach(mbt_get_style_folders() as $folder) {
if(file_exists($folder['dir'].'/'.$style)) {
if(file_exists($folder['dir'].'/'.$style.'/readme.txt')) {
$readme = $folder['dir'].'/'.$style.'/readme.txt';
break;
}
}
}
if($readme) { $data = get_file_data($readme, $default_headers, 'mbt_style_pack'); }
return $data;
}
function mbt_get_default_style_pack() {
return apply_filters('mbt_default_style_pack', 'silver');
}
function mbt_get_style_folders() {
return apply_filters('mbt_style_folders', array());
}
function mbt_add_default_style_folder($folders) {
$folders[] = array('dir' => plugin_dir_path(dirname(__FILE__)).'styles', 'url' => plugins_url('styles', dirname(__FILE__)));
return $folders;
}
add_filter('mbt_style_folders', 'mbt_add_default_style_folder', 100);
function mbt_add_uploaded_style_folder($folders) {
$upload_dir = wp_upload_dir();
$folders[] = array('dir' => $upload_dir['basedir'].DIRECTORY_SEPARATOR.'mbt_styles', 'url' => $upload_dir['baseurl'].'/'.'mbt_styles');
return $folders;
}
add_filter('mbt_style_folders', 'mbt_add_uploaded_style_folder', 100);
/*---------------------------------------------------------*/
/* Analytics */
/*---------------------------------------------------------*/
/*---------------------------------------------------------*/
/* API / Upgrades */
/*---------------------------------------------------------*/
function mbt_verify_api_key() {
global $wp_version;
$to_send = array(
'action' => 'basic_check',
'version' => MBT_VERSION,
'api-key' => mbt_get_setting('api_key'),
'site' => get_bloginfo('url')
);
$options = array(
'timeout' => 3,
'body' => $to_send,
'user-agent' => 'WordPress/'.$wp_version
);
// added by stormhill 6/14/24
$checkmode = mbt_get_setting('key_mode');
$raw_response = wp_remote_post('https://api.stormhillmedia.com/plugins/apikey/check', $options);
if(isset($checkmode) && $checkmode == 'mybooktable-dev3') {
mbt_update_setting('api_key_status', 10);
mbt_update_setting('upgrade_active', 'mybooktable-dev3');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Developer 3.0', 'mybooktable'));
return;
} else if(isset($checkmode) && $checkmode == 'mybooktable-pro3') {
mbt_update_setting('api_key_status', 10);
mbt_update_setting('upgrade_active', 'mybooktable-pro3');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Professional 3.0', 'mybooktable'));
return;
}
// end edits 6/14/24
if(is_wp_error($raw_response) || 200 != wp_remote_retrieve_response_code($raw_response)) {
mbt_update_setting('api_key_status', -1);
mbt_update_setting('upgrade_active', false);
mbt_update_setting('api_key_message', __('Unable to connect to server!', 'mybooktable'));
return;
}
$response = maybe_unserialize(wp_remote_retrieve_body($raw_response));
if(!is_array($response) or empty($response['status'])) {
mbt_update_setting('api_key_status', -2);
mbt_update_setting('api_key_message', __('Invalid response received from server', 'mybooktable'));
return;
}
$status = $response['status'];
if($status >= 10) {
$permissions = array();
if(!empty($response['permissions']) and is_array($response['permissions'])) {
$permissions = $response['permissions'];
}
if(in_array('mybooktable-dev3', $permissions)) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('upgrade_active', 'mybooktable-dev3');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Developer 3.0', 'mybooktable'));
} else if(in_array('mybooktable-pro3', $permissions)) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('upgrade_active', 'mybooktable-pro3');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Professional 3.0', 'mybooktable'));
} else if(in_array('mybooktable-dev2', $permissions)) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('upgrade_active', 'mybooktable-dev2');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Developer 2.0', 'mybooktable'));
} else if(in_array('mybooktable-pro2', $permissions)) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('upgrade_active', 'mybooktable-pro2');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Professional 2.0', 'mybooktable'));
} else if(in_array('mybooktable-dev', $permissions)) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('upgrade_active', 'mybooktable-dev');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Developer 1.0', 'mybooktable'));
} else if(in_array('mybooktable-pro', $permissions)) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('upgrade_active', 'mybooktable-pro');
mbt_update_setting('api_key_message', __('Valid for MyBookTable Professional 1.0', 'mybooktable'));
} else {
mbt_update_setting('api_key_status', -20);
mbt_update_setting('api_key_message', __('Permissions error!', 'mybooktable'));
mbp_update_setting('upgrade_active', false);
}
} else if($status == -10) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('api_key_message', __('Key not found', 'mybooktable'));
mbt_update_setting('upgrade_active', false);
} else if($status == -11) {
mbt_update_setting('api_key_status', $status);
mbt_update_setting('api_key_message', __('Key has been deactivated', 'mybooktable'));
mbt_update_setting('upgrade_active', false);
} else {
mbt_update_setting('api_key_status', -2);
mbt_update_setting('api_key_message', __('Invalid response received from server', 'mybooktable'));
mbt_update_setting('upgrade_active', false);
}
}
function mbt_init_api_key_check() {
if(!wp_next_scheduled('mbt_periodic_api_key_check')) { wp_schedule_event(time(), 'weekly', 'mbt_periodic_api_key_check'); }
add_action('mbt_periodic_api_key_check', 'mbt_verify_api_key');
}
add_action('mbt_init', 'mbt_init_api_key_check');
function mbt_get_upgrade() {
$upgrade_active = mbt_get_setting('upgrade_active');
return empty($upgrade_active) ? false : $upgrade_active;
}
function mbt_get_upgrade_version() {
$upgrade = mbt_get_upgrade();
if($upgrade == 'mybooktable-dev3' and defined('MBTDEV3_VERSION')) { return MBTDEV3_VERSION; }
if($upgrade == 'mybooktable-pro3' and defined('MBTPRO3_VERSION')) { return MBTPRO3_VERSION; }
if($upgrade == 'mybooktable-dev2' and defined('MBTDEV2_VERSION')) { return MBTDEV2_VERSION; }
if($upgrade == 'mybooktable-pro2' and defined('MBTPRO2_VERSION')) { return MBTPRO2_VERSION; }
if($upgrade == 'mybooktable-dev' and defined('MBTDEV_VERSION')) { return MBTDEV_VERSION; }
if($upgrade == 'mybooktable-pro' and defined('MBTPRO_VERSION')) { return MBTPRO_VERSION; }
return false;
}
function mbt_get_upgrade_plugin_exists($active=true) {
if(!$active) { return defined('MBTDEV3_VERSION') or defined('MBTPRO3_VERSION') or defined('MBTDEV2_VERSION') or defined('MBTPRO2_VERSION') or defined('MBTDEV_VERSION') or defined('MBTPRO_VERSION'); }
$upgrade = mbt_get_upgrade();
if($upgrade == 'mybooktable-dev3') { return defined('MBTDEV3_VERSION'); }
if($upgrade == 'mybooktable-pro3') { return defined('MBTPRO3_VERSION'); }
if($upgrade == 'mybooktable-dev2') { return defined('MBTDEV2_VERSION'); }
if($upgrade == 'mybooktable-pro2') { return defined('MBTPRO2_VERSION'); }
if($upgrade == 'mybooktable-dev') { return defined('MBTDEV_VERSION'); }
if($upgrade == 'mybooktable-pro') { return defined('MBTPRO_VERSION'); }
return false;
}
function mbt_get_upgrade_message($require_upgrade=true, $upgrade_text=null, $thankyou_text=null) {
if(mbt_get_upgrade()) {
if(mbt_get_upgrade_plugin_exists()) {
if($require_upgrade) {
return ''.($upgrade_text !== null ? $upgrade_text : __('Upgrade your MyBookTable to enable these advanced features!', 'mybooktable')).'';
} else {
return ($thankyou_text !== null ? $thankyou_text : (__('Thank you for purchasing a MyBookTable Upgrade!', 'mybooktable').' '.__('Get premium support.', 'mybooktable').''));
}
} else {
$upgradepage_url =
wp_nonce_url(admin_url('admin.php?page=mbt_dashboard&subpage=mbt_get_upgrade_page'),'dashboard_nonce','nonce_dashboard');
return ''.__('Download your MyBookTable Upgrade plugin to enable your advanced features!', 'mybooktable').'';
}
} else {
if(mbt_get_upgrade_plugin_exists(false)) {
$api_key = mbt_get_setting('api_key');
if(empty($api_key)) {
return ''.__('Insert your License Key to enable your advanced features!', 'mybooktable').'';
} else {
return ''.__('Update your License Key to enable your advanced features!', 'mybooktable').'';
}
} else {
return ''.($upgrade_text !== null ? $upgrade_text : __('Upgrade your MyBookTable to enable these advanced features!', 'mybooktable')).'';
}
}
}
// import image
if(!function_exists('sh_mbt_download_and_insert_attachment_2')){
function sh_mbt_download_and_insert_attachment_2($url,$name) {
$raw_response = wp_remote_get($url, array('timeout' => 3));
if(is_wp_error($raw_response) or wp_remote_retrieve_response_code($raw_response) != 200) { return 0; }
$file_data = wp_remote_retrieve_body($raw_response);
$file_header = wp_remote_retrieve_headers($raw_response);
$nonce_url = wp_nonce_url('admin.php', 'mbt_download_and_insert_attachment');
$output = mbt_get_wp_filesystem($nonce_url);
if(!empty($output)) { return 0; }
global $wp_filesystem, $wpdb;
$url_parts = wp_parse_url($url);
$filename = str_replace(' ','-',strtolower($name)).'-book-image.jpg';
$filename = preg_replace('/[^A-Za-z0-9_.-]/', '', $filename);
$upload_dir = wp_upload_dir();
$filepath = $upload_dir['path'].'/'.$filename;
$fileurl = $upload_dir['url'].'/'.$filename;
if($wp_filesystem->exists($filepath)) {
$existing_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=%s", $fileurl));
if(!empty($existing_id)) { return $existing_id; } else { return 0; }
}
if(!$wp_filesystem->put_contents($filepath, $file_data, FS_CHMOD_FILE)) { return 0; }
$filetype = wp_check_filetype(basename($filepath), null);
$attachment = array(
'guid' => $fileurl,
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $filepath);
require_once(ABSPATH.'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id, $filepath);
wp_update_attachment_metadata($attach_id, $attach_data);
return $attach_id;
}
}
function allow_admin_script_tags( $allowedposttags,$context ){
if(!is_admin() || $context != 'post'){
return $allowedposttags;
}
$allowedposttags['script'] = array(
'src' => true,
'type' => true,
'charset' => true,
'class' =>true,
'async' =>true
);
$allowedposttags['input'] = array(
'id' => true,
'type' => true,
'value' => true,
'name' => true,
'class' =>true,
'data-*' =>true,
'checked' =>true
);
$allowedposttags['select'] = array(
'name' => true,
'id' => true,
'class' => true,
'value' =>true,
'type' =>true
);
$allowedposttags['option'] = array(
'selected' => true,
);
$allowedposttags['textarea'] = array(
'name' => true,
'id' => true,
'class' => true,
'cols' =>true,
);
return $allowedposttags;
}
add_filter('wp_kses_allowed_html','allow_admin_script_tags', 50, 2);
function allow_script_tags( $allowedposttags,$context ){
if( is_admin() || $context != 'post'){
return $allowedposttags;
}
$allowedposttags['iframe'] = array(
'src' => true,
'height' => true,
'width' => true,
'class' => true,
'frameborder' => true,
'allowfullscreen' => true,
);
$allowedposttags['audio'] = array(
'controls' => true,
);
$allowedposttags['source'] = array(
'src' => true,
'type' => true,
);
$allowedposttags['script'] = array(
'src' => true,
'type' => true,
'charset' => true,
'class' =>true,
'async' =>true
);
return $allowedposttags;
}
add_filter('wp_kses_allowed_html','allow_script_tags', 50, 2);