xref: /plugin/combo/ComboStrap/QualityMenuItem.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau/**
3c3437056SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved.
4c3437056SNickeau *
5c3437056SNickeau * This source code is licensed under the GPL license found in the
6c3437056SNickeau * COPYING  file in the root directory of this source tree.
7c3437056SNickeau *
8c3437056SNickeau * @license  GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
9c3437056SNickeau * @author   ComboStrap <support@combostrap.com>
10c3437056SNickeau *
11c3437056SNickeau */
12c3437056SNickeau
13c3437056SNickeaunamespace ComboStrap;
14c3437056SNickeau
15c3437056SNickeauuse dokuwiki\Menu\Item\AbstractItem;
16c3437056SNickeau
17c3437056SNickeau
18c3437056SNickeau/**
19c3437056SNickeau * Class MenuItem
20c3437056SNickeau * *
21c3437056SNickeau * @package ComboStrap
22c3437056SNickeau *
23c3437056SNickeau * Inspiration:
24c3437056SNickeau * https://raw.githubusercontent.com/splitbrain/dokuwiki-plugin-dw2pdf/master/MenuItem.php
25c3437056SNickeau */
26c3437056SNickeauclass QualityMenuItem extends AbstractItem
27c3437056SNickeau{
28c3437056SNickeau
29c3437056SNickeau
30c3437056SNickeau    const CLASS_HTML = "combo-quality-item";
31c3437056SNickeau    const CANONICAL = "quality";
32c3437056SNickeau    const CLASS_HTML_LOW = "combo-quality-item-low";
33c3437056SNickeau
34c3437056SNickeau    /**
35*04fd306cSNickeau     * @var MarkupPath
36c3437056SNickeau     */
37c3437056SNickeau    private $page;
38c3437056SNickeau
39c3437056SNickeau    /**
40c3437056SNickeau     * QualityMenuItem constructor.
41c3437056SNickeau     */
42c3437056SNickeau    public function __construct()
43c3437056SNickeau    {
44c3437056SNickeau        $snippetManager = PluginUtility::getSnippetManager();
45c3437056SNickeau        $snippetManager->attachJavascriptComboLibrary();
46*04fd306cSNickeau        $snippetManager->attachJavascriptFromComponentId(self::CANONICAL);
47*04fd306cSNickeau        $this->page = MarkupPath::createFromRequestedPage();
48c3437056SNickeau        if($this->page->isLowQualityPage()){
49*04fd306cSNickeau            $snippetManager->attachCssInternalStylesheet(self::CANONICAL);
50c3437056SNickeau        }
51c3437056SNickeau        parent::__construct();
52c3437056SNickeau
53c3437056SNickeau    }
54c3437056SNickeau
55c3437056SNickeau
56c3437056SNickeau    /**
57c3437056SNickeau     *
58c3437056SNickeau     * @return string
59c3437056SNickeau     */
60c3437056SNickeau    public function getLabel(): string
61c3437056SNickeau    {
62c3437056SNickeau        $suffix = "";
63c3437056SNickeau        if ($this->page->isLowQualityPage()) {
64c3437056SNickeau            $suffix = "(Low)";
65c3437056SNickeau        }
66c3437056SNickeau        return "Page Quality $suffix";
67c3437056SNickeau    }
68c3437056SNickeau
69c3437056SNickeau    public function getLinkAttributes($classprefix = 'menuitem '): array
70c3437056SNickeau    {
71c3437056SNickeau        $linkAttributes = parent::getLinkAttributes($classprefix);
72c3437056SNickeau        /**
73c3437056SNickeau         * A class and not an id
74c3437056SNickeau         * because a menu item can be found twice on
75c3437056SNickeau         * a page (For instance if you want to display it in a layout at a
76c3437056SNickeau         * breakpoint and at another in another breakpoint
77c3437056SNickeau         */
78c3437056SNickeau        $linkAttributes['class'] = self::CLASS_HTML;
79c3437056SNickeau        if ($this->page->isLowQualityPage()) {
80c3437056SNickeau            $linkAttributes['class'] .= " ".self::CLASS_HTML_LOW;
81c3437056SNickeau        }
82c3437056SNickeau
83c3437056SNickeau        return $linkAttributes;
84c3437056SNickeau    }
85c3437056SNickeau
86c3437056SNickeau    public function getTitle(): string
87c3437056SNickeau    {
88c3437056SNickeau        $title = "Show the page quality";
89c3437056SNickeau        if ($this->page->isLowQualityPage()) {
90c3437056SNickeau            $title .= "\n(This page is a low quality page)";
91c3437056SNickeau        } else {
92c3437056SNickeau            $title .= "\n(This page has a normal quality)";
93c3437056SNickeau        }
94c3437056SNickeau        return htmlentities($title);
95c3437056SNickeau    }
96c3437056SNickeau
97c3437056SNickeau    public function getSvg(): string
98c3437056SNickeau    {
99c3437056SNickeau
100c3437056SNickeau        if ($this->page->isLowQualityPage()) {
101c3437056SNickeau            /** @var string icon file */
102*04fd306cSNickeau            return DirectoryLayout::getComboImagesDirectory()->resolve( 'quality-alert.svg')->toAbsoluteId();
103c3437056SNickeau        } else {
104c3437056SNickeau            /**
105c3437056SNickeau             * @var string icon file
106c3437056SNickeau             * !!! Same icon used in the landing page !!!
107c3437056SNickeau             */
108*04fd306cSNickeau            return DirectoryLayout::getComboImagesDirectory()->resolve('quality.svg')->toAbsoluteId();
109c3437056SNickeau        }
110c3437056SNickeau    }
111c3437056SNickeau
112c3437056SNickeau
113c3437056SNickeau}
114