Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
/* vim: set expandtab tabstop=4 shiftwidth=4: */
3
 
4
/**
5
 * Contains the Calendar_Month_Weekdays class
6
 *
7
 * PHP versions 4 and 5
8
 *
9
 * LICENSE: Redistribution and use in source and binary forms, with or without
10
 * modification, are permitted provided that the following conditions are met:
11
 * 1. Redistributions of source code must retain the above copyright
12
 *    notice, this list of conditions and the following disclaimer.
13
 * 2. Redistributions in binary form must reproduce the above copyright
14
 *    notice, this list of conditions and the following disclaimer in the
15
 *    documentation and/or other materials provided with the distribution.
16
 * 3. The name of the author may not be used to endorse or promote products
17
 *    derived from this software without specific prior written permission.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
20
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22
 * IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
23
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
 *
30
 * @category  Date and Time
31
 * @package   Calendar
32
 * @author    Harry Fuecks <hfuecks@phppatterns.com>
33
 * @copyright 2003-2007 Harry Fuecks
34
 * @license   http://www.debian.org/misc/bsd.license  BSD License (3 Clause)
35
 * @version   CVS: $Id: Weekdays.php 300729 2010-06-24 12:05:53Z quipo $
36
 * @link      http://pear.php.net/package/Calendar
37
 */
38
 
39
/**
40
 * Allows Calendar include path to be redefined
41
 * @ignore
42
 */
43
if (!defined('CALENDAR_ROOT')) {
44
    define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR);
45
}
46
 
47
/**
48
 * Load Calendar base class
49
 */
50
require_once CALENDAR_ROOT.'Calendar.php';
51
 
52
/**
53
 * Load base month
54
 */
55
require_once CALENDAR_ROOT.'Month.php';
56
 
57
/**
58
 * Represents a Month and builds Days in tabular form<br>
59
 * <code>
60
 * require_once 'Calendar/Month/Weekdays.php';
61
 * $Month = new Calendar_Month_Weekdays(2003, 10); // Oct 2003
62
 * $Month->build(); // Build Calendar_Day objects
63
 * while ($Day = & $Month->fetch()) {
64
 *     if ($Day->isFirst()) {
65
 *         echo '<tr>';
66
 *     }
67
 *     if ($Day->isEmpty()) {
68
 *         echo '<td>&nbsp;</td>';
69
 *     } else {
70
 *         echo '<td>'.$Day->thisDay().'</td>';
71
 *     }
72
 *     if ($Day->isLast()) {
73
 *         echo '</tr>';
74
 *     }
75
 * }
76
 * </code>
77
 *
78
 * @category  Date and Time
79
 * @package   Calendar
80
 * @author    Harry Fuecks <hfuecks@phppatterns.com>
81
 * @copyright 2003-2007 Harry Fuecks
82
 * @license   http://www.debian.org/misc/bsd.license  BSD License (3 Clause)
83
 * @link      http://pear.php.net/package/Calendar
84
 * @access    public
85
 */
86
class Calendar_Month_Weekdays extends Calendar_Month
87
{
88
    /**
89
     * Instance of Calendar_Table_Helper
90
     * @var Calendar_Table_Helper
91
     * @access private
92
     */
93
    var $tableHelper;
94
 
95
    /**
96
     * First day of the week
97
     * @access private
98
     * @var string
99
     */
100
    var $firstDay;
101
 
102
    /**
103
     * Constructs Calendar_Month_Weekdays
104
     *
105
     * @param int $y        year e.g. 2003
106
     * @param int $m        month e.g. 5
107
     * @param int $firstDay (optional) first day of week (e.g. 0 for Sunday, 2 for Tuesday etc.)
108
     *
109
     * @access public
110
     */
111
    function Calendar_Month_Weekdays($y, $m, $firstDay=null)
112
    {
113
        parent::Calendar_Month($y, $m, $firstDay);
114
    }
115
 
116
    /**
117
     * Builds Day objects in tabular form, to allow display of calendar month
118
     * with empty cells if the first day of the week does not fall on the first
119
     * day of the month.
120
     *
121
     * @param array $sDates (optional) Calendar_Day objects representing selected dates
122
     *
123
     * @return boolean
124
     * @access public
125
     * @see Calendar_Day::isEmpty()
126
     * @see Calendar_Day_Base::isFirst()
127
     * @see Calendar_Day_Base::isLast()
128
     */
129
    function build($sDates = array())
130
    {
131
        include_once CALENDAR_ROOT.'Table/Helper.php';
132
        $this->tableHelper = new Calendar_Table_Helper($this, $this->firstDay);
133
        Calendar_Month::build($sDates);
134
        $this->buildEmptyDaysBefore();
135
        $this->shiftDays();
136
        $this->buildEmptyDaysAfter();
137
        $this->setWeekMarkers();
138
        return true;
139
    }
140
 
141
    /**
142
     * Prepends empty days before the real days in the month
143
     *
144
     * @return void
145
     * @access private
146
     */
147
    function buildEmptyDaysBefore()
148
    {
149
        $eBefore = $this->tableHelper->getEmptyDaysBefore();
150
        for ($i=0; $i < $eBefore; $i++) {
151
            $stamp = $this->cE->dateToStamp($this->year, $this->month, -$i);
152
            $Day = new Calendar_Day(
153
                                $this->cE->stampToYear($stamp),
154
                                $this->cE->stampToMonth($stamp),
155
                                $this->cE->stampToDay($stamp));
156
            $Day->setEmpty();
157
            $Day->adjust();
158
            array_unshift($this->children, $Day);
159
        }
160
    }
161
 
162
    /**
163
     * Shifts the array of children forward, if necessary
164
     *
165
     * @return void
166
     * @access private
167
     */
168
    function shiftDays()
169
    {
170
        if (isset($this->children[0])) {
171
            array_unshift($this->children, null);
172
            unset($this->children[0]);
173
        }
174
    }
175
 
176
    /**
177
     * Appends empty days after the real days in the month
178
     *
179
     * @return void
180
     * @access private
181
     */
182
    function buildEmptyDaysAfter()
183
    {
184
        $eAfter = $this->tableHelper->getEmptyDaysAfter();
185
        $sDOM   = $this->tableHelper->getNumTableDaysInMonth();
186
        for ($i=1; $i <= $sDOM-$eAfter; $i++) {
187
            $Day = new Calendar_Day($this->year, $this->month+1, $i);
188
            $Day->setEmpty();
189
            $Day->adjust();
190
            array_push($this->children, $Day);
191
        }
192
    }
193
 
194
    /**
195
     * Sets the "markers" for the beginning and of a of week, in the
196
     * built Calendar_Day children
197
     *
198
     * @return void
199
     * @access private
200
     */
201
    function setWeekMarkers()
202
    {
203
        $dIW = $this->cE->getDaysInWeek(
204
            $this->thisYear(),
205
            $this->thisMonth(),
206
            $this->thisDay()
207
        );
208
        $sDOM = $this->tableHelper->getNumTableDaysInMonth();
209
        for ($i=1; $i <= $sDOM; $i+= $dIW) {
210
            $this->children[$i]->setFirst();
211
            $this->children[$i+($dIW-1)]->setLast();
212
        }
213
    }
214
}
215
?>