<?php namespace App\Http\Section; use File; use App\Rating; use App\Tag; use Illuminate\Database\Eloquent\Model; use SleepingOwl\Admin\Contracts\Display\DisplayInterface; use SleepingOwl\Admin\Contracts\Form\FormInterface; use SleepingOwl\Admin\Contracts\Initializable; use SleepingOwl\Admin\Section; use AdminDisplay; use AdminColumn; use AdminForm; use AdminFormElement; /** * Class Training * * @property \App\Training $model * * @see http://sleepingowladmin.ru/docs/model_configuration_section */ class Training extends Section implements Initializable { protected $size = '10737418240'; protected $model = '\App\Training'; /** * @see http://sleepingowladmin.ru/docs/model_configuration#ограничение-прав-доступа * * @var bool */ protected $checkAccess = false; /** * @var string */ protected $title; /** * @var string */ protected $alias; public function initialize() { // Добавление пункта меню и счетчика кол-ва записей в разделе $this->addToNavigation($priority = 500, function () { return \App\Training::count(); }); $this->creating(function ($config, \Illuminate\Database\Eloquent\Model $model) { //... }); } public function deleteImageVideo($local, $imageUrl) { if (File::exists(public_path() . '/' . $local)) ; { File::delete(public_path() . '/' . $local); } if (File::exists(public_path() . '/' . $imageUrl)) ; { File::delete(public_path() . '/' . $imageUrl); } return true; } public function createImageFromVideo($local_url) { $video_path = public_path() . '/' . $local_url; $image_path = 'files/uploads/images/' . str_random(10) . '.jpg'; $preview_path = public_path() . '/' . $image_path; exec(escapeshellcmd('convert ' . escapeshellarg($video_path) . '[100] ' . escapeshellarg($preview_path))); return $image_path; } /** * @return DisplayInterface */ public function onDisplay() { return AdminDisplay::datatables()/*->with('users')*/ ->setHtmlAttribute('class', 'table-primary') ->setColumns( AdminColumn::text('id', '#')->setWidth('30px'), AdminColumn::link('title', 'Title')->setWidth('200px'), // AdminColumn::text('description', 'Description'), AdminColumn::custom('Description', function (\Illuminate\Database\Eloquent\Model $model) { return strip_tags(str_limit($model->description, 50)); }), //AdminColumn::text('Lang', 'language'), AdminColumn::lists('tags.name', 'Tag'), AdminColumn::lists('categories.name', 'Category'), AdminColumn::custom('Rate', function (\Illuminate\Database\Eloquent\Model $model) { $rate = (int)Rating::where('training_id', $model->id)->avg('rate'); return $rate; }), AdminColumn::custom('Lang', function (\Illuminate\Database\Eloquent\Model $model) { return $model->lang->name; }) )->paginate(20); // todo: remove if unused } /** * * @param int $id * * @return FormInterface */ public function onEdit($id) { return AdminForm::panel()->addBody([ AdminFormElement::text('title', 'Title')->required(), AdminFormElement::wysiwyg('description', 'Description')->required(), //AdminFormElement::select('language', 'Language')->setOptions(['english' => 'english', 'russian' => 'russian'])->required()->setSortable(false), AdminFormElement::file('local_url', 'Local Url')->maxSize((int)$this->size), AdminFormElement::text('external_url', 'External Url'), AdminFormElement::multiselect('tags', 'Tag')->setModelForOptions(Tag::class)->setDisplay('name')->required(), AdminFormElement::multiselect('categories', 'Category')->setModelForOptions(\App\Category::class)->setDisplay('name')->required(), AdminFormElement::select('language_id', 'Language')->setModelForOptions(\App\Language::class)->setDisplay('name')->exclude(['any' => '1'])->required(), AdminFormElement::text('id', 'ID')->setReadonly(1), AdminFormElement::text('created_at')->setLabel('Создано')->setReadonly(1), AdminFormElement::custom(function (Model $model) { if ((string)$model->local_url == 'false' || empty($model->local_url)) { $local = $model->getOriginal('local_url'); $imageUrl = $model->getOriginal('imageUrl'); $this->deleteImageVideo($local, $imageUrl); $model->imageUrl = ''; } if ($model->local_url == $model->getOriginal('local_url')) { return $model; } $local = $model->getOriginal('local_url'); $imageUrl = $model->getOriginal('imageUrl'); $this->deleteImageVideo($local, $imageUrl); if (!empty($model->local_url) && (string)$model->local_url != 'false') { $model->imageUrl = $this->createImageFromVideo($model->local_url); } }) ]); // todo: remove if unused } /** * @return FormInterface */ public function onCreate() { return AdminForm::panel()->addBody([ AdminFormElement::text('title', 'Title')->required(), AdminFormElement::select('language_id', 'Language')->setModelForOptions(\App\Language::class)->setDisplay('name')->exclude(['any' => '1'])->required(), AdminFormElement::multiselect('tags', 'Tag')->setModelForOptions(Tag::class)->setDisplay('name')->required(), AdminFormElement::multiselect('categories', 'Category')->setModelForOptions(\App\Category::class)->setDisplay('name')->required(), //AdminFormElement::text('description', 'Description')->required(), AdminFormElement::wysiwyg('description', 'Description')->required(), AdminFormElement::file('local_url', 'Local Url')->maxSize((int)$this->size), AdminFormElement::custom(function (Model $model) { if (!empty($model->local_url)) { $model->imageUrl = $this->createImageFromVideo($model->local_url); } }), AdminFormElement::text('external_url', 'External Url') ]); } /** * @return void */ public function onDelete($id) { if (\App\Training::find($id)) { $local = \App\Training::find($id)->local_url; $imageUrl = \App\Training::find($id)->imageUrl; } $this->deleteImageVideo($local, $imageUrl); if (!\App\Training::find($id)) { return false; } \App\Training::find($id)->users()->detach(); \App\Training::find($id)->tags()->detach(); \App\Training::find($id)->categories()->detach(); \App\Training::find($id)->views()->detach(); } /** * @return void */ public function onRestore($id) { // todo: remove if unused } }
sleeping owl

sleeping