Files
openpanel/templates/admini/partials/sidebar.html
2024-10-25 01:44:26 +02:00

937 lines
38 KiB
HTML

<!-- Bootstrap Icons -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css"
/>
<aside id="sidebar" class="sidebar" data-bs-scroll="true">
<a class="sidebar-brand" href="/">
{% if logo %}
<span class="sidebar-brand-title" style="font-size: 1.9rem;">
<img src="{{logo}}" />
</span>
{% elif brand_name %}
<span
class="sidebar-brand-title text-center"
style="font-size: 1.9rem;"
>{{brand_name}}</span>
{% else %}
<span class="sidebar-brand-icon">
<svg
version="1.0"
style="vertical-align:middle;"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 213.000000 215.000000"
preserveAspectRatio="xMidYMid meet"
>
<g
transform="translate(0.000000,215.000000) scale(0.100000,-0.100000)"
fill="currentColor"
stroke="none"
>
<path
d="M990 2071 c-39 -13 -141 -66 -248 -129 -53 -32 -176 -103 -272 -158 -206 -117 -276 -177 -306 -264 -17 -50 -19 -88 -19 -460 0 -476 0 -474 94 -568 55 -56 124 -98 604 -369 169 -95 256 -104 384 -37 104 54 532 303 608 353 76 50 126 113 147 184 8 30 12 160 12 447 0 395 -1 406 -22 461 -34 85 -98 138 -317 264 -104 59 -237 136 -295 170 -153 90 -194 107 -275 111 -38 2 -81 0 -95 -5z m205 -561 c66 -38 166 -95 223 -127 l102 -58 0 -262 c0 -262 0 -263 -22 -276 -13 -8 -52 -31 -88 -51 -36 -21 -126 -72 -200 -115 l-135 -78 -3 261 -3 261 -166 95 c-91 52 -190 109 -219 125 -30 17 -52 34 -51 39 3 9 424 256 437 255 3 0 59 -31 125 -69z"
/>
</g>
</svg>
</span>
<span
class="sidebar-brand-title text-center"
style="font-size: 1.9rem;"
>{{brand}}</span>
{% endif %}
</a>
{% if user_websites %}
<!-- optional selector -->
{% if 'wordpress' in enabled_modules or 'pm2' in enabled_modules or 'mautic' in enabled_modules or 'flarum' in enabled_modules %}
<div class="dropdown">
<button
class="btn btn-secondary dropdown-toggle"
style="width: 100%;"
type="button"
id="sidebar-selector"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
{{ _('Select') }}
<span class="sidebar_open">{{ _('website') }}</span>
</button>
<div
class="dropdown-menu dropdown-menu-dark"
aria-labelledby="sidebar-selector"
>
{% for site in user_websites %}
<a
class="dropdown-item"
href="/website?domain={{ site[0] }}"
>
<span
class="punycode nav-link"
style="line-break: anywhere;"
>{{ site[0] }}</span>
</a>
{% endfor %}
<!-- cheap trick to add space after -->
</div>
</div>
{% endif %}
<div class="sidebar-profile dropdown">
{% if avatar_type == 'gravatar' %}
<a href="/account"><img src="{{ gravatar_image_url }}" class="avatar avatar-thumb rounded cursor-pointer" alt="{{ current_username }}"></a>
{% elif avatar_type == 'letter' %}
<div style="display: block;float: left;margin-right: 0.5rem;" class="avatar avatar-thumb bg-primary cursor-pointer"><span style="text-align: center;font-size: 2em;">{{ current_username[0] }}</span></div>
{% else %}
<i style="display: block;float: left;margin-right: 0.5rem;font-size: xx-large;" class="bi bi-person-circle"></i>
{% endif %}
<a href="/account" class="btn btn-link sidebar-profile-name">{{ current_username }}</a>
<div class="sidebar-profile-subtitle">{{ _('Administrator') }}</div>
</div>
{% if 'wordpress' in enabled_modules and 'pm2' in enabled_modules %}
<a
href="#"
id="openModalBtn"
data-bs-toggle="modal"
data-bs-target="#cardModal"
class="new_website_or_new_domain_main btn btn-sm btn-primary"
role="button"
>
<i class="bi bi-plus-lg"></i>
{{ _('New') }}
<span class="sidebar_open">{{ _('Website') }}</span>
</a>
{% endif %}
{% else %}
{% if total_domains_count == 0 %}
<a
href="/domains#add-new"
class="new_website_or_new_domain_main btn btn-sm btn-primary"
role="button"
>
<i class="bi bi-plus-lg"></i>
{{ _('Add') }}
<span class="sidebar_open">{{ _('your first domain') }}</span>
</a>
{% else %}
{% if 'wordpress' in enabled_modules and 'pm2' in enabled_modules %}
<a
href
id="openModalBtn"
data-bs-toggle="modal"
data-bs-target="#cardModal"
class="new_website_or_new_domain_main btn btn-sm btn-primary"
role="button"
>
<i class="bi bi-plus-lg"></i>
{{ _('Set up your website') }}
</a>
{% endif %}
{% endif %}
{% endif %}
<!-- sidebar-content -->
<div class="sidebar-content scroller">
<ul class="sidebar-nav" style="font-size:larger;">
{% if 'favorites' in enabled_modules %}
<li class="sidebar-nav-header">{{ _('Favorites') }}</li>
<div id="favorites-list"></div>
<script>
// Function to fetch favorites and populate the sidebar
function loadFavorites() {
fetch('/favorites')
.then(response => response.json())
.then(favorites => {
const favoritesList = document.getElementById('favorites-list');
favoritesList.innerHTML = ''; // Clear existing favorites
var currentPagePathFull = new URL(window.location.href);
var currentPagePath = currentPagePathFull.pathname + currentPagePathFull.search + currentPagePathFull.hash;
let isFavorite = false;
favorites.forEach(favorite => {
const { link, title } = favorite;
// Check if the current page is a favorite
if (currentPagePath === link) {
isFavorite = true;
}
const listItem = document.createElement('li');
listItem.className = 'sidebar-item favorite-link';
const linkItem = document.createElement('a');
linkItem.href = link;
linkItem.className = 'sidebar-link';
linkItem.innerHTML = `
<l-i class="bi bi-star"></l-i>
<span>${title}</span>
`;
listItem.appendChild(linkItem);
favoritesList.appendChild(listItem);
});
// If the current page is a favorite, change the button icon
if (isFavorite) {
const favoriteButton = document.getElementById('addFavoriteBtn');
favoriteButton.innerHTML = `
<l-i class="bi bi-star-fill" value="light" style="color:orange;font-size: large;"></l-i>
`;
// Update the button to indicate it's already in favorites
favoriteButton.dataset.isFavorite = 'true';
} else {
const favoriteButton = document.getElementById('addFavoriteBtn');
favoriteButton.dataset.isFavorite = 'false';
}
})
.catch(error => {
console.error('Error fetching favorites for user:', error);
});
}
//document.addEventListener('DOMContentLoaded', loadFavorites);
loadFavorites();
</script>
{% endif %}
{% if 'wordpress' in enabled_modules or 'pm2' in enabled_modules or 'mautic' in enabled_modules or 'flarum' in enabled_modules %}
<li class="sidebar-nav-header">{{ _('Applications') }}</li>
{% endif %}
{% if 'wordpress' in enabled_modules or 'pm2' in enabled_modules or 'mautic' in enabled_modules or 'flarum' in enabled_modules %}
<li class="sidebar-item">
<a
href="/sites"
class="sidebar-link {% if current_route.startswith('/sites') or current_route.startswith('website') or current_route.startswith('/pm2') or current_route.startswith('/website') or current_route.startswith('/mautic') or current_route.startswith('/flarum') %}active{% endif %}"
>
<l-i class="bi bi-app-indicator"></l-i>
<span>{{ _('Site Manager') }}</span>
</a>
</li>
<li class="sidebar-item">
<a
href="/auto-installer"
class="sidebar-link {% if current_route.startswith('/auto-installer') %}active{% endif %}"
>
<l-i class="bi bi-stars"></l-i>
<span>{{ _('Auto Installer') }}</span>
</a>
</li>
{% endif %}
<li class="sidebar-nav-header">{{ _('Files') }}</li>
<li class="sidebar-item">
<a
href="/files"
class="sidebar-link {% if current_route.startswith('/files') %}active{% endif %}"
>
<l-i class="bi bi-folder"></l-i>
<span>{{ _('File Manager') }}</span>
</a>
</li>
{% if 'ftp' in enabled_modules %}
<li class="sidebar-item">
<a
href="/ftp"
class="sidebar-link {% if current_route.startswith('/ftp') %}active{% endif %}"
>
<l-i class="bi bi-folder-symlink"></l-i>
<span>{{ _('FTP Accounts') }}</span>
</a>
</li>
{% endif %}
{% if 'backups' in enabled_modules %}
<li class="sidebar-item">
<a
href="/backups"
class="sidebar-link {% if current_route.startswith('/backup') %}active{% endif %}"
>
<l-i class="bi bi-folder-check"></l-i>
<span>{{ _('Backup & Restore') }}</span>
</a>
</li>
{% endif %}
{% if 'malware_scan' in enabled_modules %}
<li class="sidebar-item">
<a
href="/malware-scanner"
class="sidebar-link {% if current_route.startswith('/malware-scanner') %}active{% endif %}"
>
<l-i class="bi bi-upc-scan"></l-i>
<span>{{ _('ClamAV Scanner') }}</span>
</a>
</li>
{% endif %}
{% if 'disk_usage' in enabled_modules %}
<li class="sidebar-item">
<a
href="/disk-usage"
class="sidebar-link {% if current_route.startswith('/disk-usage') %}active{% endif %}"
>
<l-i class="bi bi-folder-plus"></l-i>
<span>{{ _('Disk Usage') }}</span>
</a>
</li>
{% endif %}
{% if 'inodes' in enabled_modules %}
<li class="sidebar-item">
<a
href="/inodes-explorer"
class="sidebar-link {% if current_route.startswith('/inodes-explorer') %}active{% endif %}"
>
<l-i class="bi bi-folder-x"></l-i>
<span>{{ _('Inodes Explorer') }}</span>
</a>
</li>
{% endif %}
{% if 'fix_permissions' in enabled_modules %}
<li class="sidebar-item">
<a
href="/fix-permissions"
class="sidebar-link {% if current_route.startswith('/fix-permissions') %}active{% endif %}"
>
<l-i class="bi bi-file-binary-fill"></l-i>
<span>{{ _('Fix Permissions') }}</span>
</a>
</li>
{% endif %}
{% if 'emails' in enabled_modules %}
<li class="sidebar-nav-header">{{ _('Emails') }}</li>
<li class="sidebar-item">
<a
href="/emails"
class="sidebar-link {% if current_route == '/emails' %}active{% endif %}"
>
<l-i class="bi bi-envelope"></l-i>
<span>{{ _('Email Accounts') }}</span>
</a>
</li>
<li class="sidebar-item">
<a
href="/webmail/" target="_blank"
class="sidebar-link {% if current_route == '/webmail' %}active{% endif %}"
>
<l-i class="bi bi-envelope-at"></l-i>
<span>{{ _('Webmail') }}</span>
</a>
</li>
<li class="d-none sidebar-item">
<a
href="/emails/forwarders"
class="sidebar-link {% if current_route.startswith('/emails/forwarders') %}active{% endif %}"
>
<l-i class="bi bi-envelope-exclamation"></l-i>
<span>{{ _('Forwarders') }}</span>
</a>
</li>
<li class="d-none sidebar-item">
<a
href="/emails/autoresponders"
class="sidebar-link {% if current_route.startswith('/emails/autoresponders') %}active{% endif %}"
>
<l-i class="bi bi-envelope-check"></l-i>
<span>{{ _('Autoresponders') }}</span>
</a>
</li>
<li class="d-none sidebar-item">
<a
href="/emails/track-delivery"
class="sidebar-link {% if current_route.startswith('/emails/track-delivery') %}active{% endif %}"
>
<l-i class="bi bi-envelope"></l-i>
<span>{{ _('Track Delivery') }}</span>
</a>
</li>
<li class="d-none sidebar-item">
<a
href="/emails/filters"
class="sidebar-link {% if current_route.startswith('/emails/filters') %}active{% endif %}"
>
<l-i class="bi bi-envelope-slash"></l-i>
<span>{{ _('Email Filters') }}</span>
</a>
</li>
<li class="d-none sidebar-item">
<a
href="/emails/disk-usage"
class="sidebar-link {% if current_route.startswith('/emails/disk-usage') %}active{% endif %}"
>
<l-i class="bi bi-envelope-arrow-down"></l-i>
<span>{{ _('Email Disk Usage') }}</span>
</a>
</li>
{% endif %}
<li class="sidebar-nav-header">{{ _('Databases') }}</li>
<li class="sidebar-item">
<a
href="/databases"
class="sidebar-link {% if current_route == '/databases' %}active{% endif %}"
>
<l-i class="bi bi-database"></l-i>
<span>{{ _('MySQL Databases') }}</span>
</a>
</li>
{% if 'phpmyadmin' in enabled_modules %}
<li class="sidebar-item">
<a
href="/phpmyadmin?route=/database/structure&server=1"
target="_blank"
class="sidebar-link"
>
<l-i class="bi bi-database-gear"></l-i>
<span>{{ _('phpMyAdmin') }}</span>
</a>
</li>
{% endif %}
<li class="sidebar-item">
<a
href="/databases/remote-mysql"
class="sidebar-link {% if current_route.startswith('/databases/remote-mysql') %}active{% endif %}"
>
<l-i class="bi bi-database-exclamation"></l-i>
<span>{{ _('Remote MySQL') }}</span>
</a>
</li>
<li class="sidebar-item">
<a
href="/databases/processlist"
class="sidebar-link {% if current_route.startswith('/databases/processlist') %}active{% endif %}"
>
<l-i class="bi bi-database-slash"></l-i>
<span>{{ _('Show Processes') }}</span>
</a>
</li>
<li class="sidebar-nav-header">{{ _('Domains') }}</li>
<li class="sidebar-item">
<a
href="/domains"
class="sidebar-link {% if current_route == '/domains' %}active{% endif %}"
>
<l-i class="bi bi-globe2"></l-i>
<span>{{ _('Domain Names') }}</span>
</a>
</li>
<li class="sidebar-item">
<a
href="/domains/edit-dns-zone"
class="sidebar-link {% if current_route.startswith('/domains/edit-dns-zone') %}active{% endif %}"
>
<l-i class="bi bi-pencil-square"></l-i>
<span>{{ _('DNS Zone Editor') }}</span>
</a>
</li>
<li class="sidebar-item">
<a
href="/ssl"
class="sidebar-link {% if current_route.startswith('/ssl') %}active{% endif %}"
>
<l-i class="bi bi-lock"></l-i>
<span>{{ _('SSL Certificates') }}</span>
</a>
</li>
{% if 'redis' in enabled_modules or 'memcached' in enabled_modules or 'elasticsearch' in enabled_modules%}
<li class="sidebar-nav-header">{{ _('Caching & Search') }}</li>
{% endif %}
{% if 'redis' in enabled_modules %}
<li class="sidebar-item">
<a
href="/cache/redis"
class="sidebar-link {% if current_route.startswith('/cache/redis') %}active{% endif %}"
>
<l-i>
<svg
width="20px"
height="20px"
viewBox="0 -18 256 256"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="xMinYMin meet"
>
<path
d="M245.97 168.943c-13.662 7.121-84.434 36.22-99.501 44.075-15.067 7.856-23.437 7.78-35.34 2.09-11.902-5.69-87.216-36.112-100.783-42.597C3.566 169.271 0 166.535 0 163.951v-25.876s98.05-21.345 113.879-27.024c15.828-5.679 21.32-5.884 34.79-.95 13.472 4.936 94.018 19.468 107.331 24.344l-.006 25.51c.002 2.558-3.07 5.364-10.024 8.988"
fill="#912626"
/>
<path
d="M245.965 143.22c-13.661 7.118-84.431 36.218-99.498 44.072-15.066 7.857-23.436 7.78-35.338 2.09-11.903-5.686-87.214-36.113-100.78-42.594-13.566-6.485-13.85-10.948-.524-16.166 13.326-5.22 88.224-34.605 104.055-40.284 15.828-5.677 21.319-5.884 34.789-.948 13.471 4.934 83.819 32.935 97.13 37.81 13.316 4.881 13.827 8.9.166 16.02"
fill="#C6302B"
/>
<path
d="M245.97 127.074c-13.662 7.122-84.434 36.22-99.501 44.078-15.067 7.853-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.112-100.783-42.597C3.566 127.402 0 124.67 0 122.085V96.206s98.05-21.344 113.879-27.023c15.828-5.679 21.32-5.885 34.79-.95C162.142 73.168 242.688 87.697 256 92.574l-.006 25.513c.002 2.557-3.07 5.363-10.024 8.987"
fill="#912626"
/>
<path
d="M245.965 101.351c-13.661 7.12-84.431 36.218-99.498 44.075-15.066 7.854-23.436 7.777-35.338 2.087-11.903-5.686-87.214-36.112-100.78-42.594-13.566-6.483-13.85-10.947-.524-16.167C23.151 83.535 98.05 54.148 113.88 48.47c15.828-5.678 21.319-5.884 34.789-.949 13.471 4.934 83.819 32.933 97.13 37.81 13.316 4.88 13.827 8.9.166 16.02"
fill="#C6302B"
/>
<path
d="M245.97 83.653c-13.662 7.12-84.434 36.22-99.501 44.078-15.067 7.854-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.113-100.783-42.595C3.566 83.98 0 81.247 0 78.665v-25.88s98.05-21.343 113.879-27.021c15.828-5.68 21.32-5.884 34.79-.95C162.142 29.749 242.688 44.278 256 49.155l-.006 25.512c.002 2.555-3.07 5.361-10.024 8.986"
fill="#912626"
/>
<path
d="M245.965 57.93c-13.661 7.12-84.431 36.22-99.498 44.074-15.066 7.854-23.436 7.777-35.338 2.09C99.227 98.404 23.915 67.98 10.35 61.497-3.217 55.015-3.5 50.55 9.825 45.331 23.151 40.113 98.05 10.73 113.88 5.05c15.828-5.679 21.319-5.883 34.789-.948 13.471 4.935 83.819 32.934 97.13 37.811 13.316 4.876 13.827 8.897.166 16.017"
fill="#C6302B"
/>
<path
d="M159.283 32.757l-22.01 2.285-4.927 11.856-7.958-13.23-25.415-2.284 18.964-6.839-5.69-10.498 17.755 6.944 16.738-5.48-4.524 10.855 17.067 6.391M131.032 90.275L89.955 73.238l58.86-9.035-17.783 26.072M74.082 39.347c17.375 0 31.46 5.46 31.46 12.194 0 6.736-14.085 12.195-31.46 12.195s-31.46-5.46-31.46-12.195c0-6.734 14.085-12.194 31.46-12.194"
fill="#FFF"
/>
<path
d="M185.295 35.998l34.836 13.766-34.806 13.753-.03-27.52"
fill="#621B1C"
/>
<path
d="M146.755 51.243l38.54-15.245.03 27.519-3.779 1.478-34.791-13.752"
fill="#9A2928"
/>
</svg>
</l-i>
<span>{{ _('REDIS') }}</span>
</a>
</li>
{% endif %}
{% if 'memcached' in enabled_modules %}
<li class="sidebar-item">
<a
href="/cache/memcached"
class="sidebar-link {% if current_route.startswith('/cache/memcached') %}active{% endif %}"
>
<l-i>
<?xml version="1.0" encoding="UTF-8"?>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="20px"
height="20px"
viewBox="0 0 20 20"
version="1.1"
>
<defs>
<linearGradient
id="linear0"
gradientUnits="userSpaceOnUse"
x1="255.894"
y1="59.789"
x2="255.894"
y2="-452"
gradientTransform="matrix(0.0390787,0,0,0.0390787,0.0000003125,17.663591)"
>
<stop
offset="0"
style="stop-color:rgb(34.117647%,29.803922%,29.019608%);stop-opacity:1;"
/>
<stop
offset="1"
style="stop-color:rgb(50.196078%,44.313725%,42.745098%);stop-opacity:1;"
/>
</linearGradient>
<linearGradient
id="linear1"
gradientUnits="userSpaceOnUse"
x1="380.442"
y1="-51.758"
x2="191.971"
y2="-382.305"
gradientTransform="matrix(0.0390787,0,0,0.0390787,0.0000003125,17.663591)"
>
<stop
offset="0"
style="stop-color:rgb(14.901961%,55.294118%,51.372549%);stop-opacity:1;"
/>
<stop
offset="1"
style="stop-color:rgb(18.039216%,63.137255%,61.960784%);stop-opacity:1;"
/>
</linearGradient>
<radialGradient
id="radial0"
gradientUnits="userSpaceOnUse"
cx="62.417"
cy="142.923"
fx="62.417"
fy="142.923"
r="9.213"
gradientTransform="matrix(0.0789391,0,0,0.0789391,3.615957,3.719512)"
>
<stop
offset="0"
style="stop-color:rgb(85.882353%,48.627451%,48.627451%);stop-opacity:1;"
/>
<stop
offset="1"
style="stop-color:rgb(78.431373%,21.568627%,21.568627%);stop-opacity:1;"
/>
</radialGradient>
<radialGradient
id="radial1"
gradientUnits="userSpaceOnUse"
cx="96.726"
cy="142.923"
fx="96.726"
fy="142.923"
r="9.213"
gradientTransform="matrix(0.0789391,0,0,0.0789391,3.615957,3.719512)"
>
<stop
offset="0"
style="stop-color:rgb(85.882353%,48.627451%,48.627451%);stop-opacity:1;"
/>
<stop
offset="1"
style="stop-color:rgb(78.431373%,21.568627%,21.568627%);stop-opacity:1;"
/>
</radialGradient>
<filter
id="alpha"
filterUnits="objectBoundingBox"
x="0%"
y="0%"
width="100%"
height="100%"
>
<feColorMatrix
type="matrix"
in="SourceGraphic"
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
/>
</filter>
<mask id="mask0">
<g filter="url(#alpha)">
<rect
x="0"
y="0"
width="20"
height="20"
style="fill:rgb(0%,0%,0%);fill-opacity:0.101961;stroke:none;"
/>
</g>
</mask>
<clipPath id="clip1">
<rect x="0" y="0" width="20" height="20" />
</clipPath>
<g id="surface5" clip-path="url(#clip1)">
<path
style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;"
d="M 15.539062 3.976562 C 15.984375 6.980469 16.085938 9.859375 16.078125 12.003906 C 16.070312 14.199219 15.945312 15.625 15.945312 15.625 L 13.359375 15.625 L 13.082031 15.835938 L 16.152344 15.835938 C 16.152344 15.835938 16.667969 10 15.683594 3.769531 Z M 7.398438 3.902344 C 8.203125 4.800781 9.601562 7.183594 9.792969 7.183594 C 9.28125 6.527344 8.023438 4.441406 7.398438 3.902344 Z M 6.246094 6.941406 C 5.371094 6.964844 6.421875 14.070312 6.714844 15.625 L 4.03125 15.625 L 3.847656 15.835938 L 6.921875 15.835938 C 6.632812 14.289062 5.589844 7.246094 6.441406 7.148438 C 6.363281 7.03125 6.292969 6.949219 6.246094 6.941406 Z M 13.34375 6.941406 C 12.875 7.015625 10.738281 12.96875 10.738281 12.96875 C 10.738281 12.96875 10.265625 12.910156 9.792969 12.910156 C 9.511719 12.910156 9.273438 12.929688 9.109375 12.945312 L 9.058594 13.179688 C 9.058594 13.179688 9.527344 13.121094 10.003906 13.121094 C 10.476562 13.121094 10.945312 13.179688 10.945312 13.179688 C 10.945312 13.179688 13.066406 7.261719 13.542969 7.148438 C 13.492188 7.019531 13.429688 6.945312 13.34375 6.941406 Z M 13.34375 6.941406 "
/>
</g>
<mask id="mask1">
<g filter="url(#alpha)">
<rect
x="0"
y="0"
width="20"
height="20"
style="fill:rgb(0%,0%,0%);fill-opacity:0.301961;stroke:none;"
/>
</g>
</mask>
<clipPath id="clip2">
<rect x="0" y="0" width="20" height="20" />
</clipPath>
<g id="surface8" clip-path="url(#clip2)">
<path
style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;"
d="M 4.316406 3.769531 C 3.335938 10 3.847656 15.835938 3.847656 15.835938 L 4.03125 15.632812 C 3.9375 14.253906 3.691406 9.277344 4.527344 3.980469 L 7.371094 3.980469 C 7.429688 3.980469 7.511719 4.027344 7.605469 4.109375 C 7.417969 3.902344 7.265625 3.773438 7.164062 3.769531 Z M 12.839844 3.769531 C 12.300781 3.777344 10.238281 7.390625 10 7.390625 C 10.097656 7.515625 10.175781 7.601562 10.210938 7.601562 C 10.445312 7.601562 12.507812 3.984375 13.046875 3.980469 L 15.558594 3.980469 L 15.683594 3.773438 Z M 6.648438 7.359375 C 7.339844 8.394531 9.058594 13.179688 9.058594 13.179688 L 9.109375 12.945312 C 8.683594 11.78125 7.066406 7.421875 6.660156 7.359375 C 6.65625 7.359375 6.652344 7.359375 6.648438 7.359375 Z M 13.757812 7.359375 C 14.222656 8.539062 13.34375 14.4375 13.082031 15.835938 L 13.359375 15.617188 C 13.714844 13.53125 14.574219 7.378906 13.757812 7.359375 Z M 13.757812 7.359375 "
/>
</g>
</defs>
<g id="surface1">
<path
style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);"
d="M 0 13.511719 L 0 6.488281 C 0 0.8125 0.808594 0 6.480469 0 L 13.519531 0 C 19.191406 0 20 0.8125 20 6.488281 L 20 13.511719 C 20 19.1875 19.191406 20 13.519531 20 L 6.480469 20 C 0.808594 20 0 19.1875 0 13.511719 Z M 0 13.511719 "
/>
<path
style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);"
d="M 4.316406 3.769531 C 3.335938 10 3.847656 15.835938 3.847656 15.835938 L 6.921875 15.835938 C 6.628906 14.277344 5.582031 7.171875 6.453125 7.148438 C 6.921875 7.222656 9.058594 13.179688 9.058594 13.179688 C 9.058594 13.179688 9.527344 13.121094 10 13.121094 C 10.476562 13.121094 10.945312 13.179688 10.945312 13.179688 C 10.945312 13.179688 13.082031 7.222656 13.550781 7.148438 C 14.421875 7.171875 13.375 14.277344 13.082031 15.835938 L 16.15625 15.835938 C 16.15625 15.835938 16.667969 10 15.683594 3.769531 L 12.839844 3.769531 C 12.300781 3.777344 10.238281 7.390625 10 7.390625 C 9.765625 7.390625 7.703125 3.777344 7.164062 3.769531 Z M 4.316406 3.769531 "
/>
<path
style=" stroke:none;fill-rule:nonzero;fill:url(#radial0);"
d="M 9.394531 15.109375 C 9.394531 15.507812 9.070312 15.835938 8.667969 15.835938 C 8.265625 15.835938 7.941406 15.507812 7.941406 15.109375 C 7.941406 14.707031 8.265625 14.378906 8.667969 14.378906 C 9.070312 14.378906 9.394531 14.707031 9.394531 15.109375 Z M 9.394531 15.109375 "
/>
<path
style=" stroke:none;fill-rule:nonzero;fill:url(#radial1);"
d="M 12.0625 15.109375 C 12.0625 15.507812 11.738281 15.835938 11.335938 15.835938 C 10.933594 15.835938 10.609375 15.507812 10.609375 15.109375 C 10.609375 14.707031 10.933594 14.378906 11.335938 14.378906 C 11.738281 14.378906 12.0625 14.707031 12.0625 15.109375 Z M 12.0625 15.109375 "
/>
<use xlink:href="#surface5" mask="url(#mask0)" />
<use xlink:href="#surface8" mask="url(#mask1)" />
</g>
</svg>
</l-i>
<span>{{ _('Memcached') }}</span>
</a>
</li>
{% endif %}
{% if 'elasticsearch' in enabled_modules %}
<li class="sidebar-item">
<a
href="/search/elasticsearch"
class="sidebar-link {% if current_route.startswith('/search/elasticsearch') %}active{% endif %}"
>
<l-i>
<?xml version="1.0" encoding="UTF-8"?>
<svg
width="20px"
height="20px"
viewBox="0 0 256 286"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
preserveAspectRatio="xMidYMid"
>
<g>
<path
d="M14.3443,80.1733 L203.5503,80.1733 C224.4013,80.1733 243.0203,70.6123 255.5133,55.6863 C229.4533,21.8353 188.5523,0.0003 142.5303,0.0003 C86.1783,0.0003 37.4763,32.7113 14.3443,80.1733"
fill="#F0BF1A"
/>
<path
d="M187.5152,102.4438 L5.7552,102.4438 C2.0332,115.1648 0.0002,128.6068 0.0002,142.5298 C0.0002,156.4538 2.0332,169.8968 5.7552,182.6168 L187.5152,182.6168 C209.3402,182.6168 227.6022,164.8008 227.6022,142.5298 C227.6022,120.2598 209.7862,102.4438 187.5152,102.4438"
fill="#07A5DE"
/>
<path
d="M255.9996,228.7548 C243.5856,214.1638 225.1166,204.8868 204.4406,204.8868 L14.3446,204.8868 C37.4766,252.3498 86.1786,285.0598 142.5296,285.0598 C188.8356,285.0598 229.9656,262.9628 255.9996,228.7548"
fill="#3EBEB0"
/>
<path
d="M5.7555,102.4438 C2.0325,115.1648 0.0005,128.6068 0.0005,142.5298 C0.0005,156.4538 2.0325,169.8968 5.7555,182.6168 L124.7135,182.6168 C127.8315,170.5908 129.6125,157.2288 129.6125,142.5298 C129.6125,127.8318 127.8315,114.4698 124.7135,102.4438 L5.7555,102.4438 Z"
fill="#231F20"
/>
<path
d="M70.8199,19.1528 C46.7669,33.4058 26.7239,54.7848 14.2529,80.1738 L119.3689,80.1738 C108.6789,55.6758 91.7539,35.1878 70.8199,19.1528"
fill="#D7A229"
/>
<path
d="M75.274,268.1347 C95.762,251.6547 112.242,229.8297 122.487,204.8867 L14.253,204.8867 C27.615,231.6117 48.995,253.8817 75.274,268.1347"
fill="#019B8F"
/>
</g>
</svg>
</l-i>
<span>{{ _('ElasticSearch') }}</span>
</a>
</li>
{% endif %}
{% if 'usage' in enabled_modules or 'domain_visitors' in enabled_modules or 'login_history' in enabled_modules %}
<li class="sidebar-nav-header">{{ _('Analytics') }}</li>
{% endif %}
{% if 'usage' in enabled_modules %}
<li class="sidebar-item">
<a
href="/usage"
class="sidebar-link {% if current_route.startswith ('/usage') %}active{% endif %}"
>
<l-i class="bi bi-speedometer2"></l-i>
<span>{{ _('Resource Usage') }}</span>
</a>
</li>
{% endif %}
{% if 'domain_visitors' in enabled_modules %}
<li class="sidebar-item">
<a
href="/domains/log"
class="sidebar-link {% if current_route.startswith('/domains/log') %}active{% endif %}"
>
<l-i class="bi bi-graph-up"></l-i>
<span>{{ _('Domain Visitors') }}</span>
</a>
</li>
{% endif %}
{% if 'login_history' in enabled_modules %}
<li class="sidebar-item">
<a
href="/activity"
class="sidebar-link {% if current_route.startswith('/activity') %}active{% endif %}"
>
<l-i class="bi bi-globe-americas"></l-i>
<span>{{ _('Account Activity') }}</span>
</a>
</li>
{% endif %}
{% if 'crons' in enabled_modules or 'ssh' in enabled_modules or 'terminal' in enabled_modules or 'usage' in enabled_modules or 'process_manager' in enabled_modules or 'webserver' in enabled_modules%}
<li class="sidebar-nav-header">{{ _('Advanced') }}</li>
{% endif %}
{% if 'crons' in enabled_modules %}
<li class="sidebar-item">
<a
href="/cronjobs"
class="sidebar-link {% if current_route == '/cronjobs' %}active{% endif %}"
>
<l-i class="bi bi-clock-history"></l-i>
<span>{{ _('Cron Jobs') }}</span>
</a>
</li>
{% endif %}
{% if 'ssh' in enabled_modules %}
<li class="sidebar-item">
<a
href="/ssh"
class="sidebar-link {% if current_route == '/ssh' %}active{% endif %}"
>
<l-i class="bi bi-terminal"></l-i>
<span>{{ _('SSH Access') }}</span>
</a>
</li>
{% endif %}
{% if 'terminal' in enabled_modules %}
<li class="sidebar-item">
<a
href="/terminal"
class="sidebar-link {% if current_route.startswith('/terminal')%}active{% endif %}"
>
<l-i class="bi bi-terminal-x"></l-i>
<span>{{ _('Web Terminal') }}</span>
</a>
</li>
{% endif %}
{% if 'process_manager' in enabled_modules %}
<li class="sidebar-item">
<a
href="/process-manager"
class="sidebar-link has-sub {% if current_route.startswith('/process-manager')%}active{% endif %}"
>
<l-i class="bi bi-cpu"></l-i>
<span>{{ _('Process Manager') }}</span>
</a>
</li>
{% endif %}
{% if 'services' in enabled_modules %}
<li class="sidebar-item">
<a
href="/server/settings"
class="sidebar-link has-sub {% if current_route.startswith('/server') or current_route.startswith('/server/mysql_conf')%}active{% endif %}"
>
<l-i class="bi bi-hdd-network"></l-i>
<span>{{ _('Server Settings') }}</span>
</a>
</li>
{% endif %}
</ul>
</div>
<!-- /sidebar-content -->
<!-- sidebar-footer -->
<div class="sidebar-footer">
<button class="btn btn-default sidebar-toggle js-sidebar-toggle">
<l-i class="bi bi-chevron-left"></l-i>
</button>
<div class="dropup">
<button
class="btn btn-default"
id="help-dropdown-btn"
data-bs-toggle="dropdown"
>
<l-i class="bi bi-info-circle-fill"></l-i>
</button>
<ul
class="dropdown-menu dropdown-menu-dark"
aria-labelledby="help-dropdown-btn"
>
<li>
<a
class="dropdown-item"
target="_blank"
href="https://openpanel.com/docs/panel/intro"
>{{ _('Documentation') }}</a>
</li>
<li>
<a
class="dropdown-item"
target="_blank"
href="https://community.openpanel.com/t/openpanel"
>{{ _('Support Forums') }}</a>
</li>
<li>
<hr class="dropdown-divider" />
</li>
<li>
<a
class="dropdown-item js-darkmode-toggle"
href="#"
>{{ _('Toggle dark mode') }}</a>
</li>
<li>
<hr class="dropdown-divider" />
</li>
<p class="m-3 mb-0">
<small>
<a
href="https://openpanel.com/docs/changelog/{{ panel_version }}"
target="_blank"
>
<svg
version="1.0"
style="vertical-align:middle;"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 213.000000 215.000000"
preserveAspectRatio="xMidYMid meet"
>
<g
transform="translate(0.000000,215.000000) scale(0.100000,-0.100000)"
fill="currentColor"
stroke="none"
>
<path
d="M990 2071 c-39 -13 -141 -66 -248 -129 -53 -32 -176 -103 -272 -158 -206 -117 -276 -177 -306 -264 -17 -50 -19 -88 -19 -460 0 -476 0 -474 94 -568 55 -56 124 -98 604 -369 169 -95 256 -104 384 -37 104 54 532 303 608 353 76 50 126 113 147 184 8 30 12 160 12 447 0 395 -1 406 -22 461 -34 85 -98 138 -317 264 -104 59 -237 136 -295 170 -153 90 -194 107 -275 111 -38 2 -81 0 -95 -5z m205 -561 c66 -38 166 -95 223 -127 l102 -58 0 -262 c0 -262 0 -263 -22 -276 -13 -8 -52 -31 -88 -51 -36 -21 -126 -72 -200 -115 l-135 -78 -3 261 -3 261 -166 95 c-91 52 -190 109 -219 125 -30 17 -52 34 -51 39 3 9 424 256 437 255 3 0 59 -31 125 -69z"
/>
</g>
</svg> OpenPanel
<b>{{ panel_version }}</b>
</a>
</small>
</p>
</ul>
</div>
</div>
<!-- /sidebar-footer -->
</aside>
<script type="module">
// this get cleaned up by sco-pe automatically and added to head
let scope = document.getElementById('sidebar-scope');
window.admini.initialize("#sidebar-selector", (el) => {
el.addEventListener("change", (ev) => {
let color = el.selectedOptions[0].style.backgroundColor;
if (color) {
document.querySelector(".sidebar-brand").style.backgroundColor = color;
} else {
document.querySelector(".sidebar-brand").style.backgroundColor = "inherit";
}
});
})
</script>