Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 98
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
CopyTemplateController
0.00% covered (danger)
0.00%
0 / 98
0.00% covered (danger)
0.00%
0 / 4
272
0.00% covered (danger)
0.00%
0 / 1
 copyTemplate
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
20
 updateTemplate
0.00% covered (danger)
0.00%
0 / 28
0.00% covered (danger)
0.00%
0 / 1
12
 copyCategory
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 1
42
 dispatchShortcutEvent
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Http\Controllers\v1;
4
5use App\Http\Controllers\Controller;
6use App\Http\Models\Auth\BusinessUser;
7use App\Http\Models\Auth\User;
8use App\Http\Models\Shortcut;
9use App\Http\Models\Template;
10use App\Http\Requests\CopyTemplateRequest;
11use App\Traits\SubscriptionTrait;
12use Illuminate\Http\JsonResponse;
13use Illuminate\Http\Request;
14use Illuminate\Http\Response;
15use Illuminate\Support\Facades\Cache;
16
17class CopyTemplateController extends Controller
18{
19    use SubscriptionTrait;
20
21    public function copyTemplate(CopyTemplateRequest $request): JsonResponse
22    {
23        $data = [];
24
25        if ($request['type'] == 'sub_categories_lv2') {
26            $data['sub_categories_lv2_id'] = $request['category_id'];
27        } elseif ($request['type'] == 'sub_categories_lv1') {
28            $data['sub_categories_lv1_id'] = $request['category_id'];
29        } else {
30            $data['category_id'] = $request['category_id'];
31        }
32
33        $searchArray = ['_id' => $request->template_id];
34        $template = Template::where($searchArray)->first();
35        if (! $template) {
36            return response()->json(false);
37        }
38
39        $user = $request->user();
40        $userId = $user->getKey();
41
42        $shortcutData = [
43            'title' => $template->title,
44            'shortcut' => $template->shortcut,
45            'first_line' => $template->first_line,
46            'text' => $template->text,
47            'html' => $template->html,
48            'version' => 1,
49            'uploads' => $template->uploads,
50            'type' => $request->type,
51            'template_id' => $template->id,
52            'template_version' => $template->version,
53            'template_category_id' => $template->category_id,
54            'user_defined' => false,
55            'user_id' => $userId,
56        ] + $data;
57
58        Shortcut::create($shortcutData);
59        $this->dispatchShortcutEvent();
60
61        return response()->json(true);
62    }
63
64    public function updateTemplate(Request $request): JsonResponse
65    {
66        $data = $request->validate([
67            'template_id' => 'required|string|exists:templates,_id',
68        ]);
69
70        $searchArray = ['_id' => $data['template_id']];
71        $template = Template::where($searchArray)->first();
72        if (! $template) {
73            return response()->json(['error' => 'This FlyPlate is not available on your account'], Response::HTTP_UNPROCESSABLE_ENTITY);
74        }
75
76        $searchArray = ['template_id' => $data['template_id']];
77        $shortcut = Shortcut::where($searchArray)->first();
78
79        if (! $shortcut) {
80            return response()->json(['error' => 'This FlyCut is not available on your account'], Response::HTTP_UNPROCESSABLE_ENTITY);
81        }
82
83        $shortcutData = [
84            'title' => $template->title,
85            'shortcut' => $template->shortcut,
86            'first_line' => $template->first_line,
87            'text' => $template->text,
88            'html' => $template->html,
89            'version' => $shortcut->version + 1,
90            'uploads' => $template->uploads,
91            'type' => $template->type,
92            'template_version' => $template->version,
93        ];
94
95        $searchArray = ['template_id' => $data['template_id']];
96        Shortcut::where($searchArray)->update($shortcutData);
97        $this->dispatchShortcutEvent();
98
99        $userId = $request->user()->getKey();
100
101        Cache::forget('template_'.$userId);
102
103        return response()->json(true);
104    }
105
106    public function copyCategory(Request $request): JsonResponse
107    {
108        $data = $request->validate([
109            'template_category_id' => 'required|string|exists:templates,category_id',
110            'category_id' => 'required|string|exists:shortcut_categories,_id',
111        ], [
112            'template_category_id.required' => 'Flyplate(s) are required',
113            'category_id.required' => 'Category is required',
114        ]);
115
116        $templates = Template::where('category_id', $data['template_category_id'])->get();
117
118        if (! $templates || count($templates) < 1) {
119            $templates = Template::where('subcategory_lv1_id', $data['template_category_id'])->get();
120
121            if (! $templates || count($templates) < 1) {
122                return response()->json(false);
123            }
124        }
125
126        $userId = $request->user()->getKey();
127        foreach ($templates as $template) {
128            $shortcutData = [
129                'title' => $template->title,
130                'shortcut' => $template->shortcut,
131                'first_line' => $template->first_line,
132                'text' => $template->text,
133                'html' => $template->html,
134                'version' => 1,
135                'category_id' => $data['category_id'],
136                'uploads' => $template->uploads,
137                'type' => $template->type,
138                'template_id' => $template->id,
139                'template_version' => $template->version,
140                'template_category_id' => $template->category_id,
141                'user_defined' => false,
142                'user_id' => $userId,
143            ];
144
145            $searchArray = ['template_id' => $template->id];
146            Shortcut::updateOrCreate($searchArray, $shortcutData);
147        }
148
149        $this->dispatchShortcutEvent();
150
151        Cache::forget('template_'.$userId);
152
153        return response()->json(true);
154    }
155
156    public function dispatchShortcutEvent()
157    {
158        $user = request()->user();
159        if ($user instanceof User) {
160            event(new \App\Events\User\ShortcutUpdated($user));
161        }
162        if ($user instanceof BusinessUser) {
163            event(new \App\Events\Business\ShortcutUpdated($user));
164        }
165    }
166}