258 lines
21 KiB
PHP
258 lines
21 KiB
PHP
<?php if (isset($user) && $user && in_array($user['role'], ['owner', 'manager'])): ?>
|
|
<!-- Settings Modal -->
|
|
<div class="modal fade" id="settingsModal" tabindex="-1" aria-hidden="true">
|
|
<div class="modal-dialog modal-xl modal-dialog-scrollable">
|
|
<div class="modal-content">
|
|
<form action="api/settings.php" method="POST" enctype="multipart/form-data">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title"><?= h(tr('إعدادات الشركة', 'Company Settings')) ?></h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body pb-2">
|
|
<ul class="nav nav-tabs mb-4" id="settingsTabs" role="tablist">
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link active" id="settings-company-tab" data-bs-toggle="tab" data-bs-target="#settings-company-pane" type="button" role="tab" aria-controls="settings-company-pane" aria-selected="true">
|
|
<?= h(tr('بيانات الشركة', 'Company')) ?>
|
|
</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="settings-wablas-tab" data-bs-toggle="tab" data-bs-target="#settings-wablas-pane" type="button" role="tab" aria-controls="settings-wablas-pane" aria-selected="false">
|
|
<?= h(tr('واتساب', 'WhatsApp')) ?>
|
|
</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="settings-email-tab" data-bs-toggle="tab" data-bs-target="#settings-email-pane" type="button" role="tab" aria-controls="settings-email-pane" aria-selected="false">
|
|
<?= h(tr('البريد الإلكتروني', 'Email')) ?>
|
|
</button>
|
|
</li>
|
|
</ul>
|
|
|
|
<div class="tab-content" id="settingsTabsContent">
|
|
<div class="tab-pane fade show active" id="settings-company-pane" role="tabpanel" aria-labelledby="settings-company-tab" tabindex="0">
|
|
<div class="row g-3">
|
|
<div class="col-md-12">
|
|
<label class="form-label"><?= h(tr('المنطقة الزمنية (Timezone)', 'Timezone')) ?></label>
|
|
<select class="form-select" name="timezone" required>
|
|
<?php
|
|
$zones = timezone_identifiers_list();
|
|
$current_tz = get_setting('timezone', 'UTC');
|
|
foreach($zones as $z): ?>
|
|
<option value="<?= h($z) ?>" <?= $z === $current_tz ? 'selected' : '' ?>><?= h($z) ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('اسم الشركة (عربي)', 'Company Name (AR)')) ?></label>
|
|
<input type="text" class="form-control" name="company_name_ar" value="<?= h(get_setting('company_name_ar')) ?>" required>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('اسم الشركة (إنجليزي)', 'Company Name (EN)')) ?></label>
|
|
<input type="text" class="form-control" name="company_name_en" value="<?= h(get_setting('company_name_en')) ?>" required>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('النسبة الضريبية %', 'VAT Percentage %')) ?></label>
|
|
<input type="number" step="0.01" class="form-control" name="vat_percentage" value="<?= h(get_setting('vat_percentage', 5)) ?>" required>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('الرقم الضريبي', 'VAT Number')) ?></label>
|
|
<input type="text" class="form-control" name="company_vat_number" value="<?= h(get_setting('company_vat_number')) ?>">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('رقم الهاتف', 'Phone Number')) ?></label>
|
|
<div class="input-group" dir="ltr">
|
|
<span class="input-group-text">968</span>
|
|
<input type="text" class="form-control" name="company_phone" value="<?= h(normalize_oman_phone((string) get_setting('company_phone'))) ?>" inputmode="numeric" maxlength="8" pattern="\d{8}" placeholder="91234567">
|
|
</div>
|
|
<div class="form-text"><?= h(tr('يُحفظ الرقم محلياً من 8 خانات ويُرسل مع المقدمة 968.', 'Phone is stored locally as 8 digits and sent with the 968 prefix.')) ?></div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('البريد الإلكتروني', 'Email')) ?></label>
|
|
<input type="email" class="form-control" name="company_email" value="<?= h(get_setting('company_email')) ?>">
|
|
</div>
|
|
<div class="col-md-12">
|
|
<label class="form-label"><?= h(tr('العنوان', 'Address')) ?></label>
|
|
<textarea class="form-control" name="company_address" rows="2"><?= h(get_setting('company_address')) ?></textarea>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('الشعار (Logo)', 'Logo')) ?></label>
|
|
<input type="file" class="form-control" name="company_logo" accept="image/*">
|
|
<?php if (get_setting('company_logo')): ?>
|
|
<div class="mt-2"><img src="<?= h(get_setting('company_logo')) ?>" height="50" style="background: #f8f9fa; padding: 5px; border-radius: 4px;"></div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('الأيقونة (Favicon)', 'Favicon')) ?></label>
|
|
<input type="file" class="form-control" name="company_favicon" accept="image/x-icon,image/png,image/jpeg">
|
|
<?php if (get_setting('company_favicon')): ?>
|
|
<div class="mt-2"><img src="<?= h(get_setting('company_favicon')) ?>" height="32" style="background: #f8f9fa; padding: 2px; border-radius: 4px;"></div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tab-pane fade" id="settings-wablas-pane" role="tabpanel" aria-labelledby="settings-wablas-tab" tabindex="0">
|
|
<div class="row g-3">
|
|
<div class="col-12">
|
|
<div class="d-flex flex-column flex-lg-row justify-content-between align-items-lg-center gap-3 border rounded-4 px-4 py-3 bg-light">
|
|
<div>
|
|
<h6 class="mb-1 fw-bold"><?= h(tr('إعدادات واتساب Wablas', 'Wablas WhatsApp Settings')) ?></h6>
|
|
<div class="form-text mb-0"><?= h(tr('المتغيرات المتاحة داخل القوالب: {customer_name}, {order_id}, {status_label}, {total_amount}, {customer_address}, {items_summary}', 'Available template placeholders: {customer_name}, {order_id}, {status_label}, {total_amount}, {customer_address}, {items_summary}')) ?></div>
|
|
</div>
|
|
<div class="d-flex flex-column align-items-stretch align-items-lg-end gap-2">
|
|
<div class="form-check form-switch fs-6 m-0">
|
|
<input type="hidden" name="wablas_enabled" value="0">
|
|
<input class="form-check-input" type="checkbox" role="switch" id="wablasEnabledSwitch" name="wablas_enabled" value="1" <?= wablas_is_enabled() ? 'checked' : '' ?>>
|
|
<label class="form-check-label fw-semibold" for="wablasEnabledSwitch"><?= h(tr('تفعيل الإرسال التلقائي', 'Enable automatic sending')) ?></label>
|
|
<div class="form-text"><?= h(tr('عند الإيقاف لن تُرسل رسائل واتساب تلقائياً من الطلبات أو تغييرات الحالة.', 'When disabled, order and status-change WhatsApp messages will not be sent automatically.')) ?></div>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary">
|
|
<i class="bi bi-save me-1"></i><?= h(tr('حفظ إعدادات واتساب', 'Save WhatsApp Settings')) ?>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body">
|
|
<div class="row g-3">
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('Wablas Token', 'Wablas Token')) ?></label>
|
|
<input type="text" class="form-control" name="wablas_token" value="<?= h(get_setting('wablas_token')) ?>">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('Wablas Secret Key', 'Wablas Secret Key')) ?></label>
|
|
<input type="password" class="form-control" name="wablas_secret_key" value="<?= h(get_setting('wablas_secret_key')) ?>">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<div class="card border-0 shadow-sm bg-light-subtle">
|
|
<div class="card-body">
|
|
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-2 mb-3">
|
|
<div>
|
|
<h6 class="fw-bold mb-1"><?= h(tr('رسالة اختبار', 'Test Message')) ?></h6>
|
|
<p class="text-muted small mb-0"><?= h(tr('يمكنك إرسال رسالة اختبار فورية باستخدام البيانات الموجودة حالياً داخل هذا النموذج قبل الحفظ.', 'Send an instant test message using the values currently filled in this form before saving.')) ?></p>
|
|
</div>
|
|
<button type="submit" class="btn btn-outline-success align-self-start align-self-md-center" formaction="api/wablas_test.php" formmethod="POST">
|
|
<i class="bi bi-whatsapp me-1"></i><?= h(tr('إرسال اختبار', 'Send Test')) ?>
|
|
</button>
|
|
</div>
|
|
<div class="row g-3">
|
|
<div class="col-md-4">
|
|
<label class="form-label"><?= h(tr('رقم الاختبار', 'Test Phone')) ?></label>
|
|
<div class="input-group" dir="ltr">
|
|
<span class="input-group-text">968</span>
|
|
<input type="text" class="form-control" name="wablas_test_phone" value="<?= h(normalize_oman_phone((string) get_setting('company_phone'))) ?>" inputmode="numeric" maxlength="8" pattern="\d{8}" placeholder="91234567">
|
|
</div>
|
|
</div>
|
|
<div class="col-md-8">
|
|
<label class="form-label"><?= h(tr('نص الرسالة التجريبية', 'Test Message Text')) ?></label>
|
|
<textarea class="form-control" name="wablas_test_message" rows="3" placeholder="<?= h(tr('اكتب رسالة الاختبار هنا', 'Write the test message here')) ?>"><?= h(tr('هذه رسالة واتساب تجريبية من النظام.', 'This is a WhatsApp test message from the system.')) ?></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body">
|
|
<div class="d-flex flex-column flex-lg-row justify-content-between align-items-lg-center gap-2 mb-3">
|
|
<div>
|
|
<h6 class="fw-bold mb-1"><?= h(tr('قوالب إشعارات الطلبات', 'Order Notification Templates')) ?></h6>
|
|
<p class="text-muted small mb-0"><?= h(tr('اترك أي حقل فارغاً وسيستخدم النظام القالب الافتراضي له تلقائياً.', 'Leave any field empty and the app will automatically use its built-in default template.')) ?></p>
|
|
</div>
|
|
</div>
|
|
<div class="small text-muted mb-3"><?= h(tr('مرر داخل هذا الصندوق لرؤية كل القوالب.', 'Scroll inside this box to view all templates.')) ?></div>
|
|
<div class="border rounded-3 p-2 p-md-3 bg-light-subtle" style="max-height: 48vh; overflow-y: auto; overscroll-behavior: contain;">
|
|
<div class="row g-3">
|
|
<div class="col-12">
|
|
<label class="form-label"><?= h(tr('قالب رسالة إنشاء الطلب', 'Order Created Template')) ?></label>
|
|
<textarea class="form-control" name="wablas_template_created" rows="4"><?= h(get_setting('wablas_template_created', wablas_default_order_template('created'))) ?></textarea>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('قالب قيد الانتظار', 'Pending Template')) ?></label>
|
|
<textarea class="form-control" name="wablas_template_pending" rows="4"><?= h(get_setting('wablas_template_pending', wablas_default_order_template('pending'))) ?></textarea>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('قالب مقبول', 'Accepted Template')) ?></label>
|
|
<textarea class="form-control" name="wablas_template_accepted" rows="4"><?= h(get_setting('wablas_template_accepted', wablas_default_order_template('accepted'))) ?></textarea>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('قالب مكتمل', 'Completed Template')) ?></label>
|
|
<textarea class="form-control" name="wablas_template_completed" rows="4"><?= h(get_setting('wablas_template_completed', wablas_default_order_template('completed'))) ?></textarea>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr('قالب مرفوض', 'Rejected Template')) ?></label>
|
|
<textarea class="form-control" name="wablas_template_rejected" rows="4"><?= h(get_setting('wablas_template_rejected', wablas_default_order_template('rejected'))) ?></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<div class="border rounded-4 bg-white shadow-sm px-3 py-3 d-flex flex-column flex-sm-row justify-content-sm-end gap-2 mt-1">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= h(tr('إلغاء', 'Cancel')) ?></button>
|
|
<button type="submit" class="btn btn-primary"><?= h(tr('حفظ التغييرات', 'Save Changes')) ?></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tab-pane fade" id="settings-email-pane" role="tabpanel" aria-labelledby="settings-email-tab" tabindex="0">
|
|
<div class="row g-3">
|
|
<div class="col-md-12">
|
|
<h6 class="mb-0 fw-bold"><?= h(tr("إعدادات البريد الإلكتروني (SMTP)", "SMTP Email Settings")) ?></h6>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr("خادم SMTP (Host)", "SMTP Host")) ?></label>
|
|
<input type="text" class="form-control" name="smtp_host" value="<?= h(get_setting("smtp_host")) ?>">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr("منفذ SMTP (Port)", "SMTP Port")) ?></label>
|
|
<input type="number" class="form-control" name="smtp_port" value="<?= h(get_setting("smtp_port", 587)) ?>">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr("مستخدم SMTP (User)", "SMTP User")) ?></label>
|
|
<input type="text" class="form-control" name="smtp_user" value="<?= h(get_setting("smtp_user")) ?>">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr("كلمة مرور SMTP (Pass)", "SMTP Password")) ?></label>
|
|
<input type="password" class="form-control" name="smtp_pass" value="<?= h(get_setting("smtp_pass")) ?>">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr("تشفير SMTP (Secure)", "SMTP Secure (tls/ssl)")) ?></label>
|
|
<select class="form-select" name="smtp_secure">
|
|
<option value="tls" <?= get_setting("smtp_secure", "tls") === "tls" ? "selected" : "" ?>>TLS</option>
|
|
<option value="ssl" <?= get_setting("smtp_secure") === "ssl" ? "selected" : "" ?>>SSL</option>
|
|
<option value="" <?= get_setting("smtp_secure") === "" ? "selected" : "" ?>>None</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><?= h(tr("البريد المرسل (From Email)", "From Email")) ?></label>
|
|
<input type="email" class="form-control" name="mail_from" value="<?= h(get_setting("mail_from")) ?>">
|
|
</div>
|
|
<div class="col-md-12">
|
|
<label class="form-label"><?= h(tr("اسم المرسل (From Name)", "From Name")) ?></label>
|
|
<input type="text" class="form-control" name="mail_from_name" value="<?= h(get_setting("mail_from_name")) ?>">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= h(tr('إلغاء', 'Cancel')) ?></button>
|
|
<button type="submit" class="btn btn-primary"><?= h(tr('حفظ التغييرات', 'Save Changes')) ?></button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|