photo/app/Traits/Multimedia.php
2020-01-06 20:01:04 +11:00

96 lines
2.4 KiB
PHP

<?php
namespace App\Traits;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Jobs\{PhotoDelete,VideoDelete};
/**
* Multimedia Controller Functions
*
* @package App\Traits
*/
trait Multimedia
{
use Type;
private function controller(string $type): string
{
switch (strtolower($type)) {
case 'photo': return 'PhotoController';
case 'video': return 'VideoController';
default: abort(500,'Type not handled?');
}
}
public function deletesUpdate(Request $request)
{
$class = $this->getModelType($request->input('type'));
$this->updatePostItems($request,$class,TRUE);
return redirect()->action(
sprintf('%s@deletes',$this->controller($request->input('type'))),
sprintf('?page=%s',$request->input('page'))
);
}
public function duplicatesUpdate(Request $request)
{
$class = $this->getModelType($request->input('type'));
$this->updatePostItems($request,$class);
return redirect()->action(
sprintf('%s@duplicates',$this->controller($request->input('type'))),
sprintf('?page=%s',$request->input('page'))
);
}
private function updatePostItems(Request $request,string $class,bool $delete=FALSE)
{
foreach ($request->input('items') as $id) {
try {
$o = $class::findOrFail($id);
} catch (ModelNotFoundException $e) {
Log::alert('Object not found: '.$id);
continue;
} catch (\Exception $e) {
dd($e);
}
// Set if duplicate
$o->duplicate = $request->input('duplicate.'.$id) ? 1 : NULL;
// Set if ignore duplicate
$o->ignore_duplicate = $request->input('ignore_duplicate.'.$id) ? 1 : NULL;
// Set if flag
$o->flag = $request->input('flag.'.$id) ? 1 : NULL;
// Set if delete
if ($delete AND $o->remove AND ($request->input('remove.'.$id) ? 1 : NULL)) {
switch (strtolower($request->input('type'))) {
case 'photo':
$this->dispatch((new PhotoDelete($o))->onQueue('delete'));
Log::info(sprintf('Dispatching delete for [%s]',$o->id));
break;
case 'video':
$this->dispatch((new VideoDelete($o))->onQueue('delete'));
Log::info(sprintf('Dispatching delete for [%s]',$o->id));
break;
default:
Log::info(sprintf('Ignoring delete for [%s] - not configured (%s).',$o->id,$class));
}
} else {
$o->remove = $request->input('remove.'.$id) ? 1 : NULL;
}
$o->save();
}
}
}