Files
server/usr/share/psa-pear/pear/php/Horde/Imsp/Options.php
2026-01-07 20:52:11 +01:00

138 lines
4.4 KiB
PHP

<?php
/**
* Horde_Imsp_Options Class - provides an interface to IMSP server-based
* options storage.
*
* Copyright 2004-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @author Michael J Rubinsky <mrubinsk@horde.org>
* @package Horde_Imsp
*/
class Horde_Imsp_Options
{
/**
* Horde_Imsp object.
*
* @var Horde_Imsp_Client_Base
*/
protected $_imsp;
/**
* Parameter list.
*
* @var array
*/
protected $_params;
/**
* Constructor.
*
* @param Horde_Imsp_Client_base $client The client connection.
* @param array $params Hash containing IMSP parameters.
*/
public function __construct(Horde_Imsp_Client_Base $client, array $params)
{
$this->_params = $params;
$this->_imsp = $client;
$this->_imsp->_logger->debug('Horde_Imsp_Options initialized.');
}
/**
* Function sends a GET command to IMSP server and retrieves values.
*
* @param string $option Name of option to retrieve. Accepts '*' as wild
* card.
*
* @return array Hash containing option=>value pairs.
* @throws Horde_Imsp_Exception
*/
public function get($option)
{
$options = array();
$this->_imsp->send("GET $option", true, true);
$server_response = $this->_imsp->receive();
while (preg_match("/^\* OPTION/", $server_response)) {
/* First, check for a {}. */
if (preg_match(Horde_Imsp_Client_Base::OCTET_COUNT, $server_response, $tempArray)) {
$temp = explode(' ', $server_response);
$options[$temp[2]] = $this->_imsp->receiveStringLiteral($tempArray[2]);
$this->_imsp->receive();
} else {
$temp = explode(' ', $server_response);
$options[$temp[2]] = trim($temp[3]);
$i = 3;
$lastChar = "";
$nextElement = trim($temp[3]);
/* Was the value quoted and spaced? */
if ((substr($nextElement, 0, 1) == '"') &&
(substr($nextElement, strlen($nextElement) - 1, 1) != '"')) {
do {
$nextElement = $temp[$i + 1];
$lastChar = substr($nextElement, strlen($nextElement) - 1, 1);
$options[$temp[2]] .= ' ' . $nextElement;
if ($lastChar == '"') {
$done = true;
} else {
$done = false;
$lastChar = substr($temp[$i + 2], strlen($temp[$i + 2]) - 1, 1);
$i++;
}
} while ($lastChar != '"');
if (!$done) {
$nextElement = $temp[$i + 1];
$options[$temp[2]] .= ' ' . $nextElement;
}
}
}
$server_response = $this->_imsp->receive();
}
if ($server_response != 'OK') {
throw new Horde_Imsp_Exception('Did not receive the expected response from the server.');
}
$this->_imsp->_logger->debug('GET command OK.');
return $options;
}
/**
* Function sets an option value on the IMSP server.
*
* @param string $name Name of option to set.
* @param string $value Value to assign.
*
* @throws Horde_Imsp_Exception
*/
public function set($option, $value)
{
/* Send the beginning of the command. */
$this->_imsp->send("SET $option ", true, false);
/* Send $optionValue as a literal {}? */
if (preg_match(Horde_Imsp_Client_Base::MUST_USE_LITERAL, $value)) {
$biValue = sprintf("{%d}", strlen($value));
$result = $this->_imsp->send($biValue, false, true, true);
}
/* Now send the rest of the command. */
$result = $this->_imsp->send($value, false, true);
$server_response = $this->_imsp->receive();
if ($server_response != 'OK') {
throw new Horde_Imsp_Exception('The option could not be set on the IMSP server.');
}
$this->_imsp->_logger->debug('SET command OK.');
}
public function logout()
{
$this->_imsp->logout();
}
}