178 lines
5.5 KiB
PHP
Executable File
178 lines
5.5 KiB
PHP
Executable File
<?php
|
|
|
|
/**
|
|
* Olegnax BannerSlider
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to the Olegnax.com license that is
|
|
* available through the world-wide-web at this URL:
|
|
* https://www.olegnax.com/license
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* Do not edit or add to this file if you wish to upgrade this extension to newer
|
|
* version in the future.
|
|
*
|
|
* @category Olegnax
|
|
* @package Olegnax_BannerSlider
|
|
* @copyright Copyright (c) 2023 Olegnax (http://www.olegnax.com/)
|
|
* @license https://www.olegnax.com/license
|
|
*/
|
|
namespace Olegnax\BannerSlider\Controller\Adminhtml\Slides;
|
|
|
|
use Exception;
|
|
use Magento\Backend\App\Action;
|
|
use Magento\Backend\App\Action\Context;
|
|
use Magento\Framework\Controller\ResultInterface;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\File\Uploader;
|
|
use Magento\Framework\View\Result\PageFactory;
|
|
use Olegnax\BannerSlider\Helper\Image;
|
|
use Olegnax\BannerSlider\Model\Slides;
|
|
|
|
class Save extends Action {
|
|
const ADMIN_RESOURCE = 'Olegnax_BannerSlider::Slide_Index';
|
|
const IMAGE_FOLDER = 'bannerslider/';
|
|
|
|
protected $directory;
|
|
protected $helperImage;
|
|
|
|
/**
|
|
* @param Context $context
|
|
* @param PageFactory $resultPageFactory
|
|
*/
|
|
public function __construct(
|
|
Context $context, PageFactory $resultPageFactory,
|
|
Image $helperImage
|
|
) {
|
|
$this->helperImage = $helperImage;
|
|
parent::__construct( $context );
|
|
}
|
|
|
|
/**
|
|
* Save action
|
|
*
|
|
* @return ResultInterface
|
|
*/
|
|
public function execute() {
|
|
$data = $this->getRequest()->getPostValue();
|
|
$resultRedirect = $this->resultRedirectFactory->create();
|
|
$id = $this->getRequest()->getParam( 'slider_id' );
|
|
$model = $this->_objectManager->create( Slides::class );
|
|
$image_fields = [
|
|
'image',
|
|
'imageX2',
|
|
];
|
|
$need_delete = [
|
|
];
|
|
foreach ( $image_fields as $fields ) {
|
|
if ( array_key_exists( $fields, $data ) && is_array( $data[ $fields ] ) ) {
|
|
if ( isset( $data[ $fields ][ 'delete' ] ) ) {
|
|
$need_delete[ $fields ] = $data[ $fields ][ 'value' ];
|
|
}
|
|
$data[ $fields ] = $data[ $fields ][ 'value' ];
|
|
} else {
|
|
$data[ $fields ] = '';
|
|
}
|
|
}
|
|
$model->setData( $data );
|
|
$model->save();
|
|
try {
|
|
foreach ( $image_fields as $fields ) {
|
|
if ( array_key_exists( $fields, $need_delete ) ) {
|
|
$this->removeImages( $fields, $model );
|
|
} else {
|
|
$this->saveImages( $fields, $model, $data[ $fields ] );
|
|
}
|
|
}
|
|
$model->save();
|
|
|
|
$this->messageManager->addSuccess( __( 'Banner slide has been saved.' ) );
|
|
$this->messageManager->addWarningMessage( __( 'Banner slide has been changed. Please go to Cache Management and Flush Magento Cache.' ) );
|
|
if ( $this->getRequest()->getParam( 'back' ) ) {
|
|
return $resultRedirect->setPath( '*/*/edit', [
|
|
'id' => $model->getId(),
|
|
'_current' => true ] );
|
|
}
|
|
$this->_objectManager->get( 'Magento\Backend\Model\Session' )->setFormData( false );
|
|
return $resultRedirect->setPath( '*/*/' );
|
|
} catch ( Exception $e ) {
|
|
throw new \Magento\Framework\Exception\LocalizedException( __( '%1', $e->getMessage() ) );
|
|
$this->messageManager->addException( $e, __( 'Something went wrong.' ) );
|
|
}
|
|
$this->_getSession()->setFormData( $data );
|
|
return $resultRedirect->setPath( '*/*/edit', [
|
|
'id' => $id ] );
|
|
}
|
|
|
|
protected function imagePath( $subFolder = '', $prefixFolder = '' ) {
|
|
$path = self::IMAGE_FOLDER;
|
|
if ( !empty( $subFolder ) ) {
|
|
$path .= $subFolder . '/';
|
|
}
|
|
if ( !empty( $prefixFolder ) ) {
|
|
$path = $prefixFolder . $path;
|
|
}
|
|
return $path;
|
|
}
|
|
|
|
protected function mediaPath() {
|
|
if ( !$this->directory ) {
|
|
$this->directory = $this->_objectManager->get( '\Magento\Framework\Filesystem\DirectoryList' );
|
|
}
|
|
return $this->directory->getRoot() . '/pub/media/';
|
|
}
|
|
|
|
protected function saveImages( string $fieldId, $model, $currentValue = '' ) {
|
|
$saveDirectory = $this->imagePath( $model->getId(), $this->mediaPath() );
|
|
$result = null;
|
|
$filename = '';
|
|
try {
|
|
$uploader = new \Magento\MediaStorage\Model\File\Uploader(
|
|
$fieldId, $this->_objectManager->create( 'Magento\MediaStorage\Helper\File\Storage\Database' ), $this->_objectManager->create( 'Magento\MediaStorage\Helper\File\Storage' ), $this->_objectManager->create( 'Magento\MediaStorage\Model\File\Validator\NotProtectedExtension' )
|
|
);
|
|
$uploader->setAllowCreateFolders( true );
|
|
$uploader->setAllowRenameFiles( true );
|
|
$uploader->setAllowedExtensions( [
|
|
'jpeg',
|
|
'jpg',
|
|
'png' ] );
|
|
$this->removeImages( $fieldId, $model );
|
|
$result = $uploader->save( $saveDirectory );
|
|
$filename = $uploader->getUploadedFileName();
|
|
} catch ( Exception $e ) {
|
|
if ( in_array( $fieldId, [
|
|
'image' ] ) && $e->getCode() != Uploader::TMP_NAME_EMPTY ) {
|
|
$this->messageManager->addException( $e, $e->getMessage() );
|
|
}
|
|
}
|
|
|
|
if ( $result ) {
|
|
$model->setData( $fieldId, $this->imagePath( $model->getId() ) . $filename );
|
|
} else {
|
|
$model->setData( $fieldId, $currentValue );
|
|
}
|
|
}
|
|
|
|
protected function removeImages( string $fieldId, $model, $currentValue = '' ) {
|
|
$image = $model->getData( $fieldId );
|
|
if ( !empty( $image ) ) {
|
|
$this->helperImage->removeResized( $image );
|
|
$path = $this->mediaPath() . $image;
|
|
if ( file_exists( $path ) && is_file( $path ) ) {
|
|
@unlink( $path );
|
|
$model->setData( $fieldId, $currentValue );
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected function _isAllowed() {
|
|
return $this->_authorization->isAllowed('Olegnax_BannerSlider::Slide_New') || $this->_authorization->isAllowed('Olegnax_BannerSlider::Slide_Edit');
|
|
}
|
|
|
|
}
|