* @link http://www.oxidmodule.com */ namespace D3\Watermark\Controllers\Admin; use D3\ModCfg\Application\Model\d3filesystem; use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main; use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; use D3\ModCfg\Application\Model\Log\d3log; use D3\ModCfg\Application\Model\Maintenance\d3clrtmp; use Doctrine\DBAL\DBALException; use Intervention\Image\ImageManagerStatic; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Exception\StandardException as StandardException; use OxidEsales\Eshop\Core\Registry as Registry; use OxidEsales\Eshop\Core\Request; use OxidEsales\Eshop\Core\UtilsView; class d3_cfg_watermark_Main extends d3_cfg_mod_main { protected $_sThisTemplate = 'd3_cfg_watermark_main.tpl'; protected $_sModId = 'd3_watermark'; protected $_sMenuItemTitle = 'd3mxwatermark'; protected $_sMenuSubItemTitle = 'd3mxwatermark_settings'; protected $_sWatermarkName = 'd3_watermark'; protected $_sHelpLinkMLAdd = 'D3_WATERMARK_MAIN_HELPLINK'; protected $_blFailUpload = false; protected $_blNewWatermark = false; protected $_aAllowExtension = array("gif", "jpg", "png"); // protected $_blHasDebugSwitch = false; // protected $_blHasTestModeSwitch = false; // protected $_sDebugHelpTextIdent = 'D3_CFG_MOD_GENERAL_DEBUGACTIVE_DESC'; // protected $_sTestModeHelpTextIdent = 'D3_CFG_MOD_GENERAL_TESTMODEACTIVE_DESC'; /** * @var d3clrtmp */ public $oClrTmp; /** * @return string * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function render() { //Fehler beim Upload? $this->addTplParam("isfailupload", $this->_blFailUpload); $this->addTplParam("isNewWatermarkAdded", $this->getHasNewWatermarkPicture()); $this->addTplParam("sNewSettingsMessage", 'D3_WATERMARK_NEW_WATERMARKPICTURE'); $this->setHasNewWatermarkPicture(); return parent::render(); } /** * @param bool $blNew */ public function setHasNewWatermarkPicture($blNew = false) { $this->_blNewWatermark = $blNew; } /** * @return bool */ public function getHasNewWatermarkPicture() { return $this->_blNewWatermark; } public function save() { $this->_savePicture(); $generellSettings = Registry::get(Request::class)->getRequestEscapedParameter('value'); $this->d3GetSet()->d3getLog()->log( d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, "save generell settings via parent call", "settings: " . var_export($generellSettings, true) ); parent::save(); return; } /** * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ protected function _savePicture() { $sFilename = $_FILES['imagefile']['name']; if (false == empty($sFilename)) { /** @var d3filesystem $oFS */ $oFS = oxNew(d3filesystem::class); $aFile = $oFS->splitFilename($sFilename); $sCompareExtension = strtolower($aFile['ext']); if (false == in_array($sCompareExtension, $this->_aAllowExtension)) { $this->d3GetSet()->d3getLog()->log( d3log::ERROR, __CLASS__, __FUNCTION__, __LINE__, "wrong file extension", "upload failed for file " . $sFilename . "\n set fail upload and return" ); $this->_blFailUpload = 11; return false; } $sFileName = $this->getWatermarkName($sFilename); $sDest = $this->getConfig()->getImageDir($this->isAdmin()) . $sFileName; // ist aktuell immer out/admin/img/d3_watermark.png if (@copy($_FILES['imagefile']['tmp_name'], $sDest)) { if (move_uploaded_file($_FILES['imagefile']['tmp_name'], $sDest)) { $sType = $this->_createWMIcon($sDest, $sFileName); $this->d3GetSet()->setValue('sWaterMark_FileName', $sFileName); $this->d3GetSet()->setValue('sWaterMark_FileType', $sType); $this->setHasNewWatermarkPicture(true); $this->d3GetSet()->d3getLog()->log( d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, "new file is saved", "file is saved to " . $sDest ); // clear cached icon, show new watermark pic in admin } } } else { $this->d3GetSet()->d3getLog()->log( d3log::DEBUG, __CLASS__, __FUNCTION__, __LINE__, "no new file found", var_export($sFilename, true) ); } return true; } /** * @param $sSourceImage * @param $sFileName * * @return mixed * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ protected function _createWMIcon($sSourceImage, $sFileName) { list($width, $height, $type) = getimagesize($sSourceImage); $pDestImage = null; $pSourceImage = null; $iNewWidth = 100; $iFactor = $width / $iNewWidth; $iNewHeight = round($height / $iFactor); $sIcoFileName = $this->getWatermarkName($sFileName, '_ico'); $sDestinationImage = $this->getConfig()->getImageDir(1) . $sIcoFileName; ImageManagerStatic::make($sSourceImage) ->resize($iNewWidth, $iNewHeight) ->save($sDestinationImage); $this->d3GetSet()->setValue('sWaterMark_IcoFileName', $sIcoFileName); return $type; } /** * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function d3deleteAllGeneratedAllPictures() { /** @var $oClrTmp d3clrtmp */ $oClrTmp = $this->_getClrTmp(); $oClrTmp->clearGeneratedAllImgs(); Registry::get(UtilsView::class)->addErrorToDisplay( 'D3_WATERMARK_CLRTMP_GENIMGS_SUCC'); } /** * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function d3deleteAllGeneratedProductPictures() { /** @var $oClrTmp d3clrtmp */ $oClrTmp = $this->_getClrTmp(); $oClrTmp->clearGeneratedProductImgs(); Registry::get(UtilsView::class)->addErrorToDisplay( 'D3_WATERMARK_CLRTMP_GENIMGS_SUCC'); } /** * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function d3deleteAllGeneratedCategoryPictures() { /** @var $oClrTmp d3clrtmp */ $oClrTmp = $this->_getClrTmp(); $oClrTmp->clearGeneratedCategoryImgs(); Registry::get(UtilsView::class)->addErrorToDisplay( 'D3_WATERMARK_CLRTMP_GENIMGS_SUCC'); } /** * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function d3deleteAllGeneratedManufacturerPictures() { /** @var $oClrTmp d3clrtmp */ $oClrTmp = $this->_getClrTmp(); $oClrTmp->clearGeneratedManufacturerImgs(); Registry::get(UtilsView::class)->addErrorToDisplay( 'D3_WATERMARK_CLRTMP_GENIMGS_SUCC'); } /** * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function d3deleteAllGeneratedVendorPictures() { /** @var $oClrTmp d3clrtmp */ $oClrTmp = $this->_getClrTmp(); $oClrTmp->clearGeneratedVendorImgs(); Registry::get(UtilsView::class)->addErrorToDisplay( 'D3_WATERMARK_CLRTMP_GENIMGS_SUCC'); } /** * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function d3deleteAllGeneratedWrappingPictures() { /** @var $oClrTmp d3clrtmp */ $oClrTmp = $this->_getClrTmp(); $oClrTmp->clearGeneratedWrappingImgs(); Registry::get(UtilsView::class)->addErrorToDisplay( 'D3_WATERMARK_CLRTMP_GENIMGS_SUCC'); } /** * @return d3clrtmp */ protected function _getClrTmp() { return oxNew(d3clrtmp::class); } /** * @return string * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function getWatermarkIconUrl() { $oViewConfig = $this->getViewConfig(); $pictureName = d3_cfg_mod::get('d3_watermark')->getEditValue('sWaterMark_IcoFileName'); $picturePAth = $this->getConfig()->getImagePath($pictureName, true); return $oViewConfig->getImageUrl($pictureName). '?'.filemtime($picturePAth); } /** * @return string * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function getWatermarkUrl() { $oViewConfig = $this->getViewConfig(); $pictureName = d3_cfg_mod::get('d3_watermark')->getEditValue('sWaterMark_FileName'); $picturePAth = $this->getConfig()->getImagePath($pictureName, true); return $oViewConfig->getImageUrl($pictureName). '?'.filemtime($picturePAth); } /** * @param string $sFilename * @param string $additionName * * @return string */ protected function getWatermarkName($sFilename, $additionName = '') { $sFileName = $this->_sWatermarkName; $sFileName .= '_'. $this->getConfig()->getActiveShop()->getShopId(); $sFileName .= $additionName; $sFileName .= substr($sFilename, strrpos($sFilename, '.')); return $sFileName; } }