get()); } // *** --- START CONTACTS --- /** * Get Contacts * * @param \App\Models\AppUser $app_user * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection */ public function getContacts(AppUser $app_user) { return ContactResource::collection( Contact::query()->whereHas('appUser', function (Builder $q) use ($app_user) { $q->where('id', $app_user->id); })->get() ); } /** * Upsert contacts * * @param \App\Http\Requests\Api\Contacts\UpsertContactsRequest $request * @param \App\Models\AppUser $app_user * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection */ public function upsertContact(UpsertContactsRequest $request, AppUser $app_user) { /** @var \Illuminate\Support\Collection */ $formularies = Formulary::query()->pluck('slug')->flip(); $contactQuery = Contact::query()->whereHas('appUser', function (Builder $q) use ($app_user) { $q->where('id', $app_user->id); }); \collect($request->contacts)->each(function (array $contactRequestData) use ($contactQuery, $formularies) { /** @var \App\Models\Contact */ $model = (clone $contactQuery)->where('id', Arr::get($contactRequestData, 'id'))->firstOrNew(); $contactRequestData['timestamp'] = Carbon::parse($contactRequestData['timestamp'], 'UTC') ->setTimezone(\now()->getTimezone()); if ($model->timestamp and $model->timestamp->gte($contactRequestData['timestamp'])) { return; } // * Set parse values on data prop to fill in model. $contactRequestData['data'] = \collect($contactRequestData['dataParsed']) // * FILTER CONTACT DATA WITH ACTUAL FORMULARY ->filter(function (Input $input) use ($formularies) { return $formularies->has($input->data->formSlug); }); $model->fill($contactRequestData); $model->saveOrFail(); }); // * HTTP 200 is ok. return \response()->json(); } /** * Destroy contacts * * @param \App\Http\Requests\Api\Contacts\DestroyContactsRequest $request * @param \App\Models\AppUser $app_user * @return \Illuminate\Http\Resources\Json */ public function destroyContacts(DestroyContactsRequest $request, AppUser $app_user) { Contact::query()->whereIn('id', $request->contactUuidList) ->whereHas('appUser', function (Builder $q) use ($app_user) { $q->where('id', $app_user->id); })->delete(); // * HTTP 200 is ok. return \response()->json(); } // *** --- END CONTACTS --- /** * @param \Illuminate\Http\Request $request * @return \App\Http\Resources\DirectoriesCollection */ public function getDirectories(Request $request) { return DirectoryResource::collection(Directory::all()); } /** * @param \Illuminate\Http\Request $request * @return \App\Http\Resources\DocumentsCollection */ public function getDocuments(Request $request) { return DocumentResource::collection(Document::where('status', 1)->get()); } /** * @param \Illuminate\Http\Request $request * @return array */ public function getVersion(Request $request) { $app_uuid = $request->app_uuid; $app_version = $request->app_version; $version = Setting::select('value AS version')->where('key', 'version')->first(); $ShowIsActive = Setting::select('value AS ShowIsActive')->where('key', 'ShowIsActive')->first(); try { $client = new \GuzzleHttp\Client(); $response = $client->request( 'GET', 'https://store.ldc.fr/api/get-version?token=@P$oi6or!bL2-r%3C&app_uuid=' . $app_uuid ); $body = $response->getBody(); $storeVersion = json_decode($body)->version; } catch (ClientException $e) { $storeVersion = $app_version; } if ($storeVersion > $app_version) { $newApp = true; } else { $newApp = false; } return ['version' => $version->version, 'ShowIsActive' => $ShowIsActive->ShowIsActive, 'newApp' => $newApp]; } /** * @return \App\Http\Resources\ContactsCollection */ public function getFormularies() { return FormularyResource::collection(Formulary::query()->orderBy('order')->get()); } /** * NOTE: This should be refactored, on app side also. * @param \Illuminate\Http\Request $request * @return string */ public function sendFlyer(Request $request) { // FIXME: This should be validated OMG. $requestData = \json_decode($request->emails, true); $email = $requestData['email']; $subject = $requestData['subject']; $message = $requestData['message']; $app_user_id = $requestData['app_user_id']; $docs = \json_decode($requestData['documents'], true); $user = AppUser::find($app_user_id); $attach = []; $filesName = []; $noExists = []; foreach ($docs as $doc) { $exists = Storage::disk('public')->exists('docs/' . $doc['uuid'] . '.' . $doc['type']); if ($exists) { array_push($attach, URL::temporarySignedRoute( 'bo.docs.download', now()->addDays(30), ['uuid' => $doc['uuid']] )); array_push($filesName, $doc['title']); } else { array_push($noExists, $doc['title']); } } if (count($noExists) === 0) { $message = new SendFlyer([ 'body' => $message, 'from' => $user->email, 'fromName' => $user->firstname . ' ' . $user->lastname, 'subject' => '[' . config('app.BRAND') . '] - ' . $subject, 'attach' => $attach, 'filesName' => $filesName, ]); Mail::to($email) ->cc($user->email) ->queue($message); } else { $message = new SendFlyerFailed([ 'email' => $email, 'message' => $message, 'subject' => $subject, 'filesName' => $filesName, 'noExists' => $noExists ]); Mail::to($user->email) ->queue($message); } //end if return 'OK'; } /** * @param \Illuminate\Http\Request $request * @return void */ public function processOcr(Request $request) { // Instantiates a client. $imageAnnotator = new ImageAnnotatorClient([ 'credentials' => public_path() . '/credentials.json' ]); // The name of the image file to annotate. $fileName = 'test.jpg'; // Prepare the image to be annotated. $image = file_get_contents(public_path() . "/" . $fileName); // Performs label detection on the image file. $response = $imageAnnotator->textDetection($image); $labels = $response->getTextAnnotations(); foreach ($labels as $label) { echo $label->getDescription() . "
"; } } }