nextcloud/onlyoffice: тип коннектора и UI редактора

- ConnectorConfig(onlyoffice) + миграция, подсказка по extra_config в админке.
- /documents/onlyoffice/ в whitelist 2FA — Document Server забирает файл
  без сессии портала (доступ по подписанному file-token + JWT DS).
- Страница редактора и кнопки «открыть в OnlyOffice» в браузере документов.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 13:17:41 +03:00
parent 5f62662e12
commit f41fefbaa7
7 changed files with 91 additions and 1 deletions
@@ -44,9 +44,16 @@
hx-target="#documents-browser" hx-swap="innerHTML"
style="color:var(--color-foreground); text-decoration:none; font-weight:500;">📁 {{ f.name }}</a>
{% else %}
{% if f.is_office and onlyoffice_ready %}
<a href="/documents/edit/?section={{ section.key }}&path={{ sub|urlencode }}&name={{ f.name|urlencode }}"
style="color:var(--color-primary); text-decoration:none; font-weight:500;">{{ f.name }}</a>
<a href="/documents/download/?section={{ section.key }}&path={{ sub|urlencode }}&name={{ f.name|urlencode }}"
style="color:var(--color-muted-foreground); font-size:0.75rem; margin-left:0.5rem; text-decoration:none;">{% trans "скачать" %}</a>
{% else %}
<a href="/documents/download/?section={{ section.key }}&path={{ sub|urlencode }}&name={{ f.name|urlencode }}"
style="color:var(--color-primary); text-decoration:none;">📄 {{ f.name }}</a>
{% endif %}
{% endif %}
</td>
<td style="padding:0.5rem 0.75rem; text-align:right; color:var(--color-muted-foreground); white-space:nowrap;">
{% if f.size is not None %}{{ f.size|filesizeformat }}{% endif %}
@@ -33,8 +33,13 @@
{% if f.is_dir %}
<span style="color:var(--color-foreground);">{{ f.name }}</span>
{% else %}
{% if f.is_office and onlyoffice_ready %}
<a href="/documents/edit/?pharmacy={{ pharmacy.pk }}&name={{ f.name|urlencode }}"
style="color:var(--color-primary); text-decoration:none;">{{ f.name }}</a>
{% else %}
<a href="/pharmacies/{{ pharmacy.pk }}/documents/download/?name={{ f.name|urlencode }}"
style="color:var(--color-primary); text-decoration:none;">{{ f.name }}</a>
{% endif %}
{% endif %}
</td>
<td style="padding:0.5rem 0.75rem; text-align:right; color:var(--color-muted-foreground); white-space:nowrap;">