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 '
'; echo '

' . esc_html(sprintf($is_update ? __('Opdaterer %s', 'ansico-plugins') : __('Installerer %s', 'ansico-plugins'), $repo_name)) . '

'; $skin = new Automatic_Upgrader_Skin(); $upgrader = new Plugin_Upgrader($skin); if ($is_update) { $result = $upgrader->run(array( 'package' => $zip_asset['browser_download_url'], 'destination' => WP_PLUGIN_DIR, 'clear_destination' => true, 'clear_working' => true, 'hook_extra' => array( 'plugin' => $existing_plugin_file, 'type' => 'plugin', 'action' => 'update', ), )); } else { $result = $upgrader->install($zip_asset['browser_download_url']); } remove_filter('http_request_args', array($this, 'inject_auth_header'), 10); if (is_wp_error($result) || false === $result) { $message = is_wp_error($result) ? $result->get_error_message() : __('Plugin installation mislykkedes.', 'ansico-plugins'); echo '

' . esc_html($message) . '

'; echo '

' . esc_html__('Tilbage til Ansico Plugins', 'ansico-plugins') . '

'; echo '
'; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; } $plugin_file = $is_update ? $existing_plugin_file : $upgrader->plugin_info(); if ($plugin_file) { $repo = $client->get_repository($owner, $repo_name); Ansico_Plugins::set_managed_plugin($plugin_file, array( 'slug' => $slug, 'owner' => $owner, 'repo' => $repo_name, 'description' => !is_wp_error($repo) && !empty($repo['description']) ? $repo['description'] : '', 'repo_html_url' => !is_wp_error($repo) && !empty($repo['html_url']) ? $repo['html_url'] : '', )); wp_clean_plugins_cache(true); } echo '

' . esc_html($is_update ? __('Plugin opdateret.', 'ansico-plugins') : __('Plugin installeret.', 'ansico-plugins')) . '

'; echo '

' . 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 '
'; echo '

' . esc_html(sprintf(__('Afinstallerer %s', 'ansico-plugins'), $repo_name)) . '

'; if (is_plugin_active($plugin_file)) { deactivate_plugins($plugin_file, true); } $result = delete_plugins(array($plugin_file)); if (is_wp_error($result) || !$result) { $message = is_wp_error($result) ? $result->get_error_message() : __('Plugin kunne ikke afinstalleres.', 'ansico-plugins'); echo '

' . esc_html($message) . '

'; echo '

' . esc_html__('Tilbage til Ansico Plugins', 'ansico-plugins') . '

'; echo '
'; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; } $managed = Ansico_Plugins::get_managed_plugins(); if (isset($managed[$plugin_file])) { unset($managed[$plugin_file]); update_option(ANSICO_PLUGINS_MANAGED_OPTION, $managed, false); } wp_clean_plugins_cache(true); echo '

' . esc_html__('Plugin afinstalleret.', 'ansico-plugins') . '

'; echo '

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