First Commit
This commit is contained in:
Executable
+4
@@ -0,0 +1,4 @@
|
||||
<div x-data="{ show: true }" x-show="show" class="alert alert-warning alert-dismissible fade show">
|
||||
{{ __("attention_message") }}
|
||||
<button type="button" class="btn-close" @click="show = false"></button>
|
||||
</div>
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
<div class="dropdown" x-data="{ open: false }">
|
||||
|
||||
<button class="btn btn-secondary dropdown-toggle"
|
||||
@click="open = !open">
|
||||
Menu
|
||||
</button>
|
||||
|
||||
<ul class="dropdown-menu" x-show="open" @click.outside="open = false">
|
||||
<li><a class="dropdown-item" href="#">{{ __("option1") }}</a></li>
|
||||
<li><a class="dropdown-item" href="#">{{ __("option2") }}</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
<div x-data="{ open: false }">
|
||||
|
||||
<button class="btn btn-primary" @click="open = true">
|
||||
Abrir Modal
|
||||
</button>
|
||||
|
||||
<div class="modal fade" x-show="open" x-transition @keydown.escape.window="open = false"
|
||||
style="display: block;" @click.self="open = false">
|
||||
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">{{ __("example_modal") }}</h5>
|
||||
<button class="btn-close" @click="open = false"></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
{{ __("modal_content") }}
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-secondary" @click="open = false">{{ __("close") }}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
{# paginator.twig #}
|
||||
{% if paginator.total_pages > 1 %}
|
||||
<nav aria-label="Paginação" class="my-3">
|
||||
<ul class="pagination justify-content-center">
|
||||
|
||||
{# Previous #}
|
||||
<li class="page-item {% if not paginator.has_prev %}disabled{% endif %}">
|
||||
<a class="page-link"
|
||||
href="{{ paginator.base_url ~ (paginator.current_page - 1) }}"
|
||||
tabindex="-1">
|
||||
Anterior
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{# Page numbers #}
|
||||
{% for page in 1..paginator.total_pages %}
|
||||
<li class="page-item {% if page == paginator.current_page %}active{% endif %}">
|
||||
<a class="page-link"
|
||||
href="{{ paginator.base_url ~ page }}">
|
||||
{{ page }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
{# Next #}
|
||||
<li class="page-item {% if not paginator.has_next %}disabled{% endif %}">
|
||||
<a class="page-link"
|
||||
href="{{ paginator.base_url ~ (paginator.current_page + 1) }}">
|
||||
Próximo
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
{% set req = required is defined and required ? 'required' : '' %}
|
||||
<div class="form-floating mb-3 position-relative" x-data="{show:false}">
|
||||
<input :type="show ? 'text' : 'password'" class="form-control" id="{{ id }}" name="{{ name }}" placeholder="{{ placeholder }}" {{ req }}>
|
||||
<label for="{{ id }}">{{ label }}</label>
|
||||
<button type="button" class="btn btn-outline-secondary btn-sm position-absolute top-50 end-0 translate-middle-y me-2" @click="show = !show" aria-label="Toggle password visibility">
|
||||
<i :class="show ? 'bi bi-eye-slash' : 'bi bi-eye'"></i>
|
||||
</button>
|
||||
</div>
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
<div x-data="{ tab: 'one' }">
|
||||
|
||||
<ul class="nav nav-tabs mb-3">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" :class="{ 'active': tab === 'one' }" @click="tab = 'one'">Tab 1</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" :class="{ 'active': tab === 'two' }" @click="tab = 'two'">Tab 2</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div x-show="tab === 'one'">Conteúdo da aba 1</div>
|
||||
<div x-show="tab === 'two'">Conteúdo da aba 2</div>
|
||||
|
||||
</div>
|
||||
Executable
+271
@@ -0,0 +1,271 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block title %}{{ __('dashboard.title') }} - {{ platformName }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ __('dashboard.title') }}</h1>
|
||||
<div class="btn-toolbar mb-2 mb-md-0">
|
||||
<div class="btn-group me-2">
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if seo_pending %}
|
||||
<div class="alert alert-warning alert-dismissible fade show" role="alert">
|
||||
<strong><i class="bi bi-exclamation-triangle-fill"></i> {{ __('dashboard.seo_warning_title') }}</strong> {{ __('dashboard.seo_warning_message') }}
|
||||
<a href="{{ url('admin/system/install-seo') }}" class="btn btn-warning btn-sm ms-2">{{ __('dashboard.seo_install_repair_button') }}</a>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if cache_cleared %}
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<strong>{{ __('dashboard.cache_cleared_title') }}</strong> {{ __('dashboard.cache_cleared_message', {'files': deleted_count, 'opcache': opcache_cleared ? __('dashboard.yes') : __('dashboard.no')}) }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if seo_pending %}
|
||||
<div class="alert alert-warning alert-dismissible fade show" role="alert">
|
||||
<strong><i class="bi bi-exclamation-triangle-fill"></i> {{ __('dashboard.seo_warning_title') }}</strong> {{ __('dashboard.seo_missing_message') }}
|
||||
<a href="{{ url('admin/system/install-seo') }}" class="btn btn-warning btn-sm ms-2">{{ __('dashboard.seo_install_button') }}</a>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- Syspanel Ad Section -->
|
||||
<div class="row mb-4">
|
||||
<div class="col-12">
|
||||
<div class="card border-0 shadow-lg overflow-hidden" style="border-radius: 24px; background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); transition: transform 0.3s ease;">
|
||||
<div class="card-body p-0">
|
||||
<div class="row g-0 align-items-center">
|
||||
<div class="col-lg-7 p-4 p-md-5">
|
||||
<div class="d-inline-flex align-items-center px-3 py-1 rounded-pill mb-4" style="background: rgba(59, 130, 246, 0.1); border: 1px solid rgba(59, 130, 246, 0.2);">
|
||||
<span class="text-primary fw-bold small"><i class="bi bi-rocket-takeoff-fill me-2"></i> Syspanel Enterprise</span>
|
||||
</div>
|
||||
<h2 class="display-4 fw-bold text-white mb-4">Conheça também os outros <span style="background: linear-gradient(135deg, #60a5fa 0%, #a855f7 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent;">serviços Syspanel</span></h2>
|
||||
<p class="lead text-light opacity-75 mb-4 fs-5">
|
||||
A solução definitiva para empresas que buscam excelência operacional, automação inteligente e crescimento escalável. Tudo o que você precisa em uma única plataforma.
|
||||
</p>
|
||||
<div class="row g-4 mb-5 text-light">
|
||||
<div class="col-md-6">
|
||||
<div class="d-flex align-items-start gap-3">
|
||||
<div class="rounded-circle bg-primary bg-opacity-10 p-2">
|
||||
<i class="bi bi-speedometer2 text-primary fs-4"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="fw-bold mb-1">Performance Ultra-Rápida</h6>
|
||||
<p class="small opacity-75 mb-0">Decisões em tempo real com dados precisos.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="d-flex align-items-start gap-3">
|
||||
<div class="rounded-circle bg-primary bg-opacity-10 p-2">
|
||||
<i class="bi bi-shield-check text-primary fs-4"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="fw-bold mb-1">Segurança Avançada</h6>
|
||||
<p class="small opacity-75 mb-0">Proteção de dados de nível corporativo.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-wrap gap-3">
|
||||
<a href="https://home.syspanel.com.br" target="_blank" class="btn btn-primary btn-lg px-5 py-3 fw-bold shadow-sm" style="border-radius: 16px; background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); border: none;">
|
||||
Começar Agora <i class="bi bi-arrow-right ms-2"></i>
|
||||
</a>
|
||||
<a href="https://home.syspanel.com.br/contato" target="_blank" class="btn btn-outline-light btn-lg px-5 py-3 fw-bold" style="border-radius: 16px;">
|
||||
Falar com Especialista
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-5 d-none d-lg-block position-relative">
|
||||
<div class="h-100" style="min-height: 500px; background: url('https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&fit=crop&q=80&w=1000') center/cover;">
|
||||
<div class="position-absolute top-0 start-0 w-100 h-100" style="background: linear-gradient(to right, #0f172a, transparent);"></div>
|
||||
<div class="position-absolute bottom-0 start-0 p-5 w-100">
|
||||
<div class="glass-card p-4 rounded-4" style="background: rgba(255, 255, 255, 0.05); backdrop-filter: blur(12px); border: 1px solid rgba(255, 255, 255, 0.1);">
|
||||
<div class="d-flex align-items-center gap-4">
|
||||
<div class="p-3 bg-white bg-opacity-10 rounded-3">
|
||||
<i class="bi bi-graph-up text-white fs-3"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-white fw-bold fs-5">+250%</div>
|
||||
<div class="text-light small opacity-75">Aumento em produtividade média</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Statistics Cards -->
|
||||
<div class="row">
|
||||
{% if user.role == 'super_admin' %}
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card bg-primary text-white mb-4">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="small text-white-50 text-uppercase mb-1">
|
||||
{{ __('dashboard.total_companies') }}</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-white">{{ stats.total_companies }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="bi bi-building fs-2 text-white-50"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card bg-success text-white mb-4">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="small text-white-50 text-uppercase mb-1">
|
||||
{{ __('dashboard.active_companies') }}</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-white">{{ stats.active_companies }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="bi bi-check-circle-fill fs-2 text-white-50"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card bg-info text-white mb-4">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="small text-white-50 text-uppercase mb-1">
|
||||
{{ __('dashboard.total_users') }}</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-white">{{ stats.total_users }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="bi bi-people-fill fs-2 text-white-50"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card bg-warning text-white mb-4">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="small text-white-50 text-uppercase mb-1">
|
||||
{{ __('dashboard.active_users') }}</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-white">{{ stats.active_users }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="bi bi-person-check fs-2 text-white-50"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Widgets Section -->
|
||||
{% if widgets|length > 0 %}
|
||||
<div class="row">
|
||||
{% for widget in widgets %}
|
||||
<div class="col-lg-6 mb-4">
|
||||
{{ widget|raw }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- Recent Activity -->
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('dashboard.recent_activity') }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if recent_activity|length > 0 %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered" width="100%" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('dashboard.activity.user') }}</th>
|
||||
<th>{{ __('dashboard.activity.action') }}</th>
|
||||
<th>{{ __('dashboard.activity.resource') }}</th>
|
||||
<th>{{ __('dashboard.activity.date') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for activity in recent_activity %}
|
||||
<tr>
|
||||
<td>{{ activity.user_name }}</td>
|
||||
<td>
|
||||
<span class="badge badge-{{ activity.action_color|default('secondary') }}">
|
||||
{{ __('dashboard.activity.' ~ activity.action) }}
|
||||
</span>
|
||||
</td>
|
||||
<td>{{ activity.resource_type }} #{{ activity.resource_id }}</td>
|
||||
<td>{{ activity.created_at|date('d/m/Y H:i') }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="text-muted">{{ __('dashboard.no_recent_activity') }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Welcome Message -->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('dashboard.welcome', {'platformName': platformName}) }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p>{{ __('dashboard.welcome_message', {'name': user.name}) }}</p>
|
||||
|
||||
{% if user.role == 'super_admin' %}
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle"></i>
|
||||
{{ __('dashboard.super_admin_info') }}
|
||||
<a href="{{ url('admin/modules/install') }}" class="btn btn-sm btn-primary ms-2">
|
||||
<i class="bi bi-upload"></i> {{ __('dashboard.install_module') }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if user.role == 'admin' or user.role == 'user' %}
|
||||
<div class="alert alert-success">
|
||||
<i class="bi bi-shield-check"></i>
|
||||
{{ user.role == 'admin' ? __('dashboard.admin_info') : __('dashboard.user_info') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="mt-3">
|
||||
<a href="{{ url('profile') }}" class="btn btn-primary btn-sm">
|
||||
<i class="bi bi-person"></i> {{ __('dashboard.edit_profile') }}
|
||||
</a>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block title %}Search Results - {{ platformName }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid px-4">
|
||||
<h1 class="mt-4">Search Results</h1>
|
||||
<ol class="breadcrumb mb-4">
|
||||
<li class="breadcrumb-item"><a href="{{ url('dashboard') }}">Dashboard</a></li>
|
||||
<li class="breadcrumb-item active">Search</li>
|
||||
</ol>
|
||||
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<i class="bi bi-search me-1"></i>
|
||||
Results for: <strong>{{ query }}</strong>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if results.modules is empty and results.users is empty %}
|
||||
<p>No results found.</p>
|
||||
{% else %}
|
||||
<div class="row">
|
||||
{# Modules Results #}
|
||||
{% if results.modules is not empty %}
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="card h-100">
|
||||
<div class="card-header bg-light">
|
||||
<i class="bi bi-puzzle me-1"></i> Modules
|
||||
</div>
|
||||
<div class="list-group list-group-flush">
|
||||
{% for module in results.modules %}
|
||||
<a href="{{ url('admin/modules/install') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h6 class="mb-1">{{ module.modules_display_name }}</h6>
|
||||
<small class="text-muted">v{{ module.modules_version }}</small>
|
||||
</div>
|
||||
<p class="mb-1 small">{{ module.modules_description }}</p>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# Users Results #}
|
||||
{% if results.users is not empty %}
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="card h-100">
|
||||
<div class="card-header bg-light">
|
||||
<i class="bi bi-people me-1"></i> Users
|
||||
</div>
|
||||
<div class="list-group list-group-flush">
|
||||
{% for user in results.users %}
|
||||
<a href="{{ url('admin/users/' ~ user.users_id ~ '/edit') }}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h6 class="mb-1">{{ user.users_name }}</h6>
|
||||
<small class="text-muted">{{ user.users_role }}</small>
|
||||
</div>
|
||||
<p class="mb-1 small">{{ user.users_email }}</p>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
{% extends "layouts/base.twig" %}
|
||||
|
||||
{% block head %}
|
||||
{{ custom_css|raw }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="page-content {{ css_classes }}">
|
||||
{{ page.pages_content|raw }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
{{ custom_js|raw }}
|
||||
{% endblock %}
|
||||
Executable
+82
@@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Acesso Negado - 403</title>
|
||||
<link href="/assets/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
<style>
|
||||
body {
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #f8f9fa;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
.error-container {
|
||||
text-align: center;
|
||||
max-width: 600px;
|
||||
padding: 60px 40px;
|
||||
background: white;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 10px 40px rgba(0,0,0,0.08);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
.error-container:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
.error-code {
|
||||
font-size: 120px;
|
||||
font-weight: 800;
|
||||
line-height: 1;
|
||||
background: linear-gradient(135deg, #fd7e14 0%, #d65b00 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.error-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
color: #343a40;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.error-message {
|
||||
color: #6c757d;
|
||||
font-size: 16px;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.btn-home {
|
||||
padding: 12px 30px;
|
||||
border-radius: 50px;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.btn-home:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 5px 15px rgba(253, 126, 20, 0.3);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-md-8 col-lg-6">
|
||||
<div class="error-container">
|
||||
<div class="error-code">403</div>
|
||||
<h1 class="error-title">Acesso Negado</h1>
|
||||
<p class="error-message">
|
||||
Você não tem permissão para acessar esta página.
|
||||
Verifique suas credenciais ou entre em contato com o administrador.
|
||||
</p>
|
||||
<a href="/" class="btn btn-warning text-white btn-home">
|
||||
<i class="bi bi-arrow-left me-2"></i> Voltar para o Início
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Executable
+96
@@ -0,0 +1,96 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Página não encontrada - 404</title>
|
||||
<link href="/assets/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
<style>
|
||||
body {
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #f8f9fa;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
.error-container {
|
||||
text-align: center;
|
||||
max-width: 600px;
|
||||
padding: 60px 40px;
|
||||
background: white;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 10px 40px rgba(0,0,0,0.08);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
.error-container:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
.error-code {
|
||||
font-size: 120px;
|
||||
font-weight: 800;
|
||||
line-height: 1;
|
||||
background: linear-gradient(135deg, #6c757d 0%, #343a40 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.error-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
color: #343a40;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.error-message {
|
||||
color: #6c757d;
|
||||
font-size: 16px;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.btn-home {
|
||||
padding: 12px 30px;
|
||||
border-radius: 50px;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.btn-home:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 5px 15px rgba(13, 110, 253, 0.3);
|
||||
}
|
||||
.icon-circle {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
background: #f8f9fa;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 auto 30px;
|
||||
}
|
||||
.icon-circle i {
|
||||
font-size: 32px;
|
||||
color: #6c757d;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-md-8 col-lg-6">
|
||||
<div class="error-container">
|
||||
<div class="error-code">404</div>
|
||||
<h1 class="error-title">Página não encontrada</h1>
|
||||
<p class="error-message">
|
||||
Ops! A página que você está procurando parece não existir.
|
||||
Ela pode ter sido movida ou excluída.
|
||||
</p>
|
||||
<a href="/" class="btn btn-primary btn-home">
|
||||
<i class="bi bi-arrow-left me-2"></i> Voltar para o Início
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Executable
+82
@@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Erro Interno - 500</title>
|
||||
<link href="/assets/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
<style>
|
||||
body {
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #f8f9fa;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
.error-container {
|
||||
text-align: center;
|
||||
max-width: 600px;
|
||||
padding: 60px 40px;
|
||||
background: white;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 10px 40px rgba(0,0,0,0.08);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
.error-container:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
.error-code {
|
||||
font-size: 120px;
|
||||
font-weight: 800;
|
||||
line-height: 1;
|
||||
background: linear-gradient(135deg, #dc3545 0%, #a71d2a 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.error-title {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
color: #343a40;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.error-message {
|
||||
color: #6c757d;
|
||||
font-size: 16px;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.btn-home {
|
||||
padding: 12px 30px;
|
||||
border-radius: 50px;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.btn-home:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 5px 15px rgba(220, 53, 69, 0.3);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-md-8 col-lg-6">
|
||||
<div class="error-container">
|
||||
<div class="error-code">500</div>
|
||||
<h1 class="error-title">Erro Interno do Servidor</h1>
|
||||
<p class="error-message">
|
||||
Desculpe, algo deu errado do nosso lado.
|
||||
Nossa equipe técnica já foi notificada e estamos trabalhando para corrigir isso.
|
||||
</p>
|
||||
<a href="/" class="btn btn-danger btn-home">
|
||||
<i class="bi bi-arrow-left me-2"></i> Voltar para o Início
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
{% extends "layouts/base.twig" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container mt-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8 text-center">
|
||||
<div class="card shadow-sm border-0">
|
||||
<div class="card-body p-5">
|
||||
<h1 class="display-4 text-warning mb-4">
|
||||
<i class="bi bi-tools"></i>
|
||||
</h1>
|
||||
<h2 class="mb-3">Em Manutenção</h2>
|
||||
<p class="lead text-muted">
|
||||
{{ message|default('Estamos realizando melhorias no sistema. Voltaremos em breve!') }}
|
||||
</p>
|
||||
{% if retry %}
|
||||
<p class="text-secondary mt-4">
|
||||
Previsão de retorno: <strong>{{ retry }}</strong>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Em Manutenção - {{ platformName }}</title>
|
||||
<link href="{{ asset_url('css/bootstrap.min.css') }}" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.maintenance-container {
|
||||
text-align: center;
|
||||
max-width: 600px;
|
||||
padding: 40px;
|
||||
background: white;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 0 20px rgba(0,0,0,0.1);
|
||||
}
|
||||
.maintenance-icon {
|
||||
font-size: 64px;
|
||||
color: #ffc107;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="maintenance-container">
|
||||
<div class="maintenance-icon">
|
||||
<i class="bi bi-tools"></i>
|
||||
</div>
|
||||
<h1 class="mb-4">Site em Manutenção</h1>
|
||||
<p class="lead text-muted mb-4">
|
||||
Estamos realizando melhorias em nosso sistema. Voltaremos em breve!
|
||||
</p>
|
||||
<p class="text-muted">
|
||||
Se você é um administrador, <a href="{{ url('login') }}">faça login aqui</a>.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid px-4">
|
||||
<div class="row justify-content-center" style="min-height: 70vh; align-items: center;">
|
||||
<div class="col-lg-6">
|
||||
<div class="text-center mt-4">
|
||||
<h1 class="display-1 text-danger">403</h1>
|
||||
<p class="lead text-danger fw-bold">Acesso não autorizado</p>
|
||||
<p class="mb-5">{{ message ?? 'Você não tem permissão para acessar este recurso.' }}</p>
|
||||
<a href="{{ url('dashboard') }}" class="btn btn-primary">
|
||||
<i class="bi bi-arrow-left me-1"></i>
|
||||
Voltar para o Dashboard
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+81
@@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>{{ title|default(platformName) }}</title>
|
||||
|
||||
{# Bootstrap CSS #}
|
||||
<link rel="stylesheet" href="/assets/css/bootstrap.min.css">
|
||||
|
||||
{# Bootstrap Icons #}
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
|
||||
{# Quill Editor CSS (se habilitado) #}
|
||||
|
||||
{# Alpine.js #}
|
||||
<script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
|
||||
|
||||
{% block head %}{% endblock %}
|
||||
</head>
|
||||
|
||||
<body style="background:#f8f9fa;">
|
||||
|
||||
{% block layout_navbar %}
|
||||
{# Navbar Global #}
|
||||
{% if not is_maintenance_mode or (auth.user is defined and auth.user.role == 'super_admin') %}
|
||||
{% include 'partials/nav-bar.twig' %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block layout_body %}
|
||||
{# Conteúdo da página #}
|
||||
<main class="container py-4">
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
{% endblock %}
|
||||
|
||||
{# Footer Global #}
|
||||
{% if not is_maintenance_mode or (auth.user is defined and auth.user.role == 'super_admin') %}
|
||||
{% include 'partials/footer.twig' %}
|
||||
{% endif %}
|
||||
|
||||
{# Bootstrap JS #}
|
||||
<script src="/assets/js/bootstrap.bundle.js"></script>
|
||||
|
||||
{# Quill Editor JS (se habilitado) #}
|
||||
|
||||
{% block scripts %}{% endblock %}
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/public/consent/cookieconsent.min.css" />
|
||||
<script src="/public/consent/cookieconsent.min.js"></script>
|
||||
<script>
|
||||
window.addEventListener("load", function(){
|
||||
window.cookieconsent.initialise({
|
||||
"palette": {
|
||||
"popup": {
|
||||
"background": "#216942",
|
||||
"text": "#b2d192"
|
||||
},
|
||||
"button": {
|
||||
"background": "#afed71"
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"message": "{{ __('layout.cookie_consent.message') }}",
|
||||
"dismiss": "{{ __('layout.cookie_consent.dismiss') }}",
|
||||
"link": "{{ __('layout.footer.terms') }}",
|
||||
"href": "/user_terms.html"
|
||||
}
|
||||
})});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Executable
+263
@@ -0,0 +1,263 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ session('lang')|default('pt_BR')|replace({'_': '-'}) }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}{{ platformName }} - Dashboard{% endblock %}</title>
|
||||
|
||||
<!-- Dynamic Admin Theme CSS -->
|
||||
{% if admin_theme_slug == 'sb-admin' %}
|
||||
<link href="{{ asset_url('css/sb-admin.css') }}" rel="stylesheet">
|
||||
{% else %}
|
||||
<link href="{{ asset_url('themes/admin/' ~ admin_theme_slug ~ '/css/style.css') }}" rel="stylesheet">
|
||||
{% endif %}
|
||||
<!-- Font Awesome (Legacy - Removed) -->
|
||||
<!-- <script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script> -->
|
||||
<!-- Bootstrap Icons (For compatibility with existing modules) -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
|
||||
<!-- Quill Editor CSS (se habilitado) -->
|
||||
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
.form-control-xs {
|
||||
height: calc(1.5em + 0.5rem + 2px);
|
||||
padding: 0.25rem 0.5rem;
|
||||
font-size: 0.75rem;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
.x-small {
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
.btn-xs {
|
||||
padding: 0.1rem 0.3rem;
|
||||
font-size: 0.7rem;
|
||||
line-height: 1.2;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- DataTables CSS -->
|
||||
<link href="https://cdn.datatables.net/1.13.7/css/dataTables.bootstrap5.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Lightbox2 CSS -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Alpine.js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
|
||||
|
||||
{% block head %}{% endblock %}
|
||||
</head>
|
||||
<body class="sb-nav-fixed">
|
||||
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
||||
<!-- Navbar Brand-->
|
||||
<a class="navbar-brand ps-3" href="{{ url('dashboard') }}">
|
||||
{% if active_theme and active_theme.themes_logo %}
|
||||
<img src="{{ active_theme.themes_logo }}" alt="{{ __('layout.app_name', {'platformName': platformName}) }}" height="30">
|
||||
{% else %}
|
||||
<img src="{{ asset_url('img/logo_syscms.png') }}" alt="{{ __('layout.app_name', {'platformName': platformName}) }}" height="30">
|
||||
{% endif %}
|
||||
</a>
|
||||
<!-- Sidebar Toggle-->
|
||||
<button class="btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0" id="sidebarToggle" href="#!">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
{% if auth.user %}
|
||||
<!-- User Dropdown-->
|
||||
<ul class="navbar-nav ms-auto ms-md-0 me-3 me-lg-4">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url('/') }}" target="_blank"><i class="bi bi-house"></i> {{ __('layout.menu.home') }}</a>
|
||||
</li>
|
||||
{% for key, visibility in config_pages_visibility %}
|
||||
{% if visibility.dashboard and key != 'index' %}
|
||||
{% set icon = 'bi bi-file-text' %}
|
||||
{% if key == 'about' %}{% set icon = 'bi bi-info-circle' %}
|
||||
{% elseif key == 'contact' %}{% set icon = 'bi bi-envelope' %}
|
||||
{% elseif key == 'services' %}{% set icon = 'bi bi-briefcase' %}
|
||||
{% endif %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url(key) }}" target="_blank">
|
||||
<i class="{{ icon }}"></i> {{ __('layout.menu.' ~ key) != 'layout.menu.' ~ key ? __('layout.menu.' ~ key) : visibility.title }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{# Dynamic Module Links (Hidden for Admin, Super Admin and Member as they are in the sidebar) #}
|
||||
{% if auth.user.role != 'admin' and auth.user.role != 'super_admin' and auth.user.role != 'member' %}
|
||||
{% if auth.user.company is defined and auth.user.company.modules is defined %}
|
||||
{% for module in auth.user.company.modules %}
|
||||
{% if module.pivot.bus_modules_is_enabled and module.pivot.bus_modules_show_dashboard_nav %}
|
||||
{% set route = module.modules_name %}
|
||||
{% set label = module.modules_display_name %}
|
||||
{% set icon = 'bi bi-puzzle' %}
|
||||
|
||||
{# We prefer public route for navbar shortcut, or dashboard route if no public #}
|
||||
{% if module.modules_settings.menu.public is defined %}
|
||||
{% set route = module.modules_settings.menu.public.route ?? route %}
|
||||
{% set label = module.modules_settings.menu.public.label ?? label %}
|
||||
{% endif %}
|
||||
|
||||
{% if module.modules_name == 'faq' %}
|
||||
{% set route = 'faq' %}
|
||||
{% set label = __('layout.menu.faq') %}
|
||||
{% set icon = 'bi bi-question-circle' %}
|
||||
{% elseif module.modules_name == 'blog' %}
|
||||
{% set route = 'publicposts' %}
|
||||
{% set label = __('layout.menu.posts') %}
|
||||
{% set icon = 'bi bi-book' %}
|
||||
{% elseif module.modules_name == 'vitrine' %}
|
||||
{% set route = 'publicvitrine' %}
|
||||
{% set label = __('layout.menu.vitrine') %}
|
||||
{% set icon = 'bi bi-shop' %}
|
||||
{% elseif module.modules_name == 'pagebuilder' %}
|
||||
{% set route = '' %} {# Link to home? #}
|
||||
{% set label = __('layout.menu.pages') %}
|
||||
{% set icon = 'bi bi-file-text' %}
|
||||
{% endif %}
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url(route) }}" target="_blank"><i class="{{ icon }}"></i> {{ __(label) }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% include 'partials/language-switcher.twig' %}
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
{% if user.users_avatar %}
|
||||
<img src="{{ user.avatar_url }}" alt="{{ user.display_name }}" class="rounded-circle" style="width: 25px; height: 25px; object-fit: cover; margin-right: 5px;">
|
||||
{% else %}
|
||||
<i class="bi bi-person"></i>
|
||||
{% endif %}
|
||||
{{ user.display_name }}
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="{{ url('profile') }}">{{ __('layout.profile.title') }}</a></li>
|
||||
<li><hr class="dropdown-divider" /></li>
|
||||
<li><a class="dropdown-item" href="{{ url('logout') }}">{{ __('auth.logout') }}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
</nav>
|
||||
|
||||
<div id="layoutSidenav">
|
||||
<div id="layoutSidenav_nav">
|
||||
{% block sidebar %}
|
||||
{% include 'partials/sidebar.twig' %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
<div id="layoutSidenav_content">
|
||||
<main>
|
||||
<div class="container-fluid px-4">
|
||||
{% block content %}
|
||||
<!-- Main content will be injected here -->
|
||||
{% endblock %}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 bg-light mt-auto">
|
||||
<div class="container-fluid px-4">
|
||||
<div class="d-flex align-items-center justify-content-between small">
|
||||
<div class="text-muted">
|
||||
Copyright © {{ platformName }} {{ "now"|date("Y") }}
|
||||
|
|
||||
Desenvolvido com <a href="https://syscms.syspanel.com.br" target="_blank">SysCMS 2026</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/user_terms.html" target="_blank">{{ __('layout.footer.terms') }}</a>
|
||||
·
|
||||
<a href="/eula.html" target="_blank">{{ __('layout.footer.eula') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bootstrap JS -->
|
||||
<script src="{{ asset_url('js/bootstrap.bundle.min.js') }}"></script>
|
||||
|
||||
<!-- SB Admin Custom JS -->
|
||||
<script src="{{ asset_url('js/sb-admin.js') }}"></script>
|
||||
|
||||
<!-- DataTables JS -->
|
||||
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
|
||||
<script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.min.js"></script>
|
||||
<script src="https://cdn.datatables.net/1.13.7/js/dataTables.bootstrap5.min.js"></script>
|
||||
|
||||
<!-- Quill Editor JS (se habilitado) -->
|
||||
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var editorContainer = document.getElementById('quill-editor');
|
||||
if (editorContainer) {
|
||||
var quill = new Quill('#quill-editor', {
|
||||
theme: 'snow',
|
||||
modules: {
|
||||
toolbar: [
|
||||
['bold', 'italic', 'underline', 'strike'],
|
||||
['blockquote', 'code-block'],
|
||||
[{ 'header': 1 }, { 'header': 2 }],
|
||||
[{ 'list': 'ordered'}, { 'list': 'bullet' }],
|
||||
[{ 'script': 'sub'}, { 'script': 'super' }],
|
||||
[{ 'indent': '-1'}, { 'indent': '+1' }],
|
||||
[{ 'direction': 'rtl' }],
|
||||
[{ 'size': ['small', false, 'large', 'huge'] }],
|
||||
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
|
||||
[{ 'color': [] }, { 'background': [] }],
|
||||
[{ 'font': [] }],
|
||||
[{ 'align': [] }],
|
||||
['clean'],
|
||||
['link', 'image', 'video']
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
// Sync with hidden textarea
|
||||
var targetId = editorContainer.getAttribute('data-target');
|
||||
var targetInput = targetId ? document.getElementById(targetId) : null;
|
||||
|
||||
// Fallback: try to find a hidden textarea next to the editor
|
||||
if (!targetInput) {
|
||||
targetInput = editorContainer.nextElementSibling;
|
||||
if (targetInput && targetInput.tagName !== 'TEXTAREA') {
|
||||
targetInput = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (targetInput) {
|
||||
quill.on('text-change', function() {
|
||||
targetInput.value = quill.root.innerHTML;
|
||||
});
|
||||
|
||||
var form = editorContainer.closest('form');
|
||||
if (form) {
|
||||
form.addEventListener('submit', function() {
|
||||
targetInput.value = quill.root.innerHTML;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- Lightbox2 JS -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox.min.js"></script>
|
||||
<script>
|
||||
lightbox.option({
|
||||
'resizeDuration': 200,
|
||||
'wrapAround': true,
|
||||
'showImageNumberLabel': true,
|
||||
'imageFadeDuration': 300
|
||||
});
|
||||
</script>
|
||||
|
||||
{% block scripts %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"title": "Dashboard",
|
||||
"welcome": "Willkommen bei :platformName",
|
||||
"welcome_message": "Hallo :name, willkommen in Ihrem Dashboard!",
|
||||
"logged_in_as": "Angemeldet als",
|
||||
"no_company": "Keine Firma",
|
||||
"total_companies": "Gesamte Firmen",
|
||||
"active_companies": "Aktive Firmen",
|
||||
"total_users": "Gesamte Benutzer",
|
||||
"active_users": "Aktive Benutzer",
|
||||
"recent_activity": "Letzte Aktivitäten",
|
||||
"no_recent_activity": "Keine letzten Aktivitäten",
|
||||
"export": "Exportieren",
|
||||
"edit_profile": "Profil bearbeiten",
|
||||
"settings": "Einstellungen",
|
||||
"super_admin_info": "Sie haben vollen Zugriff auf das System als Super Administrator.",
|
||||
"admin_info": "Sie sind Administrator Ihrer Firma.",
|
||||
"install_module": "Modul installieren",
|
||||
"seo_warning_title": "Warnung!",
|
||||
"seo_warning_message": "Das SEO-Modul wurde erkannt, ist aber nicht korrekt in der Datenbank installiert.",
|
||||
"seo_install_repair_button": "SEO-Modul installieren/reparieren",
|
||||
"seo_missing_message": "Das SEO-Modul wurde erkannt, ist aber nicht in der Datenbank installiert.",
|
||||
"seo_install_button": "SEO-Modul installieren",
|
||||
"cache_cleared_title": "Erfolg!",
|
||||
"cache_cleared_message": "System-Cache wurde geleert. (Dateien: :files, OpCache: :opcache)",
|
||||
"yes": "Ja",
|
||||
"no": "Nein",
|
||||
"activity": {
|
||||
"user": "Benutzer",
|
||||
"action": "Aktion",
|
||||
"resource": "Ressource",
|
||||
"date": "Datum",
|
||||
"created": "Erstellt",
|
||||
"updated": "Aktualisiert",
|
||||
"deleted": "Gelöscht",
|
||||
"login": "Anmelden",
|
||||
"logout": "Abmelden",
|
||||
"profile_updated": "Profil aktualisiert",
|
||||
"password_reset": "Passwort zurückgesetzt",
|
||||
"password_reset_requested": "Passwortzurücksetzung angefordert"
|
||||
}
|
||||
}
|
||||
Executable
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"app_name": ":platformName",
|
||||
"dashboard": "Dashboard",
|
||||
"search": {
|
||||
"placeholder": "Suchen..."
|
||||
},
|
||||
"profile": {
|
||||
"title": "Mein Profil"
|
||||
},
|
||||
"welcome": "Willkommen bei :platformName",
|
||||
"sidebar": {
|
||||
"toggle": "Seitenleiste umschalten",
|
||||
"main": "Haupt",
|
||||
"dashboard": "Armaturenbrett",
|
||||
"users": "Benutzer",
|
||||
"companies": "Unternehmen",
|
||||
"modules": "Module",
|
||||
"settings": "Einstellungen",
|
||||
"reports": "Berichte"
|
||||
},
|
||||
"menu": {
|
||||
"home": "Startseite",
|
||||
"about": "Über uns",
|
||||
"contact": "Kontakt",
|
||||
"services": "Dienstleistungen",
|
||||
"posts": "Posts",
|
||||
"dashboard": "Dashboard",
|
||||
"logout": "Abmelden",
|
||||
"login": "Anmelden",
|
||||
"register": "Registrieren",
|
||||
"profile": "Profil",
|
||||
"settings": "Einstellungen",
|
||||
"pages": "Seiten",
|
||||
"faq": "Häufig gestellte Fragen",
|
||||
"vitrine": "Schaukasten",
|
||||
"contact": "Kontakt",
|
||||
"blog": "Blog",
|
||||
"company": "Unternehmen",
|
||||
"users": "Benutzer",
|
||||
"auth": "Authentifizierung",
|
||||
"pagebuilder": "Seitenersteller",
|
||||
"seo": "SEO-Manager",
|
||||
"expositor": "Aussteller",
|
||||
"configindex": "Seitenkonfiguration",
|
||||
"modelo": "Vorlage",
|
||||
"news": "Nachrichten",
|
||||
"systemconfig": "Systemeinstellungen",
|
||||
"binance": "Binance Handel",
|
||||
"trades": "Handel",
|
||||
"loterias": "Lotterien",
|
||||
"fluxocaixapro": "Cashflow Pro",
|
||||
"notes": "Notizen",
|
||||
"commercialguide": "Gewerbeverzeichnis",
|
||||
"globallists": "Systemlisten"
|
||||
},
|
||||
"footer": {
|
||||
"powered_by": "Entwickelt mit",
|
||||
"rights_reserved": "Alle Rechte vorbehalten.",
|
||||
"license": "Lizenz: Proprietär",
|
||||
"terms": "Nutzungsbedingungen",
|
||||
"eula": "EULA",
|
||||
"version": "Version 1.0.0"
|
||||
},
|
||||
"system_logs": "Systemprotokolle",
|
||||
"clear_cache": "Cache leeren",
|
||||
"system_info": "Systeminfo",
|
||||
"global_lists": "Globale Listen",
|
||||
"php_info": "PHP-Info",
|
||||
"modules": "Module verwalten",
|
||||
"themes": "Themes",
|
||||
"language": "Deutsch (DE)",
|
||||
"core": "Kern",
|
||||
"modules_header": "Module",
|
||||
"system": "System",
|
||||
"clear_cache_confirm": "Sind Sie sicher, dass Sie den System-Cache leeren möchten?",
|
||||
"cookie_consent": {
|
||||
"message": "Wir verwenden wesentliche Cookies und ähnliche Technologien, um Ihre Erfahrung mit unseren Diensten zu verbessern, Werbung zu personalisieren und Inhalte zu empfehlen, die für Sie von Interesse sind.",
|
||||
"dismiss": "Ich verstehe und akzeptiere"
|
||||
},
|
||||
"lightbox": {
|
||||
"image_of": "Bild %1 von %2"
|
||||
}
|
||||
}
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "Systemprotokolle",
|
||||
"log_files": "Protokolldateien",
|
||||
"filename": "Dateiname",
|
||||
"size": "Größe",
|
||||
"last_modified": "Zuletzt geändert",
|
||||
"actions": "Aktionen",
|
||||
"view": "Ansehen",
|
||||
"no_logs": "Keine Protokolldateien gefunden.",
|
||||
"viewer_title": "Protokoll-Viewer",
|
||||
"view_log": "Protokoll ansehen: :filename",
|
||||
"back": "Zurück zu den Protokollen",
|
||||
"refresh": "Aktualisieren"
|
||||
}
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"title": "Modul installieren",
|
||||
"upload_title": "Modul hochladen",
|
||||
"back": "Zurück",
|
||||
"file_label": "Moduldatei (.zip)",
|
||||
"file_help": "Wählen Sie die ZIP-Datei aus, die alle Moduldateien enthält.",
|
||||
"enable_for_all": "Für alle Unternehmen aktivieren",
|
||||
"enable_for_all_help": "Aktivieren Sie diese Option, um das Modul nach der Installation für alle Unternehmen zu aktivieren.",
|
||||
"cancel": "Abbrechen",
|
||||
"install_button": "Modul installieren",
|
||||
"info_title": "Informationen",
|
||||
"zip_content_info": "Die Modul-ZIP-Datei muss enthalten:",
|
||||
"zip_content_list": {
|
||||
"json": "Datei module.json mit Moduleinstellungen",
|
||||
"classes": "Verzeichnis classes/ mit Controllern und Modellen",
|
||||
"views": "Verzeichnis views/ mit Vorlagen",
|
||||
"migrations": "Verzeichnis database/migrations/ mit Migrationen (optional)"
|
||||
},
|
||||
"warning_title": "Achtung:",
|
||||
"warning_message": "Die Installation von Modulen wirkt sich direkt auf das System aus. Stellen Sie sicher, dass das Modul sicher und kompatibel ist.",
|
||||
"security_title": "Sicherheit",
|
||||
"security_intro": "Vor der Installation eines Moduls prüfen:",
|
||||
"security_list": {
|
||||
"source": "Vertrauenswürdige Modulquelle",
|
||||
"compatibility": "Kompatibilität mit der aktuellen Systemversion",
|
||||
"dependencies": "Erforderliche Abhängigkeiten"
|
||||
},
|
||||
"error_no_file": "Keine Datei hochgeladen",
|
||||
"error_invalid_zip": "Die Datei muss eine gültige ZIP-Datei sein",
|
||||
"error_open_zip": "Konnte ZIP-Datei nicht öffnen",
|
||||
"error_extract_zip": "Konnte ZIP-Datei nicht extrahieren",
|
||||
"error_missing_file": "Erforderliche Datei '{file}' nicht gefunden",
|
||||
"error_missing_config": "Konfigurationsdatei module.json nicht gefunden",
|
||||
"error_invalid_config": "Ungültige module.json Datei: {error}",
|
||||
"error_missing_field": "Erforderliches Feld '{field}' in module.json nicht gefunden",
|
||||
"error_module_exists": "Modul existiert bereits",
|
||||
"success_install": "Modul erfolgreich installiert",
|
||||
"success_menus_updated": "Menüs für {count} Module aktualisiert."
|
||||
}
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"title": "Systeminformationen",
|
||||
"full_php_info": "Vollständige PHP-Info",
|
||||
"application": "Anwendung",
|
||||
"name": "Name",
|
||||
"version": "Version",
|
||||
"environment": "Umgebung",
|
||||
"debug_mode": "Debug-Modus",
|
||||
"enabled": "Aktiviert",
|
||||
"disabled": "Deaktiviert",
|
||||
"server": "Server",
|
||||
"os": "Betriebssystem",
|
||||
"hostname": "Hostname",
|
||||
"software": "Software",
|
||||
"timezone": "Zeitzone",
|
||||
"php_environment": "PHP-Umgebung",
|
||||
"sapi": "SAPI",
|
||||
"memory_limit": "Speicherlimit",
|
||||
"php_info_title": "PHP-Info",
|
||||
"max_execution_time": "Max. Ausführungszeit",
|
||||
"max_upload": "Max. Upload",
|
||||
"database_header": "Datenbank",
|
||||
"driver": "Treiber",
|
||||
"database_version": "Version",
|
||||
"database_name": "Datenbankname",
|
||||
"disk_usage": "Festplattennutzung",
|
||||
"total_space": "Gesamtspeicher",
|
||||
"used_space": "Belegter Speicher",
|
||||
"free_space": "Freier Speicher",
|
||||
"disk_usage_approx": "Nutzung (Ungefähr)",
|
||||
"disk_calc_note": "Die Berechnung der Festplattennutzung ist ungefähr."
|
||||
}
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"title": "Dashboard",
|
||||
"welcome": "Welcome to :platformName",
|
||||
"welcome_message": "Hello :name, welcome to your dashboard!",
|
||||
"logged_in_as": "Logged in as",
|
||||
"no_company": "No company",
|
||||
"total_companies": "Total Companies",
|
||||
"active_companies": "Active Companies",
|
||||
"total_users": "Total Users",
|
||||
"active_users": "Active Users",
|
||||
"recent_activity": "Recent Activity",
|
||||
"no_recent_activity": "No recent activity",
|
||||
"export": "Export",
|
||||
"edit_profile": "Edit Profile",
|
||||
"settings": "Settings",
|
||||
"super_admin_info": "You have full access to the system as Super Administrator.",
|
||||
"admin_info": "You are an administrator of your company.",
|
||||
"install_module": "Install Module",
|
||||
"seo_warning_title": "Warning!",
|
||||
"seo_warning_message": "The SEO module was detected but is not correctly installed in the database.",
|
||||
"seo_install_repair_button": "Install/Repair SEO Module",
|
||||
"seo_missing_message": "The SEO module was detected but is not installed in the database.",
|
||||
"seo_install_button": "Install SEO Module",
|
||||
"cache_cleared_title": "Success!",
|
||||
"cache_cleared_message": "System cache has been cleared. (Files: :files, OpCache: :opcache)",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"activity": {
|
||||
"user": "User",
|
||||
"action": "Action",
|
||||
"resource": "Resource",
|
||||
"date": "Date",
|
||||
"created": "Created",
|
||||
"updated": "Updated",
|
||||
"deleted": "Deleted",
|
||||
"login": "Login",
|
||||
"logout": "Logout",
|
||||
"profile_updated": "Profile Updated",
|
||||
"password_reset": "Password Reset",
|
||||
"password_reset_requested": "Password Reset Requested"
|
||||
}
|
||||
}
|
||||
Executable
+84
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"app_name": ":platformName",
|
||||
"dashboard": "Dashboard",
|
||||
"search": {
|
||||
"placeholder": "Search...",
|
||||
"label": "Search"
|
||||
},
|
||||
"profile": {
|
||||
"title": "My Profile"
|
||||
},
|
||||
"welcome": "Welcome to :platformName",
|
||||
"sidebar": {
|
||||
"toggle": "Toggle Sidebar",
|
||||
"main": "Main",
|
||||
"dashboard": "Dashboard",
|
||||
"users": "Users",
|
||||
"companies": "Companies",
|
||||
"modules": "Modules",
|
||||
"settings": "Settings",
|
||||
"reports": "Reports"
|
||||
},
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"about": "About",
|
||||
"contact": "Contact",
|
||||
"services": "Services",
|
||||
"posts": "Posts",
|
||||
"dashboard": "Dashboard",
|
||||
"logout": "Logout",
|
||||
"login": "Login",
|
||||
"register": "Register",
|
||||
"profile": "Profile",
|
||||
"settings": "Settings",
|
||||
"pages": "Pages",
|
||||
"faq": "FAQ",
|
||||
"vitrine": "Showcase",
|
||||
"contact": "Contact",
|
||||
"blog": "Blog",
|
||||
"company": "Company",
|
||||
"users": "Users",
|
||||
"auth": "Authentication",
|
||||
"pagebuilder": "Page Builder",
|
||||
"seo": "SEO Manager",
|
||||
"expositor": "Exhibitor",
|
||||
"configindex": "Page Configuration",
|
||||
"modelo": "Template",
|
||||
"news": "News",
|
||||
"systemconfig": "System Settings",
|
||||
"binance": "Binance Trading",
|
||||
"trades": "Trades",
|
||||
"loterias": "Lotteries",
|
||||
"fluxocaixapro": "Cash Flow Pro",
|
||||
"notes": "Notes",
|
||||
"commercialguide": "Commercial Guide",
|
||||
"globallists": "System Lists"
|
||||
},
|
||||
"footer": {
|
||||
"powered_by": "Powered by",
|
||||
"rights_reserved": "All rights reserved.",
|
||||
"license": "SysCMS Commercial License",
|
||||
"terms": "Terms of Use",
|
||||
"eula": "EULA",
|
||||
"version": "Version 1.0.0"
|
||||
},
|
||||
"system_logs": "System Logs",
|
||||
"clear_cache": "Clear Cache",
|
||||
"system_info": "System Info",
|
||||
"global_lists": "Global Lists",
|
||||
"php_info": "PHP Info",
|
||||
"modules": "Manage Modules",
|
||||
"themes": "Themes",
|
||||
"language": "English (US)",
|
||||
"core": "Core",
|
||||
"modules_header": "Modules",
|
||||
"system": "System",
|
||||
"clear_cache_confirm": "Are you sure you want to clear the system cache?",
|
||||
"cookie_consent": {
|
||||
"message": "We use essential cookies and similar technologies to improve your experience on our services, personalize advertising, and recommend content of interest to you.",
|
||||
"dismiss": "I Understand and Accept"
|
||||
},
|
||||
"lightbox": {
|
||||
"image_of": "Image %1 of %2"
|
||||
}
|
||||
}
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "System Logs",
|
||||
"log_files": "Log Files",
|
||||
"filename": "Filename",
|
||||
"size": "Size",
|
||||
"last_modified": "Last Modified",
|
||||
"actions": "Actions",
|
||||
"view": "View",
|
||||
"no_logs": "No log files found.",
|
||||
"viewer_title": "Log Viewer",
|
||||
"view_log": "View Log: :filename",
|
||||
"back": "Back to Logs",
|
||||
"refresh": "Refresh"
|
||||
}
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"title": "Install Module",
|
||||
"upload_title": "Module Upload",
|
||||
"back": "Back",
|
||||
"file_label": "Module File (.zip)",
|
||||
"file_help": "Select the ZIP file containing all module files.",
|
||||
"enable_for_all": "Enable for all companies",
|
||||
"enable_for_all_help": "Check this option to enable the module for all companies after installation.",
|
||||
"cancel": "Cancel",
|
||||
"install_button": "Install Module",
|
||||
"info_title": "Information",
|
||||
"zip_content_info": "The module ZIP file must contain:",
|
||||
"zip_content_list": {
|
||||
"json": "File module.json with module settings",
|
||||
"classes": "Directory classes/ with controllers and models",
|
||||
"views": "Directory views/ with templates",
|
||||
"migrations": "Directory database/migrations/ with migrations (optional)"
|
||||
},
|
||||
"warning_title": "Warning:",
|
||||
"warning_message": "Installing modules directly affects the system. Be sure the module is safe and compatible.",
|
||||
"security_title": "Security",
|
||||
"security_intro": "Before installing a module, check:",
|
||||
"security_list": {
|
||||
"source": "Trusted module source",
|
||||
"compatibility": "Compatibility with current system version",
|
||||
"dependencies": "Required dependencies"
|
||||
},
|
||||
"error_no_file": "No file uploaded",
|
||||
"error_invalid_zip": "The file must be a valid ZIP file",
|
||||
"error_open_zip": "Could not open ZIP file",
|
||||
"error_extract_zip": "Could not extract ZIP file",
|
||||
"error_missing_file": "Required file '{file}' not found",
|
||||
"error_missing_config": "Configuration file module.json not found",
|
||||
"error_invalid_config": "Invalid module.json file: {error}",
|
||||
"error_missing_field": "Required field '{field}' not found in module.json",
|
||||
"error_module_exists": "Module already exists",
|
||||
"success_install": "Module installed successfully",
|
||||
"success_menus_updated": "Menus updated for {count} modules."
|
||||
}
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"title": "System Information",
|
||||
"full_php_info": "Full PHP Info",
|
||||
"application": "Application",
|
||||
"name": "Name",
|
||||
"version": "Version",
|
||||
"environment": "Environment",
|
||||
"debug_mode": "Debug Mode",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"server": "Server",
|
||||
"os": "OS",
|
||||
"hostname": "Hostname",
|
||||
"software": "Software",
|
||||
"timezone": "Timezone",
|
||||
"php_environment": "PHP Environment",
|
||||
"sapi": "SAPI",
|
||||
"memory_limit": "Memory Limit",
|
||||
"php_info_title": "PHP Info",
|
||||
"max_execution_time": "Max Execution Time",
|
||||
"max_upload": "Max Upload",
|
||||
"database_header": "Database",
|
||||
"driver": "Driver",
|
||||
"database_version": "Version",
|
||||
"database_name": "Database Name",
|
||||
"disk_usage": "Disk Usage",
|
||||
"total_space": "Total Space",
|
||||
"used_space": "Used Space",
|
||||
"free_space": "Free Space",
|
||||
"disk_usage_approx": "Usage (Approximate)",
|
||||
"disk_calc_note": "Disk usage calculation is approximate."
|
||||
}
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"title": "Tablero",
|
||||
"welcome": "Bienvenido a :platformName",
|
||||
"welcome_message": "Hola :name, bienvenido a tu tablero!",
|
||||
"logged_in_as": "Iniciado sesión como",
|
||||
"no_company": "Sin empresa",
|
||||
"total_companies": "Total de Empresas",
|
||||
"active_companies": "Empresas Activas",
|
||||
"total_users": "Total de Usuarios",
|
||||
"active_users": "Usuarios Activos",
|
||||
"recent_activity": "Actividad Reciente",
|
||||
"no_recent_activity": "No hay actividad reciente",
|
||||
"export": "Exportar",
|
||||
"edit_profile": "Editar Perfil",
|
||||
"settings": "Configuraciones",
|
||||
"super_admin_info": "Tienes acceso total al sistema como Super Administrador.",
|
||||
"admin_info": "Eres administrador de tu empresa.",
|
||||
"install_module": "Instalar Módulo",
|
||||
"seo_warning_title": "¡Atención!",
|
||||
"seo_warning_message": "El módulo SEO fue detectado pero no está instalado correctamente en la base de datos.",
|
||||
"seo_install_repair_button": "Instalar/Reparar Módulo SEO",
|
||||
"seo_missing_message": "El módulo SEO fue detectado pero no está instalado en la base de datos.",
|
||||
"seo_install_button": "Instalar Módulo SEO",
|
||||
"cache_cleared_title": "¡Éxito!",
|
||||
"cache_cleared_message": "La caché del sistema ha sido borrada. (Archivos: :files, OpCache: :opcache)",
|
||||
"yes": "Sí",
|
||||
"no": "No",
|
||||
"activity": {
|
||||
"user": "Usuario",
|
||||
"action": "Acción",
|
||||
"resource": "Recurso",
|
||||
"date": "Fecha",
|
||||
"created": "Creado",
|
||||
"updated": "Actualizado",
|
||||
"deleted": "Eliminado",
|
||||
"login": "Iniciar Sesión",
|
||||
"logout": "Cerrar Sesión",
|
||||
"profile_updated": "Perfil Actualizado",
|
||||
"password_reset": "Contraseña Restablecida",
|
||||
"password_reset_requested": "Restablecimiento de Contraseña Solicitado"
|
||||
}
|
||||
}
|
||||
Executable
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"app_name": ":platformName",
|
||||
"dashboard": "Dashboard",
|
||||
"search": {
|
||||
"placeholder": "Buscar..."
|
||||
},
|
||||
"profile": {
|
||||
"title": "Mi Perfil"
|
||||
},
|
||||
"welcome": "Bienvenido a :platformName",
|
||||
"sidebar": {
|
||||
"toggle": "Alternar Barra Lateral",
|
||||
"main": "Principal",
|
||||
"dashboard": "Panel de Control",
|
||||
"users": "Usuarios",
|
||||
"companies": "Empresas",
|
||||
"modules": "Módulos",
|
||||
"settings": "Configuración",
|
||||
"reports": "Informes"
|
||||
},
|
||||
"menu": {
|
||||
"home": "Inicio",
|
||||
"about": "Sobre",
|
||||
"contact": "Contacto",
|
||||
"services": "Servicios",
|
||||
"posts": "Posts",
|
||||
"dashboard": "Dashboard",
|
||||
"logout": "Cerrar sesión",
|
||||
"login": "Entrar",
|
||||
"register": "Registrarse",
|
||||
"profile": "Perfil",
|
||||
"settings": "Configuraciones",
|
||||
"pages": "Páginas",
|
||||
"faq": "Preguntas Frecuentes",
|
||||
"vitrine": "Escaparate",
|
||||
"contact": "Contacto",
|
||||
"blog": "Blog",
|
||||
"company": "Empresa",
|
||||
"users": "Usuarios",
|
||||
"auth": "Autenticación",
|
||||
"pagebuilder": "Constructor de Páginas",
|
||||
"seo": "Gestor SEO",
|
||||
"expositor": "Expositor",
|
||||
"configindex": "Configuración de Páginas",
|
||||
"modelo": "Modelo (Plantilla)",
|
||||
"news": "Noticias",
|
||||
"systemconfig": "Configuración del Sistema",
|
||||
"binance": "Binance Trading",
|
||||
"trades": "Trades",
|
||||
"loterias": "Loterías",
|
||||
"fluxocaixapro": "Flujo de Caja Pro",
|
||||
"notes": "Notas",
|
||||
"commercialguide": "Guía Comercial",
|
||||
"globallists": "Listas del Sistema"
|
||||
},
|
||||
"footer": {
|
||||
"powered_by": "Desarrollado con",
|
||||
"rights_reserved": "Todos los derechos reservados.",
|
||||
"license": "Licencia: Propietaria",
|
||||
"terms": "Términos de Uso",
|
||||
"eula": "EULA",
|
||||
"version": "Versión 1.0.0"
|
||||
},
|
||||
"system_logs": "Logs del Sistema",
|
||||
"clear_cache": "Limpiar Cache",
|
||||
"system_info": "Info del Sistema",
|
||||
"global_lists": "Listas Globales",
|
||||
"php_info": "PHP Info",
|
||||
"modules": "Gestionar Módulos",
|
||||
"themes": "Temas",
|
||||
"language": "Español (ES)",
|
||||
"core": "Núcleo",
|
||||
"modules_header": "Módulos",
|
||||
"system": "Sistema",
|
||||
"clear_cache_confirm": "¿Está seguro de que desea borrar la caché del sistema?",
|
||||
"cookie_consent": {
|
||||
"message": "Utilizamos cookies esenciales y tecnologías similares para mejorar su experiencia en nuestros servicios, personalizar la publicidad y recomendar contenido de su interés.",
|
||||
"dismiss": "Entiendo y Acepto"
|
||||
},
|
||||
"lightbox": {
|
||||
"image_of": "Imagen %1 de %2"
|
||||
}
|
||||
}
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "Registros del Sistema",
|
||||
"log_files": "Archivos de Registro",
|
||||
"filename": "Nombre del Archivo",
|
||||
"size": "Tamaño",
|
||||
"last_modified": "Última Modificación",
|
||||
"actions": "Acciones",
|
||||
"view": "Ver",
|
||||
"no_logs": "No se encontraron archivos de registro.",
|
||||
"viewer_title": "Visor de Registros",
|
||||
"view_log": "Ver Registro: :filename",
|
||||
"back": "Volver a los Registros",
|
||||
"refresh": "Actualizar"
|
||||
}
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"title": "Instalar Módulo",
|
||||
"upload_title": "Subir Módulo",
|
||||
"back": "Volver",
|
||||
"file_label": "Archivo del Módulo (.zip)",
|
||||
"file_help": "Seleccione el archivo ZIP que contiene todos los archivos del módulo.",
|
||||
"enable_for_all": "Habilitar para todas las empresas",
|
||||
"enable_for_all_help": "Marque esta opción para habilitar el módulo para todas las empresas después de la instalación.",
|
||||
"cancel": "Cancelar",
|
||||
"install_button": "Instalar Módulo",
|
||||
"info_title": "Información",
|
||||
"zip_content_info": "El archivo ZIP del módulo debe contener:",
|
||||
"zip_content_list": {
|
||||
"json": "Archivo module.json con la configuración del módulo",
|
||||
"classes": "Directorio classes/ con controladores y modelos",
|
||||
"views": "Directorio views/ con plantillas",
|
||||
"migrations": "Directorio database/migrations/ con migraciones (opcional)"
|
||||
},
|
||||
"warning_title": "Atención:",
|
||||
"warning_message": "La instalación de módulos afecta directamente al sistema. Asegúrese de que el módulo sea seguro y compatible.",
|
||||
"security_title": "Seguridad",
|
||||
"security_intro": "Antes de instalar un módulo, verifique:",
|
||||
"security_list": {
|
||||
"source": "Fuente confiable del módulo",
|
||||
"compatibility": "Compatibilidad con la versión actual del sistema",
|
||||
"dependencies": "Dependencias necesarias"
|
||||
},
|
||||
"error_no_file": "Ningún archivo subido",
|
||||
"error_invalid_zip": "El archivo debe ser un archivo ZIP válido",
|
||||
"error_open_zip": "No se pudo abrir el archivo ZIP",
|
||||
"error_extract_zip": "No se pudo extraer el archivo ZIP",
|
||||
"error_missing_file": "Archivo obligatorio '{file}' no encontrado",
|
||||
"error_missing_config": "Archivo de configuración module.json no encontrado",
|
||||
"error_invalid_config": "Archivo module.json inválido: {error}",
|
||||
"error_missing_field": "Campo obligatorio '{field}' no encontrado en module.json",
|
||||
"error_module_exists": "El módulo ya existe",
|
||||
"success_install": "Módulo instalado con éxito",
|
||||
"success_menus_updated": "Menús actualizados para {count} módulos."
|
||||
}
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"title": "Información del Sistema",
|
||||
"full_php_info": "Información PHP Completa",
|
||||
"application": "Aplicación",
|
||||
"name": "Nombre",
|
||||
"version": "Versión",
|
||||
"environment": "Entorno",
|
||||
"debug_mode": "Modo Depuración",
|
||||
"enabled": "Habilitado",
|
||||
"disabled": "Deshabilitado",
|
||||
"server": "Servidor",
|
||||
"os": "SO",
|
||||
"hostname": "Nombre de Host",
|
||||
"software": "Software",
|
||||
"timezone": "Zona Horaria",
|
||||
"php_environment": "Entorno PHP",
|
||||
"sapi": "SAPI",
|
||||
"memory_limit": "Límite de Memoria",
|
||||
"php_info_title": "Información PHP",
|
||||
"max_execution_time": "Tiempo Máx. Ejecución",
|
||||
"max_upload": "Carga Máxima",
|
||||
"database_header": "Base de Datos",
|
||||
"driver": "Driver",
|
||||
"database_version": "Versión",
|
||||
"database_name": "Nombre de la Base de Datos",
|
||||
"disk_usage": "Uso de Disco",
|
||||
"total_space": "Espacio Total",
|
||||
"used_space": "Espacio Usado",
|
||||
"free_space": "Espacio Libre",
|
||||
"disk_usage_approx": "Uso (Aproximado)",
|
||||
"disk_calc_note": "El cálculo del uso del disco es aproximado."
|
||||
}
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"title": "Tableau de bord",
|
||||
"welcome": "Bienvenue sur :platformName",
|
||||
"welcome_message": "Bonjour :name, bienvenue sur votre tableau de bord !",
|
||||
"logged_in_as": "Connecté en tant que",
|
||||
"no_company": "Aucune entreprise",
|
||||
"total_companies": "Total Entreprises",
|
||||
"active_companies": "Entreprises Actives",
|
||||
"total_users": "Total Utilisateurs",
|
||||
"active_users": "Utilisateurs Actifs",
|
||||
"recent_activity": "Activité Récente",
|
||||
"no_recent_activity": "Aucune activité récente",
|
||||
"export": "Exporter",
|
||||
"edit_profile": "Modifier le profil",
|
||||
"settings": "Paramètres",
|
||||
"super_admin_info": "Vous avez un accès complet au système en tant que Super Administrateur.",
|
||||
"admin_info": "Vous êtes administrateur de votre entreprise.",
|
||||
"install_module": "Installer le module",
|
||||
"seo_warning_title": "Attention !",
|
||||
"seo_warning_message": "Le module SEO a été détecté mais n'est pas correctement installé dans la base de données.",
|
||||
"seo_install_repair_button": "Installer/Réparer le module SEO",
|
||||
"seo_missing_message": "Le module SEO a été détecté mais n'est pas installé dans la base de données.",
|
||||
"seo_install_button": "Installer le module SEO",
|
||||
"cache_cleared_title": "Succès !",
|
||||
"cache_cleared_message": "Le cache système a été vidé. (Fichiers : :files, OpCache : :opcache)",
|
||||
"yes": "Oui",
|
||||
"no": "Non",
|
||||
"activity": {
|
||||
"user": "Utilisateur",
|
||||
"action": "Action",
|
||||
"resource": "Ressource",
|
||||
"date": "Date",
|
||||
"created": "Créé",
|
||||
"updated": "Mis à jour",
|
||||
"deleted": "Supprimé",
|
||||
"login": "Connexion",
|
||||
"logout": "Déconnexion",
|
||||
"profile_updated": "Profil mis à jour",
|
||||
"password_reset": "Mot de passe réinitialisé",
|
||||
"password_reset_requested": "Réinitialisation du mot de passe demandée"
|
||||
}
|
||||
}
|
||||
Executable
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"app_name": ":platformName",
|
||||
"dashboard": "Tableau de bord",
|
||||
"search": {
|
||||
"placeholder": "Rechercher..."
|
||||
},
|
||||
"profile": {
|
||||
"title": "Mon Profil"
|
||||
},
|
||||
"welcome": "Bienvenue sur :platformName",
|
||||
"sidebar": {
|
||||
"toggle": "Basculer la barre latérale",
|
||||
"main": "Principal",
|
||||
"dashboard": "Tableau de bord",
|
||||
"users": "Utilisateurs",
|
||||
"companies": "Entreprises",
|
||||
"modules": "Modules",
|
||||
"settings": "Paramètres",
|
||||
"reports": "Rapports"
|
||||
},
|
||||
"menu": {
|
||||
"home": "Accueil",
|
||||
"about": "À propos",
|
||||
"contact": "Contact",
|
||||
"services": "Services",
|
||||
"posts": "Posts",
|
||||
"dashboard": "Tableau de bord",
|
||||
"logout": "Déconnexion",
|
||||
"login": "Connexion",
|
||||
"register": "S'inscrire",
|
||||
"profile": "Profil",
|
||||
"settings": "Paramètres",
|
||||
"pages": "Pages",
|
||||
"faq": "Questions Fréquentes",
|
||||
"vitrine": "Vitrines",
|
||||
"contact": "Contact",
|
||||
"blog": "Blog",
|
||||
"company": "Entreprise",
|
||||
"users": "Utilisateurs",
|
||||
"auth": "Authentification",
|
||||
"pagebuilder": "Constructeur de Pages",
|
||||
"seo": "Gestionnaire SEO",
|
||||
"expositor": "Exposant",
|
||||
"configindex": "Configuration des Pages",
|
||||
"modelo": "Modèle",
|
||||
"news": "Actualités",
|
||||
"systemconfig": "Paramètres du Système",
|
||||
"binance": "Trading Binance",
|
||||
"trades": "Transactions",
|
||||
"loterias": "Loteries",
|
||||
"fluxocaixapro": "Flux de Trésorerie Pro",
|
||||
"notes": "Notes",
|
||||
"commercialguide": "Guide Commercial",
|
||||
"globallists": "Listes du Système"
|
||||
},
|
||||
"footer": {
|
||||
"powered_by": "Développé avec",
|
||||
"rights_reserved": "Tous droits réservés.",
|
||||
"license": "Licence : Propriétaire",
|
||||
"terms": "Conditions d'utilisation",
|
||||
"eula": "EULA",
|
||||
"version": "Version 1.0.0"
|
||||
},
|
||||
"system_logs": "Logs du Système",
|
||||
"clear_cache": "Vider le Cache",
|
||||
"system_info": "Info du Système",
|
||||
"global_lists": "Listes Globales",
|
||||
"php_info": "PHP Info",
|
||||
"modules": "Gérer les Modules",
|
||||
"themes": "Thèmes",
|
||||
"language": "Français (FR)",
|
||||
"core": "Noyau",
|
||||
"modules_header": "Modules",
|
||||
"system": "Système",
|
||||
"clear_cache_confirm": "Êtes-vous sûr de vouloir vider le cache système ?",
|
||||
"cookie_consent": {
|
||||
"message": "Nous utilisons des cookies essentiels et des technologies similaires pour améliorer votre expérience sur nos services, personnaliser la publicité et recommander du contenu qui vous intéresse.",
|
||||
"dismiss": "Je comprends et j'accepte"
|
||||
},
|
||||
"lightbox": {
|
||||
"image_of": "Image %1 sur %2"
|
||||
}
|
||||
}
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "Journaux système",
|
||||
"log_files": "Fichiers journaux",
|
||||
"filename": "Nom de fichier",
|
||||
"size": "Taille",
|
||||
"last_modified": "Dernière modification",
|
||||
"actions": "Actions",
|
||||
"view": "Voir",
|
||||
"no_logs": "Aucun fichier journal trouvé.",
|
||||
"viewer_title": "Visualiseur de journaux",
|
||||
"view_log": "Voir le journal : :filename",
|
||||
"back": "Retour aux journaux",
|
||||
"refresh": "Actualiser"
|
||||
}
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"title": "Installer un module",
|
||||
"upload_title": "Téléchargement du module",
|
||||
"back": "Retour",
|
||||
"file_label": "Fichier du module (.zip)",
|
||||
"file_help": "Sélectionnez le fichier ZIP contenant tous les fichiers du module.",
|
||||
"enable_for_all": "Activer pour toutes les entreprises",
|
||||
"enable_for_all_help": "Cochez cette option pour activer le module pour toutes les entreprises après l'installation.",
|
||||
"cancel": "Annuler",
|
||||
"install_button": "Installer le module",
|
||||
"info_title": "Informations",
|
||||
"zip_content_info": "Le fichier ZIP du module doit contenir :",
|
||||
"zip_content_list": {
|
||||
"json": "Fichier module.json avec les paramètres du module",
|
||||
"classes": "Répertoire classes/ avec contrôleurs et modèles",
|
||||
"views": "Répertoire views/ avec modèles",
|
||||
"migrations": "Répertoire database/migrations/ avec migrations (optionnel)"
|
||||
},
|
||||
"warning_title": "Attention :",
|
||||
"warning_message": "L'installation de modules affecte directement le système. Assurez-vous que le module est sûr et compatible.",
|
||||
"security_title": "Sécurité",
|
||||
"security_intro": "Avant d'installer un module, vérifiez :",
|
||||
"security_list": {
|
||||
"source": "Source de module fiable",
|
||||
"compatibility": "Compatibilité avec la version actuelle du système",
|
||||
"dependencies": "Dépendances requises"
|
||||
},
|
||||
"error_no_file": "Aucun fichier téléchargé",
|
||||
"error_invalid_zip": "Le fichier doit être un fichier ZIP valide",
|
||||
"error_open_zip": "Impossible d'ouvrir le fichier ZIP",
|
||||
"error_extract_zip": "Impossible d'extraire le fichier ZIP",
|
||||
"error_missing_file": "Fichier requis '{file}' introuvable",
|
||||
"error_missing_config": "Fichier de configuration module.json introuvable",
|
||||
"error_invalid_config": "Fichier module.json invalide : {error}",
|
||||
"error_missing_field": "Champ requis '{field}' introuvable dans module.json",
|
||||
"error_module_exists": "Le module existe déjà",
|
||||
"success_install": "Module installé avec succès",
|
||||
"success_menus_updated": "Menus mis à jour pour {count} modules."
|
||||
}
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"title": "Informations Système",
|
||||
"full_php_info": "Info PHP complète",
|
||||
"application": "Application",
|
||||
"name": "Nom",
|
||||
"version": "Version",
|
||||
"environment": "Environnement",
|
||||
"debug_mode": "Mode Débogage",
|
||||
"enabled": "Activé",
|
||||
"disabled": "Désactivé",
|
||||
"server": "Serveur",
|
||||
"os": "OS",
|
||||
"hostname": "Nom d'hôte",
|
||||
"software": "Logiciel",
|
||||
"timezone": "Fuseau horaire",
|
||||
"php_environment": "Environnement PHP",
|
||||
"sapi": "SAPI",
|
||||
"memory_limit": "Limite de mémoire",
|
||||
"php_info_title": "Info PHP",
|
||||
"max_execution_time": "Temps d'exécution max",
|
||||
"max_upload": "Upload max",
|
||||
"database_header": "Base de données",
|
||||
"driver": "Pilote",
|
||||
"database_version": "Version",
|
||||
"database_name": "Nom de la base de données",
|
||||
"disk_usage": "Utilisation du disque",
|
||||
"total_space": "Espace total",
|
||||
"used_space": "Espace utilisé",
|
||||
"free_space": "Espace libre",
|
||||
"disk_usage_approx": "Utilisation (Approximative)",
|
||||
"disk_calc_note": "Le calcul de l'utilisation du disque est approximatif."
|
||||
}
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"unknown_user": "Usuário Desconhecido",
|
||||
"unknown_resource": "Recurso Desconhecido",
|
||||
"created": "Criado",
|
||||
"updated": "Atualizado",
|
||||
"deleted": "Excluído",
|
||||
"login": "Login",
|
||||
"logout": "Logout",
|
||||
"password_changed": "Senha Alterada",
|
||||
"profile_updated": "Perfil Atualizado",
|
||||
"module_enabled": "Módulo Habilitado",
|
||||
"module_disabled": "Módulo Desabilitado",
|
||||
"permission_granted": "Permissão Concedida",
|
||||
"permission_revoked": "Permissão Revogada"
|
||||
}
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"title": "Painel de Controle",
|
||||
"welcome": "Bem-vindo ao :platformName",
|
||||
"welcome_message": "Olá :name, bem-vindo ao seu painel de controle!",
|
||||
"logged_in_as": "Logado como",
|
||||
"no_company": "Nenhuma empresa",
|
||||
"total_companies": "Total de Empresas",
|
||||
"active_companies": "Empresas Ativas",
|
||||
"total_users": "Total de Usuários",
|
||||
"active_users": "Usuários Ativos",
|
||||
"recent_activity": "Atividade Recente",
|
||||
"no_recent_activity": "Nenhuma atividade recente",
|
||||
"export": "Exportar",
|
||||
"edit_profile": "Editar Perfil",
|
||||
"settings": "Configurações",
|
||||
"super_admin_info": "Você tem acesso total ao sistema como Super Administrador.",
|
||||
"admin_info": "Você é administrador da sua empresa.",
|
||||
"install_module": "Instalar Módulo",
|
||||
"seo_warning_title": "Atenção!",
|
||||
"seo_warning_message": "O módulo SEO foi detectado mas não está instalado corretamente no banco de dados.",
|
||||
"seo_install_repair_button": "Instalar/Reparar Módulo SEO",
|
||||
"seo_missing_message": "O módulo SEO foi detectado mas não está instalado no banco de dados.",
|
||||
"seo_install_button": "Instalar Módulo SEO",
|
||||
"cache_cleared_title": "Sucesso!",
|
||||
"cache_cleared_message": "Cache do sistema foi limpo. (Arquivos: :files, OpCache: :opcache)",
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"activity": {
|
||||
"user": "Usuário",
|
||||
"action": "Ação",
|
||||
"resource": "Recurso",
|
||||
"date": "Data",
|
||||
"created": "Criado",
|
||||
"updated": "Atualizado",
|
||||
"deleted": "Excluído",
|
||||
"login": "Login",
|
||||
"logout": "Logout",
|
||||
"profile_updated": "Perfil Atualizado",
|
||||
"password_reset": "Senha Redefinida",
|
||||
"password_reset_requested": "Redefinição de Senha Solicitada"
|
||||
}
|
||||
}
|
||||
Executable
+84
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"app_name": ":platformName",
|
||||
"dashboard": "Dashboard",
|
||||
"search": {
|
||||
"placeholder": "Pesquisar...",
|
||||
"label": "Pesquisar"
|
||||
},
|
||||
"profile": {
|
||||
"title": "Meu Perfil"
|
||||
},
|
||||
"welcome": "Bem-vindo ao :platformName",
|
||||
"sidebar": {
|
||||
"toggle": "Alternar Barra Lateral",
|
||||
"main": "Principal",
|
||||
"dashboard": "Painel de Controle",
|
||||
"users": "Usuários",
|
||||
"companies": "Empresas",
|
||||
"modules": "Módulos",
|
||||
"settings": "Configurações",
|
||||
"reports": "Relatórios"
|
||||
},
|
||||
"menu": {
|
||||
"home": "Início",
|
||||
"about": "Sobre",
|
||||
"contact": "Contato",
|
||||
"services": "Serviços",
|
||||
"posts": "Posts",
|
||||
"dashboard": "Dashboard",
|
||||
"logout": "Sair",
|
||||
"login": "Entrar",
|
||||
"register": "Cadastrar",
|
||||
"profile": "Perfil",
|
||||
"settings": "Configurações",
|
||||
"pages": "Páginas",
|
||||
"faq": "FAQ",
|
||||
"vitrine": "Vitrine",
|
||||
"contact": "Contato",
|
||||
"blog": "Blog",
|
||||
"company": "Empresa",
|
||||
"users": "Usuários",
|
||||
"auth": "Autenticação",
|
||||
"pagebuilder": "Construtor de Páginas",
|
||||
"seo": "Gerenciador SEO",
|
||||
"expositor": "Expositor",
|
||||
"configindex": "Configuração de Páginas",
|
||||
"modelo": "Modelo (Template)",
|
||||
"news": "Notícias",
|
||||
"systemconfig": "Configurações do Sistema",
|
||||
"binance": "Binance Trading",
|
||||
"trades": "Trades",
|
||||
"loterias": "Loterias",
|
||||
"fluxocaixapro": "Fluxo de Caixa Pró",
|
||||
"notes": "Notas",
|
||||
"commercialguide": "Guia Comercial",
|
||||
"globallists": "Listas do Sistema"
|
||||
},
|
||||
"footer": {
|
||||
"powered_by": "Desenvolvido com",
|
||||
"rights_reserved": "Todos os direitos reservados.",
|
||||
"license": "Licença: Proprietária",
|
||||
"terms": "Termos de Uso",
|
||||
"eula": "EULA",
|
||||
"version": "Versão 1.0.0"
|
||||
},
|
||||
"system_logs": "Logs do Sistema",
|
||||
"clear_cache": "Limpar Cache",
|
||||
"system_info": "Info do Sistema",
|
||||
"global_lists": "Listas Globais",
|
||||
"php_info": "PHP Info",
|
||||
"modules": "Gerenciar Módulos",
|
||||
"themes": "Temas",
|
||||
"language": "Português (Brasil)",
|
||||
"core": "Núcleo",
|
||||
"modules_header": "Módulos",
|
||||
"system": "Sistema",
|
||||
"clear_cache_confirm": "Tem certeza que deseja limpar o cache do sistema?",
|
||||
"cookie_consent": {
|
||||
"message": "Nós usamos cookies essenciais e tecnologias semelhantes para melhorar sua experiência em nossos serviços, personalizar publicidade e recomendar conteúdos de seu interesse.",
|
||||
"dismiss": "Entendi e Aceito"
|
||||
},
|
||||
"lightbox": {
|
||||
"image_of": "Imagem %1 de %2"
|
||||
}
|
||||
}
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "Logs do Sistema",
|
||||
"log_files": "Arquivos de Log",
|
||||
"filename": "Nome do Arquivo",
|
||||
"size": "Tamanho",
|
||||
"last_modified": "Última Modificação",
|
||||
"actions": "Ações",
|
||||
"view": "Visualizar",
|
||||
"no_logs": "Nenhum arquivo de log encontrado.",
|
||||
"viewer_title": "Visualizador de Logs",
|
||||
"view_log": "Visualizar Log: :filename",
|
||||
"back": "Voltar para Logs",
|
||||
"refresh": "Atualizar"
|
||||
}
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"title": "Instalar Módulo",
|
||||
"upload_title": "Upload do Módulo",
|
||||
"back": "Voltar",
|
||||
"file_label": "Arquivo do Módulo (.zip)",
|
||||
"file_help": "Selecione o arquivo ZIP contendo todos os arquivos do módulo.",
|
||||
"enable_for_all": "Habilitar para todas as empresas",
|
||||
"enable_for_all_help": "Marque esta opção para habilitar o módulo para todas as empresas após a instalação.",
|
||||
"cancel": "Cancelar",
|
||||
"install_button": "Instalar Módulo",
|
||||
"info_title": "Informações",
|
||||
"zip_content_info": "O arquivo ZIP do módulo deve conter:",
|
||||
"zip_content_list": {
|
||||
"json": "Arquivo module.json com as configurações do módulo",
|
||||
"classes": "Diretório classes/ com os controladores e modelos",
|
||||
"views": "Diretório views/ com os templates",
|
||||
"migrations": "Diretório database/migrations/ com as migrações (opcional)"
|
||||
},
|
||||
"warning_title": "Atenção:",
|
||||
"warning_message": "A instalação de módulos afeta diretamente o sistema. Tenha certeza de que o módulo é seguro e compatível.",
|
||||
"security_title": "Segurança",
|
||||
"security_intro": "Antes de instalar um módulo, verifique:",
|
||||
"security_list": {
|
||||
"source": "Fonte confiável do módulo",
|
||||
"compatibility": "Compatibilidade com a versão atual do sistema",
|
||||
"dependencies": "Dependências necessárias"
|
||||
},
|
||||
"error_no_file": "Nenhum arquivo enviado",
|
||||
"error_invalid_zip": "O arquivo deve ser um arquivo ZIP válido",
|
||||
"error_open_zip": "Não foi possível abrir o arquivo ZIP",
|
||||
"error_extract_zip": "Não foi possível extrair o arquivo ZIP",
|
||||
"error_missing_file": "Arquivo obrigatório '{file}' não encontrado",
|
||||
"error_missing_config": "Arquivo de configuração module.json não encontrado",
|
||||
"error_invalid_config": "Arquivo module.json inválido: {error}",
|
||||
"error_missing_field": "Campo obrigatório '{field}' não encontrado no module.json",
|
||||
"error_module_exists": "Módulo já existe",
|
||||
"success_install": "Módulo instalado com sucesso",
|
||||
"success_menus_updated": "Menus atualizados para {count} módulos."
|
||||
}
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"title": "Informações do Sistema",
|
||||
"full_php_info": "Info PHP Completa",
|
||||
"application": "Aplicação",
|
||||
"name": "Nome",
|
||||
"version": "Versão",
|
||||
"environment": "Ambiente",
|
||||
"debug_mode": "Modo Debug",
|
||||
"enabled": "Habilitado",
|
||||
"disabled": "Desabilitado",
|
||||
"server": "Servidor",
|
||||
"os": "SO",
|
||||
"hostname": "Hostname",
|
||||
"software": "Software",
|
||||
"timezone": "Fuso Horário",
|
||||
"php_environment": "Ambiente PHP",
|
||||
"sapi": "SAPI",
|
||||
"memory_limit": "Limite de Memória",
|
||||
"php_info_title": "Info PHP",
|
||||
"max_execution_time": "Tempo Máx. Execução",
|
||||
"max_upload": "Upload Máximo",
|
||||
"database_header": "Banco de Dados",
|
||||
"driver": "Driver",
|
||||
"database_version": "Versão",
|
||||
"database_name": "Nome do Banco",
|
||||
"disk_usage": "Uso de Disco",
|
||||
"total_space": "Espaço Total",
|
||||
"used_space": "Espaço Usado",
|
||||
"free_space": "Espaço Livre",
|
||||
"disk_usage_approx": "Uso (Aproximado)",
|
||||
"disk_calc_note": "O cálculo de uso de disco é aproximado."
|
||||
}
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block title %}{{ __('logs.title') }} - {{ platformName }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ __('logs.title') }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('logs.log_files') }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered" width="100%" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('logs.filename') }}</th>
|
||||
<th>{{ __('logs.size') }}</th>
|
||||
<th>{{ __('logs.last_modified') }}</th>
|
||||
<th>{{ __('logs.actions') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for log in logs %}
|
||||
<tr>
|
||||
<td>{{ log.name }}</td>
|
||||
<td>{{ log.size }}</td>
|
||||
<td>{{ log.modified }}</td>
|
||||
<td>
|
||||
<a href="{{ url('admin/logs/view') }}?file={{ log.name }}" class="btn btn-sm btn-info">
|
||||
<i class="bi bi-eye"></i> {{ __('logs.view') }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="4" class="text-center">{{ __('logs.no_logs') }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block title %}{{ __('logs.view_log', {'filename': filename}) }} - {{ platformName }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ __('logs.viewer_title') }}</h1>
|
||||
<div class="btn-toolbar mb-2 mb-md-0">
|
||||
<div class="btn-group me-2">
|
||||
<a href="{{ url('admin/logs') }}" class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-arrow-left"></i> {{ __('logs.back') }}
|
||||
</a>
|
||||
<a href="{{ url('admin/logs/view') }}?file={{ filename }}" class="btn btn-sm btn-outline-primary">
|
||||
<i class="bi bi-arrow-clockwise"></i> {{ __('logs.refresh') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ filename }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<pre class="bg-dark text-white p-3 rounded" style="max-height: 600px; overflow-y: auto; white-space: pre-wrap;"><code>{{ content }}</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+115
@@ -0,0 +1,115 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block title %}{{ __('modules.title') }} - {{ platformName }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ __('modules.title') }}</h1>
|
||||
<div class="btn-toolbar mb-2 mb-md-0">
|
||||
<div class="btn-group me-2">
|
||||
<a href="{{ url('dashboard') }}" class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-arrow-left"></i> {{ __('modules.back') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">
|
||||
<i class="bi bi-upload"></i> {{ __('modules.upload_title') }}
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if error|length > 0 %}
|
||||
<div class="alert alert-danger">
|
||||
<i class="bi bi-exclamation-triangle-fill"></i>
|
||||
{% for e in error %}
|
||||
{{ e }}<br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if success|length > 0 %}
|
||||
<div class="alert alert-success">
|
||||
<i class="bi bi-check-circle-fill"></i>
|
||||
{% for s in success %}
|
||||
{{ s }}<br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form method="POST" action="{{ url('admin/modules/install') }}" enctype="multipart/form-data">
|
||||
{{ csrf_field()|raw }}
|
||||
<div class="mb-4">
|
||||
<label for="module_zip" class="form-label">{{ __('modules.file_label') }}</label>
|
||||
<input class="form-control" type="file" id="module_zip" name="module_zip" accept=".zip" required>
|
||||
<div class="form-text">{{ __('modules.file_help') }}</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="enable_for_all" name="enable_for_all" value="1">
|
||||
<label class="form-check-label" for="enable_for_all">
|
||||
{{ __('modules.enable_for_all') }}
|
||||
</label>
|
||||
<div class="form-text">{{ __('modules.enable_for_all_help') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
|
||||
<a href="{{ url('dashboard') }}" class="btn btn-secondary me-md-2">
|
||||
<i class="bi bi-x-lg"></i> {{ __('modules.cancel') }}
|
||||
</a>
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-upload"></i> {{ __('modules.install_button') }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-info">
|
||||
<i class="bi bi-info-circle"></i> {{ __('modules.info_title') }}
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p>{{ __('modules.zip_content_info') }}</p>
|
||||
<ul>
|
||||
<li>{{ __('modules.zip_content_list.json') }}</li>
|
||||
<li>{{ __('modules.zip_content_list.classes') }}</li>
|
||||
<li>{{ __('modules.zip_content_list.views') }}</li>
|
||||
<li>{{ __('modules.zip_content_list.migrations') }}</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-warning mt-3">
|
||||
<i class="bi bi-exclamation-triangle-fill"></i>
|
||||
<strong>{{ __('modules.warning_title') }}</strong> {{ __('modules.warning_message') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-warning">
|
||||
<i class="bi bi-shield-lock"></i> {{ __('modules.security_title') }}
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p>{{ __('modules.security_intro') }}</p>
|
||||
<ul>
|
||||
<li>{{ __('modules.security_list.source') }}</li>
|
||||
<li>{{ __('modules.security_list.compatibility') }}</li>
|
||||
<li>{{ __('modules.security_list.dependencies') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
<!-- Footer-->
|
||||
<footer class="py-5 bg-dark">
|
||||
<div class="container px-4 px-lg-5">
|
||||
<p class="m-0 text-center text-white">
|
||||
{% if theme_settings.show_footer_credits|default(true) %}
|
||||
{{ __('layout.footer.powered_by') }} <a href="https://syscms.syspanel.com.br" class="text-white text-decoration-none" target="_blank">SysCMS</a> {{ 'now'|date('Y') }}.
|
||||
{% else %}
|
||||
© {{ 'now'|date('Y') }}
|
||||
{% endif %}
|
||||
<br>
|
||||
<a href="/user_terms.html" class="text-white text-decoration-none small" target="_blank">{{ __('layout.footer.terms') }}</a> |
|
||||
<a href="/eula.html" class="text-white text-decoration-none small" target="_blank">{{ __('layout.footer.eula') }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
{% if is_multi_lang_enabled() %}
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownLanguage" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-globe"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownLanguage">
|
||||
<li><a class="dropdown-item" href="{{ url('language/pt_BR') }}?redirect={{ current_uri }}">Português</a></li>
|
||||
<li><a class="dropdown-item" href="{{ url('language/en_US') }}?redirect={{ current_uri }}">English</a></li>
|
||||
<li><a class="dropdown-item" href="{{ url('language/es_ES') }}?redirect={{ current_uri }}">Español</a></li>
|
||||
<li><a class="dropdown-item" href="{{ url('language/de_DE') }}?redirect={{ current_uri }}">Deutsch</a></li>
|
||||
<li><a class="dropdown-item" href="{{ url('language/fr_FR') }}?redirect={{ current_uri }}">Français</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
Executable
+92
@@ -0,0 +1,92 @@
|
||||
<!-- Responsive navbar-->
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<div class="container px-5">
|
||||
<a class="navbar-brand" href="{{ url('/') }}">
|
||||
<img src="{{ asset_url('img/logo_syscms.png') }}" alt="{{ platformName }}" height="30">
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a class="nav-link active" aria-current="page" href="{{ url('/') }}">{{ __('layout.menu.home') }}</a></li>
|
||||
|
||||
{% for key, visibility in config_pages_visibility %}
|
||||
{% if visibility.public and key != 'index' and key != 'contact' %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url(key) }}">
|
||||
{{ __('layout.menu.' ~ key) != 'layout.menu.' ~ key ? __('layout.menu.' ~ key) : visibility.title }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<li class="nav-item"><a class="nav-link" href="{{ url('contact') }}">{{ __('layout.menu.contact') }}</a></li>
|
||||
|
||||
{# Dynamic Module Links #}
|
||||
{% if main_company is defined and main_company.modules is defined %}
|
||||
{% for module in main_company.modules %}
|
||||
{% if module.pivot.bus_modules_is_enabled and module.pivot.bus_modules_show_public_nav %}
|
||||
{% set route = module.modules_name %}
|
||||
{% set label = module.modules_display_name %}
|
||||
|
||||
{% if module.modules_settings.menu.public is defined %}
|
||||
{% set route = module.modules_settings.menu.public.route ?? route %}
|
||||
{% set label = module.modules_settings.menu.public.label ?? label %}
|
||||
{% endif %}
|
||||
|
||||
{% if module.modules_name != 'pagebuilder' %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url(route) }}">
|
||||
{{ __('layout.menu.' ~ module.modules_name) != 'layout.menu.' ~ module.modules_name ? __('layout.menu.' ~ module.modules_name) : __(label) }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{# Pages controlled by PageBuilder module #}
|
||||
{% set show_pages = false %}
|
||||
{% if main_company is defined and main_company.modules is defined %}
|
||||
{% for module in main_company.modules %}
|
||||
{% if module.modules_name == 'pagebuilder' and module.pivot.bus_modules_is_enabled and module.pivot.bus_modules_show_public_nav %}
|
||||
{% set show_pages = true %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if show_pages and pages_public|length > 0 %}
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" id="navbarDropdownPages" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">{{ __('layout.menu.pages') }}</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownPages">
|
||||
{% for page in pages_public %}
|
||||
<li><a class="dropdown-item" href="{{ url('pages/' ~ page.pages_slug) }}">{{ page.pages_title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% include 'partials/language-switcher.twig' %}
|
||||
|
||||
{% if auth.user %}
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" id="navbarDropdownUser" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
{% if auth.user.users_avatar %}
|
||||
<img src="{{ auth.user.avatar_url }}" alt="{{ auth.user.display_name }}" class="rounded-circle" style="width: 25px; height: 25px; object-fit: cover; margin-right: 5px;">
|
||||
{% else %}
|
||||
<i class="bi bi-person"></i>
|
||||
{% endif %}
|
||||
{{ auth.user.display_name }}
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownUser">
|
||||
<li><a class="dropdown-item" href="{{ url('dashboard') }}"><i class="bi bi-speedometer2"></i> {{ __('layout.menu.dashboard') }}</a></li>
|
||||
<li><a class="dropdown-item" href="{{ url('profile') }}"><i class="bi bi-person-circle"></i> {{ __('layout.profile.title') }}</a></li>
|
||||
<li><hr class="dropdown-divider" /></li>
|
||||
<li><a class="dropdown-item" href="{{ url('logout') }}"><i class="bi bi-box-arrow-right"></i> {{ __('auth.logout') }}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="nav-item"><a class="nav-link" href="{{ url('login') }}"><i class="bi bi-box-arrow-in-right"></i> {{ __('layout.menu.login') }}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
Executable
+76
@@ -0,0 +1,76 @@
|
||||
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
|
||||
<div class="sb-sidenav-menu">
|
||||
<div class="nav">
|
||||
<div class="sb-sidenav-menu-heading">{{ __('layout.core') }}</div>
|
||||
<a class="nav-link" href="{{ url('dashboard') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-speedometer2"></i></div>
|
||||
{{ __('dashboard.title') }}
|
||||
</a>
|
||||
|
||||
{% if user.role == 'member' or user.role == 'user' %}
|
||||
<a class="nav-link" href="{{ url('profile') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-person-circle"></i></div>
|
||||
{{ __('auth.profile_title') }}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if sidebar_items|length > 0 %}
|
||||
<div class="sb-sidenav-menu-heading">{{ __('layout.modules_header') }}</div>
|
||||
{% for item in sidebar_items %}
|
||||
<a class="nav-link" href="{{ url(item.route) }}">
|
||||
<div class="sb-nav-link-icon">
|
||||
<i class="{{ item.icon }}"></i>
|
||||
</div>
|
||||
{{ item.label }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if user.role == 'super_admin' %}
|
||||
<div class="sb-sidenav-menu-heading">{{ __('layout.system') }}</div>
|
||||
<a class="nav-link" href="{{ url('admin/themes') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-palette"></i></div>
|
||||
{{ __('layout.themes') }}
|
||||
</a>
|
||||
<a class="nav-link" href="{{ url('admin/globallists') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-list-ul"></i></div>
|
||||
{{ __('layout.global_lists') }}
|
||||
</a>
|
||||
<a class="nav-link" href="{{ url('admin/systemconfig') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-gear"></i></div>
|
||||
{{ __('dashboard.settings') }}
|
||||
</a>
|
||||
<a class="nav-link" href="{{ url('admin/logs') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-file-text"></i></div>
|
||||
{{ __('layout.system_logs') }}
|
||||
</a>
|
||||
<a class="nav-link" href="{{ url('admin/system/info') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-server"></i></div>
|
||||
{{ __('layout.system_info') }}
|
||||
</a>
|
||||
<a class="nav-link" href="{{ url('admin/system/phpinfo') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-filetype-php"></i></div>
|
||||
{{ __('layout.php_info') }}
|
||||
</a>
|
||||
<a class="nav-link" href="{{ url('admin/modules/install') }}">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-box"></i></div>
|
||||
{{ __('layout.modules') }}
|
||||
</a>
|
||||
<a class="nav-link" href="{{ url('admin/system/clear-cache') }}" onclick="return confirm('{{ __('layout.clear_cache_confirm') }}')">
|
||||
<div class="sb-nav-link-icon"><i class="bi bi-eraser"></i></div>
|
||||
{{ __('layout.clear_cache') }}
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sb-sidenav-footer">
|
||||
<div class="small">{{ __('dashboard.logged_in_as') }}:</div>
|
||||
{{ user.display_name|default(user.name) }}
|
||||
{% if current_company %}
|
||||
<div class="small">{{ current_company.name }}</div>
|
||||
{% else %}
|
||||
<div class="small">{{ __('dashboard.no_company') }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</nav>
|
||||
Executable
+182
@@ -0,0 +1,182 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block title %}{{ __('system.title') }} - {{ platformName }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ __('system.title') }}</h1>
|
||||
<div class="btn-toolbar mb-2 mb-md-0">
|
||||
<div class="btn-group me-2">
|
||||
<a href="{{ url('admin/system/phpinfo') }}" class="btn btn-sm btn-outline-primary" target="_blank">
|
||||
<i class="bi bi-info-circle"></i> {{ __('system.full_php_info') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!-- Application Info -->
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="card shadow h-100">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('system.application') }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tr>
|
||||
<th style="width: 40%">{{ __('system.name') }}:</th>
|
||||
<td>{{ info.app.name }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.version') }}:</th>
|
||||
<td>{{ info.app.version }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.environment') }}:</th>
|
||||
<td><span class="badge bg-{{ info.app.env == 'production' ? 'success' : 'warning' }}">{{ info.app.env }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.debug_mode') }}:</th>
|
||||
<td>
|
||||
{% if info.app.debug %}
|
||||
<span class="badge bg-danger">{{ __('system.enabled') }}</span>
|
||||
{% else %}
|
||||
<span class="badge bg-success">{{ __('system.disabled') }}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- System Info -->
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="card shadow h-100">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('system.server') }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tr>
|
||||
<th style="width: 40%">{{ __('system.os') }}:</th>
|
||||
<td>{{ info.system.os }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.hostname') }}:</th>
|
||||
<td>{{ info.system.hostname }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.software') }}:</th>
|
||||
<td>{{ info.system.server_software }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.timezone') }}:</th>
|
||||
<td>{{ info.system.timezone }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PHP Info -->
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="card shadow h-100">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('system.php_environment') }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tr>
|
||||
<th style="width: 40%">{{ __('system.version') }}:</th>
|
||||
<td>{{ info.php.version }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.sapi') }}:</th>
|
||||
<td>{{ info.php.sapi }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.memory_limit') }}:</th>
|
||||
<td>{{ info.php.memory_limit }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.max_execution_time') }}:</th>
|
||||
<td>{{ info.php.max_execution_time }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.max_upload') }}:</th>
|
||||
<td>{{ info.php.upload_max_filesize }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Database Info -->
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="card shadow h-100">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('system.database_header') }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tr>
|
||||
<th style="width: 40%">{{ __('system.driver') }}:</th>
|
||||
<td>{{ info.database.driver }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.database_version') }}:</th>
|
||||
<td>{{ info.database.version }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.database_name') }}:</th>
|
||||
<td>{{ info.database.database }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Disk Info -->
|
||||
<div class="col-12 mb-4">
|
||||
<div class="card shadow">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">{{ __('system.disk_usage') }}</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-4">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tr>
|
||||
<th style="width: 40%">{{ __('system.total_space') }}:</th>
|
||||
<td>{{ info.disk.total }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.used_space') }}:</th>
|
||||
<td>{{ info.disk.used }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('system.free_space') }}:</th>
|
||||
<td>{{ info.disk.free }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
{% set percent = (info.disk.used|replace({' GB': '', ' MB': '', ' KB': '', ' B': ''}) / info.disk.total|replace({' GB': '', ' MB': '', ' KB': '', ' B': ''}) * 100)|round(1) %}
|
||||
<!-- Note: The calculation above is very rough and depends on units being same.
|
||||
Better to pass raw bytes or percentage from controller.
|
||||
For now, let's just rely on visual estimation or assume controller logic if needed.
|
||||
Actually, let's just show a simple static bar for 'Used' based on bytes if we had them.
|
||||
Since we formatted bytes in controller, we can't easily calc percentage here without unformatting.
|
||||
Let's skip the progress bar or make it dummy for now. -->
|
||||
<div class="progress" style="height: 25px;">
|
||||
<div class="progress-bar" role="progressbar" style="width: 50%;" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">{{ __('system.disk_usage_approx') }}</div>
|
||||
</div>
|
||||
<small class="text-muted">{{ __('system.disk_calc_note') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Executable
+111
@@ -0,0 +1,111 @@
|
||||
{% extends "layouts/dashboard.twig" %}
|
||||
|
||||
{% block title %}{{ __('system.php_info_title') }} - {{ platformName }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1 class="h2">{{ __('system.php_info_title') }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header bg-primary text-white">
|
||||
<h5 class="mb-0"><i class="fas fa-server mr-2"></i>Informações do Servidor PHP</h5>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="php-info-container">
|
||||
<style>
|
||||
.php-info-container {
|
||||
overflow-x: auto;
|
||||
background-color: #f8f9fa;
|
||||
padding: 20px;
|
||||
}
|
||||
.php-info-container table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
background-color: #fff;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.php-info-container table:nth-child(even) {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.php-info-container h2 {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
color: #fff;
|
||||
padding: 12px 20px;
|
||||
margin: 20px 0 15px 0;
|
||||
border-radius: 8px;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 600;
|
||||
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
|
||||
}
|
||||
.php-info-container h1 {
|
||||
display: none;
|
||||
}
|
||||
.php-info-container td, .php-info-container th {
|
||||
padding: 10px 15px;
|
||||
word-break: break-word;
|
||||
border: 1px solid #e9ecef;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.php-info-container th {
|
||||
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.php-info-container tr:nth-child(even) td {
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.php-info-container tr:hover td {
|
||||
background-color: #e9ecef;
|
||||
transition: background-color 0.2s ease;
|
||||
}
|
||||
.php-info-container td:first-child {
|
||||
font-weight: 600;
|
||||
color: #495057;
|
||||
background-color: #fff3cd;
|
||||
width: 30%;
|
||||
}
|
||||
.php-info-container .center {
|
||||
text-align: center;
|
||||
}
|
||||
.php-info-container .e {
|
||||
background-color: #d4edda !important;
|
||||
color: #155724;
|
||||
font-weight: 500;
|
||||
}
|
||||
.php-info-container .v {
|
||||
background-color: #fff !important;
|
||||
color: #212529;
|
||||
}
|
||||
.php-info-container .h {
|
||||
background-color: #cce5ff !important;
|
||||
color: #004085;
|
||||
}
|
||||
.php-info-container .vr {
|
||||
background-color: #fff3cd !important;
|
||||
color: #856404;
|
||||
}
|
||||
.php-info-container a {
|
||||
color: #667eea;
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
}
|
||||
.php-info-container a:hover {
|
||||
color: #764ba2;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.php-info-container img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
{{ phpinfo|raw }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user