diff --git a/charity-settings.php b/charity-settings.php index 98daee6..3a180a5 100644 --- a/charity-settings.php +++ b/charity-settings.php @@ -2,8 +2,8 @@ require_once __DIR__ . '/includes/header.php'; require_once __DIR__ . '/mail/MailService.php'; -// Only admins can access this page -if (!isAdmin()) { +// Only users with settings view permission can access this page +if (!canView('settings')) { redirect("index.php"); } @@ -12,8 +12,12 @@ $error_msg = ''; // Handle Re-enable SMTP if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['enable_smtp'])) { - db()->query("UPDATE smtp_settings SET is_enabled = 1, consecutive_failures = 0 WHERE id = 1"); - $_SESSION['success'] = 'تم إعادة تفعيل SMTP وتصفير عداد الأخطاء'; + if (canEdit('settings')) { + db()->query("UPDATE smtp_settings SET is_enabled = 1, consecutive_failures = 0 WHERE id = 1"); + $_SESSION['success'] = 'تم إعادة تفعيل SMTP وتصفير عداد الأخطاء'; + } else { + $_SESSION['error'] = 'عذراً، ليس لديك الصلاحية لتعديل الإعدادات'; + } redirect('charity-settings.php'); } @@ -27,101 +31,125 @@ $smtp = $stmt->fetch(); // Handle Charity Settings Update if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_charity'])) { - $charity_name = $_POST['charity_name']; - $charity_email = $_POST['charity_email']; - $charity_phone = $_POST['charity_phone']; - $charity_address = $_POST['charity_address']; - $charity_logo = $charity['charity_logo']; - $charity_favicon = $charity['charity_favicon']; + if (!canEdit('settings')) { + $_SESSION['error'] = 'عذراً، ليس لديك الصلاحية لتعديل الإعدادات'; + } else { + $charity_name = $_POST['charity_name']; + $charity_email = $_POST['charity_email']; + $charity_phone = $_POST['charity_phone']; + $charity_address = $_POST['charity_address']; + $charity_logo = $charity['charity_logo']; + $charity_favicon = $charity['charity_favicon']; - $upload_dir = 'uploads/charity/'; - if (!is_dir($upload_dir)) mkdir($upload_dir, 0775, true); + $upload_dir = 'uploads/charity/'; + if (!is_dir($upload_dir)) mkdir($upload_dir, 0775, true); - if (isset($_FILES['charity_logo']) && $_FILES['charity_logo']['error'] === UPLOAD_ERR_OK) { - $file_ext = pathinfo($_FILES['charity_logo']['name'], PATHINFO_EXTENSION); - $new_logo = 'logo_' . time() . '.' . $file_ext; - if (move_uploaded_file($_FILES['charity_logo']['tmp_name'], $upload_dir . $new_logo)) { - $charity_logo = $upload_dir . $new_logo; + if (isset($_FILES['charity_logo']) && $_FILES['charity_logo']['error'] === UPLOAD_ERR_OK) { + $file_ext = pathinfo($_FILES['charity_logo']['name'], PATHINFO_EXTENSION); + $new_logo = 'logo_' . time() . '.' . $file_ext; + if (move_uploaded_file($_FILES['charity_logo']['tmp_name'], $upload_dir . $new_logo)) { + $charity_logo = $upload_dir . $new_logo; + } } - } - if (isset($_FILES['charity_favicon']) && $_FILES['charity_favicon']['error'] === UPLOAD_ERR_OK) { - $file_ext = pathinfo($_FILES['charity_favicon']['name'], PATHINFO_EXTENSION); - $new_favicon = 'favicon_' . time() . '.' . $file_ext; - if (move_uploaded_file($_FILES['charity_favicon']['tmp_name'], $upload_dir . $new_favicon)) { - $charity_favicon = $upload_dir . $new_favicon; + if (isset($_FILES['charity_favicon']) && $_FILES['charity_favicon']['error'] === UPLOAD_ERR_OK) { + $file_ext = pathinfo($_FILES['charity_favicon']['name'], PATHINFO_EXTENSION); + $new_favicon = 'favicon_' . time() . '.' . $file_ext; + if (move_uploaded_file($_FILES['charity_favicon']['tmp_name'], $upload_dir . $new_favicon)) { + $charity_favicon = $upload_dir . $new_favicon; + } } - } - $stmt = db()->prepare("UPDATE charity_settings SET charity_name = ?, charity_email = ?, charity_phone = ?, charity_address = ?, charity_logo = ?, charity_favicon = ? WHERE id = 1"); - $stmt->execute([$charity_name, $charity_email, $charity_phone, $charity_address, $charity_logo, $charity_favicon]); - $_SESSION['success'] = 'تم تحديث إعدادات النظام بنجاح'; + $stmt = db()->prepare("UPDATE charity_settings SET charity_name = ?, charity_email = ?, charity_phone = ?, charity_address = ?, charity_logo = ?, charity_favicon = ? WHERE id = 1"); + $stmt->execute([$charity_name, $charity_email, $charity_phone, $charity_address, $charity_logo, $charity_favicon]); + $_SESSION['success'] = 'تم تحديث إعدادات النظام بنجاح'; + } redirect('charity-settings.php'); } // Handle SMTP Settings Update if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_smtp'])) { - $stmt = db()->prepare("UPDATE smtp_settings SET smtp_host = ?, smtp_port = ?, smtp_secure = ?, smtp_user = ?, smtp_pass = ?, from_email = ?, from_name = ?, reply_to = ?, max_failures = ? WHERE id = 1"); - $stmt->execute([ - $_POST['smtp_host'], - (int)$_POST['smtp_port'], - $_POST['smtp_secure'], - $_POST['smtp_user'], - $_POST['smtp_pass'], - $_POST['from_email'], - $_POST['from_name'], - $_POST['reply_to'], - (int)$_POST['max_failures'] - ]); - $_SESSION['success'] = 'تم تحديث إعدادات البريد (SMTP) بنجاح'; + if (!canEdit('settings')) { + $_SESSION['error'] = 'عذراً، ليس لديك الصلاحية لتعديل الإعدادات'; + } else { + $stmt = db()->prepare("UPDATE smtp_settings SET smtp_host = ?, smtp_port = ?, smtp_secure = ?, smtp_user = ?, smtp_pass = ?, from_email = ?, from_name = ?, reply_to = ?, max_failures = ? WHERE id = 1"); + $stmt->execute([ + $_POST['smtp_host'], + (int)$_POST['smtp_port'], + $_POST['smtp_secure'], + $_POST['smtp_user'], + $_POST['smtp_pass'], + $_POST['from_email'], + $_POST['from_name'], + $_POST['reply_to'], + (int)$_POST['max_failures'] + ]); + $_SESSION['success'] = 'تم تحديث إعدادات البريد (SMTP) بنجاح'; + } redirect('charity-settings.php'); } // Handle Test Email if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['test_email_addr'])) { - $to = $_POST['test_email_addr']; - $res = MailService::sendMail($to, "رسالة تجريبية - Test Email", "
إذا كنت ترى هذه الرسالة، فإن إعدادات SMTP تعمل بشكل صحيح.
"); - if ($res['success']) { - $_SESSION['success'] = "تم إرسال الرسالة التجريبية بنجاح إلى $to"; + if (!canEdit('settings')) { + $_SESSION['error'] = 'عذراً، ليس لديك الصلاحية للقيام بهذا الإجراء'; } else { - $_SESSION['error'] = "فشل إرسال الرسالة التجريبية: " . $res['error']; + $to = $_POST['test_email_addr']; + $res = MailService::sendMail($to, "رسالة تجريبية - Test Email", "إذا كنت ترى هذه الرسالة، فإن إعدادات SMTP تعمل بشكل صحيح.
"); + if ($res['success']) { + $_SESSION['success'] = "تم إرسال الرسالة التجريبية بنجاح إلى $to"; + } else { + $_SESSION['error'] = "فشل إرسال الرسالة التجريبية: " . $res['error']; + } } redirect('charity-settings.php'); } // Handle Status Operations if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_status'])) { - $name = $_POST['status_name']; - $color = $_POST['status_color']; - $is_default = isset($_POST['is_default']) ? 1 : 0; - if ($is_default) db()->query("UPDATE mailbox_statuses SET is_default = 0"); - $stmt = db()->prepare("INSERT INTO mailbox_statuses (name, color, is_default) VALUES (?, ?, ?)"); - $stmt->execute([$name, $color, $is_default]); - $_SESSION['success'] = 'تم إضافة نوع الحالة بنجاح'; + if (!canEdit('settings')) { + $_SESSION['error'] = 'عذراً، ليس لديك الصلاحية لتعديل الإعدادات'; + } else { + $name = $_POST['status_name']; + $color = $_POST['status_color']; + $is_default = isset($_POST['is_default']) ? 1 : 0; + if ($is_default) db()->query("UPDATE mailbox_statuses SET is_default = 0"); + $stmt = db()->prepare("INSERT INTO mailbox_statuses (name, color, is_default) VALUES (?, ?, ?)"); + $stmt->execute([$name, $color, $is_default]); + $_SESSION['success'] = 'تم إضافة نوع الحالة بنجاح'; + } redirect('charity-settings.php'); } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_status'])) { - $id = $_POST['status_id']; - $name = $_POST['status_name']; - $color = $_POST['status_color']; - $is_default = isset($_POST['is_default']) ? 1 : 0; - if ($is_default) db()->query("UPDATE mailbox_statuses SET is_default = 0"); - $stmt = db()->prepare("UPDATE mailbox_statuses SET name = ?, color = ?, is_default = ? WHERE id = ?"); - $stmt->execute([$name, $color, $is_default, $id]); - $_SESSION['success'] = 'تم تحديث نوع الحالة بنجاح'; + if (!canEdit('settings')) { + $_SESSION['error'] = 'عذراً، ليس لديك الصلاحية لتعديل الإعدادات'; + } else { + $id = $_POST['status_id']; + $name = $_POST['status_name']; + $color = $_POST['status_color']; + $is_default = isset($_POST['is_default']) ? 1 : 0; + if ($is_default) db()->query("UPDATE mailbox_statuses SET is_default = 0"); + $stmt = db()->prepare("UPDATE mailbox_statuses SET name = ?, color = ?, is_default = ? WHERE id = ?"); + $stmt->execute([$name, $color, $is_default, $id]); + $_SESSION['success'] = 'تم تحديث نوع الحالة بنجاح'; + } redirect('charity-settings.php'); } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_status'])) { - $id = $_POST['status_id']; - $count = db()->prepare("SELECT COUNT(*) FROM mailbox WHERE status_id = ?"); - $count->execute([$id]); - if ($count->fetchColumn() > 0) { - $_SESSION['error'] = 'لا يمكن حذف هذه الحالة لأنها مستخدمة في بعض السجلات'; + if (!canDelete('settings')) { + $_SESSION['error'] = 'عذراً، ليس لديك الصلاحية لحذف الإعدادات'; } else { - db()->prepare("DELETE FROM mailbox_statuses WHERE id = ?")->execute([$id]); - $_SESSION['success'] = 'تم حذف نوع الحالة بنجاح'; + $id = $_POST['status_id']; + $count = db()->prepare("SELECT COUNT(*) FROM mailbox WHERE status_id = ?"); + $count->execute([$id]); + if ($count->fetchColumn() > 0) { + $_SESSION['error'] = 'لا يمكن حذف هذه الحالة لأنها مستخدمة في بعض السجلات'; + } else { + db()->prepare("DELETE FROM mailbox_statuses WHERE id = ?")->execute([$id]); + $_SESSION['success'] = 'تم حذف نوع الحالة بنجاح'; + } } redirect('charity-settings.php'); } @@ -228,7 +256,9 @@ $post_max = ini_get('post_max_size');