Нет описания

Checkbox.php 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 Checkbox {
  7. /** @var BlockRendererHelper */
  8. private $rendererHelper;
  9. /** @var BlockWrapperRenderer */
  10. private $wrapper;
  11. /** @var WPFunctions */
  12. private $wp;
  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_checkbox_label" '
  34. . $this->rendererHelper->renderFontStyle($formSettings) . '>';
  35. $html .= '<input type="checkbox" class="mailpoet_checkbox" ';
  36. $html .= 'name="' . $fieldName . '" ';
  37. $html .= 'value="1" ';
  38. $html .= (
  39. (
  40. $selectedValue === ''
  41. && isset($option['is_checked'])
  42. && $option['is_checked']
  43. ) || ($selectedValue)
  44. ) ? 'checked="checked"' : '';
  45. $html .= $fieldValidation;
  46. $html .= ' /> ' . $option['value'];
  47. $html .= '</label>';
  48. }
  49. $html .= '<span class="mailpoet_error_' . $this->wp->escAttr($block['id']) . '"></span>';
  50. return $this->wrapper->render($block, $html);
  51. }
  52. }