xref: /plugin/combo/ComboStrap/Message.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaunamespace ComboStrap;
4*37748cd8SNickeau
5*37748cd8SNickeauuse dokuwiki\Extension\Plugin;
6*37748cd8SNickeau
7*37748cd8SNickeauclass Message
8*37748cd8SNickeau{
9*37748cd8SNickeau
10*37748cd8SNickeau
11*37748cd8SNickeau    const SIGNATURE_CLASS = "signature";
12*37748cd8SNickeau    const TAG = "message";
13*37748cd8SNickeau    private $content = "";
14*37748cd8SNickeau    private $type = self::TYPE_CLASSIC;
15*37748cd8SNickeau
16*37748cd8SNickeau    const TYPE_CLASSIC = 'Classic';
17*37748cd8SNickeau    const TYPE_WARNING = 'Warning';
18*37748cd8SNickeau
19*37748cd8SNickeau    /**
20*37748cd8SNickeau     * @var Plugin
21*37748cd8SNickeau     */
22*37748cd8SNickeau    private $plugin;
23*37748cd8SNickeau    private $signatureCanonical;
24*37748cd8SNickeau    private $signatureName;
25*37748cd8SNickeau    /**
26*37748cd8SNickeau     * @var TagAttributes
27*37748cd8SNickeau     */
28*37748cd8SNickeau    private $tagAttributes;
29*37748cd8SNickeau
30*37748cd8SNickeau    /**
31*37748cd8SNickeau     * @param Plugin $plugin
32*37748cd8SNickeau     */
33*37748cd8SNickeau    public function __construct($plugin = null)
34*37748cd8SNickeau    {
35*37748cd8SNickeau        $this->plugin = $plugin;
36*37748cd8SNickeau        $this->tagAttributes = TagAttributes::createEmpty("message")
37*37748cd8SNickeau            ->addClassName("alert")
38*37748cd8SNickeau            ->addHtmlAttributeValue("role", "alert");
39*37748cd8SNickeau    }
40*37748cd8SNickeau
41*37748cd8SNickeau
42*37748cd8SNickeau    public function addContent($message)
43*37748cd8SNickeau    {
44*37748cd8SNickeau        $this->content .= $message;
45*37748cd8SNickeau    }
46*37748cd8SNickeau
47*37748cd8SNickeau    public function setType($type)
48*37748cd8SNickeau    {
49*37748cd8SNickeau        $this->type = $type;
50*37748cd8SNickeau    }
51*37748cd8SNickeau
52*37748cd8SNickeau    public function setSignatureCanonical($canonical)
53*37748cd8SNickeau    {
54*37748cd8SNickeau        $this->signatureCanonical = $canonical;
55*37748cd8SNickeau    }
56*37748cd8SNickeau
57*37748cd8SNickeau    public function setClass($class)
58*37748cd8SNickeau    {
59*37748cd8SNickeau        $this->tagAttributes->addClassName($class);
60*37748cd8SNickeau    }
61*37748cd8SNickeau
62*37748cd8SNickeau    public function getContent()
63*37748cd8SNickeau    {
64*37748cd8SNickeau        return $this->content;
65*37748cd8SNickeau    }
66*37748cd8SNickeau
67*37748cd8SNickeau    public function getType()
68*37748cd8SNickeau    {
69*37748cd8SNickeau        return $this->type;
70*37748cd8SNickeau    }
71*37748cd8SNickeau
72*37748cd8SNickeau    public function setSignatureName($signatureName)
73*37748cd8SNickeau    {
74*37748cd8SNickeau        $this->signatureName = $signatureName;
75*37748cd8SNickeau    }
76*37748cd8SNickeau
77*37748cd8SNickeau    /**
78*37748cd8SNickeau     * Used when sending message and in the main content
79*37748cd8SNickeau     * @return string
80*37748cd8SNickeau     */
81*37748cd8SNickeau    public function toHtml()
82*37748cd8SNickeau    {
83*37748cd8SNickeau
84*37748cd8SNickeau        PluginUtility::getSnippetManager()->upsertCssSnippetForRequest(self::TAG);
85*37748cd8SNickeau        $message = "";
86*37748cd8SNickeau        if ($this->getContent() <> "") {
87*37748cd8SNickeau
88*37748cd8SNickeau            if ($this->getType() == Message::TYPE_CLASSIC) {
89*37748cd8SNickeau                $this->tagAttributes->addClassName("alert-success");
90*37748cd8SNickeau            } else {
91*37748cd8SNickeau                $this->tagAttributes->addClassName("alert-warning");
92*37748cd8SNickeau            }
93*37748cd8SNickeau
94*37748cd8SNickeau            $message = $this->tagAttributes->toHtmlEnterTag("div");
95*37748cd8SNickeau            $message .= $this->getContent();
96*37748cd8SNickeau
97*37748cd8SNickeau            /**
98*37748cd8SNickeau             * If this is a test call without a plugin
99*37748cd8SNickeau             * we have no plugin attached
100*37748cd8SNickeau             */
101*37748cd8SNickeau            $firedByLang = "This message was fired by the ";
102*37748cd8SNickeau            if($this->plugin!=null){
103*37748cd8SNickeau                $firedByLang = $this->plugin->getLang('message_come_from');
104*37748cd8SNickeau            }
105*37748cd8SNickeau
106*37748cd8SNickeau            $message .= '<div class="' . self::SIGNATURE_CLASS . '">' . $firedByLang . PluginUtility::getUrl($this->signatureCanonical, $this->signatureName, false) . '</div>';
107*37748cd8SNickeau            $message .= '</div>';
108*37748cd8SNickeau
109*37748cd8SNickeau            /**
110*37748cd8SNickeau             * In dev, to spot the XHTML compliance error
111*37748cd8SNickeau             */
112*37748cd8SNickeau            if (PluginUtility::isDevOrTest()){
113*37748cd8SNickeau                 $isXml = XmlUtility::isXml($message);
114*37748cd8SNickeau                 if (!$isXml){
115*37748cd8SNickeau                     LogUtility::msg("This message is not xml compliant ($message)");
116*37748cd8SNickeau                     $message =<<<EOF
117*37748cd8SNickeau<div class='alert alert-warning'>
118*37748cd8SNickeau    <p>This message is not xml compliant</p>
119*37748cd8SNickeau    <pre>$message</pre>
120*37748cd8SNickeau</div>
121*37748cd8SNickeauEOF;
122*37748cd8SNickeau                 }
123*37748cd8SNickeau            }
124*37748cd8SNickeau
125*37748cd8SNickeau        }
126*37748cd8SNickeau        return $message;
127*37748cd8SNickeau    }
128*37748cd8SNickeau
129*37748cd8SNickeau}
130