Нет описания

Image.php 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace MailPoet\Form\Block;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\WP\Functions as WPFunctions;
  5. class Image {
  6. /** @var WPFunctions */
  7. private $wp;
  8. public function __construct(
  9. WPFunctions $wp
  10. ) {
  11. $this->wp = $wp;
  12. }
  13. public function render(array $block): string {
  14. if (empty($block['params']['url'])) {
  15. return '';
  16. }
  17. return $this->wrapImage($block['params'], $this->renderImage($block['params']));
  18. }
  19. private function renderImage(array $params): string {
  20. $attributes = [];
  21. $styles = [];
  22. $attributes[] = 'src="' . $this->wp->escAttr($params['url']) . '"';
  23. $attributes[] = $params['alt'] ? 'alt="' . $this->wp->escAttr($params['alt']) . '"' : 'alt';
  24. if ($params['title']) {
  25. $attributes[] = 'title="' . $this->wp->escAttr($params['title']) . '"';
  26. }
  27. if ($params['id']) {
  28. $attributes[] = 'class="wp-image-' . $this->wp->escAttr($params['id']) . '"';
  29. $attributes[] = 'srcset="' . $this->wp->wpGetAttachmentImageSrcset(intval($params['id']), $params['size_slug']) . '"';
  30. }
  31. if ($params['width']) {
  32. $attributes[] = 'width=' . intval($params['width']);
  33. $styles[] = 'width: ' . intval($params['width']) . 'px';
  34. }
  35. if ($params['height']) {
  36. $attributes[] = 'height=' . intval($params['height']);
  37. $styles[] = 'height: ' . intval($params['height']) . 'px';
  38. }
  39. if ($styles) {
  40. $attributes[] = 'style="' . $this->wp->escAttr(implode(';', $styles)) . '"';
  41. }
  42. return '<img ' . implode(' ', $attributes) . '>';
  43. }
  44. private function wrapImage(array $params, string $img): string {
  45. // Figure
  46. $figureClasses = ['size-' . $params['size_slug']];
  47. if ($params['align']) {
  48. $figureClasses[] = 'align' . $params['align'];
  49. }
  50. // Link
  51. if ($params['href']) {
  52. $img = $this->wrapToLink($params, $img);
  53. }
  54. $caption = $params['caption'] ? "<figcaption>{$this->wp->escHtml($params['caption'])}</figcaption>" : '';
  55. $figure = '<figure class="' . $this->wp->escAttr(implode(' ', $figureClasses)) . '">' . $img . $caption . '</figure>';
  56. // Main wrapper
  57. $divClasses = ['mailpoet_form_image'];
  58. if (trim($params['class_name'])) {
  59. $divClasses[] = trim($params['class_name']);
  60. }
  61. return '<div class="' . $this->wp->escAttr(implode(' ', $divClasses)) . '">' . $figure . '</div>';
  62. }
  63. private function wrapToLink(array $params, string $img): string {
  64. $attributes = ['href="' . $this->wp->escAttr($params['href']) . '"'];
  65. if ($params['link_class']) {
  66. $attributes[] = 'class="' . $this->wp->escAttr($params['link_class']) . '"';
  67. }
  68. if ($params['link_target']) {
  69. $attributes[] = 'target="' . $this->wp->escAttr($params['link_target']) . '"';
  70. }
  71. if ($params['rel']) {
  72. $attributes[] = 'rel="' . $this->wp->escAttr($params['rel']) . '"';
  73. }
  74. return '<a ' . implode(' ', $attributes) . ' >' . $img . '</a>';
  75. }
  76. }