url = env('WEBHOOK_CORE_URL') . '/webhooks'; $this->secret = env('WEBHOOK_CORE_SECRET'); $this->id = $id; $this->directoryPath = $directoryPath; $this->hasFailed = $hasFailed; } /** * Execute the job. * * @return void * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException */ public function handle() { $content = []; // Directory exists, send content. if ($this->directoryPath && ! $this->hasFailed) { $this->storage = Storage::disk('local'); // @TODO Check if the file exists multiple times? if ( ! $this->storage->exists($this->directoryPath)) { throw new \Exception('File does not exist yet.'); } $content = $this->getContent(); } $sent = $this->sendTheData($content); // if ($this->directoryPath && $sent) { if ($this->directoryPath) { if ( ! $this->storage) { $this->storage = Storage::disk('local'); } $this->storage->deleteDirectory($this->directoryPath); } } public function failed() { if ($this->directoryPath) { if ( ! $this->storage) { $this->storage = Storage::disk('local'); } $this->storage->delete($this->directoryPath); } } /** * Send the data to the core through webhooks * * @param $content * @return bool */ protected function sendTheData(array $content) { try { WebhookCall::create() ->url($this->url) ->payload(['data' => [ 'id' => $this->id, 'content' => $content, 'status' => count($content) > 0 ? 'success' : 'fail', ]]) ->useSecret($this->secret) ->dispatch(); return true; } catch (\Exception $exception) { Log::error('SendToCore@sendTheData: ' . $exception->getMessage()); return false; } } protected function getContent() { $document = $this->storage->get("$this->directoryPath/document.md"); $document = $this->encodeContent($document); $images = []; $allFiles = $this->storage->allFiles($this->directoryPath); foreach ($allFiles as $file) { // @TODO We are using this check in the 'PDFConvertor' file, refactor and improve. if (in_array(pathinfo($file, PATHINFO_EXTENSION), ['jpg', 'png'])) { $name = pathinfo($file, PATHINFO_FILENAME); $type = pathinfo($file, PATHINFO_EXTENSION); $images[] = [ 'name' => $name, 'type' => $type, 'contents' => 'data:image/' . $type . ';base64,' . base64_encode($this->storage->get($file)), ]; } } return [ 'document' => $document, 'images' => $images, ]; } protected function encodeContent($content) { $encoding = mb_detect_encoding($content, 'UTF-8, ISO-8859-1, WINDOWS-1252, WINDOWS-1251', true); if ($encoding != 'UTF-8') { $content = iconv($encoding, 'UTF-8//IGNORE', $content); } return $content; } }