You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+200Lines changed: 200 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -55,6 +55,206 @@ Plugins werden automatisch in das entsprechende Verzeichnis des zugehörigen Add
55
55
* PHP >= 8.1
56
56
* PHP-Erweiterungen: zip, fileinfo
57
57
58
+
## API Dokumentation für die `ZipInstall` Klasse
59
+
60
+
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.
61
+
62
+
**Klassenname:**`ZipInstall`
63
+
64
+
**Namespace:**`FriendsOfRedaxo\ZipInstall`
65
+
66
+
### Konstruktor
67
+
68
+
```php
69
+
public function __construct()
70
+
```
71
+
72
+
**Beschreibung:**
73
+
74
+
Initialisiert die `ZipInstall` Klasse. Erstellt einen temporären Ordner im Cache-Verzeichnis des Addons, falls dieser nicht existiert.
75
+
76
+
**Parameter:**
77
+
78
+
* Keine
79
+
80
+
**Rückgabewert:**
81
+
82
+
* Keiner
83
+
84
+
### Methoden
85
+
86
+
#### `handleFileUpload()`
87
+
88
+
```php
89
+
public function handleFileUpload(): string
90
+
```
91
+
92
+
**Beschreibung:**
93
+
94
+
Verarbeitet den Upload einer ZIP-Datei, die über ein HTML-Formular hochgeladen wurde.
95
+
96
+
**Parameter:**
97
+
98
+
* Keine
99
+
100
+
**Rückgabewert:**
101
+
102
+
*`string`: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.
103
+
104
+
**Funktionsweise:**
105
+
106
+
1. Prüft, ob eine Datei über `$_FILES['zip_file']` hochgeladen wurde.
107
+
2. Überprüft den MIME-Type der hochgeladenen Datei (erlaubt sind `application/zip` und `application/octet-stream`).
108
+
3. Überprüft die Dateigröße anhand der Konfigurationseinstellung `upload_max_size`.
109
+
4. Verschiebt die hochgeladene Datei in den temporären Ordner mit einem eindeutigen Dateinamen.
110
+
5. Ruft die Methode `installZip()` auf, um die Installation durchzuführen.
*`zip_install_mime_error`: Ungültiger Dateityp. Bitte laden Sie eine ZIP-Datei hoch.
116
+
*`zip_install_size_error`: Die Dateigröße überschreitet das Limit von `%%size%%` MB.
117
+
118
+
#### `handleUrlInput()`
119
+
120
+
```php
121
+
public function handleUrlInput(string $url): string
122
+
```
123
+
124
+
**Beschreibung:**
125
+
126
+
Verarbeitet eine URL, die auf eine ZIP-Datei oder ein GitHub-Repository verweist.
127
+
128
+
**Parameter:**
129
+
130
+
*`$url` (`string`): Die URL, die verarbeitet werden soll.
131
+
132
+
**Rückgabewert:**
133
+
134
+
*`string`: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.
135
+
136
+
**Funktionsweise:**
137
+
138
+
1. Überprüft, ob die URL nicht leer ist.
139
+
2. Entfernt den abschließenden Slash von der URL.
140
+
3. Prüft, ob die URL ein GitHub-Repository ist und generiert die Download-URL der ZIP-Datei.
141
+
4. Lädt die ZIP-Datei in den temporären Ordner mit einem eindeutigen Dateinamen herunter.
142
+
5. Ruft die Methode `installZip()` auf, um die Installation durchzuführen.
143
+
144
+
**Fehlermeldungen:**
145
+
146
+
*`zip_install_invalid_url`: Ungültige URL.
147
+
*`zip_install_url_file_not_loaded`: Die Datei konnte von der angegebenen URL nicht geladen werden.
148
+
149
+
#### `installZip()`
150
+
151
+
```php
152
+
protected function installZip(string $tmpFile): string
153
+
```
154
+
155
+
**Beschreibung:**
156
+
157
+
Extrahiert und installiert ein Addon oder Plugin aus einer temporären ZIP-Datei.
158
+
159
+
**Parameter:**
160
+
161
+
*`$tmpFile` (`string`): Der Pfad zur temporären ZIP-Datei.
162
+
163
+
**Rückgabewert:**
164
+
165
+
*`string`: Gibt einen HTML-String für eine Erfolgs- oder Fehlermeldung zurück.
166
+
167
+
**Funktionsweise:**
168
+
169
+
1. Öffnet die ZIP-Datei mit der `ZipArchive`-Klasse.
170
+
2. Sucht die `package.yml` Datei im ZIP-Archiv.
171
+
3. Extrahiert den Inhalt des ZIP-Archivs in einen temporären Ordner.
172
+
4. Liest die `package.yml` Datei, um die Addon-/Plugin-Informationen zu erhalten.
173
+
5. Kopiert die Dateien an den entsprechenden Speicherort im REDAXO-System.
174
+
6. Löscht den temporären Ordner und die temporäre ZIP-Datei.
175
+
176
+
**Fehlermeldungen:**
177
+
178
+
*`zip_install_invalid_addon`: Das Addon/Plugin ist ungültig oder konnte nicht installiert werden.
179
+
*`zip_install_plugin_parent_missing`: Das Parent-Addon für dieses Plugin ist nicht vorhanden.
180
+
181
+
#### `getGitHubRepos()`
182
+
183
+
```php
184
+
public function getGitHubRepos(string $username): array
185
+
```
186
+
187
+
**Beschreibung:**
188
+
189
+
Holt eine Liste von GitHub-Repositories für einen bestimmten Benutzer oder eine Organisation.
190
+
191
+
**Parameter:**
192
+
193
+
*`$username` (`string`): Der GitHub-Benutzername oder Name der Organisation.
194
+
195
+
**Rückgabewert:**
196
+
197
+
*`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.
198
+
199
+
**Funktionsweise:**
200
+
201
+
1. Erstellt eine API-Anfrage an GitHub für die Repositories.
202
+
2. Filtert Fork, archivierte und deaktivierte Repositories heraus.
203
+
3. Formatiert die Repositories in ein einfach zu handhabendes Array.
204
+
205
+
#### `isValidUrl()`
206
+
207
+
```php
208
+
protected function isValidUrl(string $url): bool
209
+
```
210
+
211
+
**Beschreibung:**
212
+
213
+
Überprüft, ob eine URL gültig und erreichbar ist.
214
+
215
+
**Parameter:**
216
+
217
+
*`$url` (`string`): Die zu überprüfende URL.
218
+
219
+
**Rückgabewert:**
220
+
221
+
*`bool`: Gibt `true` zurück, wenn die URL gültig und erreichbar ist, sonst `false`.
222
+
223
+
**Funktionsweise:**
224
+
225
+
1. Führt eine `get_headers()` Anfrage durch.
226
+
2. Überprüft, ob der Statuscode `200` enthalten ist.
227
+
228
+
#### `downloadFile()`
229
+
230
+
```php
231
+
protected function downloadFile(string $url, string $destination): bool
232
+
```
233
+
234
+
**Beschreibung:**
235
+
236
+
Lädt eine Datei von einer URL herunter und speichert sie auf dem Server.
237
+
238
+
**Parameter:**
239
+
240
+
*`$url` (`string`): Die URL der herunterzuladenden Datei.
241
+
*`$destination` (`string`): Der Dateipfad zum Speichern der heruntergeladenen Datei.
242
+
243
+
**Rückgabewert:**
244
+
245
+
*`bool`: Gibt `true` zurück, wenn die Datei erfolgreich heruntergeladen und gespeichert wurde, sonst `false`.
246
+
247
+
**Funktionsweise:**
248
+
249
+
1. Verwendet `file_get_contents()` um den Inhalt der URL abzurufen.
250
+
2. Speichert den Inhalt in die angegebene Datei mit `rex_file::put()`.
251
+
252
+
### Zusammenfassung
253
+
254
+
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.
0 commit comments