{!! Form::label('permissions', __('التصريحات') . ':', ['class' => 'mb-3']) !!}
@php
// Define permission categories based on the actual system structure
$permissionCategories = [
'المستخدمين' => ['users', 'user', 'Admin', 'Owner'],
'الأدوار' => ['roles', 'role'],
'المحفظة' => [
'wallet',
'tblHostHistoryWalletInvoices',
'tblHostWalletInvoices',
'userWallets',
'attemptChargeWallets',
],
'الدفع' => [
'payment',
'transactions',
'transfers',
'tblTransactions',
'paymentMethods',
'paymentComssions',
],
'الكروت' => ['vouchers', 'voucher', 'categoryVouchers', 'tblusedvoucher', 'voucher-wallet'],
'المرافق' => ['facility', 'amenity', 'tblPropertyFacilityCategories', 'tblPropertyAmenityCategories'],
'الخدمات' => ['services', 'serviceTypes'],
'الإشتراكات' => ['subscriptions', 'subscription'],
'الإعدادات' => ['settings', 'setting'],
'المناديب' => ['representatives', 'representative'],
'العقارات' => [
'property',
'apartment',
'chalet',
'resort',
'hotel',
'tblPropertyResorts',
'tblPropertyDetails',
'tblChaletSizes',
'tblCities',
'tblZones',
],
'الحجوزات' => [
'booking',
'reservation',
'tblBookingResorts',
'deleteBooking',
'getchalet-by-resort',
'create-chalet-by-resort',
'حجز',
'حجوزات',
'عرض حجوزات',
'إضافة حجز',
'عرض حجز',
'تعديل حجز',
'مسح حجز',
'مسح حجز منتجع',
'BookingResorts',
'delete',
'Booking',
],
'التقارير' => ['reports', 'report', 'analytics', 'activity-logs'],
'عام' => ['home', 'dashboard', 'sendnotification'],
];
// Group permissions by category
$groupedPermissions = [];
foreach ($permissions as $permission) {
$categoryFound = false;
// Check if permission belongs to any defined category
foreach ($permissionCategories as $categoryName => $keywords) {
foreach ($keywords as $keyword) {
if (
stripos($permission->name, $keyword) !== false ||
stripos($permission->display_name, $keyword) !== false
) {
if (!isset($groupedPermissions[$categoryName])) {
$groupedPermissions[$categoryName] = collect();
}
$groupedPermissions[$categoryName]->push($permission);
$categoryFound = true;
break 2;
}
}
}
// If no category found, add to general
if (!$categoryFound) {
if (!isset($groupedPermissions['عام'])) {
$groupedPermissions['عام'] = collect();
}
$groupedPermissions['عام']->push($permission);
}
}
// Debug: Check where booking permissions ended up
$debugBooking = collect($permissions)->filter(function ($p) {
return stripos($p->name, 'Booking') !== false ||
stripos($p->display_name, 'حجز') !== false ||
stripos($p->display_name, 'حجوزات') !== false;
});
// Force all booking-related permissions into الحجوزات category
if ($debugBooking->count() > 0) {
if (!isset($groupedPermissions['الحجوزات'])) {
$groupedPermissions['الحجوزات'] = collect();
}
// Remove any booking permissions from other categories
foreach ($groupedPermissions as $categoryName => $categoryPermissions) {
if ($categoryName !== 'الحجوزات') {
$groupedPermissions[$categoryName] = $categoryPermissions->filter(function ($p) {
return stripos($p->name, 'Booking') === false &&
stripos($p->display_name, 'حجز') === false &&
stripos($p->display_name, 'حجوزات') === false;
});
}
}
// Add all booking permissions to الحجوزات
$groupedPermissions['الحجوزات'] = $debugBooking;
}
// Handle single-permission categories by merging them
$finalGroupedPermissions = [];
$miscPermissions = collect();
// Define categories that should never be moved to miscellaneous
$protectedCategories = ['الحجوزات', 'العقارات', 'المستخدمين', 'الوظائف', 'المحفظة', 'الدفع', 'الكروت'];
foreach ($groupedPermissions as $categoryName => $modulePermissions) {
if ($modulePermissions->count() === 1 && !in_array($categoryName, $protectedCategories)) {
// Add single permissions to miscellaneous (except protected categories)
$miscPermissions = $miscPermissions->merge($modulePermissions);
} else {
$finalGroupedPermissions[$categoryName] = $modulePermissions;
}
}
// Add miscellaneous category if it has permissions
if ($miscPermissions->count() > 0) {
$finalGroupedPermissions['متنوعات'] = $miscPermissions;
}
@endphp
@foreach ($finalGroupedPermissions as $moduleName => $modulePermissions)
@foreach ($modulePermissions as $permission)
@endforeach
@endforeach