Compare commits
4 Commits
8a2166bd78
...
1f8888d31c
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f8888d31c | |||
| 330fc76ed3 | |||
| a627c85416 | |||
| f9f08c7adf |
@@ -146,7 +146,6 @@ class HomePageSettings extends SettingsPage
|
||||
FileUpload::make('bg_video')
|
||||
->label('Background Video')
|
||||
->acceptedFileTypes(['video/mp4', 'video/webm', 'video/ogg'])
|
||||
->maxSize(51200) // 50MB
|
||||
->disk('public')
|
||||
->directory('homepage-videos')
|
||||
->required(),
|
||||
|
||||
110
app/Filament/Resources/ApplicationResource.php
Normal file
110
app/Filament/Resources/ApplicationResource.php
Normal file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Resources\ApplicationResource\Pages;
|
||||
use App\Filament\Resources\ApplicationResource\RelationManagers;
|
||||
use App\Models\Application;
|
||||
use App\Models\Career;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\SoftDeletingScope;
|
||||
|
||||
class ApplicationResource extends Resource
|
||||
{
|
||||
protected static ?string $model = Application::class;
|
||||
|
||||
protected static ?string $navigationGroup = 'Careers';
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-document-text';
|
||||
|
||||
public static function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Select::make('career_id')
|
||||
->label('Career')
|
||||
->options(Career::all()->pluck('title', 'id'))
|
||||
->searchable()
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('name')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
Forms\Components\DatePicker::make('birthdate')
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('email')
|
||||
->email()
|
||||
->required()
|
||||
->maxLength(255),
|
||||
Forms\Components\TextInput::make('phone_number')
|
||||
->maxLength(255),
|
||||
Forms\Components\FileUpload::make('resume_file')
|
||||
->required()
|
||||
->disk('public')
|
||||
->directory('resumes')
|
||||
->enableDownload()
|
||||
->enableOpen(),
|
||||
Forms\Components\RichEditor::make('cover_letter')
|
||||
->columnSpan('full'),
|
||||
]);
|
||||
}
|
||||
|
||||
public static function table(Table $table): Table
|
||||
{
|
||||
return $table
|
||||
->columns([
|
||||
Tables\Columns\TextColumn::make('career.title')
|
||||
->searchable()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('name')
|
||||
->searchable(),
|
||||
Tables\Columns\TextColumn::make('email')
|
||||
->searchable(),
|
||||
Tables\Columns\TextColumn::make('phone_number')
|
||||
->searchable(),
|
||||
Tables\Columns\TextColumn::make('birthdate')
|
||||
->date()
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('created_at')
|
||||
->dateTime()
|
||||
->sortable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
Tables\Columns\TextColumn::make('updated_at')
|
||||
->dateTime()
|
||||
->sortable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
])
|
||||
->filters([
|
||||
//
|
||||
])
|
||||
->actions([
|
||||
Tables\Actions\EditAction::make(),
|
||||
Tables\Actions\DeleteAction::make(),
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
public static function getRelations(): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
public static function getPages(): array
|
||||
{
|
||||
return [
|
||||
'index' => Pages\ListApplications::route('/'),
|
||||
'create' => Pages\CreateApplication::route('/create'),
|
||||
'edit' => Pages\EditApplication::route('/{record}/edit'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\ApplicationResource\Pages;
|
||||
|
||||
use App\Filament\Resources\ApplicationResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
|
||||
class CreateApplication extends CreateRecord
|
||||
{
|
||||
protected static string $resource = ApplicationResource::class;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\ApplicationResource\Pages;
|
||||
|
||||
use App\Filament\Resources\ApplicationResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\EditRecord;
|
||||
|
||||
class EditApplication extends EditRecord
|
||||
{
|
||||
protected static string $resource = ApplicationResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\DeleteAction::make(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\ApplicationResource\Pages;
|
||||
|
||||
use App\Filament\Resources\ApplicationResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
|
||||
class ListApplications extends ListRecords
|
||||
{
|
||||
protected static string $resource = ApplicationResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\CreateAction::make(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -47,6 +47,10 @@ class CareerResource extends Resource
|
||||
->numeric()
|
||||
->label('Salary per month')
|
||||
->maxLength(255),
|
||||
Forms\Components\Select::make('salary_currency')
|
||||
->options(getCurrencies())
|
||||
->required()
|
||||
->label('Salary currency'),
|
||||
Repeater::make('bullets')
|
||||
->schema([
|
||||
TextInput::make('bullet')
|
||||
@@ -71,6 +75,9 @@ class CareerResource extends Resource
|
||||
Tables\Columns\TextColumn::make('salary_per_month')
|
||||
->searchable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
Tables\Columns\TextColumn::make('salary_currency')
|
||||
->searchable()
|
||||
->toggleable(isToggledHiddenByDefault: true),
|
||||
Tables\Columns\TextColumn::make('location')
|
||||
->searchable(),
|
||||
Tables\Columns\TextColumn::make('salary')
|
||||
|
||||
@@ -16,3 +16,165 @@ function logDB(): void
|
||||
Log::info($query->sql, $query->bindings, $query->time);
|
||||
});
|
||||
}
|
||||
|
||||
function getCurrencies(): array
|
||||
{
|
||||
return [
|
||||
"AED" => "UAE dirham",
|
||||
"AFN" => "Afghan afghani",
|
||||
"ALL" => "Albanian lek",
|
||||
"AMD" => "Armenian dram",
|
||||
"ANG" => "Netherlands Antillean gulden",
|
||||
"AOA" => "Angolan kwanza",
|
||||
"ARS" => "Argentine peso",
|
||||
"AUD" => "Australian dollar",
|
||||
"AWG" => "Aruban florin",
|
||||
"AZN" => "Azerbaijani manat",
|
||||
"BAM" => "Bosnia and Herzegovina konvertibilna marka",
|
||||
"BBD" => "Barbadian dollar",
|
||||
"BDT" => "Bangladeshi taka",
|
||||
"BGN" => "Bulgarian lev",
|
||||
"BHD" => "Bahraini dinar",
|
||||
"BIF" => "Burundi franc",
|
||||
"BMD" => "Bermudian dollar",
|
||||
"BND" => "Brunei dollar",
|
||||
"BOB" => "Bolivian boliviano",
|
||||
"BRL" => "Brazilian real",
|
||||
"BSD" => "Bahamian dollar",
|
||||
"BTN" => "Bhutanese ngultrum",
|
||||
"BWP" => "Botswana pula",
|
||||
"BYR" => "Belarusian ruble",
|
||||
"BZD" => "Belize dollar",
|
||||
"CAD" => "Canadian dollar",
|
||||
"CDF" => "Congolese franc",
|
||||
"CHF" => "Swiss franc",
|
||||
"CLP" => "Chilean peso",
|
||||
"CNY" => "Chinese/Yuan renminbi",
|
||||
"COP" => "Colombian peso",
|
||||
"CRC" => "Costa Rican colon",
|
||||
"CUC" => "Cuban peso",
|
||||
"CVE" => "Cape Verdean escudo",
|
||||
"CZK" => "Czech koruna",
|
||||
"DJF" => "Djiboutian franc",
|
||||
"DKK" => "Danish krone",
|
||||
"DOP" => "Dominican peso",
|
||||
"DZD" => "Algerian dinar",
|
||||
"EEK" => "Estonian kroon",
|
||||
"EGP" => "Egyptian pound",
|
||||
"ERN" => "Eritrean nakfa",
|
||||
"ETB" => "Ethiopian birr",
|
||||
"EUR" => "European Euro",
|
||||
"FJD" => "Fijian dollar",
|
||||
"FKP" => "Falkland Islands pound",
|
||||
"GBP" => "British pound",
|
||||
"GEL" => "Georgian lari",
|
||||
"GHS" => "Ghanaian cedi",
|
||||
"GIP" => "Gibraltar pound",
|
||||
"GMD" => "Gambian dalasi",
|
||||
"GNF" => "Guinean franc",
|
||||
"GQE" => "Central African CFA franc",
|
||||
"GTQ" => "Guatemalan quetzal",
|
||||
"GYD" => "Guyanese dollar",
|
||||
"HKD" => "Hong Kong dollar",
|
||||
"HNL" => "Honduran lempira",
|
||||
"HRK" => "Croatian kuna",
|
||||
"HTG" => "Haitian gourde",
|
||||
"HUF" => "Hungarian forint",
|
||||
"IDR" => "Indonesian rupiah",
|
||||
"ILS" => "Israeli new sheqel",
|
||||
"INR" => "Indian rupee",
|
||||
"IQD" => "Iraqi dinar",
|
||||
"IRR" => "Iranian rial",
|
||||
"ISK" => "Icelandic króna",
|
||||
"JMD" => "Jamaican dollar",
|
||||
"JOD" => "Jordanian dinar",
|
||||
"JPY" => "Japanese yen",
|
||||
"KES" => "Kenyan shilling",
|
||||
"KGS" => "Kyrgyzstani som",
|
||||
"KHR" => "Cambodian riel",
|
||||
"KMF" => "Comorian franc",
|
||||
"KPW" => "North Korean won",
|
||||
"KRW" => "South Korean won",
|
||||
"KWD" => "Kuwaiti dinar",
|
||||
"KYD" => "Cayman Islands dollar",
|
||||
"KZT" => "Kazakhstani tenge",
|
||||
"LAK" => "Lao kip",
|
||||
"LBP" => "Lebanese lira",
|
||||
"LKR" => "Sri Lankan rupee",
|
||||
"LRD" => "Liberian dollar",
|
||||
"LSL" => "Lesotho loti",
|
||||
"LTL" => "Lithuanian litas",
|
||||
"LVL" => "Latvian lats",
|
||||
"LYD" => "Libyan dinar",
|
||||
"MAD" => "Moroccan dirham",
|
||||
"MDL" => "Moldovan leu",
|
||||
"MGA" => "Malagasy ariary",
|
||||
"MKD" => "Macedonian denar",
|
||||
"MMK" => "Myanma kyat",
|
||||
"MNT" => "Mongolian tugrik",
|
||||
"MOP" => "Macanese pataca",
|
||||
"MRO" => "Mauritanian ouguiya",
|
||||
"MUR" => "Mauritian rupee",
|
||||
"MVR" => "Maldivian rufiyaa",
|
||||
"MWK" => "Malawian kwacha",
|
||||
"MXN" => "Mexican peso",
|
||||
"MYR" => "Malaysian ringgit",
|
||||
"MZM" => "Mozambican metical",
|
||||
"NAD" => "Namibian dollar",
|
||||
"NGN" => "Nigerian naira",
|
||||
"NIO" => "Nicaraguan córdoba",
|
||||
"NOK" => "Norwegian krone",
|
||||
"NPR" => "Nepalese rupee",
|
||||
"NZD" => "New Zealand dollar",
|
||||
"OMR" => "Omani rial",
|
||||
"PAB" => "Panamanian balboa",
|
||||
"PEN" => "Peruvian nuevo sol",
|
||||
"PGK" => "Papua New Guinean kina",
|
||||
"PHP" => "Philippine peso",
|
||||
"PKR" => "Pakistani rupee",
|
||||
"PLN" => "Polish zloty",
|
||||
"PYG" => "Paraguayan guarani",
|
||||
"QAR" => "Qatari riyal",
|
||||
"RON" => "Romanian leu",
|
||||
"RSD" => "Serbian dinar",
|
||||
"RUB" => "Russian ruble",
|
||||
"SAR" => "Saudi riyal",
|
||||
"SBD" => "Solomon Islands dollar",
|
||||
"SCR" => "Seychellois rupee",
|
||||
"SDG" => "Sudanese pound",
|
||||
"SEK" => "Swedish krona",
|
||||
"SGD" => "Singapore dollar",
|
||||
"SHP" => "Saint Helena pound",
|
||||
"SLL" => "Sierra Leonean leone",
|
||||
"SOS" => "Somali shilling",
|
||||
"SRD" => "Surinamese dollar",
|
||||
"SYP" => "Syrian pound",
|
||||
"SZL" => "Swazi lilangeni",
|
||||
"THB" => "Thai baht",
|
||||
"TJS" => "Tajikistani somoni",
|
||||
"TMT" => "Turkmen manat",
|
||||
"TND" => "Tunisian dinar",
|
||||
"TRY" => "Turkish new lira",
|
||||
"TTD" => "Trinidad and Tobago dollar",
|
||||
"TWD" => "New Taiwan dollar",
|
||||
"TZS" => "Tanzanian shilling",
|
||||
"UAH" => "Ukrainian hryvnia",
|
||||
"UGX" => "Ugandan shilling",
|
||||
"USD" => "United States dollar",
|
||||
"UYU" => "Uruguayan peso",
|
||||
"UZS" => "Uzbekistani som",
|
||||
"VEB" => "Venezuelan bolivar",
|
||||
"VND" => "Vietnamese dong",
|
||||
"VUV" => "Vanuatu vatu",
|
||||
"WST" => "Samoan tala",
|
||||
"XAF" => "Central African CFA franc",
|
||||
"XCD" => "East Caribbean dollar",
|
||||
"XDR" => "Special Drawing Rights",
|
||||
"XOF" => "West African CFA franc",
|
||||
"XPF" => "CFP franc",
|
||||
"YER" => "Yemeni rial",
|
||||
"ZAR" => "South African rand",
|
||||
"ZMK" => "Zambian kwacha",
|
||||
"ZWR" => "Zimbabwean dollar",
|
||||
];
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class ApplicationController extends Controller
|
||||
'birthdate' => 'required|date',
|
||||
'resume_file' => 'required|file|mimes:pdf,doc,docx|max:2048',
|
||||
'email' => 'required|email|max:255',
|
||||
'phone_number' => 'required|string|max:20',
|
||||
'phone_number' => 'required|string',
|
||||
'cover_letter' => 'nullable|string',
|
||||
]);
|
||||
|
||||
@@ -31,6 +31,8 @@ class ApplicationController extends Controller
|
||||
'cover_letter' => $validatedData['cover_letter'] ?? null,
|
||||
]);
|
||||
|
||||
return back()->with('success', 'Your application has been submitted successfully!');
|
||||
return response()->json([
|
||||
'message' => 'Your application has been submitted successfully!',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ class Career extends Model
|
||||
'salary_per_month',
|
||||
'bullets',
|
||||
'location',
|
||||
'salary_currency',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Providers\Filament;
|
||||
|
||||
use App\Filament\Pages\HomePageSettings;
|
||||
use App\Filament\Pages\ManageCtaSettings;
|
||||
use App\Filament\Resources\ApplicationResource;
|
||||
use Filament\Http\Middleware\Authenticate;
|
||||
use Filament\Http\Middleware\DisableBladeIconComponents;
|
||||
use Filament\Http\Middleware\DispatchServingFilamentEvent;
|
||||
@@ -60,6 +61,7 @@ class PanelPanelProvider extends PanelProvider
|
||||
])
|
||||
->resources([
|
||||
config('filament-logger.activity_resource'),
|
||||
ApplicationResource::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('careers', function (Blueprint $table) {
|
||||
$table->string('salary_currency')->nullable()->after('salary_per_month');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('careers', function (Blueprint $table) {
|
||||
$table->dropColumn('salary_currency');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -4,3 +4,4 @@
|
||||
<meta name="keywords" content="{{ $settings->tagline }}">
|
||||
<meta name="author" content="Webulgam">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
<div class="price__area-item-price">
|
||||
<span>{{ $career->title }}</span>
|
||||
<h3>{{ $career->location }}</h3>
|
||||
<h2>{{ $career->salary_per_month }}<span>/Per monthly</span></h2>
|
||||
<h2>{{ $career->salary_per_month }} {{ $career->salary_currency }}</h2>
|
||||
<span>Per monthly</span>
|
||||
</div>
|
||||
<div class="price__area-item-list">
|
||||
<ul>
|
||||
@@ -79,22 +80,22 @@
|
||||
<input type="text" class="form-control" id="name" name="name" required>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="birthdate" class="form-label">Birthdate</label>
|
||||
<label for="birthdate" class="form-label">Birthdate <span> *</span></label>
|
||||
<input type="date" class="form-control" id="birthdate" name="birthdate" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<label for="email" class="form-label">Email <span> *</span></label>
|
||||
<input type="email" class="form-control" id="email" name="email" required>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="phone_number" class="form-label">Phone Number</label>
|
||||
<label for="phone_number" class="form-label">Phone Number <span> *</span></label>
|
||||
<input type="text" class="form-control" id="phone_number" name="phone_number" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="resume_file" class="form-label">Resume (PDF, DOC, DOCX)</label>
|
||||
<label for="resume_file" class="form-label">Resume (PDF, DOC, DOCX) <span> *</span></label>
|
||||
<input type="file" class="form-control" id="resume_file" name="resume_file" accept=".pdf,.doc,.docx" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
@@ -146,12 +147,13 @@
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
|
||||
}
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
if (data.message) {
|
||||
alert(data.message);
|
||||
var modal = bootstrap.Modal.getInstance(applicationModal);
|
||||
modal.hide();
|
||||
|
||||
Reference in New Issue
Block a user