暫無描述

Segment.php 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace MailPoet\Form\Block;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Form\BlockWrapperRenderer;
  5. use MailPoet\Segments\SegmentsRepository;
  6. use MailPoet\WP\Functions as WPFunctions;
  7. class Segment {
  8. /** @var BlockRendererHelper */
  9. private $rendererHelper;
  10. /** @var WPFunctions */
  11. private $wp;
  12. /** @var BlockWrapperRenderer */
  13. private $wrapper;
  14. /** @var SegmentsRepository */
  15. private $segmentsRepository;
  16. public function __construct(
  17. BlockRendererHelper $rendererHelper,
  18. BlockWrapperRenderer $wrapper,
  19. WPFunctions $wp,
  20. SegmentsRepository $segmentsRepository
  21. ) {
  22. $this->rendererHelper = $rendererHelper;
  23. $this->wrapper = $wrapper;
  24. $this->wp = $wp;
  25. $this->segmentsRepository = $segmentsRepository;
  26. }
  27. public function render(array $block, array $formSettings): string {
  28. $html = '';
  29. $fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']';
  30. $fieldValidation = $this->rendererHelper->getInputValidation($block);
  31. $html .= $this->rendererHelper->renderLabel($block, $formSettings);
  32. $options = (!empty($block['params']['values'])
  33. ? $block['params']['values']
  34. : []
  35. );
  36. $options = array_map(function ($option) {
  37. $option['id'] = intval($option['id']);
  38. return $option;
  39. }, $options);
  40. $segmentsNamesMap = $this->getSegmentsNames($options);
  41. foreach ($options as $option) {
  42. if (!isset($option['id']) || !isset($segmentsNamesMap[$option['id']])) continue;
  43. $isChecked = (isset($option['is_checked']) && $option['is_checked']) ? 'checked="checked"' : '';
  44. $html .= '<label class="mailpoet_checkbox_label" '
  45. . $this->rendererHelper->renderFontStyle($formSettings)
  46. . '>';
  47. $html .= '<input type="checkbox" class="mailpoet_checkbox" ';
  48. $html .= 'name="' . $fieldName . '[]" ';
  49. $html .= 'value="' . $option['id'] . '" ' . $isChecked . ' ';
  50. $html .= $fieldValidation;
  51. $html .= ' /> ' . $this->wp->escAttr($segmentsNamesMap[$option['id']]);
  52. $html .= '</label>';
  53. }
  54. $html .= '<span class="mailpoet_error_' . $block['id'] . '"></span>';
  55. return $this->wrapper->render($block, $html);
  56. }
  57. private function getSegmentsNames($values): array {
  58. $ids = array_column($values, 'id');
  59. $segments = $this->segmentsRepository->findBy(['id' => $ids]);
  60. $namesMap = [];
  61. foreach ($segments as $segment) {
  62. $namesMap[$segment->getId()] = $segment->getName();
  63. }
  64. return $namesMap;
  65. }
  66. }