Sophie

Sophie

distrib > Mageia > 6 > i586 > media > core-release > by-pkgid > 8a30407c37be8503ac130bcf007073fc > files > 6

php-pear-Date_Holidays-0.21.8-8.mga6.noarch.rpm

<?php
/**
 * Example how to create an own driver-class for Date_Holidays
 *
 * To test this class, you have to copy it into the drivers-directory.
 *
 * The classname has to be something like Date_Holidays_Driver_*.
 * Otherwise it won't be compatible to be used within PEAR's strict directory
 * structure.
 *
 * PHP Version 5
 *
 * @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
 */
class Date_Holidays_Driver_Example extends Date_Holidays_Driver
{
    /**
     * Constructor
     *
     * Use the Date_Holidays::factory() method to construct an object of a
     * certain driver
     *
     * @access   protected
     */
    function Date_Holidays_Driver_Example()
    {
    }

    /**
     * Build the internal arrays that contain data about the calculated holidays
     *
     * @access   protected
     * @return   boolean true on success, otherwise a PEAR_ErrorStack object
     * @throws   object PEAR_ErrorStack
     */
    function _buildHolidays()
    {
        /**
         * If your driver is extending another driver-class and is not a direct
         * descendant of the Date_Holidays_Driver base-class you will want to
         * build this classes' holidays before you start with your turn.
         *
         * So just call the _buildHolidays() method of that class.
         */
        parent::_buildHolidays();

        /**
         * There are two methods to add a holiday. One for adding holidays in
         * general and on that can be used to add static holidays (every year
         * the same day).
         *
         * You always have to give the added holiday an unique internal name
         * within your driver.
         * This should describe the holiday as good as possible.
         *
         * Of course you need a date and a title (the default title should
         * always be in English)
         *
         * You can add as many translations as you want for your driver's
         * holidays.
         * Although the default title is in English you should add another one
         * with the correct locale setting.
         */

        /*
         * General method to add a holiday
         */

        // a static holiday
        $this->_addHoliday('jesusCircumcision',
                           $this->_year . '-01-01',
                           'Circumcision of Jesus');

        // a calculated holiday
        // if you are using helper methods to calculate movable holidays is
        // your own decision
        $fooDate = $this->_calcFirstMondayInJanuary();
        $this->_addHoliday('firstMondayInJan',
                           $fooDate,
                           'First monday in January');

        /*
         * Special method for adding static holidays:
         */
        $static = array('newYearsDay' => array('date'  => '01-01',
                                               'title' => 'New Year\'s Day'),
                        'valentinesDay'   => array('date' => '02-14',
                                              'title' => 'Valentine\'s Day'));
        $this->_addStaticHolidays($static);
        if (Date_Holidays::errorsOccurred()) {
            return Date_Holidays::getErrorStack();
        }
        return true;
    }

    /**
     * A helper method
     *
     * @access   private
     * @return   object Date date of first monday in actual years january
     */
    function _calcFirstMondayInJanuary()
    {
        $date = new Date($this->_year . '-01-01');
        while ($date->getDayOfWeek() != 1) {
            $date = $date->getNextDay();
        }
        return $date;
    }
}
?>