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