5 Commits
1.0.1 ... 1.0.5

Author SHA1 Message Date
ef13ce4598 Release 1.0.5 2026-04-15 21:44:18 +02:00
d8cdf8deee Standardize WordPress readme format 2026-04-15 21:36:07 +02:00
4d051c19b9 Release 1.0.4 2026-04-14 16:28:35 +02:00
064e082eb8 Fix self-update loop and bump version to 1.0.3 2026-04-14 13:54:05 +02:00
23606ea4f4 Fix plugin details popup metadata 2026-04-13 22:47:39 +02:00
2 changed files with 146 additions and 17 deletions

View File

@@ -5,7 +5,7 @@
* Description: Aktualisiert KGV-Plugins direkt aus den Gitea-Repositories.
* Update URI: https://git.apex-project.de/Wordpress_Plugins/KGV-Updater.git
* Gitea Plugin URI: https://git.apex-project.de/Wordpress_Plugins/KGV-Updater.git
* Version: 1.0.1
* Version: 1.0.5
* Author: Ronny Grobel
* Text Domain: kgv-updater
*/
@@ -17,6 +17,7 @@ if ( ! defined( 'ABSPATH' ) ) {
final class KGV_Updater {
const GITEA_HOST = 'git.apex-project.de';
const GITEA_TOKEN = '';
const INSTALLED_TAGS_OPTION = 'kgv_updater_installed_tags';
private static $instance = null;
@@ -31,6 +32,7 @@ final class KGV_Updater {
private function __construct() {
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'inject_updates' ) );
add_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 );
add_action( 'upgrader_process_complete', array( $this, 'mark_installed_release_tags' ), 10, 2 );
}
public function inject_updates( $transient ) {
@@ -39,17 +41,22 @@ final class KGV_Updater {
}
$plugins = $this->get_managed_plugins();
$installed_tags = $this->get_installed_tags();
foreach ( $plugins as $plugin_file => $plugin_data ) {
$current_version = isset( $plugin_data['Version'] ) ? $plugin_data['Version'] : '';
$repo_url = isset( $plugin_data['UpdateURI'] ) ? $plugin_data['UpdateURI'] : '';
$release = $this->get_release_data( $repo_url );
$installed_tag = isset( $installed_tags[ $plugin_file ] ) ? (string) $installed_tags[ $plugin_file ] : '';
$release_tag = isset( $release['tag'] ) ? (string) $release['tag'] : '';
if ( empty( $release['version'] ) ) {
continue;
}
if ( version_compare( $release['version'], $current_version, '>' ) ) {
$tag_already_installed = '' !== $installed_tag && '' !== $release_tag && 0 === strcasecmp( $installed_tag, $release_tag );
if ( version_compare( $release['version'], $current_version, '>' ) && ! $tag_already_installed ) {
$transient->response[ $plugin_file ] = (object) array(
'id' => $repo_url,
'slug' => dirname( $plugin_file ),
@@ -74,6 +81,54 @@ final class KGV_Updater {
return $transient;
}
public function mark_installed_release_tags( $upgrader, $hook_extra ) {
if ( ! is_array( $hook_extra ) ) {
return;
}
if ( empty( $hook_extra['type'] ) || 'plugin' !== $hook_extra['type'] ) {
return;
}
if ( empty( $hook_extra['action'] ) || 'update' !== $hook_extra['action'] ) {
return;
}
if ( empty( $hook_extra['plugins'] ) || ! is_array( $hook_extra['plugins'] ) ) {
return;
}
$managed_plugins = $this->get_managed_plugins();
if ( empty( $managed_plugins ) ) {
return;
}
$update_transient = get_site_transient( 'update_plugins' );
foreach ( $hook_extra['plugins'] as $plugin_file ) {
if ( ! isset( $managed_plugins[ $plugin_file ] ) ) {
continue;
}
$tag = '';
if ( is_object( $update_transient ) && isset( $update_transient->response[ $plugin_file ] ) && is_object( $update_transient->response[ $plugin_file ] ) ) {
$package_url = isset( $update_transient->response[ $plugin_file ]->package ) ? (string) $update_transient->response[ $plugin_file ]->package : '';
$tag = $this->extract_tag_from_package_url( $package_url );
}
if ( '' === $tag ) {
$repo_url = isset( $managed_plugins[ $plugin_file ]['UpdateURI'] ) ? (string) $managed_plugins[ $plugin_file ]['UpdateURI'] : '';
$release = $this->get_release_data( $repo_url );
$tag = isset( $release['tag'] ) ? (string) $release['tag'] : '';
}
if ( '' !== $tag ) {
$this->set_installed_tag( $plugin_file, $tag );
}
}
}
public function plugins_api( $result, $action, $args ) {
if ( 'plugin_information' !== $action || empty( $args->slug ) ) {
return $result;
@@ -88,15 +143,32 @@ final class KGV_Updater {
$repo_url = isset( $plugin_data['UpdateURI'] ) ? $plugin_data['UpdateURI'] : '';
$release = $this->get_release_data( $repo_url );
$homepage = ! empty( $plugin_data['PluginURI'] ) ? $plugin_data['PluginURI'] : $repo_url;
$author_name = isset( $plugin_data['AuthorName'] ) ? (string) $plugin_data['AuthorName'] : '';
$author_uri = isset( $plugin_data['AuthorURI'] ) ? (string) $plugin_data['AuthorURI'] : '';
$author_display = $author_name;
if ( '' !== $author_name && '' !== $author_uri ) {
$author_display = sprintf(
'<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s</a>',
esc_url( $author_uri ),
esc_html( $author_name )
);
}
return (object) array(
'name' => $plugin_data['Name'],
'slug' => dirname( $plugin_file ),
'version' => ! empty( $release['version'] ) ? $release['version'] : $plugin_data['Version'],
'author' => $plugin_data['AuthorName'],
'homepage' => $repo_url,
'section' => array(
'author' => $author_display,
'author_profile'=> $author_uri,
'homepage' => $homepage,
'plugin_url' => $homepage,
'sections' => array(
'description' => ! empty( $plugin_data['Description'] ) ? $plugin_data['Description'] : 'KGV Plugin aus Gitea.',
'installation' => 'Installation erfolgt wie gewohnt in WordPress. Updates werden automatisch ueber KGV Updater bereitgestellt.',
'changelog' => 'Aktuelle Version: ' . ( ! empty( $release['version'] ) ? $release['version'] : $plugin_data['Version'] ),
),
'download_link' => ! empty( $release['package'] ) ? $release['package'] : '',
);
@@ -245,6 +317,35 @@ final class KGV_Updater {
);
}
private function extract_tag_from_package_url( $package_url ) {
if ( '' === $package_url ) {
return '';
}
$path = (string) wp_parse_url( $package_url, PHP_URL_PATH );
if ( preg_match( '#/archive/([^/]+)\.zip$#i', $path, $matches ) ) {
return rawurldecode( $matches[1] );
}
return '';
}
private function get_installed_tags() {
$tags = get_site_option( self::INSTALLED_TAGS_OPTION, array() );
return is_array( $tags ) ? $tags : array();
}
private function set_installed_tag( $plugin_file, $tag ) {
if ( '' === $plugin_file || '' === $tag ) {
return;
}
$tags = $this->get_installed_tags();
$tags[ $plugin_file ] = $tag;
update_site_option( self::INSTALLED_TAGS_OPTION, $tags );
}
}
KGV_Updater::instance();

View File

@@ -1,16 +1,44 @@
KGV Updater - WordPress Plugin
=== KGV Updater ===
Contributors: ronnygrobel
Tags: updater, update uri, gitea, plugin updates, maintenance
Requires at least: 6.0
Tested up to: 6.8
Stable tag: 1.0.5
Requires PHP: 7.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Beschreibung:
KGV Updater prueft KGV-Plugins mit Update URI gegen Gitea-Repositories und stellt Updates im WordPress-Backend bereit.
Aktualisiert KGV-Plugins ueber Update-Informationen aus Gitea-Repositories.
Voraussetzung:
- Plugins besitzen eine gueltige `Update URI` auf dem Gitea-Server.
== Description ==
Installation:
1. Plugin in `wp-content/plugins/KGV-Updater/` ablegen
2. In WordPress aktivieren
3. Unter `Einstellungen > KGV Updater` optional Host/Token eintragen
KGV Updater erweitert den WordPress-Updateprozess fuer KGV-Plugins, die eine gueltige `Update URI` nutzen.
Hinweis:
- Fuer private Repositories wird ein Gitea Token benoetigt.
- Die Pruefergebnisse werden kurzfristig gecacht.
= Features =
* Update-Pruefung fuer KGV-Plugins
* Auswertung von Gitea-Repository-Informationen
* Konfiguration von Host und Token im Backend
* Caching der Pruefergebnisse
== Installation ==
1. Plugin in `wp-content/plugins/KGV-Updater/` hochladen.
2. Plugin aktivieren.
3. Optional Host und Token unter Einstellungen > KGV Updater eintragen.
== Frequently Asked Questions ==
= Wird ein Token fuer private Repositories benoetigt? =
Ja, fuer private Repositories ist ein passender Gitea-Token erforderlich.
== Changelog ==
= 1.0.5 =
* Versionsabgleich zwischen Plugin-Header und Readme.
* WordPress-Readme-Format weiter vereinheitlicht.
= 1.0.4 =
* Aktuelle Version laut Plugin-Header.
* Stabilitaets- und Wartungsupdates.