ExtSearch/Application/Controller/Admin/Popups/d3_attribute_extsearch_ajax_abstract.php

176 lines
6.5 KiB
PHP

<?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\Extsearch\Application\Controller\Admin\Popups;
use D3\Extsearch\Application\Model\Constants;
use D3\Extsearch\Application\Model\d3extsearch_attribute2object;
use Exception;
use OxidEsales\Eshop\Application\Controller\Admin\ListComponentAjax;
use OxidEsales\Eshop\Application\Model\Attribute;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Model\MultiLanguageModel;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Database\ConnectionProviderInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
abstract class d3_attribute_extsearch_ajax_abstract extends ListComponentAjax
{
abstract public function getObjectModel();
abstract public function getLeftColumnTitle();
abstract public function getRightColumnTitle();
abstract public function getObjectIdField();
abstract public function getContainerKey();
/**
* @return string
*/
public function getTplName()
{
return '@'. Constants::OXID_MODULE_ID .'/admin/popups/d3_attribute_extsearch_ajax';
}
/**
* @return string
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
protected function getQuery()
{
$connection = ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get();
$oRequest = Registry::get(Request::class);
$sId = $oRequest->getRequestEscapedParameter('oxid');
$sSynchId = $oRequest->getRequestEscapedParameter('synchoxid');
/** @var MultiLanguageModel $oObject */
$oObject = oxNew($this->getObjectModel());
$sObjectTable = $oObject->getViewName();
$oA2O = oxNew(d3extsearch_attribute2object::class);
$sA2OTable = $oA2O->getViewName();
if (!$sId) {
$sQAdd = " from {$sObjectTable}";
} else {
$sQAdd = " from {$sA2OTable}, {$sObjectTable} " .
"where {$sObjectTable}.oxid={$sA2OTable}.oxobjectid " .
" and {$sA2OTable}.oxattributeid = " . $connection->quote($sId) .
" and {$sA2OTable}.oxtype = '{$oObject->getCoreTableName()}' ";
}
if ($sSynchId && $sSynchId != $sId) {
// performance
$sSubSelect = " select {$sObjectTable}.oxid from {$sA2OTable}, {$sObjectTable} " .
"where {$sObjectTable}.oxid={$sA2OTable}.oxobjectid " .
" and {$sA2OTable}.oxattributeid = " . $connection->quote($sSynchId) .
" and {$sA2OTable}.oxtype = '{$oObject->getCoreTableName()}' ";
if (stristr($sQAdd, 'where') === false) {
$sQAdd .= ' where ';
} else {
$sQAdd .= ' and ';
}
$sQAdd .= " {$sObjectTable}.oxid not in ( $sSubSelect ) ";
}
//dumpvar($sQAdd);
//die();
return $sQAdd;
}
/**
* Removes selected items from list
*
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function removeAttributeObject()
{
$connection = ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get();
$oRequest = Registry::get(Request::class);
$aChosenObjects = $this->getActionIds('d3extsearch_attribute2object.oxid');
$oA2O = oxNew(d3extsearch_attribute2object::class);
$sA2OTable = $oA2O->getViewName();
/** @var Attribute $oAttribute */
$oAttribute = oxNew(Attribute::class);
$oAttribute->setId($oRequest->getRequestEscapedParameter('oxid'));
if (method_exists($oAttribute, 'executeDependencyEvent')) {
$oAttribute->executeDependencyEvent();
}
if ($oRequest->getRequestParameter('all')) {
$sQ = $this->addFilter("delete {$sA2OTable}.* " . $this->getQuery());
$connection->prepare($sQ)->executeStatement();
} elseif (is_array($aChosenObjects)) {
$sChosenObjects = implode(", ", array_map([$connection, 'quote'], $aChosenObjects));
$sQ = "delete from {$sA2OTable} where {$sA2OTable}.oxid in (" . $sChosenObjects . ") ";
$connection->prepare($sQ)->executeStatement();
}
}
/**
* @throws DatabaseConnectionException
* @throws Exception
*/
public function addAttributeObject()
{
$oRequest = Registry::get(Request::class);
$aChosenObjects = $this->getActionIds($this->getObjectIdField());
$soxId = $oRequest->getRequestEscapedParameter('synchoxid');
/** @var Attribute $oAttribute */
$oAttribute = oxNew(Attribute::class);
$oAttribute->setId($soxId);
if (method_exists($oAttribute, 'executeDependencyEvent')) {
$oAttribute->executeDependencyEvent();
}
/** @var MultiLanguageModel $oObject */
$oObject = oxNew($this->getObjectModel());
if ($oRequest->getRequestEscapedParameter('all')) {
$sObjectTable = $oObject->getViewName();
$aChosenObjects = $this->getAll($this->addFilter("select $sObjectTable.oxid " . $this->getQuery()));
}
if ($soxId && $soxId != "-1" && is_array($aChosenObjects)) {
foreach ($aChosenObjects as $sChosenObject) {
$oAssignment = oxNew(d3extsearch_attribute2object::class);
$oAssignment->assign(
[
'oxattributeid' => $soxId,
'oxobjectid' => $sChosenObject,
'oxtype' => $oObject->getCoreTableName(),
]
);
$oAssignment->save();
}
}
if (method_exists($oObject, 'executeDependencyEvent')) {
$oObject->executeDependencyEvent($aChosenObjects);
}
}
}