Files
server/usr/share/psa-horde/imp/lib/Remote/Account.php
2026-01-07 20:52:11 +01:00

163 lines
3.7 KiB
PHP

<?php
/**
* Copyright 2013-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.horde.org/licenses/gpl.
*
* @category Horde
* @copyright 2013-2017 Horde LLC
* @license http://www.fsf.org/copyleft/gpl.html GPL
* @package IMP
*/
/**
* Object representation of a remote mail account.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2013-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*
* @property string $hostspec Remote host.
* @property-read string $id Remote account storage ID.
* @property-read IMP_Imap_Remote $imp_imap IMP IMAP object.
* @property string $label Remote account label.
* @property integer $port Remote server port.
* @property mixed $secure See backends.php ('secure' parameter).
* @property integer $type The connection type (self::IMAP or self::POP3).
* @property string $username Remote username.
*/
class IMP_Remote_Account implements Serializable
{
/* Constants used for the 'type' property. */
const IMAP = 1;
const POP3 = 2;
/**
* Configuration.
*
* @var array
*/
protected $_config = array();
/**
*/
public function __construct()
{
$this->_config['id'] = strval(new Horde_Support_Randomid());
}
/**
* String representation of object.
*
* @return string The identifier (mailbox) ID.
*/
public function __toString()
{
return IMP_Remote::MBOX_PREFIX . $this->_config['id'];
}
/**
*/
public function __get($name)
{
if (isset($this->_config[$name])) {
return $this->_config[$name];
}
switch ($name) {
case 'hostspec':
return 'localhost';
case 'imp_imap':
return $GLOBALS['injector']->getInstance('IMP_Factory_Imap')->create(strval($this));
case 'label':
return $this->hostspec;
case 'port':
return ($this->type == self::POP3) ? 110 : 143;
case 'secure':
return null;
case 'type':
return self::IMAP;
case 'username':
return '';
}
}
/**
*/
public function __set($name, $value)
{
switch ($name) {
case 'hostspec':
case 'label':
case 'username':
$this->_config[$name] = strval($value);
break;
case 'port':
case 'type':
$this->_config[$name] = intval($value);
break;
case 'secure':
$this->_config[$name] = $value;
break;
}
}
/**
* Create the IMAP object in the session.
*
* @param string $password Password.
*
* @throws IMP_Imap_Exception
*/
public function createImapObject($password)
{
$this->imp_imap->createImapObject(array(
'hostspec' => $this->hostspec,
'password' => new IMP_Imap_Password($password),
'port' => $this->port,
'secure' => $this->secure,
'username' => $this->username,
), $this->type == self::IMAP, strval($this));
}
/**
* Return mailbox name.
*
* @param string $id Base IMAP name.
*
* @return string IMP mailbox name.
*/
public function mailbox($id)
{
return strval($this) . "\0" . $id;
}
/* Serializable methods. */
/**
*/
public function serialize()
{
return json_encode($this->_config);
}
/**
*/
public function unserialize($data)
{
$this->_config = json_decode($data, true);
}
}