diff --git a/src/Models/d3watermarkImageGenerator.php b/src/Models/d3watermarkImageGenerator.php new file mode 100644 index 0000000..6a0b948 --- /dev/null +++ b/src/Models/d3watermarkImageGenerator.php @@ -0,0 +1,174 @@ +1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); +?> +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 \ No newline at end of file diff --git a/src/bin/d3watermark b/src/bin/d3watermark new file mode 100644 index 0000000..2f93831 --- /dev/null +++ b/src/bin/d3watermark @@ -0,0 +1,211 @@ +#!/usr/bin/env php + + * @link http://www.oxidmodule.com + */ + +namespace D3\Watermark; + +use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; +use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; +use D3\ModCfg\Application\Model\Maintenance\d3clrtmp; +use D3\Watermark\Models\d3watermarkImageGenerator; +use Dariuszp\CliProgressBar; +use Doctrine\DBAL\DBALException; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Exception\StandardException; +use OxidEsales\Eshop\Core\Module\Module; +use splitbrain\phpcli\CLI; +use splitbrain\phpcli\Options; + +$bootstrapFileName = getenv('ESHOP_BOOTSTRAP_PATH'); +if (!empty($bootstrapFileName)) { + $bootstrapFileName = realpath(trim(getenv('ESHOP_BOOTSTRAP_PATH'))); +} else { + $count = 0; + $bootstrapFileName = '../../../../../source/bootstrap.php'; + $currentDirectory = __DIR__ . '/'; + while ($count < 5) { + $count++; + if (file_exists($currentDirectory . $bootstrapFileName)) { + $bootstrapFileName = $currentDirectory . $bootstrapFileName; + break; + } + $bootstrapFileName = '../' . $bootstrapFileName; + } +} + +if (!(file_exists($bootstrapFileName) && !is_dir($bootstrapFileName))) { + $items = [ + "Unable to find eShop bootstrap.php file.", + "You can override the path by using ESHOP_BOOTSTRAP_PATH environment variable.", + "\n" + ]; + + $message = implode(" ", $items); + + die($message); +} + +require_once($bootstrapFileName); + +ini_set('error_reporting', E_ERROR); + +class d3watermark extends CLI +{ + // register options and arguments + protected function setup(Options $options) + { + $options->setHelp('Provides maintenance functions for article images'); + $options->registerCommand('delete', 'delete generated object images'); + $options->registerCommand('generate', 'call object images to start generation of not existing one'); + $options->registerCommand('renew', 'renew object images'); + $options->registerOption('version', 'print version', 'v'); + $options->registerArgument('types', 'affected image types - possible types are: '.d3watermarkImageGenerator::ALL.', '.d3watermarkImageGenerator::PRODUCT.', '.d3watermarkImageGenerator::CATEGORY.', '.d3watermarkImageGenerator::MANUFACTURER.', '.d3watermarkImageGenerator::VENDOR.', '.d3watermarkImageGenerator::WRAPPING, false); + } + + /** + * @param Options $options + * + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + protected function main(Options $options) + { + if ($options->getOpt('version')) { + $oModule = oxNew(Module::class); + $oModule->load('d3_watermark'); + $this->info($oModule->getModuleData()['version']); + } + + switch ($options->getCmd()) { + case 'delete': + $this->startDeleting($options); + break; + case 'generate': + $this->startGenerating($options); + break; + case 'renew': + $this->startDeleting($options); + $this->startGenerating($options); + break; + default: + echo $options->help(); + } + } + + /** + * @param Options $options + * + * @throws DBALException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + */ + public function startDeleting(Options $options) + { + /** @var $oClrTmp d3clrtmp */ + $oClrTmp = oxNew(d3clrtmp::class); + switch (trim(strtolower($options->getArgs()[0]))) { + case d3watermarkImageGenerator::PRODUCT: + $oClrTmp->clearGeneratedProductImgs(); + $this->info('generated product images are deleted'); + break; + case d3watermarkImageGenerator::CATEGORY: + $oClrTmp->clearGeneratedCategoryImgs(); + $this->info('generated category images are deleted'); + break; + case d3watermarkImageGenerator::MANUFACTURER: + $oClrTmp->clearGeneratedManufacturerImgs(); + $this->info('generated manufacturer images are deleted'); + break; + case d3watermarkImageGenerator::VENDOR: + $oClrTmp->clearGeneratedVendorImgs(); + $this->info('generated vendor images are deleted'); + break; + case d3watermarkImageGenerator::WRAPPING: + $oClrTmp->clearGeneratedWrappingImgs(); + $this->info('generated wrapping images are deleted'); + break; + case d3watermarkImageGenerator::ALL: + $oClrTmp->clearGeneratedAllImgs(); + $this->info('all generated images are deleted'); + break; + default: + $this->error('no valid image type specified, check argument "type"'); + }; + } + + /** + * @param Options $options + * + * @throws DBALException + */ + public function startGenerating(Options $options) + { + switch (trim(strtolower($options->getArgs()[0]))) { + case d3watermarkImageGenerator::PRODUCT: + case d3watermarkImageGenerator::CATEGORY: + case d3watermarkImageGenerator::MANUFACTURER: + case d3watermarkImageGenerator::VENDOR: + case d3watermarkImageGenerator::WRAPPING: + case d3watermarkImageGenerator::ALL: + $oWMImageGenerator = oxNew( d3watermarkImageGenerator::class, $options->getArgs()[0] ); + + $blBar = $this->canShowProgressBar( $options ); + + if ( $blBar ) { + $bar = new CliProgressBar( $oWMImageGenerator->getImagesListCount(), 0, "processing:" ); + $bar->display(); + } + + for ( $i = 0; $i < $oWMImageGenerator->getImagesListCount(); $i ++ ) { + if ( $blBar ) { + $bar->progress( 1 ); + } + $oWMImageGenerator->generateProductImagesRange( $i ); + } + if ( $blBar ) { + $bar->end(); + } + + break; + default: + $this->error( 'no valid image type specified, check argument "type"' ); + } + } + + public function canShowProgressBar(Options $options) + { + return in_array( + strtolower($options->getOpt('loglevel')), + [ + '', + 'info', + 'debug' + ] + ); + } +} + +$cli = new d3watermark(); +$cli->run(); \ No newline at end of file diff --git a/src/public/.htaccess b/src/public/.htaccess new file mode 100644 index 0000000..3b48aac --- /dev/null +++ b/src/public/.htaccess @@ -0,0 +1,11 @@ + + + # Apache 2.4 + Require all granted + + + # Apache 2.2 + order deny,allow + allow from all + + \ No newline at end of file