Compare commits

..

14 Commits

6 changed files with 627 additions and 927 deletions

View File

@ -1,19 +1,19 @@
# D³ Content Tabs für OXID eShop
Erweiterung der Produktdetailsseite mit weiteren "Tabs".
Dies ermöglicht es, viele Produktionformationen sauber und übersichtlich aufzulisten.
[![](https://img.shields.io/badge/Dokumentation-online-brightgreen.svg)](https://docs.oxidmodule.com/Content_Tabs/)
## Systemanforderungen:
- installierter OXID eShop
- PHP-Version, für die Installationspakete verfügbar sind
- Installation via Composer
- ionCubeLoader
- D3 Modul Connector
Die jeweils geforderten Versionen und sonstige Anforderungen entnehmen
Sie bitte der Dokumentation im docs-Verzeichnis dieses Paketes.
## Installation:
Eine detaillierte Installationsanleitung finden Sie im docs-Verzeichnis dieses Pakets.
# D³ Content Tabs für OXID eShop
Erweiterung der Produktdetailsseite mit weiteren "Tabs".
Dies ermöglicht es, viele Produktionformationen sauber und übersichtlich aufzulisten.
[![](https://img.shields.io/badge/Dokumentation-online-brightgreen.svg)](https://docs.oxidmodule.com/Content_Tabs/)
## Systemanforderungen:
- installierter OXID eShop
- PHP-Version, für die Installationspakete verfügbar sind
- Installation via Composer
- ionCubeLoader
- D3 Modul Connector
Die jeweils geforderten Versionen und sonstige Anforderungen entnehmen
Sie bitte der Dokumentation im docs-Verzeichnis dieses Paketes.
## Installation:
Eine detaillierte Installationsanleitung finden Sie im docs-Verzeichnis dieses Pakets.

View File

@ -32,7 +32,7 @@
}
},
"require": {
"php": "5.6 - 7.0", "ext-ionCube-Loader": "*",
"php": "7.1 - 7.4", "ext-ionCube-Loader": "*",
"oxid-esales/oxideshop-ce": "6.0 - 6.5",
"d3/modcfg": "^5.3.0.000"
},

File diff suppressed because it is too large Load Diff

View File

@ -1,39 +1,19 @@
<?php //006eb
// 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 ContentTabs @version 4.1.1.0 PHP56 (16.10.2020) @author Daniel Seifert support@shopmodule.com @copyright (C) 2020, D3 Data Development @see http://www.shopmodule.com
// 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 ContentTabs @version 4.1.1.0 PHP71 (16.10.2020) @author Daniel Seifert support@shopmodule.com @copyright (C) 2020, D3 Data Development @see http://www.shopmodule.com
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
HR+cPnN3OWzpBLSX2d7tB1eF7eaMSHkVMVrUpE5aS7XLFJIQQjrDBdYygZ/bI9MyamrcDIUbegZc
iBWB7+iMn+7twt3EtfFRvPAw/S1vfFQoEr8ErZ9FlfRNBZ0dapzF7gquKfq8Xjn6zvDDyVuNmzBW
QTLlHh/qivQNkktPM9RsAOLJs5u/XvCKqHIVeYrs4BesJz72NvsO8vYDxWUG1Px8LajTG4o9Lnr7
xb+TYb4ir4s4YyhkqgPgMSY6gCdh0fSephZGjJqkHS2mrTA0nZ9TrPZzu/uNRLyOyRsrOrbSOd2P
9HxUPmnAWgR/8d0tSTCadQA7073oCLL3HyYpxOpjzKgpnJIjN8Iqsipuz/aWSrRIY6QGf1k3p7tO
zh27C62BJqtF8dCdxPke5cETXWzBesDfJowgNH2UHTUmOSNhgU5XQil9gnA9SGt35wR1e7UEfere
w+29ucg9+1q1PNkAh55TNJvwY2zrVoR2lrSD5WsZ+IBV4G+64SUASXTIILXyAL23YEQZZHZcpZOW
E5ALNfoIf53Ct18iKTxq8UxsnR4HByX7oEd61haGKUzxoPzaX8EXCtPbdvk19RYaoPpC3vePTnCM
i/emONpRrP6GMeaE9f3Po+haIxwIc5Ern1i/RVsiKaY5U1OXia3rFNDnTXC1ieBLTYu1iEXoM48h
wIvOoxkyRAvwuSe26vJRNvpr94TKED68kAslpFHL/7drTrv/epRgGFk/KixXYuqxj6TD/J9olY02
OfhV7HSHML+l6suL2+PsYSD3BtiT10sPVv+6aZ7gucguQt1yJdELvz1EKp+Pog3wJI9/wVGgpHTz
e6TdOsL+WYCM3AiHhx457l0PCNLkqmU/TajEhc/LBrhZpsi9tBYIZuXmyfo1sovCZCXmRCm94ZVM
KhglL3JxQOr4Z5NyA2dYAJ5K19tPAOSwghalfUMTyu6ENHthSaR3BfXbnZiGuueqUdeKTxhRD3I+
X2zXAllYUX5PzHt/OXTdxYS5+gaXEsq8wuw3PUed3Nezj1mGWKIBSoiNWPLWbX4wQ7asj2giY4JR
wLiG8vbuO/ERXK7ClJrbBq6FimZd+1WckC6rDZD9CTcgXhRvcgfkmxlSTIps4Ja1zdSX1ZSIWkru
AScVyLDJaYcvPslgAqeIVsurQvNfWF70Ev/h3v3+kSZB3I2ZxZY7/pkgWCyZhAuVKRTWZLP/7572
RvvcrLJBgE2ZTg/UYsVBz+7RdpYbPgQRC61Vz3ZPH6CgZDzBy477TzOTDylG7BzS0aopDw5XjTx8
JOgcahorOPtthxq0qnQN7mHzMHu28zFKAZrUYqVWqUztc7tJ4lzZHYC1IXfFQsWM2cf1rvNR7Anu
zTYisEUCAoTOmuLzEnN/8SJ0m8Qh7LQX+CoEI1e/tZWOLAg/o32cB1StoSkgEx14YCHCsRWdmS5D
mZWUHHkrC+F1goE7GImID/WSIBe2xPt4agdwTY1T0DYgc3dX9hgBqJHFgyuV4SN+7Sirz9sxHuI8
sh+XEVAwUY8XoZAxI5cHTfn+xvcz0aV5HmcUYoMuoOn5nsxnz09MISme6MqOIayXMS1WdZLPfn8w
S7esnKcJN2mrkvU50DvhOs0Z0LUFNKeMQkhzPRsG6rEQL8MD3u7gwwOLSkEr/rtDAydvs67jbqr3
RKc0OnOFiDo59g+PffC15Yb0//zztFEO8zsCzwr72CE1gWb75NaBl4Maz/lmOT6TPKcxGBuDXqNX
0jwf5karIQSxVVxHFonezETeTa5D0bwbJu7Aw6i8q79Yyd8QRO4679vJYb9TRcVrMkDoKbLXn93C
ZN8n32l81mPMsHpRyMHCth5ESXmpufkzblUlio3J8FXDd3AcS1odJmGcV5Cpwe8BfmNlar+tK+Ef
bFETE9a03Y0HPfaGSVWba6EbOmB9Gn2KzuF5BoINPsJEcYRN51RUADpPpET0QPd0fq9HTvhPYkMb
d+644rJ6GNTA1GoYj6y0Xq9odnZ53O670XRC/YlOD+m3l/zvT2Zds9wPmuIgqLB7n4wBdI2G8asG
NjJRKfQGXimcM8t9/kiOVjhzHYnKvXxzFpl/xRgpNDuAmHJtGCrCGcT+AnEUFM8QdjBfOM2Ltk+v
77egrcJuIPtBmmwCZ8ZroUpVuqU++iW1/eCkUHvxO3tuQRLJEGToB7alTVwKtuKoniF6nvzNLuoG
WbY2Ihc1m9Vq3BCLWpSV/AII7Id7Mgq6X/7oL0GVojTeftmcN+kkeDrhWSZlwaCeypjFeT7TyDU7
hJRfRTfmQwELyPoyTCjP0knnlf9PQXgepMDrlJ+h3z+RBdrZc/5eYLhkAJ7MK1axaueE41pqPGcV
v2LNUk/xvr+B7rFeSePB180/FN7EnVUs26P8tulTUGLj+dQ8I1v/MdZX50+tFsNnXgME2NKlHRT9
0mUUGSKVijLIgKSsEieK8+d/Zi8alGXnqBokYWLwIB010cPORwnrNPotiNWZrYiR6SgT9TDFxGsQ
H0zhgw7emtmoPZw+C2Q8TYH1yKcSDutmQ3hHkOoI1E0IEdCejCg1+izWJTW7XRfn+7OPJz4DU95f
YHp8frjBNbqOyWVwGIZH0crF9RIZGzfkwDMydrHDjm==
HR+cP+fW8cPyo9P9UTQtHT/46HTkOReJd4JW7Em770958Wn4sBgmvH1AlRGvybwGEWJITPr8v5Xu
WzaAf4dZamgYx/Pb6TMh/ufPULmgsyyQbbtjK6lMK8n+DGX2XRgvw68ufCjOTGSdNpIaXbBpzxtG
/Z0oewxINiLATUZxk9PA1/08s+GRXZf3TyXSXl4I2W5J6A3EapyRAOSUBXZjqH/gYOpkpdIjQi3+
AxjlJAOWz2593sjAAp7IcPLJHvxo0aYwWdzUCF85+Uj/9/mU6LNHDkHUvEkdPsEoXMfkxfbEIF9Q
o8UhJ9Wg/zwE3+RpEp+nvlHu69M/vC7Y8dBy3zbo/n6G0YsFNsl1Q4KgTe5+6PblvwckNMNup4VJ
EnH0KG1KtFoH9mY3Vwd65s631GF67mE/3+V4EXqrycu7K791aihZZmeK2z6QzCEZu4uLDNTIdhDv
NEcLjbO9RJ6Q0XHlW/t9qVen3VVCUQqz5ZXJHgXByY40Apt6JPqtwKd/s8pQ4Im9/JHFoBArmkyJ
/ZBLsxxnp9vwV5HrwEgBxq6i86/pkH/zb+goGZhBd/j1wf5VPJcGcjxVzawhKl8pbF1Yo7nT4WDQ
f0j3loyYg1LpkH+KzEXMKSUpbvMJWWidAwADG4BF2MIxbYG0BVTU/RTnDs+yYHqmvFwBxKmFiXZU
3/ykZLH8lR3WVz06tkWSaBwE5OR6Z8G8K7k0FTNtwmhlBkeFcCLVcmRb3C0lQyIXMlKX9E7v58sV
kr3TtW0B1n0eEpHuviJdJpSDEx48FKL0B5zhS03m60C2EWBx3ZD9GOJSAFwssObKrGHFhjjgKLdQ
t3Z+psu2ZWGMSQlnqge5mDjhQ48AIxxbwJ7KWLgGred8ZE0Zct67J5ImhclG+5ExPa2PP10aucOe
8YRCP8MS2APZUahcgVmYz7EigADNNiTul4+Y7OPGL+H6qjMNNhJ0f8vWXvQpTftBqFxGABf2LynR
x0HTAUll4zEUFmG1ammdk9p9thltu9zdZyRXcnAsldd+J/aIR1LN3khx3jlvbDF5i2iAIWftZ2z5
6HJIL/UUXh2j0T7k23ZVgkOm8gEvEadbRnQyiISmCW==

View File

@ -1,52 +0,0 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
namespace D3\Contenttabs\Modules\Application\Component\Widget;
/**
* Class d3_oxwarticledetails_contenttabs
*/
use D3\Contenttabs\Application\Model\contentTabs as TabsModel;
use D3\Contenttabs\Modules\Application\Model\d3_oxarticle_longtexts;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use Doctrine\DBAL\DBALException;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
class d3_oxwarticledetails_contenttabs extends d3_oxwarticledetails_contenttabs_parent
{
/**
* @return array|null
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
*/
public function d3GetTabs()
{
/** @var d3_oxarticle_longtexts $oArticle */
$oArticle = $this->getProduct();
/** @var TabsModel $oTabs */
$oTabs = oxNew(TabsModel::class, $oArticle);
return $oTabs->getTabs();
}
}

View File

@ -1,260 +0,0 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
namespace D3\Contenttabs\Modules\Application\Model;
use D3\Contenttabs\Application\Model\contentTabs as TabsModel;
use D3\Contenttabs\Application\Model\contentTabs;
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\d3ShopCompatibilityAdapterException;
use Doctrine\DBAL\DBALException;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Field;
/**
* extends Article manager with content tab functionality
*/
class d3_oxarticle_longtexts extends d3_oxarticle_longtexts_parent
{
protected $_aD3ContentTabsSkipSaveFields = array();
private $_sModId = 'd3contenttabs';
/**
* @param string $sOXID
*
* @return bool
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
*/
public function load($sOXID)
{
$blReturn = parent::load($sOXID);
if (d3_cfg_mod::get($this->_sModId)->isActive()) {
/** @var contentTabs $oContentTabs */
$oContentTabs = oxNew( contentTabs::class, $this );
$oContentTabs->addTabFields();
}
return $blReturn;
}
/**
* @return bool
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function save()
{
$blRet = parent::save();
if (d3_cfg_mod::get($this->_sModId)->isActive()) {
/** @var contentTabs $oContentTabs */
$oContentTabs = oxNew( contentTabs::class, $this );
$oContentTabs->saveTabFields();
}
return $blRet;
}
/**
* Deletes record and other information related to this article such as images from DB,
* also removes variants. Returns true if entry was deleted.
*
* @param string $sOXID Article id
*
* @throws \Exception
*
* @return bool
*/
public function delete($sOXID = null)
{
if (!$sOXID) {
$sOXID = $this->getId();
}
if (d3_cfg_mod::get($this->_sModId)->isActive() && $sOXID) {
oxNew( TabsModel::class, $this )->deleteAllLongtexts( $sOXID );
}
return parent::delete($sOXID);
}
/**
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
protected function _skipSaveFields()
{
parent::_skipSaveFields();
if (d3_cfg_mod::get($this->_sModId)->isActive()) {
$this->_aSkipSaveFields = array_merge( $this->_aSkipSaveFields, $this->_aD3ContentTabsSkipSaveFields );
}
}
/**
* @return array
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function getFieldNames()
{
if (d3_cfg_mod::get($this->_sModId)->isActive()) {
/** @var contentTabs $oContentTabs */
$oContentTabs = oxNew( contentTabs::class, $this );
foreach ( $oContentTabs->getNewArticleFields(false == $this->_blEmployMultilanguage) as $sFieldName ) {
$this->_addField( $sFieldName, (int) $oContentTabs->isMultilingualField( $oContentTabs->getTableFieldNameFromArticleField( $sFieldName ) ) );
if ( ! in_array( $sFieldName, $this->_aD3ContentTabsSkipSaveFields ) ) {
$this->_aD3ContentTabsSkipSaveFields[] = $sFieldName;
}
}
}
return parent::getFieldNames();
}
public function getSelectFields($forceCoreTableUsage = null)
{
$sFieldList = parent::getSelectFields();
$viewName = $this->getViewName($forceCoreTableUsage);
$aFieldList = explode(', ', $sFieldList);
foreach ($this->_aD3ContentTabsSkipSaveFields as $sTabField) {
if ($viewName) {
$searchField = "`$viewName`.`$sTabField`";
} else {
$searchField = ".`$sTabField`";
}
$index = array_search($searchField, $aFieldList);
if (false !== $index) {
unset( $aFieldList[ $index ] );
}
}
return implode(', ', $aFieldList);
}
/**
* @return contentTabs
*/
public function d3GetContentTabs()
{
return oxNew(contentTabs::class, $this);
}
/**
* Get article long description
*
* @return object $oField field object
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function getLongDescription()
{
if (false === d3_cfg_mod::get($this->_sModId)->isActive() || $this->d3CanShowTab(1)) {
return parent::getLongDescription();
}
return oxNew(Field::class);
}
/**
* @param $iTab
*
* @return bool
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function d3CanShowTab($iTab)
{
if (d3_cfg_mod::get($this->_sModId)->isActive()) {
return $this->d3GetContentTabs()->canGetLongDescription( $iTab );
}
return false;
}
/**
* @param $iTab
*
* @return mixed|object|Field|string
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function d3GetLongDescriptionTitle($iTab)
{
return $this->d3GetContentTabs()->getLongDescriptionTitleFromArticleObject($iTab);
}
/**
* @param $iTab
*
* @return mixed|object|Field
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function d3GetLongDescription($iTab)
{
if ($iTab == 1) {
return $this->getLongDescription();
}
return $this->d3GetContentTabs()->getLongDescriptionFromArticleObject($iTab);
}
}