getFullTariffMap() as $action) {
$actionCode = $action['action_code'];
foreach ($action['tariffs'] as $tariff) {
$tariffCode = $tariff['tariff_code'];
if (isset($options['actions'][$actionCode]['tariffs'][$tariffCode])) {
continue;
}
$options['actions'][$actionCode]['tariffs'][$tariffCode] = ['categories' => []];
}
}
return parent::handle($options);
}
public function renderSection(): void
{
?>
|
|
|
getFullTariffMap() as $action) {
$this->renderAction($action);
}
?>
getSettingName() . '[actions][' . $action['action_code'] . ']';
?>
|
|
display_settings(
[
'type' => 'select',
'label' => 'Multi select',
'id' => $prefix . '[type]',
'name' => $prefix . '[type]',
'vals' => $this->getActionTypes(),
'value' => $action['type'],
]
);
?>
display_settings(
[
'type' => 'select',
'label' => 'User type',
'id' => $prefix . '[user_type]',
'name' => $prefix . '[user_type]',
'value' => $action['user_type'],
'vals' => $this->getUserTypes(),
]
);
?>
|
renderTariff($tariff, $action);
}
}
protected function renderTariff($tariff, $action): void
{
$prefix = $this->getSettingName() . '[actions][' . $action['action_code'] . '][tariffs][' . $tariff['tariff_code'] . ']';
?>
|
|
display_settings(
[
'type' => 'multiselect',
'label' => 'Multi select',
'id' => $prefix . '[categories]',
'name' => $prefix . '[categories]',
'vals' => $this->getCategoryMap(),
'value' => $tariff['categories'],
]
);
?>
|
__('None', 'admitadtracking'),
AdmitadParameterStrategy::USER_TYPE_NEW => __('New user', 'admitadtracking'),
AdmitadParameterStrategy::USER_TYPE_OLD => __('Old user', 'admitadtracking'),
];
}
protected function getActionTypes(): array
{
return [
__('Not active', 'admitadtracking'),
__('Sale', 'admitadtracking'),
];
}
protected function getActionDefaultOptions(): array
{
return [
'tariffs' => [],
'type' => null,
'price_from' => null,
'price_to' => null,
'user_type' => null,
];
}
protected function getTariffDefaultOptions(): array
{
return ['categories' => []];
}
protected function getDefaults(): array
{
return ['actions' => []];
}
protected function getFullTariffMap($optionName = 'actions'): array
{
$data = $this->container->getAdmitadManager()->getAdvertiserInfo();
$optionsMap = $this->container->getSettings()->get($optionName, 'actions') ?: [];
$map = [];
foreach ($data['actions'] as $actionData) {
$actionCode = $actionData['action_code'];
foreach ($actionData['tariffs'] as $tariffData) {
$tariffCode = $tariffData['tariff_code'];
if (isset($optionsMap[$actionCode]['tariffs'][$tariffCode])) {
$map[$actionCode]['tariffs'][$tariffCode] = $optionsMap[$actionCode]['tariffs'][$tariffCode];
}
}
if (!isset($optionsMap[$actionCode])) {
continue;
}
foreach ($optionsMap[$actionCode] as $key => $value) {
if ('tariffs' == $key) {
continue;
}
$map[$actionCode][$key] = $value;
}
}
foreach ($data['actions'] as $action) {
$actionCode = $action['action_code'];
foreach ($this->getActionDefaultOptions() as $key => $value) {
if (!isset($map[$actionCode][$key])) {
$map[$actionCode][$key] = $value;
}
}
foreach ($action['tariffs'] as $tariff) {
$tariffCode = $tariff['tariff_code'];
if (!isset($map[$actionCode]['tariffs'][$tariffCode])) {
$map[$actionCode]['tariffs'][$tariffCode] = $this->getTariffDefaultOptions();
}
$map[$actionCode]['tariffs'][$tariffCode] = array_merge($tariff, $map[$actionCode]['tariffs'][$tariffCode]);
}
$map[$actionCode] = array_merge($action, $map[$actionCode]);
}
return $map;
}
protected function getCategoryMap(): array
{
$map = [];
foreach ($this->getCategories() as $category) {
$map[$category->term_id] = str_repeat(' . ', $category->depth) . $category->name;
}
return $map;
}
protected function getCategories(): array
{
$categories = [];
$roots = [];
foreach (get_terms('product_cat') as $category) {
$categories[$category->term_id] = $category;
$category->children = [];
if (!$category->parent) {
$roots[] = $category;
continue;
}
if (isset($categories[$category->parent]) and $categories[$category->parent]->children) {
$categories[$category->parent]->children[] = $category;
}
}
return $this->getWithChildren($roots);
}
protected function getWithChildren($categories, $level = 0): array
{
$result = [];
foreach ($categories as $category) {
$category->depth = $level;
$result[] = $category;
foreach ($this->getWithChildren($category->children, $level + 1) as $child) {
$result[] = $child;
}
}
return $result;
}
}