<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* Holiday.php
*
* PHP Version 5
*
* Copyright (c) 1997-2008 The PHP Group
*
* This source file is subject to version 3.0 of the PHP license,
* that is bundled with this package in the file LICENSE, and is
* available at through the world-wide-web at
* http://www.php.net/license/3_01.txt.
* If you did not receive a copy of the PHP license and are unable to
* obtain it through the world-wide-web, please send a note to
* license@php.net so we can mail you a copy immediately.
*
* @category Date
* @package Date_Holidays
* @author Carsten Lucke <luckec@tool-garage.de>
* @license http://www.php.net/license/3_01.txt PHP License 3.0.1
* @version CVS: $Id$
* @link http://pear.php.net/package/Date_Holidays
*/
/**
* Filter not found
*
* @access public
*/
define('DATE_HOLIDAYS_FILTER_NOT_FOUND', 200);
/**
* Class that acts like a single filter but actually is a compound of
* an arbitrary number of filters.
*
* @category Date
* @package Date_Holidays
* @subpackage Filter
* @author Carsten Lucke <luckec@tool-garage.de>
* @license http://www.php.net/license/3_01.txt PHP License 3.0.1
* @version CVS: $Id$
* @link http://pear.php.net/package/Date_Holidays
*/
class Date_Holidays_Filter_Composite extends Date_Holidays_Filter
{
/**
* List of filters.
*
* @access private
* @var array
*/
var $_filters = array();
/**
* Constructor.
*/
function __construct()
{
parent::__construct(array());
}
/**
* Constructor.
*/
function Date_Holidays_Filter_Composite()
{
$this->__construct();
}
/**
* Lets the filter decide whether a holiday shall be processed or not.
*
* @param string $holiday a holidays' internal name
*
* @return boolean true, if a holidays shall be processed, false otherwise
*/
function accept($holiday)
{
foreach (array_keys($this->_filters) as $fId) {
if ($this->_filters[$fId]->accept($holiday)) {
return true;
}
}
return false;
}
/**
* Add a filter to the compound.
*
* @param Date_Holidays_Filter $filter filter object
*
* @access public
* @return boolean true on success, false otherwise
*/
function addFilter($filter)
{
if (! is_a($filter, 'Date_Holidays_Filter')) {
return false;
}
$id = md5(serialize($filter));
$this->_filters[$id] = $filter;
return true;
}
/**
* Remove a filter from the compound.
*
* @param Date_Holidays_Filter $filter filter object
*
* @access public
* @return boolean true on success, otherwise a PEAR_Error object
* @throws PEAR_Error DATE_HOLIDAYS_FILTER_NOT_FOUND
*/
function removeFilter($filter)
{
if (! is_a($filter, 'Date_Holidays_Filter')) {
return false;
}
$id = md5(serialize($filter));
// unset filter object
if (! isset($this->_filters[$id])) {
return Date_Holidays::raiseError(DATE_HOLIDAYS_FILTER_NOT_FOUND,
'Filter not found');
}
unset($this->_drivers[$id]);
return true;
}
}
?>