Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/app/code/Chronopost/Chronorelais/Controller/Adminhtml/Sales/Import/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/old/app/code/Chronopost/Chronorelais/Controller/Adminhtml/Sales/Import/Save.php
<?php
/**
 * Chronopost
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade this extension to newer
 * version in the future.
 *
 * @category  Chronopost
 * @package   Chronopost_Chronorelais
 * @copyright Copyright (c) 2021 Chronopost
 */
declare(strict_types=1);

namespace Chronopost\Chronorelais\Controller\Adminhtml\Sales\Import;

use Chronopost\Chronorelais\Helper\Shipment;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Chronopost\Chronorelais\Helper\Data as HelperData;
use Chronopost\Chronorelais\Helper\Shipment as HelperShipment;
use Magento\Framework\Controller\Result\Redirect;
use Magento\Framework\File\Csv;
use Magento\Sales\Model\OrderFactory;
use Magento\Framework\HTTP\PhpEnvironment\Request as RequestPhp;
use \Magento\Framework\App\Config\Storage\WriterInterface;
use \Magento\Sales\Model\Order\Shipment as OrderShipment;

/**
 * Class Save
 *
 * @package Chronopost\Chronorelais\Controller\Adminhtml\Sales\Import
 */
class Save extends Action
{

    /**
     * @var HelperData
     */
    protected $helperData;

    /**
     * @var HelperShipment
     */
    protected $helperShipment;

    /**
     * @var Csv
     */
    protected $fileCsv;

    /**
     * @var OrderFactory
     */
    protected $orderFactory;

    /**
     * @var RequestPhp
     */
    protected $requestPhp;

    /**
     * @var WriterInterface
     */
    protected $configWriter;

    /**
     * @var OrderShipment
     */
    protected $shipment;

    /**
     * @param Context         $context
     * @param HelperShipment  $helperShipment
     * @param HelperData      $helperData
     * @param Csv             $csv
     * @param OrderFactory    $orderFactory
     * @param RequestPhp      $requestPhp
     * @param WriterInterface $configWriter
     * @param Shipment        $shipment
     */
    public function __construct(
        Context $context,
        HelperShipment $helperShipment,
        HelperData $helperData,
        Csv $csv,
        OrderFactory $orderFactory,
        RequestPhp $requestPhp,
        WriterInterface $configWriter,
        Shipment $shipment
    ) {
        parent::__construct($context);
        $this->helperData = $helperData;
        $this->helperShipment = $helperShipment;
        $this->fileCsv = $csv;
        $this->orderFactory = $orderFactory;
        $this->requestPhp = $requestPhp;
        $this->configWriter = $configWriter;
        $this->shipment = $shipment;
    }

    /**
     * Save import action
     *
     * @return Redirect
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     */
    public function execute()
    {
        $resultRedirect = $this->resultRedirectFactory->create();

        try {
            $chronoFile = $this->requestPhp->getFiles('import_chronorelais_file');

            if ($this->getRequest()->getParams() && $chronoFile && !empty($chronoFile['tmp_name'])) {
                $trackingTitle = $this->requestPhp->getPost('import_chronorelais_tracking_title');
                $numberColumnParcel = $this->requestPhp->getPost('import_chronorelais_column_parcel');
                $numberColumnOrder = $this->requestPhp->getPost('import_chronorelais_column_order');

                if (!$trackingTitle) {
                    throw new \Exception((string)__('Please enter a title for the tracking'));
                }

                if ($numberColumnParcel === '' || !is_numeric($numberColumnParcel)) {
                    throw new \Exception((string)__('Please fill in a column number containing the package number.'));
                }

                if ($numberColumnOrder === '' || !is_numeric($numberColumnOrder)) {
                    throw new \Exception(
                        (string)__('Please fill in a column number containing the order number.')
                    );
                }

                $this->configWriter->save('chronorelais/import/default_tracking_title', $trackingTitle);
                $this->configWriter->save('chronopost/import/number_column_parcel', $numberColumnParcel);
                $this->configWriter->save('chronopost/import/number_column_order', $numberColumnOrder);

                $numberColumnParcel--;
                $numberColumnOrder--;

                $result = $this->importChronorelaisFile(
                    $chronoFile['tmp_name'],
                    $trackingTitle,
                    $numberColumnParcel,
                    $numberColumnOrder
                );

                if ($result) {
                    $this->messageManager->addSuccessMessage(__('The parcels have been imported'));
                }
            } else {
                throw new \Exception((string)__('Please select a file'));
            }
        } catch (\Exception $exception) {
            $this->messageManager->addErrorMessage(__($exception->getMessage()));
        }

        $resultRedirect->setPath('chronorelais/sales/import');

        return $resultRedirect;
    }

    /**
     * Import file
     *
     * @param string $fileName
     * @param string $trackingTitle
     * @param int    $numberColumnParcel
     * @param int    $numberColumnOrder
     *
     * @return bool
     * @throws \Exception
     * @SuppressWarnings("Unused")
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     * @SuppressWarnings(PHPMD.NPathComplexity)
     */
    protected function importChronorelaisFile(
        string $fileName,
        string $trackingTitle,
        int $numberColumnParcel,
        int $numberColumnOrder
    ): bool {
        ini_set('auto_detect_line_endings', '1');
        $sendEmail = $this->helperData->getConfig('chronorelais/import/send_mail');
        $comment = $this->helperData->getConfig('chronorelais/import/shipping_comment');
        $includeComment = $this->helperData->getConfig('chronorelais/import/include_comment');

        $csvData = $this->fileCsv->setDelimiter(';')->getData($fileName);
        foreach ($csvData as $key => $data) {
            if (!is_numeric($data[$numberColumnOrder])) {
                continue;
            }

            if (count($data) <= 1 && $data[0] === '') {
                continue;
            }

            if (!isset($data[$numberColumnOrder], $data[$numberColumnParcel])) {
                continue;
            }

            $orderId = $data[$numberColumnOrder];
            $trackingNumbers = $data[$numberColumnParcel];

            $order = $this->orderFactory->create()->loadByIncrementId($orderId);
            if (!$order->getId()) {
                $this->messageManager->addErrorMessage(__('The order %1 does not exist', $orderId));
                continue;
            }

            try {
                $shippingMethod = $this->helperData->getShippingMethodeCode($order->getShippingMethod());

                $popup = 0;
                $carrierCode = 'custom';
                if ($this->helperData->isChronoMethod($shippingMethod)) {
                    $carrierCode = $shippingMethod;
                    $popup = 1;
                }

                $shipmentCreated = false;
                if ($trackingNumbers) {
                    $trackingNumbers = explode(',', trim($trackingNumbers, '[]'));
                    foreach ($trackingNumbers as $trackingNumber) {
                        $shipmentsCollection = $order->getShipmentsCollection();
                        $trackingNumber = trim($trackingNumber);

                        $trackData = [
                            'track_number'    => $trackingNumber,
                            'carrier'         => ucwords($carrierCode),
                            'carrier_code'    => $carrierCode,
                            'title'           => $trackingTitle,
                            'popup'           => $popup,
                            'send_mail'       => $sendEmail,
                            'comment'         => $comment,
                            'include_comment' => $includeComment
                        ];

                        if ($shipmentCreated || count($shipmentsCollection) > 0) {
                            if (!$shipmentCreated) {
                                $this->shipment = $shipmentsCollection->getFirstItem();
                            }

                            $this->helperShipment->createTrackToShipment($this->shipment, $trackData, []);
                        } else {
                            $this->shipment = $this->helperShipment->createNewShipment(
                                $order,
                                [],
                                $trackData,
                                [],
                                1,
                                true
                            );
                            $shipmentCreated = true;
                        }

                        $this->messageManager->addSuccessMessage(
                            __(
                                'The tracking number %1 has been created for order %2',
                                $trackingNumber,
                                $orderId
                            )
                        );
                    }
                }
            } catch (\Exception $exception) {
                $this->messageManager->addErrorMessage($exception->getMessage());
            }
        }

        return $this->messageManager->getMessages()->getCount() === 0;
    }

    /**
     * Check is the current user is allowed to access this section
     *
     * @return bool
     */
    protected function _isAllowed()
    {
        return $this->_authorization->isAllowed('Chronopost_Chronorelais::sales');
    }
}

Spamworldpro Mini