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

85 lines
2.1 KiB
PHP

<?php
/**
* Copyright 2011-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 2011-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*/
/**
* Provides an interface to query a mailbox's settable permanent flags.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2011-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*/
class IMP_Imap_PermanentFlags implements IteratorAggregate
{
/* IMAP flag indicating flags can be created in mailbox. */
const CREATE = "\\*";
/**
* Can new flags NOT be created?
*
* @var boolean
*/
protected $_nocreate = false;
/**
* List of unsettable flags.
*
* @var array
*/
protected $_noset = array();
/**
* List of settable flags.
*
* @var array
*/
protected $_set = array();
/**
* Constructor.
*
* @param array $permflags List of permanent flags in mailbox.
* @param array $flags List of flags in mailbox.
*/
public function __construct(array $permflags = array(),
array $flags = array())
{
$this->_nocreate = !in_array(self::CREATE, $permflags);
$this->_noset = array_diff($permflags, $flags, array(self::CREATE));
$this->_set = array_intersect($permflags, $flags);
}
/**
* Determines if the given flag is allowed to be changed permanently.
*
* @param string $flag The flag to query.
*
* @return boolean True if flag can be set permanently.
*/
public function allowed($flag)
{
$flag = strtolower($flag);
return (!in_array($flag, $this->_noset) &&
(!$this->_nocreate || in_array($flag, $this->_set)));
}
/* IteratorAggregate method. */
public function getIterator()
{
return new ArrayIterator($this->_set);
}
}