You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.4 KiB

<?php
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
require_once 'vendor/autoload.php';
require_once dirname(__FILE__).'/../CElement.php';
/**
* InputGroup element.
*/
class CInputGroupElement extends CElement {
const TYPE_SECRET = 'Secret text';
const TYPE_TEXT = 'Text';
const TYPE_VAULT = 'Vault';
/**
* Get value of InputGroup element.
*
* @return string
*/
public function getValue() {
return $this->query('xpath:.//textarea[contains(@class, "textarea-flexible")]|.//input[@type="password"]')
->one()->getValue();
}
/**
* Select the type of InputGroup element.
*
* @param string $new_type value field type to be selected
*
* @return $this
*/
public function changeInputType($new_type) {
$this->query('xpath:.//button['.CXPathHelper::fromClass('btn-dropdown-toggle').']')->one()->click();
$type_menu = CPopupMenuElement::find()->waitUntilVisible()->one();
return $type_menu->select($new_type);
}
/**
* Get "Revert" button for the corresponding InputGroup element
*
* @return CElement
*/
public function getRevertButton() {
return $this->query('xpath:.//button[@title="Revert changes"]')->one(false);
}
/**
* Get "Set new value" button for the corresponding InputGroup element
*
* @return CElement
*/
public function getNewValueButton() {
return $this->query('button:Set new value')->one(false);
}
/**
* Get the current type of InputGroup element
*
* @return string
*/
public function getInputType() {
$xpath_vault = 'xpath:./../div[contains(@class, "macro-value-vault")]';
$xpath_secret = 'xpath:.//div[@class="input-secret"]/..//button[contains(@id, "type_button")]';
if ($this->query($xpath_secret)->exists()) {
return self::TYPE_SECRET;
}
if ($this->query($xpath_vault)->exists()) {
return self::TYPE_VAULT;
}
return self::TYPE_TEXT;
}
/**
* Fill InputGroup element type and value
*
* @param array|string $input values to be set in InputGroups element
*
* @return $this
*/
public function fill($input) {
if (!is_array($input)) {
$xpath = 'xpath:.//textarea[contains(@class, "textarea-flexible")]|.//input[@type="password"]';
$this->query($xpath)->one()->fill($input);
return $this;
}
if (array_key_exists('type', $input) && $this->getInputType() !== $input['type']) {
$this->changeInputType($input['type']);
}
if (array_key_exists('text', $input)) {
$change_button = $this->query('button:Set new value')->one(false);
if ($change_button->isValid()) {
$change_button->click();
}
$xpath = 'xpath:.//textarea[contains(@class, "textarea-flexible")]|.//input[@type="password"]';
$this->query($xpath)->one()->fill($input['text']);
}
return $this;
}
}