* @category Horde * @copyright 2012-2017 Horde LLC * @license http://www.horde.org/licenses/bsd New BSD License * @package Mail * * @property string $groupname Groupname (UTF-8). * @property-read string $groupname_encoded MIME encoded groupname (UTF-8). * @property-read string $label The shorthand label for this group. * @property-read boolean $valid Returns true if there is enough information * in object to create a valid address. */ class Horde_Mail_Rfc822_Group extends Horde_Mail_Rfc822_Object implements Countable { /** * List of group e-mail address objects. * * @var Horde_Mail_Rfc822_GroupList */ public $addresses; /** * Group name (MIME decoded). * * @var string */ protected $_groupname = 'Group'; /** * Constructor. * * @param string $groupname If set, used as the group name. * @param mixed $addresses If a GroupList object, used as the address * list. Any other non-null value is parsed and * used as the address list (addresses not * verified; sub-groups are ignored). */ public function __construct($groupname = null, $addresses = null) { if (!is_null($groupname)) { $this->groupname = $groupname; } if (is_null($addresses)) { $this->addresses = new Horde_Mail_Rfc822_GroupList(); } elseif ($addresses instanceof Horde_Mail_Rfc822_GroupList) { $this->addresses = clone $addresses; } else { $rfc822 = new Horde_Mail_Rfc822(); $this->addresses = $rfc822->parseAddressList($addresses, array( 'group' => true )); } } /** */ public function __set($name, $value) { switch ($name) { case 'groupname': $this->_groupname = Horde_Mime::decode($value); break; } } /** */ public function __get($name) { switch ($name) { case 'groupname': case 'label': return $this->_groupname; case 'groupname_encoded': return Horde_Mime::encode($this->_groupname); case 'valid': return (bool)strlen($this->_groupname); } } /** */ protected function _writeAddress($opts) { $addr = $this->addresses->writeAddress($opts); $groupname = $this->groupname; if (!empty($opts['encode'])) { $groupname = Horde_Mime::encode($groupname, $opts['encode']); } if (empty($opts['noquote'])) { $rfc822 = new Horde_Mail_Rfc822(); $groupname = $rfc822->encode($groupname, 'personal'); } if (!empty($opts['comment']) && !empty($this->comment)) { $rfc822 = new Horde_Mail_Rfc822(); foreach ($this->comment as $val) { $personal .= ' (' . $rfc822->encode($val, 'comment') . ')'; } } return ltrim($groupname) . ':' . (strlen($addr) ? (' ' . $addr) : '') . ';'; } /** */ public function match($ob) { return $this->addresses->match($ob); } /* Countable methods. */ /** * Address count. * * @return integer The number of addresses. */ public function count() { return count($this->addresses); } }