{% extends 'base.html.twig' %}
{% block status %}
{% from "macros/status.html.twig" import status %}
{{ status(constant('App\\Constants::VERSION')) }}
{{ status(environment, environment == 'dev' ? 'danger-lt' : 'success-lt') }}
{% endblock %}
{% block main %}
{% if release is not null and release is iterable %}
{% embed '@theme/embeds/card.html.twig' with {'release': release, boxtype: 'warning'} %}
{% block box_title %}Kimai {{ release.version }} available (released on {{ release.date|date_short }}){% endblock %}
{% block box_body %}
{{ release.content|md2html }}
Read more
{% endblock %}
{% endembed %}
{% endif %}
{% set permissionOpts = {boxtype: 'success'} %}
{% for name, value in directories %}
{% if value is same as (false) %}
{% set permissionOpts = {boxtype: 'danger', open: true} %}
{% endif %}
{% endfor %}
{% embed '@theme/embeds/collapsible.html.twig' with permissionOpts %}
{% block title %}File permissions{% endblock %}
{% block body %}
If you see a warning icon in the list below, you should talk to your administrator.
The path is either not readable or not writable and Kimai might not work as expected.
{% for name, value in directories %}
| {{ name }} |
{% if value is same as (false) %}
{% else %}
{% endif %}
|
{% endfor %}
{% endblock %}
{% endembed %}
{% set extensionOpts = {boxtype: 'success'} %}
{% for name, value in extensions %}
{% if value is same as (false) %}
{% set extensionOpts = {boxtype: 'danger', open: true} %}
{% endif %}
{% endfor %}
{% embed '@theme/embeds/collapsible.html.twig' with extensionOpts %}
{% block title %}PHP extensions{% endblock %}
{% block body %}
If you see a warning icon in the list below, you should talk to your administrator, as there is a missing PHP extension causing Kimai not to work as expected.
{% for name, value in extensions %}
| {{ name }} |
{% if value is same as (false) %}
{% else %}
{% endif %}
|
{% endfor %}
{% endblock %}
{% endembed %}
{% set logOpts = {} %}
{% if logSize > 52428800 %}
{% set logOpts = {boxtype: 'danger', open: true} %}
{% endif %}
{% embed '@theme/embeds/collapsible.html.twig' with logOpts %}
{% from "@theme/components/button.html.twig" import button %}
{% block title %}Logfile (max. {{ logLines }} last lines){% endblock %}
{% block body %}
{% if logSize > 52428800 %}
Your logfile is larger than 50 MB, consider deleting it (it will be re-created automatically).
{% endif %}
{% for logLine in logs|reverse -%}
{%- set logLineClass = '' -%}
{%- if '.CRITICAL' in logLine -%}
{%- set logLineClass = 'text-danger text-bold' -%}
{%- elseif '.WARNING' in logLine -%}
{%- set logLineClass = 'text-warning text-bold' -%}
{%- elseif '.ERROR' in logLine -%}
{%- set logLineClass = 'text-warning text-bold' -%}
{%- elseif '.DEBUG' in logLine -%}
{%- set logLineClass = 'text-body-secondary' -%}
{%- endif -%}
{{- logLine -}}
{%- endfor %}
{% if log_delete %}
{{ button('delete', {combined: true, 'class': 'confirmation-link btn-danger', 'title': 'delete', 'url': path('doctor_flush_log', {'token': csrf_token('doctor.flush_log')}), 'attr': {'data-question': 'confirm.delete'}}) }}
{% endif %}
{% endblock %}
{% endembed %}
{% embed '@theme/embeds/collapsible.html.twig' %}
{% import "macros/widgets.html.twig" as widgets %}
{% block title %}Composer{% endblock %}
{% block body_class %}p-0{% endblock %}
{% block body %}
{% for name, value in composer %}
| {{ name }} |
{{ value }} |
{% endfor %}
{% endblock %}
{% endembed %}
{% embed '@theme/embeds/collapsible.html.twig' %}
{% block title %}PHP{% endblock %}
{% block body_class %}p-0{% endblock %}
{% block body %}
| {{ 'version'|trans }} |
{{ constant('PHP_VERSION') }} |
| Modules |
{{ modules|join(', ') }} |
{% for name, value in settings %}
| {{ name }} |
{% if value is empty %}
unknown
{% else %}
{{ value }}
{% endif %}
|
{% endfor %}
{% for name, value in info %}
| {{ name }} |
{{ value|raw }} |
{% endfor %}
{% endblock %}
{% endembed %}
{% set opcache_warning = not opcache['enabled'] %}
{% set opcache_unknown = opcache['unknown'] %}
{% embed '@theme/embeds/collapsible.html.twig' with {open: opcache_warning, boxtype: (opcache_warning ? (opcache_unknown ? 'warning' : 'danger') : 'success')} %}
{% block title %}OPCache{% endblock %}
{% block body_class %}p-0{% endblock %}
{% block body %}
{% import "macros/widgets.html.twig" as widgets %}
{% if opcache_warning %}
{% if opcache['unknown'] %}
{{ widgets.alert('warning', 'Could not detect OPCache status. Using shared hosting? Talk to your hoster to find out if it is activated.') }}
{% else %}
{{ widgets.alert('danger', 'Could not detect an active OPCache. This will significantly impact the performance of Kimai.') }}
{% endif %}
{% endif %}
{% if opcache['status'] is iterable %}
| Opcache Enabled |
{{ widgets.label_boolean(opcache['enabled']) }} |
| Opcache Full |
{{ widgets.label_boolean(opcache['status']['cache_full']) }} |
| Memory Used |
{{ (opcache['status']['memory_usage']['used_memory'] / 1024 / 1024)|number_format(2) }} MB |
| Memory Free |
{{ (opcache['status']['memory_usage']['free_memory'] / 1024 / 1024)|number_format(2) }} MB |
| Interned-Strings Used |
{{ (opcache['status']['interned_strings_usage']['used_memory'] / 1024 / 1024)|number_format(2) }} MB |
| Interned-Strings Free |
{{ (opcache['status']['interned_strings_usage']['free_memory'] / 1024 / 1024)|number_format(2) }} MB |
| Cached Scripts |
{{ opcache['status']['opcache_statistics']['num_cached_scripts'] }} |
| Cached Keys |
{{ opcache['status']['opcache_statistics']['num_cached_keys'] }} |
| Max Keys |
{{ opcache['status']['opcache_statistics']['max_cached_keys'] }} |
| Hit Rate |
{{ opcache['status']['opcache_statistics']['opcache_hit_rate']|number_format(2) }} |
| Jit enabled |
{{ widgets.label_boolean(opcache['status']['jit']['enabled']) }} |
| Buffer Size |
{{ (opcache['status']['jit']['buffer_size'] / 1024 / 1024)|number_format(2) }} MB |
| Buffer Free |
{{ (opcache['status']['jit']['buffer_free'] / 1024 / 1024)|number_format(2) }} MB |
{% endif %}
{% endblock %}
{% endembed %}
{% endblock %}