ICal.php 8.59 KB
<?php 
header("Content-Type: text/calendar; charset=utf-8");
//header("Content-type: text/html; charset=utf-8");

include('./include/date.inc');

/*
$strArray = array(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z);
$rnd_id = "";
for ($intK = 0; $intK < 10; $intK++){
		$tmp_num = rand(0, 51);
		$file_id = $file_id.$strArray[$tmp_num];
}

header("Content-Disposition: inline; filename=e-gru_".$file_id.".ics");
*/

//*** GET情報取得 ***//
$G_ID = $_GET["G_ID"];
$U_ID = $_GET["U_ID"];
$S_CD = $_GET["S_CD"];

//*** グループ情報の存在確認 ***//
include("./include/dbcon_group.inc");
$strSQLGroup="SELECT * FROM mst_group WHERE folder_name='".$G_ID."'";
$objRecGroup = pg_exec($strSQLGroup);
if($objRecGroup==false){
		echo("SQL実行に失敗しました(SELECT)");
		exit;
}
$objRecGroup = pg_exec($strSQLGroup);
if($objRecGroup==false){
		exit;
}
$objGroup = pg_fetch_object($objRecGroup, 0);
$PHP_DB_NAME=$objGroup->db_name;

//*** 個人情報の存在確認 ***//
$hostname="172.31.18.14";
$database=$PHP_DB_NAME;
if( !$pg_con=pg_connect("host=$hostname port=5433 dbname=$database user=pgsqladmin password=pgsqladmin") ) {
		exit;
}

//*** カレンダーセキュリティコード確認 ***//
$strSQL = "select memo from kojin_data_tbl where syain_cd='".$U_ID."' and seq=24";
$objData = pg_exec($strSQL);
if(pg_numrows($objData) > 0){
		$objRec = pg_fetch_object($objData,0);
		$SECURITY_CODE = $objRec->memo;
}else{
		exit;
}
if ($S_CD!=$SECURITY_CODE){
		exit;
}

//* 開始日取得 *//
$strSQL = "select memo from kojin_data_tbl where syain_cd='".$U_ID."' and seq=25";
$objData = pg_exec($strSQL);
if(pg_numrows($objData) > 0){
		$objRec = pg_fetch_object($objData,0);
		$Bf_Day = $objRec->memo;
}else{
		$Bf_Day = 30;
}
//* 終了日取得 *//
$strSQL = "select memo from kojin_data_tbl where syain_cd='".$U_ID."' and seq=25";
$objData = pg_exec($strSQL);
if(pg_numrows($objData) > 0){
		$objRec = pg_fetch_object($objData,0);
		$Af_Day = $objRec->memo;
}else{
		$Af_Day = 30;
}

$now_year  = date("Y");
$now_month = date("m");
$now_day   = date("d");

$st_year  = date("Y", mktime (0,0,0,$now_month,$now_day-(int)$Bf_Day,$now_year));
$st_month = date("m", mktime (0,0,0,$now_month,$now_day-(int)$Bf_Day,$now_year));
$st_day   = date("d", mktime (0,0,0,$now_month,$now_day-(int)$Bf_Day,$now_year));

$intLoopMax = $Bf_Day+$Af_Day;

$objdate = new CalcDate();

echo "BEGIN:VCALENDAR"."\n";
echo "PRODID:E-gruPro"."\n";
echo "VERSION:2.0"."\n";
echo "METHOD:PUBLISH"."\n";
echo "CALSCALE:GREGORIAN"."\n";
echo "X-WR-CALNAME:E-グルPro"."\n";
echo "X-WR-CALDESC:E-グルPro"."\n";
echo "X-WR-TIMEZONE:Asia/Tokyo"."\n";

for ($intI = 0; $intI < $intLoopMax ; $intI++) {

		$Get_Date   = date("Y/m/d", mktime (0,0,0,$st_month,$st_day+$intI,$st_year));
		$Disp_Date  = date("Ymd", mktime (0,0,0,$st_month,$st_day+$intI,$st_year));
		$Next_Date  = date("Ymd", mktime (0,0,0,$st_month,$st_day+$intI+1,$st_year));
		list($chk_year,$chk_mon,$chk_day) = split("/", $Get_Date);

		$strSQL  = "";
		$strSQL .= "SELECT";
		$strSQL .= " * ";
		$strSQL .= "FROM ";
		$strSQL .= " schedule_tbl ";
		$strSQL .= "WHERE ";
		$strSQL .= " (scdl_st_date<='".$Get_Date."' AND scdl_ed_date>='".$Get_Date."') AND ";
		$strSQL .= " (disp_cd='".$U_ID."' OR share_syain like '%/".$U_ID."/%')         AND ";
		$strSQL .= " (";
		$strSQL .= "  (scdl_type = 0) OR ";	//0 通常
		$strSQL .= "  (scdl_type = 1) OR ";		//1 週1
		$strSQL .= "  (scdl_type = 2) OR ";			//2 月1
		$strSQL .= "  (scdl_type = 4) OR ";		//4 第○週○曜日
		$strSQL .= "  (scdl_type = 3) OR ";		//3 バナー
		$strSQL .= "  (scdl_type = 5) ";		//5 バナー第○週
		$strSQL .= " )";
		$strSQL .= "ORDER By";
		$strSQL .= " scdl_st_time ASC, ";
		$strSQL .= " scdl_ed_time ASC  ";

		$objData = pg_exec($strSQL);
		$intMax=pg_numrows($objData);

		for ($intJ = 0; $intJ < $intMax ; $intJ++) {
				$objRec = pg_fetch_object($objData, $intJ);
				$SetFlg = "";

				switch($objRec->scdl_type){
						case 1:
								//1 週1
								$chkWeekDay = date("w", mktime (0,0,0,$chk_mon,$chk_day,$chk_year));
								if ($chkWeekDay==$objRec->scdl_code){
										if(ereg($Get_Date,$objRec->del_date)!=1){
												$SetFlg = 1;
										}
								}

								break;

						case 2:
								//2 月1
								$chkDay =date("j", mktime (0,0,0,$chk_mon,$chk_day,$chk_year));
								if ($objRec->scdl_code == 32){
										if ($chkDay == date("t", mktime (0,0,0,$chk_mon,$chk_day,$chk_year))){
												if(ereg($Get_Date,$objRec->del_date)!=1){
														$SetFlg = 1;
												}
										}
								}else if ($chkDay==$objRec->scdl_code){
										if(ereg($Get_Date,$objRec->del_date)!=1){
												$SetFlg = 1;
										}
								}

								break;

						case 4:
								//4 第○週○曜日
								$chkWeekDay  = date("w", mktime (0,0,0,$chk_mon,$chk_day,$chk_year));

								$SetWeekCnt  = substr($objRec->scdl_code, 0, 1); //第何週
								$SetWeekDay   = substr($objRec->scdl_code, 1, 1); //曜日

								//echo $startOneDay ."<hr>";
								//echo $intdata     ."<hr>";
								//echo $SetBiweekly    ."<hr>";
								//echo $SetWeekDay."<hr>";
								$res = $objdate->GetWeekly($Get_Date,$chkWeekCnt);

								if ($chkWeekCnt==$SetWeekCnt){	
										if($chkWeekDay==$SetWeekDay){
												if(ereg($Get_Date,$objRec->del_date)!=1){
														$SetFlg = 1;
												}
										}
								}

								break;

						case 3:
								//3 バナー
								if(ereg($Get_Date,$objRec->del_date)!=1){
										$SetFlg = 1;
								}

								break;

						case 5:
								//5 バナー第○週
								$SetWeekCnt  = substr($objRec->scdl_code, 0, 1); //第何週
								$res = $objdate->GetWeekly($Get_Date,$chkWeekCnt);
								if ($chkWeekCnt==$SetWeekCnt){	
										$SetFlg = 1;
								}
								break;
						default:
								//0 通常
								if(ereg($Get_Date,$objRec->del_date)!=1){
										$SetFlg = 1;
								}
								break;
				}

				if ($SetFlg==1){
						/*
						$strArray = array(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z);
						$rnd_id = "";
						for ($intK = 0; $intK < 10; $intK++){
								$tmp_num = rand(0, 51);
								$rnd_id = $rnd_id.$strArray[$tmp_num];
						}
						*/

						$scdl_plan = mb_convert_encoding($objRec->scdl_plan, "UTF-8", "EUC-JP");
						//$scdl_biko = mb_convert_encoding($objRec->scdl_biko, "UTF-8", "EUC-JP");

						if (($objRec->scdl_st_time == "") && ($objRec->scdl_st_time == "")){
										$DTSTART   = $Disp_Date;
										//$DTEND   = $Next_Date;
										$DTEND   = $Disp_Date;
						}else{
								if ($objRec->scdl_st_time != ""){
										$DTSTART   = $Disp_Date."T".str_replace(":", "", $objRec->scdl_st_time);
										if ($objRec->scdl_ed_time != ""){
												$DTEND   = $Disp_Date."T".str_replace(":", "", $objRec->scdl_ed_time);
										}else{
												$DTEND   = $Disp_Date."T".str_replace(":", "", $objRec->scdl_st_time);
										}
								}else{
										$DTSTART   = $Disp_Date;
										$DTEND   = $Disp_Date;
								}
						}
						echo "BEGIN:VEVENT"."\n";
						echo "UID:E-gruPro-".$G_ID."-".$DTSTART."-".$objRec->seq."\n";
						echo "DESCRIPTION:".format_line($objRec->scdl_biko)."\n";
						echo "DTSTART:".$DTSTART."\n";
						echo "DTEND:".$DTEND."\n";
						echo "SUMMARY:".$scdl_plan."\n";
						echo "END:VEVENT"."\n";

				}
		}
}


echo "BEGIN:VTIMEZONE"."\n";
echo "TZID:Asia/Tokyo"."\n";
echo "BEGIN:STANDARD"."\n";
echo "DTSTART:19700101T000000"."\n";
echo "TZOFFSETFROM:+0900"."\n";
echo "TZOFFSETTO:+0900"."\n";
echo "END:STANDARD"."\n";
echo "END:VTIMEZONE"."\n";

echo "END:VCALENDAR"."\n";

function format_line($str) {
    // 改行コードで分割
		$my_string = preg_replace(array('/\n/', '/\r/'), '#PH#', $str);
		$lines = explode('#PH#', $my_string);

    //$lines = explode("\r\n", $str);

    $octet_lines = array();

    foreach ($lines as $line) {
      split_line($line, &$octet_lines);
    }
    // CRLFで区切る
    $format_line = implode("\n\t", $octet_lines);
    return "\n\t".$format_line;
}

function split_line($line, $octet_lines) {
    $strlen = mb_strlen($line, "EUC-JP");
    // 1行15文字まで
    if ($strlen > 15) {
        $str15len = mb_substr($line, 0, 15,"EUC-JP");
        array_push($octet_lines, encoding($str15len));
        $str_divide = mb_substr($line, 15, $strlen, "EUC-JP");
        split_line($str_divide, &$octet_lines);
    } else {
        array_push($octet_lines, encoding($line)."\\n");
    }
}

function encoding($str) {
    // 機種依存文字対応
    return mb_convert_encoding(mb_convert_encoding($str,"sjis-win","EUC-JP"),"UTF-8","sjis-win");
}


?>