get_latest_release($owner, $repo_name); if (is_wp_error($release)) { wp_die(esc_html($release->get_error_message())); } $zip_asset = $client->find_zip_asset($release); if (!$zip_asset || empty($zip_asset['browser_download_url'])) { wp_die(esc_html__('Ingen installérbar ZIP-fil fundet i seneste release.', 'ansico-plugins')); } add_filter('http_request_args', array($this, 'inject_auth_header'), 10, 2); if (!function_exists('get_current_screen')) { require_once ABSPATH . 'wp-admin/includes/screen.php'; } set_current_screen('plugins_page_ansico-plugins-catalog'); require_once ABSPATH . 'wp-admin/admin-header.php'; $existing_plugin_file = $this->find_existing_plugin_file($owner, $repo_name, $slug); $is_update = '' !== $existing_plugin_file; echo '
' . esc_html($message) . '
' . esc_html__('Tilbage til Ansico Plugins', 'ansico-plugins') . '
'; echo '' . esc_html($is_update ? __('Plugin opdateret.', 'ansico-plugins') : __('Plugin installeret.', 'ansico-plugins')) . '
' . esc_html__('Tilbage til Ansico Plugins', 'ansico-plugins') . ' '; if ($plugin_file && function_exists('is_plugin_inactive') && is_plugin_inactive($plugin_file)) { $activate_url = wp_nonce_url(admin_url('plugins.php?action=activate&plugin=' . rawurlencode($plugin_file)), 'activate-plugin_' . $plugin_file); echo '' . esc_html__('Aktivér plugin', 'ansico-plugins') . ' '; } echo '' . esc_html__('Gå til Plugins', 'ansico-plugins') . '
'; echo ''; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; } public function delete_plugin($repo_name, $plugin_file) { require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/plugin.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; if ('' === $plugin_file || !file_exists(WP_PLUGIN_DIR . '/' . ltrim($plugin_file, '/'))) { wp_die(esc_html__('Pluginfil blev ikke fundet.', 'ansico-plugins')); } if (!function_exists('deactivate_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } if (!function_exists('get_current_screen')) { require_once ABSPATH . 'wp-admin/includes/screen.php'; } set_current_screen('plugins_page_ansico-plugins-catalog'); require_once ABSPATH . 'wp-admin/admin-header.php'; echo '' . esc_html($message) . '
' . esc_html__('Tilbage til Ansico Plugins', 'ansico-plugins') . '
'; echo '' . esc_html__('Plugin afinstalleret.', 'ansico-plugins') . '
' . esc_html__('Tilbage til Ansico Plugins', 'ansico-plugins') . '
'; echo ''; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; } private function find_existing_plugin_file($owner, $repo_name, $slug) { if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $managed_plugins = Ansico_Plugins::get_managed_plugins(); foreach ($managed_plugins as $plugin_file => $meta) { if (!empty($meta['owner']) && !empty($meta['repo']) && $meta['owner'] === $owner && $meta['repo'] === $repo_name) { return $plugin_file; } } $plugins = get_plugins(); $slug = sanitize_title($slug); foreach ($plugins as $plugin_file => $data) { if (dirname($plugin_file) === $slug) { return $plugin_file; } } return ''; } public function inject_auth_header($args, $url) { $settings = Ansico_Plugins::get_settings(); $base = trailingslashit($settings['forgejo_base_url']); if (empty($settings['access_token']) || strpos($url, $base) !== 0) { return $args; } if (empty($args['headers']) || !is_array($args['headers'])) { $args['headers'] = array(); } $args['headers']['Authorization'] = 'token ' . trim((string) $settings['access_token']); $args['sslverify'] = !empty($settings['verify_ssl']); return $args; } }