Последняя версия с сервера прошлого разработчика
This commit is contained in:
106
app/Nova/Comment.php
Executable file
106
app/Nova/Comment.php
Executable file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\HasMany;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class Comment extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Comments\Models\Comment::class;
|
||||
public static $group = 'Content';
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'body';
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id', 'body'
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
BelongsTo::make('Creator', 'user', 'App\Nova\User')
|
||||
->onlyOnIndex(),
|
||||
BelongsTo::make('Feed')
|
||||
->readonly(),
|
||||
Text::make('Body')
|
||||
->displayUsing(function($id) {
|
||||
$part = strip_tags(mb_substr($id, 0, 100));
|
||||
return $part . " ...";
|
||||
})->onlyOnIndex(),
|
||||
BelongsTo::make('Parent', 'parent', \App\Nova\Comment::class),
|
||||
HasMany::make('Children', 'children', \App\Nova\Comment::class),
|
||||
Textarea::make('Body')->alwaysShow()->showOnDetail(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
140
app/Nova/Complaint.php
Executable file
140
app/Nova/Complaint.php
Executable file
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\MorphTo;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class Complaint extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Complaints\Models\Complaint::class;
|
||||
public static $group = 'Complaints';
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'id';
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id',
|
||||
];
|
||||
|
||||
public static function indexQuery(NovaRequest $request, $query)
|
||||
{
|
||||
|
||||
if ($request->user()->hasRole('moderator')) {
|
||||
$resourceRelationship = $request->get('viaResource');
|
||||
if (empty($resourceRelationship)) {
|
||||
return $query->where(function ($query) use ($request) {
|
||||
$query->where('moderator_checking_id', $request->user()->id)->orWhere('moderator_checking_id', null);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static function relatableUsers(NovaRequest $request, $query)
|
||||
{
|
||||
return $query->whereHas('roles', function ($query) {
|
||||
$query->where('name', 'moderator');
|
||||
});
|
||||
}
|
||||
|
||||
public static $with = ['reason', 'user', 'moderator'];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
BelongsTo::make('User')
|
||||
->onlyOnIndex(),
|
||||
BelongsTo::make('Moderator', 'moderator', 'App\Nova\User')
|
||||
//->readonly(optional($this->resource)->user_checking_id !== null)
|
||||
->readonly()
|
||||
->withoutTrashed(),
|
||||
BelongsTo::make('Reason')
|
||||
->readonly(),
|
||||
BelongsTo::make('Feed')
|
||||
->readonly()->sortable(),
|
||||
|
||||
Select::make('Status')->options([
|
||||
'pending' => 'Pending',
|
||||
'reviewed_bad' => 'Reviewed Bad',
|
||||
'reviewed_ok' => 'Reviewed Ok',
|
||||
]),
|
||||
|
||||
Textarea::make('Message')->alwaysShow()->rules('required'),
|
||||
DateTime::make('Created At')->format('DD MMM YYYY')->onlyOnIndex(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
124
app/Nova/ComplaintComment.php
Executable file
124
app/Nova/ComplaintComment.php
Executable file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\MorphTo;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class ComplaintComment extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Complaints\Models\CommentComplaint::class;
|
||||
public static $group = 'Complaints';
|
||||
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'id';
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id',
|
||||
];
|
||||
|
||||
public static function relatableUsers(NovaRequest $request, $query)
|
||||
{
|
||||
return $query->whereHas('roles', function ($query) {
|
||||
$query->where('name', 'moderator');
|
||||
});
|
||||
}
|
||||
|
||||
public static $with = ['reason', 'user', 'moderator'];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
BelongsTo::make('User')
|
||||
->onlyOnIndex(),
|
||||
BelongsTo::make('Moderator', 'moderator', 'App\Nova\User')
|
||||
->readonly()
|
||||
->withoutTrashed(),
|
||||
BelongsTo::make('Reason')
|
||||
->readonly(),
|
||||
BelongsTo::make('Comment')
|
||||
->readonly()->sortable(),
|
||||
|
||||
Select::make('Status')->options([
|
||||
'pending' => 'Pending',
|
||||
'reviewed_bad' => 'Reviewed Bad',
|
||||
'reviewed_ok' => 'Reviewed Ok',
|
||||
]),
|
||||
|
||||
Textarea::make('Message')->alwaysShow()->rules('required'),
|
||||
DateTime::make('Created At')->format('DD MMM YYYY')->onlyOnIndex(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
150
app/Nova/Feed.php
Executable file
150
app/Nova/Feed.php
Executable file
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use App\Domain\Feeds\Enums\StatusEnum;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\HasMany;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Fields\MorphMany;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
use App\Domain\Feeds\Models\Feed as ModelsFeed;
|
||||
use Ebess\AdvancedNovaMediaLibrary\Fields\Files;
|
||||
|
||||
class Feed extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = ModelsFeed::class;
|
||||
public static $group = 'Content';
|
||||
|
||||
// /**
|
||||
// * The single value that should be used to represent the resource when being displayed.
|
||||
// *
|
||||
// * @var string
|
||||
// */
|
||||
// public static $title = 'title';
|
||||
|
||||
/**
|
||||
* Get the value that should be displayed to represent the resource.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function title()
|
||||
{
|
||||
if(empty($this->title)){
|
||||
return $this->id;
|
||||
}
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id', 'title', 'body'
|
||||
];
|
||||
|
||||
public static function indexQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return $query->where('status', 1)->where('is_ads', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
BelongsTo::make('Creator', 'user', 'App\Nova\User')
|
||||
->onlyOnIndex(),
|
||||
Files::make('Media Preview', 'preview')->readonly(),
|
||||
Files::make('Media', 'common')->readonly(),
|
||||
Files::make('Media Paid', 'paid')->readonly(),
|
||||
Text::make('Title'),
|
||||
Text::make('Slug')->readonly(),
|
||||
Select::make('Type')->options([
|
||||
'images' => 'Изображение',
|
||||
'musics' => 'Аудио',
|
||||
'videos' => 'Видео',
|
||||
])->readonly()->displayUsingLabels(),
|
||||
Text::make('Price')->readonly(),
|
||||
Textarea::make('Body')->alwaysShow()->hideFromIndex(),
|
||||
HasMany::make('Comments'),
|
||||
HasMany::make('Complaints'),
|
||||
DateTime::make('Created At')->format('DD MMM YYYY'),
|
||||
DateTime::make('Updated At')->hideFromIndex(),
|
||||
// Select::make('Status')->options([
|
||||
// (string) StatusEnum::PENDING() => 'pending',
|
||||
// (string) StatusEnum::APPROVED() => 'approved',
|
||||
// (string) StatusEnum::BANNED() => 'banned',
|
||||
// (string) StatusEnum::EDITABLE() => 'editable',
|
||||
// ])->displayUsingLabels()->onlyOnIndex()->sortable(),
|
||||
|
||||
// Select::make('Status')->options([
|
||||
// (string) StatusEnum::APPROVED() => 'approved',
|
||||
// (string) StatusEnum::BANNED() => 'banned',
|
||||
// ])->displayUsingLabels()->hideFromIndex()->hideWhenCreating(),
|
||||
|
||||
// Textarea::make('Status Note')->hideWhenCreating(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
126
app/Nova/FeedAds.php
Executable file
126
app/Nova/FeedAds.php
Executable file
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use App\Domain\Feeds\Enums\StatusEnum;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\HasMany;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Fields\MorphMany;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
use App\Domain\Feeds\Models\Feed as ModelsFeed;
|
||||
use Ebess\AdvancedNovaMediaLibrary\Fields\Files;
|
||||
|
||||
class FeedAds extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = ModelsFeed::class;
|
||||
public static $group = 'Content';
|
||||
|
||||
// /**
|
||||
// * The single value that should be used to represent the resource when being displayed.
|
||||
// *
|
||||
// * @var string
|
||||
// */
|
||||
// public static $title = 'title';
|
||||
|
||||
/**
|
||||
* Get the value that should be displayed to represent the resource.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function title()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id', 'title', 'body'
|
||||
];
|
||||
|
||||
public static function indexQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return $query->where('is_ads', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
Files::make('Media Preview', 'preview'),
|
||||
Files::make('Media', 'common'),
|
||||
Text::make('Title')->rules('required'),
|
||||
Select::make('Type')->options([
|
||||
'images' => 'Изображение',
|
||||
// 'musics' => 'Аудио',
|
||||
'videos' => 'Видео',
|
||||
])->displayUsingLabels()->rules('required'),
|
||||
Textarea::make('Body')->rules('required')->alwaysShow()->hideFromIndex(),
|
||||
DateTime::make('Created At')->format('DD MMM YYYY')->onlyOnIndex(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
177
app/Nova/FeedApproved.php
Executable file
177
app/Nova/FeedApproved.php
Executable file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\HasMany;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Fields\MorphMany;
|
||||
use App\Domain\Feeds\Enums\StatusEnum;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
use App\Nova\Filters\SubscriptionStatusFilter;
|
||||
use App\Domain\Feeds\Models\Feed as ModelsFeed;
|
||||
use Ebess\AdvancedNovaMediaLibrary\Fields\Files;
|
||||
use Carbon\Carbon;
|
||||
use Laravel\Nova\Fields\Boolean;
|
||||
|
||||
class FeedApproved extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = ModelsFeed::class;
|
||||
public static $group = 'Content';
|
||||
|
||||
// /**
|
||||
// * The single value that should be used to represent the resource when being displayed.
|
||||
// *
|
||||
// * @var string
|
||||
// */
|
||||
// public static $title = 'title';
|
||||
|
||||
/**
|
||||
* Get the value that should be displayed to represent the resource.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function title()
|
||||
{
|
||||
if(empty($this->title)){
|
||||
return $this->id;
|
||||
}
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id', 'title', 'body'
|
||||
];
|
||||
|
||||
public static function indexQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return $query->where('status', '!=', 1)->where('is_ads', false)->with('user.subscription');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
BelongsTo::make('Creator', 'user', 'App\Nova\User')
|
||||
->onlyOnIndex(),
|
||||
|
||||
Select::make('Тип пользователя', 'userType')->options([
|
||||
1 => 'Физ. лицо',
|
||||
2 => 'Самозанятый',
|
||||
3 => 'Юридическое лицо',
|
||||
4 => 'ИП',
|
||||
])->displayUsingLabels()->readonly(),
|
||||
|
||||
Boolean::make('Подписка', function () {
|
||||
$last = $this->user->subscription->first();
|
||||
if ($last && $last->ends_at > Carbon::now()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
})->onlyOnIndex(),
|
||||
|
||||
Files::make('Media Preview', 'preview')->readonly(),
|
||||
Files::make('Media', 'common')->readonly(),
|
||||
Files::make('Media Paid', 'paid')->readonly(),
|
||||
Text::make('Title'),
|
||||
Text::make('Slug')->readonly()->hideFromIndex(),
|
||||
Select::make('Type')->options([
|
||||
'images' => 'Изображение',
|
||||
'musics' => 'Аудио',
|
||||
'videos' => 'Видео',
|
||||
])->readonly()->displayUsingLabels(),
|
||||
Text::make('Price')->readonly(),
|
||||
Textarea::make('Body')->alwaysShow()->hideFromIndex(),
|
||||
HasMany::make('Comments'),
|
||||
HasMany::make('Complaints'),
|
||||
DateTime::make('Created At')->format('DD MMM YYYY'),
|
||||
DateTime::make('Updated At')->hideFromIndex(),
|
||||
|
||||
Text::make('StatusText', function ($model) {
|
||||
if($model->status === StatusEnum::PENDING()){
|
||||
return 'Нужно проверить';
|
||||
}
|
||||
if($model->status === StatusEnum::BANNED()){
|
||||
return 'Рассмотрено - есть проблемы';
|
||||
}
|
||||
if($model->status === StatusEnum::EDITABLE()){
|
||||
return 'Нужно повторно рассмотреть';
|
||||
}
|
||||
})->onlyOnIndex(),
|
||||
|
||||
Select::make('Status')->options([
|
||||
(string) StatusEnum::APPROVED() => 'Одобрено',
|
||||
(string) StatusEnum::BANNED() => 'Есть недочеты',
|
||||
])->hideFromIndex()->displayUsingLabels()->hideWhenCreating(),
|
||||
|
||||
Textarea::make('Status Note')->hideWhenCreating(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [
|
||||
new SubscriptionStatusFilter(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
54
app/Nova/Filters/StatusWithdrawalFilter.php
Executable file
54
app/Nova/Filters/StatusWithdrawalFilter.php
Executable file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Filters;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Filters\Filter;
|
||||
|
||||
class StatusWithdrawalFilter extends Filter
|
||||
{
|
||||
/**
|
||||
* The filter's component.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $component = 'select-filter';
|
||||
|
||||
public function name()
|
||||
{
|
||||
return "Статус";
|
||||
}
|
||||
|
||||
public function authorize(Request $request)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the filter to the given query.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param mixed $value
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function apply(Request $request, $query, $value)
|
||||
{
|
||||
return $query->where('status', $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filter's available options.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function options(Request $request)
|
||||
{
|
||||
return [
|
||||
'В ожидании на вывод' => 'pending',
|
||||
'Выполнен' => 'success',
|
||||
'Отменен' => 'cancel',
|
||||
];
|
||||
}
|
||||
}
|
||||
73
app/Nova/Filters/SubscriptionStatusFilter.php
Executable file
73
app/Nova/Filters/SubscriptionStatusFilter.php
Executable file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Filters;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Filters\Filter;
|
||||
|
||||
class SubscriptionStatusFilter extends Filter
|
||||
{
|
||||
/**
|
||||
* The filter's component.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $component = 'select-filter';
|
||||
|
||||
public function name()
|
||||
{
|
||||
return 'Подписка';
|
||||
}
|
||||
|
||||
public function authorize(Request $request)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the filter to the given query.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param mixed $value
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function apply(Request $request, $query, $value)
|
||||
{
|
||||
if ($value === 'active') {
|
||||
// Фильтруем записи, где у пользователя есть активная подписка
|
||||
$query->whereHas('user.subscription', function ($q) {
|
||||
$q->where('ends_at', '>', Carbon::now());
|
||||
});
|
||||
} elseif ($value === 'inactive') {
|
||||
// Фильтруем записи, где у пользователя нет активной подписки
|
||||
$query->where(function ($q) {
|
||||
$q->whereDoesntHave('user.subscription')
|
||||
->orWhere(function ($q) {
|
||||
$q->whereHas('user.subscription', function ($q) {
|
||||
$q->where('ends_at', '<=', Carbon::now());
|
||||
})->whereDoesntHave('user.subscription', function ($q) {
|
||||
$q->where('ends_at', '>', Carbon::now());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filter's available options.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function options(Request $request)
|
||||
{
|
||||
return [
|
||||
'Активна' => 'active',
|
||||
'Неактивна' => 'inactive',
|
||||
];
|
||||
}
|
||||
}
|
||||
102
app/Nova/Package.php
Executable file
102
app/Nova/Package.php
Executable file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Number;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class Package extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Subscriptions\Models\Package::class;
|
||||
|
||||
public static $group = 'Subscription';
|
||||
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'name';
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id', 'name'
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
Text::make('Name')->rules('required'),
|
||||
Number::make('Price')->min(1)->step(0.01)->rules('required'),
|
||||
Select::make('Type')->options([
|
||||
'month' => 'Month',
|
||||
'month3' => '3 Month',
|
||||
])->rules('required'),
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
110
app/Nova/Point.php
Executable file
110
app/Nova/Point.php
Executable file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Fields\Boolean;
|
||||
use Laravel\Nova\Fields\BooleanGroup;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Number;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Sparkline;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class Point extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Points\Models\Point::class;
|
||||
|
||||
public static $group = 'Finance';
|
||||
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'id';
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
BelongsTo::make('User')
|
||||
->searchable()
|
||||
->withSubtitles()
|
||||
->rules('required'),
|
||||
Number::make('Point')->min(1)->step(0.01),
|
||||
Select::make('Direction')->options([
|
||||
0 => 'Приход', // COMING
|
||||
1 => 'Расход', // EXPENSE
|
||||
])->rules('required')->displayUsingLabels(),
|
||||
Textarea::make('Comment')->alwaysShow(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
94
app/Nova/Reason.php
Executable file
94
app/Nova/Reason.php
Executable file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class Reason extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Complaints\Models\Reason::class;
|
||||
public static $group = 'Complaints';
|
||||
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'name';
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'name',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
Text::make('Name')
|
||||
->rules('required', 'max:255'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
59
app/Nova/Resource.php
Executable file
59
app/Nova/Resource.php
Executable file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
use Laravel\Nova\Resource as NovaResource;
|
||||
|
||||
abstract class Resource extends NovaResource
|
||||
{
|
||||
/**
|
||||
* Build an "index" query for the given resource.
|
||||
*
|
||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public static function indexQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a Scout search query for the given resource.
|
||||
*
|
||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
||||
* @param \Laravel\Scout\Builder $query
|
||||
* @return \Laravel\Scout\Builder
|
||||
*/
|
||||
public static function scoutQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a "detail" query for the given resource.
|
||||
*
|
||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public static function detailQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return parent::detailQuery($request, $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a "relatable" query for the given resource.
|
||||
*
|
||||
* This query determines which instances of the model may be attached to other resources.
|
||||
*
|
||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public static function relatableQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return parent::relatableQuery($request, $query);
|
||||
}
|
||||
}
|
||||
172
app/Nova/User.php
Executable file
172
app/Nova/User.php
Executable file
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\Boolean;
|
||||
use Laravel\Nova\Fields\Gravatar;
|
||||
use Laravel\Nova\Fields\Password;
|
||||
use Laravel\Nova\Fields\MorphToMany;
|
||||
use Laravel\Nova\Fields\BelongsToMany;
|
||||
use Vyuldashev\NovaPermission\RoleBooleanGroup;
|
||||
use Ebess\AdvancedNovaMediaLibrary\Fields\Files;
|
||||
use Vyuldashev\NovaPermission\PermissionBooleanGroup;
|
||||
|
||||
class User extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Models\User::class;
|
||||
|
||||
public static $with = ['media', 'roles', 'permissions', 'subscription'];
|
||||
|
||||
public static $group = 'Users';
|
||||
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public function title()
|
||||
{
|
||||
return $this->first_name;
|
||||
}
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return "Username: {$this->username}";
|
||||
}
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id', 'first_name', 'last_name', 'username', 'email',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make()->sortable(),
|
||||
|
||||
// Gravatar::make()->maxWidth(50),
|
||||
|
||||
Text::make('Имя', 'Name', function () {
|
||||
return $this->first_name.' '.$this->last_name;
|
||||
})->onlyOnIndex(),
|
||||
|
||||
Text::make('Username')
|
||||
->rules('required', 'max:255')
|
||||
->creationRules('unique:users,username')
|
||||
->updateRules('unique:users,username,{{resourceId}}'),
|
||||
|
||||
Text::make('Имя', 'first_name')
|
||||
->onlyOnForms()
|
||||
->rules('required', 'max:255'),
|
||||
|
||||
Text::make('Фамилия', 'last_name')
|
||||
->onlyOnForms(),
|
||||
|
||||
Text::make('Tелефон', 'phone'),
|
||||
|
||||
Text::make('ИНН', 'inn')->hideFromIndex(),
|
||||
Text::make('Расчетный счет', 'checking_account')->hideFromIndex(),
|
||||
Text::make('Бик банка', 'bik')->hideFromIndex(),
|
||||
|
||||
Text::make('Почта', 'email')
|
||||
->sortable()
|
||||
->rules('required', 'email', 'max:254')
|
||||
->creationRules('unique:users,email')
|
||||
->updateRules('unique:users,email,{{resourceId}}'),
|
||||
|
||||
Password::make('Password')
|
||||
->onlyOnForms()
|
||||
->creationRules('required', 'string', 'min:4')
|
||||
->updateRules('nullable', 'string', 'min:4'),
|
||||
|
||||
RoleBooleanGroup::make('Roles'),
|
||||
PermissionBooleanGroup::make('Permissions'),
|
||||
BelongsToMany::make('Votes')->fields(function () {
|
||||
return [
|
||||
Text::make('Payment'),
|
||||
];
|
||||
}),
|
||||
Boolean::make('Вер.: телефон', 'phone_verified'),
|
||||
Boolean::make('Вер.: паспорт', 'passport_verified'),
|
||||
Boolean::make('Загружен док.?', function () {
|
||||
return $this->media->count() ? true : false;
|
||||
})->onlyOnIndex(),
|
||||
Boolean::make('Подписка', function () {
|
||||
$last = $this->subscription()->first();
|
||||
if (empty($last)) {
|
||||
return false;
|
||||
}
|
||||
if ($last->ends_at > Carbon::now()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
})->onlyOnIndex(),
|
||||
Files::make('Документ', 'documents')->readonly(),
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
124
app/Nova/Vote.php
Executable file
124
app/Nova/Vote.php
Executable file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Ysv\NovaLeader\NovaLeader;
|
||||
use Laravel\Nova\Fields\Number;
|
||||
use Laravel\Nova\Fields\Boolean;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\BelongsToMany;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class Vote extends Resource
|
||||
{
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Votes\Models\Vote::class;
|
||||
|
||||
public static $group = 'Subscription';
|
||||
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'id';
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
Number::make('Процент сайта', 'procent_site')->min(1)->step(0.01)->rules('required')->default(function ($request) {
|
||||
return nova_get_setting('vote_procent_site');
|
||||
}),
|
||||
Number::make('Процент лидера', 'procent_top')->min(1)->step(0.01)->rules('required')->default(function ($request) {
|
||||
return nova_get_setting('vote_procent_leader');
|
||||
}),
|
||||
Number::make('Процент локального лидера', 'procent_local')->min(1)->step(0.01)->rules('required')->default(function ($request) {
|
||||
return nova_get_setting('vote_procent_local_leader');
|
||||
}),
|
||||
Boolean::make('Платный режим включен', 'type')->rules('required')->default(function ($request) {
|
||||
return nova_get_setting('vote_paid_mode');
|
||||
}),
|
||||
DateTime::make('Created At')->format('DD MMM YYYY'),
|
||||
BelongsToMany::make('Users')->fields(function () {
|
||||
return [
|
||||
Text::make('Payment'),
|
||||
];
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [
|
||||
(new NovaLeader)->currentLeader(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
// protected static function afterCreationValidation(NovaRequest $request, $validator)
|
||||
// {
|
||||
// // $validator->errors()->add('field', 'Something is wrong with this field!');
|
||||
// }
|
||||
}
|
||||
167
app/Nova/Withdrawal.php
Executable file
167
app/Nova/Withdrawal.php
Executable file
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Illuminate\Http\Request;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Fields\Number;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Boolean;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\Textarea;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
use App\Nova\Filters\StatusWithdrawalFilter;
|
||||
use App\Nova\Filters\SubscriptionStatusFilter;
|
||||
|
||||
|
||||
class Withdrawal extends Resource
|
||||
{
|
||||
|
||||
public static $group = 'Finance';
|
||||
|
||||
/**
|
||||
* The model the resource corresponds to.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $model = \App\Domain\Payments\Models\Withdrawal::class;
|
||||
|
||||
/**
|
||||
* The single value that should be used to represent the resource when being displayed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $title = 'id';
|
||||
|
||||
// public static $with = ['user.subscription'];
|
||||
|
||||
|
||||
/**
|
||||
* The columns that should be searched.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $search = [
|
||||
'id', 'amount'
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(Request $request)
|
||||
{
|
||||
return [
|
||||
ID::make(__('ID'), 'id')->sortable(),
|
||||
BelongsTo::make('User')->readonly(),
|
||||
|
||||
Select::make('Тип пользователя', 'userType')->options([
|
||||
1 => 'Физ. лицо',
|
||||
2 => 'Самозанятый',
|
||||
3 => 'Юридическое лицо',
|
||||
4 => 'ИП',
|
||||
])->displayUsingLabels()->readonly(),
|
||||
|
||||
|
||||
Text::make('Реквизиты', 'requisites')
|
||||
->readonly(),
|
||||
|
||||
Text::make('Телефон', 'userPhone')
|
||||
->readonly(),
|
||||
|
||||
Number::make('Amount')->min(1)->step(0.01)->readonly(),
|
||||
Select::make('Status')->options([
|
||||
'pending' => 'В ожидании',
|
||||
'success' => 'Выполнен',
|
||||
'cancel' => 'Отменен',
|
||||
])->displayUsingLabels()->readonly(optional($this->resource)->status !== 'pending'),
|
||||
|
||||
Boolean::make('Подписка', function () {
|
||||
$last = $this->user->subscription->first();
|
||||
if ($last && $last->ends_at > Carbon::now()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
})->onlyOnIndex(),
|
||||
|
||||
Textarea::make('Данные платежа', 'history_payment_details')->alwaysShow()->readonly(),
|
||||
Textarea::make('Примечания (причина отказа)', 'description')->alwaysShow()->readonly(optional($this->resource)->status !== 'pending'),
|
||||
DateTime::make('Created At')->format('DD MMM YYYY')->readonly(),
|
||||
DateTime::make('Updated At')->hideFromIndex()->readonly(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cards available for the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function cards(Request $request)
|
||||
{
|
||||
return [
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filters available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function filters(Request $request)
|
||||
{
|
||||
return [
|
||||
new StatusWithdrawalFilter(),
|
||||
new SubscriptionStatusFilter(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the lenses available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function lenses(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the actions available for the resource.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function actions(Request $request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
protected static function afterUpdateValidation(NovaRequest $request, $validator)
|
||||
{
|
||||
if($request->created_at !== $request->updated_at){
|
||||
$validator->errors()->add('status', 'Данный платеж только для чтения!');
|
||||
return;
|
||||
}
|
||||
$status = $request->status;
|
||||
$description = $request->description;
|
||||
if($status === 'cancel' && empty($description)){
|
||||
$validator->errors()->add('description', 'Нужно указать причину отмены платежа!');
|
||||
}
|
||||
}
|
||||
|
||||
public static function indexQuery(NovaRequest $request, $query)
|
||||
{
|
||||
return $query->with('user.subscription');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user