mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
937 lines
38 KiB
HTML
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>
|