Upload via GUI (39 Dateien)

This commit is contained in:
2026-08-14 07:59:43 +00:00
parent 05a2e1c7b6
commit 90f388f49c
31 changed files with 16919 additions and 5554 deletions
+142
View File
@@ -0,0 +1,142 @@
<?php
/**
* WP Multi Modul: Admin-Dashboard Update-Anzeige
*
* Automatisch aus wp-multi.php ausgelagert. Wird über den Loader in
* wp-multi.php eingebunden (nur wenn das WP Multi Toolkit aktiv ist).
*/
if (!defined('ABSPATH')) { exit; }
/*
* Admin Dashboard Update-Anzeige
*/
define('WP_MULTI_UPDATE_REPO', 'wp-multi');
define('WP_MULTI_UPDATE_CACHE_KEY', 'wp_multi_latest_release');
define('WP_MULTI_UPDATE_HOST', 'git.viper.ipv64.net');
// Fragt den Gitea-Server nach dem neuesten Release ab (gecached via Transient)
function wp_multi_get_latest_release() {
$cached = get_transient(WP_MULTI_UPDATE_CACHE_KEY);
if ($cached !== false) {
return $cached;
}
$api_url = 'https://' . WP_MULTI_UPDATE_HOST . '/api/v1/repos/M_Viper/' . WP_MULTI_UPDATE_REPO . '/releases';
$response = wp_remote_get($api_url, array(
'timeout' => 10,
'headers' => array('Accept' => 'application/json'),
));
if (is_wp_error($response)) {
// Kurz erneut versuchen statt für 12 Stunden zu sperren
set_transient(WP_MULTI_UPDATE_CACHE_KEY, false, HOUR_IN_SECONDS);
return false;
}
$body = wp_remote_retrieve_body($response);
$releases = json_decode($body, true);
if (empty($releases) || !is_array($releases)) {
set_transient(WP_MULTI_UPDATE_CACHE_KEY, false, HOUR_IN_SECONDS);
return false;
}
usort($releases, function ($a, $b) {
$a_date = !empty($a['created_at']) ? $a['created_at'] : '';
$b_date = !empty($b['created_at']) ? $b['created_at'] : '';
return strtotime($b_date) - strtotime($a_date);
});
$latest = false;
foreach ($releases as $release) {
if (!empty($release['prerelease'])) {
continue;
}
if (!empty($release['tag_name'])) {
// Nur Download-URLs auf dem erwarteten Host akzeptieren
$html_url = !empty($release['html_url']) ? $release['html_url'] : '';
$release_host = $html_url ? wp_parse_url($html_url, PHP_URL_HOST) : '';
$latest = array(
'version' => ltrim($release['tag_name'], 'v'),
'url' => ($release_host === WP_MULTI_UPDATE_HOST)
? esc_url_raw($html_url)
: 'https://' . WP_MULTI_UPDATE_HOST . '/M_Viper/' . WP_MULTI_UPDATE_REPO . '/releases',
);
break;
}
}
set_transient(WP_MULTI_UPDATE_CACHE_KEY, $latest, 12 * HOUR_IN_SECONDS);
return $latest;
}
// Liest die installierte Version aus dem Plugin-Header
function wp_multi_get_installed_version() {
if (!function_exists('get_plugin_data')) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$data = get_plugin_data(WP_MULTI_FILE, false, false);
return !empty($data['Version']) ? $data['Version'] : '0';
}
// Dashboard-Widget registrieren
function wp_multi_add_update_dashboard_widget() {
wp_add_dashboard_widget(
'wp_multi_update_widget',
__('WP Multi - Update-Status', 'wp-multi'),
'wp_multi_update_dashboard_widget_content'
);
}
add_action('wp_dashboard_setup', 'wp_multi_add_update_dashboard_widget');
// Zeigt im Dashboard-Widget an, ob WP Multi aktuell ist oder ein Update verfügbar ist
function wp_multi_update_dashboard_widget_content() {
$installed_version = wp_multi_get_installed_version();
$latest = wp_multi_get_latest_release();
echo '<p><strong>' . esc_html__('Installierte Version:', 'wp-multi') . '</strong> ' . esc_html($installed_version) . '</p>';
if (!$latest || empty($latest['version'])) {
echo '<p>' . esc_html__('Der Update-Server konnte nicht erreicht werden.', 'wp-multi') . '</p>';
return;
}
if (version_compare($latest['version'], $installed_version, '>')) {
echo '<p style="color:#dc3545;"><strong>' . esc_html__('Update verfügbar:', 'wp-multi') . '</strong> ' . esc_html($latest['version']) . '</p>';
echo '<p><a href="' . esc_url($latest['url']) . '" target="_blank" class="button button-primary">' . esc_html__('Update herunterladen', 'wp-multi') . '</a></p>';
} else {
echo '<p style="color:#28a745;"><strong>' . esc_html__('WP Multi ist aktuell.', 'wp-multi') . '</strong></p>';
}
}
// Admin-Hinweis anzeigen, wenn ein Update verfügbar ist
function wp_multi_update_admin_notice() {
if (!current_user_can('manage_options') || !is_admin()) {
return;
}
$installed_version = wp_multi_get_installed_version();
$latest = wp_multi_get_latest_release();
if (!$latest || empty($latest['version'])) {
return;
}
if (version_compare($latest['version'], $installed_version, '>')) {
printf(
'<div class="notice notice-warning is-dismissible"><p>%1$s <a href="%2$s" target="_blank">%3$s</a></p></div>',
sprintf(
esc_html__('Für "WP Multi" ist ein Update verfügbar: Version %1$s (installiert: %2$s).', 'wp-multi'),
esc_html($latest['version']),
esc_html($installed_version)
),
esc_url($latest['url']),
esc_html__('Jetzt herunterladen', 'wp-multi')
);
}
}
add_action('admin_notices', 'wp_multi_update_admin_notice');