Files
nextcloud/php/templates/includes/optional-containers.twig
Pablo Zmdl 021854144b Show all strings translated, if available
AI-assistant: Copilot v1.0.7 (Claude Sonnet 4.6)

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-03-23 15:00:35 +01:00

290 lines
15 KiB
Twig

<h2>{{ t('Optional containers') }}</h2>
<p>{{ t('In this section you can enable or disable optional containers.') }}</p>
{% if isAnyRunning == true %}
<p><strong>{{ t('Please note:') }}</strong> {{ t('You can enable or disable the options below only when your containers are stopped.') }}</p>
{% else %}
<p><strong>{{ t('Please note:') }}</strong> {{ t('Make sure to save your changes by clicking') }} <strong>{{ t('Save changes') }}</strong> {{ t('below the list of optional containers. The changes will not be auto-saved.') }}</p>
{% endif %}
<form id="options-form" method="POST" action="api/configuration" class="xhr">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="hidden" name="options-form" value="options-form">
<h3>{{ t('Office Suite') }}</h3>
{% if isAnyRunning == false %}
<p>{{ t('Choose your preferred office suite. Only one can be enabled at a time.') }}</p>
{% endif %}
<div class="office-suite-cards">
<input
type="radio"
id="office-collabora"
name="office_suite_choice"
value="collabora"
class="office-radio"
{% if is_collabora_enabled == true %}
checked="checked"
{% endif %}
>
<label class="office-card{{ isAnyRunning ? ' office-card-disabled' : '' }}" for="office-collabora">
<div class="office-card-header">
<h4>{{ t('Nextcloud Office') }}</h4>
<svg class="office-checkmark" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="var(--color-nextcloud-blue)"/>
<path d="M7 12L10.5 15.5L17 9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<ul class="office-features">
<li>{{ t('Best Nextcloud integration') }}</li>
<li>{{ t('Open source') }}</li>
<li>{{ t('Good performance') }}</li>
<li>{{ t('Best security: documents never leave your server') }}</li>
<li>{{ t('Best ODF compatibility') }}</li>
<li>{{ t('Best support for legacy files') }}</li>
</ul>
{% if isAnyRunning == false %}
<a href="https://www.collaboraoffice.com/code/" target="_blank" class="office-learn-more" onclick="event.stopPropagation();">
{{ t('Learn more') }}
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="vertical-align: middle; margin-left: 4px;">
<path d="M6 12L10 8L6 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
{% endif %}
</label>
<input type="hidden" id="collabora" name="collabora" value="" data-initial-state="{% if is_collabora_enabled == true %}true{% else %}false{% endif %}">
<input
type="radio"
id="office-onlyoffice"
name="office_suite_choice"
value="onlyoffice"
class="office-radio"
{% if is_onlyoffice_enabled == true %}
checked="checked"
{% endif %}
>
<label class="office-card{{ isAnyRunning ? ' office-card-disabled' : '' }}" for="office-onlyoffice">
<div class="office-card-header">
<h4>{{ t('OnlyOffice') }}</h4>
<svg class="office-checkmark" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="var(--color-nextcloud-blue)"/>
<path d="M7 12L10.5 15.5L17 9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<ul class="office-features">
<li>{{ t('Good Nextcloud integration') }}</li>
<li>{{ t('Open core') }}</li>
<li>{{ t('Best performance') }}</li>
<li>{{ t('Best Microsoft compatibility') }}</li>
<li>{{ t('Limited ODF compatibility') }}</li>
</ul>
{% if isAnyRunning == false %}
<a href="https://www.onlyoffice.com/" target="_blank" class="office-learn-more" onclick="event.stopPropagation();">
{{ t('Learn more') }}
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="vertical-align: middle; margin-left: 4px;">
<path d="M6 12L10 8L6 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
{% endif %}
</label>
<input type="hidden" id="onlyoffice" name="onlyoffice" value="" data-initial-state="{% if is_onlyoffice_enabled == true %}true{% else %}false{% endif %}">
</div>
{% if isAnyRunning == false %}
<div class="office-none-card">
<input
type="radio"
id="office-none"
name="office_suite_choice"
value=""
class="office-radio"
{% if is_collabora_enabled == false and is_onlyoffice_enabled == false %}
checked="checked"
{% endif %}
>
<label class="office-none-label" for="office-none">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="vertical-align: middle; margin-right: 6px;">
<path d="M2 2L14 14M2 14L14 2" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
{{ t('Disable office suite') }}
</label>
</div>
{% endif %}
<input class="options-form-submit" type="submit" value="{{ t('Save changes') }}" />
<h3>{{ t('Additional Optional Containers') }}</h3>
<p>
<input
type="checkbox"
id="clamav"
name="clamav"
{% if is_clamav_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="clamav">{{ t('ClamAV (Antivirus backend for Nextcloud, needs ~1GB additional RAM)') }}</label>
</p>
<p>
<input
type="checkbox"
id="fulltextsearch"
name="fulltextsearch"
{% if is_fulltextsearch_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="fulltextsearch">
{{ t('Fulltextsearch (needs ~1GB additional RAM,') }} <a target="_blank" href="https://github.com/nextcloud/all-in-one/discussions/5768">{{ t('does not work on Kernels without Seccomp') }}</a>)
{% if is_fulltextsearch_enabled == false %}
. <strong>{{ t('Please note:') }}</strong> {{ t('the initial indexing can take a long time during which Nextcloud will be unavailable') }}
{% endif %}
</label>
</p>
<p>
<input
type="checkbox"
id="imaginary"
name="imaginary"
{% if is_imaginary_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="imaginary">{{ t('Imaginary (for previews of heic, heif, illustrator, pdf, svg, tiff and webp. Imaginary is currently') }} <a target="_blank" href="https://github.com/nextcloud/server/issues/34262">{{ t('incompatible with server-side-encryption') }}</a>)</label>
</p>
<p>
<input
type="checkbox"
id="talk"
name="talk"
{% if is_talk_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="talk">{{ t('Nextcloud Talk (needs ports') }} {{ talk_port }}/TCP {{ t('and') }} {{ talk_port }}/UDP {{ t('open/forwarded in your firewall/router)') }}</label>
</p>
<p>
<input
type="checkbox"
id="talk-recording"
name="talk-recording"
{% if is_talk_recording_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="talk-recording">{{ t('Nextcloud Talk Recording-server (needs Nextcloud Talk being enabled and ~1GB additional RAM and ~2 additional vCPUs)') }}</label>
</p>
<p>
<input
type="checkbox"
id="docker-socket-proxy"
name="docker-socket-proxy"
{% if is_docker_socket_proxy_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="docker-socket-proxy">{{ t('Docker Socket Proxy (needed for') }} <a target="_blank" href="https://github.com/cloud-py-api/app_api#nextcloud-appapi">{{ t('Nextcloud App API') }}</a>) ⚠️ {{ t('The docker socket proxy container is deprecated. Please use the HaRP (High-availability Reverse Proxy for Nextcloud ExApps) instead!') }}</label>
</p>
{#
<p>
<input
type="checkbox"
id="harp"
name="harp"
{% if is_harp_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="harp">HaRP (<a target="_blank" href="https://github.com/nextcloud/HaRP">High-availability Reverse Proxy</a> for Nextcloud ExApps)</label>
</p>
#}
<p>
<input
type="checkbox"
id="whiteboard"
name="whiteboard"
{% if is_whiteboard_enabled == true %}
checked="checked"
data-initial-state="true"
{% else %}
data-initial-state="false"
{% endif %}
>
<label for="whiteboard">{{ t('Whiteboard') }}</label>
</p>
<input class="options-form-submit" type="submit" value="{{ t('Save changes') }}" />
</form>
<p><strong>{{ t('Minimal system requirements:') }}</strong> {{ t('When any optional container is enabled, at least 2GB RAM, a dual-core CPU and 40GB system storage are required. When enabling ClamAV, Nextcloud Talk Recording-server or Fulltextsearch, at least 3GB RAM are required. For Talk Recording-server additional 2 vCPUs are required. When enabling everything, at least 5GB RAM and a quad-core CPU are required. Recommended are at least 1GB more RAM than the minimal requirement. For further advice and recommendations see') }} <strong><a target="_blank" href="https://github.com/nextcloud/all-in-one/discussions/1335">{{ t('this documentation') }}</a></strong></p>
{% if isAnyRunning == true %}
<script type="text/javascript" src="disable-clamav.js"></script>
<script type="text/javascript" src="disable-docker-socket-proxy.js"></script>
<script type="text/javascript" src="disable-harp.js"></script>
<script type="text/javascript" src="disable-talk.js"></script>
<script type="text/javascript" src="disable-collabora.js?v2"></script>
<script type="text/javascript" src="disable-onlyoffice.js?v2"></script>
<script type="text/javascript" src="disable-imaginary.js"></script>
<script type="text/javascript" src="disable-fulltextsearch.js"></script>
<script type="text/javascript" src="disable-talk-recording.js"></script>
<script type="text/javascript" src="disable-whiteboard.js"></script>
{% endif %}
{% if is_collabora_enabled == true and isAnyRunning == false and was_start_button_clicked == true %}
<h3>{{ t('Nextcloud Office dictionaries') }}</h3>
{% if collabora_dictionaries == "" %}
<p>{{ t('In order to get the correct dictionaries in Nextcloud Office, you may configure the dictionaries below:') }}</p>
<form method="POST" action="api/configuration" class="xhr">
<input type="text" name="collabora_dictionaries" placeholder="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" />
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="{{ t('Submit Nextcloud Office dictionaries') }}" />
</form>
<p>{{ t('You need to make sure that the dictionaries that you enter are valid. An example is') }} <strong>de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</strong>.</p>
{% else %}
<p>{{ t('The dictionaries for Nextcloud Office are currently set to') }} <strong>{{ collabora_dictionaries }}</strong>. {{ t('You can reset them again by clicking on the button below.') }}</p>
<form method="POST" action="api/configuration" class="xhr">
<input type="hidden" name="delete_collabora_dictionaries" value="yes"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="{{ t('Reset Nextcloud Office dictionaries') }}" />
</form>
{% endif %}
<h3>{{ t('Additional Nextcloud Office options') }}</h3>
{% if collabora_additional_options == "" %}
<p>{{ t('You can configure additional options for Nextcloud Office below.') }}</p>
<p>({{ t('This can be used for configuring the net.content_security_policy and more. Make sure to submit the value!') }})</p>
<form method="POST" action="api/configuration" class="xhr">
<input type="text" name="collabora_additional_options" />
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="{{ t('Submit additional Nextcloud Office options') }}" />
</form>
<p>{{ t('You need to make sure that the options that you enter are valid. An example is') }} <strong>--o:net.content_security_policy=frame-ancestors *.example.com:*;</strong>.</p>
{% else %}
<p>{{ t('The additional options for Nextcloud Office are currently set to') }} <strong>{{ collabora_additional_options }}</strong>. {{ t('You can reset them again by clicking on the button below.') }}</p>
<form method="POST" action="api/configuration" class="xhr">
<input type="hidden" name="delete_collabora_additional_options" value="yes"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="{{ t('Reset additional Nextcloud Office options') }}" />
</form>
{% endif %}
{% endif %}