Compare commits
58 Commits
Author | SHA1 | Date | |
---|---|---|---|
445a58a819 | |||
957de3ac0f | |||
9f2a97c560 | |||
76d72c8546 | |||
76fd879554 | |||
be873efb32 | |||
201b01db4c | |||
185caeeac3 | |||
760b7b2509 | |||
f730a380ec | |||
4cfcfb6d44 | |||
69b33d3538 | |||
36ee1a5957 | |||
3fd5f2dc98 | |||
bb7b9c2025 | |||
7ed3a7be0e | |||
baeb293048 | |||
908068abfa | |||
4548be2986 | |||
42fe5c8ca2 | |||
58dcf94255 | |||
34f04b8835 | |||
b77642666b | |||
220f8a1c7c | |||
4b726bb678 | |||
c414eb3683 | |||
5ddd1a3923 | |||
aac67d8550 | |||
3debde96c9 | |||
03f31f3e8b | |||
3d83650f7c | |||
cf6dd76aa9 | |||
0213f2e6b3 | |||
1fd00635f9 | |||
640152b6a6 | |||
7d8ed628eb | |||
8356ff3a62 | |||
7c479d02c8 | |||
b1e3bd98f0 | |||
72478c06e7 | |||
bd4dfaf36c | |||
7e1e65cb37 | |||
0c0d564554 | |||
51642b57c7 | |||
d0464d4a20 | |||
6aa028fb8c | |||
143173be2f | |||
f3b80607b0 | |||
e05278da19 | |||
69bf942608 | |||
bcd91cf709 | |||
e604b84849 | |||
67c462ccda | |||
2549003c71 | |||
f86e3a9daf | |||
91b18a9196 | |||
e0bd9f02b6 | |||
5251490b74 |
5
.gitattributes
vendored
Normal file
5
.gitattributes
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
* text=auto
|
||||||
|
|
||||||
|
/.gitattributes export-ignore
|
||||||
|
/.gitignore export-ignore
|
||||||
|
/.php-cs-fixer.php export-ignore
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.php-cs-fixer.cache
|
13
.php-cs-fixer.php
Normal file
13
.php-cs-fixer.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$finder = PhpCsFixer\Finder::create()
|
||||||
|
->in(__DIR__)
|
||||||
|
;
|
||||||
|
|
||||||
|
$config = new PhpCsFixer\Config();
|
||||||
|
return $config->setRules([
|
||||||
|
'@PHP73Migration' => true,
|
||||||
|
'@PSR12' => true
|
||||||
|
])
|
||||||
|
->setFinder($finder)
|
||||||
|
;
|
@ -16,25 +16,26 @@ declare(strict_types=1);
|
|||||||
namespace D3\DataWizard\Application\Controller\Admin;
|
namespace D3\DataWizard\Application\Controller\Admin;
|
||||||
|
|
||||||
use D3\DataWizard\Application\Model\Configuration;
|
use D3\DataWizard\Application\Model\Configuration;
|
||||||
|
use D3\DataWizard\Application\Model\Constants;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
||||||
|
use D3\DataWizard\Application\Model\Exceptions\InputUnvalidException;
|
||||||
|
use D3\DataWizard\Application\Model\Exceptions\TaskException;
|
||||||
use D3\ModCfg\Application\Model\d3database;
|
use D3\ModCfg\Application\Model\d3database;
|
||||||
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
|
|
||||||
use Doctrine\DBAL\DBALException;
|
|
||||||
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
|
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
|
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
|
||||||
use OxidEsales\Eshop\Core\Exception\StandardException;
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingServiceInterface;
|
||||||
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
|
||||||
class d3ActionWizard extends AdminDetailsController
|
class d3ActionWizard extends AdminDetailsController
|
||||||
{
|
{
|
||||||
protected $_sThisTemplate = 'd3ActionWizard.tpl';
|
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3ActionWizard';
|
||||||
|
|
||||||
/** @var Configuration */
|
protected Configuration $configuration;
|
||||||
protected $configuration;
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@ -43,67 +44,78 @@ class d3ActionWizard extends AdminDetailsController
|
|||||||
$this->configuration = oxNew(Configuration::class);
|
$this->configuration = oxNew(Configuration::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroups()
|
public function getViewId(): string
|
||||||
|
{
|
||||||
|
return 'd3mxDataWizard_Action';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGroups(): array
|
||||||
{
|
{
|
||||||
return $this->configuration->getActionGroups();
|
return $this->configuration->getActionGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroupTasks($group)
|
public function getGroupTasks($group): array
|
||||||
{
|
{
|
||||||
return $this->configuration->getActionsByGroup($group);
|
return $this->configuration->getActionsByGroup($group);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws DatabaseConnectionException
|
* @throws ContainerExceptionInterface
|
||||||
* @throws StandardException
|
* @throws NotFoundExceptionInterface
|
||||||
* @throws d3ShopCompatibilityAdapterException
|
|
||||||
* @throws d3_cfg_mod_exception
|
|
||||||
*/
|
*/
|
||||||
public function runTask()
|
public function runTask(): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->execute();
|
$this->execute();
|
||||||
} catch (DataWizardException|DBALException|DatabaseErrorException $e) {
|
} catch (DataWizardException|DBALException $e) {
|
||||||
Registry::getLogger()->error($e->getMessage());
|
Registry::getLogger()->error($e->getMessage());
|
||||||
Registry::getUtilsView()->addErrorToDisplay($e);
|
Registry::getUtilsView()->addErrorToDisplay($e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws DatabaseConnectionException
|
* @throws ContainerExceptionInterface
|
||||||
* @throws DatabaseErrorException
|
* @throws DBALException
|
||||||
|
* @throws DebugException
|
||||||
|
* @throws InputUnvalidException
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
|
* @throws TaskException
|
||||||
*/
|
*/
|
||||||
protected function execute()
|
protected function execute(): void
|
||||||
{
|
{
|
||||||
$id = Registry::getRequest()->getRequestEscapedParameter('taskid');
|
$id = Registry::getRequest()->getRequestEscapedParameter('taskid');
|
||||||
$action = $this->configuration->getActionById($id);
|
$action = $this->configuration->getActionById($id);
|
||||||
|
|
||||||
[ $queryString, $parameters ] = $action->getQuery();
|
[ $queryString, $parameters ] = $action->getQuery();
|
||||||
|
|
||||||
if ($this->d3GetConfig()->getConfigParam('d3datawizard_debug')) {
|
if ($this->getSettingsService()->getBoolean('d3datawizard_debug', Constants::OXID_MODULE_ID)) {
|
||||||
throw oxNew(
|
/** @var DebugException $debug */
|
||||||
|
$debug = oxNew(
|
||||||
DebugException::class,
|
DebugException::class,
|
||||||
d3database::getInstance()->getPreparedStatementQuery($queryString, $parameters)
|
d3database::getInstance()->getPreparedStatementQuery($queryString, $parameters)
|
||||||
);
|
);
|
||||||
|
throw $debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
$action->run();
|
$action->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Config
|
* @return ModuleSettingService
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function d3GetConfig()
|
public function getSettingsService(): ModuleSettingServiceInterface
|
||||||
{
|
{
|
||||||
return Registry::getConfig();
|
return ContainerFactory::getInstance()->getContainer()->get(ModuleSettingServiceInterface::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserMessages()
|
public function getUserMessages(): ?string
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getHelpURL()
|
public function getHelpURL(): ?string
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -16,27 +16,31 @@ declare(strict_types=1);
|
|||||||
namespace D3\DataWizard\Application\Controller\Admin;
|
namespace D3\DataWizard\Application\Controller\Admin;
|
||||||
|
|
||||||
use D3\DataWizard\Application\Model\Configuration;
|
use D3\DataWizard\Application\Model\Configuration;
|
||||||
|
use D3\DataWizard\Application\Model\Constants;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException;
|
use D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\TaskException;
|
|
||||||
use D3\ModCfg\Application\Model\d3database;
|
use D3\ModCfg\Application\Model\d3database;
|
||||||
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
|
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
|
||||||
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
|
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
|
||||||
use Doctrine\DBAL\DBALException;
|
use Doctrine\DBAL\Driver\Exception;
|
||||||
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
|
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
|
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
||||||
use OxidEsales\Eshop\Core\Exception\StandardException;
|
use OxidEsales\Eshop\Core\Exception\StandardException;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingServiceInterface;
|
||||||
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
|
||||||
class d3ExportWizard extends AdminDetailsController
|
class d3ExportWizard extends AdminDetailsController
|
||||||
{
|
{
|
||||||
protected $_sThisTemplate = 'd3ExportWizard.tpl';
|
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3ExportWizard';
|
||||||
|
|
||||||
/** @var Configuration */
|
protected Configuration $configuration;
|
||||||
protected $configuration;
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@ -45,23 +49,31 @@ class d3ExportWizard extends AdminDetailsController
|
|||||||
$this->configuration = oxNew(Configuration::class);
|
$this->configuration = oxNew(Configuration::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroups()
|
public function getViewId(): string
|
||||||
|
{
|
||||||
|
return 'd3mxDataWizard_Export';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGroups(): array
|
||||||
{
|
{
|
||||||
return $this->configuration->getExportGroups();
|
return $this->configuration->getExportGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroupTasks($group)
|
public function getGroupTasks($group): array
|
||||||
{
|
{
|
||||||
return $this->configuration->getExportsByGroup($group);
|
return $this->configuration->getExportsByGroup($group);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
* @throws DatabaseConnectionException
|
* @throws DatabaseConnectionException
|
||||||
|
* @throws Exception
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
* @throws StandardException
|
* @throws StandardException
|
||||||
* @throws d3ShopCompatibilityAdapterException
|
* @throws d3ShopCompatibilityAdapterException
|
||||||
* @throws d3_cfg_mod_exception
|
* @throws d3_cfg_mod_exception
|
||||||
*/
|
*/
|
||||||
public function runTask()
|
public function runTask(): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->execute();
|
$this->execute();
|
||||||
@ -75,20 +87,22 @@ class d3ExportWizard extends AdminDetailsController
|
|||||||
* @throws DBALException
|
* @throws DBALException
|
||||||
* @throws DatabaseConnectionException
|
* @throws DatabaseConnectionException
|
||||||
* @throws DatabaseErrorException
|
* @throws DatabaseErrorException
|
||||||
* @throws StandardException
|
|
||||||
* @throws NoSuitableRendererException
|
* @throws NoSuitableRendererException
|
||||||
* @throws TaskException
|
* @throws StandardException
|
||||||
|
* @throws Exception
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
* @throws d3ShopCompatibilityAdapterException
|
* @throws d3ShopCompatibilityAdapterException
|
||||||
* @throws d3_cfg_mod_exception
|
* @throws d3_cfg_mod_exception
|
||||||
*/
|
*/
|
||||||
protected function execute()
|
protected function execute(): void
|
||||||
{
|
{
|
||||||
$id = Registry::getRequest()->getRequestEscapedParameter('taskid');
|
$id = Registry::getRequest()->getRequestEscapedParameter('taskid');
|
||||||
$export = $this->configuration->getExportById($id);
|
$export = $this->configuration->getExportById($id);
|
||||||
|
|
||||||
[ $queryString, $parameters ] = $export->getQuery();
|
[ $queryString, $parameters ] = $export->getQuery();
|
||||||
|
|
||||||
if ($this->d3GetConfig()->getConfigParam('d3datawizard_debug')) {
|
if ($this->getSettingsService()->getBoolean('d3datawizard_debug', Constants::OXID_MODULE_ID)) {
|
||||||
throw oxNew(
|
throw oxNew(
|
||||||
DebugException::class,
|
DebugException::class,
|
||||||
d3database::getInstance()->getPreparedStatementQuery($queryString, $parameters)
|
d3database::getInstance()->getPreparedStatementQuery($queryString, $parameters)
|
||||||
@ -99,19 +113,21 @@ class d3ExportWizard extends AdminDetailsController
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Config
|
* @return ModuleSettingService
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function d3GetConfig()
|
public function getSettingsService(): ModuleSettingServiceInterface
|
||||||
{
|
{
|
||||||
return Registry::getConfig();
|
return ContainerFactory::getInstance()->getContainer()->get(ModuleSettingServiceInterface::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserMessages()
|
public function getUserMessages(): ?string
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getHelpURL()
|
public function getHelpURL(): ?string
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -16,71 +16,84 @@ declare(strict_types=1);
|
|||||||
namespace D3\DataWizard\Application\Model;
|
namespace D3\DataWizard\Application\Model;
|
||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\InputUnvalidException;
|
use D3\DataWizard\Application\Model\Exceptions\InputUnvalidException;
|
||||||
|
use D3\DataWizard\Application\Model\Exceptions\TaskException;
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
use FormManager\Inputs\Checkbox;
|
use FormManager\Inputs\Checkbox;
|
||||||
use FormManager\Inputs\Input;
|
use FormManager\Inputs\Input;
|
||||||
use FormManager\Inputs\Radio;
|
use FormManager\Inputs\Radio;
|
||||||
use OxidEsales\Eshop\Core\Database\Adapter\DatabaseInterface;
|
|
||||||
use OxidEsales\Eshop\Core\DatabaseProvider;
|
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
|
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Database\ConnectionProviderInterface;
|
||||||
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
|
||||||
abstract class ActionBase implements QueryBase
|
abstract class ActionBase implements QueryBase
|
||||||
{
|
{
|
||||||
protected $formElements = [];
|
protected array $formElements = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure that the translations are equally available in the frontend and the backend
|
* Ensure that the translations are equally available in the frontend and the backend
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getDescription() : string
|
public function getDescription(): string
|
||||||
{
|
{
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws DatabaseConnectionException
|
* @throws ContainerExceptionInterface
|
||||||
* @throws DatabaseErrorException
|
* @throws DBALException
|
||||||
|
* @throws InputUnvalidException
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
|
* @throws TaskException
|
||||||
*/
|
*/
|
||||||
public function run()
|
public function run(): void
|
||||||
{
|
{
|
||||||
if ($this->hasFormElements()) {
|
if ($this->hasFormElements()) {
|
||||||
/** @var Input $element */
|
/** @var Input $element */
|
||||||
foreach ($this->getFormElements() as $element) {
|
foreach ($this->getFormElements() as $element) {
|
||||||
if (false === $element->isValid()) {
|
if (false === $element->isValid()) {
|
||||||
throw oxNew(InputUnvalidException::class, $this, $element);
|
/** @var InputUnvalidException $exception */
|
||||||
|
$exception = oxNew(InputUnvalidException::class, $this, $element);
|
||||||
|
throw $exception;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->executeAction( $this->getQuery() );
|
$this->executeAction($this->getQuery());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $query
|
* @param array $query
|
||||||
*
|
*
|
||||||
* @return int
|
* @return void
|
||||||
* @throws DatabaseConnectionException
|
* @throws ContainerExceptionInterface
|
||||||
* @throws DatabaseErrorException
|
* @throws NotFoundExceptionInterface
|
||||||
|
* @throws TaskException
|
||||||
|
* @throws DBALException
|
||||||
*/
|
*/
|
||||||
public function executeAction( array $query ): int
|
public function executeAction(array $query): void
|
||||||
{
|
{
|
||||||
[ $queryString, $parameters ] = $query;
|
[ $queryString, $parameters ] = $query;
|
||||||
|
|
||||||
$queryString = trim($queryString);
|
$queryString = trim($queryString);
|
||||||
|
|
||||||
if ( strtolower( substr( $queryString, 0, 6 ) ) === 'select' ) {
|
if (strtolower(substr($queryString, 0, 6)) === 'select') {
|
||||||
throw oxNew(
|
/** @var TaskException $exception */
|
||||||
Exceptions\TaskException::class,
|
$exception = oxNew(
|
||||||
|
TaskException::class,
|
||||||
$this,
|
$this,
|
||||||
Registry::getLang()->translateString( 'D3_DATAWIZARD_ERR_ACTIONSELECT' )
|
Registry::getLang()->translateString('D3_DATAWIZARD_ERR_ACTIONSELECT')
|
||||||
);
|
);
|
||||||
|
throw $exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
$affected = $this->d3GetDb()->execute( $queryString, $parameters );
|
$affected = (int) $this->getConnection()->executeStatement($queryString, $parameters);
|
||||||
|
|
||||||
throw oxNew(
|
/** @var TaskException $exception */
|
||||||
Exceptions\TaskException::class,
|
$exception = oxNew(
|
||||||
|
TaskException::class,
|
||||||
$this,
|
$this,
|
||||||
sprintf(
|
sprintf(
|
||||||
Registry::getLang()->translateString(
|
Registry::getLang()->translateString(
|
||||||
@ -89,21 +102,18 @@ abstract class ActionBase implements QueryBase
|
|||||||
$affected
|
$affected
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
throw $exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function getConnection(): Connection
|
||||||
* @return DatabaseInterface|null
|
|
||||||
* @throws DatabaseConnectionException
|
|
||||||
*/
|
|
||||||
public function d3GetDb()
|
|
||||||
{
|
{
|
||||||
return DatabaseProvider::getDb( DatabaseProvider::FETCH_MODE_ASSOC );
|
return ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getButtonText() : string
|
public function getButtonText(): string
|
||||||
{
|
{
|
||||||
return "D3_DATAWIZARD_ACTION_SUBMIT";
|
return "D3_DATAWIZARD_ACTION_SUBMIT";
|
||||||
}
|
}
|
||||||
@ -111,7 +121,7 @@ abstract class ActionBase implements QueryBase
|
|||||||
/**
|
/**
|
||||||
* @param Input $input
|
* @param Input $input
|
||||||
*/
|
*/
|
||||||
public function registerFormElement(Input $input)
|
public function registerFormElement(Input $input): void
|
||||||
{
|
{
|
||||||
if ($input instanceof Radio || $input instanceof Checkbox) {
|
if ($input instanceof Radio || $input instanceof Checkbox) {
|
||||||
$input->setTemplate('<p class="form-check">{{ input }} {{ label }}</p>');
|
$input->setTemplate('<p class="form-check">{{ input }} {{ label }}</p>');
|
||||||
|
@ -15,24 +15,20 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace D3\DataWizard\Application\Model;
|
namespace D3\DataWizard\Application\Model;
|
||||||
|
|
||||||
use D3\DataWizard\Application\Model\Actions\FixArtextendsItems;
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
||||||
use D3\DataWizard\Application\Model\Exports\InactiveCategories;
|
|
||||||
use D3\DataWizard\Application\Model\Exports\KeyFigures;
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
|
||||||
|
|
||||||
class Configuration
|
class Configuration
|
||||||
{
|
{
|
||||||
const GROUP_SHOP = 'D3_DATAWIZARD_GROUP_SHOP';
|
public const GROUP_SHOP = 'D3_DATAWIZARD_GROUP_SHOP';
|
||||||
const GROUP_CATEGORY = 'D3_DATAWIZARD_GROUP_CATEGORIES';
|
public const GROUP_CATEGORY = 'D3_DATAWIZARD_GROUP_CATEGORIES';
|
||||||
const GROUP_ARTICLES = 'D3_DATAWIZARD_GROUP_ARTICLES';
|
public const GROUP_ARTICLES = 'D3_DATAWIZARD_GROUP_ARTICLES';
|
||||||
const GROUP_USERS = 'D3_DATAWIZARD_GROUP_USERS';
|
public const GROUP_USERS = 'D3_DATAWIZARD_GROUP_USERS';
|
||||||
const GROUP_ORDERS = 'D3_DATAWIZARD_GROUP_ORDERS';
|
public const GROUP_ORDERS = 'D3_DATAWIZARD_GROUP_ORDERS';
|
||||||
const GROUP_REMARKS = 'D3_DATAWIZARD_GROUP_REMARKS';
|
public const GROUP_REMARKS = 'D3_DATAWIZARD_GROUP_REMARKS';
|
||||||
const GROUP_CMS = 'D3_DATAWIZARD_GROUP_CMS';
|
public const GROUP_CMS = 'D3_DATAWIZARD_GROUP_CMS';
|
||||||
|
|
||||||
protected $actions = [];
|
protected array $actions = [];
|
||||||
protected $exports = [];
|
protected array $exports = [];
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@ -48,7 +44,7 @@ class Configuration
|
|||||||
* @param $group
|
* @param $group
|
||||||
* @param ActionBase $action
|
* @param ActionBase $action
|
||||||
*/
|
*/
|
||||||
public function registerAction($group, ActionBase $action)
|
public function registerAction($group, ActionBase $action): void
|
||||||
{
|
{
|
||||||
$this->actions[$group][md5(get_class($action))] = $action;
|
$this->actions[$group][md5(get_class($action))] = $action;
|
||||||
}
|
}
|
||||||
@ -57,7 +53,7 @@ class Configuration
|
|||||||
* @param $group
|
* @param $group
|
||||||
* @param ExportBase $export
|
* @param ExportBase $export
|
||||||
*/
|
*/
|
||||||
public function registerExport($group, ExportBase $export)
|
public function registerExport($group, ExportBase $export): void
|
||||||
{
|
{
|
||||||
$this->exports[$group][md5(get_class($export))] = $export;
|
$this->exports[$group][md5(get_class($export))] = $export;
|
||||||
}
|
}
|
||||||
@ -97,9 +93,9 @@ class Configuration
|
|||||||
/**
|
/**
|
||||||
* @param $group
|
* @param $group
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getActionsByGroup($group)
|
public function getActionsByGroup($group): array
|
||||||
{
|
{
|
||||||
return $this->actions[$group];
|
return $this->actions[$group];
|
||||||
}
|
}
|
||||||
@ -107,9 +103,9 @@ class Configuration
|
|||||||
/**
|
/**
|
||||||
* @param $group
|
* @param $group
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getExportsByGroup($group)
|
public function getExportsByGroup($group): array
|
||||||
{
|
{
|
||||||
return $this->exports[$group];
|
return $this->exports[$group];
|
||||||
}
|
}
|
||||||
@ -117,7 +113,7 @@ class Configuration
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getAllActions() : array
|
public function getAllActions(): array
|
||||||
{
|
{
|
||||||
$all = [];
|
$all = [];
|
||||||
|
|
||||||
@ -131,7 +127,7 @@ class Configuration
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getAllExports() : array
|
public function getAllExports(): array
|
||||||
{
|
{
|
||||||
$all = [];
|
$all = [];
|
||||||
|
|
||||||
@ -147,11 +143,11 @@ class Configuration
|
|||||||
*
|
*
|
||||||
* @return ActionBase
|
* @return ActionBase
|
||||||
*/
|
*/
|
||||||
public function getActionById($id) : ActionBase
|
public function getActionById($id): ActionBase
|
||||||
{
|
{
|
||||||
$allActions = $this->getAllActions();
|
$allActions = $this->getAllActions();
|
||||||
|
|
||||||
if (false == $allActions[$id]) {
|
if ( ! $allActions[ $id ] ) {
|
||||||
throw oxNew(DataWizardException::class, 'no action with id '.$id);
|
throw oxNew(DataWizardException::class, 'no action with id '.$id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,11 +159,11 @@ class Configuration
|
|||||||
*
|
*
|
||||||
* @return ExportBase
|
* @return ExportBase
|
||||||
*/
|
*/
|
||||||
public function getExportById($id) : ExportBase
|
public function getExportById($id): ExportBase
|
||||||
{
|
{
|
||||||
$allExports = $this->getAllExports();
|
$allExports = $this->getAllExports();
|
||||||
|
|
||||||
if (false == $allExports[$id]) {
|
if ( ! $allExports[ $id ] ) {
|
||||||
throw oxNew(DataWizardException::class, 'no export with id '.$id);
|
throw oxNew(DataWizardException::class, 'no export with id '.$id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
Application/Model/Constants.php
Normal file
21
Application/Model/Constants.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* https://www.d3data.de
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link https://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace D3\DataWizard\Application\Model;
|
||||||
|
|
||||||
|
class Constants
|
||||||
|
{
|
||||||
|
public const OXID_MODULE_ID = 'd3datawizard';
|
||||||
|
}
|
@ -20,13 +20,13 @@ use OxidEsales\Eshop\Core\Registry;
|
|||||||
|
|
||||||
class DebugException extends DataWizardException
|
class DebugException extends DataWizardException
|
||||||
{
|
{
|
||||||
public function __construct($sMessage = "not set", $iCode = 0, Exception $previous = null )
|
public function __construct($sMessage = "not set", $iCode = 0, Exception $previous = null)
|
||||||
{
|
{
|
||||||
$sMessage = sprintf(
|
$sMessage = sprintf(
|
||||||
Registry::getLang()->translateString('D3_DATAWIZARD_DEBUG'),
|
Registry::getLang()->translateString('D3_DATAWIZARD_DEBUG'),
|
||||||
$sMessage
|
$sMessage
|
||||||
);
|
);
|
||||||
|
|
||||||
parent::__construct($sMessage, $iCode, $previous );
|
parent::__construct($sMessage, $iCode, $previous);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,13 +20,13 @@ use OxidEsales\Eshop\Core\Registry;
|
|||||||
|
|
||||||
class ExportFileException extends DataWizardException
|
class ExportFileException extends DataWizardException
|
||||||
{
|
{
|
||||||
public function __construct($sMessage = "not set", $iCode = 0, Exception $previous = null )
|
public function __construct($sMessage = "not set", $iCode = 0, Exception $previous = null)
|
||||||
{
|
{
|
||||||
$sMessage = sprintf(
|
$sMessage = sprintf(
|
||||||
Registry::getLang()->translateString('D3_DATAWIZARD_ERR_EXPORTFILEERROR'),
|
Registry::getLang()->translateString('D3_DATAWIZARD_ERR_EXPORTFILEERROR'),
|
||||||
$sMessage
|
$sMessage
|
||||||
);
|
);
|
||||||
|
|
||||||
parent::__construct($sMessage, $iCode, $previous );
|
parent::__construct($sMessage, $iCode, $previous);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -21,8 +21,7 @@ use FormManager\Inputs\Input;
|
|||||||
|
|
||||||
class InputUnvalidException extends DataWizardException
|
class InputUnvalidException extends DataWizardException
|
||||||
{
|
{
|
||||||
/** @var QueryBase */
|
public QueryBase $task;
|
||||||
public $task;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* InputUnvalidException constructor.
|
* InputUnvalidException constructor.
|
||||||
@ -32,7 +31,7 @@ class InputUnvalidException extends DataWizardException
|
|||||||
* @param Exception|null $previous
|
* @param Exception|null $previous
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function __construct( QueryBase $task, Input $inputElement, $iCode = 0, Exception $previous = null )
|
public function __construct(QueryBase $task, Input $inputElement, $iCode = 0, Exception $previous = null)
|
||||||
{
|
{
|
||||||
$messages = [];
|
$messages = [];
|
||||||
foreach ($inputElement->getError()->getIterator() as $item) {
|
foreach ($inputElement->getError()->getIterator() as $item) {
|
||||||
@ -43,10 +42,10 @@ class InputUnvalidException extends DataWizardException
|
|||||||
' - ',
|
' - ',
|
||||||
[
|
[
|
||||||
$task->getTitle(),
|
$task->getTitle(),
|
||||||
implode(', ', $messages)
|
implode(', ', $messages),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
parent::__construct( $sMessage, $iCode, $previous );
|
parent::__construct($sMessage, $iCode, $previous);
|
||||||
|
|
||||||
$this->task = $task;
|
$this->task = $task;
|
||||||
}
|
}
|
||||||
|
@ -20,13 +20,13 @@ use OxidEsales\Eshop\Core\Registry;
|
|||||||
|
|
||||||
class NoSuitableRendererException extends DataWizardException
|
class NoSuitableRendererException extends DataWizardException
|
||||||
{
|
{
|
||||||
public function __construct($sMessage = "not set", $iCode = 0, Exception $previous = null )
|
public function __construct($sMessage = "not set", $iCode = 0, Exception $previous = null)
|
||||||
{
|
{
|
||||||
$sMessage = sprintf(
|
$sMessage = sprintf(
|
||||||
Registry::getLang()->translateString('D3_DATAWIZARD_ERR_NOSUITABLERENDERER'),
|
Registry::getLang()->translateString('D3_DATAWIZARD_ERR_NOSUITABLERENDERER'),
|
||||||
$sMessage
|
$sMessage
|
||||||
);
|
);
|
||||||
|
|
||||||
parent::__construct($sMessage, $iCode, $previous );
|
parent::__construct($sMessage, $iCode, $previous);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,19 +20,18 @@ use Exception;
|
|||||||
|
|
||||||
class TaskException extends DataWizardException
|
class TaskException extends DataWizardException
|
||||||
{
|
{
|
||||||
/** @var QueryBase */
|
public QueryBase $task;
|
||||||
public $task;
|
|
||||||
|
|
||||||
public function __construct( QueryBase $task, $sMessage = "not set", $iCode = 0, Exception $previous = null )
|
public function __construct(QueryBase $task, $sMessage = "not set", $iCode = 0, Exception $previous = null)
|
||||||
{
|
{
|
||||||
$sMessage = implode(
|
$sMessage = implode(
|
||||||
' - ',
|
' - ',
|
||||||
[
|
[
|
||||||
$task->getTitle(),
|
$task->getTitle(),
|
||||||
$sMessage
|
$sMessage,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
parent::__construct( $sMessage, $iCode, $previous );
|
parent::__construct($sMessage, $iCode, $previous);
|
||||||
|
|
||||||
$this->task = $task;
|
$this->task = $task;
|
||||||
}
|
}
|
||||||
|
@ -15,50 +15,60 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace D3\DataWizard\Application\Model;
|
namespace D3\DataWizard\Application\Model;
|
||||||
|
|
||||||
|
use Assert\Assert;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\ExportFileException;
|
use D3\DataWizard\Application\Model\Exceptions\ExportFileException;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\InputUnvalidException;
|
use D3\DataWizard\Application\Model\Exceptions\InputUnvalidException;
|
||||||
|
use D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException;
|
||||||
use D3\DataWizard\Application\Model\ExportRenderer\RendererBridge;
|
use D3\DataWizard\Application\Model\ExportRenderer\RendererBridge;
|
||||||
|
use D3\DataWizard\Application\Model\ExportRenderer\RendererInterface;
|
||||||
use D3\ModCfg\Application\Model\d3filesystem;
|
use D3\ModCfg\Application\Model\d3filesystem;
|
||||||
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
|
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
|
||||||
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
|
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
|
||||||
use Doctrine\DBAL\DBALException;
|
use Doctrine\DBAL\Connection;
|
||||||
|
use Doctrine\DBAL\Driver\Exception;
|
||||||
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
use FormManager\Inputs\Checkbox;
|
use FormManager\Inputs\Checkbox;
|
||||||
use FormManager\Inputs\Input;
|
use FormManager\Inputs\Input;
|
||||||
use FormManager\Inputs\Radio;
|
use FormManager\Inputs\Radio;
|
||||||
use OxidEsales\Eshop\Core\DatabaseProvider;
|
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
|
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
||||||
use OxidEsales\Eshop\Core\Exception\StandardException;
|
use OxidEsales\Eshop\Core\Exception\StandardException;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Database\ConnectionProviderInterface;
|
||||||
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
|
||||||
abstract class ExportBase implements QueryBase
|
abstract class ExportBase implements QueryBase
|
||||||
{
|
{
|
||||||
protected $formElements = [];
|
protected array $formElements = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure that the translations are equally available in the frontend and the backend
|
* Ensure that the translations are equally available in the frontend and the backend
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getDescription() : string
|
public function getDescription(): string
|
||||||
{
|
{
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $format
|
* @param string $format
|
||||||
* @param $path
|
* @param null $path
|
||||||
*
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
* @throws DBALException
|
* @throws DBALException
|
||||||
* @throws DatabaseConnectionException
|
* @throws DatabaseConnectionException
|
||||||
* @throws DatabaseErrorException
|
* @throws DatabaseErrorException
|
||||||
* @throws Exceptions\NoSuitableRendererException
|
* @throws Exception
|
||||||
* @throws Exceptions\TaskException
|
* @throws NoSuitableRendererException
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
* @throws StandardException
|
* @throws StandardException
|
||||||
* @throws d3ShopCompatibilityAdapterException
|
* @throws d3ShopCompatibilityAdapterException
|
||||||
* @throws d3_cfg_mod_exception
|
* @throws d3_cfg_mod_exception
|
||||||
* @return string
|
|
||||||
*/
|
*/
|
||||||
public function run( string $format = RendererBridge::FORMAT_CSV, $path = null): string
|
public function run(string $format = RendererBridge::FORMAT_CSV, $path = null): string
|
||||||
{
|
{
|
||||||
if ($this->hasFormElements()) {
|
if ($this->hasFormElements()) {
|
||||||
/** @var Input $element */
|
/** @var Input $element */
|
||||||
@ -75,37 +85,28 @@ abstract class ExportBase implements QueryBase
|
|||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getButtonText() : string
|
public function getButtonText(): string
|
||||||
{
|
{
|
||||||
return "D3_DATAWIZARD_EXPORT_SUBMIT";
|
return "D3_DATAWIZARD_EXPORT_SUBMIT";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $format
|
* @throws NoSuitableRendererException
|
||||||
*
|
|
||||||
* @return ExportRenderer\RendererInterface
|
|
||||||
* @throws Exceptions\NoSuitableRendererException
|
|
||||||
*/
|
*/
|
||||||
public function getRenderer($format): ExportRenderer\RendererInterface
|
public function getRenderer(string $format): RendererInterface
|
||||||
{
|
{
|
||||||
return $this->getRendererBridge()->getRenderer($format);
|
return $this->getRendererBridge()->getRenderer($format);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function getRendererBridge(): RendererBridge
|
||||||
* @return RendererBridge
|
|
||||||
*/
|
|
||||||
public function getRendererBridge()
|
|
||||||
{
|
{
|
||||||
return oxNew(RendererBridge::class);
|
return oxNew(RendererBridge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $format
|
* @throws NoSuitableRendererException
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
* @throws Exceptions\NoSuitableRendererException
|
|
||||||
*/
|
*/
|
||||||
public function getFileExtension($format): string
|
public function getFileExtension(string $format): string
|
||||||
{
|
{
|
||||||
return $this->getRenderer($format)->getFileExtension();
|
return $this->getRenderer($format)->getFileExtension();
|
||||||
}
|
}
|
||||||
@ -127,7 +128,7 @@ abstract class ExportBase implements QueryBase
|
|||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getExportFilenameBase() : string
|
public function getExportFilenameBase(): string
|
||||||
{
|
{
|
||||||
return $this->getTitle();
|
return $this->getTitle();
|
||||||
}
|
}
|
||||||
@ -138,7 +139,7 @@ abstract class ExportBase implements QueryBase
|
|||||||
* @return string
|
* @return string
|
||||||
* @throws Exceptions\NoSuitableRendererException
|
* @throws Exceptions\NoSuitableRendererException
|
||||||
*/
|
*/
|
||||||
public function getExportFileName($format) : string
|
public function getExportFileName($format): string
|
||||||
{
|
{
|
||||||
return $this->getExportFilenameBase().'_'.date('Y-m-d_H-i-s').'.'.$this->getFileExtension($format);
|
return $this->getExportFilenameBase().'_'.date('Y-m-d_H-i-s').'.'.$this->getFileExtension($format);
|
||||||
}
|
}
|
||||||
@ -147,42 +148,47 @@ abstract class ExportBase implements QueryBase
|
|||||||
* @param array $query
|
* @param array $query
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
* @throws DatabaseConnectionException
|
* @throws DBALException
|
||||||
* @throws DatabaseErrorException
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function getExportData( array $query ): array
|
public function getExportData(array $query): array
|
||||||
{
|
{
|
||||||
[ $queryString, $parameters ] = $query;
|
[ $queryString, $parameters ] = $query;
|
||||||
|
|
||||||
|
Assert::that($queryString)->string();
|
||||||
|
Assert::that($parameters)->isArray();
|
||||||
|
|
||||||
$queryString = trim($queryString);
|
$queryString = trim($queryString);
|
||||||
|
|
||||||
if ( strtolower( substr( $queryString, 0, 6 ) ) !== 'select' ) {
|
if (strtolower(substr($queryString, 0, 6)) !== 'select') {
|
||||||
throw oxNew(
|
throw oxNew(
|
||||||
Exceptions\TaskException::class,
|
Exceptions\TaskException::class,
|
||||||
$this,
|
$this,
|
||||||
Registry::getLang()->translateString( 'D3_DATAWIZARD_ERR_NOEXPORTSELECT' )
|
Registry::getLang()->translateString('D3_DATAWIZARD_ERR_NOEXPORTSELECT')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$rows = $this->d3GetDb()->getAll( $queryString, $parameters );
|
$rows = $this->getConnection()->executeQuery($queryString, $parameters)->fetchAllAssociative();
|
||||||
|
|
||||||
if ( count( $rows ) <= 0 ) {
|
if (count($rows) <= 0) {
|
||||||
throw oxNew(
|
throw oxNew(
|
||||||
Exceptions\TaskException::class,
|
Exceptions\TaskException::class,
|
||||||
$this,
|
$this,
|
||||||
Registry::getLang()->translateString( 'D3_DATAWIZARD_ERR_NOEXPORTCONTENT', null, true )
|
Registry::getLang()->translateString('D3_DATAWIZARD_ERR_NOEXPORTCONTENT', null, true)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$fieldNames = array_keys( $rows[0] );
|
$fieldNames = array_keys($rows[0]);
|
||||||
|
|
||||||
return [ $rows, $fieldNames ];
|
return [ $rows, $fieldNames ];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function getConnection(): Connection
|
||||||
* @param Input $input
|
{
|
||||||
*/
|
return ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get();
|
||||||
public function registerFormElement(Input $input)
|
}
|
||||||
|
|
||||||
|
public function registerFormElement(Input $input): void
|
||||||
{
|
{
|
||||||
if ($input instanceof Radio || $input instanceof Checkbox) {
|
if ($input instanceof Radio || $input instanceof Checkbox) {
|
||||||
$input->setTemplate('<p class="form-check">{{ input }} {{ label }}</p>');
|
$input->setTemplate('<p class="form-check">{{ input }} {{ label }}</p>');
|
||||||
@ -212,27 +218,30 @@ abstract class ExportBase implements QueryBase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $format
|
* @param string $format
|
||||||
* @param $path
|
* @param $path
|
||||||
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
* @throws DBALException
|
* @throws DBALException
|
||||||
* @throws DatabaseConnectionException
|
* @throws DatabaseConnectionException
|
||||||
* @throws DatabaseErrorException
|
* @throws DatabaseErrorException
|
||||||
* @throws Exceptions\NoSuitableRendererException
|
* @throws Exception
|
||||||
|
* @throws NoSuitableRendererException
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
* @throws StandardException
|
* @throws StandardException
|
||||||
* @throws d3ShopCompatibilityAdapterException
|
* @throws d3ShopCompatibilityAdapterException
|
||||||
* @throws d3_cfg_mod_exception
|
* @throws d3_cfg_mod_exception
|
||||||
*/
|
*/
|
||||||
protected function executeExport(string $format, $path): string
|
protected function executeExport(string $format, $path): string
|
||||||
{
|
{
|
||||||
$content = $this->getContent( $format );
|
$content = $this->getContent($format);
|
||||||
|
|
||||||
/** @var $oFS d3filesystem */
|
|
||||||
$oFS = $this->getFileSystem();
|
$oFS = $this->getFileSystem();
|
||||||
if (is_null($path)) {
|
if (is_null($path)) {
|
||||||
$oFS->startDirectDownload($oFS->filterFilename($this->getExportFileName($format)), $content);
|
$oFS->startDirectDownload($oFS->filterFilename($this->getExportFileName($format)), $content);
|
||||||
} else {
|
} else {
|
||||||
$filePath = $oFS->trailingslashit($path) . $oFS->filterFilename($this->getExportFileName($format));
|
$filePath = $oFS->trailingslashit($path) . $oFS->filterFilename($this->getExportFileName($format));
|
||||||
if (false === $oFS->createFile($filePath, $content, true)) {
|
if (false === $oFS->createFile($filePath, $content)) {
|
||||||
throw oxNew(ExportFileException::class, $filePath);
|
throw oxNew(ExportFileException::class, $filePath);
|
||||||
}
|
}
|
||||||
return $filePath;
|
return $filePath;
|
||||||
@ -241,19 +250,7 @@ abstract class ExportBase implements QueryBase
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function getFileSystem(): d3filesystem
|
||||||
* @return \OxidEsales\Eshop\Core\Database\Adapter\DatabaseInterface|null
|
|
||||||
* @throws DatabaseConnectionException
|
|
||||||
*/
|
|
||||||
protected function d3GetDb(): ?\OxidEsales\Eshop\Core\Database\Adapter\DatabaseInterface
|
|
||||||
{
|
|
||||||
return DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return d3filesystem|mixed
|
|
||||||
*/
|
|
||||||
protected function getFileSystem()
|
|
||||||
{
|
{
|
||||||
return oxNew(d3filesystem::class);
|
return oxNew(d3filesystem::class);
|
||||||
}
|
}
|
||||||
@ -262,16 +259,16 @@ abstract class ExportBase implements QueryBase
|
|||||||
* @param string $format
|
* @param string $format
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
* @throws DatabaseConnectionException
|
* @throws ContainerExceptionInterface
|
||||||
* @throws DatabaseErrorException
|
* @throws DBALException
|
||||||
* @throws Exceptions\NoSuitableRendererException
|
* @throws Exception
|
||||||
|
* @throws NoSuitableRendererException
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function getContent( string $format ): string
|
public function getContent(string $format): string
|
||||||
{
|
{
|
||||||
[ $rows, $fieldNames ] = $this->getExportData( $this->getQuery() );
|
[ $rows, $fieldNames ] = $this->getExportData($this->getQuery());
|
||||||
|
|
||||||
$content = $this->renderContent( $rows, $fieldNames, $format );
|
return $this->renderContent($rows, $fieldNames, $format);
|
||||||
|
|
||||||
return $content;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ declare(strict_types=1);
|
|||||||
namespace D3\DataWizard\Application\Model\ExportRenderer;
|
namespace D3\DataWizard\Application\Model\ExportRenderer;
|
||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
||||||
use League\Csv\EncloseField;
|
use League\Csv\ColumnConsistency;
|
||||||
use League\Csv\Exception;
|
use League\Csv\Exception;
|
||||||
use League\Csv\Writer;
|
use League\Csv\Writer;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
use OxidEsales\Eshop\Core\Config;
|
||||||
@ -24,23 +24,27 @@ use OxidEsales\Eshop\Core\Registry;
|
|||||||
|
|
||||||
class Csv implements RendererInterface
|
class Csv implements RendererInterface
|
||||||
{
|
{
|
||||||
|
public function __construct(protected bool $forceEnclose = false)
|
||||||
|
{}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $rows
|
* @param iterable $rows
|
||||||
* @param $fieldNames
|
* @param iterable $fieldNames
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
* @throws RenderException
|
* @throws RenderException
|
||||||
*/
|
*/
|
||||||
public function getContent($rows, $fieldNames): string
|
public function getContent(iterable $rows, iterable $fieldNames): string
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$csv = $this->getCsv();
|
$csv = $this->getCsv();
|
||||||
$csv->insertOne( $fieldNames );
|
$this->forceEnclose ? $csv->forceEnclosure() : $csv->relaxEnclosure();
|
||||||
$csv->insertAll( $rows );
|
$csv->insertOne((array) $fieldNames);
|
||||||
return method_exists($csv, 'getContent') ? $csv->getContent() : (string) $csv;
|
$csv->insertAll($rows);
|
||||||
|
return (string) $csv;
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
/** @var RenderException $newException */
|
/** @var RenderException $newException */
|
||||||
$newException = oxNew(RenderException::class, $e->getMessage(), $e->getCode(), $e );
|
$newException = oxNew(RenderException::class, $e->getMessage(), $e->getCode(), $e);
|
||||||
throw $newException;
|
throw $newException;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,20 +62,14 @@ class Csv implements RendererInterface
|
|||||||
{
|
{
|
||||||
$csv = Writer::createFromString();
|
$csv = Writer::createFromString();
|
||||||
|
|
||||||
EncloseField::addTo($csv, "\t\x1f");
|
$sEncloser = $this->d3GetConfig()->getConfigParam('sGiCsvFieldEncloser') ?? '"';
|
||||||
|
|
||||||
$sEncloser = $this->d3GetConfig()->getConfigParam('sGiCsvFieldEncloser');
|
|
||||||
if (false == $sEncloser) {
|
|
||||||
$sEncloser = '"';
|
|
||||||
}
|
|
||||||
$csv->setEnclosure($sEncloser);
|
$csv->setEnclosure($sEncloser);
|
||||||
|
|
||||||
$sDelimiter = $this->d3GetConfig()->getConfigParam('sCSVSign');
|
$sDelimiter = $this->d3GetConfig()->getConfigParam('sCSVSign') ?? ';';
|
||||||
if (false == $sDelimiter) {
|
|
||||||
$sDelimiter = ';';
|
|
||||||
}
|
|
||||||
$csv->setDelimiter($sDelimiter);
|
$csv->setDelimiter($sDelimiter);
|
||||||
|
|
||||||
|
$csv->addValidator(new ColumnConsistency(), 'columns_consistency');
|
||||||
|
|
||||||
return $csv;
|
return $csv;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +84,7 @@ class Csv implements RendererInterface
|
|||||||
/**
|
/**
|
||||||
* @return Config
|
* @return Config
|
||||||
*/
|
*/
|
||||||
public function d3GetConfig()
|
public function d3GetConfig(): Config
|
||||||
{
|
{
|
||||||
return Registry::getConfig();
|
return Registry::getConfig();
|
||||||
}
|
}
|
||||||
|
@ -16,24 +16,27 @@ declare(strict_types=1);
|
|||||||
namespace D3\DataWizard\Application\Model\ExportRenderer;
|
namespace D3\DataWizard\Application\Model\ExportRenderer;
|
||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
||||||
|
use JsonException;
|
||||||
|
|
||||||
class Json implements RendererInterface
|
class Json implements RendererInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param $rows
|
* @param iterable $rows
|
||||||
* @param $fieldNames
|
* @param iterable $fieldNames
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
* @throws RenderException
|
* @throws RenderException
|
||||||
*/
|
*/
|
||||||
public function getContent($rows, $fieldNames): string
|
public function getContent( iterable $rows, iterable $fieldNames): string
|
||||||
{
|
{
|
||||||
$flags = JSON_PRETTY_PRINT;
|
try {
|
||||||
$json = json_encode( $rows, $flags );
|
$flags = JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES;
|
||||||
if ( $json === false ) {
|
return json_encode($rows, $flags);
|
||||||
throw oxNew( RenderException::class, json_last_error_msg(), json_last_error());
|
} catch (JsonException $e) {
|
||||||
|
/** @var RenderException $newException */
|
||||||
|
$newException = oxNew(RenderException::class, $e->getMessage(), $e->getCode(), $e);
|
||||||
|
throw $newException;
|
||||||
}
|
}
|
||||||
return $json;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFileExtension(): string
|
public function getFileExtension(): string
|
||||||
|
@ -20,12 +20,12 @@ use MathieuViossat\Util\ArrayToTextTable;
|
|||||||
class Pretty implements RendererInterface
|
class Pretty implements RendererInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param $rows
|
* @param iterable $rows
|
||||||
* @param $fieldNames
|
* @param iterable $fieldNames
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getContent($rows, $fieldNames) : string
|
public function getContent(iterable $rows, iterable $fieldNames): string
|
||||||
{
|
{
|
||||||
$renderer = $this->getArrayToTextTableInstance($rows);
|
$renderer = $this->getArrayToTextTableInstance($rows);
|
||||||
return $renderer->getTable();
|
return $renderer->getTable();
|
||||||
@ -35,7 +35,7 @@ class Pretty implements RendererInterface
|
|||||||
* @param $rows
|
* @param $rows
|
||||||
* @return ArrayToTextTable
|
* @return ArrayToTextTable
|
||||||
*/
|
*/
|
||||||
public function getArrayToTextTableInstance($rows)
|
public function getArrayToTextTableInstance($rows): ArrayToTextTable
|
||||||
{
|
{
|
||||||
return oxNew(ArrayToTextTable::class, $rows);
|
return oxNew(ArrayToTextTable::class, $rows);
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,9 @@ use D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException;
|
|||||||
|
|
||||||
class RendererBridge
|
class RendererBridge
|
||||||
{
|
{
|
||||||
const FORMAT_CSV = 'CSV';
|
public const FORMAT_CSV = 'CSV';
|
||||||
const FORMAT_PRETTY = 'Pretty';
|
public const FORMAT_PRETTY = 'Pretty';
|
||||||
const FORMAT_JSON = 'JSON';
|
public const FORMAT_JSON = 'JSON';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
@ -31,11 +31,11 @@ class RendererBridge
|
|||||||
return [
|
return [
|
||||||
self::FORMAT_CSV => oxNew(Csv::class),
|
self::FORMAT_CSV => oxNew(Csv::class),
|
||||||
self::FORMAT_PRETTY => oxNew(Pretty::class),
|
self::FORMAT_PRETTY => oxNew(Pretty::class),
|
||||||
self::FORMAT_JSON => oxNew(Json::class)
|
self::FORMAT_JSON => oxNew(Json::class),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTranslatedRendererIdList()
|
public function getTranslatedRendererIdList(): array
|
||||||
{
|
{
|
||||||
$rendererList = $this->getRendererList();
|
$rendererList = $this->getRendererList();
|
||||||
array_walk($rendererList, [$this, 'translateRendererId']);
|
array_walk($rendererList, [$this, 'translateRendererId']);
|
||||||
@ -45,7 +45,7 @@ class RendererBridge
|
|||||||
/**
|
/**
|
||||||
* @param RendererInterface $instance
|
* @param RendererInterface $instance
|
||||||
*/
|
*/
|
||||||
protected function translateRendererId(RendererInterface &$instance)
|
protected function translateRendererId(RendererInterface &$instance): void
|
||||||
{
|
{
|
||||||
$instance = $instance->getTitleTranslationId();
|
$instance = $instance->getTitleTranslationId();
|
||||||
}
|
}
|
||||||
@ -60,8 +60,8 @@ class RendererBridge
|
|||||||
{
|
{
|
||||||
$format = strtolower($format);
|
$format = strtolower($format);
|
||||||
|
|
||||||
$rendererList = array_change_key_case($this->getRendererList(), CASE_LOWER);
|
$rendererList = array_change_key_case($this->getRendererList());
|
||||||
$rendererListTypes = array_keys(array_change_key_case($rendererList, CASE_LOWER));
|
$rendererListTypes = array_keys(array_change_key_case($rendererList));
|
||||||
|
|
||||||
if (in_array($format, $rendererListTypes, true)) {
|
if (in_array($format, $rendererListTypes, true)) {
|
||||||
return $rendererList[$format];
|
return $rendererList[$format];
|
||||||
|
@ -18,20 +18,20 @@ namespace D3\DataWizard\Application\Model\ExportRenderer;
|
|||||||
interface RendererInterface
|
interface RendererInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param $rows
|
* @param iterable $rows
|
||||||
* @param $fieldNames
|
* @param iterable $fieldNames
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getContent($rows, $fieldNames) : string;
|
public function getContent(iterable $rows, iterable $fieldNames): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getFileExtension() : string;
|
public function getFileExtension(): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getTitleTranslationId() : string;
|
public function getTitleTranslationId(): string;
|
||||||
}
|
}
|
@ -25,23 +25,23 @@ interface QueryBase
|
|||||||
* Ensure that the translations are equally available in the frontend and the backend
|
* Ensure that the translations are equally available in the frontend and the backend
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getTitle() : string;
|
public function getTitle(): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure that the translations are equally available in the frontend and the backend
|
* Ensure that the translations are equally available in the frontend and the backend
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getDescription() : string;
|
public function getDescription(): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getButtonText() : string;
|
public function getButtonText(): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array [string $query, array $parameters]
|
* @return array [string $query, array $parameters]
|
||||||
*/
|
*/
|
||||||
public function getQuery() : array;
|
public function getQuery(): array;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Input $input
|
* @param Input $input
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
[{block name="submitElements"}]
|
|
||||||
<div class="btn-group">
|
|
||||||
<button type="button" class="btn btn-primary" onclick="startTask('[{$id}]')">
|
|
||||||
<i class="fas fa-fw fa-magic"></i>
|
|
||||||
[{oxmultilang ident=$item->getButtonText()}]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
[{/block}]
|
|
25
Application/views/admin_smarty/de/d3DataWizard_lang.php
Normal file
25
Application/views/admin_smarty/de/d3DataWizard_lang.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* https://www.d3data.de
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
|
||||||
|
* @link https://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
$sLangName = 'Deutsch';
|
||||||
|
|
||||||
|
// -------------------------------
|
||||||
|
// RESOURCE IDENTITFIER = STRING
|
||||||
|
// -------------------------------
|
||||||
|
|
||||||
|
$aLang = include __DIR__."/../../de/d3DataWizard_translations.php";
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreEnd
|
25
Application/views/admin_smarty/en/d3DataWizard_lang.php
Normal file
25
Application/views/admin_smarty/en/d3DataWizard_lang.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* https://www.d3data.de
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
|
||||||
|
* @link https://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
$sLangName = 'English';
|
||||||
|
|
||||||
|
// -------------------------------
|
||||||
|
// RESOURCE IDENTITFIER = STRING
|
||||||
|
// -------------------------------
|
||||||
|
|
||||||
|
$aLang = include __DIR__."/../../en/d3DataWizard_translations.php";
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreEnd
|
25
Application/views/admin_twig/de/d3DataWizard_lang.php
Normal file
25
Application/views/admin_twig/de/d3DataWizard_lang.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* https://www.d3data.de
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
|
||||||
|
* @link https://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
$sLangName = 'Deutsch';
|
||||||
|
|
||||||
|
// -------------------------------
|
||||||
|
// RESOURCE IDENTITFIER = STRING
|
||||||
|
// -------------------------------
|
||||||
|
|
||||||
|
$aLang = include __DIR__."/../../de/d3DataWizard_translations.php";
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreEnd
|
25
Application/views/admin_twig/en/d3DataWizard_lang.php
Normal file
25
Application/views/admin_twig/en/d3DataWizard_lang.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* https://www.d3data.de
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
|
||||||
|
* @link https://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
$sLangName = 'English';
|
||||||
|
|
||||||
|
// -------------------------------
|
||||||
|
// RESOURCE IDENTITFIER = STRING
|
||||||
|
// -------------------------------
|
||||||
|
|
||||||
|
$aLang = include __DIR__."/../../en/d3DataWizard_translations.php";
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreEnd
|
@ -11,14 +11,10 @@
|
|||||||
* @link https://www.oxidmodule.com
|
* @link https://www.oxidmodule.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
$sLangName = "Deutsch";
|
return [
|
||||||
// -------------------------------
|
|
||||||
// RESOURCE IDENTITFIER = STRING
|
|
||||||
// -------------------------------
|
|
||||||
$aLang = array(
|
|
||||||
|
|
||||||
//Navigation
|
//Navigation
|
||||||
'charset' => 'UTF-8',
|
'charset' => 'UTF-8',
|
||||||
'd3mxDataWizard' => '<i class="fas fa-fw fa-hat-wizard"></i> Data Wizard',
|
'd3mxDataWizard' => '<i class="fas fa-fw fa-hat-wizard"></i> Data Wizard',
|
||||||
@ -42,6 +38,7 @@ $aLang = array(
|
|||||||
'D3_DATAWIZARD_EXPORT_FORMAT_JSON' => 'JSON-Format',
|
'D3_DATAWIZARD_EXPORT_FORMAT_JSON' => 'JSON-Format',
|
||||||
|
|
||||||
'D3_DATAWIZARD_ACTION_SUBMIT' => 'Aktion starten',
|
'D3_DATAWIZARD_ACTION_SUBMIT' => 'Aktion starten',
|
||||||
|
'D3_DATAWIZARD_ACTION_SUBMIT_CONFIRM' => 'Soll die Aktion gestartet werden?',
|
||||||
|
|
||||||
'D3_DATAWIZARD_DEBUG' => 'Debug: %1$s',
|
'D3_DATAWIZARD_DEBUG' => 'Debug: %1$s',
|
||||||
|
|
||||||
@ -55,4 +52,5 @@ $aLang = array(
|
|||||||
'D3_DATAWIZARD_ERR_NOACTION_INSTALLED' => 'Es sind keine Aktionen installiert oder aktiviert.',
|
'D3_DATAWIZARD_ERR_NOACTION_INSTALLED' => 'Es sind keine Aktionen installiert oder aktiviert.',
|
||||||
'D3_DATAWIZARD_ERR_ACTIONRESULT' => '%1$s Eintrag verändert',
|
'D3_DATAWIZARD_ERR_ACTIONRESULT' => '%1$s Eintrag verändert',
|
||||||
'D3_DATAWIZARD_ERR_ACTIONRESULTS' => '%1$s Einträge verändert',
|
'D3_DATAWIZARD_ERR_ACTIONRESULTS' => '%1$s Einträge verändert',
|
||||||
);
|
];
|
||||||
|
// @codeCoverageIgnoreEnd
|
@ -11,13 +11,10 @@
|
|||||||
* @link https://www.oxidmodule.com
|
* @link https://www.oxidmodule.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
$sLangName = "English";
|
return [
|
||||||
// -------------------------------
|
|
||||||
// RESOURCE IDENTITFIER = STRING
|
|
||||||
// -------------------------------
|
|
||||||
$aLang = array(
|
|
||||||
|
|
||||||
//Navigation
|
//Navigation
|
||||||
'charset' => 'UTF-8',
|
'charset' => 'UTF-8',
|
||||||
@ -42,6 +39,7 @@ $aLang = array(
|
|||||||
'D3_DATAWIZARD_EXPORT_FORMAT_JSON' => 'JSON format',
|
'D3_DATAWIZARD_EXPORT_FORMAT_JSON' => 'JSON format',
|
||||||
|
|
||||||
'D3_DATAWIZARD_ACTION_SUBMIT' => 'run action',
|
'D3_DATAWIZARD_ACTION_SUBMIT' => 'run action',
|
||||||
|
'D3_DATAWIZARD_ACTION_SUBMIT_CONFIRM' => 'Should the action be executed?',
|
||||||
|
|
||||||
'D3_DATAWIZARD_DEBUG' => 'Debug: %1$s',
|
'D3_DATAWIZARD_DEBUG' => 'Debug: %1$s',
|
||||||
|
|
||||||
@ -55,4 +53,5 @@ $aLang = array(
|
|||||||
'D3_DATAWIZARD_ERR_NOACTION_INSTALLED' => 'No actions are installed or activated.',
|
'D3_DATAWIZARD_ERR_NOACTION_INSTALLED' => 'No actions are installed or activated.',
|
||||||
'D3_DATAWIZARD_ERR_ACTIONRESULT' => '%1$s entry changed',
|
'D3_DATAWIZARD_ERR_ACTIONRESULT' => '%1$s entry changed',
|
||||||
'D3_DATAWIZARD_ERR_ACTIONRESULTS' => '%1$s entries changed',
|
'D3_DATAWIZARD_ERR_ACTIONRESULTS' => '%1$s entries changed',
|
||||||
);
|
];
|
||||||
|
// @codeCoverageIgnoreEnd
|
84
CHANGELOG.md
84
CHANGELOG.md
@ -1,61 +1,85 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## 1.5.0.1 (2023-03-22)
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [unreleased](https://git.d3data.de/D3Public/DataWizard/compare/3.0.0.0...rel_3.x) - 2023-09-12
|
||||||
|
|
||||||
|
## [3.0.0.0](https://git.d3data.de/D3Public/DataWizard/compare/2.1.1.3...3.0.0.0) - 2024-05-13
|
||||||
|
### Added
|
||||||
|
- installable in OXID 7.0 + 7.1
|
||||||
|
- Twig support
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- support for OXID < 7
|
||||||
|
|
||||||
|
## [2.1.1.3](https://git.d3data.de/D3Public/DataWizard/compare/2.1.1.2...2.1.1.3) - 2023-09-12
|
||||||
|
### Added
|
||||||
|
- apply roles and rights
|
||||||
|
|
||||||
|
## [2.1.1.2](https://git.d3data.de/D3Public/DataWizard/compare/2.1.1.1...2.1.1.2) - 2023-03-30
|
||||||
|
### Fixed
|
||||||
|
- fix JavaScript for multiple forms
|
||||||
|
|
||||||
|
## [2.1.1.1](https://git.d3data.de/D3Public/DataWizard/compare/2.1.1.0...2.1.1.1) - 2023-03-22
|
||||||
### Fixed
|
### Fixed
|
||||||
- wrong cascaded HTML elements
|
- wrong cascaded HTML elements
|
||||||
|
|
||||||
## 1.5.0.0 (2021-12-21)
|
## [2.1.1.0](https://git.d3data.de/D3Public/DataWizard/compare/2.1.0.0...2.1.1.0) - 2022-12-24
|
||||||
|
### Added
|
||||||
|
- installable in OXID 6.5.0 and 6.5.1
|
||||||
|
- request confirmation before execute action
|
||||||
|
|
||||||
#### Added
|
### Changed
|
||||||
- add tests
|
- documentation extended
|
||||||
|
|
||||||
#### Changed
|
## [2.1.0.0](https://git.d3data.de/D3Public/DataWizard/compare/2.0.0.0...2.1.0.0) - 2021-12-21
|
||||||
|
### Changed
|
||||||
- adjust to CLI extension which can export to STDOUT
|
- adjust to CLI extension which can export to STDOUT
|
||||||
- restrict dependencies to OXID 6.2, use 2.x for newer installations
|
|
||||||
|
|
||||||
---
|
## [2.0.0.0](https://git.d3data.de/D3Public/DataWizard/compare/1.4.0.0...2.0.0.0) - 2021-12-20
|
||||||
|
### Added
|
||||||
|
- add tests
|
||||||
|
- make installable in OXID 6.4
|
||||||
|
|
||||||
## 1.4.0.0 (2021-11-11)
|
### Changed
|
||||||
|
- adjust code to PHP 7.3 and up
|
||||||
|
|
||||||
#### Added
|
## [1.4.0.0](https://git.d3data.de/D3Public/DataWizard/compare/1.3.1.0...1.4.0.0) - 2021-11-11
|
||||||
|
### Added
|
||||||
- add JSON export renderer
|
- add JSON export renderer
|
||||||
- add tpl block for easier extension
|
- add tpl block for easier extension
|
||||||
- enable controller based exception handling
|
- enable controller based exception handling
|
||||||
|
|
||||||
#### Changed
|
### Changed
|
||||||
- change deprecated CSV export code
|
- change deprecated CSV export code
|
||||||
- show registered export renderers in admin submit without required tpl block extension
|
- show registered export renderers in admin submit without required tpl block extension
|
||||||
- force get translations from admin
|
- force get translations from admin
|
||||||
|
|
||||||
---
|
## [1.3.1.0](https://git.d3data.de/D3Public/DataWizard/compare/1.2.0.0...1.3.0.0) - 2021-09-10
|
||||||
|
### Added
|
||||||
## 1.3.1.0 (2021-09-10)
|
|
||||||
|
|
||||||
- installable in OXID 6.3.1
|
- installable in OXID 6.3.1
|
||||||
|
|
||||||
---
|
## [1.3.0.0](https://git.d3data.de/D3Public/DataWizard/compare/1.2.0.0...1.3.0.0) - 2021-07-29
|
||||||
|
### Changed
|
||||||
## 1.3.0.0 (2021-07-29)
|
|
||||||
|
|
||||||
- can handle long task description text
|
- can handle long task description text
|
||||||
- has more generic admin controller templates
|
- has more generic admin controller templates
|
||||||
|
|
||||||
---
|
## [1.2.0.0](https://git.d3data.de/D3Public/DataWizard/compare/1.1.0.0...1.2.0.0) - 2021-07-27
|
||||||
|
### Added
|
||||||
## 1.2.0.0 (2021-07-27)
|
|
||||||
|
|
||||||
- adjustments for CLI extension
|
- adjustments for CLI extension
|
||||||
|
|
||||||
|
### Fixed
|
||||||
- fix OXID 6.1 incompatibilities
|
- fix OXID 6.1 incompatibilities
|
||||||
|
|
||||||
---
|
## [1.1.0.0](https://git.d3data.de/D3Public/DataWizard/compare/1.0.0.0...1.1.0.0) - 2021-06-25
|
||||||
|
### Added
|
||||||
## 1.1.0.0 (2021-06-25)
|
|
||||||
|
|
||||||
- implement form builder
|
- implement form builder
|
||||||
|
|
||||||
|
### Fixed
|
||||||
- fix key figures export
|
- fix key figures export
|
||||||
|
|
||||||
---
|
## [1.0.0.0](https://git.d3data.de/D3Public/DataWizard/releases/tag/1.0.0.0) - 2021-06-22
|
||||||
|
### Added
|
||||||
## 1.0.0.0 (2021-06-22)
|
|
||||||
|
|
||||||
- initial implementation
|
- initial implementation
|
41
README.en.md
41
README.en.md
@ -9,20 +9,39 @@ The exports are defined via database queries or ready-made data lists. Various e
|
|||||||
|
|
||||||
All exports and tasks are grouped together for better clarity.
|
All exports and tasks are grouped together for better clarity.
|
||||||
|
|
||||||
Sample exports are included in the package d3/datawizardtasks. These are intended to serve as an implementation reference for individual exports.
|
Sample exports are included in the package `d3/datawizardtasks`. These are intended to serve as an implementation reference for individual exports.
|
||||||
|
|
||||||
![administration area](assets/administration_exports.jpg "administration area")
|
![administration area](assets/administration_exports.jpg "administration area")
|
||||||
|
|
||||||
|
## Table of content
|
||||||
|
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [Extensibility](#extensibility)
|
||||||
|
- [Extension packages](#extension-packages)
|
||||||
|
- [Changelog](#changelog)
|
||||||
|
- [Contributing](#contributing)
|
||||||
|
- [License](#license)
|
||||||
|
- [Further licences and terms of use](#further-licences-and-terms-of-use)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
In the console in the shop root (above source and vendor), execute the following command:
|
This package requires an Composer installed OXID eShop as defined in [composer.json](composer.json).
|
||||||
|
|
||||||
|
Open a command line interface and navigate to the shop root directory (parent of source and vendor). Execute the following command. Adapt the paths to your environment.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
php composer require d3/datawizard:^1.0
|
php composer require d3/datawizard:^2.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Activate the module in the admin area of the shop in "Extensions -> Modules".
|
Activate the module in the admin area of the shop in "Extensions -> Modules".
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
These package doesn't contain any export or action items. See [Extension packages](#extension_packages) for installable example items.
|
||||||
|
|
||||||
|
Log in to the admin area of your shop and navigate to "DÂł Modules -> Data Wizard". Go to "Exports" or "Actions" (as desired). Choose your desired item and export or execute it.
|
||||||
|
|
||||||
## Extensibility
|
## Extensibility
|
||||||
|
|
||||||
The module represents the technical basic framework of the exports and does not claim to be complete. In order to adapt the scope to individual requirements, the following extensions are prepared:
|
The module represents the technical basic framework of the exports and does not claim to be complete. In order to adapt the scope to individual requirements, the following extensions are prepared:
|
||||||
@ -33,7 +52,7 @@ The module represents the technical basic framework of the exports and does not
|
|||||||
|
|
||||||
Independently of this, all extension options are available that the OXID Shop provides for modules.
|
Independently of this, all extension options are available that the OXID Shop provides for modules.
|
||||||
|
|
||||||
## Extension packages
|
### Extension packages
|
||||||
|
|
||||||
- `d3/datawizardtasks` - provides sample exports and their implementation reference
|
- `d3/datawizardtasks` - provides sample exports and their implementation reference
|
||||||
- `d3/datawizardcli` - provides the execution of exports or tasks via the command prompt (e.g. as cronjobs)
|
- `d3/datawizardcli` - provides the execution of exports or tasks via the command prompt (e.g. as cronjobs)
|
||||||
@ -43,9 +62,21 @@ Independently of this, all extension options are available that the OXID Shop pr
|
|||||||
|
|
||||||
See [CHANGELOG](CHANGELOG.md) for further informations.
|
See [CHANGELOG](CHANGELOG.md) for further informations.
|
||||||
|
|
||||||
## Licence of this software (d3/datawizard)
|
## Contributing
|
||||||
|
|
||||||
|
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue. Don't forget to give the project a star! Thanks again!
|
||||||
|
|
||||||
|
- Fork the Project
|
||||||
|
- Create your Feature Branch (git checkout -b feature/AmazingFeature)
|
||||||
|
- Commit your Changes (git commit -m 'Add some AmazingFeature')
|
||||||
|
- Push to the Branch (git push origin feature/AmazingFeature)
|
||||||
|
- Open a Pull Request
|
||||||
|
|
||||||
|
## License
|
||||||
(status: 2021-05-06)
|
(status: 2021-05-06)
|
||||||
|
|
||||||
|
Distributed under the GPLv3 license.
|
||||||
|
|
||||||
```
|
```
|
||||||
Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
|
Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
|
||||||
|
44
README.md
44
README.md
@ -9,20 +9,40 @@ Die Exporte werden ĂĽber Datenbankabfragen oder fertige Datenlisten definiert. E
|
|||||||
|
|
||||||
Alle Exporte bzw. Tasks sind fĂĽr eine bessere Ăśbersichtlichkeit in Gruppen zusammengefasst.
|
Alle Exporte bzw. Tasks sind fĂĽr eine bessere Ăśbersichtlichkeit in Gruppen zusammengefasst.
|
||||||
|
|
||||||
Im Paket d3/datawizardtasks sind Beispielexporte enthalten. Diese sollen als Implementierungsreferenz fĂĽr individuelle Exporte dienen.
|
Im Paket `d3/datawizardtasks` sind Beispielexporte enthalten. Diese sollen als Implementierungsreferenz fĂĽr individuelle Exporte dienen.
|
||||||
|
|
||||||
![Adminbereich](assets/administration_exports.jpg "Adminbereich")
|
![Adminbereich](assets/administration_exports.jpg "Adminbereich")
|
||||||
|
|
||||||
## Schnellinstallation
|
## Inhaltsverzeichnis
|
||||||
|
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Verwendung](#verwendung)
|
||||||
|
- [Erweiterbarkeit](#erweiterbarkeit)
|
||||||
|
- [Erweiterungspakete](#erweiterungspakete)
|
||||||
|
- [Changelog](#changelog)
|
||||||
|
- [Beitragen](#beitragen)
|
||||||
|
- [Lizenz](#lizenz)
|
||||||
|
- [weitere Lizenzen und Nutzungsbedingungen](#weitere-lizenzen-und-nutzungsbedingungen)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Dieses Paket erfordert einen mit Composer installierten OXID eShop in einer in der [composer.json](composer.json) definierten Version.
|
||||||
|
|
||||||
|
Ă–ffnen Sie eine Kommandozeile und navigieren Sie zum Stammverzeichnis des Shops (Elternverzeichnis von source und vendor). FĂĽhren Sie den folgenden Befehl aus. Passen Sie die Pfadangaben an Ihre Installationsumgebung an.
|
||||||
|
|
||||||
Auf der Konsole im Shoproot (oberhalb von source und vendor) folgenden Befehl ausfĂĽhren:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
php composer require d3/datawizard:^1.0
|
php composer require d3/datawizard:^2.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Aktivieren Sie das Modul im Shopadmin unter "Erweiterungen -> Module".
|
Aktivieren Sie das Modul im Shopadmin unter "Erweiterungen -> Module".
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
Dieses Paket enthält keine Exporte oder Aktionen. In [Erweiterungspakete](#erweiterungspakete) finden Sie installierbare Beispieleinträge.
|
||||||
|
|
||||||
|
Melden Sie sich im Adminbereich Ihres Shops an und navigieren Sie zu "D³ Module -> Data Wizard". Wechseln Sie je nach Wunsch zu "Exporte" oder "Aktionen". Wählen Sie den gewünschten Eintrag und starten Sie den Export bzw. die Aktion.
|
||||||
|
|
||||||
## Erweiterbarkeit
|
## Erweiterbarkeit
|
||||||
|
|
||||||
Das Modul stellt das technische Grundgerüst der Exporte dar und erhebt keinen Anspruch auf Vollständigkeit. Um den Umfang an die individuellen Anforderungen anzupassen, sind folgende Erweiterungen vorbereitet:
|
Das Modul stellt das technische Grundgerüst der Exporte dar und erhebt keinen Anspruch auf Vollständigkeit. Um den Umfang an die individuellen Anforderungen anzupassen, sind folgende Erweiterungen vorbereitet:
|
||||||
@ -33,7 +53,7 @@ Das Modul stellt das technische GrundgerĂĽst der Exporte dar und erhebt keinen A
|
|||||||
|
|
||||||
Unabhängig dessen stehen alle Erweiterungsmöglichkeiten zur Verfügung, die der OXID Shop für Module bereitstellt.
|
Unabhängig dessen stehen alle Erweiterungsmöglichkeiten zur Verfügung, die der OXID Shop für Module bereitstellt.
|
||||||
|
|
||||||
## Erweiterungspakete
|
### Erweiterungspakete
|
||||||
|
|
||||||
- `d3/datawizardtasks` - liefert Beispielexporte und deren Implementierungsreferenz
|
- `d3/datawizardtasks` - liefert Beispielexporte und deren Implementierungsreferenz
|
||||||
- `d3/datawizardcli` - ermöglicht die Ausführung der Exporte oder Tasks über die Eingabeaufforderung (z.B. als Cronjobs)
|
- `d3/datawizardcli` - ermöglicht die Ausführung der Exporte oder Tasks über die Eingabeaufforderung (z.B. als Cronjobs)
|
||||||
@ -43,9 +63,21 @@ Unabhängig dessen stehen alle Erweiterungsmöglichkeiten zur Verfügung, die de
|
|||||||
|
|
||||||
Siehe [CHANGELOG](CHANGELOG.md) fĂĽr weitere Informationen.
|
Siehe [CHANGELOG](CHANGELOG.md) fĂĽr weitere Informationen.
|
||||||
|
|
||||||
## Lizenz dieser Software (d3/datawizard)
|
## Beitragen
|
||||||
|
|
||||||
|
Wenn Sie eine Verbesserungsvorschlag haben, legen Sie einen Fork des Repositories an und erstellen Sie einen Pull Request. Alternativ können Sie einfach ein Issue erstellen. Fügen Sie das Projekt zu Ihren Favoriten hinzu. Vielen Dank.
|
||||||
|
|
||||||
|
- Erstellen Sie einen Fork des Projekts
|
||||||
|
- Erstellen Sie einen Feature Branch (git checkout -b feature/AmazingFeature)
|
||||||
|
- FĂĽgen Sie Ihre Ă„nderungen hinzu (git commit -m 'Add some AmazingFeature')
|
||||||
|
- Ăśbertragen Sie den Branch (git push origin feature/AmazingFeature)
|
||||||
|
- Ă–ffnen Sie einen Pull Request
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
(Stand: 06.05.2021)
|
(Stand: 06.05.2021)
|
||||||
|
|
||||||
|
Vertrieben unter der GPLv3 Lizenz.
|
||||||
|
|
||||||
```
|
```
|
||||||
Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
|
Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "d3/datawizard",
|
"name": "d3/datawizard",
|
||||||
"description": "das magische Datenwerkzeug",
|
"description": "the magical data tool /\n das magische Datenwerkzeug",
|
||||||
"type": "oxideshop-module",
|
"type": "oxideshop-module",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"oxid",
|
"oxid",
|
||||||
@ -25,24 +25,17 @@
|
|||||||
"GPL-3.0-or-later"
|
"GPL-3.0-or-later"
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1",
|
"php": "^8.0",
|
||||||
"oxid-esales/oxideshop-ce": "6.3 - 6.7",
|
"oxid-esales/oxideshop-ce": "7.0 - 7.1",
|
||||||
"league/csv": "^9.0",
|
"league/csv": "^9.0",
|
||||||
"mathieuviossat/arraytotexttable": "^1.0",
|
"mathieuviossat/arraytotexttable": "^1.0",
|
||||||
"form-manager/form-manager": "^5.1 || ^6.1",
|
"form-manager/form-manager": "^6.1",
|
||||||
"d3/modcfg": "^5.3.6.0"
|
"d3/modcfg": "^7.0",
|
||||||
|
"beberlei/assert": "^3.3.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"oxid-esales/oxideshop-ce": "6.8 - 6.9"
|
"d3/testingtools": "^1.2.0.0",
|
||||||
},
|
"phpunit/phpunit": "^9.1.1"
|
||||||
"extra": {
|
|
||||||
"oxideshop": {
|
|
||||||
"blacklist-filter": [
|
|
||||||
"*.md",
|
|
||||||
"composer.json"
|
|
||||||
],
|
|
||||||
"target-directory": "d3/datawizard"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"d3/datawizardtasks": "useful example tasks for Data Wizard",
|
"d3/datawizardtasks": "useful example tasks for Data Wizard",
|
||||||
@ -51,7 +44,11 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"D3\\DataWizard\\": "../../../source/modules/d3/datawizard"
|
"D3\\DataWizard\\": "./"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"phpunit": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --config=vendor/d3/datawizard/ --no-coverage",
|
||||||
|
"phpunit-coverage": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --config=vendor/d3/datawizard/ --coverage-html=vendor/d3/datawizard/tests/result/coverage"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
dependencies.yaml
Normal file
2
dependencies.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
modules:
|
||||||
|
- d3modcfg_lib
|
29
metadata.php
29
metadata.php
@ -13,12 +13,11 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
use D3\DataWizard\Application\Model\Constants;
|
||||||
* Metadata version
|
|
||||||
*/
|
|
||||||
$sMetadataVersion = '2.1';
|
$sMetadataVersion = '2.1';
|
||||||
|
|
||||||
$sModuleId = 'd3datawizard';
|
$sModuleId = Constants::OXID_MODULE_ID;
|
||||||
$logo = '<img src="https://logos.oxidmodule.com/d3logo.svg" alt="(D3)" style="height:1em;width:1em">';
|
$logo = '<img src="https://logos.oxidmodule.com/d3logo.svg" alt="(D3)" style="height:1em;width:1em">';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,31 +30,31 @@ $aModule = [
|
|||||||
'de' => '',
|
'de' => '',
|
||||||
'en' => '',
|
'en' => '',
|
||||||
],
|
],
|
||||||
'thumbnail' => '',
|
'thumbnail' => 'picture.svg',
|
||||||
'version' => '1.5.0.1',
|
'version' => '3.0.0.0',
|
||||||
'author' => 'D³ Data Development (Inh.: Thomas Dartsch)',
|
'author' => 'D³ Data Development (Inh.: Thomas Dartsch)',
|
||||||
'email' => 'support@shopmodule.com',
|
'email' => 'support@shopmodule.com',
|
||||||
'url' => 'https://www.oxidmodule.com/',
|
'url' => 'https://www.oxidmodule.com/',
|
||||||
'controllers' => [
|
'controllers' => [
|
||||||
'd3ExportWizard' => D3\DataWizard\Application\Controller\Admin\d3ExportWizard::class,
|
'd3ExportWizard' => D3\DataWizard\Application\Controller\Admin\d3ExportWizard::class,
|
||||||
'd3ActionWizard' => D3\DataWizard\Application\Controller\Admin\d3ActionWizard::class
|
'd3ActionWizard' => D3\DataWizard\Application\Controller\Admin\d3ActionWizard::class,
|
||||||
],
|
],
|
||||||
'extend' => [],
|
'extend' => [],
|
||||||
'events' => [],
|
'events' => [],
|
||||||
'templates' => [
|
'templates' => [
|
||||||
'd3ExportWizard.tpl' => 'd3/datawizard/Application/views/admin/tpl/d3ExportWizard.tpl',
|
'@' . Constants::OXID_MODULE_ID . '/admin/d3ExportWizard.tpl' => 'views/smarty/admin/d3ExportWizard.tpl',
|
||||||
'd3ActionWizard.tpl' => 'd3/datawizard/Application/views/admin/tpl/d3ActionWizard.tpl',
|
'@' . Constants::OXID_MODULE_ID . '/admin/d3ActionWizard.tpl' => 'views/smarty/admin/d3ActionWizard.tpl',
|
||||||
'd3Wizards.tpl' => 'd3/datawizard/Application/views/admin/tpl/inc/Wizards.tpl',
|
'@' . Constants::OXID_MODULE_ID . '/admin/inc/d3Wizards.tpl' => 'views/smarty/admin/inc/Wizards.tpl',
|
||||||
'd3ExportSubmit.tpl' => 'd3/datawizard/Application/views/admin/tpl/inc/exportSubmit.tpl',
|
'@' . Constants::OXID_MODULE_ID . '/admin/inc/d3ExportSubmit.tpl' => 'views/smarty/admin/inc/exportSubmit.tpl',
|
||||||
'd3ActionSubmit.tpl' => 'd3/datawizard/Application/views/admin/tpl/inc/actionSubmit.tpl',
|
'@' . Constants::OXID_MODULE_ID . '/admin/inc/d3ActionSubmit.tpl' => 'views/smarty/admin/inc/actionSubmit.tpl',
|
||||||
],
|
],
|
||||||
'settings' => [
|
'settings' => [
|
||||||
[
|
[
|
||||||
'group' => $sModuleId.'_general',
|
'group' => $sModuleId.'_general',
|
||||||
'name' => $sModuleId.'_debug',
|
'name' => $sModuleId.'_debug',
|
||||||
'type' => 'bool',
|
'type' => 'bool',
|
||||||
'value' => false
|
'value' => false,
|
||||||
]
|
],
|
||||||
],
|
],
|
||||||
'blocks' => []
|
'blocks' => [],
|
||||||
];
|
];
|
||||||
|
36
phpunit.xml
Normal file
36
phpunit.xml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
backupGlobals="true"
|
||||||
|
bootstrap="../../../source/bootstrap.php"
|
||||||
|
colors="false"
|
||||||
|
backupStaticAttributes="false"
|
||||||
|
convertErrorsToExceptions="true"
|
||||||
|
convertNoticesToExceptions="false"
|
||||||
|
convertWarningsToExceptions="true"
|
||||||
|
forceCoversAnnotation="false"
|
||||||
|
processIsolation="false"
|
||||||
|
stopOnError="false"
|
||||||
|
stopOnFailure="false"
|
||||||
|
stopOnIncomplete="false"
|
||||||
|
stopOnSkipped="false"
|
||||||
|
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||||
|
verbose="false"
|
||||||
|
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="Unit">
|
||||||
|
<directory>tests/unit</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
<coverage includeUncoveredFiles="true" processUncoveredFiles="true">
|
||||||
|
<include>
|
||||||
|
<directory suffix=".php">Application</directory>
|
||||||
|
</include>
|
||||||
|
<exclude>
|
||||||
|
<file>../.php-cs-fixer.php</file>
|
||||||
|
<file>../IntelliSenseHelper.php</file>
|
||||||
|
</exclude>
|
||||||
|
</coverage>
|
||||||
|
<php>
|
||||||
|
<const name="OXID_PHP_UNIT" value="true"/>
|
||||||
|
</php>
|
||||||
|
</phpunit>
|
84
picture.svg
Normal file
84
picture.svg
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="201px" height="124px" viewBox="0 0 201 124" enable-background="new 0 0 201 124" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="47.0591" y1="67.5117" x2="47.0591" y2="54.6143">
|
||||||
|
<stop offset="0.0056" style="stop-color:#3266A9"/>
|
||||||
|
<stop offset="1" style="stop-color:#0099FF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_1_)" d="M50.282,55.502c-0.784-0.592-2.104-0.888-3.961-0.888h-1.376l-2.283,12.898h1.779
|
||||||
|
c3.76,0,6.032-2.245,6.815-6.733c0.134-0.871,0.202-1.642,0.202-2.313C51.457,57.081,51.064,56.093,50.282,55.502z"/>
|
||||||
|
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="65.9609" y1="49.104" x2="65.9609" y2="36.9434">
|
||||||
|
<stop offset="0.0056" style="stop-color:#3266A9"/>
|
||||||
|
<stop offset="1" style="stop-color:#0099FF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_2_)" d="M65.72,40.482c1.074,0,1.611,0.381,1.611,1.143c0,0.701-0.321,1.201-0.962,1.5
|
||||||
|
c-0.209,0.119-0.366,0.194-0.471,0.224c-0.065,0.019-0.158,0.037-0.271,0.056c1.98,1.621,3.702,3.544,5.097,5.699
|
||||||
|
c0.117-0.321,0.21-0.658,0.277-1.013l0.09-1.008c0-1.223-0.568-2.081-1.701-2.574c0.776-0.402,1.376-0.94,1.801-1.611
|
||||||
|
c0.425-0.672,0.638-1.418,0.638-2.239c0-0.642-0.198-1.265-0.593-1.868c-0.396-0.605-0.98-1.049-1.757-1.333
|
||||||
|
c-0.433-0.193-0.876-0.328-1.332-0.402c-0.456-0.075-1.003-0.113-1.645-0.113c-0.82,0-1.663,0.124-2.529,0.37
|
||||||
|
c-0.865,0.246-1.6,0.563-2.204,0.952s-1.13,0.907-1.578,1.557c-0.036,0.052-0.066,0.109-0.101,0.163
|
||||||
|
c1.196,0.534,2.341,1.163,3.426,1.874C63.947,40.943,64.68,40.482,65.72,40.482z"/>
|
||||||
|
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="50.0576" y1="87.0566" x2="50.0576" y2="37.8525">
|
||||||
|
<stop offset="0.0056" style="stop-color:#3266A9"/>
|
||||||
|
<stop offset="1" style="stop-color:#0099FF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_3_)" d="M70.725,49.104c-0.433,1.189-1.208,2.147-2.331,2.871c-1.425,0.918-3.182,1.377-5.271,1.377
|
||||||
|
c-1.179,0-2.175-0.176-2.988-0.525c-0.813-0.35-1.444-0.864-1.891-1.543c-0.448-0.678-0.671-1.481-0.671-2.405l0.022-0.694
|
||||||
|
l0.156-0.693h4.367l-0.028,0.179v0.179v0.246c0,1.164,0.628,1.746,1.884,1.746c0.635,0,1.201-0.217,1.696-0.649
|
||||||
|
c0.495-0.434,0.742-0.94,0.742-1.522c0-0.522-0.194-0.887-0.582-1.097c-0.329-0.208-1.007-0.313-2.036-0.313l0.47-2.754
|
||||||
|
l1.141-0.067c0.083-0.011,0.154-0.022,0.221-0.033c-0.674-0.551-1.378-1.067-2.11-1.546c-0.044,0.096-0.087,0.195-0.125,0.302
|
||||||
|
h-4.185c0.192-0.837,0.49-1.56,0.884-2.175c-3.064-1.372-6.46-2.133-10.034-2.133c-13.588,0-24.603,11.014-24.603,24.601
|
||||||
|
c0,13.59,11.015,24.604,24.603,24.604S74.66,76.043,74.66,62.453C74.66,57.532,73.214,52.949,70.725,49.104z M59.413,59.233
|
||||||
|
l-0.168,1.275c-0.538,2.953-1.511,5.404-2.921,7.35c-1.298,1.835-3.016,3.179-5.153,4.028c-2.138,0.851-4.494,1.274-7.067,1.274
|
||||||
|
H33.731l4.264-24.198h10.441c1.141,0,2.204,0.073,3.189,0.218c0.984,0.146,1.868,0.364,2.651,0.655
|
||||||
|
c1.611,0.537,2.887,1.471,3.827,2.802c0.94,1.332,1.41,2.992,1.41,4.984L59.413,59.233z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="107.3027" y1="105.8555" x2="93.0727" y2="16.0106">
|
||||||
|
<stop offset="0" style="stop-color:#B2B2B2;stop-opacity:0"/>
|
||||||
|
<stop offset="0.2" style="stop-color:#B2B2B2"/>
|
||||||
|
<stop offset="0.8" style="stop-color:#B2B2B2"/>
|
||||||
|
<stop offset="1" style="stop-color:#B2B2B2;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<rect x="99.875" y="14.933" fill="url(#SVGID_4_)" width="0.625" height="92"/>
|
||||||
|
<script xmlns=""></script>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path fill="none" d="M153.855,40.748H140.76v9.354c0,1.034-0.839,1.872-1.871,1.872h-9.354v20.582
|
||||||
|
c0,1.031,0.838,1.869,1.871,1.869h22.45c0.083,0,0.159-0.014,0.239-0.023l-5.59-5.588h-13.358c-1.032,0-1.871-0.84-1.871-1.871
|
||||||
|
c0-1.033,0.839-1.871,1.871-1.871h9.617l-3.742-3.743h-5.875c-1.032,0-1.871-0.837-1.871-1.871c0-1.034,0.839-1.871,1.871-1.871
|
||||||
|
h3.215c-0.183-1.584,0.68-3.495,2.505-5.326c0.765-0.765,2.763-2.533,4.869-2.533c0.546,0,1.063,0.117,1.527,0.339
|
||||||
|
c0.346,0.133,0.668,0.338,0.945,0.615l7.52,7.517V42.618C155.728,41.585,154.889,40.748,153.855,40.748z"/>
|
||||||
|
<polygon fill="none" points="137.018,43.393 132.18,48.231 137.018,48.231 "/>
|
||||||
|
<path d="M133.275,66.941c0,1.031,0.839,1.871,1.871,1.871h13.358l-3.741-3.742h-9.617
|
||||||
|
C134.114,65.07,133.275,65.908,133.275,66.941z"/>
|
||||||
|
<path d="M133.275,59.457c0,1.033,0.839,1.871,1.871,1.871h5.875l-1.73-1.73c-0.272-0.272-0.476-0.587-0.613-0.923
|
||||||
|
c-0.169-0.339-0.272-0.705-0.316-1.089h-3.215C134.114,57.585,133.275,58.423,133.275,59.457z"/>
|
||||||
|
<path d="M153.855,74.424h-22.45c-1.033,0-1.871-0.838-1.871-1.869V51.973h9.354c1.032,0,1.871-0.838,1.871-1.872v-9.354h13.096
|
||||||
|
c1.033,0,1.872,0.837,1.872,1.871v15.579l1.419,1.42l1.301-1.736l-0.989-2.9c-0.358-1.065-0.215-2.155,0.394-3.001
|
||||||
|
c0.401-0.559,0.971-0.953,1.617-1.147v-8.215c0-3.1-2.514-5.613-5.613-5.613h-14.967c-0.496,0-0.973,0.197-1.322,0.548
|
||||||
|
L126.34,48.779c-0.351,0.352-0.548,0.827-0.548,1.323v22.453c0,3.1,2.514,5.611,5.613,5.611h22.45
|
||||||
|
c1.139,0,2.196-0.342,3.081-0.924l-2.842-2.842C154.015,74.41,153.938,74.424,153.855,74.424z M137.018,43.393v4.838h-4.838
|
||||||
|
L137.018,43.393z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path fill="#010002" d="M159.092,62.488l3.655-0.048c0.479-0.006,1.107,0.314,1.388,0.71l2.109,2.982
|
||||||
|
c0.281,0.393,0.624,0.34,0.769-0.125l1.089-3.486c0.14-0.466,0.636-0.96,1.098-1.103l3.487-1.084
|
||||||
|
c0.465-0.142,0.52-0.488,0.126-0.768l-2.985-2.112c-0.396-0.281-0.716-0.903-0.705-1.385l0.044-3.656
|
||||||
|
c0.006-0.479-0.305-0.644-0.694-0.352l-2.929,2.186c-0.385,0.289-1.076,0.397-1.536,0.246l-3.46-1.177
|
||||||
|
c-0.459-0.153-0.709,0.093-0.555,0.549l1.179,3.46c0.15,0.455,0.043,1.149-0.24,1.539l-2.19,2.926
|
||||||
|
C158.447,62.182,158.61,62.492,159.092,62.488z"/>
|
||||||
|
<path fill="#010002" d="M175.635,82.078l0.061-0.063l-29.578-29.571l-0.033,0.032c-0.005-0.002-0.005-0.006-0.009-0.007
|
||||||
|
c-0.489-0.496-1.99,0.201-3.343,1.552c-1.348,1.353-2.045,2.848-1.553,3.343c0.003,0.005,0.009,0.005,0.01,0.006l-0.033,0.036
|
||||||
|
l29.575,29.578l0.059-0.064c0.587,0.313,1.962-0.367,3.215-1.625C175.267,84.037,175.943,82.662,175.635,82.078z
|
||||||
|
M149.582,60.874c-0.715,0.715-1.469,1.239-2.096,1.51l-4.374-4.4c0.624-0.272,1.368-0.795,2.08-1.503
|
||||||
|
c0.705-0.708,1.222-1.446,1.497-2.066l4.385,4.41C150.801,59.443,150.28,60.174,149.582,60.874z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.4 KiB |
@ -2,51 +2,14 @@
|
|||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
Both unit and acceptance tests require OXID Testing Library installed.
|
Please install the packages listed in the composer.json in "require-dev". Unfortunately Composer does not provide an automatic installation.
|
||||||
See https://github.com/OXID-eSales/testing_library.
|
missing ext-sockets
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
Please install the packages listed in the composer.json in "require-dev". Unfortunately Composer does not provide an automatic installation.
|
Make sure the module has been activated with a valid license key.
|
||||||
|
Configure the error reporting to `error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);` in the `config.inc.php` due some deprecation issues in original OXID code
|
||||||
Here is an example of Testing Library configuration file `oxideshop/test_config.yml`
|
|
||||||
|
|
||||||
```
|
|
||||||
# This file is auto-generated during the composer install
|
|
||||||
mandatory_parameters:
|
|
||||||
shop_path: /var/www/oxideshop/source
|
|
||||||
shop_tests_path: /var/www/oxideshop/tests
|
|
||||||
partial_module_paths: d3/datawizard
|
|
||||||
optional_parameters:
|
|
||||||
shop_url: null
|
|
||||||
shop_serial: ''
|
|
||||||
enable_varnish: false
|
|
||||||
is_subshop: false
|
|
||||||
install_shop: false
|
|
||||||
remote_server_dir: null
|
|
||||||
shop_setup_path: null
|
|
||||||
restore_shop_after_tests_suite: false
|
|
||||||
test_database_name: null
|
|
||||||
restore_after_acceptance_tests: false
|
|
||||||
restore_after_unit_tests: false
|
|
||||||
tmp_path: /tmp/oxid_test_library/
|
|
||||||
database_restoration_class: DatabaseRestorer
|
|
||||||
activate_all_modules: false
|
|
||||||
run_tests_for_shop: false
|
|
||||||
run_tests_for_modules: true
|
|
||||||
screen_shots_path: null
|
|
||||||
screen_shots_url: null
|
|
||||||
browser_name: firefox
|
|
||||||
selenium_server_ip: 127.0.0.1
|
|
||||||
selenium_server_port: '4444'
|
|
||||||
additional_test_paths: null
|
|
||||||
```
|
|
||||||
|
|
||||||
## Unit Tests
|
## Unit Tests
|
||||||
|
|
||||||
To execute unit tests run the following:
|
commands are described in composer.json scripts section
|
||||||
|
|
||||||
```
|
|
||||||
cd /var/www/oxideshop/
|
|
||||||
vendor/bin/runtests
|
|
||||||
```
|
|
@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Include datawizard test config
|
// Include datawizard test config
|
||||||
|
|
||||||
namespace D3\DataWizard\tests;
|
namespace D3\DataWizard\tests;
|
||||||
|
|
||||||
use D3\ModCfg\Tests\additional_abstract;
|
use D3\ModCfg\Tests\additional_abstract;
|
||||||
@ -35,5 +36,6 @@ class additional extends additional_abstract
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
d3GetModCfgDIC()->get(additional::class);
|
d3GetOxidDIC()->get(additional::class);
|
||||||
} catch (Exception $e) {}
|
} catch (Exception) {
|
||||||
|
}
|
||||||
|
@ -11,5 +11,4 @@
|
|||||||
* @link https://www.oxidmodule.com
|
* @link https://www.oxidmodule.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define('D3DATAWIZARD_REQUIRE_MODCFG', true);
|
const D3DATAWIZARD_REQUIRE_MODCFG = true;
|
||||||
|
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
<phpunit backupGlobals="true"
|
|
||||||
backupStaticAttributes="false"
|
|
||||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
|
||||||
cacheTokens="true"
|
|
||||||
colors="false"
|
|
||||||
convertErrorsToExceptions="true"
|
|
||||||
convertNoticesToExceptions="false"
|
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
forceCoversAnnotation="false"
|
|
||||||
processIsolation="false"
|
|
||||||
stopOnError="false"
|
|
||||||
stopOnFailure="false"
|
|
||||||
stopOnIncomplete="false"
|
|
||||||
stopOnSkipped="false"
|
|
||||||
verbose="false">
|
|
||||||
<filter>
|
|
||||||
<whitelist processUncoveredFilesFromWhitelist="true">
|
|
||||||
<directory suffix=".php">../Application</directory>
|
|
||||||
<directory suffix=".php">../Modules</directory>
|
|
||||||
<directory suffix=".php">../public</directory>
|
|
||||||
<directory suffix=".php">../Setup</directory>
|
|
||||||
</whitelist>
|
|
||||||
</filter>
|
|
||||||
<logging>
|
|
||||||
<log type="junit" target="reports/logfile.xml"/>
|
|
||||||
</logging>
|
|
||||||
</phpunit>
|
|
@ -13,6 +13,6 @@ class d3TestExport extends ExportBase
|
|||||||
|
|
||||||
public function getQuery(): array
|
public function getQuery(): array
|
||||||
{
|
{
|
||||||
return "SELECT 1";
|
return ["SELECT 1"];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,23 +17,26 @@ namespace D3\DataWizard\tests\unit\Application\Controller\Admin;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Controller\Admin\d3ActionWizard;
|
use D3\DataWizard\Application\Controller\Admin\d3ActionWizard;
|
||||||
use D3\DataWizard\Application\Model\Configuration;
|
use D3\DataWizard\Application\Model\Configuration;
|
||||||
|
use D3\DataWizard\Application\Model\Constants;
|
||||||
|
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
||||||
use D3\DataWizard\Application\Model\ExportRenderer\RendererBridge;
|
use D3\DataWizard\Application\Model\ExportRenderer\RendererBridge;
|
||||||
use D3\DataWizard\tests\tools\d3TestAction;
|
use D3\DataWizard\tests\tools\d3TestAction;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use OxidEsales\Eshop\Core\Request;
|
use OxidEsales\Eshop\Core\Request;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
use ReflectionException;
|
use ReflectionException;
|
||||||
|
|
||||||
class d3ActionWizardTest extends d3AdminControllerTest
|
class d3ActionWizardTest extends d3AdminController
|
||||||
{
|
{
|
||||||
/** @var d3ActionWizard */
|
/** @var d3ActionWizard */
|
||||||
protected $_oController;
|
protected $_oController;
|
||||||
|
|
||||||
protected $testClassName = d3ActionWizard::class;
|
protected $testClassName = d3ActionWizard::class;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -99,7 +102,7 @@ class d3ActionWizardTest extends d3AdminControllerTest
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
['test1'],
|
['test1'],
|
||||||
['test2']
|
['test2'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,37 +121,32 @@ class d3ActionWizardTest extends d3AdminControllerTest
|
|||||||
$requestMock->expects($this->any())->method('getRequestEscapedParameter')->willReturnCallback([$this, 'executePassRequestCallback']);
|
$requestMock->expects($this->any())->method('getRequestEscapedParameter')->willReturnCallback([$this, 'executePassRequestCallback']);
|
||||||
Registry::set(Request::class, $requestMock);
|
Registry::set(Request::class, $requestMock);
|
||||||
|
|
||||||
/** @var Config|MockObject $configMock */
|
/** @var ModuleSettingService $settingsServiceMock */
|
||||||
$configMock = $this->getMockBuilder(Config::class)
|
$settingsServiceMock = $this->getMockBuilder(ModuleSettingService::class)
|
||||||
->onlyMethods(['getConfigParam'])
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getBoolean'])
|
||||||
->getMock();
|
->getMock();
|
||||||
$configMock->expects($this->atLeastOnce())->method('getConfigParam')->willReturnCallback(
|
$settingsServiceMock->expects($this->once())->method('getBoolean')->with(
|
||||||
function ($argName) use ($blDebug) {
|
$this->identicalTo('d3datawizard_debug'),
|
||||||
switch ($argName) {
|
$this->identicalTo(Constants::OXID_MODULE_ID)
|
||||||
case 'd3datawizard_debug':
|
)->willReturn($blDebug);
|
||||||
return $blDebug;
|
|
||||||
default:
|
|
||||||
return Registry::getConfig()->getConfigParam($argName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
/** @var d3ActionWizard|MockObject $controllerMock */
|
/** @var d3ActionWizard|MockObject $controllerMock */
|
||||||
$controllerMock = $this->getMockBuilder(d3ActionWizard::class)
|
$controllerMock = $this->getMockBuilder(d3ActionWizard::class)
|
||||||
->onlyMethods(['d3GetConfig'])
|
->onlyMethods(['getSettingsService'])
|
||||||
->getMock();
|
->getMock();
|
||||||
$controllerMock->method('d3GetConfig')->willReturn($configMock);
|
$controllerMock->method('getSettingsService')->willReturn($settingsServiceMock);
|
||||||
$this->_oController = $controllerMock;
|
$this->_oController = $controllerMock;
|
||||||
|
|
||||||
/** @var d3TestAction|MockObject $actionMock */
|
/** @var d3TestAction|MockObject $actionMock */
|
||||||
$actionMock = $this->getMockBuilder(d3TestAction::class)
|
$actionMock = $this->getMockBuilder(d3TestAction::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getQuery',
|
'getQuery',
|
||||||
'run'
|
'run',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$actionMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['1']]);
|
$actionMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['1']]);
|
||||||
$actionMock->expects($this->exactly((int) !$blDebug))->method('run')->willReturn(true);
|
$actionMock->expects($this->exactly((int) !$blDebug))->method('run');
|
||||||
|
|
||||||
/** @var Configuration|MockObject $configurationMock */
|
/** @var Configuration|MockObject $configurationMock */
|
||||||
$configurationMock = $this->getMockBuilder(Configuration::class)
|
$configurationMock = $this->getMockBuilder(Configuration::class)
|
||||||
@ -170,14 +168,11 @@ class d3ActionWizardTest extends d3AdminControllerTest
|
|||||||
|
|
||||||
public function executePassRequestCallback($varName)
|
public function executePassRequestCallback($varName)
|
||||||
{
|
{
|
||||||
switch ($varName) {
|
return match ( $varName ) {
|
||||||
case 'taskid':
|
'taskid' => 'testTaskId',
|
||||||
return 'testTaskId';
|
'format' => RendererBridge::FORMAT_CSV,
|
||||||
case 'format':
|
default => oxNew( Request::class )->getRequestEscapedParameter( $varName ),
|
||||||
return RendererBridge::FORMAT_CSV;
|
};
|
||||||
default:
|
|
||||||
return oxNew(Request::class)->getRequestEscapedParameter($varName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -190,4 +185,15 @@ class d3ActionWizardTest extends d3AdminControllerTest
|
|||||||
'debug' => [true],
|
'debug' => [true],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string[][]
|
||||||
|
*/
|
||||||
|
public function runTaskFailedDataProvider(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[DataWizardException::class],
|
||||||
|
[DBALException::class],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
@ -22,24 +22,26 @@ use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
|||||||
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
||||||
use D3\DataWizard\tests\tools\d3TestAction;
|
use D3\DataWizard\tests\tools\d3TestAction;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
use Doctrine\DBAL\DBALException;
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
|
use Exception;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
use OxidEsales\Eshop\Core\Config;
|
||||||
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use OxidEsales\Eshop\Core\Request;
|
use OxidEsales\Eshop\Core\Request;
|
||||||
use OxidEsales\Eshop\Core\UtilsView;
|
use OxidEsales\Eshop\Core\UtilsView;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use ReflectionException;
|
use ReflectionException;
|
||||||
|
|
||||||
abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
abstract class d3AdminController extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
/** @var d3ActionWizard|d3ExportWizard */
|
/** @var d3ActionWizard|d3ExportWizard */
|
||||||
protected $_oController;
|
protected $_oController;
|
||||||
|
|
||||||
protected $testClassName;
|
protected $testClassName;
|
||||||
|
|
||||||
public function tearDown() : void
|
public function tearDown(): void
|
||||||
{
|
{
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
|
|
||||||
@ -54,7 +56,7 @@ abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructor()
|
public function testConstructor()
|
||||||
{
|
{
|
||||||
$this->setValue($this->_oController, 'configuration', null);
|
$this->setValue($this->_oController, 'configuration', oxNew(Configuration::class));
|
||||||
|
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oController,
|
$this->_oController,
|
||||||
@ -70,6 +72,21 @@ abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ActionWizard::getViewId
|
||||||
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ExportWizard::getViewId
|
||||||
|
*/
|
||||||
|
public function canGetViewId(): void
|
||||||
|
{
|
||||||
|
$viewId = $this->callMethod($this->_oController, 'getViewId');
|
||||||
|
|
||||||
|
$this->assertIsString($viewId);
|
||||||
|
$this->assertStringStartsWith('d3mxDataWizard', $viewId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Controller\Admin\d3ActionWizard::runTask()
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ActionWizard::runTask()
|
||||||
* @covers \D3\DataWizard\Application\Controller\Admin\d3ExportWizard::runTask()
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ExportWizard::runTask()
|
||||||
@ -82,7 +99,7 @@ abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
|||||||
$controllerMock = $this->getMockBuilder($this->testClassName)
|
$controllerMock = $this->getMockBuilder($this->testClassName)
|
||||||
->onlyMethods(['execute'])
|
->onlyMethods(['execute'])
|
||||||
->getMock();
|
->getMock();
|
||||||
$controllerMock->expects($this->once())->method('execute')->willReturn(true);
|
$controllerMock->expects($this->once())->method('execute');
|
||||||
|
|
||||||
$this->_oController = $controllerMock;
|
$this->_oController = $controllerMock;
|
||||||
|
|
||||||
@ -104,9 +121,8 @@ abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
|||||||
{
|
{
|
||||||
/** @var DataWizardException|DBALException|DatabaseErrorException|MockObject $exceptionMock */
|
/** @var DataWizardException|DBALException|DatabaseErrorException|MockObject $exceptionMock */
|
||||||
$exceptionMock = $this->getMockBuilder($exceptionClass)
|
$exceptionMock = $this->getMockBuilder($exceptionClass)
|
||||||
->disableOriginalConstructor()
|
->setConstructorArgs(['exc_msg', 20, new Exception()])
|
||||||
->getMock();
|
->getMock();
|
||||||
$this->setValue($exceptionMock, 'message', 'exc_msg');
|
|
||||||
|
|
||||||
/** @var d3ActionWizard|d3ExportWizard|MockObject $controllerMock */
|
/** @var d3ActionWizard|d3ExportWizard|MockObject $controllerMock */
|
||||||
$controllerMock = $this->getMockBuilder($this->testClassName)
|
$controllerMock = $this->getMockBuilder($this->testClassName)
|
||||||
@ -137,18 +153,6 @@ abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return \string[][]
|
|
||||||
*/
|
|
||||||
public function runTaskFailedDataProvider(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
[DataWizardException::class],
|
|
||||||
[DBALException::class],
|
|
||||||
[DatabaseErrorException::class],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Controller\Admin\d3ActionWizard::execute()
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ActionWizard::execute()
|
||||||
* @covers \D3\DataWizard\Application\Controller\Admin\d3ExportWizard::execute()
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ExportWizard::execute()
|
||||||
@ -169,7 +173,7 @@ abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
|||||||
$actionMock = $this->getMockBuilder(d3TestAction::class)
|
$actionMock = $this->getMockBuilder(d3TestAction::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getQuery',
|
'getQuery',
|
||||||
'run'
|
'run',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$actionMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['1']]);
|
$actionMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['1']]);
|
||||||
@ -244,18 +248,19 @@ abstract class d3AdminControllerTest extends d3ModCfgUnitTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Controller\Admin\d3ExportWizard::d3GetConfig
|
|
||||||
* @covers \D3\DataWizard\Application\Controller\Admin\d3ActionWizard::d3GetConfig
|
|
||||||
* @test
|
* @test
|
||||||
|
* @return void
|
||||||
* @throws ReflectionException
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ActionWizard::getSettingsService()
|
||||||
|
* @covers \D3\DataWizard\Application\Controller\Admin\d3ExportWizard::getSettingsService()
|
||||||
*/
|
*/
|
||||||
public function canGetConfig()
|
public function canGetSettingsService(): void
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(
|
$this->assertInstanceOf(
|
||||||
Config::class,
|
ModuleSettingService::class,
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oController,
|
$this->_oController,
|
||||||
'd3GetConfig'
|
'getSettingsService'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
@ -17,24 +17,28 @@ namespace D3\DataWizard\tests\unit\Application\Controller\Admin;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Controller\Admin\d3ExportWizard;
|
use D3\DataWizard\Application\Controller\Admin\d3ExportWizard;
|
||||||
use D3\DataWizard\Application\Model\Configuration;
|
use D3\DataWizard\Application\Model\Configuration;
|
||||||
|
use D3\DataWizard\Application\Model\Constants;
|
||||||
|
use D3\DataWizard\Application\Model\Exceptions\DataWizardException;
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
||||||
use D3\DataWizard\Application\Model\ExportRenderer\RendererBridge;
|
use D3\DataWizard\Application\Model\ExportRenderer\RendererBridge;
|
||||||
use D3\DataWizard\tests\tools\d3TestAction;
|
use D3\DataWizard\tests\tools\d3TestAction;
|
||||||
use D3\DataWizard\tests\tools\d3TestExport;
|
use D3\DataWizard\tests\tools\d3TestExport;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
|
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use OxidEsales\Eshop\Core\Request;
|
use OxidEsales\Eshop\Core\Request;
|
||||||
|
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
use ReflectionException;
|
use ReflectionException;
|
||||||
|
|
||||||
class d3ExportWizardTest extends d3AdminControllerTest
|
class d3ExportWizardTest extends d3AdminController
|
||||||
{
|
{
|
||||||
/** @var d3ExportWizard */
|
/** @var d3ExportWizard */
|
||||||
protected $_oController;
|
protected $_oController;
|
||||||
|
|
||||||
protected $testClassName = d3ExportWizard::class;
|
protected $testClassName = d3ExportWizard::class;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -100,7 +104,7 @@ class d3ExportWizardTest extends d3AdminControllerTest
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
['test1'],
|
['test1'],
|
||||||
['test2']
|
['test2'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,33 +124,28 @@ class d3ExportWizardTest extends d3AdminControllerTest
|
|||||||
//OnConsecutiveCalls('testTaskId', 'CSV');
|
//OnConsecutiveCalls('testTaskId', 'CSV');
|
||||||
Registry::set(Request::class, $requestMock);
|
Registry::set(Request::class, $requestMock);
|
||||||
|
|
||||||
/** @var Config|MockObject $configMock */
|
/** @var ModuleSettingService $settingsServiceMock */
|
||||||
$configMock = $this->getMockBuilder(Config::class)
|
$settingsServiceMock = $this->getMockBuilder(ModuleSettingService::class)
|
||||||
->onlyMethods(['getConfigParam'])
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getBoolean'])
|
||||||
->getMock();
|
->getMock();
|
||||||
$configMock->expects($this->atLeastOnce())->method('getConfigParam')->willReturnCallback(
|
$settingsServiceMock->expects($this->once())->method('getBoolean')->with(
|
||||||
function ($argName) use ($blDebug) {
|
$this->identicalTo('d3datawizard_debug'),
|
||||||
switch ($argName) {
|
$this->identicalTo(Constants::OXID_MODULE_ID)
|
||||||
case 'd3datawizard_debug':
|
)->willReturn($blDebug);
|
||||||
return $blDebug;
|
|
||||||
default:
|
|
||||||
return Registry::getConfig()->getConfigParam($argName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
/** @var d3ExportWizard|MockObject $controllerMock */
|
/** @var d3ExportWizard|MockObject $controllerMock */
|
||||||
$controllerMock = $this->getMockBuilder(d3ExportWizard::class)
|
$controllerMock = $this->getMockBuilder(d3ExportWizard::class)
|
||||||
->onlyMethods(['d3GetConfig'])
|
->onlyMethods(['getSettingsService'])
|
||||||
->getMock();
|
->getMock();
|
||||||
$controllerMock->method('d3GetConfig')->willReturn($configMock);
|
$controllerMock->method('getSettingsService')->willReturn($settingsServiceMock);
|
||||||
$this->_oController = $controllerMock;
|
$this->_oController = $controllerMock;
|
||||||
|
|
||||||
/** @var d3TestAction|MockObject $exportMock */
|
/** @var d3TestAction|MockObject $exportMock */
|
||||||
$exportMock = $this->getMockBuilder(d3TestExport::class)
|
$exportMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getQuery',
|
'getQuery',
|
||||||
'run'
|
'run',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$exportMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['1']]);
|
$exportMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['1']]);
|
||||||
@ -192,4 +191,16 @@ class d3ExportWizardTest extends d3AdminControllerTest
|
|||||||
'debug' => [true],
|
'debug' => [true],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string[][]
|
||||||
|
*/
|
||||||
|
public function runTaskFailedDataProvider(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[DataWizardException::class],
|
||||||
|
[DBALException::class],
|
||||||
|
[DatabaseErrorException::class],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
@ -18,6 +18,7 @@ namespace D3\DataWizard\tests\unit\Application\Model;
|
|||||||
use D3\DataWizard\Application\Model\Exceptions\TaskException;
|
use D3\DataWizard\Application\Model\Exceptions\TaskException;
|
||||||
use D3\DataWizard\tests\tools\d3TestAction;
|
use D3\DataWizard\tests\tools\d3TestAction;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
use FormManager\Inputs\Hidden;
|
use FormManager\Inputs\Hidden;
|
||||||
use FormManager\Inputs\Number;
|
use FormManager\Inputs\Number;
|
||||||
use FormManager\Inputs\Radio;
|
use FormManager\Inputs\Radio;
|
||||||
@ -31,14 +32,14 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
/** @var d3TestAction */
|
/** @var d3TestAction */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->_oModel = oxNew(d3TestAction::class);
|
$this->_oModel = oxNew(d3TestAction::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown() : void
|
public function tearDown(): void
|
||||||
{
|
{
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
|
|
||||||
@ -94,7 +95,7 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function canGetHasFormElementsDataProvider()
|
public function canGetHasFormElementsDataProvider(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'hasFormElements' => [['abc', 'def'], true],
|
'hasFormElements' => [['abc', 'def'], true],
|
||||||
@ -135,7 +136,7 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
$inputMock = $this->getMockBuilder($inputClass)
|
$inputMock = $this->getMockBuilder($inputClass)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'setTemplate',
|
'setTemplate',
|
||||||
'setAttribute'
|
'setAttribute',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$inputMock->expects($this->atLeastOnce())->method('setTemplate');
|
$inputMock->expects($this->atLeastOnce())->method('setTemplate');
|
||||||
@ -160,7 +161,7 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
return [
|
return [
|
||||||
'Radio' => [Radio::class],
|
'Radio' => [Radio::class],
|
||||||
'Checkbox' => [Radio::class],
|
'Checkbox' => [Radio::class],
|
||||||
'Hidden' => [Hidden::class]
|
'Hidden' => [Hidden::class],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,11 +176,11 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'hasFormElements',
|
'hasFormElements',
|
||||||
'executeAction',
|
'executeAction',
|
||||||
'getQuery'
|
'getQuery',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(false);
|
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(false);
|
||||||
$modelMock->expects($this->atLeastOnce())->method('executeAction')->willReturn(1);
|
$modelMock->expects($this->atLeastOnce())->method('executeAction');
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getQuery')->willReturn([]);
|
$modelMock->expects($this->atLeastOnce())->method('getQuery')->willReturn([]);
|
||||||
$this->_oModel = $modelMock;
|
$this->_oModel = $modelMock;
|
||||||
|
|
||||||
@ -204,11 +205,11 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
'hasFormElements',
|
'hasFormElements',
|
||||||
'executeAction',
|
'executeAction',
|
||||||
'getQuery',
|
'getQuery',
|
||||||
'getFormElements'
|
'getFormElements',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(true);
|
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(true);
|
||||||
$modelMock->expects($this->exactly((int) !$blThrowException))->method('executeAction')->willReturn(1);
|
$modelMock->expects($this->exactly((int) !$blThrowException))->method('executeAction');
|
||||||
$modelMock->expects($this->exactly((int) !$blThrowException))->method('getQuery')->willReturn([]);
|
$modelMock->expects($this->exactly((int) !$blThrowException))->method('getQuery')->willReturn([]);
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getFormElements')->willReturn($elements);
|
$modelMock->expects($this->atLeastOnce())->method('getFormElements')->willReturn($elements);
|
||||||
$this->_oModel = $modelMock;
|
$this->_oModel = $modelMock;
|
||||||
@ -246,7 +247,7 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'validElements' => [[$validMock, $validMock], false],
|
'validElements' => [[$validMock, $validMock], false],
|
||||||
'invalidElements' => [[$validMock, $invalidField], true]
|
'invalidElements' => [[$validMock, $invalidField], true],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,17 +259,18 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
*/
|
*/
|
||||||
public function canExecuteAction($query, $throwsException)
|
public function canExecuteAction($query, $throwsException)
|
||||||
{
|
{
|
||||||
/** @var Database|MockObject $dbMock */
|
/** @var Database|MockObject $connectionMock */
|
||||||
$dbMock = $this->getMockBuilder(Database::class)
|
$connectionMock = $this->getMockBuilder(Connection::class)
|
||||||
->onlyMethods(['execute'])
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['executeStatement'])
|
||||||
->getMock();
|
->getMock();
|
||||||
$dbMock->expects($this->exactly((int) !$throwsException))->method('execute')->willReturn(true);
|
$connectionMock->expects($this->exactly((int) !$throwsException))->method('executeStatement')->willReturn(1);
|
||||||
|
|
||||||
/** @var d3TestAction|MockObject $modelMock */
|
/** @var d3TestAction|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(d3TestAction::class)
|
$modelMock = $this->getMockBuilder(d3TestAction::class)
|
||||||
->onlyMethods(['d3GetDb'])
|
->onlyMethods(['getConnection'])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->exactly((int) !$throwsException))->method('d3GetDb')->willReturn($dbMock);
|
$modelMock->expects($this->exactly((int) !$throwsException))->method('getConnection')->willReturn($connectionMock);
|
||||||
|
|
||||||
$this->_oModel = $modelMock;
|
$this->_oModel = $modelMock;
|
||||||
|
|
||||||
@ -280,9 +282,9 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
} catch (TaskException $e) {
|
} catch (TaskException $e) {
|
||||||
if ($throwsException) {
|
if ($throwsException) {
|
||||||
$this->assertStringContainsString('ACTIONSELECT', $e->getMessage());
|
$this->assertStringContainsString('keine SELECTs exportieren', $e->getMessage());
|
||||||
} else {
|
} else {
|
||||||
$this->assertStringContainsString('ACTIONRESULT', $e->getMessage());
|
$this->assertStringContainsString('1 Eintrag verändert', $e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -299,17 +301,17 @@ class ActionBaseTest extends d3ModCfgUnitTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ActionBase::d3GetDb
|
* @covers \D3\DataWizard\Application\Model\ActionBase::getConnection
|
||||||
* @test
|
* @test
|
||||||
* @throws ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetDb()
|
public function canGetConnection()
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(
|
$this->assertInstanceOf(
|
||||||
Database::class,
|
Connection::class,
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'd3GetDb'
|
'getConnection'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -21,20 +21,21 @@ use D3\DataWizard\tests\tools\d3TestAction;
|
|||||||
use D3\DataWizard\tests\tools\d3TestExport;
|
use D3\DataWizard\tests\tools\d3TestExport;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class ConfigurationTest extends d3ModCfgUnitTestCase
|
class ConfigurationTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
/** @var Configuration */
|
/** @var Configuration */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->_oModel = oxNew(Configuration::class);
|
$this->_oModel = oxNew(Configuration::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown() : void
|
public function tearDown(): void
|
||||||
{
|
{
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
|
|
||||||
@ -44,7 +45,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::__construct
|
* @covers \D3\DataWizard\Application\Model\Configuration::__construct
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canConstruct()
|
public function canConstruct()
|
||||||
{
|
{
|
||||||
@ -65,7 +66,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::configure()
|
* @covers \D3\DataWizard\Application\Model\Configuration::configure()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canConfigure()
|
public function canConfigure()
|
||||||
{
|
{
|
||||||
@ -80,7 +81,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::registerAction
|
* @covers \D3\DataWizard\Application\Model\Configuration::registerAction
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canRegisterAction()
|
public function canRegisterAction()
|
||||||
{
|
{
|
||||||
@ -113,7 +114,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::registerExport
|
* @covers \D3\DataWizard\Application\Model\Configuration::registerExport
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canRegisterExport()
|
public function canRegisterExport()
|
||||||
{
|
{
|
||||||
@ -147,16 +148,16 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
* @param $array
|
* @param $array
|
||||||
* @return array|false
|
* @return array|false
|
||||||
*/
|
*/
|
||||||
public function array_flatten($array) {
|
public function array_flatten($array)
|
||||||
|
{
|
||||||
if (!is_array($array)) {
|
if (!is_array($array)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$result = array();
|
$result = [];
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
$result = array_merge($result, $this->array_flatten($value));
|
$result = array_merge($result, $this->array_flatten($value));
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$result[$key] = $value;
|
$result[$key] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,7 +167,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getGroupedActions()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getGroupedActions()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetGroupedActions()
|
public function canGetGroupedActions()
|
||||||
{
|
{
|
||||||
@ -190,7 +191,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getGroupedExports()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getGroupedExports()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetGroupedExports()
|
public function canGetGroupedExports()
|
||||||
{
|
{
|
||||||
@ -214,7 +215,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getActionGroups()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getActionGroups()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetActionGroups()
|
public function canGetActionGroups()
|
||||||
{
|
{
|
||||||
@ -238,7 +239,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getExportGroups()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getExportGroups()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetExportGroups()
|
public function canGetExportGroups()
|
||||||
{
|
{
|
||||||
@ -262,11 +263,11 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getActionsByGroup()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getActionsByGroup()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetActionsByGroup()
|
public function canGetActionsByGroup()
|
||||||
{
|
{
|
||||||
$actionList = ['abc' => '123', 'def' => '456'];
|
$actionList = ['abc' => ['123'], 'def' => ['456']];
|
||||||
|
|
||||||
$this->setValue(
|
$this->setValue(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
@ -275,7 +276,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
|
|
||||||
$this->assertSame(
|
$this->assertSame(
|
||||||
'456',
|
['456'],
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'getActionsByGroup',
|
'getActionsByGroup',
|
||||||
@ -287,11 +288,11 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getExportsByGroup()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getExportsByGroup()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetExportsByGroup()
|
public function canGetExportsByGroup()
|
||||||
{
|
{
|
||||||
$exportList = ['abc' => '123', 'def' => '456'];
|
$exportList = ['abc' => ['123'], 'def' => ['456']];
|
||||||
|
|
||||||
$this->setValue(
|
$this->setValue(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
@ -300,7 +301,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
|
|
||||||
$this->assertSame(
|
$this->assertSame(
|
||||||
'456',
|
['456'],
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'getExportsByGroup',
|
'getExportsByGroup',
|
||||||
@ -312,7 +313,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getAllActions()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getAllActions()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetAllActions()
|
public function canGetAllActions()
|
||||||
{
|
{
|
||||||
@ -320,7 +321,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
$modelMock = $this->getMockBuilder(Configuration::class)
|
$modelMock = $this->getMockBuilder(Configuration::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getActionGroups',
|
'getActionGroups',
|
||||||
'getActionsByGroup'
|
'getActionsByGroup',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->once())->method('getActionGroups')->willReturn(['123', '456']);
|
$modelMock->expects($this->once())->method('getActionGroups')->willReturn(['123', '456']);
|
||||||
@ -343,7 +344,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getAllExports()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getAllExports()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetAllExports()
|
public function canGetAllExports()
|
||||||
{
|
{
|
||||||
@ -351,7 +352,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
$modelMock = $this->getMockBuilder(Configuration::class)
|
$modelMock = $this->getMockBuilder(Configuration::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getExportGroups',
|
'getExportGroups',
|
||||||
'getExportsByGroup'
|
'getExportsByGroup',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->once())->method('getExportGroups')->willReturn(['123', '456']);
|
$modelMock->expects($this->once())->method('getExportGroups')->willReturn(['123', '456']);
|
||||||
@ -374,7 +375,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getActionById()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getActionById()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
* @dataProvider canGetActionByIdDataProvider
|
* @dataProvider canGetActionByIdDataProvider
|
||||||
*/
|
*/
|
||||||
public function canGetActionById($id, $throwException)
|
public function canGetActionById($id, $throwException)
|
||||||
@ -409,7 +410,7 @@ class ConfigurationTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Configuration::getExportById()
|
* @covers \D3\DataWizard\Application\Model\Configuration::getExportById()
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
* @dataProvider canGetActionByIdDataProvider
|
* @dataProvider canGetActionByIdDataProvider
|
||||||
*/
|
*/
|
||||||
public function canGetExportById($id, $throwException)
|
public function canGetExportById($id, $throwException)
|
||||||
|
@ -17,7 +17,10 @@ namespace D3\DataWizard\tests\unit\Application\Model\Exceptions;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
use D3\DataWizard\Application\Model\Exceptions\DebugException;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use Exception;
|
||||||
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class DebugExceptionTest extends d3ModCfgUnitTestCase
|
class DebugExceptionTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
@ -27,13 +30,13 @@ class DebugExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Exceptions\DebugException::__construct
|
* @covers \D3\DataWizard\Application\Model\Exceptions\DebugException::__construct
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canConstruct()
|
public function canConstruct()
|
||||||
{
|
{
|
||||||
$code = '500';
|
$code = '500';
|
||||||
|
|
||||||
$exception = oxNew(\Exception::class);
|
$exception = oxNew(Exception::class);
|
||||||
|
|
||||||
/** @var DebugException|MockObject $modelMock */
|
/** @var DebugException|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(DebugException::class)
|
$modelMock = $this->getMockBuilder(DebugException::class)
|
||||||
@ -49,7 +52,7 @@ class DebugExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
|
|
||||||
$this->assertStringContainsString(
|
$this->assertStringContainsString(
|
||||||
'DEBUG',
|
'Debug: testMessage',
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'getMessage'
|
'getMessage'
|
||||||
@ -72,5 +75,4 @@ class DebugExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -17,7 +17,10 @@ namespace D3\DataWizard\tests\unit\Application\Model\Exceptions;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\ExportFileException;
|
use D3\DataWizard\Application\Model\Exceptions\ExportFileException;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use Exception;
|
||||||
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class ExportFileExceptionTest extends d3ModCfgUnitTestCase
|
class ExportFileExceptionTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
@ -27,13 +30,13 @@ class ExportFileExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Exceptions\ExportFileException::__construct
|
* @covers \D3\DataWizard\Application\Model\Exceptions\ExportFileException::__construct
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canConstruct()
|
public function canConstruct()
|
||||||
{
|
{
|
||||||
$code = '500';
|
$code = '500';
|
||||||
|
|
||||||
$exception = oxNew(\Exception::class);
|
$exception = oxNew(Exception::class);
|
||||||
|
|
||||||
/** @var ExportFileException|MockObject $modelMock */
|
/** @var ExportFileException|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(ExportFileException::class)
|
$modelMock = $this->getMockBuilder(ExportFileException::class)
|
||||||
@ -49,7 +52,7 @@ class ExportFileExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
|
|
||||||
$this->assertStringContainsString(
|
$this->assertStringContainsString(
|
||||||
'EXPORTFILEERROR',
|
'kann nicht angelegt werden',
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'getMessage'
|
'getMessage'
|
||||||
@ -72,5 +75,4 @@ class ExportFileExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -19,8 +19,10 @@ use D3\DataWizard\Application\Model\Exceptions\InputUnvalidException;
|
|||||||
use D3\DataWizard\Application\Model\ExportBase;
|
use D3\DataWizard\Application\Model\ExportBase;
|
||||||
use D3\DataWizard\tests\tools\d3TestExport;
|
use D3\DataWizard\tests\tools\d3TestExport;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use Exception;
|
||||||
use FormManager\Inputs\Number;
|
use FormManager\Inputs\Number;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class InputUnvalidExceptionTest extends d3ModCfgUnitTestCase
|
class InputUnvalidExceptionTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
@ -30,15 +32,14 @@ class InputUnvalidExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Exceptions\InputUnvalidException::__construct
|
* @covers \D3\DataWizard\Application\Model\Exceptions\InputUnvalidException::__construct
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canConstruct()
|
public function canConstruct()
|
||||||
{
|
{
|
||||||
$code = '500';
|
$code = '500';
|
||||||
|
|
||||||
$exception = oxNew(\Exception::class);
|
$exception = oxNew(Exception::class);
|
||||||
|
|
||||||
/** @var Number $invalidField */
|
|
||||||
$invalidField = new Number(null, [
|
$invalidField = new Number(null, [
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'min' => 1,
|
'min' => 1,
|
||||||
@ -68,7 +69,7 @@ class InputUnvalidExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
[$taskMock, $invalidField, $code, $exception]
|
[$taskMock, $invalidField, $code, $exception]
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertRegExp(
|
$this->assertMatchesRegularExpression(
|
||||||
'/^testTitle\s-\s*->\s.*\sless\s/m',
|
'/^testTitle\s-\s*->\s.*\sless\s/m',
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
@ -92,5 +93,4 @@ class InputUnvalidExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -17,7 +17,10 @@ namespace D3\DataWizard\tests\unit\Application\Model\Exceptions;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException;
|
use D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use Exception;
|
||||||
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class NoSuitableRendererExceptionTest extends d3ModCfgUnitTestCase
|
class NoSuitableRendererExceptionTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
@ -27,13 +30,13 @@ class NoSuitableRendererExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException::__construct
|
* @covers \D3\DataWizard\Application\Model\Exceptions\NoSuitableRendererException::__construct
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canConstruct()
|
public function canConstruct()
|
||||||
{
|
{
|
||||||
$code = '500';
|
$code = '500';
|
||||||
|
|
||||||
$exception = oxNew(\Exception::class);
|
$exception = oxNew(Exception::class);
|
||||||
|
|
||||||
/** @var NoSuitableRendererException|MockObject $modelMock */
|
/** @var NoSuitableRendererException|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(NoSuitableRendererException::class)
|
$modelMock = $this->getMockBuilder(NoSuitableRendererException::class)
|
||||||
@ -49,7 +52,7 @@ class NoSuitableRendererExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
|
|
||||||
$this->assertStringContainsString(
|
$this->assertStringContainsString(
|
||||||
'NOSUITABLERENDERER',
|
'kein Renderer f',
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'getMessage'
|
'getMessage'
|
||||||
@ -72,5 +75,4 @@ class NoSuitableRendererExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -19,7 +19,9 @@ use D3\DataWizard\Application\Model\Exceptions\TaskException;
|
|||||||
use D3\DataWizard\Application\Model\ExportBase;
|
use D3\DataWizard\Application\Model\ExportBase;
|
||||||
use D3\DataWizard\tests\tools\d3TestExport;
|
use D3\DataWizard\tests\tools\d3TestExport;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use Exception;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class TaskExceptionTest extends d3ModCfgUnitTestCase
|
class TaskExceptionTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
@ -29,13 +31,13 @@ class TaskExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\Exceptions\TaskException::__construct
|
* @covers \D3\DataWizard\Application\Model\Exceptions\TaskException::__construct
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canConstruct()
|
public function canConstruct()
|
||||||
{
|
{
|
||||||
$code = '500';
|
$code = '500';
|
||||||
|
|
||||||
$exception = oxNew(\Exception::class);
|
$exception = oxNew(Exception::class);
|
||||||
|
|
||||||
/** @var ExportBase|MockObject $taskMock */
|
/** @var ExportBase|MockObject $taskMock */
|
||||||
$taskMock = $this->getMockBuilder(d3TestExport::class)
|
$taskMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
@ -80,5 +82,4 @@ class TaskExceptionTest extends d3ModCfgUnitTestCase
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -23,11 +23,14 @@ use D3\DataWizard\Application\Model\ExportRenderer\RendererInterface;
|
|||||||
use D3\DataWizard\tests\tools\d3TestExport;
|
use D3\DataWizard\tests\tools\d3TestExport;
|
||||||
use D3\ModCfg\Application\Model\d3filesystem;
|
use D3\ModCfg\Application\Model\d3filesystem;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
|
use Doctrine\DBAL\Driver\Result;
|
||||||
use FormManager\Inputs\Hidden;
|
use FormManager\Inputs\Hidden;
|
||||||
use FormManager\Inputs\Number;
|
use FormManager\Inputs\Number;
|
||||||
use FormManager\Inputs\Radio;
|
use FormManager\Inputs\Radio;
|
||||||
use OxidEsales\Eshop\Core\Database\Adapter\Doctrine\Database;
|
use OxidEsales\Eshop\Core\Database\Adapter\Doctrine\Database;
|
||||||
use OxidEsales\Eshop\Core\Exception\StandardException;
|
use OxidEsales\Eshop\Core\Exception\StandardException;
|
||||||
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
use ReflectionException;
|
use ReflectionException;
|
||||||
|
|
||||||
@ -36,14 +39,14 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
/** @var d3TestExport */
|
/** @var d3TestExport */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->_oModel = oxNew(d3TestExport::class);
|
$this->_oModel = oxNew(d3TestExport::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown() : void
|
public function tearDown(): void
|
||||||
{
|
{
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
|
|
||||||
@ -99,7 +102,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function canGetHasFormElementsDataProvider()
|
public function canGetHasFormElementsDataProvider(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'hasFormElements' => [['abc', 'def'], true],
|
'hasFormElements' => [['abc', 'def'], true],
|
||||||
@ -140,7 +143,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
$inputMock = $this->getMockBuilder($inputClass)
|
$inputMock = $this->getMockBuilder($inputClass)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'setTemplate',
|
'setTemplate',
|
||||||
'setAttribute'
|
'setAttribute',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$inputMock->expects($this->atLeastOnce())->method('setTemplate');
|
$inputMock->expects($this->atLeastOnce())->method('setTemplate');
|
||||||
@ -165,7 +168,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
return [
|
return [
|
||||||
'Radio' => [Radio::class],
|
'Radio' => [Radio::class],
|
||||||
'Checkbox' => [Radio::class],
|
'Checkbox' => [Radio::class],
|
||||||
'Hidden' => [Hidden::class]
|
'Hidden' => [Hidden::class],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +186,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'hasFormElements',
|
'hasFormElements',
|
||||||
'executeExport'
|
'executeExport',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(false);
|
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(false);
|
||||||
@ -214,7 +217,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'hasFormElements',
|
'hasFormElements',
|
||||||
'executeExport',
|
'executeExport',
|
||||||
'getFormElements'
|
'getFormElements',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(true);
|
$modelMock->expects($this->atLeastOnce())->method('hasFormElements')->willReturn(true);
|
||||||
@ -256,7 +259,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'validElements' => [[$validMock, $validMock], false],
|
'validElements' => [[$validMock, $validMock], false],
|
||||||
'invalidElements' => [[$validMock, $invalidField], true]
|
'invalidElements' => [[$validMock, $invalidField], true],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,7 +277,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
'startDirectDownload',
|
'startDirectDownload',
|
||||||
'filterFilename',
|
'filterFilename',
|
||||||
'trailingslashit',
|
'trailingslashit',
|
||||||
'createFile'
|
'createFile',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$fsMock->expects($this->exactly((int) !isset($path)))->method('startDirectDownload')->willReturn(true);
|
$fsMock->expects($this->exactly((int) !isset($path)))->method('startDirectDownload')->willReturn(true);
|
||||||
@ -287,7 +290,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getContent',
|
'getContent',
|
||||||
'getFileSystem',
|
'getFileSystem',
|
||||||
'getExportFileName'
|
'getExportFileName',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getContent')->willReturn('some content');
|
$modelMock->expects($this->atLeastOnce())->method('getContent')->willReturn('some content');
|
||||||
@ -320,17 +323,17 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportBase::d3GetDb
|
* @covers \D3\DataWizard\Application\Model\ExportBase::getConnection
|
||||||
* @test
|
* @test
|
||||||
* @throws ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetDb()
|
public function canGetConnection()
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(
|
$this->assertInstanceOf(
|
||||||
Database::class,
|
Connection::class,
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'd3GetDb'
|
'getConnection'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -371,7 +374,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
/** @var d3TestExport|MockObject $modelMock */
|
/** @var d3TestExport|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getRendererBridge'
|
'getRendererBridge',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getRendererBridge')->willReturn($rendererBridgeMock);
|
$modelMock->expects($this->atLeastOnce())->method('getRendererBridge')->willReturn($rendererBridgeMock);
|
||||||
@ -425,7 +428,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
/** @var d3TestExport|MockObject $modelMock */
|
/** @var d3TestExport|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getRenderer'
|
'getRenderer',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getRenderer')->with($format)->willReturn($rendererMock);
|
$modelMock->expects($this->atLeastOnce())->method('getRenderer')->with($format)->willReturn($rendererMock);
|
||||||
@ -463,7 +466,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
/** @var d3TestExport|MockObject $modelMock */
|
/** @var d3TestExport|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getRenderer'
|
'getRenderer',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getRenderer')->with($format)->willReturn($rendererMock);
|
$modelMock->expects($this->atLeastOnce())->method('getRenderer')->with($format)->willReturn($rendererMock);
|
||||||
@ -490,7 +493,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
/** @var d3TestExport|MockObject $modelMock */
|
/** @var d3TestExport|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getTitle'
|
'getTitle',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getTitle')->willReturn('someTitle');
|
$modelMock->expects($this->atLeastOnce())->method('getTitle')->willReturn('someTitle');
|
||||||
@ -516,7 +519,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getExportFilenameBase',
|
'getExportFilenameBase',
|
||||||
'getFileExtension'
|
'getFileExtension',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getExportFilenameBase')->willReturn('base');
|
$modelMock->expects($this->atLeastOnce())->method('getExportFilenameBase')->willReturn('base');
|
||||||
@ -524,7 +527,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
|
|
||||||
$this->_oModel = $modelMock;
|
$this->_oModel = $modelMock;
|
||||||
|
|
||||||
$this->assertRegExp(
|
$this->assertMatchesRegularExpression(
|
||||||
'/^base_(\d{4})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})\.extension$/m',
|
'/^base_(\d{4})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})\.extension$/m',
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
@ -542,19 +545,26 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
*/
|
*/
|
||||||
public function canGetExportData($query, $throwsException, $dbResult)
|
public function canGetExportData($query, $throwsException, $dbResult)
|
||||||
{
|
{
|
||||||
/** @var Database|MockObject $dbMock */
|
/** @var Result|MockObject $resultMock */
|
||||||
$dbMock = $this->getMockBuilder(Database::class)
|
$resultMock = $this->getMockBuilder(Result::class)
|
||||||
->onlyMethods(['getAll'])
|
->onlyMethods(get_class_methods(Result::class))
|
||||||
->getMock();
|
->getMock();
|
||||||
$dbMock->expects($this->exactly((int) !$throwsException))->method('getAll')->willReturn($dbResult);
|
$resultMock->method('fetchAllAssociative')->willReturn($dbResult);
|
||||||
|
|
||||||
|
/** @var Database|MockObject $connectionMock */
|
||||||
|
$connectionMock = $this->getMockBuilder(Connection::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['executeQuery'])
|
||||||
|
->getMock();
|
||||||
|
$connectionMock->expects($this->exactly((int) !$throwsException))->method('executeQuery')->willReturn($resultMock);
|
||||||
|
|
||||||
/** @var d3TestExport|MockObject $modelMock */
|
/** @var d3TestExport|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
$modelMock = $this->getMockBuilder(d3TestExport::class)
|
||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'd3GetDb'
|
'getConnection',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->exactly((int) !$throwsException))->method('d3GetDb')->willReturn($dbMock);
|
$modelMock->expects($this->exactly((int) !$throwsException))->method('getConnection')->willReturn($connectionMock);
|
||||||
|
|
||||||
$this->_oModel = $modelMock;
|
$this->_oModel = $modelMock;
|
||||||
|
|
||||||
@ -562,7 +572,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
$result = $this->callMethod(
|
$result = $this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
'getExportData',
|
'getExportData',
|
||||||
[[$query], ['param1', 'param2']]
|
[[$query, ['param1', 'param2']]]
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertSame(
|
$this->assertSame(
|
||||||
@ -570,19 +580,19 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
[
|
[
|
||||||
[
|
[
|
||||||
'field1' => 'content1',
|
'field1' => 'content1',
|
||||||
'field2' => 'content2'
|
'field2' => 'content2',
|
||||||
]
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'field1',
|
'field1',
|
||||||
'field2'
|
'field2',
|
||||||
]
|
],
|
||||||
],
|
],
|
||||||
$result
|
$result
|
||||||
);
|
);
|
||||||
} catch (TaskException $e) {
|
} catch (TaskException $e) {
|
||||||
if ($throwsException) {
|
if ($throwsException) {
|
||||||
$this->assertStringContainsString('NOEXPORTSELECT', $e->getMessage());
|
$this->assertStringContainsString('Export kann nicht ausgefĂĽhrt werden', $e->getMessage());
|
||||||
} elseif (!count($dbResult)) {
|
} elseif (!count($dbResult)) {
|
||||||
$this->assertStringContainsString('kein Inhalt', $e->getMessage());
|
$this->assertStringContainsString('kein Inhalt', $e->getMessage());
|
||||||
}
|
}
|
||||||
@ -613,7 +623,7 @@ class ExportBaseTest extends d3ModCfgUnitTestCase
|
|||||||
->onlyMethods([
|
->onlyMethods([
|
||||||
'getQuery',
|
'getQuery',
|
||||||
'getExportData',
|
'getExportData',
|
||||||
'renderContent'
|
'renderContent',
|
||||||
])
|
])
|
||||||
->getMock();
|
->getMock();
|
||||||
$modelMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['arg1', 'arg2']]);
|
$modelMock->expects($this->atLeastOnce())->method('getQuery')->willReturn(['SELECT 1', ['arg1', 'arg2']]);
|
||||||
|
@ -17,28 +17,58 @@ namespace D3\DataWizard\tests\unit\Application\Model\ExportRenderer;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
||||||
use D3\DataWizard\Application\Model\ExportRenderer\Csv;
|
use D3\DataWizard\Application\Model\ExportRenderer\Csv;
|
||||||
|
use Generator;
|
||||||
use League\Csv\Exception;
|
use League\Csv\Exception;
|
||||||
use League\Csv\Writer;
|
use League\Csv\Writer;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
use OxidEsales\Eshop\Core\Config;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class CsvTest extends ExportRendererTest
|
class CsvTest extends ExportRendererTest
|
||||||
{
|
{
|
||||||
/** @var Csv */
|
/** @var Csv */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->_oModel = oxNew(Csv::class);
|
$this->_oModel = oxNew(Csv::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*
|
||||||
|
* @param bool $force
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::__construct
|
||||||
|
* @dataProvider canForceEncloseDataProvider
|
||||||
|
*/
|
||||||
|
public function canForceEnclose(bool $force): void
|
||||||
|
{
|
||||||
|
$noForce = oxNew(Csv::class, $force);
|
||||||
|
$this->assertSame(
|
||||||
|
$force,
|
||||||
|
$this->getValue(
|
||||||
|
$noForce,
|
||||||
|
'forceEnclose'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canForceEncloseDataProvider(): Generator
|
||||||
|
{
|
||||||
|
yield 'noForce' => [true];
|
||||||
|
yield 'force' => [false];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::getContent
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::getContent
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
* @dataProvider canGetContentDataProvider
|
* @dataProvider canGetContentDataProvider
|
||||||
*/
|
*/
|
||||||
public function canGetContent($blThrowException)
|
public function canGetContent($blThrowException)
|
||||||
@ -50,23 +80,19 @@ class CsvTest extends ExportRendererTest
|
|||||||
/** @var Writer|MockObject $csvMock */
|
/** @var Writer|MockObject $csvMock */
|
||||||
$csvMockBuilder = $this->getMockBuilder(Writer::class);
|
$csvMockBuilder = $this->getMockBuilder(Writer::class);
|
||||||
$csvMockBuilder->disableOriginalConstructor();
|
$csvMockBuilder->disableOriginalConstructor();
|
||||||
$onlyMethods = ['insertOne', 'insertAll'];
|
$onlyMethods = ['__toString', 'insertOne', 'insertAll'];
|
||||||
if (method_exists($csvMockBuilder->getMock(), 'getContent')) {
|
|
||||||
$onlyMethods[] = 'getContent';
|
|
||||||
} else {
|
|
||||||
$csvMockBuilder->addMethods(['getContent']);
|
|
||||||
}
|
|
||||||
$csvMockBuilder->onlyMethods($onlyMethods);
|
$csvMockBuilder->onlyMethods($onlyMethods);
|
||||||
$csvMock = $csvMockBuilder->getMock();
|
$csvMock = $csvMockBuilder->getMock();
|
||||||
|
|
||||||
|
$csvMock->method('insertOne')->willReturn(1);
|
||||||
|
$csvMock->method('insertAll')->willReturn(1);
|
||||||
|
|
||||||
if ($blThrowException) {
|
if ($blThrowException) {
|
||||||
$csvMock->expects($this->atLeastOnce())->method('getContent')->willThrowException(oxNew(Exception::class));
|
$csvMock->expects($this->atLeastOnce())->method('__toString')->willThrowException(oxNew(Exception::class));
|
||||||
$this->expectException(RenderException::class);
|
$this->expectException(RenderException::class);
|
||||||
} else {
|
} else {
|
||||||
$csvMock->expects($this->atLeastOnce())->method('getContent')->willReturn($expected);
|
$csvMock->expects($this->atLeastOnce())->method('__toString')->willReturn($expected);
|
||||||
}
|
}
|
||||||
$csvMock->expects($this->atLeastOnce())->method('insertOne')->with($fieldList)->willReturn(1);
|
|
||||||
$csvMock->expects($this->atLeastOnce())->method('insertAll')->with($valueList)->willReturn(1);
|
|
||||||
|
|
||||||
/** @var Csv|MockObject $modelMock */
|
/** @var Csv|MockObject $modelMock */
|
||||||
$modelMock = $this->getMockBuilder(Csv::class)
|
$modelMock = $this->getMockBuilder(Csv::class)
|
||||||
@ -92,14 +118,14 @@ class CsvTest extends ExportRendererTest
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'exception' => [true],
|
'exception' => [true],
|
||||||
'no exception' => [false]
|
'no exception' => [false],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::getCsv
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::getCsv
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetCsv()
|
public function canGetCsv()
|
||||||
{
|
{
|
||||||
@ -115,7 +141,7 @@ class CsvTest extends ExportRendererTest
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::getCsv
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::getCsv
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetCsvNoSettings()
|
public function canGetCsvNoSettings()
|
||||||
{
|
{
|
||||||
@ -125,13 +151,10 @@ class CsvTest extends ExportRendererTest
|
|||||||
->getMock();
|
->getMock();
|
||||||
$configMock->expects($this->atLeastOnce())->method('getConfigParam')->willReturnCallback(
|
$configMock->expects($this->atLeastOnce())->method('getConfigParam')->willReturnCallback(
|
||||||
function ($argName) {
|
function ($argName) {
|
||||||
switch ($argName) {
|
return match ( $argName ) {
|
||||||
case 'sGiCsvFieldEncloser':
|
'sGiCsvFieldEncloser', 'sCSVSign' => null,
|
||||||
case 'sCSVSign':
|
default => Registry::getConfig()->getConfigParam( $argName ),
|
||||||
return false;
|
};
|
||||||
default:
|
|
||||||
return Registry::getConfig()->getConfigParam($argName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -165,7 +188,7 @@ class CsvTest extends ExportRendererTest
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::d3GetConfig
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Csv::d3GetConfig
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetConfig()
|
public function canGetConfig()
|
||||||
{
|
{
|
||||||
|
@ -15,13 +15,14 @@ namespace D3\DataWizard\tests\unit\Application\Model\ExportRenderer;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Model\ExportRenderer\RendererInterface;
|
use D3\DataWizard\Application\Model\ExportRenderer\RendererInterface;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
abstract class ExportRendererTest extends d3ModCfgUnitTestCase
|
abstract class ExportRendererTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
/** @var RendererInterface */
|
/** @var RendererInterface */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function tearDown() : void
|
public function tearDown(): void
|
||||||
{
|
{
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
|
|
||||||
@ -33,11 +34,11 @@ abstract class ExportRendererTest extends d3ModCfgUnitTestCase
|
|||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Json::getFileExtension
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Json::getFileExtension
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getFileExtension
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getFileExtension
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetFileExtension()
|
public function canGetFileExtension()
|
||||||
{
|
{
|
||||||
$this->assertRegExp(
|
$this->assertMatchesRegularExpression(
|
||||||
"/^[a-z0-9._-]*$/i",
|
"/^[a-z0-9._-]*$/i",
|
||||||
$this->callMethod(
|
$this->callMethod(
|
||||||
$this->_oModel,
|
$this->_oModel,
|
||||||
@ -51,7 +52,7 @@ abstract class ExportRendererTest extends d3ModCfgUnitTestCase
|
|||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Json::getTitleTranslationId
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Json::getTitleTranslationId
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getTitleTranslationId
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getTitleTranslationId
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetTitleTranslationId()
|
public function canGetTitleTranslationId()
|
||||||
{
|
{
|
||||||
|
@ -17,13 +17,14 @@ namespace D3\DataWizard\tests\unit\Application\Model\ExportRenderer;
|
|||||||
|
|
||||||
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
use D3\DataWizard\Application\Model\Exceptions\RenderException;
|
||||||
use D3\DataWizard\Application\Model\ExportRenderer\Json;
|
use D3\DataWizard\Application\Model\ExportRenderer\Json;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class JsonTest extends ExportRendererTest
|
class JsonTest extends ExportRendererTest
|
||||||
{
|
{
|
||||||
/** @var Json */
|
/** @var Json */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ class JsonTest extends ExportRendererTest
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Json::getContent
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Json::getContent
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
* @dataProvider canGetContentDataProvider
|
* @dataProvider canGetContentDataProvider
|
||||||
*/
|
*/
|
||||||
public function canGetContent($valueList, $expectException)
|
public function canGetContent($valueList, $expectException)
|
||||||
@ -54,13 +55,13 @@ class JsonTest extends ExportRendererTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \string[][]
|
* @return string[][]
|
||||||
*/
|
*/
|
||||||
public function canGetContentDataProvider(): array
|
public function canGetContentDataProvider(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'valid' => [['value1', 'value2'], false],
|
'valid' => [['value1', "value2"], false],
|
||||||
'invalid' => [["text" => "\xB1\x31"], true] // malformed UTF8 chars
|
'invalid' => [["text" => "\xB1\x31"], true], // malformed UTF8 chars
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,13 +18,14 @@ namespace D3\DataWizard\tests\unit\Application\Model\ExportRenderer;
|
|||||||
use D3\DataWizard\Application\Model\ExportRenderer\Pretty;
|
use D3\DataWizard\Application\Model\ExportRenderer\Pretty;
|
||||||
use MathieuViossat\Util\ArrayToTextTable;
|
use MathieuViossat\Util\ArrayToTextTable;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class PrettyTest extends ExportRendererTest
|
class PrettyTest extends ExportRendererTest
|
||||||
{
|
{
|
||||||
/** @var Pretty */
|
/** @var Pretty */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -34,7 +35,7 @@ class PrettyTest extends ExportRendererTest
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getContent
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getContent
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetContent()
|
public function canGetContent()
|
||||||
{
|
{
|
||||||
@ -69,7 +70,7 @@ class PrettyTest extends ExportRendererTest
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getArrayToTextTableInstance
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\Pretty::getArrayToTextTableInstance
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetArrayToTextTableInstance()
|
public function canGetArrayToTextTableInstance()
|
||||||
{
|
{
|
||||||
|
@ -23,13 +23,14 @@ use D3\DataWizard\Application\Model\ExportRenderer\RendererBridge;
|
|||||||
use D3\DataWizard\Application\Model\ExportRenderer\RendererInterface;
|
use D3\DataWizard\Application\Model\ExportRenderer\RendererInterface;
|
||||||
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
use D3\ModCfg\Tests\unit\d3ModCfgUnitTestCase;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
class RendererBridgeTest extends d3ModCfgUnitTestCase
|
class RendererBridgeTest extends d3ModCfgUnitTestCase
|
||||||
{
|
{
|
||||||
/** @var RendererBridge */
|
/** @var RendererBridge */
|
||||||
protected $_oModel;
|
protected $_oModel;
|
||||||
|
|
||||||
public function setUp() : void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ class RendererBridgeTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\RendererBridge::getRendererList
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\RendererBridge::getRendererList
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetRendererList()
|
public function canGetRendererList()
|
||||||
{
|
{
|
||||||
@ -62,7 +63,7 @@ class RendererBridgeTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\RendererBridge::getTranslatedRendererIdList
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\RendererBridge::getTranslatedRendererIdList
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canGetTranslatedRendererIdList()
|
public function canGetTranslatedRendererIdList()
|
||||||
{
|
{
|
||||||
@ -84,7 +85,7 @@ class RendererBridgeTest extends d3ModCfgUnitTestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \D3\DataWizard\Application\Model\ExportRenderer\RendererBridge::translateRendererId
|
* @covers \D3\DataWizard\Application\Model\ExportRenderer\RendererBridge::translateRendererId
|
||||||
* @test
|
* @test
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
public function canTranslateRendererId()
|
public function canTranslateRendererId()
|
||||||
{
|
{
|
||||||
@ -108,7 +109,7 @@ class RendererBridgeTest extends d3ModCfgUnitTestCase
|
|||||||
* @test
|
* @test
|
||||||
* @param $format
|
* @param $format
|
||||||
* @param $blThrowException
|
* @param $blThrowException
|
||||||
* @throws \ReflectionException
|
* @throws ReflectionException
|
||||||
* @dataProvider canGetRendererDataProvider
|
* @dataProvider canGetRendererDataProvider
|
||||||
*/
|
*/
|
||||||
public function canGetRenderer($format, $blThrowException)
|
public function canGetRenderer($format, $blThrowException)
|
||||||
@ -121,7 +122,7 @@ class RendererBridgeTest extends d3ModCfgUnitTestCase
|
|||||||
[
|
[
|
||||||
'CSV' => $this->getMockBuilder(Csv::class)->getMock(),
|
'CSV' => $this->getMockBuilder(Csv::class)->getMock(),
|
||||||
'Pretty' => $this->getMockBuilder(Pretty::class)->getMock(),
|
'Pretty' => $this->getMockBuilder(Pretty::class)->getMock(),
|
||||||
'JSON' => $this->getMockBuilder(Json::class)->getMock()
|
'JSON' => $this->getMockBuilder(Json::class)->getMock(),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -145,7 +146,7 @@ class RendererBridgeTest extends d3ModCfgUnitTestCase
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'existing renderer'=> [RendererBridge::FORMAT_JSON, false],
|
'existing renderer'=> [RendererBridge::FORMAT_JSON, false],
|
||||||
'unknown renderer'=> ['unknownRenderer', true]
|
'unknown renderer'=> ['unknownRenderer', true],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
[{capture assign="d3dw_backgroundimage"}]linear-gradient(22.5deg, rgba(66, 66, 66, 0.02) 0%, rgba(66, 66, 66, 0.02) 11%,rgba(135, 135, 135, 0.02) 11%, rgba(135, 135, 135, 0.02) 24%,rgba(29, 29, 29, 0.02) 24%, rgba(29, 29, 29, 0.02) 38%,rgba(15, 15, 15, 0.02) 38%, rgba(15, 15, 15, 0.02) 50%,rgba(180, 180, 180, 0.02) 50%, rgba(180, 180, 180, 0.02) 77%,rgba(205, 205, 205, 0.02) 77%, rgba(205, 205, 205, 0.02) 100%),linear-gradient(67.5deg, rgba(10, 10, 10, 0.02) 0%, rgba(10, 10, 10, 0.02) 22%,rgba(52, 52, 52, 0.02) 22%, rgba(52, 52, 52, 0.02) 29%,rgba(203, 203, 203, 0.02) 29%, rgba(203, 203, 203, 0.02) 30%,rgba(69, 69, 69, 0.02) 30%, rgba(69, 69, 69, 0.02) 75%,rgba(231, 231, 231, 0.02) 75%, rgba(231, 231, 231, 0.02) 95%,rgba(138, 138, 138, 0.02) 95%, rgba(138, 138, 138, 0.02) 100%),linear-gradient(112.5deg, rgba(221, 221, 221, 0.02) 0%, rgba(221, 221, 221, 0.02) 17%,rgba(190, 190, 190, 0.02) 17%, rgba(190, 190, 190, 0.02) 39%,rgba(186, 186, 186, 0.02) 39%, rgba(186, 186, 186, 0.02) 66%,rgba(191, 191, 191, 0.02) 66%, rgba(191, 191, 191, 0.02) 68%,rgba(16, 16, 16, 0.02) 68%, rgba(16, 16, 16, 0.02) 70%,rgba(94, 94, 94, 0.02) 70%, rgba(94, 94, 94, 0.02) 100%),linear-gradient(90deg, #ffffff,#ffffff)[{/capture}]
|
[{capture assign="d3dw_backgroundimage"}]linear-gradient(22.5deg, rgba(66, 66, 66, 0.02) 0%, rgba(66, 66, 66, 0.02) 11%,rgba(135, 135, 135, 0.02) 11%, rgba(135, 135, 135, 0.02) 24%,rgba(29, 29, 29, 0.02) 24%, rgba(29, 29, 29, 0.02) 38%,rgba(15, 15, 15, 0.02) 38%, rgba(15, 15, 15, 0.02) 50%,rgba(180, 180, 180, 0.02) 50%, rgba(180, 180, 180, 0.02) 77%,rgba(205, 205, 205, 0.02) 77%, rgba(205, 205, 205, 0.02) 100%),linear-gradient(67.5deg, rgba(10, 10, 10, 0.02) 0%, rgba(10, 10, 10, 0.02) 22%,rgba(52, 52, 52, 0.02) 22%, rgba(52, 52, 52, 0.02) 29%,rgba(203, 203, 203, 0.02) 29%, rgba(203, 203, 203, 0.02) 30%,rgba(69, 69, 69, 0.02) 30%, rgba(69, 69, 69, 0.02) 75%,rgba(231, 231, 231, 0.02) 75%, rgba(231, 231, 231, 0.02) 95%,rgba(138, 138, 138, 0.02) 95%, rgba(138, 138, 138, 0.02) 100%),linear-gradient(112.5deg, rgba(221, 221, 221, 0.02) 0%, rgba(221, 221, 221, 0.02) 17%,rgba(190, 190, 190, 0.02) 17%, rgba(190, 190, 190, 0.02) 39%,rgba(186, 186, 186, 0.02) 39%, rgba(186, 186, 186, 0.02) 66%,rgba(191, 191, 191, 0.02) 66%, rgba(191, 191, 191, 0.02) 68%,rgba(16, 16, 16, 0.02) 68%, rgba(16, 16, 16, 0.02) 70%,rgba(94, 94, 94, 0.02) 70%, rgba(94, 94, 94, 0.02) 100%),linear-gradient(90deg, #ffffff,#ffffff)[{/capture}]
|
||||||
[{capture assign="d3dw_noitemmessageid"}]D3_DATAWIZARD_ERR_NOACTION_INSTALLED[{/capture}]
|
[{capture assign="d3dw_noitemmessageid"}]D3_DATAWIZARD_ERR_NOACTION_INSTALLED[{/capture}]
|
||||||
|
|
||||||
[{include file="d3Wizards.tpl" submit="d3ActionSubmit.tpl"}]
|
[{include file="@d3datawizard/admin/inc/d3Wizards.tpl" submit="@d3datawizard/admin/inc/d3ActionSubmit.tpl"}]
|
@ -1,4 +1,4 @@
|
|||||||
[{capture assign="d3dw_backgroundimage"}]linear-gradient(339deg, rgba(47, 47, 47,0.02) 0%, rgba(47, 47, 47,0.02) 42%,transparent 42%, transparent 99%,rgba(17, 17, 17,0.02) 99%, rgba(17, 17, 17,0.02) 100%),linear-gradient(257deg, rgba(65, 65, 65,0.02) 0%, rgba(65, 65, 65,0.02) 11%,transparent 11%, transparent 92%,rgba(53, 53, 53,0.02) 92%, rgba(53, 53, 53,0.02) 100%),linear-gradient(191deg, rgba(5, 5, 5,0.02) 0%, rgba(5, 5, 5,0.02) 1%,transparent 1%, transparent 45%,rgba(19, 19, 19,0.02) 45%, rgba(19, 19, 19,0.02) 100%),linear-gradient(29deg, rgba(28, 28, 28,0.02) 0%, rgba(28, 28, 28,0.02) 33%,transparent 33%, transparent 40%,rgba(220, 220, 220,0.02) 40%, rgba(220, 220, 220,0.02) 100%),linear-gradient(90deg, rgb(255,255,255),rgb(255,255,255))[{/capture}]
|
[{capture assign="d3dw_backgroundimage"}]linear-gradient(339deg, rgba(47, 47, 47,0.02) 0%, rgba(47, 47, 47,0.02) 42%,transparent 42%, transparent 99%,rgba(17, 17, 17,0.02) 99%, rgba(17, 17, 17,0.02) 100%),linear-gradient(257deg, rgba(65, 65, 65,0.02) 0%, rgba(65, 65, 65,0.02) 11%,transparent 11%, transparent 92%,rgba(53, 53, 53,0.02) 92%, rgba(53, 53, 53,0.02) 100%),linear-gradient(191deg, rgba(5, 5, 5,0.02) 0%, rgba(5, 5, 5,0.02) 1%,transparent 1%, transparent 45%,rgba(19, 19, 19,0.02) 45%, rgba(19, 19, 19,0.02) 100%),linear-gradient(29deg, rgba(28, 28, 28,0.02) 0%, rgba(28, 28, 28,0.02) 33%,transparent 33%, transparent 40%,rgba(220, 220, 220,0.02) 40%, rgba(220, 220, 220,0.02) 100%),linear-gradient(90deg, rgb(255,255,255),rgb(255,255,255))[{/capture}]
|
||||||
[{capture assign="d3dw_noitemmessageid"}]D3_DATAWIZARD_ERR_NOEXPORT_INSTALLED[{/capture}]
|
[{capture assign="d3dw_noitemmessageid"}]D3_DATAWIZARD_ERR_NOEXPORT_INSTALLED[{/capture}]
|
||||||
|
|
||||||
[{include file="d3Wizards.tpl" submit="d3ExportSubmit.tpl"}]
|
[{include file="@d3datawizard/admin/inc/d3Wizards.tpl" submit="@d3datawizard/admin/inc/d3ExportSubmit.tpl"}]
|
@ -6,6 +6,12 @@
|
|||||||
[{oxscript include="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"}]
|
[{oxscript include="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"}]
|
||||||
[{oxstyle include="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/solid.min.css"}]
|
[{oxstyle include="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/solid.min.css"}]
|
||||||
|
|
||||||
|
[{if $readonly}]
|
||||||
|
[{assign var="readonly" value="readonly disabled"}]
|
||||||
|
[{else}]
|
||||||
|
[{assign var="readonly" value=""}]
|
||||||
|
[{/if}]
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
button {
|
button {
|
||||||
margin: 1em 1em 1em 5em;
|
margin: 1em 1em 1em 5em;
|
||||||
@ -41,9 +47,9 @@
|
|||||||
}, 3000);
|
}, 3000);
|
||||||
document.getElementById('mask').className='on';
|
document.getElementById('mask').className='on';
|
||||||
document.getElementById('popup2').className='d3loader-2 on';
|
document.getElementById('popup2').className='d3loader-2 on';
|
||||||
document.getElementById('taskid').value = id;
|
form = document.getElementById('form_' + id);
|
||||||
document.getElementById('format').value = format;
|
form.format.value = format;
|
||||||
document.getElementById('myedit').submit();
|
form.submit();
|
||||||
}
|
}
|
||||||
[{/strip}][{/capture}]
|
[{/strip}][{/capture}]
|
||||||
[{oxscript add=$smarty.capture.d3script}]
|
[{oxscript add=$smarty.capture.d3script}]
|
||||||
@ -72,12 +78,12 @@
|
|||||||
</h5>
|
</h5>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
||||||
<form name="myedit" id="myedit" action="[{$oViewConf->getSelfLink()}]" method="post">
|
<form name="myedit" id="form_[{$id}]" action="[{$oViewConf->getSelfLink()}]" method="post">
|
||||||
[{$oViewConf->getHiddenSid()}]
|
[{$oViewConf->getHiddenSid()}]
|
||||||
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
|
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
|
||||||
<input type="hidden" name="fnc" value="runTask">
|
<input type="hidden" name="fnc" value="runTask">
|
||||||
<input type="hidden" name="taskid" id="taskid" value="">
|
<input type="hidden" name="taskid" value="[{$id}]">
|
||||||
<input type="hidden" name="format" id="format" value="CSV">
|
<input type="hidden" name="format" value="CSV">
|
||||||
|
|
||||||
|
|
||||||
[{if $item->getDescription()}]
|
[{if $item->getDescription()}]
|
||||||
@ -91,7 +97,7 @@
|
|||||||
<p class="card-text" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample" style="cursor: pointer">
|
<p class="card-text" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample" style="cursor: pointer">
|
||||||
[{$shorttext}]...
|
[{$shorttext}]...
|
||||||
</p>
|
</p>
|
||||||
<p class="card-text collapse" id="collapseExample">
|
<p class="card-text collapse" id="collapseExample_[{$id}]">
|
||||||
...[{$description|replace:$shorttext:''}]
|
...[{$description|replace:$shorttext:''}]
|
||||||
</p>
|
</p>
|
||||||
[{/if}]
|
[{/if}]
|
||||||
@ -137,4 +143,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
[{include file="d3_cfg_mod_inc.tpl"}]
|
[{include file="@d3modcfg_lib/admin/inc/inc.tpl"}]
|
8
views/smarty/admin/inc/actionSubmit.tpl
Normal file
8
views/smarty/admin/inc/actionSubmit.tpl
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[{block name="submitElements"}]
|
||||||
|
<div class="btn-group" [{$readonly}]>
|
||||||
|
<button type="button" class="btn btn-primary" onclick="if (confirm('[{oxmultilang ident="D3_DATAWIZARD_ACTION_SUBMIT_CONFIRM"}]') === true) {startTask('[{$id}]')}" [{$readonly}]>
|
||||||
|
<i class="fas fa-fw fa-magic"></i>
|
||||||
|
[{oxmultilang ident=$item->getButtonText()}]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
[{/block}]
|
@ -1,10 +1,10 @@
|
|||||||
[{block name="submitElements"}]
|
[{block name="submitElements"}]
|
||||||
<div class="btn-group">
|
<div class="btn-group" [{$readonly}]>
|
||||||
<button type="button" class="btn btn-primary" onclick="startTask('[{$id}]', 'CSV')">
|
<button type="button" class="btn btn-primary" onclick="startTask('[{$id}]', 'CSV')" [{$readonly}]>
|
||||||
<i class="fas fa-fw fa-magic"></i>
|
<i class="fas fa-fw fa-magic"></i>
|
||||||
[{oxmultilang ident=$item->getButtonText()}]
|
[{oxmultilang ident=$item->getButtonText()}]
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" [{$readonly}]>
|
||||||
<span class="sr-only">
|
<span class="sr-only">
|
||||||
<i class="fas fa-fw fa-magic"></i>
|
<i class="fas fa-fw fa-magic"></i>
|
||||||
[{oxmultilang ident=$item->getButtonText()}]
|
[{oxmultilang ident=$item->getButtonText()}]
|
||||||
@ -14,7 +14,7 @@
|
|||||||
[{block name="dataWizardFormat"}]
|
[{block name="dataWizardFormat"}]
|
||||||
[{assign var="rendererBridge" value=$item->getRendererBridge()}]
|
[{assign var="rendererBridge" value=$item->getRendererBridge()}]
|
||||||
[{foreach from=$rendererBridge->getTranslatedRendererIdList() key="key" item="translationId"}]
|
[{foreach from=$rendererBridge->getTranslatedRendererIdList() key="key" item="translationId"}]
|
||||||
<button class="dropdown-item" onclick="startTask('[{$id}]', '[{$key}]')">
|
<button class="dropdown-item" onclick="startTask('[{$id}]', '[{$key}]')" [{$readonly}]>
|
||||||
[{oxmultilang ident=$translationId}]
|
[{oxmultilang ident=$translationId}]
|
||||||
</button>
|
</button>
|
||||||
[{/foreach}]
|
[{/foreach}]
|
4
views/twig/admin/d3ActionWizard.html.twig
Normal file
4
views/twig/admin/d3ActionWizard.html.twig
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{% set d3dw_backgroundimage %}linear-gradient(22.5deg, rgba(66, 66, 66, 0.02) 0%, rgba(66, 66, 66, 0.02) 11%,rgba(135, 135, 135, 0.02) 11%, rgba(135, 135, 135, 0.02) 24%,rgba(29, 29, 29, 0.02) 24%, rgba(29, 29, 29, 0.02) 38%,rgba(15, 15, 15, 0.02) 38%, rgba(15, 15, 15, 0.02) 50%,rgba(180, 180, 180, 0.02) 50%, rgba(180, 180, 180, 0.02) 77%,rgba(205, 205, 205, 0.02) 77%, rgba(205, 205, 205, 0.02) 100%),linear-gradient(67.5deg, rgba(10, 10, 10, 0.02) 0%, rgba(10, 10, 10, 0.02) 22%,rgba(52, 52, 52, 0.02) 22%, rgba(52, 52, 52, 0.02) 29%,rgba(203, 203, 203, 0.02) 29%, rgba(203, 203, 203, 0.02) 30%,rgba(69, 69, 69, 0.02) 30%, rgba(69, 69, 69, 0.02) 75%,rgba(231, 231, 231, 0.02) 75%, rgba(231, 231, 231, 0.02) 95%,rgba(138, 138, 138, 0.02) 95%, rgba(138, 138, 138, 0.02) 100%),linear-gradient(112.5deg, rgba(221, 221, 221, 0.02) 0%, rgba(221, 221, 221, 0.02) 17%,rgba(190, 190, 190, 0.02) 17%, rgba(190, 190, 190, 0.02) 39%,rgba(186, 186, 186, 0.02) 39%, rgba(186, 186, 186, 0.02) 66%,rgba(191, 191, 191, 0.02) 66%, rgba(191, 191, 191, 0.02) 68%,rgba(16, 16, 16, 0.02) 68%, rgba(16, 16, 16, 0.02) 70%,rgba(94, 94, 94, 0.02) 70%, rgba(94, 94, 94, 0.02) 100%),linear-gradient(90deg, #ffffff,#ffffff){% endset %}
|
||||||
|
{% set d3dw_noitemmessageid %}D3_DATAWIZARD_ERR_NOACTION_INSTALLED{% endset %}
|
||||||
|
|
||||||
|
{% include "@d3datawizard/admin/inc/Wizards.html.twig" with {submit: "@d3datawizard/admin/inc/actionSubmit.html.twig"} %}
|
4
views/twig/admin/d3ExportWizard.html.twig
Normal file
4
views/twig/admin/d3ExportWizard.html.twig
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{% set d3dw_backgroundimage %}linear-gradient(339deg, rgba(47, 47, 47,0.02) 0%, rgba(47, 47, 47,0.02) 42%,transparent 42%, transparent 99%,rgba(17, 17, 17,0.02) 99%, rgba(17, 17, 17,0.02) 100%),linear-gradient(257deg, rgba(65, 65, 65,0.02) 0%, rgba(65, 65, 65,0.02) 11%,transparent 11%, transparent 92%,rgba(53, 53, 53,0.02) 92%, rgba(53, 53, 53,0.02) 100%),linear-gradient(191deg, rgba(5, 5, 5,0.02) 0%, rgba(5, 5, 5,0.02) 1%,transparent 1%, transparent 45%,rgba(19, 19, 19,0.02) 45%, rgba(19, 19, 19,0.02) 100%),linear-gradient(29deg, rgba(28, 28, 28,0.02) 0%, rgba(28, 28, 28,0.02) 33%,transparent 33%, transparent 40%,rgba(220, 220, 220,0.02) 40%, rgba(220, 220, 220,0.02) 100%),linear-gradient(90deg, rgb(255,255,255),rgb(255,255,255)){% endset %}
|
||||||
|
{% set d3dw_noitemmessageid %}D3_DATAWIZARD_ERR_NOEXPORT_INSTALLED{% endset %}
|
||||||
|
|
||||||
|
{% include "@d3datawizard/admin/inc/Wizards.html.twig" with {submit: "@d3datawizard/admin/inc/exportSubmit.html.twig"} %}
|
137
views/twig/admin/inc/Wizards.html.twig
Normal file
137
views/twig/admin/inc/Wizards.html.twig
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
{% include "headitem.html.twig" with {title: "GENERAL_ADMIN_TITLE"|translate} %}
|
||||||
|
|
||||||
|
{{ style({ include: "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" }) }}
|
||||||
|
{{ script({ include: "https://code.jquery.com/jquery-3.2.1.slim.min.js", dynamic: __oxid_include_dynamic }) }}
|
||||||
|
{{ script({ include: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js", dynamic: __oxid_include_dynamic }) }}
|
||||||
|
{{ script({ include: "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js", dynamic: __oxid_include_dynamic }) }}
|
||||||
|
{{ style({ include: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/solid.min.css" }) }}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
button {
|
||||||
|
margin: 1em 1em 1em 5em;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
/* Image courtesy of gradientmagic.com */
|
||||||
|
body {
|
||||||
|
background-image: {{ d3dw_backgroundimage }};
|
||||||
|
}
|
||||||
|
h4 .btn {
|
||||||
|
font-size: 1.3rem;
|
||||||
|
}
|
||||||
|
h5.card-header {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
.formElements label {
|
||||||
|
display: inline-block;
|
||||||
|
margin: .5rem 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{% capture assign = "d3script" %}{% apply spaceless %}
|
||||||
|
function startTask(id, format = '') {
|
||||||
|
let elements = document.getElementsByClassName('errorbox');
|
||||||
|
for (var i = 0; i < elements.length; i++){
|
||||||
|
elements[i].style.display = 'none';
|
||||||
|
}
|
||||||
|
setTimeout(function(){
|
||||||
|
document.getElementById('mask').className='';
|
||||||
|
document.getElementById('popup2').className='d3loader-2';
|
||||||
|
}, 3000);
|
||||||
|
document.getElementById('mask').className='on';
|
||||||
|
document.getElementById('popup2').className='d3loader-2 on';
|
||||||
|
document.getElementById('taskid').value = id;
|
||||||
|
document.getElementById('format').value = format;
|
||||||
|
document.getElementById('myedit').submit();
|
||||||
|
}
|
||||||
|
{% endapply %}{% endcapture %}
|
||||||
|
|
||||||
|
{{ script({ add: d3script, dynamic: __oxid_include_dynamic }) }}
|
||||||
|
|
||||||
|
<form name="myedit" id="myedit" action="{{ oViewConf.getSelfLink() }}" method="post" style="padding: 0;margin: 0;height:0;">
|
||||||
|
{{ oViewConf.getHiddenSid()|raw }}
|
||||||
|
<input type="hidden" name="cl" value="{{ oViewConf.getActiveClassName() }}">
|
||||||
|
<input type="hidden" name="fnc" value="runTask">
|
||||||
|
<input type="hidden" name="taskid" id="taskid" value="">
|
||||||
|
<input type="hidden" name="format" id="format" value="CSV">
|
||||||
|
|
||||||
|
{% set groups = oView.getGroups() %}
|
||||||
|
{% if groups|length %}
|
||||||
|
<div id="accordion">
|
||||||
|
{% for group in oView.getGroups() %}
|
||||||
|
<div class="card mb-2">
|
||||||
|
<div class="card-header p-1" id="heading{{ group }}">
|
||||||
|
<h4 class="mb-0">
|
||||||
|
<span class="btn p-1" data-toggle="collapse" data-target="#collapse{{ group }}" aria-expanded="false" aria-controls="collapse{{ group }}">
|
||||||
|
{{ translate({ ident: group }) }}
|
||||||
|
</span>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="collapse{{ group }}" class="collapse" aria-labelledby="heading{{ group }}" data-parent="#accordion">
|
||||||
|
<div class="card-body pb-0">
|
||||||
|
<div class="row">
|
||||||
|
{% for id, item in oView.getGroupTasks(group) %}
|
||||||
|
<div class="col-sm-6 col-md-4 col-lg-3 pb-4">
|
||||||
|
<div class="card">
|
||||||
|
<h5 class="card-header">
|
||||||
|
{{ item.getTitle() }}
|
||||||
|
</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
{% if item.getDescription() %}
|
||||||
|
{% set description = item.getDescription() %}
|
||||||
|
{% set sectionlength = "100" %}
|
||||||
|
|
||||||
|
{% if description|length <= sectionlength %}
|
||||||
|
<p class="card-text">{{ description }}</p>
|
||||||
|
{% else %}
|
||||||
|
{% set shorttext = description|truncate(sectionlength, '') %}
|
||||||
|
<p class="card-text" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample" style="cursor: pointer">
|
||||||
|
{{ shorttext }}...
|
||||||
|
</p>
|
||||||
|
<p class="card-text collapse" id="collapseExample">
|
||||||
|
...{{ description|replace({shorttext:''}) }}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if item.hasFormElements() %}
|
||||||
|
{% for formElement in item.getFormElements() %}
|
||||||
|
{{ formElement|raw }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% block exportSubmit %}
|
||||||
|
{% include submit %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="clear"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="alert alert-primary" role="alert">
|
||||||
|
{{ translate({ ident: d3dw_noitemmessageid }) }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div id="mask" class=""></div>
|
||||||
|
<div id="popup2" class="d3loader-2">
|
||||||
|
<div class="d3loader-spinner">
|
||||||
|
<div class="d3loader-circle-1"></div>
|
||||||
|
<div class="d3loader-circle-2"></div>
|
||||||
|
<div class="d3loader-circle-3"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include "@d3modcfg_lib/admin/inc/inc.html.twig" %}
|
8
views/twig/admin/inc/actionSubmit.html.twig
Normal file
8
views/twig/admin/inc/actionSubmit.html.twig
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{% block submitElements %}
|
||||||
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-primary" onclick="if (confirm('{{ translate({ ident: "D3_DATAWIZARD_ACTION_SUBMIT_CONFIRM" }) }}') === true) {startTask('{{ id }}')}">
|
||||||
|
<i class="fas fa-fw fa-magic"></i>
|
||||||
|
{{ translate({ ident: item.getButtonText() }) }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
24
views/twig/admin/inc/exportSubmit.html.twig
Normal file
24
views/twig/admin/inc/exportSubmit.html.twig
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{% block submitElements %}
|
||||||
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-primary" onclick="startTask('{{ id }}', 'CSV')">
|
||||||
|
<i class="fas fa-fw fa-magic"></i>
|
||||||
|
{{ translate({ ident: item.getButtonText() }) }}
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="sr-only">
|
||||||
|
<i class="fas fa-fw fa-magic"></i>
|
||||||
|
{{ translate({ ident: item.getButtonText() }) }}
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
{% block dataWizardFormat %}
|
||||||
|
{% set rendererBridge = item.getRendererBridge() %}
|
||||||
|
{% for key, translationId in rendererBridge.getTranslatedRendererIdList() %}
|
||||||
|
<button class="dropdown-item" onclick="startTask('{{ id }}', '{{ key }}')">
|
||||||
|
{{ translate({ ident: translationId }) }}
|
||||||
|
</button>
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user