'ansico-diagnosekoder', 'status' => 'settings_saved', ], admin_url('options-general.php'))); exit; } public static function handle_import_data() { if (!current_user_can('manage_options')) { wp_die(esc_html__('Du har ikke rettigheder til dette.', 'ansico-diagnosekoder')); } check_admin_referer('ansico_diagnosekoder_import_data'); if (empty($_FILES['ansico_diagnosekoder_file']) || empty($_FILES['ansico_diagnosekoder_file']['tmp_name'])) { wp_safe_redirect(add_query_arg([ 'page' => 'ansico-diagnosekoder', 'status' => 'no_file', ], admin_url('options-general.php'))); exit; } $file = $_FILES['ansico_diagnosekoder_file']; $overrides = [ 'test_form' => false, 'mimes' => [ 'txt' => 'text/plain', 'csv' => 'text/plain', ], ]; require_once ABSPATH . 'wp-admin/includes/file.php'; $uploaded = wp_handle_upload($file, $overrides); if (!empty($uploaded['error'])) { self::redirect_with_error($uploaded['error']); } $parsed = Ansico_Diagnosekoder_Parser::parse_file($uploaded['file']); if (!empty($parsed['meta']['error'])) { self::redirect_with_error($parsed['meta']['error']); } if (empty($parsed['rows'])) { self::redirect_with_error(__('Filen indeholdt ingen importerbare diagnosekoder.', 'ansico-diagnosekoder')); } update_option(ANSICO_DIAGNOSEKODER_OPTION_DATA, $parsed['rows'], false); update_option(ANSICO_DIAGNOSEKODER_OPTION_META, $parsed['meta'], false); wp_safe_redirect(add_query_arg([ 'page' => 'ansico-diagnosekoder', 'status' => 'success', ], admin_url('options-general.php'))); exit; } public static function handle_remove_data() { if (!current_user_can('manage_options')) { wp_die(esc_html__('Du har ikke rettigheder til dette.', 'ansico-diagnosekoder')); } check_admin_referer('ansico_diagnosekoder_remove_data'); delete_option(ANSICO_DIAGNOSEKODER_OPTION_DATA); delete_option(ANSICO_DIAGNOSEKODER_OPTION_META); wp_safe_redirect(add_query_arg([ 'page' => 'ansico-diagnosekoder', 'status' => 'data_removed', ], admin_url('options-general.php'))); exit; } public static function handle_remove_favorite() { if (!current_user_can('manage_options')) { wp_die(esc_html__('Du har ikke rettigheder til dette.', 'ansico-diagnosekoder')); } $code = isset($_POST['code']) ? sanitize_text_field(wp_unslash($_POST['code'])) : ''; if ($code === '') { self::redirect_with_error(__('Der mangler en kode.', 'ansico-diagnosekoder')); } check_admin_referer('ansico_diagnosekoder_remove_favorite_' . $code); $results_page_id = self::get_results_page_id(); if (!$results_page_id) { self::redirect_with_error(__('Resultatsiden kunne ikke findes.', 'ansico-diagnosekoder')); } $favorites = Ansico_Diagnosekoder_REST::get_page_favorites($results_page_id); $normalized_code = strtoupper(preg_replace('/\s+/', '', $code)); $favorites = array_values(array_filter($favorites, static function ($item) use ($normalized_code) { return $item !== $normalized_code; })); update_post_meta($results_page_id, ANSICO_DIAGNOSEKODER_PAGE_FAVORITES_META, $favorites); wp_safe_redirect(add_query_arg([ 'page' => 'ansico-diagnosekoder', 'status' => 'favorite_removed', ], admin_url('options-general.php'))); exit; } public static function handle_remove_link() { if (!current_user_can('manage_options')) { wp_die(esc_html__('Du har ikke rettigheder til dette.', 'ansico-diagnosekoder')); } $code = isset($_POST['code']) ? sanitize_text_field(wp_unslash($_POST['code'])) : ''; if ($code === '') { self::redirect_with_error(__('Der mangler en kode.', 'ansico-diagnosekoder')); } check_admin_referer('ansico_diagnosekoder_remove_link_' . $code); $results_page_id = self::get_results_page_id(); if (!$results_page_id) { self::redirect_with_error(__('Resultatsiden kunne ikke findes.', 'ansico-diagnosekoder')); } $normalized_code = strtoupper(preg_replace('/\s+/', '', $code)); $links = Ansico_Diagnosekoder_REST::get_page_links($results_page_id); unset($links[$normalized_code]); update_post_meta($results_page_id, ANSICO_DIAGNOSEKODER_PAGE_LINKS_META, $links); wp_safe_redirect(add_query_arg([ 'page' => 'ansico-diagnosekoder', 'status' => 'link_removed', ], admin_url('options-general.php'))); exit; } protected static function get_results_page_favorite_rows() { $results_page_id = self::get_results_page_id(); if (!$results_page_id) { return []; } return Ansico_Diagnosekoder_Parser::get_rows_by_codes(Ansico_Diagnosekoder_REST::get_page_favorites($results_page_id)); } protected static function get_results_page_id() { $results_url = (string) get_option(ANSICO_DIAGNOSEKODER_OPTION_RESULTS_URL, ''); if ($results_url === '') { return 0; } $page_id = url_to_postid($results_url); return absint($page_id); } protected static function get_results_page_link_rows() { $results_page_id = self::get_results_page_id(); if (!$results_page_id) { return []; } $links = Ansico_Diagnosekoder_REST::get_page_links($results_page_id); if (empty($links)) { return []; } $rows = Ansico_Diagnosekoder_Parser::get_rows_by_codes(array_keys($links)); foreach ($rows as &$row) { $row['url'] = isset($links[$row['code']]) ? $links[$row['code']] : ''; } unset($row); return $rows; } protected static function redirect_with_error($message) { set_transient('ansico_diagnosekoder_admin_error', wp_strip_all_tags((string) $message), 60); wp_safe_redirect(add_query_arg([ 'page' => 'ansico-diagnosekoder', 'status' => 'error', ], admin_url('options-general.php'))); exit; } }