OwlCyberSecurity - MANAGER
Edit File: CrawlerProductResource.php
<?php namespace App\Filament\Resources; use App\Filament\Resources\CrawlerProductResource\Pages; use App\Filament\Resources\CrawlerProductResource\RelationManagers; use App\Models\CrawlerProduct; use App\Models\Invoice; use Filament\Forms; use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Support\RawJs; use Filament\Tables; use Filament\Tables\Actions\Action; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\Filter; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor; class CrawlerProductResource extends Resource { protected static ?string $model = CrawlerProduct::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; protected static ?string $modelLabel = 'محصول آمازون'; protected static ?string $pluralModelLabel = 'محصولات آمازون'; protected static ?string $slug = 'crawler-product'; protected static ?string $navigationGroup = 'فروشگاه'; protected static ?int $navigationSort = 6; public static function getEloquentQuery(): Builder { // CrawlerProduct::query()->update([ // 'seo_index' => 1, // 'seo_follow' => 1, // ]); return parent::getEloquentQuery()->where('view_count', '>', 0); } public static function form(Form $form): Form { return $form ->schema([ Grid::make(3)->schema([ Grid::make(1)->schema([ Grid::make(1)->schema([ TextInput::make('title_fa')->label('عنوان ترجمه شده')->unique(ignoreRecord: true)->maxLength(255)->required(), ]), Section::make()->schema([ TinyEditor::make('description_fa')->label('توضیحات فارسی')->fileAttachmentsDisk('public')->fileAttachmentsVisibility('public')->fileAttachmentsDirectory('uploads')->required(), ]), ])->columnSpan(2), Section::make()->schema([ Toggle::make('is_banned')->label('کالای ممنوعه')->required(), Toggle::make('is_show')->label(' نمایش داده شود')->required(), Toggle::make('is_charsooq')->label('موجود در چارسوق')->required(), Toggle::make('seo_index')->label('index')->required(), Toggle::make('seo_follow')->label('follow')->required(), TextInput::make('code')->label('کد محصول')->unique(ignoreRecord: true)->maxLength(255), TextInput::make('count')->label('تعداد موجودی')->numeric(), TextInput::make('price_irr')->label('قیمت (ریال)')->minValue(0)->mask(RawJs::make('$money($input)')) ->dehydrateStateUsing(fn(string $state): string => preg_replace("/[^0-9]/", "", $state))->required(), TextInput::make('min_delivery_period')->label('حداقل زمان تحویل (روز)')->numeric(), TextInput::make('max_delivery_period')->label('حداکثر زمان تحویل ( روز)')->numeric(), ])->columnSpan(1), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ // TextColumn::make('_id')->label('آی دی'), TextColumn::make('website')->label('فروشگاه'), TextColumn::make('asin')->label('کد')->copyable(), TextColumn::make('title')->label('عنوان')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('title_fa')->label('عنوان ترجمه شده')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('price')->label('قیمت (ریال)'), TextColumn::make('exchange_name')->label('واحد قیمت'), TextColumn::make('price_saving')->label('تخفیف')->sortable(), TextColumn::make('weight')->label('وزن')->sortable(), TextColumn::make('weight_unit')->label('واحد وزن'), TextColumn::make('view_count')->label('تعداد بازدید')->sortable(), TextColumn::make('url')->label('لینک')->copyable()->toggleable(isToggledHiddenByDefault: true), IconColumn::make('is_charsooq')->label('موجود در چارسوق')->boolean(), TextColumn::make('code')->label('کد محصول')->searchable()->toggleable(isToggledHiddenByDefault: true), TextColumn::make('count')->label('تعداد موجودی ')->searchable()->toggleable(isToggledHiddenByDefault: true), TextColumn::make('price_irr')->label('قیمت (ریال)')->searchable()->toggleable(isToggledHiddenByDefault: true), IconColumn::make('is_show')->label('نمایش در سایت')->boolean(), IconColumn::make('is_banned')->label('کالای ممنوعه')->boolean()->toggleable(isToggledHiddenByDefault: true), IconColumn::make('seo_index')->label('index')->boolean()->toggleable(isToggledHiddenByDefault: true), IconColumn::make('seo_follow')->label('follow')->boolean()->toggleable(isToggledHiddenByDefault: true), TextColumn::make('created_at')->label('ایجاد در')->dateTime(), TextColumn::make('updated_at')->label('بروزرسانی در')->dateTime(), ]) ->filters([ Filter::make('asin')->form([ TextInput::make('asin')->label('کد'), ])->query(fn(Builder $query, array $data): Builder => $query->when( $data['asin'], fn(Builder $query, $data): Builder => $query->where('asin', 'like', '%' . $data . '%') )), Filter::make('url')->form([ TextInput::make('url')->label('لینک'), ])->query(fn(Builder $query, array $data): Builder => $query->when( $data['url'], fn(Builder $query, $data): Builder => $query->where('url', 'like', '%' . $data . '%') )), Filter::make('title')->form([ TextInput::make('title')->label('عنوان'), ])->query(fn(Builder $query, array $data): Builder => $query->when( $data['title'], fn(Builder $query, $data): Builder => $query->where('title', 'like', '%' . $data . '%') )), SelectFilter::make('banned')->label('کالای ممنوعه')->form([ Select::make('is_banned')->label('کالای ممنوعه')->options(['1' => 'بله']), ])->query(fn(Builder $query, $data): Builder => $query->when( $data['is_banned'], function (Builder $query, $date) { if ($date == '1') return $query->where('is_banned', '=', true); }, )), SelectFilter::make('charsooq')->label('موجود در چارسوق')->form([ Select::make('is_charsooq')->label('موجود در چارسوق')->options(['1' => 'بله']), ])->query(fn(Builder $query, $data): Builder => $query->when( $data['is_charsooq'], function (Builder $query, $date) { if ($date == '1') return $query->where('is_charsooq', '=', true); }, )), ]) ->actions([ Tables\Actions\EditAction::make(), Action::make('link_view_site')->label('نمایش در سایت')->color('primary')->icon('heroicon-o-currency-dollar') ->url(fn(CrawlerProduct $item) => config('app.front_url') . "/product/" . "{$item->asin}") ->openUrlInNewTab() ->icon('heroicon-o-link') ->color('primary'), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ // Tables\Actions\DeleteBulkAction::make(), ]), ])->defaultSort('created_at', 'desc'); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListCrawlerProducts::route('/'), 'edit' => Pages\EditCrawlerProduct::route('/{record}/edit'), ]; } public static function canViewAny(): bool { return auth()->user()->can('crawler_product::view'); } }