139 lines
6.6 KiB
PHP
139 lines
6.6 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/includes/app.php';
|
|
|
|
$flash = consume_flash();
|
|
$settings = get_app_settings();
|
|
|
|
$errors = [];
|
|
$values = [
|
|
'app_name' => $settings['app_name'] ?? '',
|
|
'app_email' => $settings['app_email'] ?? '',
|
|
'app_telephone' => $settings['app_telephone'] ?? '',
|
|
];
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$values['app_name'] = clean_text($_POST['app_name'] ?? '', 190);
|
|
$values['app_email'] = clean_text($_POST['app_email'] ?? '', 190);
|
|
$values['app_telephone'] = clean_text($_POST['app_telephone'] ?? '', 60);
|
|
|
|
if ($values['app_name'] === '') $errors['app_name'] = 'مطلوب';
|
|
|
|
$logoPath = $settings['app_logo'] ?? '';
|
|
$faviconPath = $settings['app_favicon'] ?? '';
|
|
|
|
// Handle Uploads
|
|
$uploadDir = __DIR__ . '/assets/images/uploads/';
|
|
if (!is_dir($uploadDir)) {
|
|
mkdir($uploadDir, 0755, true);
|
|
}
|
|
|
|
if (isset($_FILES['logo']) && $_FILES['logo']['error'] === UPLOAD_ERR_OK) {
|
|
$logoExt = strtolower(pathinfo($_FILES['logo']['name'], PATHINFO_EXTENSION));
|
|
if (in_array($logoExt, ['png', 'jpg', 'jpeg', 'svg', 'gif'])) {
|
|
$logoName = 'app_logo_' . time() . '.' . $logoExt;
|
|
if (move_uploaded_file($_FILES['logo']['tmp_name'], $uploadDir . $logoName)) {
|
|
$logoPath = 'assets/images/uploads/' . $logoName;
|
|
}
|
|
} else {
|
|
$errors['logo'] = 'صيغة غير مدعومة';
|
|
}
|
|
}
|
|
|
|
if (isset($_FILES['favicon']) && $_FILES['favicon']['error'] === UPLOAD_ERR_OK) {
|
|
$faviconExt = strtolower(pathinfo($_FILES['favicon']['name'], PATHINFO_EXTENSION));
|
|
if (in_array($faviconExt, ['png', 'ico', 'svg'])) {
|
|
$faviconName = 'app_favicon_' . time() . '.' . $faviconExt;
|
|
if (move_uploaded_file($_FILES['favicon']['tmp_name'], $uploadDir . $faviconName)) {
|
|
$faviconPath = 'assets/images/uploads/' . $faviconName;
|
|
}
|
|
} else {
|
|
$errors['favicon'] = 'صيغة غير مدعومة';
|
|
}
|
|
}
|
|
|
|
if (empty($errors)) {
|
|
try {
|
|
$stmt = db()->prepare('UPDATE app_settings SET app_name = ?, app_email = ?, app_telephone = ?, app_logo = ?, app_favicon = ?, updated_at = NOW() WHERE id = 1');
|
|
$stmt->execute([
|
|
$values['app_name'],
|
|
$values['app_email'],
|
|
$values['app_telephone'],
|
|
$logoPath,
|
|
$faviconPath
|
|
]);
|
|
set_flash('success', 'تم تحديث الإعدادات العامة بنجاح.');
|
|
header('Location: app_settings.php');
|
|
exit;
|
|
} catch (Throwable $e) {
|
|
$errors['form'] = 'تعذر الحفظ.';
|
|
}
|
|
}
|
|
}
|
|
|
|
render_page_start('إعدادات النظام', 'app_settings', 'إعدادات النظام العامة');
|
|
render_flash($flash);
|
|
?>
|
|
<section class="py-4 py-lg-5">
|
|
<div class="container-xxl">
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-3">
|
|
<?php require __DIR__ . '/includes/sidebar.php'; ?>
|
|
</div>
|
|
<div class="col-lg-9">
|
|
<div class="page-banner mb-4">
|
|
<h1 class="page-title mb-2">الإعدادات العامة للنظام</h1>
|
|
<p class="page-copy mb-0">تعديل اسم النظام، الشعار (Logo)، الأيقونة (Favicon)، وبيانات التواصل.</p>
|
|
</div>
|
|
|
|
<div class="app-card form-card">
|
|
<?php if (!empty($errors['form'])): ?>
|
|
<div class="alert alert-danger mb-4"><?= e($errors['form']) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<form method="post" enctype="multipart/form-data" novalidate>
|
|
<div class="row g-4">
|
|
<div class="col-md-12">
|
|
<label class="form-label">اسم النظام (المنصة)</label>
|
|
<input class="form-control <?= isset($errors['app_name']) ? 'is-invalid' : '' ?>" name="app_name" value="<?= e($values['app_name']) ?>">
|
|
<?php if (isset($errors['app_name'])): ?><div class="invalid-feedback"><?= e($errors['app_name']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">البريد الإلكتروني العام</label>
|
|
<input type="email" class="form-control <?= isset($errors['app_email']) ? 'is-invalid' : '' ?>" name="app_email" value="<?= e($values['app_email']) ?>">
|
|
<?php if (isset($errors['app_email'])): ?><div class="invalid-feedback"><?= e($errors['app_email']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">رقم الهاتف العام</label>
|
|
<input class="form-control <?= isset($errors['app_telephone']) ? 'is-invalid' : '' ?>" name="app_telephone" value="<?= e($values['app_telephone']) ?>">
|
|
<?php if (isset($errors['app_telephone'])): ?><div class="invalid-feedback"><?= e($errors['app_telephone']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">الشعار (Logo)</label>
|
|
<?php if (!empty($settings['app_logo'])): ?>
|
|
<div class="mb-2"><img src="<?= e((string)$settings['app_logo']) ?>" alt="Logo" style="max-height: 80px; max-width: 100%; border-radius: 8px;"></div>
|
|
<?php endif; ?>
|
|
<input type="file" class="form-control <?= isset($errors['logo']) ? 'is-invalid' : '' ?>" name="logo" accept="image/*">
|
|
<?php if (isset($errors['logo'])): ?><div class="invalid-feedback"><?= e($errors['logo']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">الأيقونة (Favicon)</label>
|
|
<?php if (!empty($settings['app_favicon'])): ?>
|
|
<div class="mb-2"><img src="<?= e((string)$settings['app_favicon']) ?>" alt="Favicon" style="max-height: 40px; max-width: 100%; border-radius: 4px;"></div>
|
|
<?php endif; ?>
|
|
<input type="file" class="form-control <?= isset($errors['favicon']) ? 'is-invalid' : '' ?>" name="favicon" accept=".ico,.png,.svg">
|
|
<?php if (isset($errors['favicon'])): ?><div class="invalid-feedback"><?= e($errors['favicon']) ?></div><?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-actions mt-4">
|
|
<button class="btn btn-primary px-4" type="submit">حفظ التغييرات</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<?php render_page_end(); ?>
|