{% 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 %} {% endfor %}
{{ name }} {% if value is same as (false) %} {% else %} {% endif %}
{% 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 %} {% endfor %}
{{ name }} {% if value is same as (false) %} {% else %} {% endif %}
{% 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 %} {% endfor %}
{{ name }} {{ value }}
{% endblock %} {% endembed %} {% embed '@theme/embeds/collapsible.html.twig' %} {% block title %}PHP{% endblock %} {% block body_class %}p-0{% endblock %} {% block body %} {% for name, value in settings %} {% endfor %} {% for name, value in info %} {% endfor %}
{{ 'version'|trans }} {{ constant('PHP_VERSION') }}
Modules {{ modules|join(', ') }}
{{ name }} {% if value is empty %} unknown {% else %} {{ value }} {% endif %}
{{ name }} {{ value|raw }}
{% 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 %}