First Commit

This commit is contained in:
marco
2026-09-01 10:46:29 -03:00
commit bf96b77e9c
10000 changed files with 3508600 additions and 0 deletions
+4
View File
@@ -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>
+13
View File
@@ -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>
+29
View File
@@ -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>
+35
View File
@@ -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 %}
+8
View File
@@ -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>
+16
View File
@@ -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>
+271
View File
@@ -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 %}
+71
View File
@@ -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 %}
+15
View File
@@ -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 %}
+82
View File
@@ -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>
+96
View File
@@ -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>
+82
View File
@@ -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>
+26
View File
@@ -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 %}
+46
View File
@@ -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>
+19
View File
@@ -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 %}
+81
View File
@@ -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>
+263
View File
@@ -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 &copy; {{ platformName }} {{ "now"|date("Y") }}
&nbsp;|&nbsp;
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>
&middot;
<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>
+42
View File
@@ -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"
}
}
+83
View File
@@ -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"
}
}
+14
View File
@@ -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"
}
+39
View File
@@ -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."
}
+32
View File
@@ -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."
}
+42
View File
@@ -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"
}
}
+84
View File
@@ -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"
}
}
+14
View File
@@ -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"
}
+39
View File
@@ -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."
}
+32
View File
@@ -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."
}
+42
View File
@@ -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"
}
}
+83
View File
@@ -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"
}
}
+14
View File
@@ -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"
}
+39
View File
@@ -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."
}
+32
View File
@@ -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."
}
+42
View File
@@ -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"
}
}
+83
View File
@@ -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"
}
}
+14
View File
@@ -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"
}
+39
View File
@@ -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."
}
+32
View File
@@ -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."
}
+15
View File
@@ -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"
}
+42
View File
@@ -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"
}
}
+84
View File
@@ -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"
}
}
+14
View File
@@ -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"
}
+39
View File
@@ -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."
}
+32
View File
@@ -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."
}
+47
View File
@@ -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 %}
+28
View File
@@ -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 %}
+115
View File
@@ -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 %}
+15
View File
@@ -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 %}
&copy; {{ '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>
+14
View File
@@ -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 %}
+92
View File
@@ -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>
+76
View File
@@ -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>
+182
View File
@@ -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 %}
+111
View File
@@ -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 %}