|
|
<?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.'); |
|
|
} |
|
|
} |
|
|
} |