Files
grzanieplus.pl/plugins/stAllegroPlugin/lib/helper/stAllegroParameterHelper.php
2025-03-12 17:06:23 +01:00

262 lines
9.6 KiB
PHP

<?php
use_helper('stPrice');
function st_allegro_product_parameter_value($parameter)
{
if (isset($parameter->values))
{
$content = implode(", ", $parameter->values);
}
elseif (isset($parameter->valuesLabels))
{
$content = implode(", ", $parameter->valuesLabels);
}
else
{
$content = 'Brak';
}
if (isset($parameter->unit))
{
$content .= " ".$parameter->unit;
}
return $content;
}
function st_allegro_parameter($name, $parameter, array $values, &$dependencies)
{
// echo "<pre>".var_export($parameter, true)."</pre>";
$type = 'st_allegro_parameter_' . $parameter->type;
$value = isset($values[$parameter->id]) ? $values[$parameter->id] : null;
$required = $parameter->required;
$display = "flex";
if ($parameter->options->dependsOnParameterId)
{
$parameterValueIds = isset($values[$parameter->options->dependsOnParameterId]) ? $values[$parameter->options->dependsOnParameterId]->valuesIds : array();
if ($parameter->options->requiredDependsOnValueIds)
{
$intersect = array_intersect($parameter->options->requiredDependsOnValueIds, $parameterValueIds);
$required = count($intersect) > 0;
}
if ($parameter->options->displayDependsOnValueIds)
{
$intersect = array_intersect($parameter->options->displayDependsOnValueIds, $parameterValueIds);
$display = count($intersect) > 0 ? "flex" : "none";
}
$dependencies[$parameter->options->dependsOnParameterId][$parameter->id] = array(
'required' => $parameter->options->requiredDependsOnValueIds,
'display' => $parameter->options->displayDependsOnValueIds,
);
}
$options = array(
'required' => $required,
'parameter' => $parameter,
'postfix' => $parameter->unit ? '<span style="vertical-align: middle">'.$parameter->unit.'</span>' : null,
'row_attr' => array(
'style' => 'display: ' . $display
),
'id' => 'st_allegro_offer_parameter_' . $parameter->id,
);
if ($parameter->type == 'dictionary' && $parameter->restrictions->multipleChoices)
{
$options['row_attr']['data-selected-ids'] = json_encode($value ? $value->valuesIds : array());
}
if (isset($parameter->restrictions->min))
{
$options['help'] = __("Wartość minimalna: %min%, wartość mayksymalna: %max%", array('%min%' => $parameter->restrictions->min, '%max%' => $parameter->restrictions->max));
}
echo st_admin_get_form_field($name . '[' . $parameter->type . '][' . $parameter->id . ']', $parameter->name, $value, $type, $options);
}
function st_allegro_parameter_dictionary($name, $value, array $params)
{
$parameter = $params['parameter'];
if (!$parameter->restrictions->multipleChoices)
{
return st_allegro_parameter_dictionary_single($name, $value, $params);
}
else
{
return st_allegro_parameter_dictionary_multiple($name, $value, $params);
}
}
function st_allegro_parameter_dictionary_single($name, $value, array $params)
{
$parameter = $params['parameter'];
$options = array();
foreach ($parameter->dictionary as $dictionary)
{
$options[$dictionary->id] = array(
'label' => $dictionary->value,
'attr' => array(
'data-depends-on-value-ids' => $dictionary->dependsOnValueIds ? json_encode(array_values($dictionary->dependsOnValueIds)) : null,
),
);
}
$value_id = $value && $value->valuesIds ? $value->valuesIds[0] : null;
$options_for_select = options_for_select($options, $value_id, array('include_custom' => __("Wybierz")));
$content = select_tag($name.'[value]', $options_for_select, array(
'id' => $params['id'],
'class' => 'st_allegro_parameter_dictionary st_allegro_parameter',
'data-ambiguous-value-id' => $parameter->options->ambiguousValueId,
'data-custom-value-enabled' => $parameter->options->customValuesEnabled,
'data-parameter-id' => $parameter->id,
));
if ($parameter->options->ambiguousValueId && $parameter->options->customValuesEnabled)
{
$visible = $parameter->options->ambiguousValueId == $value_id;
$content .= " ".input_tag($name.'[custom]', $visible && $value && isset($value->values) && !empty($value->values) ? $value->values[0] : null, array(
'disabled' => !$visible,
'style' => !$visible ? 'display: none' : '',
'placeholder' => __('Wprowadź własną wartość'),
'size' => '40',
'class' => 'st_allegro_parameter_dictionary_custom'
));
}
return $content;
}
function st_allegro_parameter_dictionary_multiple($name, $value, array $params)
{
$parameter = $params['parameter'];
$values = $value ? $value->valuesIds : array();
ob_start();
foreach ($parameter->dictionary as $dictionary)
{
echo '<label class="bs-mt-1 bs-d-block">';
echo st_admin_checkbox_tag($name . '[value][]', $dictionary->id, in_array($dictionary->id, $values), array(
'id' => $params['id'] . '_' . $parameter->id,
'class' => 'st_allegro_parameter_dictionary st_allegro_parameter',
'data-depends-on-value-ids' => $dictionary->dependsOnValueIds ? json_encode($dictionary->dependsOnValueIds) : null,
'data-ambiguous-value-id' => $parameter->options->ambiguousValueId,
'data-custom-value-enabled' => $parameter->options->customValuesEnabled,
'data-parameter-id' => $parameter->id,
)) . ' ' . $dictionary->value;
if ($parameter->options->ambiguousValueId == $dictionary->id && $parameter->options->customValuesEnabled)
{
$visible = in_array($parameter->options->ambiguousValueId , $values);
echo " ".input_tag($name.'[custom]', $value && isset($value->values) && !empty($value->values) ? $value->values[0] : null, array(
'disabled' => !$visible,
'style' => !$visible ? 'display: none' : '',
'placeholder' => __('Wprowadź własną wartość'),
'size' => '40',
'class' => 'st_allegro_parameter_dictionary_custom'
));
}
echo '</label>';
}
return ob_get_clean();
}
function st_allegro_parameter_float($name, $value, array $params)
{
return st_allegro_parameter_numeric($name, $value, $params);
}
function st_allegro_parameter_integer($name, $value, array $params)
{
return st_allegro_parameter_numeric($name, $value, $params);
}
function st_allegro_parameter_numeric($name, $value, array $params)
{
$parameter = $params['parameter'];
if (!$parameter->restrictions->range)
{
return input_tag($name, $value && $value->values ? $value->values[0] : null, array(
'id' => $params['id'],
'class' => 'number-type st_allegro_parameter',
'size' => 10,
'data-min' => $parameter->restrictions->min,
'data-max' => $parameter->restrictions->max,
'data-precision' => isset($parameter->restrictions->precision) && $parameter->restrictions->precision ? $parameter->restrictions->precision : 0,
));
}
else
{
return input_tag($name . '[from]', $value && $value->rangeValue ? $value->rangeValue->from : null, array(
'id' => $params['id'] . '_from',
'class' => 'number-type st_allegro_parameter',
'size' => 10,
'data-min' => $parameter->restrictions->min,
'data-max' => $parameter->restrictions->max,
'data-precision' => isset($parameter->restrictions->precision) && $parameter->restrictions->precision ? $parameter->restrictions->precision : 0,
)) . ' - ' . input_tag($name . '[to]', $value && $value->rangeValue ? $value->rangeValue->to : null, array(
'id' => $params['id'] . '_to',
'class' => 'number-type st_allegro_parameter',
'size' => 10,
'data-min' => $parameter->restrictions->min,
'data-max' => $parameter->restrictions->max,
'data-precision' => isset($parameter->restrictions->precision) && $parameter->restrictions->precision ? $parameter->restrictions->precision : 0,
));
}
}
function st_allegro_parameter_string($name, $value, array $params)
{
$parameter = $params['parameter'];
if ($parameter->restrictions->allowedNumberOfValues == 1)
{
return st_allegro_parameter_string_single($name, $value, $params);
}
else
{
return st_allegro_parameter_string_multiple($name, $value, $params);
}
}
function st_allegro_parameter_string_single($name, $value, array $params)
{
$parameter = $params['parameter'];
return input_tag($name, $value && $value->values ? $value->values[0] : null, array(
'class' => 'string-type st_allegro_parameter',
'maxlength' => $parameter->restrictions->maxLength,
'size' => '40',
));
}
function st_allegro_parameter_string_multiple($name, $value, array $params)
{
$parameter = $params['parameter'];
$values = $value ? $value->values : array();
ob_start();
for ($i = 0; $i < $parameter->restrictions->allowedNumberOfValues; $i++)
{
echo '<div style="margin-bottom: 5px">';
echo input_tag($name . '[' . $i . ']', isset($values[$i]) ? $values[$i] : null, array('class' => 'string-type st_allegro_parameter', 'maxlength' => $parameter->restrictions->maxLength, 'size' => '40', 'placeholder' => __('Wartość %no%', array('%no%' => $i + 1))));
echo '</div>';
}
return ob_get_clean();
}