menu ok graphiquement et page 404 ok
This commit is contained in:
+135
@@ -0,0 +1,135 @@
|
||||
/* 404 page specific styles - Dark glitch / data terminal theme */
|
||||
|
||||
body.page-404 {
|
||||
background: radial-gradient(circle at top, rgba(13, 117, 255, 0.12), transparent 32%),
|
||||
linear-gradient(180deg, #06080f 0%, #050611 100%);
|
||||
color: #e4f0ff;
|
||||
font-family: 'Inter', 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;
|
||||
}
|
||||
|
||||
.error-shell {
|
||||
min-height: calc(100vh - 84px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
.error-card {
|
||||
width: min(900px, 100%);
|
||||
padding: 48px 40px;
|
||||
border-radius: 28px;
|
||||
background: rgba(4, 8, 16, 0.94);
|
||||
border: 1px solid rgba(88, 152, 255, 0.18);
|
||||
box-shadow: 0 26px 80px rgba(0, 0, 0, 0.45);
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.error-card::before,
|
||||
.error-card::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.error-card::before {
|
||||
background: linear-gradient(90deg, rgba(255, 255, 255, 0.04), transparent 40%, rgba(255, 255, 255, 0.04));
|
||||
transform: skewX(-12deg);
|
||||
}
|
||||
|
||||
.error-card::after {
|
||||
background-image: radial-gradient(circle at 10% 20%, rgba(3, 155, 255, 0.18), transparent 22%),
|
||||
radial-gradient(circle at 80% 80%, rgba(63, 185, 255, 0.12), transparent 20%);
|
||||
}
|
||||
|
||||
.error-headline {
|
||||
margin: 0 0 16px;
|
||||
font-size: clamp(3rem, 5vw, 6rem);
|
||||
letter-spacing: -0.08em;
|
||||
line-height: 0.9;
|
||||
color: #7df0ff;
|
||||
text-shadow: 0 0 18px rgba(125, 240, 255, 0.28);
|
||||
animation: glowPulse 2.5s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
.error-subtitle {
|
||||
margin: 0 0 24px;
|
||||
color: #b8d3ff;
|
||||
font-size: 1.05rem;
|
||||
line-height: 1.8;
|
||||
letter-spacing: 0.02em;
|
||||
max-width: 720px;
|
||||
}
|
||||
|
||||
.error-meta {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.meta-chip {
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border: 1px solid rgba(34, 126, 255, 0.18);
|
||||
border-radius: 999px;
|
||||
padding: 10px 18px;
|
||||
font-size: 0.95rem;
|
||||
color: #c4d6ff;
|
||||
}
|
||||
|
||||
.error-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.button-return {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 14px 26px;
|
||||
border-radius: 999px;
|
||||
border: 1px solid rgba(125, 240, 255, 0.5);
|
||||
background: rgba(26, 34, 60, 0.95);
|
||||
color: #e5f4ff;
|
||||
font-size: 0.98rem;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
box-shadow: 0 0 18px rgba(46, 213, 255, 0.12);
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease;
|
||||
}
|
||||
|
||||
.button-return:hover,
|
||||
.button-return:focus-visible {
|
||||
transform: translateY(-2px);
|
||||
background: rgba(14, 24, 42, 0.98);
|
||||
box-shadow: 0 0 28px rgba(45, 210, 255, 0.35);
|
||||
}
|
||||
|
||||
@keyframes glowPulse {
|
||||
0% {
|
||||
text-shadow: 0 0 18px rgba(125, 240, 255, 0.28), 0 0 40px rgba(125, 240, 255, 0.18);
|
||||
}
|
||||
100% {
|
||||
text-shadow: 0 0 24px rgba(125, 240, 255, 0.55), 0 0 64px rgba(125, 240, 255, 0.25);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 720px) {
|
||||
.error-card {
|
||||
padding: 32px 22px;
|
||||
}
|
||||
|
||||
.error-headline {
|
||||
font-size: clamp(2.4rem, 10vw, 4rem);
|
||||
}
|
||||
|
||||
.error-actions {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
/* Menu page specific styles - Dark mode modern UI */
|
||||
|
||||
body.menu-page {
|
||||
background: #090b10;
|
||||
color: #e8effa;
|
||||
font-family: Inter, 'Segoe UI', sans-serif;
|
||||
}
|
||||
|
||||
.menu-shell {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
padding: 20px 8px 40px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.menu-card {
|
||||
width: min(1080px, 100%);
|
||||
background: rgba(15, 21, 35, 0.98);
|
||||
border: 1px solid rgba(120, 140, 190, 0.18);
|
||||
border-radius: 28px;
|
||||
box-shadow: 0 22px 80px rgba(0, 0, 0, 0.4);
|
||||
backdrop-filter: blur(18px);
|
||||
padding: 40px;
|
||||
}
|
||||
|
||||
.menu-card__header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.menu-card__title {
|
||||
font-size: clamp(1.8rem, 2.5vw, 2.6rem);
|
||||
margin: 0;
|
||||
line-height: 1.05;
|
||||
letter-spacing: -0.03em;
|
||||
}
|
||||
|
||||
.menu-card__subtitle {
|
||||
color: #97a3c0;
|
||||
font-size: 0.95rem;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.menu-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.menu-button {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
padding: 22px 24px;
|
||||
border-radius: 20px;
|
||||
border: 1px solid rgba(110, 146, 255, 0.2);
|
||||
background: linear-gradient(180deg, rgba(15, 23, 45, 0.95), rgba(18, 24, 42, 0.98));
|
||||
color: #f5f9ff;
|
||||
text-decoration: none;
|
||||
transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
|
||||
min-height: 130px;
|
||||
}
|
||||
|
||||
.menu-button:hover,
|
||||
.menu-button:focus-visible {
|
||||
transform: translateY(-3px);
|
||||
border-color: rgba(91, 132, 255, 0.75);
|
||||
box-shadow: 0 20px 60px rgba(45, 67, 122, 0.28);
|
||||
}
|
||||
|
||||
.menu-button__content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.menu-button__title {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.menu-button__text {
|
||||
color: #97a3c0;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.menu-button__icon {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
border-radius: 16px;
|
||||
background: rgba(87, 132, 255, 0.14);
|
||||
color: #7fa2ff;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.menu-note {
|
||||
margin-top: 30px;
|
||||
color: #8090b3;
|
||||
font-size: 0.95rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (max-width: 860px) {
|
||||
.menu-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.menu-card {
|
||||
padding: 32px 22px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 520px) {
|
||||
.menu-card {
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.menu-button {
|
||||
min-height: 110px;
|
||||
padding: 18px 18px;
|
||||
}
|
||||
}
|
||||
+21
-6
@@ -28,6 +28,8 @@
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
min-height: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
@@ -41,6 +43,15 @@ body {
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
body > .main-content {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
@@ -147,14 +158,16 @@ body {
|
||||
|
||||
.footer {
|
||||
position: relative;
|
||||
padding: 2px 20px;
|
||||
padding: 8px 20px;
|
||||
text-align: center;
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.1;
|
||||
min-height: 28px;
|
||||
line-height: 1.3;
|
||||
min-height: 38px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: rgba(18, 24, 42, 0.98);
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
|
||||
.footer-logout {
|
||||
@@ -184,11 +197,13 @@ body {
|
||||
============================================ */
|
||||
|
||||
.main-content {
|
||||
flex: 1;
|
||||
padding: 40px 20px;
|
||||
flex: 1 0 auto;
|
||||
min-height: 0;
|
||||
padding: 40px 20px 20px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
align-items: flex-start;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.login-container {
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const menuButtons = document.querySelectorAll('.menu-button[data-target]');
|
||||
|
||||
menuButtons.forEach((button) => {
|
||||
button.addEventListener('click', () => {
|
||||
const target = button.getAttribute('data-target');
|
||||
if (target) {
|
||||
window.location.href = target;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
+24
-10
@@ -1,16 +1,30 @@
|
||||
<?php
|
||||
// On envoie explicitement le code d'erreur 404 au navigateur
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
http_response_code(404);
|
||||
|
||||
require_once('header.php');
|
||||
$pageStylesheets = ['/css/404.css'];
|
||||
$bodyClass = 'page-404';
|
||||
|
||||
require_once __DIR__ . '/header.php';
|
||||
?>
|
||||
|
||||
<div style="text-align: center; padding: 50px; color: white;">
|
||||
<h1>Erreur 404</h1>
|
||||
<p>Désolé, la page que vous recherchez est introuvable.</p>
|
||||
<a href="/index.php" style="color: #007bff;">Retour à l'accueil</a>
|
||||
</div>
|
||||
<section class="error-shell">
|
||||
<article class="error-card">
|
||||
<h1 class="error-headline">404</h1>
|
||||
<p class="error-subtitle">La transaction est introuvable. Le cours de cette page a chuté et le marché n’en veut plus.</p>
|
||||
|
||||
<?php
|
||||
require_once('footer.php');
|
||||
?>
|
||||
<div class="error-meta">
|
||||
<span class="meta-chip">Route : /404</span>
|
||||
<span class="meta-chip">Status : Page non cotée</span>
|
||||
<span class="meta-chip">Session : <?= htmlspecialchars((string) ($_SESSION['user_id'] ?? 'invité'), ENT_QUOTES, 'UTF-8') ?></span>
|
||||
</div>
|
||||
|
||||
<div class="error-actions">
|
||||
<a href="/index.php" class="button-return">Retour à la base</a>
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<?php require_once __DIR__ . '/footer.php'; ?>
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
</main>
|
||||
<footer class="footer">
|
||||
<?php if (isset($_SESSION['user_id'])): ?>
|
||||
<a class="logout-button footer-logout" href="/php/menu.php?action=logout">Se déconnecter</a>
|
||||
<a class="logout-button footer-logout" href="/php/logout.php">Se déconnecter</a>
|
||||
<?php endif; ?>
|
||||
<p>© 2026 - Jean-François GIRAUD - Positions en bourse - Tous droits réservés</p>
|
||||
</footer>
|
||||
|
||||
+6
-1
@@ -5,9 +5,14 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Bourse - Page d'Accueil</title>
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
<?php if (!empty($pageStylesheets) && is_array($pageStylesheets)): ?>
|
||||
<?php foreach ($pageStylesheets as $sheet): ?>
|
||||
<link rel="stylesheet" href="<?= htmlspecialchars($sheet, ENT_QUOTES, 'UTF-8') ?>">
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
<link rel="shortcut icon" href="/assets/images/favicon.png" type="image/x-icon">
|
||||
</head>
|
||||
<body>
|
||||
<body class="<?= !empty($bodyClass) ? htmlspecialchars($bodyClass, ENT_QUOTES, 'UTF-8') : '' ?>">
|
||||
<header class="header">
|
||||
<div class="container">
|
||||
<div class="logo">
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
require_once __DIR__ . '/session.php';
|
||||
|
||||
// Destroy the PHP session and clear the session cookie.
|
||||
session_unset();
|
||||
session_destroy();
|
||||
setcookie(session_name(), '', time() - 42000, '/');
|
||||
|
||||
// Redirect to the public login/home page.
|
||||
header('Location: https://giraud-finance.com');
|
||||
exit;
|
||||
+70
-26
@@ -4,40 +4,84 @@ declare(strict_types=1);
|
||||
|
||||
require_once __DIR__ . '/session.php';
|
||||
|
||||
// Logout action
|
||||
if (isset($_GET['action']) && $_GET['action'] === 'logout') {
|
||||
session_unset();
|
||||
session_destroy();
|
||||
setcookie(session_name(), '', time() - 42000, '/');
|
||||
header('Location: ../index.php');
|
||||
exit;
|
||||
// Si l'utilisateur n'est pas connecté, redirection vers l'accueil.
|
||||
if (empty($_SESSION['user_id'])) {
|
||||
header('Location: ../index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Require login
|
||||
if (empty($_SESSION['user_id'])) {
|
||||
header('Location: ../index.php');
|
||||
exit;
|
||||
}
|
||||
// Ajoute le CSS spécifique à cette page et une classe body dédiée.
|
||||
$pageStylesheets = ['/css/menu.css'];
|
||||
$bodyClass = 'menu-page';
|
||||
|
||||
require_once __DIR__ . '/header.php';
|
||||
?>
|
||||
|
||||
<div class="login-container">
|
||||
<div class="login-box">
|
||||
<h2 class="login-title">Espace utilisateur</h2>
|
||||
<section class="menu-shell">
|
||||
<article class="menu-card">
|
||||
<header class="menu-card__header">
|
||||
<div>
|
||||
<h2 class="menu-card__title">Espace de gestion</h2>
|
||||
<p class="menu-card__subtitle">Accédez aux fonctions clés de l'application financière.</p>
|
||||
</div>
|
||||
<span class="menu-card__badge">v1.0</span>
|
||||
</header>
|
||||
|
||||
<p>Session ID : <?php echo htmlspecialchars(session_id(), ENT_QUOTES, 'UTF-8'); ?></p>
|
||||
<p>User ID : <?php echo htmlspecialchars((string)($_SESSION['user_id'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></p>
|
||||
<p>Login : <?php echo htmlspecialchars((string)($_SESSION['user_login'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></p>
|
||||
<p>Nom : <?php echo htmlspecialchars((string)($_SESSION['user_name'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></p>
|
||||
<p>Dernière activité (timestamp) : <?php echo htmlspecialchars((string)time(), ENT_QUOTES, 'UTF-8'); ?></p>
|
||||
<p>Adresse IP : <?php echo htmlspecialchars($_SERVER['REMOTE_ADDR'] ?? '', ENT_QUOTES, 'UTF-8'); ?></p>
|
||||
<form name="menu" class="menu-grid" action="#" method="post" autocomplete="off" novalidate>
|
||||
<button type="button" class="menu-button" data-target="/php/order_gf.php">
|
||||
<div class="menu-button__content">
|
||||
<span class="menu-button__title">Ordre GF</span>
|
||||
<span class="menu-button__text">Envoyer un ordre GF</span>
|
||||
</div>
|
||||
<span class="menu-button__icon">⇄</span>
|
||||
</button>
|
||||
|
||||
<div style="margin-top:16px;">
|
||||
<a class="btn-submit" href="menu.php?action=logout" style="display:inline-block;text-decoration:none;">Se déconnecter</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="menu-button" data-target="/php/order_jfg.php">
|
||||
<div class="menu-button__content">
|
||||
<span class="menu-button__title">Ordre JFG</span>
|
||||
<span class="menu-button__text">Envoyer un ordre JFG</span>
|
||||
</div>
|
||||
<span class="menu-button__icon">↻</span>
|
||||
</button>
|
||||
|
||||
<button type="button" class="menu-button" data-target="/php/account_gf.php">
|
||||
<div class="menu-button__content">
|
||||
<span class="menu-button__title">Compte GF</span>
|
||||
<span class="menu-button__text">Consulter le compte GF</span>
|
||||
</div>
|
||||
<span class="menu-button__icon">💼</span>
|
||||
</button>
|
||||
|
||||
<button type="button" class="menu-button" data-target="/php/account_jfg.php">
|
||||
<div class="menu-button__content">
|
||||
<span class="menu-button__title">Compte JFG</span>
|
||||
<span class="menu-button__text">Consulter le compte JFG</span>
|
||||
</div>
|
||||
<span class="menu-button__icon">📊</span>
|
||||
</button>
|
||||
|
||||
<button type="button" class="menu-button" data-target="/php/actions.php">
|
||||
<div class="menu-button__content">
|
||||
<span class="menu-button__title">Actions</span>
|
||||
<span class="menu-button__text">Voir les actions et transactions</span>
|
||||
</div>
|
||||
<span class="menu-button__icon">⚡</span>
|
||||
</button>
|
||||
|
||||
<button type="button" class="menu-button" data-target="/php/csv.php">
|
||||
<div class="menu-button__content">
|
||||
<span class="menu-button__title">CSV</span>
|
||||
<span class="menu-button__text">Importer / exporter les données</span>
|
||||
</div>
|
||||
<span class="menu-button__icon">📁</span>
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<p class="menu-note">Giraud Finance : Accès sécurisé. Veillez à fermer votre session après chaque utilisation.</p>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<script src="/js/menu.js" defer></script>
|
||||
|
||||
<?php require_once __DIR__ . '/footer.php'; ?>
|
||||
|
||||
|
||||
+100
-3
@@ -9,18 +9,115 @@
|
||||
│ └── images
|
||||
│ ├── favicon.png
|
||||
│ └── GFBlancLogo.png
|
||||
├── composer.json
|
||||
├── composer.lock
|
||||
├── css
|
||||
│ └── style.css
|
||||
├── .htaccess
|
||||
├── index.php
|
||||
├── js
|
||||
├── php
|
||||
│ ├── 404.php
|
||||
│ ├── db.php
|
||||
│ ├── footer.php
|
||||
│ ├── forgot_password.php
|
||||
│ ├── header.php
|
||||
│ ├── login_process.php
|
||||
│ ├── menu.php
|
||||
│ ├── register.php
|
||||
│ ├── reset_password.php
|
||||
│ └── session.php
|
||||
├── structure.txt
|
||||
└── structur.txt
|
||||
└── vendor
|
||||
├── autoload.php
|
||||
├── composer
|
||||
│ ├── autoload_classmap.php
|
||||
│ ├── autoload_namespaces.php
|
||||
│ ├── autoload_psr4.php
|
||||
│ ├── autoload_real.php
|
||||
│ ├── autoload_static.php
|
||||
│ ├── ClassLoader.php
|
||||
│ ├── installed.json
|
||||
│ ├── installed.php
|
||||
│ ├── InstalledVersions.php
|
||||
│ ├── LICENSE
|
||||
│ └── platform_check.php
|
||||
└── phpmailer
|
||||
└── phpmailer
|
||||
├── COMMITMENT
|
||||
├── composer.json
|
||||
├── get_oauth_token.php
|
||||
├── language
|
||||
│ ├── phpmailer.lang-af.php
|
||||
│ ├── phpmailer.lang-ar.php
|
||||
│ ├── phpmailer.lang-as.php
|
||||
│ ├── phpmailer.lang-az.php
|
||||
│ ├── phpmailer.lang-ba.php
|
||||
│ ├── phpmailer.lang-be.php
|
||||
│ ├── phpmailer.lang-bg.php
|
||||
│ ├── phpmailer.lang-bn.php
|
||||
│ ├── phpmailer.lang-ca.php
|
||||
│ ├── phpmailer.lang-cs.php
|
||||
│ ├── phpmailer.lang-da.php
|
||||
│ ├── phpmailer.lang-de.php
|
||||
│ ├── phpmailer.lang-el.php
|
||||
│ ├── phpmailer.lang-eo.php
|
||||
│ ├── phpmailer.lang-es.php
|
||||
│ ├── phpmailer.lang-et.php
|
||||
│ ├── phpmailer.lang-fa.php
|
||||
│ ├── phpmailer.lang-fi.php
|
||||
│ ├── phpmailer.lang-fo.php
|
||||
│ ├── phpmailer.lang-fr.php
|
||||
│ ├── phpmailer.lang-gl.php
|
||||
│ ├── phpmailer.lang-he.php
|
||||
│ ├── phpmailer.lang-hi.php
|
||||
│ ├── phpmailer.lang-hr.php
|
||||
│ ├── phpmailer.lang-hu.php
|
||||
│ ├── phpmailer.lang-hy.php
|
||||
│ ├── phpmailer.lang-id.php
|
||||
│ ├── phpmailer.lang-it.php
|
||||
│ ├── phpmailer.lang-ja.php
|
||||
│ ├── phpmailer.lang-ka.php
|
||||
│ ├── phpmailer.lang-ko.php
|
||||
│ ├── phpmailer.lang-ku.php
|
||||
│ ├── phpmailer.lang-lt.php
|
||||
│ ├── phpmailer.lang-lv.php
|
||||
│ ├── phpmailer.lang-mg.php
|
||||
│ ├── phpmailer.lang-mn.php
|
||||
│ ├── phpmailer.lang-ms.php
|
||||
│ ├── phpmailer.lang-nb.php
|
||||
│ ├── phpmailer.lang-nl.php
|
||||
│ ├── phpmailer.lang-pl.php
|
||||
│ ├── phpmailer.lang-pt_br.php
|
||||
│ ├── phpmailer.lang-pt.php
|
||||
│ ├── phpmailer.lang-ro.php
|
||||
│ ├── phpmailer.lang-ru.php
|
||||
│ ├── phpmailer.lang-si.php
|
||||
│ ├── phpmailer.lang-sk.php
|
||||
│ ├── phpmailer.lang-sl.php
|
||||
│ ├── phpmailer.lang-sr_latn.php
|
||||
│ ├── phpmailer.lang-sr.php
|
||||
│ ├── phpmailer.lang-sv.php
|
||||
│ ├── phpmailer.lang-tl.php
|
||||
│ ├── phpmailer.lang-tr.php
|
||||
│ ├── phpmailer.lang-uk.php
|
||||
│ ├── phpmailer.lang-ur.php
|
||||
│ ├── phpmailer.lang-vi.php
|
||||
│ ├── phpmailer.lang-zh_cn.php
|
||||
│ └── phpmailer.lang-zh.php
|
||||
├── LICENSE
|
||||
├── README.md
|
||||
├── SECURITY.md
|
||||
├── SMTPUTF8.md
|
||||
├── src
|
||||
│ ├── DSNConfigurator.php
|
||||
│ ├── Exception.php
|
||||
│ ├── OAuth.php
|
||||
│ ├── OAuthTokenProvider.php
|
||||
│ ├── PHPMailer.php
|
||||
│ ├── POP3.php
|
||||
│ └── SMTP.php
|
||||
└── VERSION
|
||||
|
||||
7 directories, 17 files
|
||||
13 directories, 106 files
|
||||
|
||||
tree > structure.txt
|
||||
Reference in New Issue
Block a user