*/
/**
* Komponenty dla modułu stCountriesBackend
*
* @package stCountriesPlugin
* @subpackage actions
*/
class stCountriesBackendActions extends autoStCountriesBackendActions
{
public function executeActivateCountry()
{
$selected = $this->getRequestParameter('countries[selected]');
if ($selected)
{
$this->doActiveUpdate($selected, true);
}
return $this->redirect($this->getRequest()->getReferer());
}
public function executeDeactivateCountry()
{
$selected = $this->getRequestParameter('countries[selected]');
if ($selected)
{
$this->doActiveUpdate($selected, false);
}
return $this->redirect($this->getRequest()->getReferer());
}
public function validateCountriesAreaEdit()
{
$request = $this->getRequest();
if ($request->getMethod() == sfRequest::POST)
{
$data = $request->getParameter('countries_area');
$i18n = $this->getContext()->getI18N();
if (isset($data['countries_ids']))
{
$ids = $data['countries_ids'];
if (!$ids)
{
$request->setError('countries_area{countries_ids}', $i18n->__('Musisz wybrać przynajmniej jeden kraj dla strefy'));
}
elseif (stTax::getIsCustomerEuTaxEnabled(true))
{
$c = new Criteria();
$c->add(CountriesPeer::ID, $ids, Criteria::IN);
CountriesPeer::setHydrateMethod(function(ResultSet $rs) {
$rs->setFetchmode(ResultSet::FETCHMODE_NUM);
$results = array();
while($rs->next())
{
$country = new Countries();
$country->hydrate($rs);
$results[$country->getIsoA2()] = $country;
}
return $results;
});
$countries = CountriesPeer::doSelectWithI18n($c);
if (!stTax::checkRequiredCountriesTaxRateConfiguration(array_keys($countries), $errors))
{
sfLoader::loadHelpers(array('Helper', 'stUrl'));
$messages = array();
foreach ($errors as $countryCode => $taxes)
{
$rateLinks = array();
foreach ($taxes as $tax)
{
$rateLinks[] = st_link_to($tax->getVatName(), '@stTaxPlugin?action=edit&id='.$tax->getId(), array('target' => '_blank'));
}
$messages[] = $i18n->__('Nie można dodać kraju %%country%%. Skonfiguruj stawki VAT %%rates%% dla konsumentów dla tego kraju', array(
'%%country%%' => ''.$countries[$countryCode].'',
'%%rates%%' => implode(', ', $rateLinks),
));
}
$request->setError('countries_area{countries_ids}', implode('
', $messages));
}
}
}
}
return !$request->hasErrors();
}
protected function doActiveUpdate($selected, $active)
{
$c = new Criteria();
$c->add(CountriesPeer::ID, $selected, Criteria::IN);
$c->add(CountriesPeer::IS_ACTIVE, $active);
return CountriesPeer::doUpdate($c);
}
protected function updateCountriesFromRequest()
{
parent::updateCountriesFromRequest();
$countries = $this->getRequestParameter('countries');
$this->countries->setIsDefault(isset($countries['is_default']) ? $countries['is_default'] : null);
}
protected function addSortCriteria($c)
{
if ($sort_column = $this->getUser()->getAttribute('sort', null, 'sf_admin/autoStCountriesBackend/sort'))
{
$sort_column=$this->translateSortColumn($sort_column);
if ($sort_column == CountriesPeer::OPT_NAME)
{
$sort_column .= ' COLLATE utf8_polish_ci';
}
if ($this->getUser()->getAttribute('type', null, 'sf_admin/autoStCountriesBackend/sort') == 'asc')
{
$c->addAscendingOrderByColumn($sort_column);
}
else
{
$c->addDescendingOrderByColumn($sort_column);
}
}
}
}