1. 振替休日(カレンダーブロック)
制限事項:
・次月への振替休日は考慮していません。
・実在する日付の確認はしていません。
・配列変数$arrHolidayに[$year]の次元を追加しました。
data/class/SC_Date.php
public function isHoliday($year, $month, $day)
{
// -01 changed
if (is_null(SC_Date_Ex::$arrHoliday)) $this->setArrHoliday($year);
if (is_null(SC_Date_Ex::$arrHoliday[$year])) $this->setArrHoliday($year);
// -01 changed
if (is_null(SC_Date_Ex::$arrRegularHoliday)) $this->setRegularHoliday();
// -01 changed
if (!empty(SC_Date_Ex::$arrHoliday[$year][$month])) {
if (in_array($day, SC_Date_Ex::$arrHoliday[$year][$month])) {
// -01 changed
return true;
}
}
if (!empty(SC_Date_Ex::$arrRegularHoliday)) {
$day = date('w', mktime(0,0,0 ,$month, $day, $year));
if (in_array($day, SC_Date_Ex::$arrRegularHoliday)) {
return true;
}
}
return false;
}
// -01 changed
private function setArrHoliday($year)
// -01 changed
{
$objHoliday = new SC_Helper_Holiday_Ex();
$holiday = $objHoliday->getList();
// -01 changed
$arrHoliday[$year] = array();
foreach ($holiday AS $val) {
$arrHoliday[$year][$val['month']][] = $val['day'];
}
// -01 changed
// -01 added
// 振替休日の確認
$arrHolidayNew = array();
foreach ($arrHoliday[$year] AS $month => $arrDay) {
foreach ($arrDay AS $key => $day) {
$weekHoliday = date('w', mktime(0, 0, 0, $month, $day, $year));
if ($weekHoliday == 0) {
// 日曜日
$newDay = $day;
// 休日でない日は?
do {
$newDay += 1;
} while(in_array($newDay, $arrDay));
// 振替休日
$arrHolidayNew[$year][$month][] = $newDay;
}
}
}
// 振替休日の追加
foreach ($arrHolidayNew as $year => $arrMonth) {
foreach ($arrMonth as $month => $arrDay) {
foreach ($arrDay as $day) {
$arrHoliday[$year][$month][] = $day;
}
}
}
// -01 added
SC_Date_Ex::$arrHoliday = $arrHoliday;
}
data/Smarty/templates/admin/basis/holiday.tpl
<!--{* -01 deleted
<br />
<span class="attention">振替休日は自動設定されないので、振替え先の日付を設定してください。</span>
-01 deleted *}-->
2. 第2月曜・第3月曜
制限事項:
・実在する日付の確認はしていません。
仕様:
dtb_holidayテーブルに、「第2月曜・第3月曜」を示す日付を格納する。
上記日付は、「-xy」
-:「第xy曜」
x:第?週
y:曜日(0:日曜〜6:土曜)
つまり、
-21:第2月曜
-31:第3月曜
data/class/SC_Date.php
新規追加
// -02 added
public function getDayHoliday($default = false)
{
$day_array = array();
if ($default) $day_array[''] = '--';
// 0:日曜〜6:土曜
$day_array[-21] = '第2月曜';
$day_array[-31] = '第3月曜';
for ($i=0; $i < 31; $i++) {
$day_array[ $i + 1 ] = $i + 1;
}
return $day_array;
}
// -02 added
data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php
public function action()
{
$objHoliday = new SC_Helper_Holiday_Ex();
$objDate = new SC_Date_Ex();
$this->arrMonth = $objDate->getMonth();
// -02 changed
$this->arrDay = $objDate->getDayHoliday();
// -02 changed
data/Smarty/templates/admin/basis/holiday.tpl
<td><!--{$arrHoliday[cnt].title|h}--></td>
<!--{* -02 changed *}-->
<!--{assign var=holiday_day value=$arrHoliday[cnt].day}-->
<td><!--{$arrHoliday[cnt].month|h}-->月<!--{$arrDay[$holiday_day]|h}-->日</td>
<!--{* -02 changed *}-->
data/class/SC_Date.php
上記、1.の修正分に追加
private function setArrHoliday($year)
{
$objHoliday = new SC_Helper_Holiday_Ex();
$holiday = $objHoliday->getList();
$arrHoliday[$year] = array();
foreach ($holiday AS $val) {
// -02 added
if ($val['day'] < 0) {
// その月の始まりは何曜日か(0:日曜〜6:土曜)
$weekly1st = date('w', mktime(0, 0, 0, $val['month'], 1, $year));
// 求めたい曜日:$targetWeeklyDay
$targetWeeklyDay = abs($val['day']) % 10;
// 指定された曜日の第1週
$firstDay = ($targetWeeklyDay - $weekly1st >= 0) ? 1 + $targetWeeklyDay - $weekly1st : 1 + $targetWeeklyDay - $weekly1st + 7;
// 求めたい週:$week
$week = intval(abs($val['day']) / 10);
// 日にちを算出:$day
$targetDay = $firstDay + ( 7 * ($week - 1) );
$arrHoliday[$year][$val['month']][] = $targetDay;
} else {
// -02 added
$arrHoliday[$year][$val['month']][] = $val['day'];
// -02 added
}
// -02 added
}
// 振替休日の確認