📄 Source: index.php
<?php
// Generator Cereri / Adeverințe
$nume = $prenume = $clasa_an = $clasa_letter = $motiv = $data = '';
$errors = [];
$generated_text = '';
$save_success = null;
$theme = $_COOKIE['theme'] ?? 'light';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$nume = trim($_POST['nume'] ?? '');
$prenume = trim($_POST['prenume'] ?? '');
$clasa_an = trim($_POST['clasa_an'] ?? '');
$clasa_letter = trim($_POST['clasa_letter'] ?? '');
$motiv = trim($_POST['motiv'] ?? '');
$data = trim($_POST['data'] ?? '');
// Auto-capitalize names
$nume = mb_convert_case($nume, MB_CASE_TITLE, "UTF-8");
$prenume = mb_convert_case($prenume, MB_CASE_TITLE, "UTF-8");
$clasa_full = $clasa_an . ' ' . $clasa_letter;
// Validation
if (empty($nume)) {
$errors['nume'] = 'Numele este obligatoriu';
}
if (empty($prenume)) {
$errors['prenume'] = 'Prenumele este obligatoriu';
}
if (empty($clasa_an) || empty($clasa_letter)) {
$errors['clasa'] = 'Clasa completă este obligatorie';
}
if (empty($motiv)) {
$errors['motiv'] = 'Motivul cererii este obligatoriu';
} elseif (strlen($motiv) < 10) {
$errors['motiv'] = 'Motivul trebuie să aibă cel puțin 10 caractere';
}
if (empty($data)) {
$errors['data'] = 'Data este obligatorie';
} else {
$date_obj = DateTime::createFromFormat('Y-m-d', $data);
if (!$date_obj || $date_obj->format('Y-m-d') !== $data) {
$errors['data'] = 'Data nu este validă';
}
}
if (empty($errors)) {
// Include the document template
ob_start();
include 'document_template.php';
$generated_text = ob_get_clean();
if (isset($_POST['save_to_file']) && $_POST['save_to_file'] === 'yes') {
if (!is_dir('cereri')) {
mkdir('cereri', 0755, true);
}
$filename = 'cereri/' . date('Y-m-d_H-i-s') . '_' . preg_replace('/[^a-z0-9]/i', '_', strtolower($nume . '_' . $prenume)) . '.txt';
if (file_put_contents($filename, strip_tags($generated_text))) {
$save_success = "Documentul a fost salvat cu succes în: {$filename}";
} else {
$save_success = "Eroare la salvarea documentului!";
}
}
}
}
?>
<!DOCTYPE html>
<html lang="ro">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Generator Cereri / Adeverințe</title>
<link rel="stylesheet" href="style.css">
</head>
<body data-theme="<?php echo $theme; ?>">
<div class="container">
<div class="header">
<div class="logo">
<span class="logo-icon">📜</span>
<h1>Generator Cereri / Adeverințe</h1>
</div>
<button class="theme-toggle" onclick="toggleTheme()">
<?php echo $theme === 'dark' ? '☀️' : '🌙'; ?>
</button>
</div>
<div class="form-section">
<form method="POST" action="" id="mainForm">
<div class="form-row">
<div class="form-group">
<label for="nume">Nume *</label>
<input type="text" id="nume" name="nume" value="<?php echo htmlspecialchars($nume); ?>"
placeholder="Popescu" onblur="capitalizeName(this)" required>
<?php if (isset($errors['nume'])): ?>
<div class="error"><?php echo $errors['nume']; ?></div>
<?php endif; ?>
</div>
<div class="form-group">
<label for="prenume">Prenume *</label>
<input type="text" id="prenume" name="prenume" value="<?php echo htmlspecialchars($prenume); ?>"
placeholder="Ion" onblur="capitalizeName(this)" required>
<?php if (isset($errors['prenume'])): ?>
<div class="error"><?php echo $errors['prenume']; ?></div>
<?php endif; ?>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="clasa_an">Clasa *</label>
<select id="clasa_an" name="clasa_an" required>
<option value="">---</option>
<?php
$clase = ['a V-a', 'a VI-a', 'a VII-a', 'a VIII-a', 'a IX-a', 'a X-a', 'a XI-a', 'a XII-a'];
foreach ($clase as $c) {
$selected = (isset($clasa_an) && $clasa_an == $c) ? 'selected' : '';
echo "<option value='$c' $selected>$c</option>";
}
?>
</select>
</div>
<div class="form-group">
<label for="clasa_letter"> </label>
<select id="clasa_letter" name="clasa_letter" required>
<option value="">---</option>
<?php
$litere = range('A', 'H');
foreach ($litere as $l) {
$selected = (isset($clasa_letter) && $clasa_letter == $l) ? 'selected' : '';
echo "<option value='$l' $selected>$l</option>";
}
?>
</select>
<?php if (isset($errors['clasa'])): ?>
<div class="error"><?php echo $errors['clasa']; ?></div>
<?php endif; ?>
</div>
</div>
<div class="form-group">
<label for="motiv">Motivul cererii *</label>
<textarea id="motiv" name="motiv" placeholder="Ex: Vă rog să îmi aprobați o zi liberă..." required><?php echo htmlspecialchars($motiv); ?></textarea>
<?php if (isset($errors['motiv'])): ?>
<div class="error"><?php echo $errors['motiv']; ?></div>
<?php endif; ?>
</div>
<div class="form-row">
<div class="form-group">
<label for="data">Data evenimentului *</label>
<input type="date" id="data" name="data" value="<?php echo htmlspecialchars($data); ?>" required>
<?php if (isset($errors['data'])): ?>
<div class="error"><?php echo $errors['data']; ?></div>
<?php endif; ?>
</div>
<div class="form-group">
<div class="checkbox-group">
<input type="checkbox" id="save_to_file" name="save_to_file" value="yes">
<label for="save_to_file">💾 Salvează ca .txt</label>
</div>
</div>
</div>
<div class="button-group">
<button type="submit" class="btn-generate">✨ Generează Document</button>
<button type="reset" class="btn-clear" onclick="this.form.reset();">🗑️ Resetează</button>
</div>
</form>
</div>
<?php if (!empty($errors)): ?>
<div class="error-message">
<strong>⚠️ Corectați erorile:</strong>
<ul>
<?php foreach ($errors as $error): ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<footer class="footer">
<p>© <?php echo date('Y'); ?> Generator Cereri / Adeverințe | Sistem oficial</p>
<div class="symbols">📚 🎓 📜 ✍️</div>
</footer>
</div>
<script>
function capitalizeName(input) {
input.value = input.value.toLowerCase().replace(/\b\w/g, l => l.toUpperCase());
}
function openDocumentWindow(content, saveMsg) {
const win = window.open('', '_blank', 'width=700,height=500,toolbar=yes,scrollbars=yes');
win.document.write(`
<!DOCTYPE html>
<html>
<head>
<title>Document Cerere/Adeverință</title>
<meta charset="UTF-8">
<style>
body {
margin: 0;
padding: 20px;
background: #f0f0f0;
}
.document {
max-width: 600px;
margin: 0 auto;
background: white;
padding: 20px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.buttons {
text-align: center;
margin-top: 20px;
}
button {
background: #667eea;
color: white;
border: none;
padding: 8px 16px;
margin: 0 5px;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background: #764ba2;
}
${saveMsg ? '.save-msg { background: #d4edda; padding: 8px; margin-bottom: 15px; border-radius: 5px; text-align: center; font-size: 12px; }' : ''}
@media print {
body { background: white; padding: 0; }
.document { box-shadow: none; padding: 15px; }
.buttons { display: none; }
}
</style>
</head>
<body>
<div class="document">
${saveMsg ? `<div class="save-msg">✅ ${saveMsg}</div>` : ''}
${content}
</div>
<div class="buttons">
<button onclick="window.print()">🖨️ Printează</button>
<button onclick="window.close()">❌ Închide</button>
</div>
</body>
</html>
`);
win.document.close();
}
function toggleTheme() {
const body = document.body;
const newTheme = body.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
body.setAttribute('data-theme', newTheme);
document.cookie = `theme=${newTheme}; path=/; max-age=31536000`;
document.querySelector('.theme-toggle').innerHTML = newTheme === 'dark' ? '☀️ Lumina' : '🌙 Noapte';
}
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($errors) && !empty($generated_text)): ?>
setTimeout(() => {
openDocumentWindow(
<?php echo json_encode($generated_text); ?>,
<?php echo json_encode($save_success); ?>
);
}, 100);
<?php endif; ?>
</script>
</body>
</html>
← Back