diff --git a/src/WPDesk/Notice/Notice.php b/src/WPDesk/Notice/Notice.php index 57c774d22203c5e10fc8e831fdaded1d0e6298fd..d3ea070240edc36155885d45e8ee166bd3d700ed 100644 --- a/src/WPDesk/Notice/Notice.php +++ b/src/WPDesk/Notice/Notice.php @@ -64,13 +64,20 @@ class Notice * @param string $noticeType Notice type. * @param bool $dismissible Is dismissible. * @param int $priority Notice priority. - */ - public function __construct($noticeContent, $noticeType = 'info', $dismissible = false, $priority = 10) - { + * @param array $attributes Attributes. + */ + public function __construct( + $noticeContent, + $noticeType = 'info', + $dismissible = false, + $priority = 10, + $attributes = array() + ) { $this->noticeContent = $noticeContent; $this->noticeType = $noticeType; $this->dismissible = $dismissible; $this->priority = $priority; + $this->attributes = $attributes; $this->addAction(); } @@ -176,6 +183,9 @@ class Notice if ($this->dismissible) { $notice_class .= ' is-dismissible'; } + if (isset($this->attributes['class'])) { + $notice_class .= ' ' . $this->attributes['class']; + } return $notice_class; } @@ -187,15 +197,35 @@ class Notice protected function getAttributesAsString() { $attribute_string = sprintf('class="%1$s"', esc_attr($this->getNoticeClass())); + foreach ($this->attributes as $attribute_name => $attribute_value) { + if ('class' !== $attribute_name) { + $attribute_string .= sprintf(' %1$s="%2$s"', esc_html($attribute_name), esc_attr($attribute_value)); + } + } return $attribute_string; } + private function addParagraphToContent() + { + if (0 === strpos($this->noticeContent, '<p>')) { + return false; + } + if (0 === strpos($this->noticeContent, '<div>') || 0 === strpos($this->noticeContent, '<div ')) { + return false; + } + return true; + } + /** * Show notice; */ public function showNotice() { - echo sprintf('<div %1$s><p>%2$s</p></div>', $this->getAttributesAsString(), $this->noticeContent); + $noticeFormat = '<div %1$s>%2$s</div>'; + if ($this->addParagraphToContent()) { + $noticeFormat = '<div %1$s><p>%2$s</p></div>'; + } + echo sprintf($noticeFormat, $this->getAttributesAsString(), $this->noticeContent); } } diff --git a/src/WPDesk/Notice/PermanentDismissibleNotice.php b/src/WPDesk/Notice/PermanentDismissibleNotice.php index ea31b5aabbf4cf8f99bb6154a69fd9cee7094a7c..00d0336ec88ea86433ddb17ae164d811b2a6f09b 100644 --- a/src/WPDesk/Notice/PermanentDismissibleNotice.php +++ b/src/WPDesk/Notice/PermanentDismissibleNotice.php @@ -31,11 +31,11 @@ class PermanentDismissibleNotice extends Notice * @param string $noticeType Notice type. * @param string $noticeName Notice dismiss option name. * @param int $priority Priority + * @param array $attributes Attributes. */ - - public function __construct($noticeContent, $noticeType, $noticeName, $priority = 10) + public function __construct($noticeContent, $noticeType, $noticeName, $priority = 10, $attributes = array()) { - parent::__construct($noticeContent, $noticeType, true, $priority); + parent::__construct($noticeContent, $noticeType, true, $priority, $attributes); $this->noticeName = $noticeName; $this->noticeDismissOptionName = static::OPTION_NAME_PREFIX . $noticeName; if (self::OPTION_VALUE_DISMISSED === get_option($this->noticeDismissOptionName, '')) {