Your IP : 216.73.216.79


Current Path : /var/www/html/eform/frontend/queue/
Upload File :
Current File : /var/www/html/eform/frontend/queue/FileConversionJob.php

<?php 
namespace frontend\queue;

use yii\base\BaseObject;
use frontend\models\eform\FileConversion;
use GuzzleHttp\Psr7;
use GuzzleHttp\Client;
use Throwable;
use Yii;
use frontend\models\eform\EformApplicationAttachments;

class FileConversionJob extends BaseObject implements \yii\queue\JobInterface
{
    public $conversion_id;
    
    public function execute($queue)
    {   
        // find the record
        $file_conversion = FileConversion::findOne($this->conversion_id);
        
        try {
                $base_uri = Yii::$app->params['file_conversion']['base_uri'];
                $output_uri = Yii::$app->params['file_conversion']['ouput'];
                $client = new Client([
                    // Base URI is used with relative requests
                    'base_uri' => Yii::$app->params['file_conversion']['base_uri'],
                    // You can set any number of default request options.
                    'timeout'  => 360.0,
                ]);
        
                $response = $client->request('POST', '/upload', [
                    'multipart' => [
                        [
                            'name'     => 'data',
                            'contents' => $file_conversion->data
                        ],
                        [
                            'name'     => 'file',
                            'contents' => Psr7\Utils::tryFopen( getcwd() . '/www' . $file_conversion->file_path, 'r')
                        ],
                    ]
                ]);

                $body = $response->getBody();
                $body_object = json_decode($body->getContents());
                $file_output = $body_object->data->output;
                $output_full_uri = $base_uri . $output_uri . $file_output;
                $file_put_url = getcwd() . '/www' . $output_uri . $file_output;
                
                $this->download($file_put_url, $output_full_uri);


                $existing_attachment = EformApplicationAttachments::find()
                    ->where([
                            'AppGuid' => $file_conversion->app_guid,
                            'AttachmentType' => 1
                        ]
                    )
                    ->one();

                if(!empty($existing_attachment)) {
                    $application_attachment = new EformApplicationAttachments();
                    $application_attachment->AppGuid = '';
                    $application_attachment->OriginalFileName = $existing_attachment->OriginalFileName;
                    $application_attachment->AttachmentType = 3;
                    $application_attachment->ConvertedFromDocumentID = $existing_attachment->ID;
                    $application_attachment->FileName = $file_output;
                    $application_attachment->FileExtension =  pathinfo($file_output, PATHINFO_EXTENSION);
                    $application_attachment->FileHash = hash_file('sha256', $file_put_url);
                    $application_attachment->FileUrl = $file_put_url;
                    $application_attachment->SiteID = EformApplicationAttachments::SITEID;
                    $application_attachment->ListID = EformApplicationAttachments::LISTID;
                    $application_attachment->ListItemID = 0; //dont know where to get this of what this id serve for
                }

                $file_conversion->conversion_path = $output_uri  . $file_output;
                $file_conversion->response = $body->getContents();
                $file_conversion->status = 1;
                $file_conversion->save();
        
        } catch (Throwable $t) {
            $file_conversion = FileConversion::findOne($this->conversion_id);

            $file_conversion->exception = $t->getMessage() . ' | ' . $t->getLine() . getcwd();
            $file_conversion->status = -1;
            $file_conversion->save();
        }
    }

    public function download($put, $download) {
        file_put_contents($put, file_get_contents($download));
        return;
    }
}