* @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @link https://www.temando.com/ */ class GetAddressesHtmlSelectPlugin { /** * @var ModuleConfigInterface */ private $moduleConfig; /** * @var CheckoutFieldsSchema */ private $schema; /** * @var Session */ private $checkoutSession; /** * GetAddressesHtmlSelectPlugin constructor. * * @param ModuleConfigInterface $moduleConfig * @param CheckoutFieldsSchema $schema * @param Session $checkoutSession */ public function __construct( ModuleConfigInterface $moduleConfig, CheckoutFieldsSchema $schema, Session $checkoutSession ) { $this->moduleConfig = $moduleConfig; $this->schema = $schema; $this->checkoutSession = $checkoutSession; } /** * @param CheckoutField $field * @param string $elementId * @param string $elementName * @param string $value * @return string */ private function renderCheckboxField(CheckoutField $field, $elementId, $elementName, $value) { $value = $value ? : $field->getDefaultValue(); $fieldHtml = sprintf( '', $field->getType(), $elementId, $elementName, $value ? 'checked="checked"' : '' ); return $fieldHtml; } /** * @param CheckoutField $field * @param string $elementId * @param string $elementName * @param string $value * @return string */ private function renderInputField(CheckoutField $field, $elementId, $elementName, $value) { $value = $value ? : $field->getDefaultValue(); $fieldHtml = sprintf( '', $field->getType(), $elementId, $elementName, $value ); return $fieldHtml; } /** * @param CheckoutField $field * @param string $elementId * @param string $elementName * @param string $value * @return string */ private function renderSelectField(CheckoutField $field, $elementId, $elementName, $value) { $value = $value ? : $field->getDefaultValue(); $options = ''; $fieldOptions = $field->getOptions(); foreach ($fieldOptions as $option) { $options.= sprintf( '', $option['value'], ($value === (string) $option['value']) ? 'selected="selected"' : '', $option['name'] ); } $fieldHtml = sprintf( '', $elementId, $elementName, $options ); return $fieldHtml; } /** * Render the markup for one field. * Set value from session if available, from configured default value otherwise. * * @param CheckoutField $field * @param int $index * @param string $itemId * @return string */ private function renderField(CheckoutField $field, $index, $itemId) { $value = ''; $checkoutFieldSelection = $this->checkoutSession->getData('checkoutFieldSelection'); if (isset($checkoutFieldSelection[$index]) && isset($checkoutFieldSelection[$index][$itemId]) ) { $fields = $checkoutFieldSelection[$index][$itemId]; $value = isset($fields[$field->getId()]) ? $fields[$field->getId()] : null; } $elementName = 'ship[' . $index . '][' . $itemId . ']['. $field->getId() . ']'; $elementId = 'ship_' . $index . '_' . $itemId . '_' . $field->getId(); $labelHtml = ''; $html = ''; switch ($field->getType()) { case 'checkbox': $fieldHtml = $this->renderCheckboxField($field, $elementId, $elementName, $value); $html = $fieldHtml . $labelHtml; break; case 'text': case 'number': $fieldHtml = $this->renderInputField($field, $elementId, $elementName, $value); $html = $labelHtml . $fieldHtml; break; case 'select': $fieldHtml = $this->renderSelectField($field, $elementId, $elementName, $value); $html = $labelHtml . $fieldHtml; break; } return '