<?php
/**
 * Example how to use a driver to determine holidays
 *
 * PHP Version 4
 *
 * @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
 * @link     http://pear.php.net/package/Date_Holidays
 */ 

require_once 'Date/Holidays.php';

/**
 * Create a driver object using the factory method
 *
 * You must determine a valid driver-name.
 * If you don't specify a locale, your system's locale will be used.
 * If you don't specify a year, the current one will be used.
 */
$germany = Date_Holidays::factory('Germany', 2004, 'en_EN');
if (Date_Holidays::isError($germany)) {
    die('Factory was unable to produce driver-object');
}

/**
 * Now that you have created a driver, all the methods that Date_Holidays_Driver
 * defines are available for usage. {@link Date_Holidays_Driver}
 */
 
 
/**
 * Date holidays uses an internal name for each holiday and many methods 
 * require one as a parameter. 
 * The following method returns an array with internal names of all holidays 
 * the driver knows.
 */
$internalNames = $germany->getInternalHolidayNames();
print_r($internalNames);

/**
 * Let's retrieve holiday data for Easter.
 *
 * On success an object will be returned, that contains 
 * the data about the requested holiday.
 *
 * You may specify a locale that differs from the driver's one
 * to get data in other languages for single method calls.
 */
$easter = $germany->getHoliday('easter', 'de_DE');
if (! Date_Holidays::isError($easter)) {
    print_r($easter->toArray());
}

/**
 * This methods checks whether a specific date is a holiday.
 *
 * Valid params for $date are a string (YYYY-MM-DD),
 * a timestamp and a PEAR::Date object
 */
$holiday = $germany->getHolidayForDate('2004-06-10', 'de_DE', false);
if (! Date_Holidays::isError($holiday) && ! is_null($holiday)) {
    print_r($holiday->toArray());
}

/**
 * Although you will certainly not use it very often, you may change the
 * driver's locale setting. This will affect all methods that are executed 
 * after changing the locale!
 *
 * Many methods also accept a locale setting that 
 * will be temporarily used during the method's processing time.
 */
$germany->setLocale('de_DE');

/**
 * As many driver may contain lots of holidays, most methods 
 * accept a param $restrict that allows you to limit the relevant holidays.
 *
 * If you don't specify $restrict, all holidays the driver knows will be processed.
 */
$restrict = array(
    'goodFriday',
    'easter',
    'easterMonday',
    'whitsun',
    'whitMonday'
);
$titles = $germany->getHolidayTitles($restrict);
if (! Date_Holidays::isError($titles)) {
    print_r($titles);
}

/**
 * When you produce a driver the current year or the one you specified will be
 * set and the holidays for this year will be calculated.
 * 
 * To change the year at a later point you can use Date_Holidays_Driver::setYear().
 * When doing so, the driver-class will automatically calculate the new year's 
 * holidays.
 */
echo $germany->getYear() . "\n";
$whitsun2004 = $germany->getHoliday('whitsun');
if (! Date_Holidays::isError($whitsun2004)) {
    print_r($whitsun2004->toArray());
}
$germany->setYear(2005);
$whitsun2005 = $germany->getHoliday('whitsun');
if (! Date_Holidays::isError($whitsun2005)) {
    print_r($whitsun2005->toArray());
}
?>
