mirror of
https://github.com/itflow-org/itflow
synced 2026-08-05 07:07:14 +00:00
Response/resolution targets stamped at creation from per-client/priority assignments, business-hours due date math, warn/breach alert stages via cron/ticket_sla.php, ticket list coloring, per-ticket SLA override, admin page for plans/assignments/business hours. DB update 2.5.0. No behavior change unless SLAs are assigned. Bulk reply now only counts Public replies as first response.
339 lines
19 KiB
PHP
339 lines
19 KiB
PHP
<!-- Main Sidebar Container -->
|
|
<aside class="main-sidebar sidebar-dark-<?= escapeHtml($config_theme) ?> d-print-none">
|
|
<a class="brand-link pb-1 mt-1" href="/agent/<?= $config_start_page ?>">
|
|
<p class="h6">
|
|
<i class="nav-icon fas fa-arrow-left ml-3 mr-2"></i>
|
|
<span class="brand-text">
|
|
Back | <strong>Administration</strong>
|
|
</span>
|
|
</p>
|
|
</a>
|
|
|
|
<!-- Sidebar -->
|
|
<div class="sidebar">
|
|
<!-- Sidebar Menu -->
|
|
<nav>
|
|
<ul class="nav nav-pills nav-sidebar flex-column mt-2" data-widget="treeview" data-accordion="false">
|
|
<li class="nav-header">ACCESS</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/users.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "users.php") {echo "active";} ?>">
|
|
<i class="nav-icon fas fa-users"></i>
|
|
<p>Users</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/roles.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "roles.php") {echo "active";} ?>">
|
|
<i class="nav-icon fas fa-user-shield"></i>
|
|
<p>Roles</p>
|
|
</a>
|
|
</li>
|
|
<!-- 2025-12-05 JQ - Hide Permission Modules currently just shows modules
|
|
<li class="nav-item">
|
|
<a href="/admin/modules.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "modules.php") {echo "active";} ?>">
|
|
<i class="nav-icon fas fa-puzzle-piece"></i>
|
|
<p>Modules</p>
|
|
</a>
|
|
</li>
|
|
-->
|
|
<li class="nav-item">
|
|
<a href="/admin/api_keys.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "api_keys.php") {echo "active";} ?>">
|
|
<i class="nav-icon fas fa-key"></i>
|
|
<p>API Keys</p>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-header">LISTS</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/tags.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'tags.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-tags"></i>
|
|
<p>Tags</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/categories.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'categories.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-list-ul"></i>
|
|
<p>Categories</p>
|
|
</a>
|
|
</li>
|
|
<?php if ($config_module_enable_accounting) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/tax_rates.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'tax_rates.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-balance-scale"></i>
|
|
<p>Tax Rates</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/payment_methods.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'payment_methods.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-hand-holding-usd"></i>
|
|
<p>Payment Methods</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_ticketing) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/ticket_statuses.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'ticket_statuses.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-info-circle"></i>
|
|
<p>Ticket Statuses</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_ticketing) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/sla.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'sla.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-stopwatch"></i>
|
|
<p>SLAs</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
|
|
<li class="nav-header">INTEGRATIONS</li>
|
|
<?php if ($config_module_enable_accounting) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/payment_providers.php"
|
|
class="nav-link <?= (in_array(basename($_SERVER['PHP_SELF']), ['payment_providers.php', 'saved_payment_methods.php']) ? 'active' : '') ?>">
|
|
<i class="nav-icon far fa-credit-card"></i>
|
|
<p>Payment Providers</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/ai_providers.php"
|
|
class="nav-link <?= (in_array(basename($_SERVER['PHP_SELF']), ['ai_providers.php', 'ai_models.php']) ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-robot"></i>
|
|
<p>AI Providers</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/custom_links.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'custom_links.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-external-link-alt"></i>
|
|
<p>Custom Links</p>
|
|
</a>
|
|
</li>
|
|
|
|
<?php if ($config_module_enable_itdoc || $config_module_enable_ticketing) { ?>
|
|
<li class="nav-header">TEMPLATES</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_ticketing) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/project_templates.php" class="nav-link <?= (in_array(basename($_SERVER['PHP_SELF']), ['project_templates.php', 'project_template.php']) ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-project-diagram"></i>
|
|
<p>Project Templates</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/ticket_templates.php" class="nav-link <?= (in_array(basename($_SERVER['PHP_SELF']), ['ticket_templates.php', 'ticket_template.php']) ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-life-ring"></i>
|
|
<p>Ticket Templates</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_itdoc) { ?>
|
|
<!-- 2025-11-16 JQ - Hide Contracts not yet ready
|
|
<li class="nav-item">
|
|
<a href="/admin/contract_templates.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'contract_templates.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-file-contract"></i>
|
|
<p>
|
|
<span href="#" class="fas fa-plus-circle right ajax-modal" data-modal-url="/admin/modals/contract_template/contract_template_add.php" data-modal-size="lg"></span>
|
|
Contract Templates
|
|
</p>
|
|
</a>
|
|
</li>
|
|
-->
|
|
<li class="nav-item">
|
|
<a href="/admin/vendor_templates.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'vendor_templates.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-building"></i>
|
|
<p>Vendor Templates</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/software_templates.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'software_templates.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-box-open"></i>
|
|
<p>License Templates</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/document_templates.php" class="nav-link <?= (in_array(basename($_SERVER['PHP_SELF']), ['document_templates.php', 'document_template.php']) ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-file-alt"></i>
|
|
<p>Document Templates</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
|
|
<li class="nav-header">MAINTENANCE</li>
|
|
|
|
<li class="nav-item">
|
|
<a href="/admin/mail_queue.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'mail_queue.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-inbox"></i>
|
|
<p>Mail Queue</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/audit_logs.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'audit_logs.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-history"></i>
|
|
<p>Audit Logs</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/app_logs.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'app_logs.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-clipboard-list"></i>
|
|
<p>App Logs</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/backup.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'backup.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-cloud-upload-alt"></i>
|
|
<p>Backup</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/debug.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'debug.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-bug"></i>
|
|
<p>Debug</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/update.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'update.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-download"></i>
|
|
<p>Update</p>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- SETTINGS Section -->
|
|
<li class="nav-item has-treeview mt-2 <?= (in_array(basename($_SERVER['PHP_SELF']), ['settings_company.php', 'settings_localization.php', 'settings_theme.php', 'settings_security.php', 'settings_mail.php', 'settings_notification.php', 'settings_default.php', 'settings_invoice.php', 'settings_quote.php', 'settings_online_payment.php', 'settings_online_payment_clients.php', 'settings_project.php', 'settings_ticket.php', 'settings_ai.php', 'identity_providers.php', 'settings_telemetry.php', 'settings_module.php']) ? 'menu-open' : '') ?>">
|
|
<a href="#" class="nav-link">
|
|
<p>
|
|
SETTINGS
|
|
<i class="right fas fa-angle-left"></i>
|
|
</p>
|
|
</a>
|
|
<ul class="nav nav-treeview">
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_company.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_company.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fa fa-briefcase"></i>
|
|
<p>Company Details</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_localization.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_localization.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fa fa-globe"></i>
|
|
<p>Localization</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_theme.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_theme.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fa fa-paint-brush"></i>
|
|
<p>Theme</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_security.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_security.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-shield-alt"></i>
|
|
<p>Security</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_mail.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_mail.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon far fa-envelope"></i>
|
|
<p>Mail</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_notification.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_notification.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon far fa-bell"></i>
|
|
<p>Notifications</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_default.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_default.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-cogs"></i>
|
|
<p>Defaults</p>
|
|
</a>
|
|
</li>
|
|
<?php if ($config_module_enable_accounting) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_quote.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_quote.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-comment-dollar"></i>
|
|
<p>Quote</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_invoice.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_invoice.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-file-invoice"></i>
|
|
<p>Invoice</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_ticketing) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_project.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_project.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-project-diagram"></i>
|
|
<p>Project</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_ticket.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_ticket.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-life-ring"></i>
|
|
<p>Ticket</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<!-- Currently the only integration is the client portal SSO -->
|
|
<?php if ($config_client_portal_enable) { ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/identity_providers.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'identity_providers.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-fingerprint"></i>
|
|
<p>Identity Provider</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_telemetry.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_telemetry.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-satellite-dish"></i>
|
|
<p>Telemetry</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/admin/settings_module.php" class="nav-link <?= (basename($_SERVER['PHP_SELF']) == 'settings_module.php' ? 'active' : '') ?>">
|
|
<i class="nav-icon fas fa-cube"></i>
|
|
<p>Modules</p>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<?php
|
|
$sql_custom_links = mysqli_query($mysqli, "SELECT * FROM custom_links
|
|
WHERE custom_link_location = 4 AND custom_link_archived_at IS NULL
|
|
ORDER BY custom_link_order ASC, custom_link_name ASC"
|
|
);
|
|
|
|
while ($row = mysqli_fetch_assoc($sql_custom_links)) {
|
|
$custom_link_name = escapeHtml($row['custom_link_name']);
|
|
$custom_link_uri = escapeUrl($row['custom_link_uri']);
|
|
$custom_link_icon = escapeHtml($row['custom_link_icon']);
|
|
$custom_link_new_tab = intval($row['custom_link_new_tab']);
|
|
if ($custom_link_new_tab == 1) {
|
|
$target = "target='_blank' rel='noopener noreferrer'";
|
|
} else {
|
|
$target = "";
|
|
}
|
|
|
|
?>
|
|
|
|
<li class="nav-item">
|
|
<a href="<?= $custom_link_uri ?>" <?= $target ?> class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == basename($custom_link_uri)) { echo "active"; } ?>">
|
|
<i class="fas fa-<?= $custom_link_icon ?> nav-icon"></i>
|
|
<p><?= $custom_link_name ?></p>
|
|
<i class="fas fa-angle-right nav-icon float-right"></i>
|
|
</a>
|
|
</li>
|
|
|
|
<?php } ?>
|
|
|
|
</ul>
|
|
</nav>
|
|
<!-- /.sidebar-menu -->
|
|
<div class="mb-3"></div>
|
|
</div>
|
|
<!-- /.sidebar -->
|
|
</aside>
|