Brak opisu

Radio.php 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace MailPoet\Form\Block;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Form\BlockWrapperRenderer;
  5. use MailPoet\WP\Functions as WPFunctions;
  6. class Radio {
  7. /** @var BlockRendererHelper */
  8. private $rendererHelper;
  9. /** @var WPFunctions */
  10. private $wp;
  11. /** @var BlockWrapperRenderer */
  12. private $wrapper;
  13. public function __construct(
  14. BlockRendererHelper $rendererHelper,
  15. BlockWrapperRenderer $wrapper,
  16. WPFunctions $wp
  17. ) {
  18. $this->rendererHelper = $rendererHelper;
  19. $this->wrapper = $wrapper;
  20. $this->wp = $wp;
  21. }
  22. public function render(array $block, array $formSettings): string {
  23. $html = '';
  24. $fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']';
  25. $fieldValidation = $this->rendererHelper->getInputValidation($block);
  26. $html .= $this->rendererHelper->renderLabel($block, $formSettings);
  27. $options = (!empty($block['params']['values'])
  28. ? $block['params']['values']
  29. : []
  30. );
  31. $selectedValue = $this->rendererHelper->getFieldValue($block);
  32. foreach ($options as $option) {
  33. $html .= '<label class="mailpoet_radio_label" '
  34. . $this->rendererHelper->renderFontStyle($formSettings)
  35. . '>';
  36. $html .= '<input type="radio" class="mailpoet_radio" ';
  37. $html .= 'name="' . $fieldName . '" ';
  38. if (is_array($option['value'])) {
  39. $value = key($option['value']);
  40. $label = reset($option['value']);
  41. } else {
  42. $value = $option['value'];
  43. $label = $option['value'];
  44. }
  45. $html .= 'value="' . $this->wp->escAttr($value) . '" ';
  46. $html .= (
  47. (
  48. $selectedValue === ''
  49. && isset($option['is_checked'])
  50. && $option['is_checked']
  51. ) || ($selectedValue === $value)
  52. ) ? 'checked="checked"' : '';
  53. $html .= $fieldValidation;
  54. $html .= ' /> ' . $this->wp->escAttr($label);
  55. $html .= '</label>';
  56. }
  57. $html .= '<span class="mailpoet_error_' . $block['id'] . '"></span>';
  58. return $this->wrapper->render($block, $html);
  59. }
  60. }