Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
41.18% covered (warning)
41.18%
7 / 17
CRAP
70.93% covered (success)
70.93%
61 / 86
AdservingController
0.00% covered (danger)
0.00%
0 / 1
41.18% covered (warning)
41.18%
7 / 17
36.00
70.93% covered (success)
70.93%
61 / 86
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 index
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 superAdminIndex
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 userIndex
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 visualListComplete
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 getOne
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 store
0.00% covered (danger)
0.00%
0 / 1
2.21
62.50% covered (warning)
62.50%
5 / 8
 update
0.00% covered (danger)
0.00%
0 / 1
3.05
82.61% covered (success)
82.61%
19 / 23
 show
0.00% covered (danger)
0.00%
0 / 1
2.50
50.00% covered (warning)
50.00%
3 / 6
 previewForm
0.00% covered (danger)
0.00%
0 / 1
2.03
80.00% covered (success)
80.00%
12 / 15
 listTemplates
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 listFonts
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
7 / 7
 createConfig
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
7 / 7
 validations
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 createNewOperation
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 getDefaultStructure
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 getNameOperation
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
1<?php
2
3namespace Qmp\Laravel\Adserving\Controllers;
4
5use Illuminate\Http\Response;
6use Illuminate\Http\Request;
7use Illuminate\Support\Facades\Log;
8use Illuminate\Support\Facades\Storage;
9use Illuminate\Support\Str;
10use Qmp\Laravel\Adserving\Models\AdservingData;
11use Qmp\Laravel\Adserving\Models\Visual;
12use Qmp\Laravel\Adserving\Objects\HtmlGenerator;
13use Qmp\Laravel\Adserving\Objects\ShopsReader;
14use Qmp\Laravel\MicroService\Controllers\AbstractMicroServiceController;
15use Qmp\Laravel\Adserving\Rules\AdservingCsvRule;
16use Qmp\Laravel\Adserving\Services\Drawer\Drawer;
17use Qmp\Laravel\Adserving\Services\Drawer\DrawerConfig;
18use Qmp\Laravel\AdservingQueue\Jobs\GenerateImage;
19class AdservingController extends AbstractMicroServiceController
20{
21
22    protected $operationTypeId = 2;
23
24    public function __construct(Request $request)
25    {
26        parent::__construct($request);
27    }
28
29    /**
30     * Display a listing of the resource.
31     *
32     * @return \Illuminate\Http\Response
33     */
34    public function index()
35    {
36        return response()->json($this->assignedIndex());
37    }
38
39    /**
40     * Undocumented function
41     *
42     * @return void
43     */
44    protected function superAdminIndex() {
45        Log::debug('super_admin');
46        return Visual::orderBy('id', 'desc')->paginate(15);
47    }
48
49    /**
50     * Undocumented function
51     *
52     * @param [type] $ids
53     * @return void
54     */
55    protected function userIndex($ids) {
56        Log::debug('user_index');
57        return Visual::whereIn('id', $ids)->orderBy('id', 'desc')->paginate(15);
58    }
59
60    /**
61     * Undocumented function
62     *
63     * @return void
64     */
65    public function visualListComplete()
66    {
67        return response()->json(Visual::orderBy('id', 'desc')->select(['id', 'name'])->get());
68    }
69
70    /**
71     * Undocumented function
72     *
73     * @param Request $request
74     * @param Visual $visual
75     * @return void
76     */
77    public function getOne(Request $request, Visual $visual)
78    {
79        return response()->json($visual);
80    }
81
82    /**
83     * Store a newly created resource in storage.
84     *
85     * @param  \Illuminate\Http\Request  $request
86     * @return \Illuminate\Http\Response
87     */
88    public function store(Request $request)
89    {
90        $validations = [
91            'name' => ['required', 'string']
92        ];
93        $request->validate($validations);
94
95        try {
96            $visual = Visual::create([
97                'name' => $request->name
98            ]);
99
100            return response()->json(["status" => "ok", "datas" => $visual->toArray()], Response::HTTP_CREATED);
101        } catch (\Exception $e) {
102            Log::debug('Unable to store entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
103            return response()->json(["status" => "ko", "message" => $e->getMessage()], $this->getHttpCode($e));
104        }
105    }
106
107    /**
108     * Store a newly created resource in storage.
109     *
110     * @param  \Illuminate\Http\Request  $request
111     * @return \Illuminate\Http\Response
112     */
113    public function update(Request $request, Drawer $drawer)
114    {
115
116        $validations = $this->validations($request);
117        $validations['id'] = 'required';
118        $request->validate($validations);
119
120        try {
121            // Check Assignment
122            $this->checkOperationAssignment($request->id);
123
124            $filename = Str::random(10) . '.' . $request->file('fileImg')->getClientOriginalExtension();
125            $file = $request->file('fileImg')->storeAs('', $filename, 'temp');
126
127            $visual = Visual::findOrFail($request->id);
128
129            if (!$visual->created) {
130                $visual->update([
131                    'name' => $request->name,
132                    'lineNumber' => $request->lineNumber,
133                    'visualNumber' => $request->visualNumber,
134                    'created' => 1,
135                    'html' => resolve(HtmlGenerator::class)->render($request->visualNumber, $visual->id)
136                ]);
137
138                $config = $this->createConfig($request, Storage::disk('temp')->path($file));
139                resolve(ShopsReader::class)->setDelimiter($request->csvDelimiter)->each(function ($shop) use ($config) {
140                    GenerateImage::dispatch($shop, $config);
141                }, null, $visual->id);
142
143                return response()->json(["status" => "ok", "datas" => $visual->toArray()], Response::HTTP_OK);
144            }
145
146            throw new Exception('Visual alrealy created');
147        } catch (\Exception $e) {
148            Log::debug('Unable to update entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
149            return response()->json(["status" => "ko", "message" => $e->getMessage()], $this->getHttpCode($e));
150        }
151    }
152
153    /**
154     * Display the specified resource.
155     *
156     * @return \Illuminate\Http\Response
157     */
158    public function show(Request $request)
159    {
160        try {
161
162            $request->validate([
163                'latitude' => ['required', 'numeric'],
164                'longitude' => ['required', 'numeric'],
165                'visual_id' => ['required', 'integer'],
166                'index' => ['required', 'integer']
167            ]);
168
169            return response()->json(AdservingData::getNearPoint($request->latitude, $request->longitude, $request->visual_id, $request->index));
170        } catch (\Exception $e) {
171            Log::debug('Unable to show entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
172            return response()->json(["status" => "ko", "message" => $e->getMessage()], $this->getHttpCode($e));
173        }
174    }
175
176    /**
177     * Undocumented function
178     *
179     * @param Request $request
180     * @param Drawer $drawer
181     * @return void
182     */
183    public function previewForm(Request $request, Drawer $drawer)
184    {
185        $request->validate($this->validations($request));
186
187        try {
188            $images = [];
189            $config = $this->createConfig($request, $request->file('fileImg')->getRealPath());
190
191            resolve(ShopsReader::class)->setDelimiter($request->csvDelimiter)->each(function ($shop) use ($config, $drawer, &$images) {
192                $images[] = $drawer->setConfig($config)
193                    ->setDatas($shop->get('lines'))
194                    ->render()
195                    ->base64();
196            }, null, $request->visualNumber);
197
198            $preview = [
199                'previewBlocHtml' => resolve(HtmlGenerator::class)->render($request->visualNumber, '0'),
200                'images' => $images
201            ];
202
203            return response()->json($preview);
204        } catch (\Exception $e) {
205            Log::debug('Unable to preview entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
206            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
207        }
208    }
209
210    /**
211     * Undocumented function
212     *
213     * @param Drawer $drawer
214     * @return void
215     */
216    public function listTemplates(Drawer $drawer)
217    {
218        return collect($drawer->listTemplates())->values();
219    }
220
221    /**
222     * Undocumented function
223     *
224     * @return void
225     */
226    public function listFonts()
227    {
228        return collect(Storage::disk('fonts')->files())
229            ->map(function ($font) {
230                return [
231                    'name' => explode('-', $font)[0],
232                    'ext' => '.' . explode('.', $font)[1]
233                ];
234            })
235            ->unique('name')
236            ->values();
237    }
238
239    /**
240     * Undocumented function
241     *
242     * @param Request $request
243     * @param [type] $file
244     * @return DrawerConfig
245     */
246    protected function createConfig(Request $request, $file): DrawerConfig
247    {
248        return new DrawerConfig([
249            'name' => $request->name,
250            'file' => $file,
251            'lineNumber' => $request->lineNumber,
252            'template' => $request->template,
253            'font' => $request->font,
254            'fontColor' => $request->fontColor
255        ]);
256    }
257
258    /**
259     * Undocumented function
260     *
261     * @param Request $request
262     * @return void
263     */
264    protected function validations(Request $request)
265    {
266        return [
267            'name' => ['required', 'string'],
268            'lineNumber' => ['required', 'string'],
269            'visualNumber' => ['required', 'string'],
270            'csvDelimiter' => ['required', 'string', 'in:coma,semi-colon,tab'],
271            'fontColor' => ['required', 'array'],
272            'template' => ['required', 'string'],
273            'font' => ['required', 'array'],
274            'fileCsv' => ['bail', 'required', 'file', 'mimes:csv,txt', new AdservingCsvRule($request->csvDelimiter)],
275            'fileImg' => ['required', 'file', 'mimes:jpg,jpeg,png,gif'],
276        ];
277    }
278
279    /**
280     * Undocumented function
281     *
282     * @param Request $request
283     * @return void
284     */
285    public function createNewOperation(Request $request)
286    {
287        $request->merge($this->getDefaultStructure());
288
289        $response = $this->store($request);
290
291        if (Str::startsWith($response->status(), '2')) {
292            return $this->GetResponseForCreatedOperation($response->getOriginalContent()['datas']['id']);
293        }
294
295        return $response;
296    }
297
298    /**
299     * Undocumented function
300     *
301     * @return void
302     */
303    private function getDefaultStructure()
304    {
305        return include(__DIR__ . '/../DefaultStructure/AdservingStructure.php');
306    }
307
308    public function getNameOperation($id)
309    {
310        $session = Visual::findOrFail($id, ['id', 'name']);
311
312        return response()->json($session);
313    }
314}