Completed
Push — master ( ca46fd...1d0b8e )
by
unknown
19:27 queued 09:34
created

TranslateController::translate()   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 9.2568
c 0
b 0
f 0
cc 5
nc 4
nop 3
1
<?php
2
3
namespace BBSLab\NovaTranslation\Http\Controllers;
4
5
use BBSLab\NovaTranslation\Models\Contracts\IsTranslatable;
6
use BBSLab\NovaTranslation\Models\Locale;
7
use Laravel\Nova\Nova;
8
use Laravel\Nova\Resource;
9
10
class TranslateController
11
{
12
    public function translate(string $resource, $key, Locale $locale)
13
    {
14
        $model = Nova::modelInstanceForKey($resource);
15
16
        if (empty($model) || ! ($model instanceof IsTranslatable)) {
17
            return redirect()->back();
18
        }
19
20
        /** @var \BBSLab\NovaTranslation\Models\Contracts\IsTranslatable $model */
21
        $model = $model->newQuery()->find($key);
22
23
        if (empty($model)) {
24
            return redirect()->back();
25
        }
26
27
        /** @var \BBSLab\NovaTranslation\Models\Contracts\IsTranslatable $translated */
28
        $translated = $model->translate($locale);
29
30
        return $translated
31
            ? redirect($this->redirectToResource($translated))
32
            : redirect()->back();
33
    }
34
35
    protected function errorPage(): string
36
    {
37
        return Nova::path().'/404';
38
    }
39
40
    protected function redirectToResource(IsTranslatable $translatable): string
41
    {
42
        $resource = Nova::resourceForModel($translatable);
43
44
        if (! is_subclass_of($resource, Resource::class)) {
45
            throw new \BadMethodCallException("{$resource} is not a valid Nova resource");
46
        }
47
48
        return implode('/', array_filter([
49
            trim(Nova::path()),
50
            'resources',
51
            $resource::uriKey(),
52
            $translatable->getKey(),
53
            'edit',
54
        ]));
55
    }
56
}
57