On gists
SelectionResolver
Nette
PHP
Nette-Database
PHP Patterns
SelectionResolver.php
Raw
#
<?php
// usage
$this->paymentList = $this->payment->getPaymentSelectionResolver()
->getBaseSelection()
//->setCountry($this->order->billing__country_id)
->setUserGroups($this->user->isLoggedIn() ? $this->user->getRoles() : NULL)
->setOnlyForProduct($this->payment->getPaymentOnlyForProduct($this->order->getItems($this->order::ITEM_PRODUCT)))
->toArray();
// ...
public function getPaymentSelectionResolver()
{
return $this->paymentSelectionResolver;
}
// ...
class PaymentEshopOrderSelectionResolver
{
/**
* @var Context
*/
protected $connection;
/**
*
* @var Nette\Database\Table\Selection
*/
protected $selection;
public function __construct(Context $connection)
{
$this->connection = $connection;
}
public function getBaseSelection()
{
$this->selection = $this->connection->table('payment_type')
->where('active = 1');
return $this;
}
public function setCountry($countryId)
{
$this->selection->where(':payment_type_country.country_id IN (?) OR all_countries = 1', (array) $countryId);
//$this->selection->where(':transport_type_variant.country_id IS NULL OR :transport_type_variant.country_id IN (?)', (array) $countryId);
return $this;
}
public function setOnlyForProduct($paymentTypeIds = NULL)
{
if ($paymentTypeIds === NULL)
{
$this->selection->where('only_for_product = 0 OR only_for_product IS NULL');
}
else
{
$this->selection->where('payment_type.id IN (?)', (array) $paymentTypeIds);
}
return $this;
}
public function setUserGroups($usegroupsId = NULL)
{
if ($usegroupsId === NULL)
{
$this->selection->where(':payment_type_usergroup.usergroup_id IS NULL');
}
else
{
$this->selection->where(':payment_type_usergroup.usergroup_id IS NULL OR :payment_type_usergroup.usergroup_id IN (?)', $usegroupsId);
}
return $this;
}
public function toArray()
{
$rows = [];
foreach ($this->selection as $row)
{
$rows[$row->id] = $row;
}
return $rows;
}
}