summaryrefslogtreecommitdiffstats
path: root/library/Reporting/Web/Widget/CoverPage.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Reporting/Web/Widget/CoverPage.php')
-rw-r--r--library/Reporting/Web/Widget/CoverPage.php181
1 files changed, 181 insertions, 0 deletions
diff --git a/library/Reporting/Web/Widget/CoverPage.php b/library/Reporting/Web/Widget/CoverPage.php
new file mode 100644
index 0000000..545ef6a
--- /dev/null
+++ b/library/Reporting/Web/Widget/CoverPage.php
@@ -0,0 +1,181 @@
+<?php
+
+namespace Icinga\Module\Reporting\Web\Widget;
+
+use Icinga\Module\Reporting\Common\Macros;
+use ipl\Html\BaseHtmlElement;
+use ipl\Html\Html;
+
+class CoverPage extends BaseHtmlElement
+{
+ use Macros;
+
+ /** @var array */
+ protected $backgroundImage;
+
+ /** @var string */
+ protected $color;
+
+ /** @var array */
+ protected $logo;
+
+ /** @var string */
+ protected $title;
+
+ protected $tag = 'div';
+
+ protected $defaultAttributes = ['class' => 'cover-page page'];
+
+ /**
+ * @return bool
+ */
+ public function hasBackgroundImage()
+ {
+ return $this->backgroundImage !== null;
+ }
+
+ /**
+ * @return array
+ */
+ public function getBackgroundImage()
+ {
+ return $this->backgroundImage;
+ }
+
+ /**
+ * @param array $backgroundImage
+ *
+ * @return $this
+ */
+ public function setBackgroundImage($backgroundImage)
+ {
+ $this->backgroundImage = $backgroundImage;
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function hasColor()
+ {
+ return $this->color !== null;
+ }
+
+ /**
+ * @return string
+ */
+ public function getColor()
+ {
+ return $this->color;
+ }
+
+ /**
+ * @param string $color
+ *
+ * @return $this
+ */
+ public function setColor($color)
+ {
+ $this->color = $color;
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function hasLogo()
+ {
+ return $this->logo !== null;
+ }
+
+ /**
+ * @return array
+ */
+ public function getLogo()
+ {
+ return $this->logo;
+ }
+
+ /**
+ * @param array $logo
+ *
+ * @return $this
+ */
+ public function setLogo($logo)
+ {
+ $this->logo = $logo;
+
+ return $this;
+ }
+
+ public function hasTitle()
+ {
+ return $this->title !== null;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * @param string $title
+ *
+ * @return $this
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+
+ return $this;
+ }
+
+ protected function assemble()
+ {
+ if ($this->hasBackgroundImage()) {
+ $this
+ ->getAttributes()
+ ->add('style', "background-image: url('" . Template::getDataUrl($this->getBackgroundImage()) . "');");
+ }
+
+ $content = Html::tag('div', ['class' => 'cover-page-content']);
+
+ if ($this->hasColor()) {
+ $content->getAttributes()->add('style', "color: {$this->getColor()};");
+ }
+
+ if ($this->hasLogo()) {
+ $content->add(Html::tag(
+ 'img',
+ [
+ 'class' => 'logo',
+ 'src' => Template::getDataUrl($this->getLogo())
+ ]
+ ));
+ }
+
+ if ($this->hasTitle()) {
+ $title = array_map(function ($part) {
+ $part = trim($part);
+
+ if (! $part) {
+ return Html::tag('br');
+ } else {
+ return Html::tag('div', null, $part);
+ }
+ }, explode("\n", $this->resolveMacros($this->getTitle())));
+
+ $content->add(Html::tag(
+ 'h2',
+ $title
+ ));
+ }
+
+ $this->add($content);
+ }
+}