Guest User

Untitled

a guest
Nov 11th, 2025
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.37 KB | None | 0 0
  1. <?php
  2. /**
  3. *
  4. * @ This file is created by http://DeZender.Net
  5. * @ deZender (PHP7 Decoder for ionCube Encoder)
  6. *
  7. * @ Version : 5.0.1.0
  8. * @ Author : DeZender
  9. * @ Release on : 22.04.2022
  10. * @ Official site : http://DeZender.Net
  11. *
  12. */
  13.  
  14. namespace TXMI;
  15.  
  16. class Admin
  17. {
  18. public const PAGE_SLUG = 'txmi';
  19. public const NONCE_KEY = 'txmi_nonce';
  20. public const AJAX_HOOK = 'txmi_import_one';
  21. public const AJAX_TOKEN = 'txmi_generate_token';
  22. public const AJAX_CRON_APPLY = 'txmi_cron_apply';
  23. public const AJAX_CRON_STATUS = 'txmi_cron_status';
  24. public const AJAX_CRON_TOGGLE = 'txmi_cron_toggle';
  25. public const AJAX_REFRESH_LINKS = 'txmi_refresh_links';
  26. public const OPT_GROUP = 'txmi_options_group';
  27. public const API_BASE = 'https://api-themex.site/4651_NewApi/';
  28. public const API_SUFFIX = '/api.php?slug=';
  29. public const API_LINKS = 'https://api-themex.site/4651_NewApi/auto/api.php?slug=';
  30. public const CRON_API_ENDPOINT = 'https://api.cron-job.org';
  31.  
  32. public function __construct()
  33. {
  34. add_action('admin_menu', [$this, 'menu']);
  35. add_action('admin_init', [$this, 'register_settings']);
  36. add_action('admin_enqueue_scripts', [$this, 'enqueue']);
  37. add_action('wp_ajax_' . self::AJAX_HOOK, [$this, 'ajax_import_one']);
  38. add_action('wp_ajax_' . self::AJAX_TOKEN, [$this, 'ajax_generate_token']);
  39. add_action('wp_ajax_' . self::AJAX_CRON_APPLY, [$this, 'ajax_cron_apply']);
  40. add_action('wp_ajax_' . self::AJAX_CRON_STATUS, [$this, 'ajax_cron_status']);
  41. add_action('wp_ajax_' . self::AJAX_CRON_TOGGLE, [$this, 'ajax_cron_toggle']);
  42. add_action('wp_ajax_' . self::AJAX_REFRESH_LINKS, [$this, 'ajax_refresh_links']);
  43. add_action('update_option_' . TXMI_OPT_KEY, [$this, 'maybe_update_cron_on_save'], 10, 3);
  44. }
  45.  
  46. static public function defaults(): array
  47. {
  48. return [
  49. 'api_site' => 'vip_shed4u1',
  50. 'title_prefix' => '',
  51. 'title_suffix' => '',
  52. 'title_remove_list' => ['مشاهدة'],
  53. 'description_tpl' => 'مشاهدة {TITLE} اونلاين وتحميل مباشر بدون إعلانات{if_QUALITY} بجودة عالية {QUALITY}{/if_QUALITY}{if_GENRE} نوع العرض {GENRE}{/if_GENRE}{if_YEARS} إنتاج {YEARS}{/if_YEARS}{if_NATION} من {NATION}{/if_NATION}.',
  54. 'post_status' => 'publish',
  55. 'require_poster_ok' => 1,
  56. 'auto_token' => '',
  57. 'auto_domain_override' => '',
  58. 'auto_site' => 'vip_shed4u1',
  59. 'auto_page_mode' => 'none',
  60. 'auto_page_custom' => '',
  61. 'auto_repeat_times' => 3,
  62. 'auto_hits' => 0,
  63. 'cron_enabled' => 0,
  64. 'cron_api_key' => '565o8oIRaKqUBhB5a0tW4vj3EhB4bIPsViFH1J/kuDk=',
  65. 'cron_job_id' => '',
  66. 'cron_interval' => 15,
  67. 'cron_timezone' => 'UTC',
  68. 'site_links_override' => []
  69. ];
  70. }
  71.  
  72. static public function api_map(): array
  73. {
  74. return ['vip_shed4u1' => 'VIP_shed4u1', 'topcinema' => 'topcinema', 'egydead' => 'egydead', 'arabseed' => 'ArabSeed', 'tuktukcinema' => 'tuktukcinema', '3isq' => '3isq', 'lodynet' => 'lodynet', 'newanime4up' => 'newanime4up', 'animerco' => 'animerco'];
  75. }
  76.  
  77. static public function default_sites_ui(): array
  78. {
  79. return ['vip_shed4u1' => 'شاهد فور يو', 'topcinema' => 'توب سينما', 'egydead' => 'ايجي ديد', 'arabseed' => 'عرب سيد', 'tuktukcinema' => 'توكتوك سينما', '3isq' => 'قصة عشق', 'lodynet' => 'لودي نت', 'newanime4up' => 'أنمي فور أب', 'animerco' => 'أنيميركو'];
  80. }
  81.  
  82. static public function default_sites_links(): array
  83. {
  84. return ['vip_shed4u1' => 'https://shahed4u.day/search?s=', 'topcinema' => 'https://topcinema.pro/recent/', 'egydead' => 'https://a.egydead.space/', 'arabseed' => 'https://a.asd.homes/main0/', 'tuktukcinema' => 'https://tuk.cam/', '3isq' => 'https://3isq.cam/', 'lodynet' => 'https://lody.cam/', 'newanime4up' => 'https://anime4up.rest/episode/', 'animerco' => 'https://got.animerco.org/episodes/'];
  85. }
  86.  
  87. static public function get_page_file_path(): string
  88. {
  89. return plugin_dir_path(__FILE__) . 'page.txt';
  90. }
  91.  
  92. static public function get_current_page(): int
  93. {
  94. $file = self::get_page_file_path();
  95.  
  96. if (file_exists($file)) {
  97. $raw = trim((string) @file_get_contents($file));
  98. if (($raw !== '') && ctype_digit($raw)) {
  99. $n = (int) $raw;
  100.  
  101. if (1 <= $n) {
  102. return $n;
  103. }
  104. }
  105. }
  106.  
  107. return 1;
  108. }
  109.  
  110. static public function set_current_page(int $page): void
  111. {
  112. $page = max(1, $page);
  113. $file = self::get_page_file_path();
  114. @file_put_contents($file, (string) $page, LOCK_EX);
  115. }
  116.  
  117. static public function sites_ui(): array
  118. {
  119. return self::default_sites_ui();
  120. }
  121.  
  122. static public function sites_links(): array
  123. {
  124. $opt = self::opt();
  125. $defaults = self::default_sites_links();
  126. $over = (isset($opt['site_links_override']) && is_array($opt['site_links_override']) ? $opt['site_links_override'] : []);
  127. $links = $defaults;
  128.  
  129. foreach ($over as $k => $v) {
  130. $k = sanitize_key($k);
  131. if ($k && isset($defaults[$k])) {
  132. $vv = trim((string) $v);
  133.  
  134. if ($vv !== '') {
  135. $norm = self::normalize_input_url($vv);
  136.  
  137. if ($norm !== '') {
  138. $links[$k] = $norm;
  139. }
  140. }
  141. }
  142. }
  143.  
  144. return $links;
  145. }
  146.  
  147. static public function api_url_for(string $site): string
  148. {
  149. $map = self::api_map();
  150.  
  151. if (!array_key_exists($site, $map)) {
  152. $site = self::defaults()['api_site'];
  153. }
  154.  
  155. $dir = $map[$site];
  156. return self::API_BASE . $dir . self::API_SUFFIX;
  157. }
  158.  
  159. static public function opt(): array
  160. {
  161. $opt = get_option(TXMI_OPT_KEY, []);
  162. return wp_parse_args((array) $opt, self::defaults());
  163. }
  164.  
  165. public function menu()
  166. {
  167. add_menu_page(__('ThemeXScrap', 'tx-media-importer'), __('ThemeXScrap', 'tx-media-importer'), 'manage_options', self::PAGE_SLUG, [$this, 'page'], 'dashicons-upload', 56);
  168. }
  169.  
  170. public function register_settings()
  171. {
  172. register_setting(self::OPT_GROUP, TXMI_OPT_KEY, [$this, 'sanitize']);
  173. add_settings_section('txmi_titles', 'العنوان والوصف', '__return_false', self::PAGE_SLUG);
  174. add_settings_field('title_prefix', 'بادئة العنوان', [$this, 'field_text'], self::PAGE_SLUG, 'txmi_titles', ['key' => 'title_prefix']);
  175. add_settings_field('title_suffix', 'لاحقة العنوان', [$this, 'field_text'], self::PAGE_SLUG, 'txmi_titles', ['key' => 'title_suffix']);
  176. add_settings_field('title_remove_list', 'حذف كلمات من العنوان', [$this, 'field_remove_list'], self::PAGE_SLUG, 'txmi_titles');
  177. add_settings_field('description_tpl', 'الوصف', [$this, 'field_wp_editor'], self::PAGE_SLUG, 'txmi_titles', ['key' => 'description_tpl']);
  178. add_settings_section('txmi_beh', 'سلوك السحب', '__return_false', self::PAGE_SLUG);
  179. add_settings_field('post_status', 'حالة المقال', [$this, 'field_post_status'], self::PAGE_SLUG, 'txmi_beh');
  180. add_settings_field('require_poster_ok', 'لا تنشر إذا فشل رفع الصورة', [$this, 'field_checkbox'], self::PAGE_SLUG, 'txmi_beh', ['key' => 'require_poster_ok']);
  181. }
  182.  
  183. public function sanitize($input)
  184. {
  185. $def = self::defaults();
  186. $cur = self::opt();
  187. $out = $cur;
  188. $sect = sanitize_text_field($input['_section'] ?? 'settings');
  189.  
  190. if ($sect === 'settings') {
  191. $out['api_site'] = (array_key_exists($input['api_site'] ?? $def['api_site'], self::api_map()) ? $input['api_site'] ?? $def['api_site'] : $def['api_site']);
  192. $out['title_prefix'] = sanitize_text_field($input['title_prefix'] ?? '');
  193. $out['title_suffix'] = sanitize_text_field($input['title_suffix'] ?? '');
  194. $list = (isset($input['title_remove_list']) && is_array($input['title_remove_list']) ? $input['title_remove_list'] : []);
  195. $list = array_map('sanitize_text_field', array_map('trim', $list));
  196. $list = array_values(array_filter(array_unique($list)));
  197. $out['title_remove_list'] = $list;
  198. $out['description_tpl'] = wp_kses_post($input['description_tpl'] ?? $def['description_tpl']);
  199. $ps = (string) ($input['post_status'] ?? 'publish');
  200. $out['post_status'] = (in_array($ps, ['publish', 'draft', 'pending'], true) ? $ps : 'publish');
  201. $out['require_poster_ok'] = (array_key_exists('require_poster_ok', $input) ? (!empty($input['require_poster_ok']) ? 1 : 0) : $cur['require_poster_ok'] ?? 1);
  202. }
  203. else if ($sect === 'auto') {
  204. if (isset($input['txmi_page_txt'])) {
  205. $page = max(1, intval($input['txmi_page_txt']));
  206. self::set_current_page($page);
  207. }
  208.  
  209. $out['auto_domain_override'] = esc_url_raw($input['auto_domain_override'] ?? '');
  210. $out['auto_site'] = (array_key_exists($input['auto_site'] ?? $def['auto_site'], self::api_map()) ? $input['auto_site'] ?? $def['auto_site'] : $def['auto_site']);
  211. $mode = (in_array($input['auto_page_mode'] ?? 'none', ['none', 'query', 'path', 'appender', 'custom'], true) ? $input['auto_page_mode'] : 'none');
  212. $out['auto_page_mode'] = $mode;
  213. $out['auto_page_custom'] = sanitize_text_field($input['auto_page_custom'] ?? '');
  214. $repeat = max(1, intval($input['auto_repeat_times'] ?? ($cur['auto_repeat_times'] ?? 3)));
  215. $out['auto_repeat_times'] = $repeat;
  216. $hits = intval($cur['auto_hits'] ?? 0);
  217. if (isset($input['auto_repeat_times']) || isset($input['txmi_page_txt']) || isset($input['auto_domain_override'])) {
  218. $hits = 0;
  219. }
  220.  
  221. $out['auto_hits'] = $hits;
  222. $tok = $cur['auto_token'] ?? '';
  223. ........................................................
  224. .....................................
  225. .................
Advertisement
Add Comment
Please, Sign In to add comment