{"id":21330474,"url":"https://github.com/friendsofredaxo/zip_install","last_synced_at":"2026-01-02T18:15:21.419Z","repository":{"id":17421123,"uuid":"81943597","full_name":"FriendsOfREDAXO/zip_install","owner":"FriendsOfREDAXO","description":"REDAXO-AddOns per ZIP oder aus Github direkt nutzen. ","archived":false,"fork":false,"pushed_at":"2025-03-14T17:03:36.000Z","size":2178,"stargazers_count":35,"open_issues_count":2,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-06T17:11:29.605Z","etag":null,"topics":["redaxo","redaxo-addon","zip","zip-install"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FriendsOfREDAXO.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-14T12:35:34.000Z","updated_at":"2025-03-14T17:03:18.000Z","dependencies_parsed_at":"2023-12-31T20:19:53.447Z","dependency_job_id":"0e5341c4-e013-4da0-a8cb-acba20274236","html_url":"https://github.com/FriendsOfREDAXO/zip_install","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/FriendsOfREDAXO/zip_install","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Fzip_install","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Fzip_install/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Fzip_install/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Fzip_install/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FriendsOfREDAXO","download_url":"https://codeload.github.com/FriendsOfREDAXO/zip_install/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Fzip_install/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264962480,"owners_count":23689818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["redaxo","redaxo-addon","zip","zip-install"],"created_at":"2024-11-21T22:19:03.765Z","updated_at":"2026-01-02T18:15:21.413Z","avatar_url":"https://github.com/FriendsOfREDAXO.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# REDAXO AddOn-Installation via ZIP \u0026 GitHub\n\nDieses AddOn ermöglicht die einfache Installation von AddOns oder Plugins durch Hochladen von ZIP-Dateien, Installation über eine URL oder direkt von GitHub.\n\n![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/FriendsOfREDAXO/zip_install?labelColor=171717\u0026color=FF570A\u0026link=https%3A%2F%2Fcoderabbit.ai\u0026label=CodeRabbit%20Reviews)\n\n**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.**\n\n**Will man ein vorhandenes AddOn ersetzen, sollte dieses für eine saubere Installation vorher deinstalliert werden, sonst bleiben evtl. alte Dateien erhalten**\n\n![Screenshot](https://raw.githubusercontent.com/FriendsOfREDAXO/zip_install/assets/screenshot.png)\n\n## Funktionen\n\n*   ZIP-Upload über den Browser\n*   Installation über eine URL, die direkt zu einer ZIP-Datei führt\n*   GitHub-Integration:\n    *   Installation direkt von GitHub-Repositories\n    *   Repository-Suche nach Benutzer/Organisation\n    *   Anzeige von Beschreibungen und Details der Repositories\n\n## Installation\n\n*   Download und Installation über den Installer oder\n*   Download der ZIP-Datei\n*   Entpacken in den AddOns-Ordner als `/redaxo/src/addons/zip_install/`\n*   Installation und Aktivierung in REDAXO\n\n## Verwendung\n\nDas AddOn ist im Installer unter \"ZIP Upload\" zu finden. Es gliedert sich in zwei Bereiche:\n\n1.  **Upload**: Hier können AddOns via ZIP-Datei oder URL installiert werden. Auch die GitHub-Suche befindet sich hier.\n2.  **Einstellungen**: Hier können der GitHub-Token und die maximale Upload-Größe konfiguriert werden.\n\nDie Installation bietet drei Möglichkeiten:\n\n1.  **ZIP-Upload**: Direkter Upload einer ZIP-Datei eines AddOns/Plugins\n2.  **URL-Installation**: Eingabe eines Links zu einer ZIP-Datei oder einem GitHub-Repository\n3.  **GitHub-Integration**: Suche nach GitHub-Repositories und direkte Installation\n\n### GitHub-URLs\n\nFolgende GitHub-URL-Formate werden unterstützt:\n\n*   Repository-URL: `https://github.com/FriendsOfREDAXO/demo_base`\n*   Spezifischer Branch: `https://github.com/FriendsOfREDAXO/demo_base/tree/main`\n\n### Plugins\n\nPlugins werden automatisch in das entsprechende Verzeichnis des zugehörigen AddOns installiert. Der Name wird dabei automatisch aus der `package.yml` übernommen.\n\n## Wichtige Hinweise\n\n*   Das AddOn überschreibt vorhandene Dateien ohne Rückfrage.\n*   Es wird keine Installation oder Neuinstallation durchgeführt.\n*   Abhängigkeiten werden nicht geprüft.\n*   Die `update.php` des AddOns wird nicht ausgeführt.\n*   Der Upload ist auf 50 MB begrenzt.\n\n## GitHub API-Token \u0026 Private Repositories\n\nDas AddOn liefert keinen Token für die GitHub-API mit. Ohne Token sind die API-Abfragen auf 60 pro Stunde begrenzt.\n\nEin persönlicher Zugriffstoken kann unter **GitHub \u003e Settings \u003e Developer settings \u003e Personal access tokens** erstellt werden.\nDer Token kann bequem über die **Einstellungen-Seite** des AddOns eingetragen werden.\n\n**Vorteile eines Tokens:**\n*   Erhöhtes Rate-Limit (5000 Anfragen/Stunde statt 60).\n*   **Zugriff auf private Repositories**: Mit einem Token, der über den Scope `repo` verfügt, können auch private Repositories installiert werden.\n\nFür öffentliche Repositories reicht in der Regel ein Token ohne spezielle Scopes (oder der Scope `public_repo`).\n\n## Voraussetzungen\n\n*   REDAXO \u003e= 5.18\n*   PHP \u003e= 8.1\n*   PHP-Erweiterungen: zip, fileinfo\n\n## API Dokumentation für die `ZipInstall` Klasse\n\nDiese 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.\n\n**Klassenname:** `ZipInstall`\n\n**Namespace:** `FriendsOfRedaxo\\ZipInstall`\n\n### Konstruktor\n\n```php\npublic function __construct()\n```\n\n**Beschreibung:**\n\nInitialisiert die `ZipInstall` Klasse. Erstellt einen temporären Ordner im Cache-Verzeichnis des Addons, falls dieser nicht existiert.\n\n**Parameter:**\n\n*   Keine\n\n**Rückgabewert:**\n\n*   Keiner\n\n### Methoden\n\n#### `handleFileUpload()`\n\n```php\npublic function handleFileUpload(): string\n```\n\n**Beschreibung:**\n\nVerarbeitet den Upload einer ZIP-Datei, die über ein HTML-Formular hochgeladen wurde.\n\n**Parameter:**\n\n*   Keine\n\n**Rückgabewert:**\n\n*   `string`: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.\n\n**Funktionsweise:**\n\n1.  Prüft, ob eine Datei über `$_FILES['zip_file']` hochgeladen wurde.\n2.  Überprüft den MIME-Type der hochgeladenen Datei (erlaubt sind `application/zip` und `application/octet-stream`).\n3.  Überprüft die Dateigröße anhand der Konfigurationseinstellung `upload_max_size`.\n4.  Verschiebt die hochgeladene Datei in den temporären Ordner mit einem eindeutigen Dateinamen.\n5.  Ruft die Methode `installZip()` auf, um die Installation durchzuführen.\n\n**Fehlermeldungen:**\n\n*   `zip_install_upload_failed`: Upload fehlgeschlagen.\n*   `zip_install_mime_error`: Ungültiger Dateityp. Bitte laden Sie eine ZIP-Datei hoch.\n*   `zip_install_size_error`: Die Dateigröße überschreitet das Limit von `%%size%%` MB.\n\n#### `handleUrlInput()`\n\n```php\npublic function handleUrlInput(string $url): string\n```\n\n**Beschreibung:**\n\nVerarbeitet eine URL, die auf eine ZIP-Datei oder ein GitHub-Repository verweist.\n\n**Parameter:**\n\n*   `$url` (`string`): Die URL, die verarbeitet werden soll.\n\n**Rückgabewert:**\n\n*   `string`: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.\n\n**Funktionsweise:**\n\n1.  Überprüft, ob die URL nicht leer ist.\n2.  Entfernt den abschließenden Slash von der URL.\n3.  Prüft, ob die URL ein GitHub-Repository ist und generiert die Download-URL der ZIP-Datei.\n4.  Lädt die ZIP-Datei in den temporären Ordner mit einem eindeutigen Dateinamen herunter.\n5.  Ruft die Methode `installZip()` auf, um die Installation durchzuführen.\n\n**Fehlermeldungen:**\n\n*   `zip_install_invalid_url`: Ungültige URL.\n*   `zip_install_url_file_not_loaded`: Die Datei konnte von der angegebenen URL nicht geladen werden.\n\n#### `installZip()`\n\n```php\nprotected function installZip(string $tmpFile): string\n```\n\n**Beschreibung:**\n\nExtrahiert und installiert ein Addon oder Plugin aus einer temporären ZIP-Datei.\n\n**Parameter:**\n\n*   `$tmpFile` (`string`): Der Pfad zur temporären ZIP-Datei.\n\n**Rückgabewert:**\n\n*   `string`: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.\n\n**Funktionsweise:**\n\n1.  Öffnet die ZIP-Datei mit der `ZipArchive`-Klasse.\n2.  Sucht die `package.yml` Datei im ZIP-Archiv.\n3.  Extrahiert den Inhalt des ZIP-Archivs in einen temporären Ordner.\n4.  Liest die `package.yml` Datei, um die Addon-/Plugin-Informationen zu erhalten.\n5.  Kopiert die Dateien an den entsprechenden Speicherort im REDAXO-System.\n6.  Löscht den temporären Ordner und die temporäre ZIP-Datei.\n\n**Fehlermeldungen:**\n\n*   `zip_install_invalid_addon`: Das Addon/Plugin ist ungültig oder konnte nicht installiert werden.\n*   `zip_install_plugin_parent_missing`: Das Parent-Addon für dieses Plugin ist nicht vorhanden.\n\n#### `getGitHubRepos()`\n\n```php\npublic function getGitHubRepos(string $username): array\n```\n\n**Beschreibung:**\n\nHolt eine Liste von GitHub-Repositories für einen bestimmten Benutzer oder eine Organisation.\n\n**Parameter:**\n\n*   `$username` (`string`): Der GitHub-Benutzername oder Name der Organisation.\n\n**Rückgabewert:**\n\n*   `array\u003cint, array{name: string, description: ?string, url: string, download_url: string, default_branch: string}\u003e`: Gibt ein Array von GitHub-Repositories zurück. Jedes Repository enthält Name, Beschreibung, URL, Download-URL und den Default-Branch.\n\n**Funktionsweise:**\n\n1.  Erstellt eine API-Anfrage an GitHub für die Repositories.\n2.  Filtert Fork, archivierte und deaktivierte Repositories heraus.\n3.  Formatiert die Repositories in ein einfach zu handhabendes Array.\n\n#### `isValidUrl()`\n\n```php\nprotected function isValidUrl(string $url): bool\n```\n\n**Beschreibung:**\n\nÜberprüft, ob eine URL gültig und erreichbar ist.\n\n**Parameter:**\n\n*   `$url` (`string`): Die zu überprüfende URL.\n\n**Rückgabewert:**\n\n*   `bool`: Gibt `true` zurück, wenn die URL gültig und erreichbar ist, sonst `false`.\n\n**Funktionsweise:**\n\n1.  Führt eine `get_headers()` Anfrage durch.\n2.  Überprüft, ob der Statuscode `200` enthalten ist.\n\n#### `downloadFile()`\n\n```php\nprotected function downloadFile(string $url, string $destination): bool\n```\n\n**Beschreibung:**\n\nLädt eine Datei von einer URL herunter und speichert sie auf dem Server.\n\n**Parameter:**\n\n*   `$url` (`string`): Die URL der herunterzuladenden Datei.\n*   `$destination` (`string`): Der Dateipfad zum Speichern der heruntergeladenen Datei.\n\n**Rückgabewert:**\n\n*   `bool`: Gibt `true` zurück, wenn die Datei erfolgreich heruntergeladen und gespeichert wurde, sonst `false`.\n\n**Funktionsweise:**\n\n1.  Verwendet `file_get_contents()` um den Inhalt der URL abzurufen.\n2.  Speichert den Inhalt in die angegebene Datei mit `rex_file::put()`.\n\n### Zusammenfassung\n\nDie `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.\n\n\n\n## Lizenz\n\nMIT Lizenz, siehe [LICENSE.md](LICENSE.md)\n\n## Autor\n\n*   [Friends Of REDAXO](https://github.com/FriendsOfREDAXO)\n\n## Lead\n[Thomas Skerbis](https://github.com/skerbis)  \n\n\n\n## Danksagung\n\n*   Ursprüngliches AddOn von [@aeberhard](https://github.com/aeberhard)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffriendsofredaxo%2Fzip_install","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffriendsofredaxo%2Fzip_install","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffriendsofredaxo%2Fzip_install/lists"}