Add Git Updater support with smart source detection

This commit is contained in:
2025-04-12 00:03:10 +01:00
parent 322cada133
commit cc04f00a96
7 changed files with 216 additions and 3 deletions

6
.gitignore vendored
View File

@ -29,6 +29,10 @@ bower_components/
composer.lock composer.lock
package-lock.json package-lock.json
# Composer
vendor/
composer.phar
# Build files # Build files
build/ build/
dist/ dist/
@ -76,4 +80,4 @@ codecov.yml
webpack.config.js webpack.config.js
gulpfile.js gulpfile.js
Gruntfile.js Gruntfile.js
*.zip *.zip

View File

@ -7,10 +7,12 @@ All notable changes to this project will be documented in this file.
- Full translation support with POT file - Full translation support with POT file
- JavaScript localization for better multilingual support - JavaScript localization for better multilingual support
- Plugin constants for improved code organization - Plugin constants for improved code organization
- Git Updater support for updates from GitHub and Gitea
### Changed ### Changed
- Updated code to follow WordPress internationalization best practices - Updated code to follow WordPress internationalization best practices
- Improved asset loading with version constants - Improved asset loading with version constants
- Smart update detection based on installation source
## [1.5.0] - 2024-05-15 ## [1.5.0] - 2024-05-15
### Added ### Added

View File

@ -18,6 +18,10 @@ ZIP_FILE="${PLUGIN_SLUG}-${VERSION}.zip"
echo "Creating build directory..." echo "Creating build directory..."
mkdir -p $BUILD_DIR mkdir -p $BUILD_DIR
# Install composer dependencies
echo "Installing composer dependencies..."
composer install --no-dev --optimize-autoloader
# Copy required files # Copy required files
echo "Copying plugin files..." echo "Copying plugin files..."
cp fix-plugin-does-not-exist-notices.php $BUILD_DIR/ cp fix-plugin-does-not-exist-notices.php $BUILD_DIR/
@ -25,6 +29,18 @@ cp readme.txt $BUILD_DIR/
cp LICENSE $BUILD_DIR/ cp LICENSE $BUILD_DIR/
cp README.md $BUILD_DIR/ cp README.md $BUILD_DIR/
cp CHANGELOG.md $BUILD_DIR/ cp CHANGELOG.md $BUILD_DIR/
cp composer.json $BUILD_DIR/
# Copy directories
echo "Copying directories..."
mkdir -p $BUILD_DIR/includes
cp -r includes/* $BUILD_DIR/includes/
mkdir -p $BUILD_DIR/languages
cp -r languages/* $BUILD_DIR/languages/
mkdir -p $BUILD_DIR/assets
cp -r assets/* $BUILD_DIR/assets/
mkdir -p $BUILD_DIR/vendor
cp -r vendor/* $BUILD_DIR/vendor/
# Create ZIP file # Create ZIP file
echo "Creating ZIP file..." echo "Creating ZIP file..."
@ -39,4 +55,4 @@ if [ -f "$ZIP_FILE" ]; then
else else
echo "❌ Build failed: ZIP file was not created" echo "❌ Build failed: ZIP file was not created"
exit 1 exit 1
fi fi

21
composer.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "wpallstars/fix-plugin-does-not-exist-notices",
"description": "Adds missing plugins to the plugins list with a 'Remove Reference' link so you can permanently clean up invalid plugin entries and remove error notices.",
"type": "wordpress-plugin",
"license": "GPL-2.0-or-later",
"authors": [
{
"name": "Marcus Quinn",
"email": "6428977+marcusquinn@users.noreply.github.com"
}
],
"require": {
"php": ">=7.0",
"afragen/git-updater-lite": "^1"
},
"autoload": {
"psr-4": {
"WPAllStars\\FixPluginDoesNotExistNotices\\": "includes/"
}
}
}

View File

@ -9,6 +9,7 @@
* *
* @wordpress-plugin * @wordpress-plugin
* Plugin Name: Fix 'Plugin file does not exist.' Notices * Plugin Name: Fix 'Plugin file does not exist.' Notices
* Plugin URI: https://wordpress.org/plugins/fix-plugin-does-not-exist-notices/
* Description: Adds missing plugins to the plugins list with a "Remove Reference" link so you can permanently clean up invalid plugin entries and remove error notices. * Description: Adds missing plugins to the plugins list with a "Remove Reference" link so you can permanently clean up invalid plugin entries and remove error notices.
* Version: 1.6.0 * Version: 1.6.0
* Author: Marcus Quinn * Author: Marcus Quinn
@ -19,6 +20,10 @@
* Domain Path: /languages * Domain Path: /languages
* Requires at least: 5.0 * Requires at least: 5.0
* Requires PHP: 7.0 * Requires PHP: 7.0
* GitHub Plugin URI: wpallstars/fix-plugin-does-not-exist-notices
* GitHub Branch: main
* Gitea Plugin URI: wpallstars/fix-plugin-does-not-exist-notices
* Gitea Branch: main
* *
* This plugin is free software: you can redistribute it and/or modify * This plugin is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -395,3 +400,14 @@ class Fix_Plugin_Does_Not_Exist_Notices {
// Initialize the plugin class. // Initialize the plugin class.
new Fix_Plugin_Does_Not_Exist_Notices(); new Fix_Plugin_Does_Not_Exist_Notices();
// Initialize the updater if composer autoload exists
$autoloader = __DIR__ . '/vendor/autoload.php';
if (file_exists($autoloader)) {
require_once $autoloader;
// Initialize the updater if the class exists
if (class_exists('\WPAllStars\FixPluginDoesNotExistNotices\Updater')) {
new \WPAllStars\FixPluginDoesNotExistNotices\Updater(__FILE__);
}
}

152
includes/Updater.php Normal file
View File

@ -0,0 +1,152 @@
<?php
/**
* Plugin Updater
*
* @package FixPluginDoesNotExistNotices
*/
namespace WPAllStars\FixPluginDoesNotExistNotices;
/**
* Class Updater
*
* Handles plugin updates from different sources based on installation origin.
*/
class Updater {
/**
* Plugin file path
*
* @var string
*/
private $plugin_file;
/**
* Installation source
*
* @var string
*/
private $source;
/**
* Constructor
*
* @param string $plugin_file Main plugin file path.
*/
public function __construct($plugin_file) {
$this->plugin_file = $plugin_file;
$this->source = $this->determine_installation_source();
$this->init();
}
/**
* Initialize the updater based on the installation source
*
* @return void
*/
public function init() {
// Only initialize Git Updater if not installed from WordPress.org
if ($this->source !== 'wordpress.org') {
$this->init_git_updater();
}
}
/**
* Determine the installation source of the plugin
*
* @return string Installation source: 'github', 'gitea', or 'wordpress.org'
*/
private function determine_installation_source() {
// Default to WordPress.org
$source = 'wordpress.org';
// Check if the plugin was installed from GitHub
if ($this->is_github_installation()) {
$source = 'github';
}
// Check if the plugin was installed from Gitea
elseif ($this->is_gitea_installation()) {
$source = 'gitea';
}
return $source;
}
/**
* Check if the plugin was installed from GitHub
*
* @return bool
*/
private function is_github_installation() {
// Check for GitHub-specific markers in the plugin directory
$plugin_dir = plugin_dir_path($this->plugin_file);
// Look for .git directory with GitHub remote
if (file_exists($plugin_dir . '.git')) {
$git_config = @file_get_contents($plugin_dir . '.git/config');
if ($git_config && strpos($git_config, 'github.com') !== false) {
return true;
}
}
// Check for GitHub-specific files that might indicate it was downloaded from GitHub
if (file_exists($plugin_dir . '.github')) {
return true;
}
return false;
}
/**
* Check if the plugin was installed from Gitea
*
* @return bool
*/
private function is_gitea_installation() {
// Check for Gitea-specific markers in the plugin directory
$plugin_dir = plugin_dir_path($this->plugin_file);
// Look for .git directory with Gitea remote
if (file_exists($plugin_dir . '.git')) {
$git_config = @file_get_contents($plugin_dir . '.git/config');
if ($git_config && strpos($git_config, 'gitea.wpallstars.com') !== false) {
return true;
}
}
return false;
}
/**
* Initialize Git Updater Lite
*
* @return void
*/
private function init_git_updater() {
// Check if the Git Updater Lite class exists (composer autoload)
if (!class_exists('\\Fragen\\Git_Updater\\Lite')) {
// Try to include the autoloader
$autoloader = dirname($this->plugin_file) . '/vendor/autoload.php';
if (file_exists($autoloader)) {
require_once $autoloader;
} else {
return; // Can't load Git Updater Lite
}
}
// Set the update server based on the installation source
add_filter('gul_update_server', function() {
if ($this->source === 'github') {
return 'https://wpallstars.com'; // GitHub update server
} elseif ($this->source === 'gitea') {
return 'https://wpallstars.com'; // Gitea update server
}
return '';
});
// Initialize Git Updater Lite
if (class_exists('\\Fragen\\Git_Updater\\Lite')) {
(new \Fragen\Git_Updater\Lite($this->plugin_file))->run();
}
}
}

View File

@ -93,8 +93,10 @@ Although this plugin consumes minimal disk space, and doesn't run unless you are
* Added full translation support with POT file * Added full translation support with POT file
* Added JavaScript localization for better multilingual support * Added JavaScript localization for better multilingual support
* Added plugin constants for improved code organization * Added plugin constants for improved code organization
* Added Git Updater support for updates from GitHub and Gitea
* Updated code to follow WordPress internationalization best practices * Updated code to follow WordPress internationalization best practices
* Improved asset loading with version constants * Improved asset loading with version constants
* Added smart update detection based on installation source
= 1.5.0 = = 1.5.0 =
* Improved compatibility with WordPress 6.4 * Improved compatibility with WordPress 6.4
@ -169,7 +171,7 @@ Although this plugin consumes minimal disk space, and doesn't run unless you are
== Upgrade Notice == == Upgrade Notice ==
= 1.6.0 = = 1.6.0 =
Added full translation support! The plugin can now be translated into any language. Added full translation support and Git Updater compatibility for direct updates from GitHub and Gitea!
= 1.5.0 = = 1.5.0 =
Improved compatibility with WordPress 6.4 and accessibility enhancements for screen readers! Improved compatibility with WordPress 6.4 and accessibility enhancements for screen readers!