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