addItem($item); } $this->url = $url; } /** * Adds CSRF token into the URL. * POST method will be used for '_csrf_token' argument. * * @param string $csrf_token already generated CSRF token string. * * @return $this */ public function addCsrfToken(string $csrf_token) { $this->csrf_token = $csrf_token; return $this; } /* * Add a confirmation message */ public function addConfirmation($value) { $this->confirm_message = $value; return $this; } /** * Set URL target. If target is "_blank", add "rel" tag and tag values "noopener" and "noreferrer". The "noreferrer" * depends if it is set to true in defines.inc.php. * * @param string $value URL target value. * * @return CLink */ public function setTarget(?string $value = null): self { $this->setAttribute('target', $value); if ($value === '_blank') { $this->setAttribute('rel', 'noopener'.(ZBX_NOREFERER ? ' noreferrer' : '')); } return $this; } public function toString($destroy = true) { $url = $this->url; if ($url === null) { $this->setAttribute('role', 'button'); } if ($this->csrf_token != '') { if (array_key_exists(ZBX_SESSION_NAME, $_COOKIE)) { $url .= (strpos($url, '&') !== false || strpos($url, '?') !== false) ? '&' : '?'; $url .= CCsrfTokenHelper::CSRF_TOKEN_NAME.'='.$this->csrf_token; } $confirm_script = ($this->confirm_message !== '') ? 'Confirm('.json_encode($this->confirm_message).') && ' : ''; $this->onClick("javascript: return ".$confirm_script."redirect('".$url."', 'post', '". CCsrfTokenHelper::CSRF_TOKEN_NAME."', true)" ); $this->setAttribute('href', 'javascript:void(0)'); } else { $this->setAttribute('href', ($url == null) ? 'javascript:void(0)' : $url); if ($this->confirm_message !== '') { $this->onClick('javascript: return Confirm('.json_encode($this->confirm_message).');'); } } return parent::toString($destroy); } }