Dieses AddOn ermöglicht die einfache Installation von AddOns oder Plugins durch Hochladen von ZIP-Dateien, Installation über eine URL oder direkt von GitHub.
WICHTIGER HINWEIS: Dieses AddOn ist ausschließlich für erfahrene Systemadministrator:innen bestimmt. Die unsachgemäße Anwendung kann zu unerwartetem Verhalten oder Schäden führen.
- ZIP-Upload über den Browser
- Installation über eine URL, die direkt zu einer ZIP-Datei führt
- GitHub-Integration:
- Installation direkt von GitHub-Repositories
- Repository-Suche nach Benutzer/Organisation
- Anzeige von Beschreibungen und Details der Repositories
- Download und Installation über den Installer oder
- Download der ZIP-Datei
- Entpacken in den AddOns-Ordner als
/redaxo/src/addons/zip_install/
- Installation und Aktivierung in REDAXO
Das AddOn ist im Installer unter "ZIP Upload/GitHub" zu finden und bietet drei Möglichkeiten zur Installation:
- ZIP-Upload: Direkter Upload einer ZIP-Datei eines AddOns/Plugins
- URL-Installation: Eingabe eines Links zu einer ZIP-Datei oder einem GitHub-Repository
- GitHub-Integration: Suche nach GitHub-Repositories und direkte Installation
Folgende GitHub-URL-Formate werden unterstützt:
- Repository-URL:
https://github.com/FriendsOfREDAXO/demo_base
- Spezifischer Branch:
https://github.com/FriendsOfREDAXO/demo_base/tree/main
Plugins werden automatisch in das entsprechende Verzeichnis des zugehörigen AddOns installiert. Der Name wird dabei automatisch aus der package.yml
übernommen.
- Das AddOn überschreibt vorhandene Dateien ohne Rückfrage.
- Es wird keine Installation oder Neuinstallation durchgeführt.
- Abhängigkeiten werden nicht geprüft.
- Die
update.php
des AddOns wird nicht ausgeführt. - Der Upload ist auf 50 MB begrenzt.
- REDAXO >= 5.18
- PHP >= 8.1
- PHP-Erweiterungen: zip, fileinfo
Diese Dokumentation beschreibt die ZipInstall
Klasse, die zum Installieren von REDAXO Addons und Plugins aus ZIP-Archiven verwendet wird. Die Klasse bietet Funktionen zum Hochladen von ZIP-Dateien, zum Herunterladen von ZIP-Dateien von URLs (inkl. GitHub), sowie zum Extrahieren und Installieren der Addons/Plugins.
Klassenname: ZipInstall
Namespace: FriendsOfRedaxo\ZipInstall
public function __construct()
Beschreibung:
Initialisiert die ZipInstall
Klasse. Erstellt einen temporären Ordner im Cache-Verzeichnis des Addons, falls dieser nicht existiert.
Parameter:
- Keine
Rückgabewert:
- Keiner
public function handleFileUpload(): string
Beschreibung:
Verarbeitet den Upload einer ZIP-Datei, die über ein HTML-Formular hochgeladen wurde.
Parameter:
- Keine
Rückgabewert:
string
: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.
Funktionsweise:
- Prüft, ob eine Datei über
$_FILES['zip_file']
hochgeladen wurde. - Überprüft den MIME-Type der hochgeladenen Datei (erlaubt sind
application/zip
undapplication/octet-stream
). - Überprüft die Dateigröße anhand der Konfigurationseinstellung
upload_max_size
. - Verschiebt die hochgeladene Datei in den temporären Ordner mit einem eindeutigen Dateinamen.
- Ruft die Methode
installZip()
auf, um die Installation durchzuführen.
Fehlermeldungen:
zip_install_upload_failed
: Upload fehlgeschlagen.zip_install_mime_error
: Ungültiger Dateityp. Bitte laden Sie eine ZIP-Datei hoch.zip_install_size_error
: Die Dateigröße überschreitet das Limit von%%size%%
MB.
public function handleUrlInput(string $url): string
Beschreibung:
Verarbeitet eine URL, die auf eine ZIP-Datei oder ein GitHub-Repository verweist.
Parameter:
$url
(string
): Die URL, die verarbeitet werden soll.
Rückgabewert:
string
: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.
Funktionsweise:
- Überprüft, ob die URL nicht leer ist.
- Entfernt den abschließenden Slash von der URL.
- Prüft, ob die URL ein GitHub-Repository ist und generiert die Download-URL der ZIP-Datei.
- Lädt die ZIP-Datei in den temporären Ordner mit einem eindeutigen Dateinamen herunter.
- Ruft die Methode
installZip()
auf, um die Installation durchzuführen.
Fehlermeldungen:
zip_install_invalid_url
: Ungültige URL.zip_install_url_file_not_loaded
: Die Datei konnte von der angegebenen URL nicht geladen werden.
protected function installZip(string $tmpFile): string
Beschreibung:
Extrahiert und installiert ein Addon oder Plugin aus einer temporären ZIP-Datei.
Parameter:
$tmpFile
(string
): Der Pfad zur temporären ZIP-Datei.
Rückgabewert:
string
: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.
Funktionsweise:
- Öffnet die ZIP-Datei mit der
ZipArchive
-Klasse. - Sucht die
package.yml
Datei im ZIP-Archiv. - Extrahiert den Inhalt des ZIP-Archivs in einen temporären Ordner.
- Liest die
package.yml
Datei, um die Addon-/Plugin-Informationen zu erhalten. - Kopiert die Dateien an den entsprechenden Speicherort im REDAXO-System.
- Löscht den temporären Ordner und die temporäre ZIP-Datei.
Fehlermeldungen:
zip_install_invalid_addon
: Das Addon/Plugin ist ungültig oder konnte nicht installiert werden.zip_install_plugin_parent_missing
: Das Parent-Addon für dieses Plugin ist nicht vorhanden.
public function getGitHubRepos(string $username): array
Beschreibung:
Holt eine Liste von GitHub-Repositories für einen bestimmten Benutzer oder eine Organisation.
Parameter:
$username
(string
): Der GitHub-Benutzername oder Name der Organisation.
Rückgabewert:
array<int, array{name: string, description: ?string, url: string, download_url: string, default_branch: string}>
: Gibt ein Array von GitHub-Repositories zurück. Jedes Repository enthält Name, Beschreibung, URL, Download-URL und den Default-Branch.
Funktionsweise:
- Erstellt eine API-Anfrage an GitHub für die Repositories.
- Filtert Fork, archivierte und deaktivierte Repositories heraus.
- Formatiert die Repositories in ein einfach zu handhabendes Array.
protected function isValidUrl(string $url): bool
Beschreibung:
Überprüft, ob eine URL gültig und erreichbar ist.
Parameter:
$url
(string
): Die zu überprüfende URL.
Rückgabewert:
bool
: Gibttrue
zurück, wenn die URL gültig und erreichbar ist, sonstfalse
.
Funktionsweise:
- Führt eine
get_headers()
Anfrage durch. - Überprüft, ob der Statuscode
200
enthalten ist.
protected function downloadFile(string $url, string $destination): bool
Beschreibung:
Lädt eine Datei von einer URL herunter und speichert sie auf dem Server.
Parameter:
$url
(string
): Die URL der herunterzuladenden Datei.$destination
(string
): Der Dateipfad zum Speichern der heruntergeladenen Datei.
Rückgabewert:
bool
: Gibttrue
zurück, wenn die Datei erfolgreich heruntergeladen und gespeichert wurde, sonstfalse
.
Funktionsweise:
- Verwendet
file_get_contents()
um den Inhalt der URL abzurufen. - Speichert den Inhalt in die angegebene Datei mit
rex_file::put()
.
Die ZipInstall
Klasse bietet eine umfassende Möglichkeit zur Installation von REDAXO Addons und Plugins per ZIP-Upload oder URL. Sie enthält Sicherheitsvorkehrungen (MIME-Type Überprüfung, eindeutige Dateinamen), um das Risiko von Sicherheitslücken zu minimieren und die Stabilität der Installation zu gewährleisten.
MIT Lizenz, siehe LICENSE.md
- Ursprüngliches AddOn von @aeberhard