Compare commits
9 Commits
2b04b84624
...
a10bdd20fa
| Author | SHA1 | Date | |
|---|---|---|---|
| a10bdd20fa | |||
| 05731b3670 | |||
| 9f9047a656 | |||
| 34f8066009 | |||
| 8878e1106c | |||
| 4769a8d99d | |||
| cae482535f | |||
| c6919bcead | |||
| a31375a20f |
@@ -3,9 +3,81 @@
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\TravelTypeStoreRequest;
|
||||
use App\Http\Requests\TravelTypeUpdateRequest;
|
||||
use App\Models\TravelType;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TravelTypeController extends Controller
|
||||
{
|
||||
/**
|
||||
* لیست + جستجو + صفحهبندی انواع سفر
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
abort_unless(auth('admin')->user()->canManageTravelTypes('view'), 403);
|
||||
|
||||
$query = TravelType::query();
|
||||
|
||||
// جستجو بر اساس عنوان / اسلاگ
|
||||
if ($request->filled('search')) {
|
||||
$query->where(function ($q) use ($request) {
|
||||
$q->where('title', 'like', '%' . $request->search . '%')
|
||||
->orWhere('slug', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
}
|
||||
|
||||
// فیلتر وضعیت (1=فعال، 0=غیرفعال)
|
||||
if ($request->filled('status')) {
|
||||
$query->where('status', $request->status);
|
||||
}
|
||||
|
||||
$travelTypes = $query->latest()->paginate(10)->withQueryString();
|
||||
|
||||
return view('admin.travel_types.index', compact('travelTypes'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
abort_unless(auth('admin')->user()->canManageTravelTypes('create'), 403);
|
||||
|
||||
return view('admin.travel_types.create');
|
||||
}
|
||||
|
||||
public function store(TravelTypeStoreRequest $request)
|
||||
{
|
||||
abort_unless(auth('admin')->user()->canManageTravelTypes('create'), 403);
|
||||
|
||||
TravelType::create($request->validated());
|
||||
|
||||
return redirect()->route('admin.travelTypes.index')
|
||||
->with('success', 'نوع سفر با موفقیت ثبت شد.');
|
||||
}
|
||||
|
||||
public function edit(TravelType $travelType)
|
||||
{
|
||||
abort_unless(auth('admin')->user()->canManageTravelTypes('edit'), 403);
|
||||
|
||||
return view('admin.travel_types.edit', compact('travelType'));
|
||||
}
|
||||
|
||||
public function update(TravelTypeUpdateRequest $request, TravelType $travelType)
|
||||
{
|
||||
abort_unless(auth('admin')->user()->canManageTravelTypes('edit'), 403);
|
||||
|
||||
$travelType->update($request->validated());
|
||||
|
||||
return redirect()->route('admin.travelTypes.index')
|
||||
->with('success', 'نوع سفر با موفقیت ویرایش شد.');
|
||||
}
|
||||
|
||||
public function destroy(TravelType $travelType)
|
||||
{
|
||||
abort_unless(auth('admin')->user()->canManageTravelTypes('delete'), 403);
|
||||
|
||||
$travelType->delete();
|
||||
|
||||
return redirect()->route('admin.travelTypes.index')
|
||||
->with('success', 'نوع سفر با موفقیت حذف شد.');
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -12,7 +12,8 @@
|
||||
"php": "^8.2",
|
||||
"hekmatinasser/verta": "^9.0",
|
||||
"laravel/framework": "^12.0",
|
||||
"laravel/tinker": "^2.10.1"
|
||||
"laravel/tinker": "^2.10.1",
|
||||
"maatwebsite/excel": "^4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
|
||||
@@ -0,0 +1,376 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.2.3
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Host: 127.0.0.1:3308
|
||||
-- Generation Time: Aug 17, 2026 at 04:32 PM
|
||||
-- Server version: 8.4.7
|
||||
-- PHP Version: 8.3.28
|
||||
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
|
||||
--
|
||||
-- Database: `airline_agency`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `admins`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admins`;
|
||||
CREATE TABLE IF NOT EXISTS `admins` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`full_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`username` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`status` tinyint UNSIGNED NOT NULL DEFAULT '1' COMMENT '0:disable 1:enable',
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `admins`
|
||||
--
|
||||
|
||||
INSERT INTO `admins` (`id`, `full_name`, `username`, `email`, `mobile`, `password`, `status`, `created_at`, `updated_at`) VALUES
|
||||
(2, 'شهرزاد زندی', 'shahrzad', 'shahrzad.zandi@gmail.com', '09359359350', '$2y$12$KpHLJK1kIz/TxVUOn4FV7udVA3xGLLDtEknPZyfh13Z2WPkRmHwni', 1, '2026-08-17 07:24:19', '2026-08-17 07:24:19'),
|
||||
(3, 'مدیر سیستم', 'admin', 'admin@gmail.com', '09123456789', '$2y$12$ElsUA1CqyK6euG6adWhXRuayR/Jzcq1zH28eoN3ypfeVrmTIr/zAe', 1, '2026-08-17 07:44:25', '2026-08-17 09:12:14');
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `admin_permission`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin_permission`;
|
||||
CREATE TABLE IF NOT EXISTS `admin_permission` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`admin_id` bigint UNSIGNED NOT NULL,
|
||||
`permission_id` bigint UNSIGNED NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `fk1_admin_permission` (`permission_id`),
|
||||
KEY `fk2_admin_permission` (`admin_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `airports`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `airports`;
|
||||
CREATE TABLE IF NOT EXISTS `airports` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`city` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`country` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`code` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `comments`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `comments`;
|
||||
CREATE TABLE IF NOT EXISTS `comments` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`user_id` bigint UNSIGNED NOT NULL,
|
||||
`commentable_id` bigint UNSIGNED NOT NULL,
|
||||
`commentable_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`body` text COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`status` tinyint UNSIGNED NOT NULL DEFAULT '0',
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `fk1_ comments` (`user_id`),
|
||||
KEY `fk2_ comments` (`commentable_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `favorites`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `favorites`;
|
||||
CREATE TABLE IF NOT EXISTS `favorites` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`user_id` bigint UNSIGNED NOT NULL,
|
||||
`favoritable_id` bigint UNSIGNED NOT NULL,
|
||||
`favoritable_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `fk1_favorites` (`user_id`),
|
||||
KEY `fk2_favorites` (`favoritable_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `files`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `files`;
|
||||
CREATE TABLE IF NOT EXISTS `files` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`fileable_id` bigint DEFAULT NULL,
|
||||
`fileable_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`extension` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`size` bigint UNSIGNED NOT NULL,
|
||||
`original_name` varchar(350) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`path` varchar(300) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `flights`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `flights`;
|
||||
CREATE TABLE IF NOT EXISTS `flights` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`travel_type_id` bigint UNSIGNED NOT NULL,
|
||||
`flight_number` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`airline_name` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`origin` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`destination` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`departure_date` date NOT NULL,
|
||||
`departure_time` time NOT NULL,
|
||||
`arrival_date` date NOT NULL,
|
||||
`arrival_time` time NOT NULL,
|
||||
`duration` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`price` decimal(12,2) NOT NULL,
|
||||
`capacity` int UNSIGNED NOT NULL,
|
||||
`status` tinyint NOT NULL DEFAULT '1',
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `flights`
|
||||
--
|
||||
|
||||
INSERT INTO `flights` (`id`, `travel_type_id`, `flight_number`, `airline_name`, `origin`, `destination`, `departure_date`, `departure_time`, `arrival_date`, `arrival_time`, `duration`, `price`, `capacity`, `status`, `created_at`, `updated_at`) VALUES
|
||||
(1, 2, 'IR-725', 'ایران ایر', 'تهران', 'مشهد', '1405-06-03', '14:30:00', '1405-06-03', '16:00:00', '1 ساعت و 30 دقیقه', 2500000.00, 180, 0, '2026-08-17 13:52:44', '2026-08-17 13:56:00'),
|
||||
(2, 3, 'TK-182', 'ترکیش ایرلاینز', 'تهران', 'استانبول', '2026-08-28', '20:00:00', '2026-08-29', '07:31:00', '11 ساعت و 31', 18500000.00, 220, 1, '2026-08-17 14:01:19', '2026-08-17 14:01:19'),
|
||||
(3, 4, 'CH-401', 'وارش', 'تهران', 'کیش', '2026-09-01', '10:30:00', '2026-09-01', '20:33:00', '10 ساعت و3 دقیقه', 4200000.00, 160, 1, '2026-08-17 14:04:34', '2026-08-17 14:04:34');
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `payments`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `payments`;
|
||||
CREATE TABLE IF NOT EXISTS `payments` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`user_id` bigint UNSIGNED NOT NULL,
|
||||
`payable_id` bigint UNSIGNED NOT NULL,
|
||||
`amount` decimal(12,2) NOT NULL,
|
||||
`authority` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`transaction_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`status` tinyint NOT NULL COMMENT 'pending:0 | success:1| failed:2 | canceled:3',
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `permissions`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `permissions`;
|
||||
CREATE TABLE IF NOT EXISTS `permissions` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`slug` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`description` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `slug` (`slug`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `settings`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `settings`;
|
||||
CREATE TABLE IF NOT EXISTS `settings` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`code` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`value` text COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `tours`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tours`;
|
||||
CREATE TABLE IF NOT EXISTS `tours` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`travel_type_id` bigint UNSIGNED NOT NULL,
|
||||
`title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`slug` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`image` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`description` text COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`duration` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`start_date` date NOT NULL,
|
||||
`end_date` date NOT NULL,
|
||||
`price` decimal(12,2) NOT NULL,
|
||||
`capacity` int UNSIGNED NOT NULL,
|
||||
`status` tinyint UNSIGNED NOT NULL DEFAULT '1',
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `fk1_tours` (`travel_type_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `tour_flights`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tour_flights`;
|
||||
CREATE TABLE IF NOT EXISTS `tour_flights` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`tour_id` bigint UNSIGNED NOT NULL,
|
||||
`flight_id` bigint UNSIGNED NOT NULL,
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `fk1_tour_flights` (`flight_id`),
|
||||
KEY `fk2_tour_flights` (`tour_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `travel_types`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `travel_types`;
|
||||
CREATE TABLE IF NOT EXISTS `travel_types` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`slug` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`status` tinyint UNSIGNED NOT NULL DEFAULT '1',
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `slug` (`slug`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `travel_types`
|
||||
--
|
||||
|
||||
INSERT INTO `travel_types` (`id`, `title`, `slug`, `status`, `created_at`, `updated_at`) VALUES
|
||||
(2, 'تور داخلی', 'domestic-tour', 1, '2026-08-17 11:36:22', '2026-08-17 11:36:22'),
|
||||
(3, 'تور خارجی', 'international-tour', 1, '2026-08-17 11:46:33', '2026-08-17 11:46:33'),
|
||||
(4, 'تور چارتر', 'charter-tour', 1, '2026-08-17 11:46:59', '2026-08-17 11:46:59'),
|
||||
(5, 'تور ترکیبی', 'combined-tour', 1, '2026-08-17 11:47:41', '2026-08-17 11:47:41'),
|
||||
(6, 'پرواز خارجی', 'international-flight', 1, '2026-08-17 11:48:19', '2026-08-17 11:48:19'),
|
||||
(7, 'پرواز داخلی', 'domestic-flight', 1, '2026-08-17 11:48:44', '2026-08-17 11:48:44'),
|
||||
(8, 'تور لحظه آخری', 'last-minute', 1, '2026-08-17 11:49:11', '2026-08-17 11:49:11'),
|
||||
(9, 'پیشنویس نمونه', 'draft-sample', 0, '2026-08-17 11:49:33', '2026-08-17 11:56:13');
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `users`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `users`;
|
||||
CREATE TABLE IF NOT EXISTS `users` (
|
||||
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`first_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`last_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`national_code` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`birth_date` date DEFAULT NULL,
|
||||
`status` tinyint UNSIGNED NOT NULL DEFAULT '1',
|
||||
`created_at` timestamp NOT NULL,
|
||||
`updated_at` timestamp NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
--
|
||||
-- Constraints for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Constraints for table `admin_permission`
|
||||
--
|
||||
ALTER TABLE `admin_permission`
|
||||
ADD CONSTRAINT `fk1_admin_permission` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||
ADD CONSTRAINT `fk2_admin_permission` FOREIGN KEY (`admin_id`) REFERENCES `admins` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Constraints for table `comments`
|
||||
--
|
||||
ALTER TABLE `comments`
|
||||
ADD CONSTRAINT `fk1_ comments` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||
ADD CONSTRAINT `fk2_ comments` FOREIGN KEY (`commentable_id`) REFERENCES `comments` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Constraints for table `favorites`
|
||||
--
|
||||
ALTER TABLE `favorites`
|
||||
ADD CONSTRAINT `fk1_favorites` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||
ADD CONSTRAINT `fk2_favorites` FOREIGN KEY (`favoritable_id`) REFERENCES `favorites` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Constraints for table `tours`
|
||||
--
|
||||
ALTER TABLE `tours`
|
||||
ADD CONSTRAINT `fk1_tours` FOREIGN KEY (`travel_type_id`) REFERENCES `travel_types` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Constraints for table `tour_flights`
|
||||
--
|
||||
ALTER TABLE `tour_flights`
|
||||
ADD CONSTRAINT `fk1_tour_flights` FOREIGN KEY (`flight_id`) REFERENCES `flights` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||
ADD CONSTRAINT `fk2_tour_flights` FOREIGN KEY (`tour_id`) REFERENCES `tours` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- An unexamined life is not worth living. - Socrates -->
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Knowing is not enough; we must apply. Being willing is not enough; we must do. - Leonardo da Vinci -->
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- If you do not have a consistent goal in life, you can not live it in a consistent way. - Marcus Aurelius -->
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Very little is needed to make a happy life. - Marcus Aurelius -->
|
||||
</div>
|
||||
@@ -1,3 +1,308 @@
|
||||
<div>
|
||||
<!-- Nothing worth having comes easy. - Theodore Roosevelt -->
|
||||
</div>
|
||||
@extends('admin.layouts.app')
|
||||
|
||||
@section('title', 'ایجاد مدیر جدید')
|
||||
|
||||
@section('breadcrumb')
|
||||
|
||||
<div>
|
||||
|
||||
<h1 class="page-title fw-medium fs-18 mb-2">
|
||||
ایجاد مدیر جدید
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
|
||||
<ol class="breadcrumb mb-0">
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard.index') }}">
|
||||
داشبورد
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.admins.index') }}">
|
||||
مدیران
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item active">
|
||||
ایجاد مدیر
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container-fluid pt-4">
|
||||
|
||||
<form
|
||||
action="{{ route('admin.admins.store') }}"
|
||||
method="POST"
|
||||
>
|
||||
|
||||
@csrf
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-xl-8">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">
|
||||
اطلاعات مدیر
|
||||
</h5>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<div class="row">
|
||||
|
||||
{{-- نام کامل --}}
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
نام و نام خانوادگی
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="full_name"
|
||||
class="form-control @error('full_name') is-invalid @enderror"
|
||||
value="{{ old('full_name') }}"
|
||||
>
|
||||
|
||||
@error('full_name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- نام کاربری --}}
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
نام کاربری
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="username"
|
||||
class="form-control @error('username') is-invalid @enderror"
|
||||
value="{{ old('username') }}"
|
||||
>
|
||||
|
||||
@error('username')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- ایمیل --}}
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
ایمیل
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="email"
|
||||
name="email"
|
||||
class="form-control @error('email') is-invalid @enderror"
|
||||
value="{{ old('email') }}"
|
||||
>
|
||||
|
||||
@error('email')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- موبایل --}}
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
موبایل
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="mobile"
|
||||
class="form-control @error('mobile') is-invalid @enderror"
|
||||
value="{{ old('mobile') }}"
|
||||
>
|
||||
|
||||
@error('mobile')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- رمز --}}
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
رمز عبور
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="password"
|
||||
name="password"
|
||||
class="form-control @error('password') is-invalid @enderror"
|
||||
>
|
||||
|
||||
@error('password')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- تکرار رمز --}}
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
تکرار رمز عبور
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="password"
|
||||
name="password_confirmation"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- ستون سمت چپ --}}
|
||||
<div class="col-xl-4">
|
||||
|
||||
{{-- وضعیت --}}
|
||||
<div class="card custom-card mb-3">
|
||||
|
||||
<div class="card-header">
|
||||
وضعیت
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<select
|
||||
name="status"
|
||||
class="form-select"
|
||||
>
|
||||
<option value="1">
|
||||
فعال
|
||||
</option>
|
||||
|
||||
<option value="0">
|
||||
غیرفعال
|
||||
</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- دسترسیها --}}
|
||||
<div class="card custom-card mb-3">
|
||||
|
||||
<div class="card-header">
|
||||
دسترسیها
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
@foreach($permissions ?? [] as $permission)
|
||||
|
||||
<div class="form-check mb-2">
|
||||
|
||||
<input
|
||||
class="form-check-input"
|
||||
type="checkbox"
|
||||
name="permissions[]"
|
||||
value="{{ $permission->id }}"
|
||||
>
|
||||
|
||||
<label class="form-check-label">
|
||||
|
||||
{{ $permission->title }}
|
||||
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
@endforeach
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- دکمه ها --}}
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-body d-grid gap-2">
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
>
|
||||
|
||||
<i class="ri-save-line me-1"></i>
|
||||
|
||||
ذخیره مدیر
|
||||
|
||||
</button>
|
||||
|
||||
|
||||
<a
|
||||
href="{{ route('admin.admins.index') }}"
|
||||
class="btn btn-light"
|
||||
>
|
||||
بازگشت
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@@ -1,3 +1,427 @@
|
||||
<div>
|
||||
<!-- He who is contented is rich. - Laozi -->
|
||||
</div>
|
||||
@extends('admin.layouts.app')
|
||||
|
||||
@section('title', 'ویرایش مدیر')
|
||||
|
||||
@section('breadcrumb')
|
||||
|
||||
<div>
|
||||
|
||||
<h1 class="page-title fw-medium fs-18 mb-2">
|
||||
ویرایش مدیر
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
|
||||
<ol class="breadcrumb mb-0">
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
|
||||
<a href="{{ route('admin.dashboard.index') }}">
|
||||
داشبورد
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
|
||||
<a href="{{ route('admin.admins.index') }}">
|
||||
مدیریت مدیران
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item active">
|
||||
ویرایش مدیر
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container-fluid pt-4">
|
||||
|
||||
<form action="{{ route('admin.admins.update', $admin) }}"
|
||||
method="POST">
|
||||
|
||||
@csrf
|
||||
|
||||
@method('PUT')
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
{{-- اطلاعات مدیر --}}
|
||||
|
||||
<div class="col-xl-8">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<div class="card-title">
|
||||
اطلاعات مدیر
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<div class="row gy-3">
|
||||
|
||||
|
||||
{{-- نام --}}
|
||||
|
||||
<div class="col-xl-6">
|
||||
|
||||
<label class="form-label">
|
||||
نام و نام خانوادگی
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input type="text"
|
||||
name="full_name"
|
||||
value="{{ old('full_name', $admin->full_name) }}"
|
||||
class="form-control @error('full_name') is-invalid @enderror"
|
||||
placeholder="نام و نام خانوادگی">
|
||||
|
||||
@error('full_name')
|
||||
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- username --}}
|
||||
|
||||
<div class="col-xl-6">
|
||||
|
||||
<label class="form-label">
|
||||
نام کاربری
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input type="text"
|
||||
name="username"
|
||||
value="{{ old('username', $admin->username) }}"
|
||||
class="form-control @error('username') is-invalid @enderror"
|
||||
placeholder="نام کاربری">
|
||||
|
||||
@error('username')
|
||||
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- email --}}
|
||||
|
||||
<div class="col-xl-6">
|
||||
|
||||
<label class="form-label">
|
||||
ایمیل
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input type="email"
|
||||
name="email"
|
||||
value="{{ old('email', $admin->email) }}"
|
||||
class="form-control @error('email') is-invalid @enderror"
|
||||
placeholder="example@gmail.com"
|
||||
dir="ltr">
|
||||
|
||||
@error('email')
|
||||
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- mobile --}}
|
||||
|
||||
<div class="col-xl-6">
|
||||
|
||||
<label class="form-label">
|
||||
موبایل
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input type="text"
|
||||
name="mobile"
|
||||
value="{{ old('mobile', $admin->mobile) }}"
|
||||
class="form-control @error('mobile') is-invalid @enderror"
|
||||
placeholder="09123456789"
|
||||
dir="ltr">
|
||||
|
||||
@error('mobile')
|
||||
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- password --}}
|
||||
|
||||
<div class="col-xl-6">
|
||||
|
||||
<label class="form-label">
|
||||
رمز عبور جدید
|
||||
</label>
|
||||
|
||||
<input type="password"
|
||||
name="password"
|
||||
class="form-control @error('password') is-invalid @enderror"
|
||||
placeholder="در صورت تغییر وارد کنید">
|
||||
|
||||
<small class="text-muted d-block mt-1">
|
||||
اگر نمیخواهید رمز تغییر کند، این قسمت را خالی بگذارید.
|
||||
</small>
|
||||
|
||||
@error('password')
|
||||
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- password confirmation --}}
|
||||
|
||||
<div class="col-xl-6">
|
||||
|
||||
<label class="form-label">
|
||||
تکرار رمز عبور جدید
|
||||
</label>
|
||||
|
||||
<input type="password"
|
||||
name="password_confirmation"
|
||||
class="form-control"
|
||||
placeholder="تکرار رمز جدید">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- status --}}
|
||||
|
||||
<div class="col-xl-6">
|
||||
|
||||
<label class="form-label">
|
||||
وضعیت
|
||||
</label>
|
||||
|
||||
<select name="status"
|
||||
class="form-select @error('status') is-invalid @enderror">
|
||||
|
||||
<option value="1"
|
||||
@selected(old('status', $admin->status) == 1)>
|
||||
فعال
|
||||
</option>
|
||||
|
||||
<option value="0"
|
||||
@selected(old('status', $admin->status) == 0)>
|
||||
غیرفعال
|
||||
</option>
|
||||
|
||||
</select>
|
||||
|
||||
@error('status')
|
||||
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- دسترسیها --}}
|
||||
|
||||
<div class="col-xl-4">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<div>
|
||||
|
||||
<div class="card-title mb-1">
|
||||
سطح دسترسی
|
||||
</div>
|
||||
|
||||
<small class="text-muted">
|
||||
دسترسیهای مدیر را مدیریت کنید.
|
||||
</small>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
@php
|
||||
|
||||
$selectedPermissions = old(
|
||||
'permissions',
|
||||
$admin->permissions->pluck('id')->toArray()
|
||||
);
|
||||
|
||||
@endphp
|
||||
|
||||
|
||||
@error('permissions')
|
||||
|
||||
<div class="alert alert-danger py-2">
|
||||
{{ $message }}
|
||||
</div>
|
||||
|
||||
@enderror
|
||||
|
||||
|
||||
@forelse($permissions as $permission)
|
||||
|
||||
<div class="form-check form-check-lg mb-3">
|
||||
|
||||
<input class="form-check-input"
|
||||
type="checkbox"
|
||||
name="permissions[]"
|
||||
value="{{ $permission->id }}"
|
||||
id="permission_{{ $permission->id }}"
|
||||
@checked(in_array(
|
||||
$permission->id,
|
||||
$selectedPermissions
|
||||
))>
|
||||
|
||||
<label class="form-check-label"
|
||||
for="permission_{{ $permission->id }}">
|
||||
|
||||
<span class="fw-semibold">
|
||||
{{ $permission->name }}
|
||||
</span>
|
||||
|
||||
@if($permission->description)
|
||||
|
||||
<small class="text-muted d-block mt-1">
|
||||
{{ $permission->description }}
|
||||
</small>
|
||||
|
||||
@endif
|
||||
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
@empty
|
||||
|
||||
<div class="text-center text-muted py-4">
|
||||
|
||||
<i class="ri-shield-keyhole-line fs-2 d-block mb-2"></i>
|
||||
|
||||
هنوز دسترسیای تعریف نشده است.
|
||||
|
||||
</div>
|
||||
|
||||
@endforelse
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- دکمهها --}}
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
|
||||
<div class="text-muted fs-12">
|
||||
|
||||
<i class="ri-information-line me-1"></i>
|
||||
|
||||
آخرین ویرایش:
|
||||
|
||||
@if($admin->updated_at)
|
||||
|
||||
|
||||
<td>{{ $type->updated_at ? $type->updated_at->toJalali()->format('Y/m/d H:i') : '-' }}</td>
|
||||
@else
|
||||
|
||||
-
|
||||
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
|
||||
<a href="{{ route('admin.admins.index') }}"
|
||||
class="btn btn-light">
|
||||
|
||||
انصراف
|
||||
|
||||
</a>
|
||||
|
||||
<button type="submit"
|
||||
class="btn btn-primary">
|
||||
|
||||
<i class="ri-save-line me-1"></i>
|
||||
|
||||
ذخیره تغییرات
|
||||
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user