| Code Coverage | ||||||||||
| Classes and Traits | Functions and Methods | Lines | ||||||||
| Total |  | 0.00% | 0 / 1 |  | 41.18% | 7 / 17 | CRAP |  | 70.93% | 61 / 86 | 
| AdservingController |  | 0.00% | 0 / 1 |  | 41.18% | 7 / 17 | 36.00 |  | 70.93% | 61 / 86 | 
| __construct |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2 | |||
| index |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 1 / 1 | |||
| superAdminIndex |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2 | |||
| userIndex |  | 0.00% | 0 / 1 | 2 |  | 0.00% | 0 / 2 | |||
| visualListComplete |  | 0.00% | 0 / 1 | 2 |  | 0.00% | 0 / 1 | |||
| getOne |  | 0.00% | 0 / 1 | 2 |  | 0.00% | 0 / 1 | |||
| store |  | 0.00% | 0 / 1 | 2.21 |  | 62.50% | 5 / 8 | |||
| update |  | 0.00% | 0 / 1 | 3.05 |  | 82.61% | 19 / 23 | |||
| show |  | 0.00% | 0 / 1 | 2.50 |  | 50.00% | 3 / 6 | |||
| previewForm |  | 0.00% | 0 / 1 | 2.03 |  | 80.00% | 12 / 15 | |||
| listTemplates |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 1 / 1 | |||
| listFonts |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 7 / 7 | |||
| createConfig |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 7 / 7 | |||
| validations |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2 | |||
| createNewOperation |  | 0.00% | 0 / 1 | 6 |  | 0.00% | 0 / 5 | |||
| getDefaultStructure |  | 0.00% | 0 / 1 | 2 |  | 0.00% | 0 / 1 | |||
| getNameOperation |  | 0.00% | 0 / 1 | 2 |  | 0.00% | 0 / 2 | |||
| 1 | <?php | 
| 2 | |
| 3 | namespace Qmp\Laravel\Adserving\Controllers; | 
| 4 | |
| 5 | use Illuminate\Http\Response; | 
| 6 | use Illuminate\Http\Request; | 
| 7 | use Illuminate\Support\Facades\Log; | 
| 8 | use Illuminate\Support\Facades\Storage; | 
| 9 | use Illuminate\Support\Str; | 
| 10 | use Qmp\Laravel\Adserving\Models\AdservingData; | 
| 11 | use Qmp\Laravel\Adserving\Models\Visual; | 
| 12 | use Qmp\Laravel\Adserving\Objects\HtmlGenerator; | 
| 13 | use Qmp\Laravel\Adserving\Objects\ShopsReader; | 
| 14 | use Qmp\Laravel\MicroService\Controllers\AbstractMicroServiceController; | 
| 15 | use Qmp\Laravel\Adserving\Rules\AdservingCsvRule; | 
| 16 | use Qmp\Laravel\Adserving\Services\Drawer\Drawer; | 
| 17 | use Qmp\Laravel\Adserving\Services\Drawer\DrawerConfig; | 
| 18 | use Qmp\Laravel\AdservingQueue\Jobs\GenerateImage; | 
| 19 | class 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 | } |