aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/lib/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins')
-rw-r--r--lib/plugins/config/lang/de-informal/lang.php1
-rw-r--r--lib/plugins/config/lang/de/lang.php3
-rw-r--r--lib/plugins/extension/ExtensionApiResponse.php96
-rw-r--r--lib/plugins/extension/GuiExtension.php4
-rw-r--r--lib/plugins/extension/Installer.php5
-rw-r--r--lib/plugins/extension/lang/de-informal/lang.php23
-rw-r--r--lib/plugins/extension/lang/de/lang.php10
-rw-r--r--lib/plugins/extension/lang/es/lang.php1
-rw-r--r--lib/plugins/extension/lang/ko/lang.php17
-rw-r--r--lib/plugins/extension/remote.php149
-rw-r--r--lib/plugins/extension/style.less11
-rw-r--r--lib/plugins/logviewer/lang/de-informal/intro.txt5
-rw-r--r--lib/plugins/logviewer/lang/de-informal/lang.php10
-rw-r--r--lib/plugins/logviewer/lang/de-informal/nolog.txt1
-rw-r--r--lib/plugins/logviewer/lang/es/lang.php2
15 files changed, 317 insertions, 21 deletions
diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php
index 0d4e3817d..dc4065930 100644
--- a/lib/plugins/config/lang/de-informal/lang.php
+++ b/lib/plugins/config/lang/de-informal/lang.php
@@ -159,7 +159,6 @@ $lang['search_fragment_o_exact'] = 'genaue Treffer';
$lang['search_fragment_o_starts_with'] = 'beginnt mit';
$lang['search_fragment_o_ends_with'] = 'endet mit';
$lang['search_fragment_o_contains'] = 'enthält';
-$lang['trustedproxy'] = 'Vertraue Weiterleitungs-Proxys, welche dem regulärem Ausdruck entsprechen, hinsichtlich der angegebenen Client-ID. Der Standardwert entspricht dem lokalem Netzwerk. Leer lassen um jedem Proxy zu vertrauen.';
$lang['_feature_flags'] = 'Feature-Flags';
$lang['defer_js'] = 'JavaScript-Ausführung verzögern bis das HTML der gesamten Seite verarbeitet wurde. Erhöht die gefühlte Geschwindigkeit des Seitenaufbaus, kann aber mit einigen wenigen Plugins inkompatibel sein.';
$lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn du einen langsamen, unbrauchbaren DNS-Server verwendest oder die Funktion nicht benötigst, dann sollte diese Option deaktivert sein.';
diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php
index 761ead223..bf5c9b6c1 100644
--- a/lib/plugins/config/lang/de/lang.php
+++ b/lib/plugins/config/lang/de/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Niclas Tittl <niclas.tittl@msn.com>
* @author Jürgen Mayer <gro.ikiwukod@x.wellen.org>
* @author Andreas Gohr <andi@splitbrain.org>
* @author Markus Glaser <glaser@hallowelt.com>
@@ -181,6 +182,8 @@ $lang['defer_js'] = 'JavaScript-Ausführung verzögern bis das HTML
$lang['hidewarnings'] = 'Keine PHP Warnungen anzeigen. Diese Einstellung kann den Umstieg auf PHP8+ erleichtern. Warnungen werden weiterhin im Fehlerlog gespeichert und sollten gemeldet werden.';
$lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn Sie einen langsamen oder unzuverlässigen DNS-Server verwenden oder die Funktion nicht benötigen, dann sollte diese Option deaktiviert sein.';
$lang['jquerycdn'] = 'Sollen jQuery und jQuery UI Skriptdateien von einem CDN (Content Delivery Network) geladen werden? Dadurch entstehen zusätzliche HTTP-Anfragen, aber die Daten werden voraussichtlich schneller geladen und eventuell sind sie auch schon beim Benutzer im Cache.';
+$lang['trustedproxies'] = 'Komma-getrennte Liste der Proxy-Server, von denen der X-Forwarded-For Header gelesen wird. Jeder Eintrag in der Liste kann entweder eine IPv4 oder IPv6 Adresse sein, oder ein IPv4 oder IPv6 CIDR Netzwerk (z. B. 10.0.0.0/8). Leer lassen, um keinem Proxy zu vertrauen.';
+$lang['realip'] = 'Vertraue dem X-Real-IP Header. Aktiviere diese Option nur, wenn dein Server diesen Header benutzt, ansonsten könnte er gefälscht werden.';
$lang['jquerycdn_o_0'] = 'Kein CDN, ausschließlich lokale Auslieferung';
$lang['jquerycdn_o_jquery'] = 'CDN von code.jquery.com';
$lang['jquerycdn_o_cdnjs'] = 'CDN von cdnjs.com';
diff --git a/lib/plugins/extension/ExtensionApiResponse.php b/lib/plugins/extension/ExtensionApiResponse.php
new file mode 100644
index 000000000..c684e770f
--- /dev/null
+++ b/lib/plugins/extension/ExtensionApiResponse.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace dokuwiki\plugin\extension;
+
+use dokuwiki\Remote\Response\ApiResponse;
+
+class ExtensionApiResponse extends ApiResponse
+{
+ protected Extension $extension;
+
+ /** @var string The type of this extension ("plugin" or "template") */
+ public $type;
+
+ /** @var string The id of this extension (templates are prefixed with "template") */
+ public $id;
+
+ /** @var string The base name of this extension */
+ public $base;
+
+ /** @var string The display name of this extension */
+ public $name;
+
+ /** @var string The installed version/date of this extension */
+ public $version;
+
+ /** @var string The author of this extension */
+ public $author;
+
+ /** @var string The description of this extension */
+ public $description;
+
+ /** @var bool Whether this extension is installed */
+ public $isInstalled;
+
+ /** @var bool Whether this extension is enabled */
+ public $isEnabled;
+
+ /** @var bool Whether an update is available */
+ public $updateAvailable;
+
+ /** @var bool Whether this extension is bundled with DokuWiki */
+ public $isBundled;
+
+ /** @var bool Whether this extension is under git control */
+ public $isGitControlled;
+
+ /** @var string[] Notices for this extension */
+ public $notices;
+
+ /** @var string Documentation URL for this extension */
+ public $url;
+
+ /** @var string[] The component types this plugin provides */
+ public $componentTypes;
+
+ /** @var string The last available remote update date */
+ public $lastUpdate;
+
+ /** @var string The download URL for this extension */
+ public string $downloadURL;
+
+ /**
+ * Constructor
+ *
+ * @param Extension $extension The extension to create the response for
+ */
+ public function __construct(Extension $extension)
+ {
+ $this->extension = $extension;
+ $this->type = $extension->getType();
+ $this->id = $extension->getId();
+ $this->base = $extension->getBase();
+ $this->name = $extension->getDisplayName();
+ $this->version = $extension->getInstalledVersion();
+ $this->author = $extension->getAuthor();
+ $this->description = $extension->getDescription();
+ $this->isInstalled = $extension->isInstalled();
+ $this->isEnabled = $extension->isEnabled();
+ $this->updateAvailable = $extension->isUpdateAvailable();
+ $this->isBundled = $extension->isBundled();
+ $this->isGitControlled = $extension->isGitControlled();
+ $this->componentTypes = $extension->getComponentTypes();
+ $this->lastUpdate = $extension->getLastUpdate();
+ $this->url = $extension->getURL();
+ $this->downloadURL = $extension->getDownloadURL();
+
+ // Add notices
+ $this->notices = array_merge(...array_values(Notice::list($extension)));
+ }
+
+ /** @inheritdoc */
+ public function __toString()
+ {
+ return $this->extension->getId();
+ }
+}
diff --git a/lib/plugins/extension/GuiExtension.php b/lib/plugins/extension/GuiExtension.php
index 4b8163c60..666cd37ed 100644
--- a/lib/plugins/extension/GuiExtension.php
+++ b/lib/plugins/extension/GuiExtension.php
@@ -46,8 +46,8 @@ class GuiExtension extends Gui
$html .= '<div class="actions">';
// show the available update if there is one
if ($this->extension->isUpdateAvailable()) {
- $html .= ' <div class="version">' . $this->getLang('available_version') . ' ' .
- hsc($this->extension->getLastUpdate()) . '</div>';
+ $html .= ' <div class="available">' . $this->getLang('available_version') . ' ' .
+ '<span class="version">' . hsc($this->extension->getLastUpdate()) . '</span></div>';
}
$html .= $this->actions();
diff --git a/lib/plugins/extension/Installer.php b/lib/plugins/extension/Installer.php
index e08f1da52..5bb429b01 100644
--- a/lib/plugins/extension/Installer.php
+++ b/lib/plugins/extension/Installer.php
@@ -406,6 +406,11 @@ class Installer
{
$target = $extension->getInstallDir();
+ // bundled plugins do not need to be writable
+ if ($extension->isBundled()) {
+ return;
+ }
+
// updates
if (file_exists($target)) {
if (!is_writable($target)) throw new Exception('noperms');
diff --git a/lib/plugins/extension/lang/de-informal/lang.php b/lib/plugins/extension/lang/de-informal/lang.php
index ebe1a0510..b2a37596c 100644
--- a/lib/plugins/extension/lang/de-informal/lang.php
+++ b/lib/plugins/extension/lang/de-informal/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author andreash <aeheil@gmail.com>
* @author MaWi <drmaxxis@gmail.com>
* @author Felix <j.felix@mueller-donath.de>
*/
@@ -12,9 +13,6 @@ $lang['tab_templates'] = 'Installierte Templates';
$lang['tab_search'] = 'Suchen und installieren';
$lang['tab_install'] = 'Manuelle Installation';
$lang['notimplemented'] = 'Dieses Feature wurde leider noch nicht eingebaut';
-$lang['notinstalled'] = 'Diese Erweiterung ist nicht installiert';
-$lang['alreadyenabled'] = 'Diese Erweiterung wurde bereits aktiviert';
-$lang['alreadydisabled'] = 'Diese Erweiterung wurde bereits deaktiviert';
$lang['pluginlistsaveerror'] = 'Fehler beim Speichern der Plugin-Liste';
$lang['unknownauthor'] = 'Unbekannter Autor';
$lang['unknownversion'] = 'Unbekannte Version';
@@ -68,23 +66,27 @@ $lang['msg_enabled'] = 'Plugin %s ist aktiviert';
$lang['msg_disabled'] = 'Erweiterung %s ist deaktiviert';
$lang['msg_delete_success'] = 'Erweiterung %s wurde entfernt';
$lang['msg_delete_failed'] = 'Deinstallation der Erweiterung %s fehlgeschlagen';
-$lang['msg_template_install_success'] = 'Das Template %s wurde erfolgreich installiert';
-$lang['msg_template_update_success'] = 'Das Update des Templates %s war erfolgreich ';
-$lang['msg_plugin_install_success'] = 'Das Plugin %s wurde erfolgreich installiert';
-$lang['msg_plugin_update_success'] = 'Das Update des Plugins %s war erfolgreich';
$lang['msg_upload_failed'] = 'Fehler beim Hochladen der Datei';
$lang['msg_nooverwrite'] = 'Die Erweiterung %s ist bereits vorhanden, sodass sie nicht überschrieben wird. Zum Überschreiben aktiviere die Option "Überschreiben".';
$lang['missing_dependency'] = 'Fehlende oder deaktivierte Abhängigkeit: %s';
$lang['security_issue'] = 'Sicherheitsproblem: %s';
$lang['security_warning'] = 'Sicherheitswarnung: %s';
$lang['wrong_folder'] = 'Erweiterung wurde nicht korrekt installiert: Benenne das Verzeichnis von "%s" nach "%s" um.';
-$lang['url_change'] = "URL geändert: Die Download-URL wurde seit dem letzten Download geändert. Internetadresse vor Aktualisierung der Erweiterung auf Gültigkeit prüfen.\nNeu: %s\nAlt: %s";
+$lang['url_change'] = 'URL geändert: Die Download-URL wurde seit dem letzten Download geändert. Internetadresse vor Aktualisierung der Erweiterung auf Gültigkeit prüfen.
+Neu: %s
+Alt: %s';
$lang['error_badurl'] = 'URLs sollten mit http oder https beginnen';
$lang['error_dircreate'] = 'Temporärer Ordner konnte nicht erstellt werden um Download zu abzuspeichern';
$lang['error_download'] = 'Download der Datei: %s nicht möglich.';
$lang['error_decompress'] = 'Die heruntergeladene Datei konnte nicht entpackt werden. Dies kann die Folge eines fehlerhaften Downloads sein. In diesem Fall solltest du versuchen den Vorgang zu wiederholen. Es kann auch die Folge eines unbekannten Kompressionsformates sein, in diesem Fall musst du die Datei selber herunterladen und manuell installieren.';
$lang['error_findfolder'] = 'Das Erweiterungs-Verzeichnis konnte nicht identifiziert werden, lade die Datei herunter und installiere sie manuell.';
$lang['error_copy'] = 'Beim Versuch Dateien in den Ordner <em>%s</em>: zu installieren trat ein Kopierfehler auf. Die Dateizugriffsberechtigungen könnten falsch sein. Dies kann an einem unvollständig installierten Plugin liegen und beeinträchtigt somit die Stabilität deiner Wiki-Installation.';
+$lang['error_nourl'] = 'Es konnte keine Download-URL für die Erweiterung %s gefunden werden.';
+$lang['error_notinstalled'] = 'Die Erweiterung %s ist nicht installiert.';
+$lang['error_alreadyenabled'] = 'Die Erweiterung %s wurde bereits aktiviert.';
+$lang['error_alreadydisabled'] = 'Die Erweiterung %s wurde bereits deaktiviert.';
+$lang['error_minphp'] = 'Die Erweiterung %s benötigt mindestens PHP Verison %s, dieses Wiki verwendet aber PHP %s.';
+$lang['error_maxphp'] = 'Die Erweiterung %s unterstützt PHP nur bis Version %s, dieses Wiki verwendet aber PHP %s.';
$lang['noperms'] = 'Das Erweiterungs-Verzeichnis ist schreibgeschützt';
$lang['notplperms'] = 'Das Template-Verzeichnis ist schreibgeschützt';
$lang['nopluginperms'] = 'Das Plugin-Verzeichnis ist schreibgeschützt';
@@ -92,5 +94,10 @@ $lang['git'] = 'Diese Erweiterung wurde über git installiert
$lang['auth'] = 'Dieses Auth-Plugin ist in der Konfiguration nicht aktiviert, Du solltest es deaktivieren.';
$lang['install_url'] = 'Von URL installieren:';
$lang['install_upload'] = 'Erweiterung hochladen:';
+$lang['repo_badresponse'] = 'Das Plugin-Repository liefert eine ungültige Antwort.';
$lang['repo_error'] = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stelle sicher, dass der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfe deine Proxy-Einstellungen.';
$lang['nossl'] = 'Deine PHP-Installation scheint SSL nicht zu unterstützen. Das Herunterladen vieler DokuWiki-Erweiterungen wird scheitern.';
+$lang['popularity_high'] = 'Dies ist die beliebteste Erweiterung';
+$lang['popularity_medium'] = 'Diese Erweiterung ist beliebt';
+$lang['popularity_low'] = 'Diese Erweiterung stößt auf Interesse';
+$lang['details'] = 'Details';
diff --git a/lib/plugins/extension/lang/de/lang.php b/lib/plugins/extension/lang/de/lang.php
index 7f33d4da9..4c32a9599 100644
--- a/lib/plugins/extension/lang/de/lang.php
+++ b/lib/plugins/extension/lang/de/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Niclas Tittl <niclas.tittl@msn.com>
* @author Anika Rachow <rachowanika@gmail.com>
* @author Jürgen Mayer <gro.ikiwukod@x.wellen.org>
* @author Axel Schwarzer <SchwarzerA@gmail.com>
@@ -99,13 +100,18 @@ $lang['error_copy'] = 'Beim Versuch Dateien in den Ordner <em>%s</em>
$lang['error_copy_read'] = 'Verzeichnis konnte nicht gelesen werden: %s';
$lang['error_copy_mkdir'] = 'Verzeichnis konnte nicht erstellt werden: %s';
$lang['error_copy_copy'] = '%s konnte nicht nach %s kopiert werden.';
+$lang['error_archive_read'] = 'Das Archiv %s konnte nicht gelesen werden';
+$lang['error_archive_extract'] = 'Das Archiv %s konnte nicht extrahiert werden: %s';
$lang['error_uninstall_protected'] = 'Erweiterung %s ist geschützt und kann nicht gelöscht werden.';
$lang['error_uninstall_dependants'] = 'Erweiterung %s wird von Erweiterung %s verwendet und kann daher nicht deinstalliert werden.';
$lang['error_disable_protected'] = 'Erweiterung %s ist geschützt und kann nicht deaktiviert werden.';
$lang['error_disable_dependants'] = 'Erweiterung %s wird weiterhin von Erweiterung %s verwendet und kann daher nicht deaktiviert werden.';
+$lang['error_nourl'] = 'Für die Erweiterung %s konnte keine Download-URL gefunden werden';
$lang['error_notinstalled'] = 'Erweiterung %s kann nicht installiert werden.';
$lang['error_alreadyenabled'] = 'Erweiterung %s wurde bereits aktiviert.';
$lang['error_alreadydisabled'] = 'Erweiterung %s wurde bereits deaktiviert.';
+$lang['error_minphp'] = 'Die Erweiterung %s benötigt mindestens die PHP-Version %s, dieses Wiki benutzt allerdings PHP %s';
+$lang['error_maxphp'] = 'Die Erweiterung %s unterstützt maximal die PHP-Version %s, dieses Wiki benutzt allerdings PHP %s';
$lang['noperms'] = 'Das Erweiterungs-Verzeichnis ist schreibgeschützt';
$lang['notplperms'] = 'Das Template-Verzeichnis ist schreibgeschützt';
$lang['nopluginperms'] = 'Das Plugin-Verzeichnis ist schreibgeschützt';
@@ -116,3 +122,7 @@ $lang['install_upload'] = 'Erweiterung hochladen:';
$lang['repo_badresponse'] = 'Das Plugin-Verzeichnis hat eine ungültige Antwort geliefert.';
$lang['repo_error'] = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stellen Sie sicher, dass der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfen Sie ihre Proxy-Einstellungen.';
$lang['nossl'] = 'Ihr PHP scheint SSL nicht zu unterstützen. Das Herunterladen vieler DokuWiki-Erweiterungen wird scheitern.';
+$lang['popularity_high'] = 'Diese Erweiterung ist eine der Beliebtesten';
+$lang['popularity_medium'] = 'Diese Erweiterung ist sehr beliebt';
+$lang['popularity_low'] = 'Diese Erweiterung hat Interesse geweckt';
+$lang['details'] = 'Details';
diff --git a/lib/plugins/extension/lang/es/lang.php b/lib/plugins/extension/lang/es/lang.php
index ef71e7362..7c80d8279 100644
--- a/lib/plugins/extension/lang/es/lang.php
+++ b/lib/plugins/extension/lang/es/lang.php
@@ -101,3 +101,4 @@ $lang['install_url'] = 'Instalar desde URL:';
$lang['install_upload'] = 'Subir Extensión:';
$lang['repo_error'] = 'El repositorio de plugins no puede ser contactado. Asegúrese que su servidor pueda contactar www.dokuwiki.org y verificar la configuración de su proxy.';
$lang['nossl'] = 'Tu PHP parece no tener soporte SSL. Las descargas no funcionaran para muchas extensiones de DokuWiki.';
+$lang['details'] = 'Detalles';
diff --git a/lib/plugins/extension/lang/ko/lang.php b/lib/plugins/extension/lang/ko/lang.php
index 7f45686dc..c40f838d1 100644
--- a/lib/plugins/extension/lang/ko/lang.php
+++ b/lib/plugins/extension/lang/ko/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author SoiBKK <info@soibangkok.online>
* @author Young gon Cha <garmede@gmail.com>
* @author Myeongjin <aranet100@gmail.com>
* @author hyeonsoft <hyeonsoft@live.co.kr>
@@ -13,9 +14,6 @@ $lang['tab_templates'] = '설치된 템플릿';
$lang['tab_search'] = '검색하고 설치';
$lang['tab_install'] = '수동 설치';
$lang['notimplemented'] = '이 기능은 아직 구현되지 않았습니다';
-$lang['notinstalled'] = '이 확장 기능은 설치되어 있지 않습니다';
-$lang['alreadyenabled'] = '이 확장 기능이 이미 활성화되어 있습니다';
-$lang['alreadydisabled'] = '이 확장 기능이 이미 비활성화되어 있습니다';
$lang['pluginlistsaveerror'] = '플러그인 목록을 저장하는 중 오류가 있었습니다';
$lang['unknownauthor'] = '알 수 없는 저자';
$lang['unknownversion'] = '알 수 없는 버전';
@@ -31,6 +29,8 @@ $lang['js']['display_viewoptions'] = '보기 옵션:';
$lang['js']['display_enabled'] = '활성화됨';
$lang['js']['display_disabled'] = '비활성화됨';
$lang['js']['display_updatable'] = '업데이트할 수 있음';
+$lang['js']['close'] = '클릭하여 닫기';
+$lang['js']['filter'] = '업데이트가 가능한 확장 기능만 보여주기';
$lang['search_for'] = '확장 기능 검색:';
$lang['search'] = '검색';
$lang['extensionby'] = '<strong>%s</strong> (저자 %s)';
@@ -69,16 +69,14 @@ $lang['msg_enabled'] = '%s 플러그인이 활성화되었습니다';
$lang['msg_disabled'] = '%s 플러그인이 비활성화되었습니다';
$lang['msg_delete_success'] = '%s 확장 기능이 제거되었습니다';
$lang['msg_delete_failed'] = '%s 확장 기능 제거에 실패했습니다';
-$lang['msg_template_install_success'] = '%s 템플릿을 성공적으로 설치했습니다';
-$lang['msg_template_update_success'] = '%s 템플릿을 성공적으로 업데이트했습니다';
-$lang['msg_plugin_install_success'] = '%s 플러그인을 성공적으로 설치했습니다';
-$lang['msg_plugin_update_success'] = '%s 플러그인을 성공적으로 업데이트했습니다';
$lang['msg_upload_failed'] = '파일 올리기에 실패했습니다';
$lang['missing_dependency'] = '의존성을 잃었거나 비활성화되어 있습니다: %s';
$lang['security_issue'] = '보안 문제: %s';
$lang['security_warning'] = '보안 경고: %s';
$lang['wrong_folder'] = '플러그인이 올바르지 않게 설치됨: 플러그인 디렉터리를 "%s"에서 "%s"로 이름을 바꾸세요.';
-$lang['url_change'] = "URL이 바뀜: 다운로드 URL이 최신 다운로드 이래로 바뀌었습니다. 확장 기능을 업데이트하기 전에 새 URL이 올바른지 확인하세요.\n새 URL: %s\n오래된 URL: %s";
+$lang['url_change'] = 'URL이 바뀜: 다운로드 URL이 최신 다운로드 이래로 바뀌었습니다. 확장 기능을 업데이트하기 전에 새 URL이 올바른지 확인하세요.
+새 URL: %s
+오래된 URL: %s';
$lang['error_badurl'] = 'URL은 http나 https로 시작해야 합니다';
$lang['error_dircreate'] = '다운로드를 받을 임시 폴더를 만들 수 없습니다';
$lang['error_download'] = '파일을 다운로드할 수 없습니다: %s';
@@ -94,3 +92,6 @@ $lang['install_url'] = 'URL에서 설치:';
$lang['install_upload'] = '확장 기능 올리기:';
$lang['repo_error'] = '플러그인 저장소에 연결할 수 없습니다. 서버가 www.dokuwiki.org에 연결할 수 있는지 확인하고 프록시 설정을 확인하세요.';
$lang['nossl'] = 'PHP가 SSL 지원을 하지 않는 것으로 보입니다. 많은 도쿠위키 확장 기능의 다운로드가 작동하지 않을 것입니다.';
+$lang['popularity_high'] = '가장 유명한 확장 기능 중 하나';
+$lang['popularity_medium'] = '꽤 유명한 확장 기능';
+$lang['details'] = '세부 정보';
diff --git a/lib/plugins/extension/remote.php b/lib/plugins/extension/remote.php
new file mode 100644
index 000000000..4eb84a829
--- /dev/null
+++ b/lib/plugins/extension/remote.php
@@ -0,0 +1,149 @@
+<?php
+
+use dokuwiki\Extension\RemotePlugin;
+use dokuwiki\plugin\extension\Extension;
+use dokuwiki\plugin\extension\ExtensionApiResponse;
+use dokuwiki\plugin\extension\Installer;
+use dokuwiki\plugin\extension\Local;
+use dokuwiki\plugin\extension\Repository;
+use dokuwiki\Remote\AccessDeniedException;
+
+/**
+ * DokuWiki Plugin extension (Remote Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+class remote_plugin_extension extends RemotePlugin
+{
+ /**
+ * List installed extensions
+ *
+ * This lists all installed extensions. The list is not sorted in any way.
+ *
+ * @return ExtensionApiResponse[] The list of installed extensions and their details
+ */
+ public function list()
+ {
+ if (!auth_isadmin()) {
+ throw new AccessDeniedException('Only admins are allowed to access extensions', 114);
+ }
+
+ $extensions = (new Local())->getExtensions();
+ Repository::getInstance()->initExtensions(array_keys($extensions));
+
+ return array_values(
+ array_map(
+ static fn($extension) => new ExtensionApiResponse($extension),
+ $extensions
+ )
+ );
+ }
+
+ /**
+ * Search for extensions in the repository
+ *
+ * @param string $query The keyword(s) to search for
+ * @param int $max Maximum number of results (default 10)
+ * @return ExtensionApiResponse[] List of matching extensions
+ */
+ public function search($query, $max = 10)
+ {
+ if (!auth_isadmin()) {
+ throw new AccessDeniedException('Only admins are allowed to access extensions', 114);
+ }
+
+ $repo = Repository::getInstance();
+ $result = $repo->searchExtensions($query);
+
+ if ($max > 0) {
+ $result = array_slice($result, 0, $max);
+ }
+
+ return array_values(
+ array_map(
+ static fn($extension) => new ExtensionApiResponse($extension),
+ $result
+ )
+ );
+ }
+
+ /**
+ * Enable a specific extension
+ *
+ * @param string $extension Extension ID to enable
+ * @return bool Success status
+ */
+ public function enable($extension)
+ {
+ if (!auth_isadmin()) {
+ throw new AccessDeniedException('Only admins are allowed to manage extensions', 114);
+ }
+
+ $ext = Extension::createFromId($extension);
+ $ext->enable();
+ return true;
+ }
+
+ /**
+ * Disable a specific extension
+ *
+ * @param string $extension Extension ID to disable
+ * @return bool Success status
+ */
+ public function disable($extension)
+ {
+ if (!auth_isadmin()) {
+ throw new AccessDeniedException('Only admins are allowed to manage extensions', 114);
+ }
+
+ $ext = Extension::createFromId($extension);
+ $ext->disable();
+ return true;
+ }
+
+ /**
+ * Install a specific extension
+ *
+ * This will also install dependencies, so more than the given extension may be installed.
+ *
+ * @param string $extension Extension ID or download URL
+ * @return string[] List of installed extensions
+ */
+ public function install($extension)
+ {
+ if (!auth_isadmin()) {
+ throw new AccessDeniedException('Only admins are allowed to manage extensions', 114);
+ }
+
+ $installer = new Installer(true);
+ $installer->installFromId($extension);
+
+ return array_keys(
+ array_filter(
+ $installer->getProcessed(),
+ static fn($status) => (
+ $status == Installer::STATUS_INSTALLED || $status == Installer::STATUS_UPDATED
+ )
+ )
+ );
+ }
+
+ /**
+ * Uninstall a specific extension
+ *
+ * @param string $extension Extension ID to uninstall
+ * @return bool Success status
+ */
+ public function uninstall($extension)
+ {
+ if (!auth_isadmin()) {
+ throw new AccessDeniedException('Only admins are allowed to manage extensions', 114);
+ }
+
+ $ext = Extension::createFromId($extension);
+ $installer = new Installer();
+ $installer->uninstall($ext);
+ return true;
+ }
+}
diff --git a/lib/plugins/extension/style.less b/lib/plugins/extension/style.less
index 5337aea30..3993c656a 100644
--- a/lib/plugins/extension/style.less
+++ b/lib/plugins/extension/style.less
@@ -66,10 +66,11 @@
section.extension {
display: grid;
- grid-template-columns: @thumbwidth auto 15em;
+ grid-template-columns: @thumbwidth auto 22%;
grid-template-rows: repeat(4, auto);
margin-bottom: 1em;
border-bottom: 1px solid @ini_border;
+ word-break: break-word;
> .screenshot {
grid-column: 1;
@@ -132,6 +133,7 @@
}
.version {
+ white-space: nowrap;
}
}
@@ -154,9 +156,14 @@
align-items: end;
gap: 0.5em;
- .version {
+ .available {
line-height: 1.2;
margin-bottom: 1em;
+ text-align: right;
+
+ .version {
+ white-space: nowrap;
+ }
}
}
diff --git a/lib/plugins/logviewer/lang/de-informal/intro.txt b/lib/plugins/logviewer/lang/de-informal/intro.txt
new file mode 100644
index 000000000..147b84731
--- /dev/null
+++ b/lib/plugins/logviewer/lang/de-informal/intro.txt
@@ -0,0 +1,5 @@
+====== Protokolle anzeigen ======
+
+Diese Oberfläche ermöglicht es dir, die verschiedenen Protokolle einzusehen, die von DokuWiki erstellt werden. Normalerweise sollte hier nicht viel zu sehen sein (das hängt von deinen [[doku>config:dontlog|Protokoll-Einstellungen]] ab). Wenn jedoch etwas schiefläuft, stehen die Chancen gut, dass du hier nützliche Informationen zum Problem findest.
+
+Bitte beachte, dass **Protokolldateien sensible Informationen** wie Passwörter, Pfade oder andere vertrauliche Daten enthalten können. Achte darauf, die Protokolle entsprechend zu schwärzen, bevor du sie im Forum oder in Fehlerberichten veröffentlichst! \ No newline at end of file
diff --git a/lib/plugins/logviewer/lang/de-informal/lang.php b/lib/plugins/logviewer/lang/de-informal/lang.php
new file mode 100644
index 000000000..2bf0774b5
--- /dev/null
+++ b/lib/plugins/logviewer/lang/de-informal/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license GPL 2 (https://www.gnu.org/licenses/gpl.html)
+ *
+ * @author andreash <aeheil@gmail.com>
+ */
+$lang['menu'] = 'Protokolleinträge anzeigen';
+$lang['date'] = 'Datum';
+$lang['js']['filter'] = 'Protokolleinträge filtern';
diff --git a/lib/plugins/logviewer/lang/de-informal/nolog.txt b/lib/plugins/logviewer/lang/de-informal/nolog.txt
new file mode 100644
index 000000000..8692823bd
--- /dev/null
+++ b/lib/plugins/logviewer/lang/de-informal/nolog.txt
@@ -0,0 +1 @@
+Es liegen keine Protokolleinträge für den ausgewählten Tag und das ausgewählte Modul vor. \ No newline at end of file
diff --git a/lib/plugins/logviewer/lang/es/lang.php b/lib/plugins/logviewer/lang/es/lang.php
index 973dda3c8..61f4b8d3b 100644
--- a/lib/plugins/logviewer/lang/es/lang.php
+++ b/lib/plugins/logviewer/lang/es/lang.php
@@ -3,7 +3,9 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Pablo <tuthotep@gmail.com>
* @author cadetill <cadetill@gmail.com>
*/
$lang['menu'] = 'Ver registros';
$lang['date'] = 'Fecha';
+$lang['js']['filter'] = 'Filtrar lineas de registro:';