Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions Controller/Adminhtml/LogFile/AbstractView.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php
declare(strict_types=1);
/**
* Copyright © 2022 TechNWeb, Inc. All rights reserved.
* See TNW_LICENSE.txt for license details.
*/

namespace TNW\Salesforce\Controller\Adminhtml\LogFile;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\Exception\FileSystemException;
use Magento\Framework\View\Result\PageFactory;
use Throwable;
use TNW\Salesforce\Model\Log\File;
use TNW\Salesforce\Model\Log\FileFactory;
use TNW\Salesforce\Service\Tools\Log\LoadFileData;

/**
* View log file base action.
*/
abstract class AbstractView extends Action
{
/** @var PageFactory */
private $resultPageFactory;

/** @var LoadFileData */
private $loadFileData;

/** @var FileFactory */
private $fileFactory;

/** @var File[] */
private $files;

/**
* @param Context $context
* @param PageFactory $resultPageFactory
* @param LoadFileData $loadFileData
* @param FileFactory $fileFactory
*/
public function __construct(
Context $context,
PageFactory $resultPageFactory,
LoadFileData $loadFileData,
FileFactory $fileFactory
) {
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
$this->loadFileData = $loadFileData;
$this->fileFactory = $fileFactory;
}

/**
* @inheritDoc
*/
public function execute()
{
$resultPage = $this->resultPageFactory->create();

try {
$this->initPageConfig($resultPage);
} catch (Throwable $exception) {
$this->messageManager->addErrorMessage($exception->getMessage());
$resultPage = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('*/*/index');
}

return $resultPage;
}

/**
* @param string $fileId
*
* @return File
* @throws FileSystemException
*/
protected function getFileModel(string $fileId): File
{
if (isset($this->files[$fileId])) {
return $this->files[$fileId];
}

$model = $this->fileFactory->create();
$this->loadFileData->execute($model, $fileId);
if (!$model->getId()) {
throw new FileSystemException(__('Requested log file %1 no longer exists.', $fileId));
}

$this->files[$fileId] = $model;

return $this->files[$fileId];
}

/**
* Setup page config.
*
* @param $resultPage
*/
abstract protected function initPageConfig($resultPage): void;
}
92 changes: 92 additions & 0 deletions Controller/Adminhtml/LogFile/File/Download.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<?php
declare(strict_types=1);
/**
* Copyright © 2022 TechNWeb, Inc. All rights reserved.
* See TNW_LICENSE.txt for license details.
*/

namespace TNW\Salesforce\Controller\Adminhtml\LogFile\File;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Action\HttpGetActionInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\Response\Http\FileFactory as FileResponseFactory;
use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\Exception\FileSystemException;
use Throwable;
use TNW\Salesforce\Model\Log\File;
use TNW\Salesforce\Model\Log\FileFactory;
use TNW\Salesforce\Service\Tools\Log\LoadFileData;

/**
* Log file download action.
*/
class Download extends Action implements HttpGetActionInterface
{
/** @var LoadFileData */
private $loadFileData;

/** @var FileResponseFactory */
private $fileResponseFactory;

/** @var FileFactory */
private $fileFactory;

/**
* @param Context $context
* @param FileResponseFactory $fileResponseFactory
* @param LoadFileData $loadFileData
* @param FileFactory $fileFactory
*/
public function __construct(
Context $context,
FileResponseFactory $fileResponseFactory,
LoadFileData $loadFileData,
FileFactory $fileFactory
) {
parent::__construct($context);
$this->loadFileData = $loadFileData;
$this->fileResponseFactory = $fileResponseFactory;
$this->fileFactory = $fileFactory;
}

/**
* @inheritDoc
*/
public function execute()
{
$fileId = (string)$this->getRequest()->getParam('id');

try {
$model = $this->getFileModel($fileId);
$content = [
'type' => 'filename',
'value' => $model->getRelativePath(),
];
$response = $this->fileResponseFactory->create($model->getName(), $content, DirectoryList::LOG);
} catch (Throwable $exception) {
$this->messageManager->addErrorMessage($exception->getMessage());
$response = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('*/*/index');
}

return $response;
}

/**
* @param string $fileId
*
* @return File
* @throws FileSystemException
*/
private function getFileModel(string $fileId): File
{
$model = $this->fileFactory->create();
$this->loadFileData->execute($model, $fileId);
if (!$model->getId()) {
throw new FileSystemException(__('Requested log file %1 no longer exists.', $fileId));
}

return $model;
}
}
108 changes: 108 additions & 0 deletions Controller/Adminhtml/LogFile/File/View.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php
declare(strict_types=1);
/**
* Copyright © 2022 TechNWeb, Inc. All rights reserved.
* See TNW_LICENSE.txt for license details.
*/

namespace TNW\Salesforce\Controller\Adminhtml\LogFile\File;

use Laminas\Http\Response;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Action\HttpPostActionInterface;
use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Escaper;
use Magento\Framework\Exception\FileSystemException;
use Throwable;
use TNW\Salesforce\Model\Log\FileFactory;
use TNW\Salesforce\Service\Tools\Log\GetFileContent;
use TNW\Salesforce\Service\Tools\Log\LoadFileData;

/**
* Log file view action.
*/
class View extends Action implements HttpPostActionInterface
{
/** @var JsonFactory */
private $jsonFactory;

/** @var GetFileContent */
private $getFileContent;

/** @var LoadFileData */
private $loadFileData;

/** @var FileFactory */
private $fileFactory;

/** @var Escaper */
private $escaper;

/**
* @param Context $context
* @param JsonFactory $jsonFactory
* @param GetFileContent $getFileContent
* @param LoadFileData $loadFileData
* @param FileFactory $fileFactory
* @param Escaper $escaper
*/
public function __construct(
Context $context,
JsonFactory $jsonFactory,
GetFileContent $getFileContent,
LoadFileData $loadFileData,
FileFactory $fileFactory,
Escaper $escaper
) {
parent::__construct($context);

$this->jsonFactory = $jsonFactory;
$this->getFileContent = $getFileContent;
$this->loadFileData = $loadFileData;
$this->fileFactory = $fileFactory;
$this->escaper = $escaper;
}

/**
* @inerhitDoc
*/
public function execute()
{
$request = $this->getRequest();
$result = $this->jsonFactory->create();
if (!$request->getParam('isAjax')) {
$message = __('Request to must be ajax only')->render();

return $result->setHttpResponseCode(Response::STATUS_CODE_501)->setJsonData($message);
}

$fileId = (string)$request->getParam('id');
$currentPage = (int)$request->getParam('page');
$currentPage++;

try {
$resultData = $this->getContent($fileId, $currentPage);
} catch (Throwable $exception) {
return $result->setHttpResponseCode(Response::STATUS_CODE_500)->setJsonData($exception->getMessage());
}

return $result->setData($resultData);
}

/**
* @param string $fileId
* @param int $page
*
* @return array
* @throws FileSystemException
*/
private function getContent(string $fileId, int $page): array
{
$file = $this->fileFactory->create();
$this->loadFileData->execute($file, $fileId);
$content = $this->getFileContent->execute($file->getAbsolutePath(), $page);

return ['content' => $this->escaper->escapeHtml($content)];
}
}
45 changes: 45 additions & 0 deletions Controller/Adminhtml/LogFile/Magento/Index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
/**
* Copyright © 2022 TechNWeb, Inc. All rights reserved.
* See TNW_LICENSE.txt for license details.
*/

namespace TNW\Salesforce\Controller\Adminhtml\LogFile\Magento;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

/**
* Magento log grid index page controller.
*/
class Index extends Action
{
public const ADMIN_RESOURCE = 'TNW_Salesforce::tools_magento_log';

/** @var PageFactory */
private $resultPageFactory;

/**
* @param Context $context
* @param PageFactory $resultPageFactory
*/
public function __construct(Context $context, PageFactory $resultPageFactory)
{
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}

/**
* @inheritDoc
*/
public function execute()
{
$resultPage = $this->resultPageFactory->create();
$resultPage->setActiveMenu('TNW_Salesforce::tools_magento_log');
$resultPage->getConfig()->getTitle()->prepend((__('Magento Log Files')));

return $resultPage;
}
}
30 changes: 30 additions & 0 deletions Controller/Adminhtml/LogFile/Magento/View.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
/**
* Copyright © 2022 TechNWeb, Inc. All rights reserved.
* See TNW_LICENSE.txt for license details.
*/

namespace TNW\Salesforce\Controller\Adminhtml\LogFile\Magento;

use Magento\Framework\Exception\FileSystemException;
use TNW\Salesforce\Controller\Adminhtml\LogFile\AbstractView;

/**
* View log file action.
*/
class View extends AbstractView
{
/**
* @param $resultPage
*
* @throws FileSystemException
*/
protected function initPageConfig($resultPage): void
{
$resultPage->setActiveMenu('TNW_Salesforce::tools_magento_log');
$fileId = (string)$this->getRequest()->getParam('id');
$file = $this->getFileModel($fileId);
$resultPage->getConfig()->getTitle()->prepend((__('View Magento Log File: %1', $file->getName())));
}
}
Loading