/** * Store a rule. * * @param integer $action Storage action. * @param Ingo_Rule $rule Rule the action affects. */ protected function _store($action, $rule = null) { global $session; $this->_storeBackend($action, $rule); switch ($action) { case self::STORE_UPDATE: if ($rule instanceof Ingo_Rule_System_Blacklist) { $tmp = $this->getSystemRule('Ingo_Rule_System_Whitelist'); } elseif ($rule instanceof Ingo_Rule_System_Whitelist) { $tmp = $this->getSystemRule('Ingo_Rule_System_Blacklist'); } else { $tmp = null; } if (!is_null($tmp)) { /* Filter out the rule's addresses in the opposite filter. */ $ob = new Horde_Mail_Rfc822_List($tmp->addresses); $ob->setIteratorFilter(0, $rule->addresses); $tmp->addresses = $ob->bare_addresses; $this->_storeBackend($action, $tmp); } break; } $session->set('ingo', 'change', time()); }
/** * Builds a string containing a list of addresses. * * @param Horde_Mail_Rfc822_List $addrlist An address list. * @param Horde_Url $addURL The self URL. * @param boolean $link Link each address to the * compose screen? * * @return string String containing the formatted address list. */ protected function _buildAddressLinks(Horde_Mail_Rfc822_List $addrlist, $addURL = null, $link = true) { global $prefs, $registry; $add_link = null; $addr_array = array(); /* Set up the add address icon link if contact manager is * available. */ if (!is_null($addURL) && $link && $prefs->getValue('add_source')) { try { $add_link = $registry->hasMethod('contacts/import') ? $addURL->copy()->add('actionID', 'add_address') : null; } catch (Horde_Exception $e) { } } $addrlist->setIteratorFilter(); foreach ($addrlist->base_addresses as $ob) { if ($ob instanceof Horde_Mail_Rfc822_Group) { $group_array = array(); foreach ($ob->addresses as $ad) { $ret = htmlspecialchars(strval($ad)); if ($link) { $clink = new IMP_Compose_Link(array('to' => strval($ad))); $ret = Horde::link($clink->link(), sprintf(_("New Message to %s"), strval($ad))) . $ret . '</a>'; } /* Append the add address icon to every address if contact * manager is available. */ if ($add_link) { $curr_link = $add_link->copy()->add(array('address' => $ad->bare_address, 'name' => $ad->personal)); $ret .= Horde::link($curr_link, sprintf(_("Add %s to my Address Book"), $ad->bare_address)) . '<span class="iconImg addrbookaddImg"></span></a>'; } $group_array[] = $ret; } $addr_array[] = htmlspecialchars($ob->groupname) . ':' . (count($group_array) ? ' ' . implode(', ', $group_array) : ''); } else { $ret = htmlspecialchars(strval($ob)); if ($link) { $clink = new IMP_Compose_Link(array('to' => strval($ob))); $ret = Horde::link($clink->link(), sprintf(_("New Message to %s"), strval($ob))) . $ret . '</a>'; } /* Append the add address icon to every address if contact * manager is available. */ if ($add_link) { $curr_link = $add_link->copy()->add(array('address' => $ob->bare_address, 'name' => $ob->personal)); $ret .= Horde::link($curr_link, sprintf(_("Add %s to my Address Book"), $ob->bare_address)) . '<span class="iconImg addrbookaddImg"></span></a>'; } $addr_array[] = $ret; } } /* If left with an empty address list ($ret), inform the user that the * recipient list is purposely "undisclosed". */ if (empty($addr_array)) { $ret = _("Undisclosed Recipients"); } else { /* Build the address line. */ $addr_count = count($addr_array); $ret = '<span class="nowrap">' . implode(',</span> <span class="nowrap">', $addr_array) . '</span>'; if ($link && $addr_count > 15) { $ret = '<span>' . '<span onclick="[ this, this.next(), this.next(1) ].invoke(\'toggle\')" class="widget largeaddrlist">' . sprintf(_("Show Addresses (%d)"), $addr_count) . '</span>' . '<span onclick="[ this, this.previous(), this.next() ].invoke(\'toggle\')" class="widget largeaddrlist" style="display:none">' . _("Hide Addresses") . '</span>' . '<span style="display:none">' . $ret . '</span></span>'; } } return $ret; }
public function testIterateEmptyArray() { $ob = new Horde_Mail_Rfc822_List(); foreach ($ob as $val) { $this->fail('Nothing to iterate.'); } $ob = new Horde_Mail_Rfc822_List(new Horde_Mail_Rfc822_Group()); $ob->setIteratorFilter(Horde_Mail_Rfc822_List::HIDE_GROUPS); foreach ($ob as $val) { $this->fail('Nothing to iterate.'); } }
/** * Updates a list (blacklist/whitelist) filter. * * @param mixed $addresses Addresses of the filter. * @param integer $type Type of filter. * * @return Horde_Storage_Rule The filter object. */ public static function updateListFilter($addresses, $type) { global $injector; $storage = $injector->getInstance('Ingo_Factory_Storage')->create(); $rule = $storage->retrieve($type); switch ($type) { case $storage::ACTION_BLACKLIST: $rule->setBlacklist($addresses); $addr = $rule->getBlacklist(); $rule2 = $storage->retrieve($storage::ACTION_WHITELIST); $addr2 = $rule2->getWhitelist(); break; case $storage::ACTION_WHITELIST: $rule->setWhitelist($addresses); $addr = $rule->getWhitelist(); $rule2 = $storage->retrieve($storage::ACTION_BLACKLIST); $addr2 = $rule2->getBlacklist(); break; } /* Filter out the rule's addresses in the opposite filter. */ $ob = new Horde_Mail_Rfc822_List($addr2); $ob->setIteratorFilter(0, $addr); switch ($type) { case $storage::ACTION_BLACKLIST: $rule2->setWhitelist($ob->bare_addresses); break; case $storage::ACTION_WHITELIST: $rule2->setBlacklist($ob->bare_addresses); break; } $storage->store($rule); $storage->store($rule2); return $rule; }