MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/.trash/app.1/Models/Document.php
<?php

/**
 * DocumentModel class file
 *
 * PHP Version 7.2
 *
 * @category Model
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

namespace App\Models;

use DB ;
use Illuminate\Database\Eloquent\Model;
use App\Models\DocumentService;
use App\Models\DocumentPartService;

/**
 * DocumentModel class
 *
 * The class manage Document related queries
 *
 * @category DocumentModel
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

class Document extends Model
{
    
    public $table = "documents";
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    public $fillable = ['document_status_id','approval_status_id','file_title','file_name',
        'word_count','page_count','client_code_id',
        'client_charge_code','requester_name','from_language_id','to_language_id',
        'requested_delivery','committed_delivery','start_datetime','context_id',
        'include_header','include_footer','include_notes','include_non_words',
        'client_comment',
    ];
    
    /**
     * Services function return services that belong to the specified document.
     *
     * @param  void
     * @return App\Models\Service
     */
    public function services()
    {
        return $this->belongsToMany('App\Models\Service', 'document_services', 'document_id', 'service_id');
    }

    /**
     * Services function return services that belong to the specified document.
     *
     * @param  void
     * @return App\Models\Service
     */
    public function references()
    {
        return $this->hasMany('App\Models\DocumentReference', 'document_id');
    }

    /**
     * GetDocument function get the list of document of specified id
     * and return the document list .
     *
     * @param  int documentId
     * @return App\Models\Document
     */
    public static function getDocument($documentId)
    {
        return Document::
        select(
            "documents.*",
            'from_languages.language_l as from_language',
            'to_languages.language_l as to_language',
            'from_languages.language_s as from_language_s',
            'to_languages.language_s as to_language_s',
            'document_contexts.context',
            'clients.code as client_code',
            'document_status.status_name',
            DB::raw("
                DATE_FORMAT(documents.start_datetime, '%d-%m-%Y %h:%i %p') as start_datetime_dmy,
                DATE_FORMAT(documents.committed_delivery, '%d-%m-%Y %h:%i %p') as committed_delivery_dmy,
                DATE_FORMAT(documents.requested_delivery, '%d-%m-%Y %h:%i %p') as requested_delivery_dmy,
                DATE_FORMAT(documents.requested_delivery,'%Y-%m-%dT%TZ') as requested_delivery,
                DATE_FORMAT(documents.committed_delivery,'%Y-%m-%dT%TZ') as committed_delivery,
                DATE_FORMAT(documents.start_datetime,'%Y-%m-%dT%TZ') as start_datetime,
                GROUP_CONCAT(DISTINCT services.service_s ORDER BY services.id  SEPARATOR ' > ') as service_name,
                GROUP_CONCAT(DISTINCT services.id ORDER BY services.id  SEPARATOR ',') as service_ids
            ")
        )
        ->leftJoin('document_status', 'document_status.id', '=', 'documents.document_status_id')
        ->leftJoin('languages as from_languages', 'from_languages.id', '=', 'documents.from_language_id')
        ->leftJoin('languages as to_languages', 'to_languages.id', '=', 'documents.to_language_id')
        ->leftJoin('document_contexts', 'document_contexts.id', '=', 'documents.context_id')
        ->leftJoin('clients', 'clients.id', '=', 'documents.client_code_id')
        ->leftJoin('document_services', 'document_services.document_id', '=', 'documents.id')
        ->leftJoin('services', 'services.id', '=', 'document_services.service_id')
        ->where('documents.id', $documentId)->groupBy('documents.id')->first();
    }


    /**
     * GetDocuments function gets the list of all the documents from storage
     * and return the document list .
     *
     * @param  array request
     * @return App\Models\Document
     */
    public static function getDocuments($request)
    {
        $page = 0 ;
        if ($request->page) {
            $page = $request->page ;
        }


        $documents = Document::
        select(
            "documents.*",
            'from_languages.language_l as from_language',
            'to_languages.language_l as to_language',
            'from_languages.language_s as from_language_s',
            'to_languages.language_s as to_language_s',
            'clients.code as client_code',
            'document_contexts.context',
            'document_status.status_name',
            DB::raw(
                "SUBSTRING(from_languages.language_l, 1, 1) as language_in, 
                SUBSTRING(to_languages.language_l, 1, 1) as language_out,
                DATE_FORMAT(documents.start_datetime, '%d-%m-%Y %h:%i %p') as start_datetime_dmy,
                DATE_FORMAT(documents.committed_delivery, '%d-%m-%Y %h:%i %p') as committed_delivery_dmy,
                DATE_FORMAT(documents.requested_delivery, '%d-%m-%Y %h:%i %p') as requested_delivery_dmy,
                count(document_parts.id) as partCount,
                GROUP_CONCAT(DISTINCT services.service_s ORDER BY services.id  SEPARATOR ' > ') as service_name,
                TIMESTAMPDIFF(SECOND,now(),documents.start_datetime)*1000 as time_remaining"
            )
        )
            ->leftJoin('languages as from_languages', 'from_languages.id', '=', 'documents.from_language_id')
            ->leftJoin('languages as to_languages', 'to_languages.id', '=', 'documents.to_language_id')
            ->leftJoin('document_contexts', 'document_contexts.id', '=', 'documents.context_id')
            ->leftJoin('clients', 'clients.id', '=', 'documents.client_code_id')
            ->leftJoin('document_status', 'document_status.id', '=', 'documents.document_status_id')
            ->leftJoin('document_parts', 'document_parts.document_id', '=', 'documents.id')
            ->leftJoin('document_services', 'document_services.document_id', '=', 'documents.id')
            ->leftJoin('services', 'services.id', '=', 'document_services.service_id')
            ;
        if ($request->search_by && $request->search_by != '') {
            $searchBy = $request->search_by ;
            $documents = $documents
                ->where('documents.file_title', 'like', "%$searchBy%")
                ->orWhere('documents.file_name', 'like', "%$searchBy%")
                ->orWhere('documents.client_code_id', 'like', "%$searchBy%")
                ->orWhere('documents.client_charge_code', 'like', "%$searchBy%");
        }
        $documentsResult = $documents->groupBy('documents.id')->orderBy('documents.so', 'DESC')
            ->orderBy('documents.id', 'DESC')->offset($page * 10)->limit(10)->get();
        $documents = [];
        foreach ($documentsResult as $document) {
            $documentId = $document->id;
            $services = DocumentService::
                select("services.*")
                ->join('services', 'services.id', '=', 'document_services.service_id')
                ->where('document_services.document_id', $document->id)->get();
            $servicesCol = 'parts.id as part_id,parts.part_name';
            foreach ($services as $service) {
                $serviceId = $service->id;
                /*$servicesCol = $servicesCol . ",MAX(CASE WHEN document_services.service_id =
                  $serviceId and  document_services.document_id = $documentId THEN
                  document_part_services.delivery_datetime END) service_$serviceId";*/
                $servicesCol = $servicesCol . ",MAX(CASE WHEN document_services.service_id
                = $serviceId and  document_services.document_id = $documentId THEN
                DATE_FORMAT(document_part_services.delivery_datetime, '%d-%m-%Y %h:%i %p') END) service_$serviceId";
            }
            $partServices = DocumentPartService::select(DB::raw("$servicesCol"))
                ->join('document_parts', 'document_parts.id', '=', 'document_part_services.document_part_id')
                ->join('parts', 'parts.id', '=', 'document_parts.part_id')
                ->join('document_services', 'document_services.id', '=', 'document_part_services.document_service_id')
                ->where('document_services.document_id', $document->id)
                ->groupBy('document_part_services.document_part_id')->orderBy('parts.id', 'ASC')->get();
            $document['services'] = $services;
            $document['partServices'] = $partServices;
            $documents[] = $document;
        }

        return $documents;
    }

    /**
     * apiPostWordCount function call api word_count
     * and return the document list .
     *
     * @param array request
     * return api word_count responde json
     */
    public static function apiPostWordCount($data)
    {
        $curl = curl_init();
        $sourceLanguage = "english";
        $targetLanguage = "english";
        $header = $data['include_header'] == 1 ? "true" : "false";
        $footer = $data['include_footer'] == 1 ? "true" : "false";
        $notes = $data['include_notes'] == 1 ? "true" : "false";
        $nonWords = $data['include_non_words'] == 1 ? "true" : "false";
        $s3Path = $data['s3Path'];

        $postData = [
            'source_language' => $sourceLanguage,
            'target_language' => $targetLanguage,
            's3_path'   => $s3Path,
            'include_counts'   => 
            [
                'header'   => $header,
                'footer'   => $footer,
                'notes'   => $notes,
                'non_words'   => $nonWords,
            ],
        ];
        $postData = json_encode($postData);

        $id = $data['id'] ;
        curl_setopt_array(
            $curl,
            array(
            CURLOPT_URL => env('API_WORD_COUNT') . "/word_count/$id?assignment_id=$id",
            CURLOPT_HEADER => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => $postData,
            CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json',
                    'Content-Length: ' . strlen($postData)
                ),
            )
        );
        $response = curl_exec($curl);
        $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
        return json_decode($httpcode);
    }

    /**
     * apiPostWordCount function call api word_count
     * and return the document list .
     *
     * @param array request
     * return api word_count responde json
     */
    public static function apiPutWordCount($data)
    {
        $curl = curl_init();
        $sourceLanguage = "english";
        $targetLanguage = "english";
        $header = $data['include_header'] == 1 ? "true" : "false";
        $footer = $data['include_footer'] == 1 ? "true" : "false";
        $notes = $data['include_notes'] == 1 ? "true" : "false";
        $nonWords = $data['include_non_words'] == 1 ? "true" : "false";
        $s3Path = $data['s3Path'];
        $id = $data['id'] ;
        curl_setopt_array(
            $curl,
            array(
            CURLOPT_URL => env('API_WORD_COUNT') . "/word_count/$id?assignment_id=$id",
            CURLOPT_HEADER => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "PUT",
            CURLOPT_POSTFIELDS => "{\r\n  \"source_language\": \"$sourceLanguage\",\r\n  
          \"target_language\": \"$targetLanguage\",\r\n  \"s3_path\": \"$s3Path\",\r\n 
          \"include_counts\": {\r\n    \"header\": $header,\r\n    \"footer\": $footer,\r\n   
          \"notes\": $notes,\r\n    \"non_words\": $nonWords\r\n  }\r\n}",
            CURLOPT_HTTPHEADER => array(
            "Content-Type: text/plain"
            ),
            )
        );
        $response = curl_exec($curl);
        $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
        return json_decode($httpcode);
    }

     /**
      * apiPostWordCount function call api word_count
      * and return the document list .
      *
      * @param array request
      * return api word_count responde json
      */

    public static function apiGetSplitter($data)
    {
        $curl = curl_init();
        curl_setopt_array(
            $curl,
            array(
            CURLOPT_URL => env('API_SPLITTER') . "/splitter/" . $data['id'],
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            )
        );
        // $response = curl_exec($curl);
        // curl_close($curl);
        // return json_decode($response);
        $response = curl_exec($curl);
        if (empty($response)) 
        {
            curl_close($curl);
            return json_decode(['HTTP_CODE'=>404]);
             //die("No HTTP result was returned");
        } 
        else 
        {
            $info = curl_getinfo($curl);
            curl_close($curl); 
            if (empty($info['http_code'])) 
            {
                return json_decode(['HTTP_CODE'=>404]);
                //die("No HTTP code was returned");
            } 
            else 
            {
                $data = json_decode($response);
                $data->HTTP_CODE = $info['http_code'];
                return $data;
            }
        }
    }

    /**
     * apiPostPublish function call api publish
     * and return the assignment details.
     *
     * @param array request
     * return api publish responde json
     */
    public static function apiPostPublish($data,$deliveryPlan)
    {
        $curl = curl_init();
        $postData = [
            'context' => $data['context_id'],
            'client_code' => $data['client_code_id'],
            'client_charge_code'   => $data['client_charge_code'],
            'committed_delivery'   => $data['committed_delivery'],
            'delivery_plan'   => $deliveryPlan
        ];
        $postData = json_encode($postData);
        $id = $data['id'] ;
        curl_setopt_array(
            $curl,
            array(
            CURLOPT_URL => env('API_PUBLISH') . "/publish/$id?assignment_id=$id",
            CURLOPT_HEADER => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => $postData,
          //   CURLOPT_POSTFIELDS => "{\r\n  \"context\": \"$context\",\r\n  
          // \"client_code\": \"$clientCode\",\r\n  \"client_charge_code\": \"$clientChargeCode\",\r\n  \"committed_delivery\": $committedDelivery,\r\n
          // \"delivery_plan\": \"$deliveryPlan\" \r\n}",
           CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json',
                    'Content-Length: ' . strlen($postData)
                ),
            )
        );
        $response = curl_exec($curl);
        $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
        return json_decode($httpcode);
    }
}