add 6.0.1.0 sourceGuardian PHP 8

This commit is contained in:
Daniel Seifert 2024-09-03 14:18:43 +02:00
commit b9b8dacd3c
641 changed files with 61064 additions and 0 deletions

36
.php-cs-fixer.php Normal file
View File

@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
$finder = PhpCsFixer\Finder::create()
->in(__DIR__)
;
$header = <<<EOF
Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
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
EOF;
$config = new PhpCsFixer\Config();
return $config->setRules([
'@PHP80Migration' => true,
'@PSR12' => true,
'header_comment' => [
'comment_type' => 'PHPDoc',
'header' => $header,
'location' => 'after_open',
'separate' => 'both',
],
'php_unit_test_class_requires_covers' => true,
'doctrine_annotation_indentation' => true,
])
->setFinder($finder)
;

View File

@ -0,0 +1,47 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\Usermanager\Application\Model\Constants;
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
use OxidEsales\Eshop\Application\Controller\Admin\AdminMall;
// @codeCoverageIgnoreStart
// fallback for non ee editions
if (! class_exists('\\' . AdminMall::class)) {
class d3AdminMall extends AdminDetailsController
{
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanageritem_mall';
public function render(): string
{
parent::render();
return $this->_sThisTemplate;
}
public function assignToSubshops()
{
}
}
} else {
class d3AdminMall extends AdminMall
{
}
}
// @codeCoverageIgnoreEnd

View File

@ -0,0 +1,35 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_;
use D3\Usermanager\Application\Controller\Admin\d3_cfg_usermanageritem_list as itemList;
use D3\Usermanager\Application\Controller\Admin\d3_cfg_usermanageritem_main as itemMain;
class d3_cfg_usermanageritem extends d3_cfg_mod_
{
public function render(): string
{
$this->addTplParam('sListClass', itemList::class);
$this->addTplParam('sMainClass', itemMain::class);
$this->_hasListItems = true;
return parent::render();
}
}

View File

@ -0,0 +1,310 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\Usermanager\Application\Model\Actions\d3usermanager_action_interface as ActionModelInterface;
use D3\Usermanager\Application\Model\Actions\d3usermanager_actiongrouplist as ActionGroupList;
use D3\Usermanager\Application\Model\Actions\d3usermanager_actionlist as ActionList;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use D3\Usermanager\Application\Model\Exceptions\d3usermanager_actionException;
use DateTime;
use Doctrine\DBAL\Exception as DoctrineException;
use Doctrine\DBAL\Query\QueryBuilder;
use OxidEsales\Eshop\Application\Model\ContentList;
use OxidEsales\Eshop\Application\Model\User as Item;
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\Language;
use OxidEsales\Eshop\Core\Model\ListModel;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
use D3\Usermanager\Application\Controller\Admin\d3_cfg_usermanageritem_settings as ItemSettingsController;
use OxidEsales\Eshop\Core\UtilsView;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Database\QueryBuilderFactoryInterface;
class d3_cfg_usermanageritem_action extends ItemSettingsController
{
use VariablesTrait;
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanageritem_action';
protected $_sMenuSubItemTitle = 'd3mxusermanager_items';
protected $_sSavedId;
protected $_sExportFieldDescMLIdent = 'D3_USERMANAGER_FIELDDESC';
protected $_sExportFieldTitleBaseMLIdent = 'D3_USERMANAGER_FIELDTITLE_';
protected $_sExportFieldLangMLIdent = 'D3_USERMANAGER_FIELDADD_LANG';
/**
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
*/
public function save(): void
{
// @codeCoverageIgnoreStart
if (!defined('OXID_PHP_UNIT')) {
parent::save();
}
// @codeCoverageIgnoreEnd
$aMissingRequiredValues = [];
/** @var ActionModelInterface $oAction */
foreach ($this->getActionList() as $sId => $oAction) {
if ($this->getProfile()->getValue($oAction->getActiveSwitchParameter())) {
try {
$oAction->throwUnvalidConfigurationException();
} catch (d3usermanager_actionException $e) {
unset($e);
$aMissingRequiredValues[] = $sId;
}
}
}
if ($aMissingRequiredValues !== []) {
$this->addTplParam('missingRequValuesActions', $aMissingRequiredValues);
}
}
public function getContentList(): ListModel
{
/** @var $oContentList ContentList */
$oContentList = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.ContentList::class);
return $this->_getObjectList($oContentList);
}
public function d3GetConfig(): Config
{
/** @var Config $config */
$config = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Config::class);
return $config;
}
public function getItemFieldNames(): array
{
/** @var Item $item */
$item = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Item::class);
return $item->getFieldNames();
}
public function getProfile(): Manager
{
/** @var Manager $oProfile */
$oProfile = d3GetOxidDIC()->get(Manager::class);
$soxId = $this->getEditObjectId();
if ($soxId != "-1") {
// load object
$oProfile->loadInLang($this->_iEditLang, $soxId);
// load object in other languages
$oOtherLang = $oProfile->getAvailableInLangs();
if (!isset($oOtherLang[$this->_iEditLang])) {
$oProfile->loadInLang(key($oOtherLang), $soxId);
}
}
return $oProfile;
}
public function getExportExamplePath(): string
{
$oProfile = $this->getProfile();
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$soxId = $request->getRequestEscapedParameter("oxid");
if (isset($soxId) && $soxId && $soxId != "-1") {
// load object
$oProfile->loadInLang($this->_iEditLang, $soxId);
$oProfile = $this->_d3LoadInOtherLang($oProfile, $soxId);
}
$aSearch = [(new DateTime())->setTimestamp($oProfile->getStartTime())->format('Y-m-d_H-i-s')];
/** @var Language $oLang */
$oLang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
$aReplace = [$oLang->translateString('D3_USERMANAGER_ACTION_DATEPLACEHOLDER')];
return str_replace($aSearch, $aReplace, $oProfile->getListExportFilePath());
}
/**
* @param $sFieldName
*/
public function getFieldNameDescription($sFieldName): string
{
if (($sFieldNameTitle = $this->getFieldNameTitle($sFieldName))) {
return sprintf(
$this->getLang()->translateString($this->_sExportFieldDescMLIdent),
$sFieldNameTitle,
$sFieldName
);
}
return $sFieldName;
}
public function getLang(): Language
{
/** @var Language $language */
$language = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
return $language;
}
/**
* @param $sFieldName
*/
public function getFieldNameTitle($sFieldName): ?string
{
$sLangAdd = '';
$sPattern = "@(.*)([_]([0-9]{1,3}))$@";
if (preg_match($sPattern, $sFieldName, $aMatches)) {
$sFieldMLIdent = $this->_sExportFieldTitleBaseMLIdent.strtoupper($aMatches[1]);
$aLangNames = $this->getLang()->getLanguageNames();
$sLangAdd = sprintf(
$this->getLang()->translateString($this->_sExportFieldLangMLIdent),
$aLangNames[$aMatches[3]]
);
} else {
$sFieldMLIdent = $this->_sExportFieldTitleBaseMLIdent.strtoupper($sFieldName);
}
$sFieldName = $this->getLang()->translateString($sFieldMLIdent);
if ($sFieldName != $sFieldMLIdent) {
return $sFieldName.$sLangAdd;
}
return null;
}
public function getActionGroupList(): ActionGroupList
{
d3GetOxidDIC()->set(
ActionGroupList::class.'.args.usermanager',
$this->getProfile()
);
d3GetOxidDIC()->set(
ActionGroupList::class.'.args.user',
d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Item::class)
);
/** @var ActionGroupList $actiongroup */
$actiongroup = d3GetOxidDIC()->get(ActionGroupList::class);
return $actiongroup;
}
public function getActionListObject(): ActionList
{
d3GetOxidDIC()->set(
ActionList::class.'.args.usermanager',
$this->getProfile()
);
d3GetOxidDIC()->set(
ActionList::class.'.args.user',
d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Item::class)
);
/** @var ActionList $actionlist */
$actionlist = d3GetOxidDIC()->get(ActionList::class);
return $actionlist;
}
public function getGroupedActionList(): array
{
$oManager = $this->getProfile();
$oActionList = $this->getActionGroupList();
$oActionList->setGroups($oManager->getConfiguration()->getGroupedActionIdList());
return $oActionList->getGroupList();
}
public function getActionList(): array
{
$oManager = $this->getProfile();
$oActionList = $this->getActionListObject();
$oActionList->setActions($oManager->getConfiguration()->getActionIdList());
return $oActionList->getActionList();
}
/**
* @param $soxId
*
*/
protected function _d3LoadInOtherLang(Manager $oProfile, $soxId): Manager
{
// load object in other languages
$oOtherLang = $oProfile->getAvailableInLangs();
if (!isset($oOtherLang[$this->_iEditLang])) {
$oProfile->loadInLang(key($oOtherLang), $soxId);
}
return $oProfile;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ParameterNotFoundException
* @throws DoctrineException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function markAsFinished(): void
{
$oProfile = $this->getProfile();
/** @var QueryBuilder $queryBuilder */
$queryBuilder = ContainerFactory::getInstance()->getContainer()->get(QueryBuilderFactoryInterface::class)->create();
$queryBuilder->select('count(*)')
->from(d3GetOxidDIC()->get('d3ox.usermanager.'.Item::class)->getViewName());
$iAllCount = $queryBuilder->execute()->fetchOne();
$iCount = $oProfile->markConcernedItemsAsFinished(true);
$oEx = oxNew(
StandardException::class,
sprintf(
Registry::getLang()->translateString('D3_USERMANAGER_ACTION_MARKASFINISHED_MESSAGE'),
$iCount,
$iAllCount
)
);
Registry::get(UtilsView::class)->addErrorToDisplay($oEx);
}
}

View File

@ -0,0 +1,38 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_list;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanagerlist as ManagerList;
class d3_cfg_usermanageritem_list extends d3_cfg_mod_list
{
protected $_sListClass = Manager::class;
protected $_sListType = ManagerList::class;
protected $_blShowListItems = true;
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanageritem_list';
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_items';
}

View File

@ -0,0 +1,123 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
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\Request;
class d3_cfg_usermanageritem_main extends d3_cfg_mod_main
{
use VariablesTrait;
protected $_sSavedId;
protected $_sSetModId = 'd3usermanager';
protected $_sModId = 'd3usermanager';
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_items';
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanageritem_main';
protected $_blUseOwnOxid = true;
protected $_aNaviItems = [
'new' => [
'sScript' => 'top.oxid.admin.editThis( -1 );return false;',
'sTranslationId' => 'D3_TOOLTIPS_NEWUSERMANAGER',
],
];
protected $_sD3ObjectClass = Manager::class;
/**
* Loads article parameters and passes them to template engine, returns
* name of template file "article_main.tpl".
*
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function render(): string
{
$sRet = parent::render();
/** @var Config $config */
$config = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Config::class);
$this->addTplParam("blUseTimeCheck", $config->getConfigParam('blUseTimeCheck'));
return $sRet;
}
/**
* Sets default values for empty article (currently does nothing), returns
* array with parameters.
*
* @param array $aParams Parameters, to set default values
*/
public function addDefaultValues($aParams): array
{
$aParams = parent::addDefaultValues($aParams);
/** @var Manager $oManager */
$oManager = d3GetOxidDIC()->get(Manager::class);
$sFieldLongName = $oManager->d3GetFieldLongName('d3_cronjobid');
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$aRequestParameter = $request->getRequestEscapedParameter("editval");
if (is_array($aRequestParameter) && isset($aRequestParameter[$sFieldLongName])) {
$aRequestParameter[$sFieldLongName] = $this->fixCronjobId($aRequestParameter[$sFieldLongName]);
if (isset($_POST['editval'])) {
$_POST['editval'] = $aRequestParameter;
} elseif (isset($_GET['editval'])) {
$_GET['editval'] = $aRequestParameter;
}
}
return $aParams;
}
/**
* @param $sId
*/
public function fixCronjobId($sId): string|array
{
$aSearch = [
' ',
];
$sReplace = '_';
return str_replace($aSearch, $sReplace, $sId);
}
}

View File

@ -0,0 +1,189 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Model\d3filesystem;
use D3\ModCfg\Application\Model\d3str;
use D3\ModCfg\Application\Model\Exception\wrongModIdException;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use OxidEsales\Eshop\Core\Language;
use OxidEsales\Eshop\Core\Request;
/**
*
*/
class d3_cfg_usermanageritem_mall extends d3AdminMall
{
use VariablesTrait;
private string $_sModId = 'd3usermanager';
/**
* DB table having oxshopincl and oxshopexcl fields we are going to deal with
*/
protected $_sMallTable = "d3modprofile";
protected $_blUseOwnOxid = true;
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_items_mall';
protected $_sHelpLinkMLAdd;
protected $_aNaviItems = [
'new' => [
'sScript' => 'top.oxid.admin.editThis( -1 );return false;',
'sTranslationId' => 'D3_TOOLTIPS_NEWUSERMANAGER',
],
];
/**
* Class name of object to load
*/
protected $_sObjectClassName = Manager::class;
/**
* constructor.
*/
public function __construct()
{
d3GetOxidDIC()->getParameter($this->_DIC_Instance_Id . 'modcfgid') === $this->_sModId or
throw oxNew(wrongModIdException::class, $this->_sModId);
parent::__construct();
}
public function getProfile(): Manager
{
/** @var Manager $oManager */
$oManager = d3GetOxidDIC()->get($this->_sObjectClassName);
return $oManager;
}
public function render(): string
{
$oProfile = $this->getProfile();
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$soxId = $request->getRequestEscapedParameter("oxid");
if ($this->_isSetOxid($soxId)) {
// load object
$oProfile->loadInLang($this->_iEditLang, $soxId);
$oProfile = $this->_d3LoadInOtherLang($oProfile, $soxId);
}
$this->addTplParam('edit', $oProfile);
return parent::render();
}
public function getUserMessages(): array
{
return [];
}
public function getLang(): Language
{
/** @var Language $lang */
$lang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
return $lang;
}
public function getHelpURL(): string
{
$sUrl = $this->d3GetSet()->getHelpURL();
/** @var d3str $oD3Str */
$oD3Str = d3GetOxidDIC()->get(d3str::class);
if ($this->_sHelpLinkMLAdd) {
$sUrl .= $oD3Str->unprefixedslashit($this->getLang()->translateString($this->_sHelpLinkMLAdd));
}
$oFS = d3GetOxidDIC()->get(d3filesystem::class);
$aFileName = $oFS->splitFilename($sUrl);
// has no extension
if (false == $aFileName['ext']) {
return $oD3Str->trailingslashit($sUrl);
}
return $sUrl;
}
/**
* return type can't defined, because of unmockable d3_cfg_mod class, use stdClass in test
* @return d3_cfg_mod
*/
public function d3GetSet()
{
/** @var d3_cfg_mod $modcfg */
$modcfg = d3GetOxidDIC()->get($this->_DIC_Instance_Id.'modcfg');
return $modcfg;
}
/**
* exampleItem: array('new' => array(
* 'sScript' => 'top.oxid.admin.editThis( -1 );return false;',
* 'sTranslationId' => 'foo',
* )
*/
public function getNaviItems(): array
{
return $this->_aNaviItems;
}
public function d3GetMenuItemTitle(): string
{
return $this->_sMenuItemTitle;
}
public function d3GetMenuSubItemTitle(): string
{
return $this->_sMenuSubItemTitle;
}
/**
* @param $soxId
*/
protected function _isSetOxid($soxId): bool
{
return isset($soxId) && $soxId && $soxId != "-1";
}
/**
* @param $soxId
*
*/
protected function _d3LoadInOtherLang(Manager $oProfile, $soxId): Manager
{
// load object in other languages
$oOtherLang = $oProfile->getAvailableInLangs();
if (false == isset($oOtherLang[$this->_iEditLang])) {
$oProfile->loadInLang(key($oOtherLang), $soxId);
}
return $oProfile;
}
}

View File

@ -0,0 +1,389 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager_configurationcheck;
use D3\Usermanager\Application\Model\Actions\d3usermanager_actionlist as ActionListModel;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use D3\Usermanager\Application\Model\Exceptions\d3ActionRequirementAbstract;
use D3\Usermanager\Application\Model\Exceptions\d3ActionRequirementInterface;
use D3\Usermanager\Application\Model\Requirements\d3usermanager_requirementlist as RequirementListModel;
use D3\Usermanager\Application\Controller\Admin\d3_cfg_usermanageritem_action as ItemActionController;
use D3\Usermanager\Application\Controller\Admin\d3_cfg_usermanageritem_requ as ItemRequirementController;
use Doctrine\DBAL\Exception as DoctrineException;
use OxidEsales\Eshop\Application\Model\User as ItemModel;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Language;
use OxidEsales\Eshop\Core\Request;
use OxidEsales\Eshop\Core\UtilsView;
use ReflectionException;
class d3_cfg_usermanageritem_overview extends d3_cfg_mod_main
{
use VariablesTrait;
protected $_sSetModId = 'd3usermanager';
protected $_sModId = 'd3usermanager';
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanageritem_overview';
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_items';
protected $_blUseOwnOxid = true;
protected $_aNaviItems = [
'new' => [
'sScript' => 'top.oxid.admin.editThis( -1 );return false;',
'sTranslationId' => 'D3_TOOLTIPS_NEWUSERMANAGER',
],
];
protected $_sD3ObjectClass = Manager::class;
protected $_sRequestData;
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws StandardException
*/
public function render(): string
{
try {
d3GetOxidDIC()->set(
d3usermanager_configurationcheck::class.'.args.usermanager',
$this->getManager()
);
/** @var d3usermanager_configurationcheck $confCheck */
$confCheck = d3GetOxidDIC()->get(d3usermanager_configurationcheck::class);
$confCheck->checkThrowingExceptions(d3usermanager_configurationcheck::REQUIREMENTS_AND_ACTIONS);
} catch (d3ActionRequirementInterface $d3ActionRequirement) {
/** @var UtilsView $utilsView */
$utilsView = d3GetOxidDIC()->get('d3ox.usermanager.'.UtilsView::class);
$utilsView->addErrorToDisplay($d3ActionRequirement);
}
return parent::render();
}
public function getActionAdminController(): ItemActionController
{
/** @var ItemActionController $action */
$action = d3GetOxidDIC()->get(ItemActionController::class);
return $action;
}
public function getRequirementAdminController(): ItemRequirementController
{
/** @var ItemRequirementController $requ */
$requ = d3GetOxidDIC()->get(ItemRequirementController::class);
return $requ;
}
/**
* @param $method
* @param $arguments
*
* @return mixed
*/
public function __call($method, $arguments)
{
$oActionView = $this->getActionAdminController();
if (method_exists($oActionView, $method)) {
return call_user_func_array([ $oActionView, $method], $arguments);
}
$oRequView = $this->getRequirementAdminController();
if (method_exists($oRequView, $method)) {
return call_user_func_array([ $oRequView, $method], $arguments);
}
return parent::__call($method, $arguments);
}
public function getRequirementListObject(Manager $oManager): RequirementListModel
{
d3GetOxidDIC()->set(
RequirementListModel::class.'.args.usermanager',
$oManager
);
/** @var RequirementListModel $requList */
$requList = d3GetOxidDIC()->get(RequirementListModel::class);
return $requList;
}
public function getRequirementList(): array
{
/** @var Manager $oManager */
$oManager = $this->getProfile();
$oRequList = $this->getRequirementListObject($oManager);
$oRequList->setRequirements($oManager->getConfiguration()->getRequirementIdList());
return $oRequList->getRequirementList();
}
public function getActionListObject(Manager $oManager): ActionListModel
{
d3GetOxidDIC()->set(
ActionListModel::class.'.args.usermanager',
$oManager
);
d3GetOxidDIC()->set(
ActionListModel::class.'.args.user',
d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.ItemModel::class)
);
/** @var ActionListModel $actionlist */
$actionlist = d3GetOxidDIC()->get(ActionListModel::class);
return $actionlist;
}
public function getActionList(): array
{
/** @var Manager $oManager */
$oManager = $this->getProfile();
$oActionList = $this->getActionListObject($oManager);
$oActionList->setActions($oManager->getConfiguration()->getActionIdList());
return $oActionList->getActionList();
}
public function isEditMode(): bool
{
return false;
}
public function setRequestData(): void
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$this->_sRequestData = $request->getRequestEscapedParameter('sRequestData');
}
protected function _getRequestData(): string
{
return $this->_sRequestData;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws ReflectionException
* @throws StandardException
* @throws DoctrineException
* @throws d3ActionRequirementAbstract
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function getToFinishedCount(): int
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$requestCount = $request->getRequestEscapedParameter('toFinishedCount');
if ($this->canRequestData(__FUNCTION__)) {
/** @var Manager $oProfile */
$oProfile = $this->getProfile();
return $oProfile->getListGenerator()->getConcernedItemCount();
}
if ($this->canUseRequestData($requestCount)) {
return (int) $requestCount;
}
return 0;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DoctrineException
* @throws ReflectionException
* @throws StandardException
* @throws d3ActionRequirementAbstract
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function getFinishedCount(): int
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$requestCount = $request->getRequestEscapedParameter('finishedCount');
if ($this->canRequestData(__FUNCTION__)) {
/** @var Manager $oProfile */
$oProfile = $this->getProfile();
return $oProfile->getListGenerator()->getFinishedItemCount();
}
if ($this->canUseRequestData($requestCount)) {
return (int) $requestCount;
}
return 0;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DoctrineException
* @throws ReflectionException
* @throws StandardException
* @throws d3ActionRequirementAbstract
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function getFinishedMonthCount(): int
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$requestCount = $request->getRequestEscapedParameter('finishedMonthCount');
if ($this->canRequestData(__FUNCTION__)) {
/** @var Manager $oProfile */
$oProfile = $this->getProfile();
return $oProfile->getListGenerator()->getFinishedMonthItemCount();
}
if ($this->canUseRequestData($requestCount)) {
return (int) $requestCount;
}
return 0;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DoctrineException
* @throws ReflectionException
* @throws StandardException
* @throws d3ActionRequirementAbstract
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function getNotFinishedCount(): int
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$requestCount = $request->getRequestEscapedParameter('notFinishedCount');
if ($this->canRequestData(__FUNCTION__)) {
/** @var Manager $oProfile */
$oProfile = $this->getProfile();
return $oProfile->getListGenerator()->getNotFinishedItemCount();
}
if ($this->canUseRequestData($requestCount)) {
return (int) $requestCount;
}
return 0;
}
/**
* @param $sFunctionName
*
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function canRequestData($sFunctionName): bool
{
if (!$this->getDataOnDemand()) {
return true;
}
return $this->_getRequestData() == $sFunctionName;
}
/**
* @param $requestCount
*
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function canUseRequestData($requestCount): bool
{
return $this->getDataOnDemand()
&& isset($requestCount) && false !== $requestCount;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getDataOnDemand(): bool
{
return (bool) $this->d3GetSet()->getValue('blCalcStatOnDemand');
}
/**
* @param $sRequestName
* @param $sFunctionName
*/
public function hasRequestedData($sRequestName, $sFunctionName): bool
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$iRequestCount = (string) $request->getRequestEscapedParameter($sRequestName);
return strlen($iRequestCount) || $this->_getRequestData() == $sFunctionName;
}
public function getManager(): Manager
{
/** @var Manager $manager */
$manager = d3GetOxidDIC()->get(Manager::class);
$manager->load($this->getEditObjectId());
return $manager;
}
public function getLang(): Language
{
/** @var Language $lang */
$lang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
return $lang;
}
/**
* @param $sManagerId
*/
public function getManagerTitle(string $sManagerId): string
{
$oManager = $this->getManager();
if ($oManager->load($sManagerId)) {
return $oManager->getFieldData('oxtitle');
}
return $this->getLang()->translateString('D3_USERMANAGER_REQU_OTHERJOB_UNKNOWNJOBID').' "'.$sManagerId.'"';
}
}

View File

@ -0,0 +1,177 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanagerlist as ManagerList;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use D3\Usermanager\Application\Model\Exceptions\d3usermanager_requirementException;
use D3\Usermanager\Application\Model\Requirements\d3usermanager_requirement_interface as RequirementModelInterface;
use D3\Usermanager\Application\Model\Requirements\d3usermanager_requirementgrouplist as RequirementGroupListModel;
use D3\Usermanager\Application\Model\Requirements\d3usermanager_requirementlist as RequirementListModel;
use OxidEsales\Eshop\Application\Model\DeliveryList;
use OxidEsales\Eshop\Application\Model\PaymentList;
use OxidEsales\Eshop\Application\Model\CountryList;
use OxidEsales\Eshop\Core\Config;
use OxidEsales\Eshop\Core\Language;
use OxidEsales\Eshop\Core\Model\ListModel;
class d3_cfg_usermanageritem_requ extends d3_cfg_usermanageritem_settings
{
use VariablesTrait;
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanageritem_requ';
protected $_aTransStatus = ['OK', 'ERROR', 'NOT_OK'];
protected $_sMenuSubItemTitle = 'd3mxusermanager_items';
public function save(): void
{
// @codeCoverageIgnoreStart
if (!defined('OXID_PHP_UNIT')) {
parent::save();
}
// @codeCoverageIgnoreEnd
$aMissingRequiredValues = [];
/** @var RequirementModelInterface $oRequirement */
foreach ($this->getRequirementList() as $sId => $oRequirement) {
if ($this->getProfile()->getValue($oRequirement->getActiveSwitchParameter())) {
try {
$oRequirement->throwUnvalidConfigurationException();
} catch (d3usermanager_requirementException $e) {
unset($e);
$aMissingRequiredValues[] = $sId;
}
}
}
if ($aMissingRequiredValues !== []) {
$this->addTplParam('missingRequValuesActions', $aMissingRequiredValues);
}
}
public function d3GetConfig(): Config
{
/** @var Config $config */
$config = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Config::class);
return $config;
}
public function getPaymentList(): ListModel
{
/** @var PaymentList $oPaymentList */
$oPaymentList = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.PaymentList::class);
return $this->_getObjectList($oPaymentList, null, 'oxdesc ASC');
}
public function getDeliveryList(): ListModel
{
/** @var DeliveryList $oDeliveryList */
$oDeliveryList = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.DeliveryList::class);
return $this->_getObjectList($oDeliveryList, null, 'oxtitle ASC');
}
public function getCountryList(): ListModel
{
/** @var CountryList $oCountryList */
$oCountryList = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.CountryList::class);
return $this->_getObjectList($oCountryList, null, 'oxtitle ASC');
}
public function getJobList(): ManagerList
{
$sCurrentId = $this->getViewDataElement('edit')->getId();
/** @var $oManagerList ManagerList */
$oManagerList = d3GetOxidDIC()->get(ManagerList::class);
$oManagerList->setCustomSorting('oxsort ASC');
$oManagerList->getList();
$oManagerList->offsetUnset($sCurrentId);
return $oManagerList;
}
public function getLanguageList(): array
{
$oLang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
return $oLang->getLanguageArray();
}
public function getTransStatusList(): array
{
return $this->_aTransStatus;
}
/**
* Sets default values for empty article (currently does nothing), returns
* array with parameters.
*
* @param array $aParams Parameters, to set default values
*/
public function addDefaultValues($aParams): array
{
return $aParams;
}
public function getRequirementGroupList(Manager $oManager): RequirementGroupListModel
{
d3GetOxidDIC()->set(
RequirementGroupListModel::class.'.args.usermanager',
$oManager
);
/** @var RequirementGroupListModel $requGroupModel */
$requGroupModel = d3GetOxidDIC()->get(RequirementGroupListModel::class);
return $requGroupModel;
}
public function getRequirementListObject(Manager $oManager): RequirementListModel
{
d3GetOxidDIC()->set(
RequirementListModel::class.'.args.usermanager',
$oManager
);
/** @var RequirementListModel $requListModel */
$requListModel = d3GetOxidDIC()->get(RequirementListModel::class);
return $requListModel;
}
public function getGroupedRequirementList(): array
{
/** @var Manager $oManager */
$oManager = $this->getProfile();
$oRequList = $this->getRequirementGroupList($oManager);
$oRequList->setGroups($oManager->getConfiguration()->getGroupedRequirementIdList());
return $oRequList->getGroupList();
}
public function getRequirementList(): array
{
/** @var Manager $oManager */
$oManager = $this->getProfile();
$oRequList = $this->getRequirementListObject($oManager);
$oRequList->setRequirements($oManager->getConfiguration()->getRequirementIdList());
return $oRequList->getRequirementList();
}
}

View File

@ -0,0 +1,146 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Model\Exception\wrongModIdException;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use D3\ModCfg\Application\Model\d3database;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main;
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Language;
use OxidEsales\Eshop\Core\Model\ListModel;
use OxidEsales\Eshop\Core\Model\MultiLanguageModel;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use Psr\Container\ContainerInterface;
class d3_cfg_usermanageritem_settings extends d3_cfg_mod_main
{
use VariablesTrait;
protected $_sModId = 'd3usermanager';
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_blUseOwnOxid = true;
protected $_aNaviItems = [
'new' => [
'sScript' => 'top.oxid.admin.editThis( -1 );return false;',
'sTranslationId' => 'D3_TOOLTIPS_NEWUSERMANAGER',
],
];
protected $_sD3ObjectClass = Manager::class;
/**
* constructor.
*/
public function __construct()
{
d3GetOxidDIC()->getParameter($this->_DIC_Instance_Id . 'modcfgid') === $this->_sModId or
throw oxNew(wrongModIdException::class, $this->_sModId);
parent::__construct();
}
public function getGroupsList(): ListModel
{
/** @var $oGroupsList ListModel */
$oGroupsList = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.ListModel::class);
$oGroupsList->init('oxgroups');
return $this->_getObjectList($oGroupsList, null, 'oxtitle ASC');
}
public function getDIContainer(): ContainerInterface
{
return ContainerFactory::getInstance()->getContainer();
}
/**
* @param null|string $sWhere
* @param null|string $sOrderBy
*
*/
protected function _getObjectList(ListModel $oObjectList, $sWhere = null, $sOrderBy = null): ListModel
{
startProfile(__METHOD__);
/** @var Language $oLang */
$oLang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
/** @var MultiLanguageModel $oObject */
$oObject = $oObjectList->getBaseObject();
if ($oObject->isMultilang()) {
$oObject->setLanguage($oLang->getTplLanguage());
}
$sFieldList = $oObject->getSelectFields();
/** @var d3database $db */
$db = d3GetOxidDIC()->get('d3.usermanager.database');
$qb = $db->getQueryBuilder();
$qb->select($sFieldList)
->from($oObject->getViewName());
if ($sWhere) {
$qb->add('where', $sWhere);
}
if ($sOrderBy) {
$qb->add('orderBy', $sOrderBy);
}
$oObjectList->selectString($qb->getSQL(), $qb->getParameters());
stopProfile(__METHOD__);
return $oObjectList;
}
public function isEditMode(): bool
{
return true;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function getRestrictionMessage(): string
{
/** @var Language $oLang */
$oLang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
/** @var d3_cfg_mod $oModCfg */
$oModCfg = d3GetOxidDIC()->get($this->_DIC_Instance_Id.'modcfg');
return sprintf(
$oLang->translateString('D3_USERMANAGER_ERROR_RESTRICTIONS'),
$oModCfg->getLicenseConfigData('sEditionId', 'unknown')
);
}
}

View File

@ -0,0 +1,139 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main;
use D3\Usermanager\Application\Model\d3usermanager_conf as ConfModel;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Request;
class d3_cfg_usermanageritem_trigger extends d3_cfg_mod_main
{
use VariablesTrait;
protected $_sSavedId;
protected $_sSetModId = 'd3usermanager';
protected $_sModId = 'd3usermanager';
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_items';
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanageritem_trigger';
protected $_blUseOwnOxid = true;
protected $_aNaviItems = [
'new' => [
'sScript' => 'top.oxid.admin.editThis( -1 );return false;',
'sTranslationId' => 'D3_TOOLTIPS_NEWUSERMANAGER',
],
];
protected $_sD3ObjectClass = Manager::class;
/**
* Sets default values for empty article (currently does nothing), returns
* array with parameters.
*
* @param array $aParams Parameters, to set default values
*/
public function addDefaultValues($aParams): array
{
$aParams = parent::addDefaultValues($aParams);
/** @var Manager $oManager */
$oManager = d3GetOxidDIC()->get(Manager::class);
$sFieldLongName = $oManager->d3GetFieldLongName('d3_cronjobid');
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$aRequestParameter = $request->getRequestEscapedParameter("editval");
if (is_array($aRequestParameter) && isset($aRequestParameter[$sFieldLongName])) {
$aRequestParameter[$sFieldLongName] = $this->fixCronjobId($aRequestParameter[$sFieldLongName]);
if (isset($_POST['editval'])) {
$_POST['editval'] = $aRequestParameter;
} elseif (isset($_GET['editval'])) {
$_GET['editval'] = $aRequestParameter;
}
}
return $aParams;
}
/**
* @param $sId
*/
public function fixCronjobId($sId): string|array
{
$aSearch = [
' ',
];
$sReplace = '_';
return str_replace($aSearch, $sReplace, $sId);
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function triggersAreAllowed(): bool
{
if ($this->d3GetSet()->isDemo()) {
return true;
}
return in_array(
true,
array_map([$this->d3GetSet(),'getLicenseConfigData'], [ConfModel::SERIAL_BIT_STANDARD_EDITION])
);
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function scriptsAreAllowed(): bool
{
if ($this->d3GetSet()->isDemo()) {
return true;
}
return in_array(
true,
array_map([$this->d3GetSet(),'getLicenseConfigData'], [ConfModel::SERIAL_BIT_PREMIUM_EDITION])
);
}
}

View File

@ -0,0 +1,36 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\Log\d3_cfg_log;
class d3_cfg_usermanagerlog extends d3_cfg_log
{
protected $_sModId = 'd3usermanager';
public function d3getAdditionalUrlParams(): string
{
$sRet = parent::d3getAdditionalUrlParams();
if ($this->_sModId) {
$sRet .= '&sD3ModId='.$this->_sModId;
}
return $sRet;
}
}

View File

@ -0,0 +1,25 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\Log\d3_cfg_log_list;
class d3_cfg_usermanagerlog_list extends d3_cfg_log_list
{
protected $_sModId = 'd3usermanager';
}

View File

@ -0,0 +1,35 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\Usermanager\Application\Controller\Admin\d3_cfg_usermanagerset_list as setListController;
use D3\Usermanager\Application\Controller\Admin\d3_cfg_usermanagerset_main as setMainController;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_;
class d3_cfg_usermanagerset extends d3_cfg_mod_
{
public function render(): string
{
$this->addTplParam('sListClass', setListController::class);
$this->addTplParam('sMainClass', setMainController::class);
$this->_hasListItems = false;
return parent::render();
}
}

View File

@ -0,0 +1,31 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_licence;
class d3_cfg_usermanagerset_licence extends d3_cfg_mod_licence
{
protected $_sModId = 'd3usermanager';
protected $_hasNewsletterForm = false;
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_settings';
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_list;
class d3_cfg_usermanagerset_list extends d3_cfg_mod_list
{
// enables language depended configuration
protected $_blD3ShowLangSwitch = false;
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_settings';
public function render()
{
$sRet = parent::render();
// default page number 1
$this->addTplParam('oxid', 1);
$this->addTplParam("default_edit", "d3_cfg_usermanagerset_main");
$this->addTplParam("updatemain", $this->_blUpdateMain);
return $sRet;
}
}

View File

@ -0,0 +1,220 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main;
use D3\ModCfg\Application\Model\d3str;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\ModCfg\Application\Model\Exception\wrongModIdException;
use D3\ModCfg\Application\Model\Filegenerator\d3filegeneratorcronsh;
use D3\ModCfg\Application\Model\Shopcompatibility\d3ShopCompatibilityAdapterHandler;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use Doctrine\DBAL\Exception as DoctrineException;
use OxidEsales\Eshop\Application\Model\Shop;
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\Language;
use OxidEsales\Eshop\Core\Request;
use OxidEsales\Eshop\Core\ViewConfig;
class d3_cfg_usermanagerset_main extends d3_cfg_mod_main
{
use VariablesTrait;
protected $_sModId = 'd3usermanager';
protected $_sThisTemplate = '@'. Constants::OXID_MODULE_ID .'/admin/d3_cfg_usermanagerset_main';
protected $_blHasDebugSwitch = true;
protected $_sDebugHelpTextIdent = 'D3_USERMANAGER_SET_DEBUG_DESC';
protected $_sMenuItemTitle = 'd3mxusermanager';
protected $_sMenuSubItemTitle = 'd3mxusermanager_settings';
/**
* constructor.
*/
public function __construct()
{
d3GetOxidDIC()->getParameter($this->_DIC_Instance_Id . 'modcfgid') === $this->_sModId or
throw oxNew(wrongModIdException::class, $this->_sModId);
parent::__construct();
}
public function getManager(): Manager
{
/** @var Manager $manager */
$manager = d3GetOxidDIC()->get(Manager::class);
return $manager;
}
/**
* get basic cronjob access password; for cases only, if no password is set
*/
public function getBaseCronPW(): string
{
return $this->getManager()->getBaseCronPW();
}
public function getViewConfig(): ViewConfig
{
// don't use DIC because of circular reference
if ($this->_oViewConf === null) {
$this->_oViewConf = oxNew(ViewConfig::class);
}
return $this->_oViewConf;
}
public function getD3Str(): d3str
{
/** @var d3str $d3str */
$d3str = d3GetOxidDIC()->get(d3str::class);
return $d3str;
}
/**
* @param bool|int $iCronJobId
*/
public function getCronPath($iCronJobId = false): string
{
$sScriptPath = VENDOR_PATH.'bin/d3_usermanager_cron';
$aParameters = [
'task' => 'run',
'shp' => $this->getViewConfig()->getActiveShopId(),
];
if ($iCronJobId !== false) {
$aParameters['cjid'] = $iCronJobId;
}
return 'php ' . $sScriptPath." ".implode(' ', $aParameters);
}
/**
* @throws DatabaseConnectionException
* @throws DoctrineException
*/
public function getAvailableCronjobIds(): array
{
return $this->getManager()->getAvailableCronjobIds();
}
/**
* @param bool|array $aCJID
*/
public function getCJIDDesc(array $aCJID): string
{
/** @var Language $oLang */
$oLang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
if ($aCJID['count'] == 1) {
return sprintf(
$oLang->translateString('D3_USERMANAGER_SET_CRON_JOBID', null, true),
$aCJID['id'],
$aCJID['count']
);
}
return sprintf(
$oLang->translateString('D3_USERMANAGER_SET_CRON_JOBSID', null, true),
$aCJID['id'],
$aCJID['count']
);
}
/**
* @param bool|int $iCronJobId
*/
public function getCronTimestampVarName($iCronJobId = false): string
{
$sVarName = "sCronExecTimestamp";
if ($iCronJobId !== false) {
$sVarName .= $iCronJobId;
}
return $sVarName;
}
public function getFileGeneratorCronSh(): d3filegeneratorcronsh
{
/** @var d3filegeneratorcronsh $filegenerator */
$filegenerator = d3GetOxidDIC()->get(d3filegeneratorcronsh::class);
return $filegenerator;
}
public function getCronProviderList(): array
{
return $this->getFileGeneratorCronSh()->getContentList();
}
public function getCompatibilityAdapterHandler(): d3ShopCompatibilityAdapterHandler
{
/** @var d3ShopCompatibilityAdapterHandler $compatiblityHandler */
$compatiblityHandler = d3GetOxidDIC()->get(d3ShopCompatibilityAdapterHandler::class);
return $compatiblityHandler;
}
public function d3GetActiveShop(): Shop
{
/** @var Config $config */
$config = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Config::class);
return $config->getActiveShop();
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function generateCronShFile(): void
{
$sScriptPath = VENDOR_PATH.'bin/d3_usermanager_cron';
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$sCronId = $request->getRequestEscapedParameter('cronid');
$oShop = $this->d3GetActiveShop();
$aParameters = [
0 => 'run',
1 => $oShop->getId(),
2 => $sCronId,
];
$oD3ShGenerator = $this->getFileGeneratorCronSh();
$oD3ShGenerator->setContentType($request->getRequestEscapedParameter('crontype'));
$oD3ShGenerator->setScriptPath($sScriptPath);
$oD3ShGenerator->setSortedParameterList($aParameters);
$oD3ShGenerator->startDownload('d3usermanager_'.$oShop->getId()."_".$sCronId.".sh");
}
}

View File

@ -0,0 +1,490 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller\Admin;
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
use D3\ModCfg\Application\Model\d3filesystem;
use D3\ModCfg\Application\Model\d3str;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\ModCfg\Application\Model\Exception\wrongModIdException;
use D3\ModCfg\Application\Model\Log\d3log;
use D3\Usermanager\Application\Model\Constants;
use D3\Usermanager\Application\Model\d3usermanager_configurationcheck;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanager_execute as ManagerExecuteModel;
use D3\Usermanager\Application\Model\d3usermanager_touserassignment as ToItemAssignmentModel;
use D3\Usermanager\Application\Model\d3usermanagerlist as ManagerListModel;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use D3\Usermanager\Application\Model\Exceptions\d3ActionRequirementInterface;
use D3\Usermanager\Application\Model\Exceptions\d3usermanager_templaterendererExceptionInterface;
use Doctrine\DBAL\Exception as DoctrineException;
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
use OxidEsales\Eshop\Application\Model\User as ItemModel;
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\Field;
use OxidEsales\Eshop\Core\Language;
use OxidEsales\Eshop\Core\Model\BaseModel;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
use OxidEsales\Eshop\Core\Session;
use OxidEsales\Eshop\Core\UtilsView;
use OxidEsales\Twig\Resolver\TemplateChain\TemplateType\NonTemplateFilenameException;
use ReflectionException;
class d3_usermanager_jobs extends AdminDetailsController
{
use VariablesTrait;
private string $_sModId = 'd3usermanager';
/** @var ManagerListModel */
protected $_aJobList;
protected $_sHelpLinkMLAdd;
public $_sThisTemplate = '@' . Constants::OXID_MODULE_ID . '/admin/d3_usermanager_jobs';
/**
* constructor.
*/
public function __construct()
{
// prevent the use of the global currency setting instead of the order setting
unset($_GET['cur']);
d3GetOxidDIC()->getParameter($this->_DIC_Instance_Id . 'modcfgid') === $this->_sModId or
throw oxNew(wrongModIdException::class, $this->_sModId);
parent::__construct();
}
public function getItemObject(): ItemModel
{
/** @var ItemModel $item */
$item = d3GetOxidDIC()->get('d3ox.usermanager.'.ItemModel::class);
return $item;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DoctrineException
* @throws ReflectionException
* @throws StandardException
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function render(): string
{
$tpl = parent::render();
$soxId = $this->getEditObjectId();
$this->addTplParam("oxid", $soxId);
if ($soxId != "-1") {
$oItem = $this->getItemObject();
$oItem->load($soxId);
$this->addTplParam("edit", $oItem);
}
/** @var Session $session */
$session = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Session::class);
$sJobFolder = $session->getVariable('d3FolderSelect');
$this->addTplParam("jobfolder", $sJobFolder);
$this->_aJobList = $this->_d3GetManuallyManagerJobs($sJobFolder);
return $tpl;
}
public function d3GetSession(): Session
{
/** @var Session $session */
$session = d3GetOxidDIC()->get('d3ox.usermanager.'.Session::class);
return $session;
}
public function changeFolder(): void
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$this->d3GetSession()->setVariable(
'd3FolderSelect',
$request->getRequestEscapedParameter('jobfolder')
);
}
public function getManagerList(): ManagerListModel
{
/** @var ManagerListModel $managerList */
$managerList = d3GetOxidDIC()->get(ManagerListModel::class);
return $managerList;
}
public function d3GetManagerJobs(): ManagerListModel
{
$oManagerList = $this->getManagerList();
$oManagerList->getList();
return $oManagerList;
}
/**
* @param $sFolderId
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DoctrineException
* @throws ReflectionException
* @throws StandardException
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
protected function _d3GetManuallyManagerJobs($sFolderId): ManagerListModel
{
try {
$oManagerList = $this->getManagerList();
$oList = $oManagerList->d3GetManuallyManagerJobsByFolder($sFolderId);
/** @var Manager $oManager */
foreach ($oList as $sId => $oManager) {
$oManagerExecute = $this->getManagerExecute($oManager);
if (!$oManager->getValue('sManuallyExecMeetCondition')) {
continue;
}
if (false != $oManagerExecute->userMeetsConditions($this->getEditObjectId())) {
continue;
}
$oList->offsetUnset($sId);
}
return $oList;
} catch (d3ActionRequirementInterface $d3ActionRequirement) {
/** @var UtilsView $utilsView */
$utilsView = d3GetOxidDIC()->get('d3ox.usermanager.'.UtilsView::class);
$utilsView->addErrorToDisplay($d3ActionRequirement);
}
/** @var ManagerListModel $managerList */
$managerList = d3GetOxidDIC()->get(ManagerListModel::class);
return $managerList;
}
public function d3GetJobList(): array
{
return $this->_aJobList->getArray();
}
public function getManager(): Manager
{
/** @var Manager $manager */
$manager = d3GetOxidDIC()->get(Manager::class);
return $manager;
}
public function getManagerExecute(Manager $oManager): ManagerExecuteModel
{
d3GetOxidDIC()->set(
ManagerExecuteModel::class.'.args.usermanager',
$oManager
);
/** @var ManagerExecuteModel $managerExecute */
$managerExecute = d3GetOxidDIC()->get(ManagerExecuteModel::class);
return $managerExecute;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DoctrineException
* @throws ReflectionException
* @throws StandardException
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function d3execusermanager(): void
{
try {
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id . Request::class);
$oManager = $this->getManager();
$oManager->load($request->getRequestEscapedParameter('usermanagerid'));
$oManagerExec = $this->getManagerExecute($oManager);
$this->checkForConfigurationException($oManager);
if (false == $oManager->getValue('sManuallyExecMeetCondition') ||
$oManagerExec->userMeetsConditions($this->getEditObjectId())
) {
$oManagerExec->exec4user($this->getEditObjectId());
$oManagerExec->finishJobExecution();
}
} catch (d3ActionRequirementInterface | d3usermanager_templaterendererExceptionInterface $oEx) {
// @codeCoverageIgnoreStart
if (!defined('OXID_PHP_UNIT')) {
$logger = Registry::getLogger();
$logger->error($oEx);
}
// @codeCoverageIgnoreEnd
d3GetOxidDIC()->get('d3.usermanager.log')->alert(
self::class,
__FUNCTION__,
__LINE__,
"execution error",
$oEx->getMessage()
);
/** @var UtilsView $utilsView */
$utilsView = d3GetOxidDIC()->get('d3ox.usermanager.'.UtilsView::class);
$utilsView->addErrorToDisplay($oEx);
} finally {
$oConfig = d3GetOxidDIC()->get('d3ox.usermanager.'.Config::class);
$oConfig->setAdminMode(true);
}
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DoctrineException
* @throws ReflectionException
* @throws StandardException
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function d3ExecChangedUserManager(): void
{
try {
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$oManager = $this->getManager();
$oManager->load($request->getRequestEscapedParameter('usermanagerid'));
$oManager->setEditedValues($request->getRequestEscapedParameter('aContent'));
$oManagerExec = $this->getManagerExecute($oManager);
$this->checkForConfigurationException($oManager);
if (false == $oManager->getValue('sManuallyExecMeetCondition') ||
$oManagerExec->userMeetsConditions($this->getEditObjectId())
) {
$oManagerExec->exec4user($this->getEditObjectId());
$oManagerExec->finishJobExecution();
}
} catch (d3ActionRequirementInterface | d3usermanager_templaterendererExceptionInterface $e) {
// @codeCoverageIgnoreStart
if (!defined('OXID_PHP_UNIT')) {
$logger = Registry::getLogger();
$logger->error($e);
}
// @codeCoverageIgnoreEnd
d3GetOxidDIC()->get('d3.usermanager.log')->alert(
self::class,
__FUNCTION__,
__LINE__,
"execution error",
$e->getMessage()
);
/** @var UtilsView $utilsView */
$utilsView = d3GetOxidDIC()->get('d3ox.usermanager.'.UtilsView::class);
$utilsView->addErrorToDisplay($e);
} finally {
$oConfig = d3GetOxidDIC()->get('d3ox.usermanager.'.Config::class);
$oConfig->setAdminMode(true);
}
}
public function getUserManagerAssignment(Manager $oManager): ToItemAssignmentModel
{
d3GetOxidDIC()->set(
ToItemAssignmentModel::class.'.args.usermanager',
$oManager
);
/** @var ToItemAssignmentModel $managerAssignment */
$managerAssignment = d3GetOxidDIC()->get(ToItemAssignmentModel::class);
return $managerAssignment;
}
/**
* @throws DoctrineException
* @throws d3ParameterNotFoundException
*/
public function d3resetUserManagerAssignment(): void
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$oManager = $this->getManager();
$oAssignment = $this->getUserManagerAssignment($oManager);
$oAssignment->resetAssignment(
$request->getRequestEscapedParameter('usermanagerid'),
$this->getEditObjectId()
);
}
/**
* @return mixed
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getFolderList()
{
$oManager = $this->getManager();
return $oManager->d3getSelectableFolderList();
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function execChangedContents(): void
{
try {
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$sItemId = $this->getEditObjectId();
$oManager = $this->getManager();
$oManager->load($request->getRequestEscapedParameter('usermanagerid'));
// check configuration exceptions
$this->checkForConfigurationException($oManager);
$contents = $oManager->getEditableContent($sItemId);
$this->addTplParam('aMailContent', $contents);
$field = oxNew(Field::class);
$field->setValue($contents['html']);
$object = oxNew(BaseModel::class);
$object->__set(
'aContent[mail][html]',
$field
);
$this->addTplParam("htmleditor", $this->generateTextEditor("95%", 180, $object, "aContent[mail][html]", "list.tpl.css"));
$this->addTplParam('sAction', __FUNCTION__);
$this->addTplParam('oManager', $oManager);
} catch (d3ActionRequirementInterface | d3usermanager_templaterendererExceptionInterface | NonTemplateFilenameException $oEx) {
// @codeCoverageIgnoreStart
if (! defined('OXID_PHP_UNIT')) {
$logger = Registry::getLogger();
$logger->error($oEx->getMessage());
}
// @codeCoverageIgnoreEnd
$this->getManager()->d3getLog()->log(d3log::ALERT, self::class, __FUNCTION__, __LINE__, "stop execution because configuration error", $oEx->getMessage());
/** @var UtilsView $utilsView */
$utilsView = d3GetOxidDIC()->get('d3ox.usermanager.' . UtilsView::class);
$utilsView->addErrorToDisplay($oEx);
} finally {
$oConfig = d3GetOxidDIC()->get('d3ox.usermanager.'.Config::class);
$oConfig->setAdminMode(true);
}
}
public function getUserMessages(): array
{
return [];
}
public function getLang(): Language
{
/** @var Language $language */
$language = d3GetOxidDIC()->get('d3ox.usermanager.'.Language::class);
return $language;
}
public function getHelpURL(): string
{
$sUrl = $this->d3GetSet()->getHelpURL();
/** @var d3str $oD3Str */
$oD3Str = d3GetOxidDIC()->get(d3str::class);
if ($this->_sHelpLinkMLAdd) {
$sUrl .= $oD3Str->unprefixedslashit($this->getLang()->translateString($this->_sHelpLinkMLAdd));
}
/** @var d3filesystem $oFS */
$oFS = d3GetOxidDIC()->get(d3filesystem::class);
$aFileName = $oFS->splitFilename($sUrl);
// has no extension
if (false == $aFileName['ext']) {
return $oD3Str->trailingslashit($sUrl);
}
return $sUrl;
}
/**
* return type can't defined, because of unmockable d3_cfg_mod class, use stdClass in test
* @return d3_cfg_mod
*/
public function d3GetSet()
{
/** @var d3_cfg_mod $modCfg */
$modCfg = d3GetOxidDIC()->get('d3.usermanager.modcfg');
return $modCfg;
}
public function getLink(): string
{
return '';
}
/**
* @throws d3ActionRequirementInterface
*/
protected function checkForConfigurationException(Manager $oManager): void
{
d3GetOxidDIC()->set(d3usermanager_configurationcheck::class.'.args.usermanager', $oManager);
/** @var d3usermanager_configurationcheck $confCheck */
$confCheck = d3GetOxidDIC()->get(d3usermanager_configurationcheck::class);
$confCheck->checkThrowingExceptions($oManager->getValue('sManuallyExecMeetCondition') ?
d3usermanager_configurationcheck::REQUIREMENTS_AND_ACTIONS :
d3usermanager_configurationcheck::ACTIONS_ONLY);
}
}

View File

@ -0,0 +1,360 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* 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
*/
declare(strict_types=1);
namespace D3\Usermanager\Application\Controller;
use Assert\Assert;
use Assert\InvalidArgumentException;
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\ModCfg\Application\Model\Exception\wrongModIdException;
use D3\ModCfg\Application\Model\Log\d3LogInterface;
use D3\Usermanager\Application\Model\d3usermanager as Manager;
use D3\Usermanager\Application\Model\d3usermanager_execute as ManagerExecuteModel;
use D3\Usermanager\Application\Model\d3usermanager_vars as VariablesTrait;
use D3\Usermanager\Application\Model\d3usermanagerlist as ManagerList;
use D3\Usermanager\Application\Model\Exceptions\d3ActionRequirementAbstract;
use D3\Usermanager\Application\Model\Exceptions\d3usermanager_actionException;
use D3\Usermanager\Application\Model\Exceptions\d3usermanager_cronUnavailableException as cronUnavailableException;
use D3\Usermanager\Application\Model\Exceptions\d3usermanager_requirementException;
use DateTime;
use Doctrine\DBAL\Exception as DoctrineException;
use OxidEsales\Eshop\Core\Base;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\DatabaseException;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Language;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
use RuntimeException;
class d3usermanager_response extends Base
{
use VariablesTrait;
private string $_sModId = 'd3usermanager';
/**
* constructor.
*/
public function __construct()
{
$this->isCLI() or throw new RuntimeException('controller must called via command line interface');
d3GetOxidDIC()->getParameter($this->_DIC_Instance_Id . 'modcfgid') === $this->_sModId or
throw oxNew(wrongModIdException::class, $this->_sModId);
parent::__construct();
}
public function isCLI(): bool
{
return str_starts_with(PHP_SAPI, 'cli');
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DatabaseException
* @throws DoctrineException
* @throws StandardException
* @throws cronUnavailableException
* @throws d3ActionRequirementAbstract
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws d3usermanager_actionException
* @throws d3usermanager_requirementException
*/
public function initCli(): void
{
startProfile(__METHOD__);
$this->_startExecution();
stopProfile(__METHOD__);
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DatabaseException
* @throws DoctrineException
* @throws StandardException
* @throws cronUnavailableException
* @throws d3ActionRequirementAbstract
* @throws d3ParameterNotFoundException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws d3usermanager_actionException
* @throws d3usermanager_requirementException
*/
protected function _startExecution()
{
startProfile(__METHOD__);
$iStartTime = microtime(true);
/** @var d3LogInterface $oLog */
$oLog = d3GetOxidDIC()->get($this->_DIC_Instance_Id.'log');
$oLog->info(self::class, __FUNCTION__, __LINE__, "start cron", "");
$this->_checkUnavailableCronjob();
$this->_getSet()->setValue($this->_getCronTimestampVarName(), (new DateTime())->format('Y-m-d H:i:s'));
$this->_getSet()->saveNoLicenseRefresh();
$this->_startJobs();
$iExecTime = microtime(true) - $iStartTime;
$oLog->info(
self::class,
__FUNCTION__,
__LINE__,
"end cron",
'execution time: '.$iExecTime." sec"
);
stopProfile(__METHOD__);
}
public function getManagerList(): ManagerList
{
/** @var ManagerList $managerList */
$managerList = d3GetOxidDIC()->get(ManagerList::class);
return $managerList;
}
public function getManagerExecute(Manager $oManager): ManagerExecuteModel
{
d3GetOxidDIC()->set(
ManagerExecuteModel::class.'.args.usermanager',
$oManager
);
/** @var ManagerExecuteModel $manager_execute */
$manager_execute = d3GetOxidDIC()->get(ManagerExecuteModel::class);
return $manager_execute;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws DatabaseException
* @throws StandardException
* @throws d3ParameterNotFoundException
* @throws d3ActionRequirementAbstract
* @throws d3usermanager_actionException
* @throws d3usermanager_requirementException
* @throws DoctrineException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
protected function _startJobs()
{
startProfile(__METHOD__);
$oManagerList = $this->getManagerList();
$oManagerList->setCronJobId($this->_getCronJobIdParameter());
$oManagerList->setCustomSorting('oxsort ASC');
$oManagerList->getList();
$oHandleManager = $this->getManager();
$oHandleManagerExec = $this->getManagerExecute($oHandleManager);
// disable admin mode for using active check
$blOldAdminMode = self::$_blIsAdmin;
self::$_blIsAdmin = false;
/** @var d3LogInterface $oLog */
$oLog = d3GetOxidDIC()->get($this->_DIC_Instance_Id.'log');
$oLog->info(
self::class,
__FUNCTION__,
__LINE__,
'manager count',
$oManagerList->count()
);
/** @var $oManager Manager */
foreach ($oManagerList->getList() as $oManager) {
$oHandleManager = $this->getManager();
$oHandleManager->setLanguage(Registry::getLang()->getTplLanguage());
$oHandleManager->load($oManager->getId());
$oHandleManagerExec->setManager($oHandleManager);
self::$_blIsAdmin = $blOldAdminMode;
$oHandleManagerExec->startJobExecution();
self::$_blIsAdmin = false;
}
self::$_blIsAdmin = $blOldAdminMode;
$oHandleManagerExec->finishJobExecution();
stopProfile(__METHOD__);
}
public function getManager(): Manager
{
/** @var Manager $manager */
$manager = d3GetOxidDIC()->get(Manager::class);
return $manager;
}
protected function _checkAccessKey(): bool
{
$sSetCronPassword = $this->_getSet()->getValue('sCronPassword');
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$sGetAccessKey = $request->getRequestEscapedParameter("key");
$sRegisteredAccessKey = $sSetCronPassword ?: $this->getManager()->getBaseCronPW();
return $this->hasValidAccessKey($sRegisteredAccessKey, $sGetAccessKey);
}
/**
* return type can't defined, because of unmockable d3_cfg_mod class, use stdClass in test
* @return d3_cfg_mod
*/
protected function _getSet()
{
/** @var d3_cfg_mod $modcfg */
$modcfg = d3GetOxidDIC()->get($this->_DIC_Instance_Id.'modcfg');
return $modcfg;
}
public function isBrowserCall(): bool
{
return (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']) ||
(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT']);
}
/**
* @param $sRegisteredAccessKey
* @param $sGetAccessKey
*/
protected function hasValidAccessKey($sRegisteredAccessKey, $sGetAccessKey): bool
{
if (false == $this->isBrowserCall()) {
return true;
}
return $sRegisteredAccessKey == $sGetAccessKey;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws cronUnavailableException
*/
protected function _checkUnavailableCronjob()
{
$this->_getSet()->isActive() or throw $this->getCronUnavailableException(
$this->getLang()->translateString('D3_USERMANAGER_EXC_CRON_MODULEDISABLED')
);
$this->_checkAccessKey() or throw $this->getCronUnavailableException(
$this->getLang()->translateString('D3_USERMANAGER_EXC_CRON_WRONGPASSWORD')
);
$this->_getSet()->getValue('blCronActive') or throw $this->getCronUnavailableException(
$this->getLang()->translateString('D3_USERMANAGER_EXC_CRON_UNAVAILABLE')
);
}
/**
* @param $sMessage
*/
public function getCronUnavailableException($sMessage): cronUnavailableException
{
return oxNew(cronUnavailableException::class, $sMessage);
}
/**
* @return string|int
*/
protected function _getCronJobIdParameter()
{
/** @var Request $request */
$request = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Request::class);
$iCjId = $request->getRequestEscapedParameter('cjid');
try {
Assert::that( $iCjId )->notBlank();
} catch (InvalidArgumentException) {
return 0;
}
return $iCjId;
}
protected function _getCronTimestampVarName(): string
{
return "sCronExecTimestamp".$this->_getCronJobIdParameter();
}
public function getLastExecDate(): string
{
return (string) $this->_getSet()->getValue($this->_getCronTimestampVarName());
}
/**
* @throws DatabaseConnectionException
* @throws DoctrineException
*/
public function getLastExecDateInfo(): array
{
$sCronJobId = $this->_getCronJobIdParameter();
$taskCount = current(
array_filter(
$this->getManager()->getAvailableCronjobIds(),
fn ($entry): bool => $entry['id'] == $sCronJobId
)
)['count'];
return [
sprintf(
$this->getLang()->translateString('D3_GENERAL_USERMANAGER_TASKCOUNT_CRONID'),
$sCronJobId,
$taskCount
),
sprintf(
$this->getLang()->translateString('D3_GENERAL_USERMANAGER_LASTEXEC_CRONID'),
$sCronJobId,
$this->getLastExecDate()
),
];
}
public function getLang(): Language
{
/** @var Language $lang */
$lang = d3GetOxidDIC()->get($this->_DIC_OxInstance_Id.Language::class);
return $lang;
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
<?php ?><?php /** This Software is the property of D³ Data Development and is protected by copyright law - it is NOT Freeware. Any unauthorized use of this software without a valid license key is a violation of the license agreement and will be prosecuted by civil and criminal law. Inhaber: Thomas Dartsch Alle Rechte vorbehalten @package Kundenmanager @version 6.0.1.0 SourceGuardian (03.09.2024) @author Daniel Seifert support@shopmodule.com @copyright (C) 2024, D3 Data Development @see https://www.d3data.de */ ?><?php
if(!function_exists('sg_load')){$__v=phpversion();$__x=explode('.',$__v);$__v2=$__x[0].'.'.(int)$__x[1];$__u=strtolower(substr(php_uname(),0,3));$__ts=(@constant('PHP_ZTS') || @constant('ZEND_THREAD_SAFE')?'ts':'');$__f=$__f0='ixed.'.$__v2.$__ts.'.'.$__u;$__ff=$__ff0='ixed.'.$__v2.'.'.(int)$__x[2].$__ts.'.'.$__u;$__ed=@ini_get('extension_dir');$__e=$__e0=@realpath($__ed);$__dl=function_exists('dl') && function_exists('file_exists') && @ini_get('enable_dl') && !@ini_get('safe_mode');if($__dl && $__e && version_compare($__v,'5.2.5','<') && function_exists('getcwd') && function_exists('dirname')){$__d=$__d0=getcwd();if(@$__d[1]==':') {$__d=str_replace('\\','/',substr($__d,2));$__e=str_replace('\\','/',substr($__e,2));}$__e.=($__h=str_repeat('/..',substr_count($__e,'/')));$__f='/ixed/'.$__f0;$__ff='/ixed/'.$__ff0;while(!file_exists($__e.$__d.$__ff) && !file_exists($__e.$__d.$__f) && strlen($__d)>1){$__d=dirname($__d);}if(file_exists($__e.$__d.$__ff)) dl($__h.$__d.$__ff); else if(file_exists($__e.$__d.$__f)) dl($__h.$__d.$__f);}if(!function_exists('sg_load') && $__dl && $__e0){if(file_exists($__e0.'/'.$__ff0)) dl($__ff0); else if(file_exists($__e0.'/'.$__f0)) dl($__f0);}if(!function_exists('sg_load')){$__ixedurl='https://www.sourceguardian.com/loaders/download.php?php_v='.urlencode($__v).'&php_ts='.($__ts?'1':'0').'&php_is='.@constant('PHP_INT_SIZE').'&os_s='.urlencode(php_uname('s')).'&os_r='.urlencode(php_uname('r')).'&os_m='.urlencode(php_uname('m'));$__sapi=php_sapi_name();if(!$__e0) $__e0=$__ed;if(function_exists('php_ini_loaded_file')) $__ini=php_ini_loaded_file(); else $__ini='php.ini';if((substr($__sapi,0,3)=='cgi')||($__sapi=='cli')||($__sapi=='embed')){$__msg="\nPHP script '".__FILE__."' is protected by SourceGuardian and requires a SourceGuardian loader '".$__f0."' to be installed.\n\n1) Download the required loader '".$__f0."' from the SourceGuardian site: ".$__ixedurl."\n2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="\n3) Edit ".$__ini." and add 'extension=".$__f0."' directive";}}$__msg.="\n\n";}else{$__msg="<html><body>PHP script '".__FILE__."' is protected by <a href=\"https://www.sourceguardian.com/\">SourceGuardian</a> and requires a SourceGuardian loader '".$__f0."' to be installed.<br><br>1) <a href=\"".$__ixedurl."\" target=\"_blank\">Click here</a> to download the required '".$__f0."' loader from the SourceGuardian site<br>2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="<br>3) Edit ".$__ini." and add 'extension=".$__f0."' directive<br>4) Restart the web server";}}$__msg.="</body></html>";}die($__msg);exit();}}return sg_load('7A3737B36579762CAAQAAAAhAAAABKgAAACABAAAAAAAAAD/lnd1q3MloFGlxOjouWOhvr/HATU1gH4KlevWhjzEcJsMwWOztlUEhMrpOIGH+cZ5tUo8k14cK149cWz8yysD8+nDTWODJmZ+BokP1s4RKwLeo8/WXEk2LPvWsxd1sAFSsKgH636elTZjEUga411VCq2XWTFSj8wrufH6hBKNARMAcq6kPWwlj0gyJ/ACc93LECQ/W7ONiROBLwJkOqn5wqHO6olX2N+yCAAAAJABAABWj3kRLqh2NYmEv9poWcgKnCjaTbZ+1zP0lMAGXxaK2ozPsBoWKSDDDco4N3ULKUEn18yA4xqwovfnzNBQBqcOUMn1Cd0WLibUaitjyQuY1gboUaHoM0csn3jhaiFWbJu0EWGF+QdjtR76trUGeP2JztnbYLg+1BpXz2L0EQ0E/OeDSz073xyalmcv24CafgjL+LLIOyULel2Jl9a7pEXATBbTRbq92+r6QcVTVLe5M0IKntNKbvkkKDmeEK0Cp84ghcl80hS6Tngw5wDD+tVHk1kG97It3fKdIBKB9llcB66/QLI6YXorExG/DoZpVLuj11NeARo/W7a5gX7Hj4rZSFCWKHmwflfMV2AoWiwotpaKlIudBmLYdHqJAfF17cO8IsvbJSZyCT8nhJsyDiVaD3CjqrIX7G+zYWHfluMBTcIoHKjTF1fm77xFux3u/KRyavM05fEHSfSNnl3qJgPgWHRD6cqJQZT7EzqiRKtaWXwkEc7A+h2j0Dz/Opi0pP7038zR/IXMq9ZMwjpU+ZFGUQAAAIABAADwoOhh4HDHEdybtsHi8N2+g1BtRMFU2stNj5hr5cH4DdyqvaBCeRSvdUSRYAvngZe4gExsNK+AT69Ceakc8bKUuvx4+OjvpbU6ggRkyYaQ9FHbTwv3tWirR5+IwI+qM0FqbeOah6TlXNpxggR8pWgn/rgAS3s/AscJ2sqRpKhLU3dX3wwGbNdC3oD+sJxOkaeGWIQWMzDpdqlm4oAvBiQiWDKRaMBQ5Ewdsqt5CBPu0Xq9VeZRwwAxsFmFvRekrNePMImgqgQcI9u0wZq/btdB18OyMm4clI47oJbLe5syZTkYhKr0mwyNi7sc5wKRyRscf9srJPPoLASQJMb82wGhk7Zg5MkbVZmAyVkc5vVFjbVVZyldKAMqyD6bDB3iUSLlzRlO5IQdjo8Z04bRYy0hEMg5bj+hPxyPHZJCiZj36N9HohWfFiovF16U9O8SWWnzkPtXJegLb0naKdl/s3mbVONVCF+/5kORrjeGkEzf8IYTfTN3v6WKTU/SXO75DUNSAAAAgAEAALYm9xqXaDny7QhfaPRI78f+1sY19bKP2UQ52urtcB3HsCOGUO5qrH6JIS8Kr0rq71jHtOWetzGhCszMa/H4NEsBZXpKUTvkl1xjZhfBWSDf3IiLofHZXWVl88KMZFbnObHWNhCApX7cPWCm4VjmyzRwFyKtxg5xmdvw+ImYlC4R/Ze7Y1oCKOiWBN5OqMt5brfoUdcNF+YIwsBvndJIxK+7m7XXnRdmnLLJmA1nmkPrBl8e+wKzwlVP5H+LI4YVOD0q+HPehOze/ZLOutO6CKk/Dc96XWuG05IASvjyy0VZX3wxdxmR5iC0yJfoHFRbUAyVXKMIBjz1GT7PntgRGK1k0V2RolzspTfDBekmxad2fqgDiI4inYGLAiF23iB3OwaC6A+VUf2PXtDkAEf7jBHkfv+6QPtU9Y3P+Veba/YDnBafpfatHb6yoMNGqiWz+vYtzDCKt3DmJ5wvzx8aTLOV9fNGs320ucHt+l2TMSjENK2Dx8eALfq3PokXPeF4PAAAAAA=');

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
<?php ?><?php /** This Software is the property of D³ Data Development and is protected by copyright law - it is NOT Freeware. Any unauthorized use of this software without a valid license key is a violation of the license agreement and will be prosecuted by civil and criminal law. Inhaber: Thomas Dartsch Alle Rechte vorbehalten @package Kundenmanager @version 6.0.1.0 SourceGuardian (03.09.2024) @author Daniel Seifert support@shopmodule.com @copyright (C) 2024, D3 Data Development @see https://www.d3data.de */ ?><?php
if(!function_exists('sg_load')){$__v=phpversion();$__x=explode('.',$__v);$__v2=$__x[0].'.'.(int)$__x[1];$__u=strtolower(substr(php_uname(),0,3));$__ts=(@constant('PHP_ZTS') || @constant('ZEND_THREAD_SAFE')?'ts':'');$__f=$__f0='ixed.'.$__v2.$__ts.'.'.$__u;$__ff=$__ff0='ixed.'.$__v2.'.'.(int)$__x[2].$__ts.'.'.$__u;$__ed=@ini_get('extension_dir');$__e=$__e0=@realpath($__ed);$__dl=function_exists('dl') && function_exists('file_exists') && @ini_get('enable_dl') && !@ini_get('safe_mode');if($__dl && $__e && version_compare($__v,'5.2.5','<') && function_exists('getcwd') && function_exists('dirname')){$__d=$__d0=getcwd();if(@$__d[1]==':') {$__d=str_replace('\\','/',substr($__d,2));$__e=str_replace('\\','/',substr($__e,2));}$__e.=($__h=str_repeat('/..',substr_count($__e,'/')));$__f='/ixed/'.$__f0;$__ff='/ixed/'.$__ff0;while(!file_exists($__e.$__d.$__ff) && !file_exists($__e.$__d.$__f) && strlen($__d)>1){$__d=dirname($__d);}if(file_exists($__e.$__d.$__ff)) dl($__h.$__d.$__ff); else if(file_exists($__e.$__d.$__f)) dl($__h.$__d.$__f);}if(!function_exists('sg_load') && $__dl && $__e0){if(file_exists($__e0.'/'.$__ff0)) dl($__ff0); else if(file_exists($__e0.'/'.$__f0)) dl($__f0);}if(!function_exists('sg_load')){$__ixedurl='https://www.sourceguardian.com/loaders/download.php?php_v='.urlencode($__v).'&php_ts='.($__ts?'1':'0').'&php_is='.@constant('PHP_INT_SIZE').'&os_s='.urlencode(php_uname('s')).'&os_r='.urlencode(php_uname('r')).'&os_m='.urlencode(php_uname('m'));$__sapi=php_sapi_name();if(!$__e0) $__e0=$__ed;if(function_exists('php_ini_loaded_file')) $__ini=php_ini_loaded_file(); else $__ini='php.ini';if((substr($__sapi,0,3)=='cgi')||($__sapi=='cli')||($__sapi=='embed')){$__msg="\nPHP script '".__FILE__."' is protected by SourceGuardian and requires a SourceGuardian loader '".$__f0."' to be installed.\n\n1) Download the required loader '".$__f0."' from the SourceGuardian site: ".$__ixedurl."\n2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="\n3) Edit ".$__ini." and add 'extension=".$__f0."' directive";}}$__msg.="\n\n";}else{$__msg="<html><body>PHP script '".__FILE__."' is protected by <a href=\"https://www.sourceguardian.com/\">SourceGuardian</a> and requires a SourceGuardian loader '".$__f0."' to be installed.<br><br>1) <a href=\"".$__ixedurl."\" target=\"_blank\">Click here</a> to download the required '".$__f0."' loader from the SourceGuardian site<br>2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="<br>3) Edit ".$__ini." and add 'extension=".$__f0."' directive<br>4) Restart the web server";}}$__msg.="</body></html>";}die($__msg);exit();}}return sg_load('7A3737B36579762CAAQAAAAhAAAABKgAAACABAAAAAAAAAD/1ryfsbE1ODND2EK8yfAjQHtgv0JBlDgaACyUam3z6MlQdtaSTS0vKAO2D8KGmLri0qirQbzM5oGb75PhEYBvJ35e4XcJ2FNrUD2+3MjYTNqUzfZyTIVbtkaLCQdH/+S/uNSrEtpWq1YMWHRnJjhuZCuUONdPCuxNDWy+iup1nwTc9fTj2IUtdG58skMdRGpJBXhDiBX8y1pcK717NpQwUga2WSrvCZJCCAAAANgBAAAg1occpIoIkFwNhul4fl3PSYMefTLXiY6moXo8yxUpOoM3bUZ+0/kyZsYCQhVXjdegZIvpGY6IIAx/mZHO2K3JjymX/Z/ZvSwGvqjdmOpBdV7twYQ2r9HUiyGsNd1K55x578E36rYbikw/64JAhTu6eBtQUcWqFnDJkc8Quz87lhweaAG1bl1E5iwpKryt7Zlu0HLxTck56KR7QudS6qLOmpuYOaK5lwlC7K4QUnZgCGnfIQikGcuHtS73dh53Js9IW+csomI2Y1aIZRL/M8m8YAMWHCT9BFU0eb1e8qDFu90/mTCWSEHTyZ69B8SA08pW/T5Yud8IfhTPChs6eZ9PiipLKK9cMjSI0RVW/zVV9TB2vScgsHhPdpWbnYHqXpHCmXWTONNlFscmwbjyez2zolDWXk2ilSu1vCifQsXYeqA33K8gPg6iA8lDmz7zg1dEDISefdeDvc4ASrHsL4uFQfjOTKwPamDUe/jG5aaNmUPpZTsiZ4aqR39Npa8vuMjQq+Mq163b433ZbCifDoTyEurpxLOyFjFRK+9Ux4vRVYUBCXgSFtoskFNVSaysmKttYTOnCYyN9Bn6QT/8+A5XwqK7C0xUnDXWwwjQ8oq7oK4DsNL44lVnUQAAANABAACFpUbw/GXNDTzz39e944Bj/W3Eb1hMXCd2b9Ed2von/38Eqax5OvL+cck3a0eg7NKom3v/pMURQEGdwnql27tzkQnCmZQO7AeCzgZJEUnUKkv/iKD0NGy/Hs+uZc7ghwA6hQ6ckDmE4tYUyOorq7qzm3FJTfOyV8RB5Drezs7y+ZunGtSslRbNIt047rthg76LwHH65hdtEklgKAMv05Oh5b344RwrvPzzTmKEq/A7wBykc90F5Vu9mjOyMTGEcY8N6ESw8RLMs3gRxpbwphwFkgAKhw0JlYLHn9PSaJg0Nbo+M2x1hUfCJ373R8ZiRe85hqVInk+A0WhVf7e5SmkGSlVCUSRDa1vDxEalrsxcavps2R/+Dynlh3ZxvR3/u53ZfNsBeRhYE/N+YlpJn3IY9O+lXgittlw5sQYqDjKgsa0HcZp3z5HDf9q2FYXGJm0ScmGASL94mRHzWRYCyDCJ49DEz7uxKFHu8oebK6xHlxHvTg+L4W1LnWvPlBwEa4SnZoSpAFIC1ZJriiVb8KQDmm+K54cVsG3n97rveXH5LZGAI4WOk5E0MExmuDFlACsZ03Wnvo4IjhxsNEQrPJtvhZzNxxrhFDF+GtfC48V7zlIAAADQAQAAHWZIAdmqV007iMdmT6Alz5IXMN5LnPRfk2FFMqZ9cWOCtI/4wqk5W9qorV6F2SFNeyMUknOhZCGo0Qw1h4s1nOeEP3tNHZT6rZ9joD3WuFi3D3uRfiypzqRAJudP38Cg0XcBiGhzZLThx7bTlMX0LfEoIl/FIDEccMi70qRC2Qf+NmtFP5/Vpm35IzHOyNY2L7aOK/HWAf60qkI1sSuOfdbl5T0yLfcWlcipA4/5wOWQmWcs6qA5B6bMKMmfTmw2ozzjcRNfXiOtuKqWlOIeon6r858/e6jiznZwoqIvi3+zoJ5o1DhLMQdWRmks6vm4EqTH3i6rVqOIDqEXkm/1FfIunhbYGvBZETuCGcSgty6zNlj0zbxWhp7Ub5QRk8sEeYRB4f1Rerbv8l3qMkL0IDWbS3aCGbSDKOAehauVTW12jOwVVUotRb4bPUFmFqFnSRS4Ll+d74rVqoXbMOCc00+PAbKwdBfaF4CW3/2yjO0JyZzaOfshi0Eo+5JOVR1oSnTpSAy3D4NSCcL75BryiPJO8tak8ywUfXSwHjdBfiTX//P1Owqtjq8/+d8eVLKGwzAlG9T+bBxKNzeUzgdZgY9RsScRYefsT1SOcrTgBdoAAAAA');

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
<?php ?><?php /** This Software is the property of D³ Data Development and is protected by copyright law - it is NOT Freeware. Any unauthorized use of this software without a valid license key is a violation of the license agreement and will be prosecuted by civil and criminal law. Inhaber: Thomas Dartsch Alle Rechte vorbehalten @package Kundenmanager @version 6.0.1.0 SourceGuardian (03.09.2024) @author Daniel Seifert support@shopmodule.com @copyright (C) 2024, D3 Data Development @see https://www.d3data.de */ ?><?php
if(!function_exists('sg_load')){$__v=phpversion();$__x=explode('.',$__v);$__v2=$__x[0].'.'.(int)$__x[1];$__u=strtolower(substr(php_uname(),0,3));$__ts=(@constant('PHP_ZTS') || @constant('ZEND_THREAD_SAFE')?'ts':'');$__f=$__f0='ixed.'.$__v2.$__ts.'.'.$__u;$__ff=$__ff0='ixed.'.$__v2.'.'.(int)$__x[2].$__ts.'.'.$__u;$__ed=@ini_get('extension_dir');$__e=$__e0=@realpath($__ed);$__dl=function_exists('dl') && function_exists('file_exists') && @ini_get('enable_dl') && !@ini_get('safe_mode');if($__dl && $__e && version_compare($__v,'5.2.5','<') && function_exists('getcwd') && function_exists('dirname')){$__d=$__d0=getcwd();if(@$__d[1]==':') {$__d=str_replace('\\','/',substr($__d,2));$__e=str_replace('\\','/',substr($__e,2));}$__e.=($__h=str_repeat('/..',substr_count($__e,'/')));$__f='/ixed/'.$__f0;$__ff='/ixed/'.$__ff0;while(!file_exists($__e.$__d.$__ff) && !file_exists($__e.$__d.$__f) && strlen($__d)>1){$__d=dirname($__d);}if(file_exists($__e.$__d.$__ff)) dl($__h.$__d.$__ff); else if(file_exists($__e.$__d.$__f)) dl($__h.$__d.$__f);}if(!function_exists('sg_load') && $__dl && $__e0){if(file_exists($__e0.'/'.$__ff0)) dl($__ff0); else if(file_exists($__e0.'/'.$__f0)) dl($__f0);}if(!function_exists('sg_load')){$__ixedurl='https://www.sourceguardian.com/loaders/download.php?php_v='.urlencode($__v).'&php_ts='.($__ts?'1':'0').'&php_is='.@constant('PHP_INT_SIZE').'&os_s='.urlencode(php_uname('s')).'&os_r='.urlencode(php_uname('r')).'&os_m='.urlencode(php_uname('m'));$__sapi=php_sapi_name();if(!$__e0) $__e0=$__ed;if(function_exists('php_ini_loaded_file')) $__ini=php_ini_loaded_file(); else $__ini='php.ini';if((substr($__sapi,0,3)=='cgi')||($__sapi=='cli')||($__sapi=='embed')){$__msg="\nPHP script '".__FILE__."' is protected by SourceGuardian and requires a SourceGuardian loader '".$__f0."' to be installed.\n\n1) Download the required loader '".$__f0."' from the SourceGuardian site: ".$__ixedurl."\n2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="\n3) Edit ".$__ini." and add 'extension=".$__f0."' directive";}}$__msg.="\n\n";}else{$__msg="<html><body>PHP script '".__FILE__."' is protected by <a href=\"https://www.sourceguardian.com/\">SourceGuardian</a> and requires a SourceGuardian loader '".$__f0."' to be installed.<br><br>1) <a href=\"".$__ixedurl."\" target=\"_blank\">Click here</a> to download the required '".$__f0."' loader from the SourceGuardian site<br>2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="<br>3) Edit ".$__ini." and add 'extension=".$__f0."' directive<br>4) Restart the web server";}}$__msg.="</body></html>";}die($__msg);exit();}}return sg_load('7A3737B36579762CAAQAAAAhAAAABKgAAACABAAAAAAAAAD/1ryfsbE1ODND2EK8yfAjQHtgv0JBlDgaACyUam3z6MlQdtaSTS0vKAO2D8KGmLri0qirQbzM5oGb75PhEYBvJ35e4XcJ2FNrUD2+3MjYTNqUzfZyTIVbtkaLCQdH/+S/uNSrEtpWq1YMWHRnJjhuZCuUONdPCuxNDWy+iup1nwTc9fTj2IUtdG58skMdRGpJBXhDiBX8y1pcK717NpQwUga2WSrvCZJCCAAAAJgBAACv0Yax5qQ+GPjY+R1YORk+7XGHktLEYIyUdELRl+844bMjf0Vq9IyMJIRrHKGMFdf9cazQwLQyiHpmJ60Su0weeo5g28zRZGI3CilC+hcHAD9Qn0SknNrGsTrNDdIWCtxlwXcV2iO7GmdvoMQY87HxaKIiFylu7spp6uBKrqVzZWeLx8EFBlcabioGhJLbzldmiwn/Isa4iXA9jhHEOyJLZR8+O2uBOhEzQcRrDKJb5e+PSXs2dY7/vGeYghJytmiJ76j8NwXfm5yD4B1evsA9G0jH1hMe8ZdoYR0S5gR6EwAG4T7hMBlyu2nGXxjiSt6JCnU1Ry+bEjnqwc2GdpnAcxsd8wH9tDBbMlABRY2zn6Eg4JC8JUGJ6Ykjk0ZLw0T4BtrVFxm+lsH7hTI3upJuiips5dw5ucOLWueGtPUQXKSOTD3UG25KSxw+ylAhB2tgy3MpBCuCaOHumDVZelMioTbTJvxv2Meb67Zgzp0599dtKKXUbPelA3r9IeacL55CqmkEBwR3SzZQcK55DWU3/lYJK4cyFOlRAAAAiAEAAIliXee2wqe3kJgx7bZfITuaCJ2lsnjZ8aUA55t9g4TnC2aVEmBc5+maAEjm1aKIOEGQ3p4S8TP9L4X+tAtp7u3Nu8NWCpzogLxD6PXeZ5oJqrbBa+n0xecRfMKF3WbebwtaHEDi6KxEMr35yKc1O8LrE9/JXOYiHxfZBPO5osxtWsyrdKAZ1VJYAPwbv2x/TyfKIorAfF9AHxmg3J/xYRc3EHMkRoa4zrYbL+GIR8DgbkIRxYUSUjB1+KCNzK5/5B+SuexnuZhEhELoN6gEA5myr+DSXVIdvtMwZbQPCUx0lISqkEzwLYM8v3wDsq61qCkhC4e4zCIVsW9bbbusdfdQiMNfpvlYKgf2ioitDF3hIl9T6TDV1g7k+tFitRLE1YnBs+uxVhqyYhcxM2+WuWl8ro7IMUq+MROb+RjEOTcVbR48tqbWO7oHikdHRsB65kJnqYfTb72Dwhh1amPCwnG2/wIDGQJ2iXKAjnBfASvF4Vx5Aqjrkmr8Xyno8fFecb5LcdoHnimaUgAAAIgBAACNEJqP1d0Y4AKr5P3/aBBOzjDTDDYfGAmH8v95HdhYnxdxgvV7pePyJHR42LE69U6lM/rqSTdC0fIEHqGrLCc/foScRrrcGUg8ePtf+bv8kWRG6AqjXPsh8MEDeY+CwrDOOMCsE9bkzd1zgvPj9Am92l5341A1cRrooifj/M/d+TypuDard7aALiXNg058lmhJcr71Uj4z+32w2xfMfkVEiVnNVoHlH7axWC++2RGxAYfzb9xdN+lpwA6IpN6u737Ssfp1GQy1WP28luiPTBR68lbr8pXHifjw1q4G93XY4z0/Z4c//CfxOxZsTpJlFK+soidqoYBzipA+IuU7r0nGcdrvfcZKZvMD2maLILUjWKrPbtmeq5X/jV2kWItBmDZK9TtP9Zl4WXWurPwuEBr3vtBpbNI4+Wy1y/FKaapKSPLJlgJuVfipZe86TKJ8CtNCiJNL6bPk+Cuu6pQE+E+IhuFlc/9OrsYZ/NH6BeBNUx4GybgyiSoYyPsTUIoF3H3hhh2Sj5m4YgAAAAA=');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
<?php ?><?php /** This Software is the property of D³ Data Development and is protected by copyright law - it is NOT Freeware. Any unauthorized use of this software without a valid license key is a violation of the license agreement and will be prosecuted by civil and criminal law. Inhaber: Thomas Dartsch Alle Rechte vorbehalten @package Kundenmanager @version 6.0.1.0 SourceGuardian (03.09.2024) @author Daniel Seifert support@shopmodule.com @copyright (C) 2024, D3 Data Development @see https://www.d3data.de */ ?><?php
if(!function_exists('sg_load')){$__v=phpversion();$__x=explode('.',$__v);$__v2=$__x[0].'.'.(int)$__x[1];$__u=strtolower(substr(php_uname(),0,3));$__ts=(@constant('PHP_ZTS') || @constant('ZEND_THREAD_SAFE')?'ts':'');$__f=$__f0='ixed.'.$__v2.$__ts.'.'.$__u;$__ff=$__ff0='ixed.'.$__v2.'.'.(int)$__x[2].$__ts.'.'.$__u;$__ed=@ini_get('extension_dir');$__e=$__e0=@realpath($__ed);$__dl=function_exists('dl') && function_exists('file_exists') && @ini_get('enable_dl') && !@ini_get('safe_mode');if($__dl && $__e && version_compare($__v,'5.2.5','<') && function_exists('getcwd') && function_exists('dirname')){$__d=$__d0=getcwd();if(@$__d[1]==':') {$__d=str_replace('\\','/',substr($__d,2));$__e=str_replace('\\','/',substr($__e,2));}$__e.=($__h=str_repeat('/..',substr_count($__e,'/')));$__f='/ixed/'.$__f0;$__ff='/ixed/'.$__ff0;while(!file_exists($__e.$__d.$__ff) && !file_exists($__e.$__d.$__f) && strlen($__d)>1){$__d=dirname($__d);}if(file_exists($__e.$__d.$__ff)) dl($__h.$__d.$__ff); else if(file_exists($__e.$__d.$__f)) dl($__h.$__d.$__f);}if(!function_exists('sg_load') && $__dl && $__e0){if(file_exists($__e0.'/'.$__ff0)) dl($__ff0); else if(file_exists($__e0.'/'.$__f0)) dl($__f0);}if(!function_exists('sg_load')){$__ixedurl='https://www.sourceguardian.com/loaders/download.php?php_v='.urlencode($__v).'&php_ts='.($__ts?'1':'0').'&php_is='.@constant('PHP_INT_SIZE').'&os_s='.urlencode(php_uname('s')).'&os_r='.urlencode(php_uname('r')).'&os_m='.urlencode(php_uname('m'));$__sapi=php_sapi_name();if(!$__e0) $__e0=$__ed;if(function_exists('php_ini_loaded_file')) $__ini=php_ini_loaded_file(); else $__ini='php.ini';if((substr($__sapi,0,3)=='cgi')||($__sapi=='cli')||($__sapi=='embed')){$__msg="\nPHP script '".__FILE__."' is protected by SourceGuardian and requires a SourceGuardian loader '".$__f0."' to be installed.\n\n1) Download the required loader '".$__f0."' from the SourceGuardian site: ".$__ixedurl."\n2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="\n3) Edit ".$__ini." and add 'extension=".$__f0."' directive";}}$__msg.="\n\n";}else{$__msg="<html><body>PHP script '".__FILE__."' is protected by <a href=\"https://www.sourceguardian.com/\">SourceGuardian</a> and requires a SourceGuardian loader '".$__f0."' to be installed.<br><br>1) <a href=\"".$__ixedurl."\" target=\"_blank\">Click here</a> to download the required '".$__f0."' loader from the SourceGuardian site<br>2) Install the loader to ";if(isset($__d0)){$__msg.=$__d0.DIRECTORY_SEPARATOR.'ixed';}else{$__msg.=$__e0;if(!$__dl){$__msg.="<br>3) Edit ".$__ini." and add 'extension=".$__f0."' directive<br>4) Restart the web server";}}$__msg.="</body></html>";}die($__msg);exit();}}return sg_load('7A3737B36579762CAAQAAAAhAAAABKgAAACABAAAAAAAAAD/xkOrMdpgx+e9VTjF1eyE1mG66vSs+PNVjPtKlgihbxPmYf/1ka7KPzjhETWB6GjoYReB6mTpxRyKSgGlri6DWGvgKszLcovey2VnPyYBKUOzpC8aEy0oBjqHuyRN0oGTNdFkiTWbb3okEFtdaSOcywBFQWjw/LWw1N8biihUOOfkdZgVoZKAUK3y5G2uCvMJU18P/4a50c2OOWatfmyqfnO8jpdOiMqCCAAAAJgBAADWAhGZ1DgvO7Bp4ikV3hXSsBTMVQnnSp29aIGs5D7AL2SaNN3QZYx4r3Hk7jE5H1s46SgpR7+q9fU2CRrE2Ok9fExx7pLoAWn4g9qQH6S0/v5RONkIDkWmPVogfQ+DpLb/wDWAfJ9I+4YUEqn6aXGgdLWQitirQnpO4/0o8sN1pdFZuzTq+5cv5fZYqjFxNZXVCtEUiCJ0fVqPPLyFeVtLLEsYivIk92NvhVJE1+8eRQdaitQ53kJjINLwnKUt7g8vkyCIkuWflejsheeZuVXsFEA9D9O1iTXjp5K7IWPn3S8nmUH979oJREw7LgVy2zeP5E7YWiAA0he5CQYi+5wBaj52H3SwJDakMSp+yjnjhGWp43/+a+oLhNNHciI3y44xJUWYj5+FesoLbJOumkzXLEhgofXzn97rVCMrWeOnwOxDtIKY87cFZEGqRyiy3ev8r+6z8f/yRRCzUxVwcCe1RpGzd8m8SNRQxZWylWg8sFNOf4YNFqE5FKyFpHWZDSRzXcNEQusE//cay8zoqFlOpdVyaXzO5qVRAAAAkAEAAAwtZiLXG1jr0owdsbMvmM1Kc+qgYTCdvKV7yGLA2EbLoupnfYoHZGc8GSxQnC71Spjo19RNgo1g6ru9+cSVToTdfyBI0LHFsSL0VmwIQNnJJp1EMyXvNTlk8ZWzEPpXmyrSGBdENCvT8xYIfU4hd3EyuscH+ZLXP4D3Qah+mGWP679OSDLM9bXyyEnAHZaehlpjfYKzKhbi7b8pXyG89Wh0d/jyGGwWuHM0L37bHPj7GcJc+PGEiACo/ijxRri+KIyIIwpib+Raa7ppko+9ckY3xXf6u2DTCNvfJ2DmvHgfi8A7uQwZvVwfUsEQwXbaCeAipxP4yEHiExmdbpat5CVzScDKvq7SUACPSX6V6Duyk0Aw0WTuoUWLuPOFr5vWmRvilm+S5ve+Cr8FHqs4MrpppDseKvmfnxDjtXbzlnx9uIeoBfQn5yOGUpnLXwAgL9lB8B7EScdXofeklhd3LsfO2LTcKwVIxgnK+Id3VNePJq0AzUPPzDP/TXduEBmS90A04Wabp7qJlxu3X3bjTXxSAAAAkAEAAMfNNk3h9ytQGCtt/75hgboOPZYg1V6IKvnIP4ooiZoMtn2x0JxFC7udue0zXxtVhjKePe6isitDhJ2vpWXEMW9fv1UAhFTMc7VA9AuA8dnu1zYveaesrIAehTlebYnDhh6YrOrmSQo+Wn7uYFDD1B7MdpYKVEKbZ8Od7yDLjIV79ic5+NAqtoXf3G3xs+J4WumBeo7YdydGEV8nBLp48/saZxbc7w6/axdutbJrrEEMh5f1VchImh9XOY6Xa8lQnzv4w9/LIbQpZBNrkYH321DvLg7wBlrolO9DRIuQD9Tx6OqkMg6vYkUpJ4PvAnnT0opqE+XqXHsmJ138EdJbpAT9xNtLHt4foFKz8pE1ZiIuzz4Axcp87D3ARXjNf+mp26B8khGTS9hhB7BZBxIpE2WrnjjjMgei7CIATGOQE3owygYN76q//iSyWGUjfAQSdWX0sr/7myQZ9OklFltqytQ0ZNFpzd+IxDhOLKNfjJyT0UjADRXVpSa0MIEwAlw/kT+O0pl0k/EZrA84o2b8AOMAAAAA');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More