1<?php
2/* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once "Services/UIComponent/Button/classes/class.ilButtonBase.php";
5
6/**
7 * Link Button GUI
8 *
9 * @author Jörg Lützenkirchen <luetzenkirchen@leifos.com>
10 * @version $Id: class.ilTabsGUI.php 45109 2013-09-30 15:46:28Z akill $
11 * @package ServicesUIComponent
12 */
13class ilLinkButton extends ilButtonBase
14{
15    protected $url; // [string]
16    protected $target; // [string]
17
18    public static function getInstance()
19    {
20        return new self(self::TYPE_LINK);
21    }
22
23
24    //
25    // properties
26    //
27
28    /**
29     * Set URL
30     *
31     * @param string $a_value
32     */
33    public function setUrl($a_value)
34    {
35        $this->url = trim($a_value);
36    }
37
38    /**
39     * Get URL
40     *
41     * @return string
42     */
43    public function getUrl()
44    {
45        return $this->url;
46    }
47
48    /**
49     * Set target
50     *
51     * @param string $a_value
52     */
53    public function setTarget($a_value)
54    {
55        $this->target = trim($a_value);
56    }
57
58    /**
59     * Get target
60     *
61     * @return string
62     */
63    public function getTarget()
64    {
65        return $this->target;
66    }
67
68
69    //
70    // render
71    //
72
73    /**
74     * Prepare caption for render
75     *
76     * @return string
77     */
78    protected function renderCaption()
79    {
80        return '&nbsp;' . $this->getCaption() . '&nbsp;';
81    }
82
83    /**
84     * @inheritdoc
85     */
86    protected function renderAttributes(array $a_additional_attr = null)
87    {
88        if ('_blank' === $this->getTarget()) {
89            $relAttrVal = 'noopener';
90
91            if (isset($a_additional_attr['rel'])) {
92                if (strpos($a_additional_attr['rel'], $relAttrVal) === false) {
93                    $a_additional_attr['rel'] .= ' ' . $relAttrVal;
94                }
95            } else {
96                $a_additional_attr['rel'] = $relAttrVal;
97            }
98        }
99
100        return parent::renderAttributes($a_additional_attr);
101    }
102
103    public function render()
104    {
105        $this->prepareRender();
106
107        $attr = array();
108        $attr["href"] = $this->getUrl() ? $this->getUrl() : "#";
109        $attr["target"] = $this->getTarget();
110
111        return '<a' . $this->renderAttributes($attr) . '>' .
112            $this->renderCaption() . '</a>';
113    }
114}
115