Esempio n. 1
0
 function get_mini_calendar_html($get_target = '', $query_string = '', $mode = '')
 {
     // 実行時間計測スタート
     // list( $usec , $sec ) = explode( " " , microtime() ) ;
     // $picalstarttime = $sec + $usec ;
     // $PHP_SELF = $_SERVER['SCRIPT_NAME'] ;
     // if( $get_target == '' ) $get_target = $PHP_SELF ;
     $original_level = error_reporting(E_ALL ^ E_NOTICE);
     require_once "{$this->base_path}/include/patTemplate.php";
     $tmpl = new PatTemplate();
     $tmpl->setBasedir("{$this->images_path}");
     // 表示モードに応じて、テンプレートファイルを振り分け
     switch ($mode) {
         case 'NO_YEAR':
             // 年間表示用
             $tmpl->readTemplatesFromFile("minical_for_yearly.tmpl.html");
             $target_highlight_flag = false;
             break;
         case 'NO_NAVIGATE':
             // 月間の下部参照用
             $tmpl->readTemplatesFromFile("minical_for_monthly.tmpl.html");
             $target_highlight_flag = false;
             break;
         default:
             // 通常のミニカレンダーブロック用
             $tmpl->readTemplatesFromFile("minical.tmpl.html");
             $target_highlight_flag = true;
             break;
     }
     // 当月の各日がイベントを持っているかどうかを取得
     $event_dates = $this->get_flags_date_has_events(mktime(0, 0, 0, $this->month, 1, $this->year), mktime(0, 0, 0, $this->month + 1, 1, $this->year));
     // 前月は月末、翌月は月初とする
     $prev_month = date("Y-n-j", mktime(0, 0, 0, $this->month, 0, $this->year));
     $next_month = date("Y-n-j", mktime(0, 0, 0, $this->month + 1, 1, $this->year));
     // $tmpl->addVar( "WholeBoard" , "PHP_SELF" , '' ) ;
     $tmpl->addVar("WholeBoard", "GET_TARGET", $get_target);
     $tmpl->addVar("WholeBoard", "QUERY_STRING", $query_string);
     $tmpl->addVar("WholeBoard", "MB_PREV_MONTH", _PICAL_MB_PREV_MONTH);
     $tmpl->addVar("WholeBoard", "MB_NEXT_MONTH", _PICAL_MB_NEXT_MONTH);
     $tmpl->addVar("WholeBoard", "MB_LINKTODAY", _PICAL_MB_LINKTODAY);
     $tmpl->addVar("WholeBoard", "SKINPATH", $this->images_url);
     $tmpl->addVar("WholeBoard", "FRAME_CSS", $this->frame_css);
     //	$tmpl->addVar( "WholeBoard" , "YEAR" , $this->year ) ;
     //	$tmpl->addVar( "WholeBoard" , "MONTH" , $this->month ) ;
     $tmpl->addVar("WholeBoard", "MONTH_NAME", $this->month_middle_names[$this->month]);
     $tmpl->addVar("WholeBoard", "YEAR_MONTH_TITLE", sprintf(_PICAL_FMT_YEAR_MONTH, $this->year, $this->month_middle_names[$this->month]));
     $tmpl->addVar("WholeBoard", "PREV_MONTH", $prev_month);
     $tmpl->addVar("WholeBoard", "NEXT_MONTH", $next_month);
     $tmpl->addVar("WholeBoard", "CALHEAD_BGCOLOR", $this->calhead_bgcolor);
     $tmpl->addVar("WholeBoard", "CALHEAD_COLOR", $this->calhead_color);
     $first_date = getdate(mktime(0, 0, 0, $this->month, 1, $this->year));
     $date = (-$first_date['wday'] + $this->week_start - 7) % 7;
     $wday_end = 7 + $this->week_start;
     // 曜日名ループ
     $rows = array();
     for ($wday = $this->week_start; $wday < $wday_end; $wday++) {
         if ($wday % 7 == 0) {
             //	Sunday
             $bgcolor = $this->sunday_bgcolor;
             $color = $this->sunday_color;
         } elseif ($wday == 6) {
             //	Saturday
             $bgcolor = $this->saturday_bgcolor;
             $color = $this->saturday_color;
         } else {
             // Weekday
             $bgcolor = $this->weekday_bgcolor;
             $color = $this->weekday_color;
         }
         // テンプレート用配列へのデータセット
         array_push($rows, array("BGCOLOR" => $bgcolor, "COLOR" => $color, "DAYNAME" => $this->week_short_names[$wday % 7]));
     }
     // テンプレートにデータを埋め込む
     $tmpl->addRows("DayNameLoop", $rows);
     $tmpl->parseTemplate("DayNameLoop", 'w');
     // 週 (row) ループ
     for ($week = 0; $week < 6; $week++) {
         $rows = array();
         // 日 (col) ループ
         for ($wday = $this->week_start; $wday < $wday_end; $wday++) {
             $date++;
             if (!checkdate($this->month, $date, $this->year)) {
                 // 月の範囲外
                 array_push($rows, array("GET_TARGET" => $get_target, "QUERY_STRING" => $query_string, "SKINPATH" => $this->images_url, "DATE" => date('j', mktime(0, 0, 0, $this->month, $date, $this->year)), "DATE_TYPE" => 0));
                 continue;
             }
             $link = "{$this->year}-{$this->month}-{$date}";
             // 曜日タイプによる描画色振り分け
             if (isset($this->holidays[$link])) {
                 //	Holiday
                 $bgcolor = $this->holiday_bgcolor;
                 $color = $this->holiday_color;
             } elseif ($wday % 7 == 0) {
                 //	Sunday
                 $bgcolor = $this->sunday_bgcolor;
                 $color = $this->sunday_color;
             } elseif ($wday == 6) {
                 //	Saturday
                 $bgcolor = $this->saturday_bgcolor;
                 $color = $this->saturday_color;
             } else {
                 // Weekday
                 $bgcolor = $this->weekday_bgcolor;
                 $color = $this->weekday_color;
             }
             // 選択日の背景色ハイライト処理
             if ($date == $this->date && $target_highlight_flag) {
                 $bgcolor = $this->targetday_bgcolor;
             }
             // テンプレート用配列へのデータセット
             array_push($rows, array("GET_TARGET" => $get_target, "QUERY_STRING" => $query_string, "BGCOLOR" => $bgcolor, "COLOR" => $color, "LINK" => $link, "DATE" => $date, "DATE_TYPE" => $event_dates[$date] + 1));
         }
         // テンプレートにデータを埋め込む
         $tmpl->addRows("DailyLoop", $rows);
         $tmpl->parseTemplate("DailyLoop", 'w');
         $tmpl->parseTemplate("WeekLoop", 'a');
     }
     $ret = $tmpl->getParsedTemplate();
     error_reporting($original_level);
     // 実行時間記録
     // list( $usec , $sec ) = explode( " " , microtime() ) ;
     // error_log( "MiniCalendar " . ( $sec + $usec - $picalstarttime ) . "sec." , 0 ) ;
     return $ret;
 }