home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Calendar / Decorator.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  15.6 KB  |  558 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4: */
  3. //
  4. // +----------------------------------------------------------------------+
  5. // | PHP Version 4                                                        |
  6. // +----------------------------------------------------------------------+
  7. // | Copyright (c) 1997-2002 The PHP Group                                |
  8. // +----------------------------------------------------------------------+
  9. // | This source file is subject to version 2.02 of the PHP license,      |
  10. // | that is bundled with this package in the file LICENSE, and is        |
  11. // | available at through the world-wide-web at                           |
  12. // | http://www.php.net/license/3_0.txt.                                  |
  13. // | If you did not receive a copy of the PHP license and are unable to   |
  14. // | obtain it through the world-wide-web, please send a note to          |
  15. // | license@php.net so we can mail you a copy immediately.               |
  16. // +----------------------------------------------------------------------+
  17. // | Authors: Harry Fuecks <hfuecks@phppatterns.com>                      |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: Decorator.php,v 1.3 2005/10/22 10:29:46 quipo Exp $
  21. //
  22. /**
  23.  * @package Calendar
  24.  * @version $Id: Decorator.php,v 1.3 2005/10/22 10:29:46 quipo Exp $
  25.  */
  26. /**
  27.  * Decorates any calendar class.
  28.  * Create a subclass of this class for your own "decoration".
  29.  * Used for "selections"
  30.  * <code>
  31.  * class DayDecorator extends Calendar_Decorator
  32.  * {
  33.  *     function thisDay($format = 'int')
  34.  *     {
  35. .*         $day = parent::thisDay('timestamp');
  36. .*         return date('D', $day);
  37.  *     }
  38.  * }
  39.  * $Day = & new Calendar_Day(2003, 10, 25);
  40.  * $DayDecorator = & new DayDecorator($Day);
  41.  * echo $DayDecorator->thisDay(); // Outputs "Sat"
  42.  * </code>
  43.  * @abstract
  44.  * @package Calendar
  45.  */
  46. class Calendar_Decorator
  47. {
  48.     /**
  49.      * Subclass of Calendar being decorated
  50.      * @var object
  51.      * @access private
  52.      */
  53.     var $calendar;
  54.  
  55.     /**
  56.      * Constructs the Calendar_Decorator
  57.      * @param object subclass to Calendar to decorate
  58.      */
  59.     function Calendar_Decorator(& $calendar)
  60.     {
  61.         $this->calendar = & $calendar;
  62.     }
  63.  
  64.     /**
  65.      * Defines the calendar by a Unix timestamp, replacing values
  66.      * passed to the constructor
  67.      * @param int Unix timestamp
  68.      * @return void
  69.      * @access public
  70.      */
  71.     function setTimestamp($ts)
  72.     {
  73.         $this->calendar->setTimestamp($ts);
  74.     }
  75.  
  76.     /**
  77.      * Returns a timestamp from the current date / time values. Format of
  78.      * timestamp depends on Calendar_Engine implementation being used
  79.      * @return int timestamp
  80.      * @access public
  81.      */
  82.     function getTimestamp()
  83.     {
  84.         return $this->calendar->getTimeStamp();
  85.     }
  86.  
  87.     /**
  88.      * Defines calendar object as selected (e.g. for today)
  89.      * @param boolean state whether Calendar subclass
  90.      * @return void
  91.      * @access public
  92.      */
  93.     function setSelected($state = true)
  94.     {
  95.         $this->calendar->setSelected($state = true);
  96.     }
  97.  
  98.     /**
  99.      * True if the calendar subclass object is selected (e.g. today)
  100.      * @return boolean
  101.      * @access public
  102.      */
  103.     function isSelected()
  104.     {
  105.         return $this->calendar->isSelected();
  106.     }
  107.  
  108.     /**
  109.      * Adjusts the date (helper method)
  110.      * @return void
  111.      * @access public
  112.      */
  113.     function adjust()
  114.     {
  115.         $this->calendar->adjust();
  116.     }
  117.  
  118.     /**
  119.      * Returns the date as an associative array (helper method)
  120.      * @param mixed timestamp (leave empty for current timestamp)
  121.      * @return array
  122.      * @access public
  123.      */
  124.     function toArray($stamp=null)
  125.     {
  126.         return $this->calendar->toArray($stamp);
  127.     }
  128.  
  129.     /**
  130.      * Returns the value as an associative array (helper method)
  131.      * @param string type of date object that return value represents
  132.      * @param string $format ['int' | 'array' | 'timestamp' | 'object']
  133.      * @param mixed timestamp (depending on Calendar engine being used)
  134.      * @param int integer default value (i.e. give me the answer quick)
  135.      * @return mixed
  136.      * @access private
  137.      */
  138.     function returnValue($returnType, $format, $stamp, $default)
  139.     {
  140.         return $this->calendar->returnValue($returnType, $format, $stamp, $default);
  141.     }
  142.  
  143.     /**
  144.      * Defines Day object as first in a week
  145.      * Only used by Calendar_Month_Weekdays::build()
  146.      * @param boolean state
  147.      * @return void
  148.      * @access private
  149.      */
  150.     function setFirst ($state = true)
  151.     {
  152.         if ( method_exists($this->calendar,'setFirst') ) {
  153.             $this->calendar->setFirst($state);
  154.         }
  155.     }
  156.  
  157.     /**
  158.      * Defines Day object as last in a week
  159.      * Used only following Calendar_Month_Weekdays::build()
  160.      * @param boolean state
  161.      * @return void
  162.      * @access private
  163.      */
  164.     function setLast($state = true)
  165.     {
  166.         if ( method_exists($this->calendar,'setLast') ) {
  167.             $this->calendar->setLast($state);
  168.         }
  169.     }
  170.  
  171.     /**
  172.      * Returns true if Day object is first in a Week
  173.      * Only relevant when Day is created by Calendar_Month_Weekdays::build()
  174.      * @return boolean
  175.      * @access public
  176.      */
  177.     function isFirst() {
  178.         if ( method_exists($this->calendar,'isFirst') ) {
  179.             return $this->calendar->isFirst();
  180.         }
  181.     }
  182.  
  183.     /**
  184.      * Returns true if Day object is last in a Week
  185.      * Only relevant when Day is created by Calendar_Month_Weekdays::build()
  186.      * @return boolean
  187.      * @access public
  188.      */
  189.     function isLast()
  190.     {
  191.         if ( method_exists($this->calendar,'isLast') ) {
  192.             return $this->calendar->isLast();
  193.         }
  194.     }
  195.  
  196.     /**
  197.      * Defines Day object as empty
  198.      * Only used by Calendar_Month_Weekdays::build()
  199.      * @param boolean state
  200.      * @return void
  201.      * @access private
  202.      */
  203.     function setEmpty ($state = true)
  204.     {
  205.         if ( method_exists($this->calendar,'setEmpty') ) {
  206.             $this->calendar->setEmpty($state);
  207.         }
  208.     }
  209.  
  210.     /**
  211.      * @return boolean
  212.      * @access public
  213.      */
  214.     function isEmpty()
  215.     {
  216.         if ( method_exists($this->calendar,'isEmpty') ) {
  217.             return $this->calendar->isEmpty();
  218.         }
  219.     }
  220.  
  221.     /**
  222.      * Build the children
  223.      * @param array containing Calendar objects to select (optional)
  224.      * @return boolean
  225.      * @access public
  226.      * @abstract
  227.      */
  228.     function build($sDates = array())
  229.     {
  230.         $this->calendar->build($sDates);
  231.     }
  232.  
  233.     /**
  234.      * Iterator method for fetching child Calendar subclass objects
  235.      * (e.g. a minute from an hour object). On reaching the end of
  236.      * the collection, returns false and resets the collection for
  237.      * further iteratations.
  238.      * @return mixed either an object subclass of Calendar or false
  239.      * @access public
  240.      */
  241.     function fetch()
  242.     {
  243.         return $this->calendar->fetch();
  244.     }
  245.  
  246.     /**
  247.      * Fetches all child from the current collection of children
  248.      * @return array
  249.      * @access public
  250.      */
  251.     function fetchAll()
  252.     {
  253.         return $this->calendar->fetchAll();
  254.     }
  255.  
  256.     /**
  257.      * Get the number Calendar subclass objects stored in the internal
  258.      * collection.
  259.      * @return int
  260.      * @access public
  261.      */
  262.     function size()
  263.     {
  264.         return $this->calendar->size();
  265.     }
  266.  
  267.     /**
  268.      * Determine whether this date is valid, with the bounds determined by
  269.      * the Calendar_Engine. The call is passed on to
  270.      * Calendar_Validator::isValid
  271.      * @return boolean
  272.      * @access public
  273.      */
  274.     function isValid()
  275.     {
  276.         return $this->calendar->isValid();
  277.     }
  278.  
  279.     /**
  280.      * Returns an instance of Calendar_Validator
  281.      * @return Calendar_Validator
  282.      * @access public
  283.      */
  284.     function & getValidator()
  285.     {
  286.         $validator = $this->calendar->getValidator();
  287.         return $validator;
  288.     }
  289.  
  290.     /**
  291.      * Returns a reference to the current Calendar_Engine being used. Useful
  292.      * for Calendar_Table_Helper and Calendar_Validator
  293.      * @return object implementing Calendar_Engine_Inteface
  294.      * @access private
  295.      */
  296.     function & getEngine()
  297.     {
  298.         return $this->calendar->getEngine();
  299.     }
  300.  
  301.     /**
  302.      * Returns the value for the previous year
  303.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  304.      * @return int e.g. 2002 or timestamp
  305.      * @access public
  306.      */
  307.     function prevYear($format = 'int')
  308.     {
  309.         return $this->calendar->prevYear($format);
  310.     }
  311.  
  312.     /**
  313.      * Returns the value for this year
  314.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  315.      * @return int e.g. 2003 or timestamp
  316.      * @access public
  317.      */
  318.     function thisYear($format = 'int')
  319.     {
  320.         return $this->calendar->thisYear($format);
  321.     }
  322.  
  323.     /**
  324.      * Returns the value for next year
  325.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  326.      * @return int e.g. 2004 or timestamp
  327.      * @access public
  328.      */
  329.     function nextYear($format = 'int')
  330.     {
  331.         return $this->calendar->nextYear($format);
  332.     }
  333.  
  334.     /**
  335.      * Returns the value for the previous month
  336.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  337.      * @return int e.g. 4 or Unix timestamp
  338.      * @access public
  339.       */
  340.     function prevMonth($format = 'int')
  341.     {
  342.         return $this->calendar->prevMonth($format);
  343.     }
  344.  
  345.     /**
  346.      * Returns the value for this month
  347.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  348.      * @return int e.g. 5 or timestamp
  349.      * @access public
  350.      */
  351.     function thisMonth($format = 'int')
  352.     {
  353.         return $this->calendar->thisMonth($format);
  354.     }
  355.  
  356.     /**
  357.      * Returns the value for next month
  358.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  359.      * @return int e.g. 6 or timestamp
  360.      * @access public
  361.      */
  362.     function nextMonth($format = 'int')
  363.     {
  364.         return $this->calendar->nextMonth($format);
  365.     }
  366.  
  367.     /**
  368.      * Returns the value for the previous week
  369.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  370.      * @return int e.g. 4 or Unix timestamp
  371.      * @access public
  372.       */
  373.     function prevWeek($format = 'n_in_month')
  374.     {
  375.         if ( method_exists($this->calendar,'prevWeek') ) {
  376.             return $this->calendar->prevWeek($format);
  377.         } else {
  378.             require_once 'PEAR.php';
  379.             PEAR::raiseError(
  380.                 'Cannot call prevWeek on Calendar object of type: '.
  381.                 get_class($this->calendar), 133, PEAR_ERROR_TRIGGER,
  382.                 E_USER_NOTICE, 'Calendar_Decorator::prevWeek()');
  383.             return false;
  384.         }
  385.     }
  386.  
  387.     /**
  388.      * Returns the value for this week
  389.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  390.      * @return int e.g. 5 or timestamp
  391.      * @access public
  392.      */
  393.     function thisWeek($format = 'n_in_month')
  394.     {
  395.         if ( method_exists($this->calendar,'thisWeek') ) {
  396.             return $this->calendar->thisWeek($format);
  397.         } else {
  398.             require_once 'PEAR.php';
  399.             PEAR::raiseError(
  400.                 'Cannot call thisWeek on Calendar object of type: '.
  401.                 get_class($this->calendar), 133, PEAR_ERROR_TRIGGER,
  402.                 E_USER_NOTICE, 'Calendar_Decorator::thisWeek()');
  403.             return false;
  404.         }
  405.     }
  406.  
  407.     /**
  408.      * Returns the value for next week
  409.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  410.      * @return int e.g. 6 or timestamp
  411.      * @access public
  412.      */
  413.     function nextWeek($format = 'n_in_month')
  414.     {
  415.         if ( method_exists($this->calendar,'nextWeek') ) {
  416.             return $this->calendar->nextWeek($format);
  417.         } else {
  418.             require_once 'PEAR.php';
  419.             PEAR::raiseError(
  420.                 'Cannot call thisWeek on Calendar object of type: '.
  421.                 get_class($this->calendar), 133, PEAR_ERROR_TRIGGER,
  422.                 E_USER_NOTICE, 'Calendar_Decorator::nextWeek()');
  423.             return false;
  424.         }
  425.     }
  426.  
  427.     /**
  428.      * Returns the value for the previous day
  429.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  430.      * @return int e.g. 10 or timestamp
  431.      * @access public
  432.      */
  433.     function prevDay($format = 'int') {
  434.         return $this->calendar->prevDay($format);
  435.     }
  436.  
  437.     /**
  438.      * Returns the value for this day
  439.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  440.      * @return int e.g. 11 or timestamp
  441.      * @access public
  442.      */
  443.     function thisDay($format = 'int')
  444.     {
  445.         return $this->calendar->thisDay($format);
  446.     }
  447.  
  448.     /**
  449.      * Returns the value for the next day
  450.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  451.      * @return int e.g. 12 or timestamp
  452.      * @access public
  453.      */
  454.     function nextDay($format = 'int')
  455.     {
  456.         return $this->calendar->nextDay($format);
  457.     }
  458.  
  459.     /**
  460.      * Returns the value for the previous hour
  461.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  462.      * @return int e.g. 13 or timestamp
  463.      * @access public
  464.      */
  465.     function prevHour($format = 'int')
  466.     {
  467.         return $this->calendar->prevHour($format);
  468.     }
  469.  
  470.     /**
  471.      * Returns the value for this hour
  472.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  473.      * @return int e.g. 14 or timestamp
  474.      * @access public
  475.      */
  476.     function thisHour($format = 'int')
  477.     {
  478.         return $this->calendar->thisHour($format);
  479.     }
  480.  
  481.     /**
  482.      * Returns the value for the next hour
  483.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  484.      * @return int e.g. 14 or timestamp
  485.      * @access public
  486.      */
  487.     function nextHour($format = 'int')
  488.     {
  489.         return $this->calendar->nextHour($format);
  490.     }
  491.  
  492.     /**
  493.      * Returns the value for the previous minute
  494.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  495.      * @return int e.g. 23 or timestamp
  496.      * @access public
  497.      */
  498.     function prevMinute($format = 'int')
  499.     {
  500.         return $this->calendar->prevMinute($format);
  501.     }
  502.  
  503.     /**
  504.      * Returns the value for this minute
  505.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  506.      * @return int e.g. 24 or timestamp
  507.      * @access public
  508.      */
  509.     function thisMinute($format = 'int')
  510.     {
  511.         return $this->calendar->thisMinute($format);
  512.     }
  513.  
  514.     /**
  515.      * Returns the value for the next minute
  516.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  517.      * @return int e.g. 25 or timestamp
  518.      * @access public
  519.      */
  520.    function nextMinute($format = 'int')
  521.     {
  522.         return $this->calendar->nextMinute($format);
  523.     }
  524.  
  525.     /**
  526.      * Returns the value for the previous second
  527.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  528.      * @return int e.g. 43 or timestamp
  529.      * @access public
  530.      */
  531.     function prevSecond($format = 'int')
  532.     {
  533.         return $this->calendar->prevSecond($format);
  534.     }
  535.  
  536.     /**
  537.      * Returns the value for this second
  538.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  539.      * @return int e.g. 44 or timestamp
  540.      * @access public
  541.      */
  542.     function thisSecond($format = 'int')
  543.     {
  544.         return $this->calendar->thisSecond($format);
  545.     }
  546.  
  547.     /**
  548.      * Returns the value for the next second
  549.      * @param string return value format ['int' | 'timestamp' | 'object' | 'array']
  550.      * @return int e.g. 45 or timestamp
  551.      * @access public
  552.      */
  553.     function nextSecond($format = 'int')
  554.     {
  555.         return $this->calendar->nextSecond($format);
  556.     }
  557. }
  558. ?>