From 9926d900ca3967ac9c2b975ba21d3c93d248c2c9 Mon Sep 17 00:00:00 2001 From: Daniel Seifert Date: Sat, 8 Jun 2019 00:06:42 +0200 Subject: [PATCH] add missing bin file --- src/bin/d3watermark | 211 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 src/bin/d3watermark 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