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.
Will man ein vorhandenes AddOn ersetzen, sollte dieses für eine saubere Installation vorher deinstalliert werden, sonst bleiben evtl. alte Dateien erhalten
- 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.
Das Add-on liefert keinen Token für die GitHub-API mit. Ohne Token sind die API-Abfragen auf 60 pro Stunde begrenzt. Ein persönlicher Zugriffstoken kann unter GitHub > Settings > Developer settings > Personal access tokens erstellt werden. Der Token benötigt mindestens 'public_repo' Berechtigung für öffentliche Repositories. Der Token kann z.B. in der install.php des project-Add-ons oder einem eigenen wie folgt updatesicher gesetzt werden:
$addon = rex_addon::get('zip_install');
$addon->setConfig('github_token', 'GitHubToken');
- 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