| <?php |
|
|
| if (!defined('ABSPATH')) { |
| exit; |
| } |
|
|
| |
| |
| |
| |
| class UMS_Madara_Handler { |
| |
| public static function init() { |
| add_action('wp_ajax_load_more_manga', [__CLASS__, 'load_more_manga']); |
| add_action('wp_ajax_add_manga', [__CLASS__, 'add_manga']); |
| add_action('wp_ajax_search_manga', [__CLASS__, 'search_manga']); |
| add_action('wp_ajax_save_manga_fetch_url', [__CLASS__, 'save_manga_fetch_url']); |
| } |
|
|
|
|
| |
| public static function ums_enhancements() { |
| |
| update_option('madara_manga_list', []); |
| $manga_list = get_option('madara_manga_list', []); |
| $existing_manga_urls = array_map('trim', array_column(get_option('ums_manga_generic_list', []), 0)); |
|
|
| |
| $filtered_manga_list = array_filter($manga_list, function($manga) use ($existing_manga_urls) { |
| return !in_array(trim($manga['url']), $existing_manga_urls); |
| }); |
|
|
| $manga_fetch_url = get_option('manga_fetch_url', 'https://manhuaus.com/wp-admin/admin-ajax.php'); |
|
|
| ?> |
| <div class="wrap"> |
| <h1>Ultimate Manga Scraper: Madara Enhancements</h1> |
| <p>Credits to ThuGie</p> |
| <!-- URL Settings Form --> |
| <form id="url-settings-form"> |
| <h2>Set Manga Fetch URL</h2> |
| <table class="form-table"> |
| <tr> |
| <th scope="row"><label for="manga-fetch-url">Manga Fetch URL</label></th> |
| <td><input name="manga-fetch-url" type="text" id="manga-fetch-url" value="<?php echo esc_attr($manga_fetch_url); ?>" class="regular-text" /></td> |
| </tr> |
| </table> |
| <button type="button" class="button button-primary" id="save-url-settings">Save URL</button> |
| </form> |
| |
| <!-- Search Form --> |
| <hr /> |
| <form id="search-form"> |
| <h2>Search Manga</h2> |
| <label for="search-query">Search Query</label> |
| <input type="text" id="search-query" name="search-query" class="regular-text" /> |
| <label for="search-type">Search Type</label> |
| <select id="search-type" name="search-type"> |
| <option value="new">New</option> |
| <option value="latest">Latest</option> |
| <option value="trending">Trending</option> |
| <option value="most_viewed">Most Viewed</option> |
| <option value="rating">Rating</option> |
| <option value="a_z">A-Z</option> |
| <option value="relevance">Relevance</option> |
| </select> |
| <button type="button" class="button button-secondary" id="search-button">Search</button> |
| </form> |
| |
| <!-- Manga List --> |
| <hr /> |
| <div> |
| <label for="auto-load-more"> |
| <input type="checkbox" id="auto-load-more" /> Enable Auto Load More |
| </label> |
| <p id="manga-count">Manga Loaded: 0</p> |
| </div> |
| <table class="widefat" id="manga-table"> |
| <thead> |
| <tr> |
| <th>#</th> |
| <th>Title</th> |
| <th>Cover Image</th> |
| <th>Description</th> |
| <th>Genres</th> |
| <th>Status</th> |
| <th>Last Updated</th> |
| <th>Latest Chapter</th> |
| <th>Actions</th> |
| </tr> |
| </thead> |
| <tbody> |
| <?php foreach ($filtered_manga_list as $index => $manga): ?> |
| <tr> |
| <td><?php echo esc_html($index + 1); ?></td> |
| <td><?php echo esc_html($manga['title']); ?></td> |
| <td><img src="<?php echo esc_url($manga['cover_image']); ?>" alt="<?php echo esc_attr($manga['title']); ?>" width="100"></td> |
| <td><?php echo esc_html($manga['description']); ?></td> |
| <td><?php echo esc_html($manga['genres']); ?></td> |
| <td><?php echo esc_html($manga['status']); ?></td> |
| <td><?php echo esc_html($manga['last_updated']); ?></td> |
| <td><?php echo esc_html($manga['latest_chapter']); ?></td> |
| <td> |
| <form method="post" class="add-manga-form"> |
| <input type="hidden" name="add_manga_url" value="<?php echo esc_attr($manga['url']); ?>"> |
| <button type="submit" class="button button-primary">Add Manga</button> |
| </form> |
| </td> |
| </tr> |
| <?php endforeach; ?> |
| </tbody> |
| </table> |
| <button id="load-more" class="button button-secondary">Load More</button> <!-- Load More Button --> |
| </div> |
| <?php |
| } |
| |
| // Handle AJAX request to load more manga |
| public static function load_more_manga() { |
| check_ajax_referer('madara_enhancements_nonce', '_ajax_nonce'); |
|
|
| $page = isset($_POST['page']) ? intval($_POST['page']) : 0; |
| $query = isset($_POST['query']) ? sanitize_text_field($_POST['query']) : ''; |
| $type = isset($_POST['type']) ? sanitize_text_field($_POST['type']) : ''; |
|
|
| $manga_list = UMS_Madara_Fetcher::get_manga_data($page, $query, $type); |
|
|
| $existing_manga_urls = array_map('trim', array_column(get_option('ums_manga_generic_list', []), 0)); |
|
|
| |
| $filtered_manga_list = array_filter($manga_list, function($manga) use ($existing_manga_urls) { |
| return !in_array(trim($manga['url']), $existing_manga_urls); |
| }); |
|
|
| if (isset($manga_list['error'])) { |
| wp_send_json_error($manga_list['error']); |
| } else { |
| |
| $current_manga_list = get_option('madara_manga_list', []); |
| $updated_manga_list = array_merge($current_manga_list, $filtered_manga_list); |
| update_option('madara_manga_list', $updated_manga_list); |
| wp_send_json_success($filtered_manga_list); |
| } |
| } |
|
|
| |
| public static function add_manga() { |
| check_ajax_referer('madara_enhancements_nonce', '_ajax_nonce'); |
|
|
| $url = isset($_POST['add_manga_url']) ? sanitize_text_field($_POST['add_manga_url']) : null; |
|
|
| $manga_list = get_option('madara_manga_list', []); |
|
|
| if ($url !== null) { |
| $manga_to_add = array_filter($manga_list, function ($manga) use ($url) { |
| return $manga['url'] === $url; |
| }); |
|
|
| if (!empty($manga_to_add)) { |
| $manga_to_add = array_values($manga_to_add)[0]; |
|
|
| |
| $rules = get_option('ums_manga_generic_list', []); |
| foreach ($rules as $rule) { |
| if (trim($rule[0]) === trim($manga_to_add['url'])) { |
| wp_send_json_error('Manga already exists.'); |
| return; |
| } |
| } |
|
|
| self::save_manga_rules($manga_to_add); |
|
|
| |
| $manga_list = array_filter($manga_list, function ($manga) use ($url) { |
| return $manga['url'] !== $url; |
| }); |
| update_option('madara_manga_list', $manga_list); |
|
|
| wp_send_json_success(); |
| } else { |
| wp_send_json_error('Manga not found.'); |
| } |
| } else { |
| wp_send_json_error('Invalid request.'); |
| } |
| } |
|
|
| |
| public static function save_manga_rules($manga) { |
| |
| $GLOBALS['wp_object_cache']->delete('ums_manga_generic_list', 'options'); |
|
|
| |
| $rules = get_option('ums_manga_generic_list', []); |
|
|
| |
| $schedule = '24'; |
| if (!is_numeric($schedule) || $schedule <= 0) { |
| $schedule = '24'; |
| } |
|
|
| $new_rule = [ |
| trim($manga['url']), |
| $schedule, |
| '1', |
| (new DateTime())->modify('-24 hours -5 minutes')->format('Y-m-d H:i:s'), |
| '1000', |
| 'publish', |
| 'admin', |
| '', |
| '', |
| 'genre', |
| 'genre', |
| '', |
| '1', |
| '0', |
| '1', |
| '0', |
| '0', |
| '0', |
| '0', |
| ]; |
|
|
| $rules[] = $new_rule; |
| update_option('ums_manga_generic_list', $rules); |
| } |
|
|
| |
| public static function enqueue_scripts() { |
| wp_enqueue_script('madara-enhancements', plugin_dir_url(__FILE__) . '../assets/js/madara-enhancements.js', ['jquery'], null, true); |
| wp_localize_script('madara-enhancements', 'madaraEnhancements', [ |
| 'ajaxUrl' => admin_url('admin-ajax.php'), |
| 'nonce' => wp_create_nonce('madara_enhancements_nonce'), |
| ]); |
| } |
|
|
| |
| |
| public static function search_manga() { |
| check_ajax_referer('madara_enhancements_nonce', '_ajax_nonce'); |
|
|
| $query = isset($_POST['query']) ? sanitize_text_field($_POST['query']) : ''; |
| $type = isset($_POST['type']) ? sanitize_text_field($_POST['type']) : ''; |
| $page = isset($_POST['page']) ? intval($_POST['page']) : 0; |
|
|
| |
| $manga_list = UMS_Madara_Fetcher::get_manga_data($page, $query, $type); |
|
|
| |
| if (isset($manga_list['error'])) { |
| wp_send_json_error($manga_list['error']); |
| return; |
| } |
|
|
| $existing_manga_urls = array_map('trim', array_column(get_option('ums_manga_generic_list', []), 0)); |
|
|
| |
| $filtered_manga_list = array_filter($manga_list, function($manga) use ($existing_manga_urls) { |
| return !in_array(trim($manga['url']), $existing_manga_urls); |
| }); |
|
|
| |
| $current_manga_list = get_option('madara_manga_list', []); |
| |
| $updated_manga_list = array_merge($current_manga_list, $filtered_manga_list); |
| |
| update_option('madara_manga_list', $updated_manga_list); |
|
|
| wp_send_json_success(array_values($filtered_manga_list)); |
| } |
|
|
| |
| public static function save_manga_fetch_url() { |
| check_ajax_referer('madara_enhancements_nonce', '_ajax_nonce'); |
| |
| $manga_fetch_url = isset($_POST['manga_fetch_url']) ? esc_url_raw($_POST['manga_fetch_url']) : ''; |
| |
| if ($manga_fetch_url) { |
| update_option('manga_fetch_url', $manga_fetch_url); |
| wp_send_json_success(); |
| } else { |
| wp_send_json_error('Invalid URL.'); |
| } |
| } |
| } |