<?php

# $Id: mobile-fan,v 3.10 2012/12/14 Hirobe Exp $
# SQL統一型対応

#---------------------------------------------#
#				初期設定
#---------------------------------------------#

//メモリー操作
//ini_set('memory_limit' ,'29M'); //5,200,000 byte対応設定
ini_set('memory_limit' ,'-1');
error_reporting(2039);

require_once(plug_dir."/plug-write.php");

$err_to="errormail@ad-box.com";
$errtit="九州風俗サイトよりエラー情報";
$error="九州風俗サイトよりお知らせです。\nご投稿を頂きました「".$SCRIPT_FLAG_ALL[QSS][0]."」の投稿でエラーが発生しました。\n";

//処理最大サイズ(byte)
//$sizelimit="1180000";//旧設定
//$sizelimit="3160000";//新設定(2012/12/17適用)
//$sizelimit="4190000";//新設定(2013/07/23適用)
$sizelimit="16777216";//新設定(2013/08/19適用)

//画像Dir
$DIRNO = substr(TODAYS,0,6);

$UPDIR = data_dir."contents/data/".QSS."/".$DIRNO."/";// アップdir
$HMDIR = data_full."contents/data/".QSS."/".$DIRNO."/";// 表示dir

//table名
$CONT_TABLE.=$DIRNO;

#---------------------------------------------#
#			メールデータ読み込み
#---------------------------------------------#

#-- PEAR の Mail/mimeDecode.php を読み込む
require_once 'Mail/mimeDecode.php';

// メール取得
$source=$limit_flug="";
if ( ($stdin=fopen("php://stdin",'r')) == true ){
	while( !feof($stdin) ){
		$source.= fgets($stdin,4096);
		if(strlen($source)>$sizelimit){
			$limit_flug=1;
			break;
		}
	}
}
fclose($stdin);

if($limit_flug){
	$error.="添付画像のサイズが大きすぎるようです。\n画像のサイズを小さくして再度ご投稿ください。\n\n";
	$err_From=GetMail_from($source);//エラーメール送信先取得
	mailsend($errtit,$error,$err_From,$err_to,$SC_set[$CTPLUG][QSS]['mail_m'],"","");
};

#---------------------------------------------#
#				DB初期設定
#---------------------------------------------#

//月変わり
if (!file_exists($UPDIR)) {
	if (!mkdir($UPDIR,0755) ) {
		$error.="現在、大変混み合っていますので、しばらく時間を空けてご利用ください。\n\n";
		$err_From=GetMail_from($source);//エラーメール送信先取得
		mailsend($errtit,$error,$err_From,$err_to,$SC_set[$CTPLUG][QSS]['mail_m'],"","");
	}else{
		chmod($UPDIR, 0777);
		//createtable
		$query=array();
		$query[0]="CREATE TABLE IF NOT EXISTS ".$CONT_TABLE." (no_log int(5) unsigned PRIMARY KEY AUTO_INCREMENT,ct_log int(5) unsigned,cts_log varchar(50),id_log int(5) unsigned,gid_log varchar(50),sys_log tinyint(2),com_log text,uptime_log bigint(14),time_log bigint(14),data_log text,other_log text,temp1_log text,temp2_log text,temp3_log text,INDEX id_index (id_log),INDEX gid_index (gid_log),INDEX ct_index (ct_log)) COLLATE sjis_japanese_ci;";
		savesqlfile($query);
	};
};

//Noファイル読み
$NO_ID=savesqlidno($CONT_TABLE,"no_log",QSS);
if($NO_ID==''){
	$error.="現在、大変混み合っていますので、しばらく時間を空けてご利用ください2。\n\n";
	$err_From=GetMail_from($source);//エラーメール送信先取得
	mailsend($errtit,$error,$err_From,$err_to,$SC_set[$CTPLUG][QSS]['mail_m'],$CONT_TABLE,$NO_ID);
};
$NO_ID+=0;

$ARRAY_TEMP1=array('btt','bcm');//書き込みログ保管
$ARRAY_TEMP2=array('title','comment');//書き込みログ保管


#---------------------------------------------#
#			メールの分解読み込み
#---------------------------------------------#

//メールの解析
$MAILBODY=GetMailbody($source,$NO_ID);

//エラー用HTML本文タグの排除
$Mailerr = strip_tags($MAILBODY['body']);

$ERR="---- 投稿内容 ----\n▼タイトル：".$MAILBODY['subject']."\n▼メールアドレス：".$MAILBODY['from']."\n▼本文：".$Mailerr."\n------　以上　------\n\n";

//エラーメールを排除
if(preg_match('/^MAILER-DAEMON@/',$MAILBODY['from']) || !$MAILBODY['from']){
	if($NO_ID) delsqlidno($CONT_TABLE,"no_log",$NO_ID);
	exit;
};


#---------------------------------------------#
#			SQL読み込み設定
#---------------------------------------------#

if(QSS=="phobbs"){
	$MEM_SET_QUERY_WHERE.=" and mail_ma='".$MAILBODY['from']."'";
}else{
	$MEM_SET_QUERY_WHERE.=" and com_set='".$MAILBODY['from']."'";
}

//mysqlを読み込み
$query="select ".$MEM_SET_QUERY_CELL." from ".$MEM_SET_TABLE." where ".$MEM_SET_QUERY_WHERE;
$DATAMEM=loadsqldata($query,'','');

error_log(print_r($query, true), 3, __DIR__.'/debug-test.log');

if(!$DATAMEM){
	$error.="ご投稿いただいたメールアドレスは、登録がないアドレスのようです。\nご投稿は登録アドレスに限ります。くわしくは管理者にお問い合せ下さい。\n\n".$ERR;
	mailsend($errtit,$error,$MAILBODY['from'],$err_to,$SC_set[$CTPLUG][QSS]['mail_m'],$CONT_TABLE,$NO_ID);
};

#---------------------------------------------#
#				前処理
#---------------------------------------------#

$f="";$ERR="";
$Q{'bcm'}=$MAILBODY['body'];
$Q{'btt'}=$MAILBODY['subject'];
$Q{'new_fname'}=$MAILBODY['filekey'];
if(!$Q['btt']){ $Q['btt']='無題'; };

if($Q{'bcm'}=="" && !$Q{'new_fname'}){ 
	$error.="ご投稿いただいた内容に不備があるようですのでご確認ください。\n\n".$ERR;
	mailsend($errtit,$error,$MAILBODY['from'],$err_to,$SC_set[$CTPLUG][QSS]['mail_m'],$CONT_TABLE,$NO_ID);
 };

//登録処理実行
foreach ($ARRAY_TEMP1 as $key => $value) {
	if($Q{$value}){ $f.=$ARRAY_TEMP2[$key]."=>".$Q{$value}.","; };
}
$f.="ip=>,";
$f.="date=>".date("m/d H:i").",";
$f.="jpegfile=>".$MAILBODY['jpegfile'].",";

//多重チェック
//$query_log="select no_log from ".$CONT_TABLE." where com_log LIKE '%comment=>".$Q{'bcm'}.",%' and id_log='".$DATAMEM[0]["SHOPID"]."' and gid_log='".$DATAMEM[0]["GIRLID"]."' and time_log='".TODAYS."'";
//if(loadsqltotal($query_log)){
//	$error.="同じ内容のメールが複数送信されたようです。\n\n".$ERR;
//	mailsend($errtit,$error,$MAILBODY['from'],$err_to,$SC_set[$CTPLUG][QSS]['mail_m'],$CONT_TABLE,$NO_ID);
//};

$query=array();
$query[] = "UPDATE ".$CONT_TABLE." SET id_log='".$DATAMEM[0]["SHOPID"]."',com_log='".$f."',gid_log='".$DATAMEM[0]["GIRLID"]."',ct_log='".$DATAMEM[0]["CONTID"]."',sys_log='1',time_log='".TODAYS."',uptime_log='".TODAYS."' WHERE no_log='".$NO_ID."';";

if(QSS=="phobbs"){
	//カウンタテーブルをチェック
	$check_query="select no_cou from ".sql_phobbscotable." where no_cou=".$DATAMEM[0]["GIRLID"];
	$check_data=loadsqldata($check_query,0,1);
	if($check_data){
		$query[] = "UPDATE ".sql_phobbscotable." SET temp1_cou=temp1_cou+1,temp2_cou='".TODAY."' WHERE no_cou='".$DATAMEM[0]["GIRLID"]."';";
	}else{
		$query[] = "INSERT INTO ".sql_phobbscotable." (no_cou,total,d_0,d_1,d_2,d_3,d_4,d_5,d_6,temp1_cou,temp2_cou) VALUES('".$DATAMEM[0]["GIRLID"]."',0,0,0,0,0,0,0,0,1,'".TODAY."');";
	}
}
if(!mt_rand(0,9)) $query[] = "DELETE FROM ".$CONT_TABLE." WHERE id_log IS NULL and gid_log IS NULL and no_log<>".$NO_ID;

//SQL書き換え
savesqlfile($query);

//savefile(module_file."0debug.html", $MAILBODY['body']);####エラー処理

exit;


#---------------------------------------------#
#				メール処理
#---------------------------------------------#

function mailsend($mail_subject,$mail_body,$mail_to,$SC_set3,$SC_set4,$CONT_TABLE,$NO_ID){

//NO_IDセル削除
if($NO_ID){
	delsqlidno($CONT_TABLE,"no_log",$NO_ID);
	if(QSS) Img_Contents_Del(QSS,$NO_ID);//画像削除
};

//同一メアドならキャンセル
if($mail_to && $SC_set3==$mail_to) exit;

//メール送信
$mail_body = mb_convert_kana($mail_body,'K','shift_jis');
$mail_header_from="From:".$SC_set3."<".$SC_set3.">";
$mail_parameter="-f ".$SC_set3;
mb_send_mail($mail_to,$mail_subject,$mail_body,$mail_header_from,$mail_parameter);

$mail_to=$SC_set4;
mb_send_mail($mail_to,$mail_subject,$mail_body,$mail_header_from,$mail_parameter);

exit;

};

#---------------------------------------------#
#			メールソースの解析
#---------------------------------------------#
function GetMailbody($source,$KEY) {

	$MAILBODY=array();
	if(!$source){ return; };
	global $UPDIR,$HMDIR;

	//文字コード検出順番
	mb_language("Japanese");
	mb_internal_encoding("SJIS");
	mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS");

	//解析
	$decoder = new Mail_mimeDecode($source);
	$params['include_bodies'] = true; //ボディを解析する
	$params['decode_bodies'] = true; //ボディをコード変換する
	$params['decode_headers'] = true; //ヘッダをコード変換する
	$structure = $decoder->decode($params);

	//メールヘッダ情報の取得
	$MAILBODY['date'] = date("m/d H:i", strtotime($structure->headers['date']));
	$MAILBODY['from'] = mb_convert_encoding($structure->headers['from'], mb_internal_encoding(), mb_detect_order());
	$MAILBODY['subject'] = mail_decode(mb_convert_encoding($structure->headers['subject'], mb_internal_encoding(), mb_detect_order()));
	//print_r($headers);

	//署名部の除去(iPhone特殊事例用)
	preg_match("/(.*)<<(.*)>>/",$MAILBODY['from'],$str);
	if($str[2]!="") $MAILBODY['from']=$str[2];

	//署名部の除去(本処理)
	preg_match("/(.*)<(.*)>/",$MAILBODY['from'],$str);
	if($str[2]!="") $MAILBODY['from']=$str[2];

	//「"」による特殊エスケープに対する処理
	preg_match("/^\"(.*)\"@(.*)/",$MAILBODY['from'],$str);
	if($str[1]!="" && $str[2]!="") $MAILBODY['from']=$str[1]."@".$str[2];

	//メールボディの取得
	$body = getbody($structure);
	$bg="";

	if($body['html']){
		//$TEMP=strtolower($body['html']);//文字化けする
		$TEMP=$body['html'];
		//背景色取得
		preg_match('/(.*?)<body .*?bgcolor="(.*?)".*?>(.*?)/i',$TEMP,$bels);
		$bg=$bels[2];if($bg!=""){ $bg="bgcolor=$bg";$tx="style=color:#000000;"; };
		//文字色
		preg_match('/(.*?)<body .*?text="(.*?)".*?>(.*?)/i',$TEMP,$tels);
		if($tels[2]!=""){ $tx="style=color:".$tels[2].";"; };
		//HTMLタグ取得
		preg_match('/(.*?)<body[^>]*?>(.*?)<\/body>(.*?)/is',$TEMP,$els);
		if($els[2]=="") $els[2]=$body['body'];//GMAIL用特殊本文回避処理
		if($els[2]=="") $els[2]=$TEMP;//分析不可能本文用処理(臨時)
		$MAILBODY['body']=$els[2];
	}else{
		$MAILBODY['body']=$body['body'];
	}

	//ファイルの保存
	$newname=sprintf("%05d",($KEY));
	$MAILBODY['filekey']="";
	$temp_file="";$temp_body="";$flag=0;
	$i=0;$n=0;
	if($body['files']){
		foreach ($body['files'] as $file) {
			$filename ="";$type="";
			if (preg_match('/image/', $file['type'])) { //画像ファイルには拡張子
				$type=strtolower(strrchr($file['name'], "."));
				$i++;
				if($type == ".jpeg" || $type == ".jpg" || $type == ".pjpeg" || $type == ".png"){
					$filename = $newname."[".$n."].jpg";
					$replacement = '<img src='.$HMDIR."dcr_".$filename.'>';
					$MAILBODY['jpegfile'].=$newname."[".$n."]<>";
					if(!$file['cid']){ $file['cid']=sprintf("%02d",$i); }
					if(!$temp_file){ $temp_file=$newname;$temp_body=$file['body']; };//仮のorg
				}else if($type == ".gif"){
					$filename = "dcr_".$newname."[".$n."].gif";
					$replacement = '<img src='.$HMDIR.$filename.'>';
					if(!$file['cid']){ $file['cid']=sprintf("%02d",$i); }
				}else{
					$replacement = '';continue;
				}
				//画像HTMLの表示用置き換え
				$pattern='#<img\s+?src=([a-zA-Z0-9])*"cid:'.$file['cid'].'".*?>#i';
				if(!preg_match($pattern,$MAILBODY['body']) && ($type == ".jpeg" || $type == ".jpg")){
					$filename = "org_".$newname.".jpg";$flag=1;
				}elseif(!preg_match($pattern,$MAILBODY['body']) && $type == ".png"){
					$filename = "org_".$newname.".jpg";$flag=2;
				}else{
					$MAILBODY['body']=preg_replace($pattern,$replacement,$MAILBODY['body']);
				}
			}
			if($filename){
				$faddress = $UPDIR.$filename;
				savefile_pho($faddress, $file['body']);
				if($type == ".png") convert_pngtojpg($faddress);
			}
			$n++;
		}
		if(!$flag && $temp_file){
			$faddress = $UPDIR."sam_".$temp_file.".jpg";
			savefile_pho($faddress, $temp_body);
			if($flag == 2) convert_pngtojpg($faddress);
		}
	}
	//背景色反映
	$MAILBODY['body']="<table $bg border=0 width=100% $tx><tr><td align=left>".$MAILBODY['body']."</td></tr></table>";
	//savefile(module_file."test.html", "4<br>$TEMP");
	return $MAILBODY;//body,from,subject,date,filekey,jpegfile
}

#---------------------------------------------#
#			実ファイルの生成
#---------------------------------------------#
// 機能 ファイルの保存
// 引数 $file: ファイル名
//　　　$str: ファイル内容
// 戻値 書き込んだファイルサイズ
function savefile_pho($file, $str) {
	$fp = fopen($file, "w");
	if (flock($fp, LOCK_EX | LOCK_NB)) {
		$size = fwrite($fp, $str);
		flock($fp, LOCK_UN);
	}
	fclose($fp);
	if(substr(sprintf('%o', fileperms($file)), -4)!='0666'){ chmod($file,0666); };
	return $size;
}

#---------------------------------------------#
#			PNGからJPGへ変換
#---------------------------------------------#
function convert_pngtojpg($file) {
	$type=strtolower(strrchr($file, "."));
	$newfile=strtolower(substr($file,0,strrpos($file,"."))).".jpg";
	$oldfile=$file;
	if($type == ".jpg"){
		$oldfile=strtolower(substr($file,0,strrpos($file,"."))).".png";
		rename($file,$oldfile);
	}
	imagejpeg(imagecreatefrompng($oldfile),$newfile);
	if(substr(sprintf('%o', fileperms($newfile)), -4)!='0666'){ chmod($newfile,0666); };
	unlink($oldfile);
	return;
}

#---------------------------------------------#
#　メールソース(From)の解析(エラーメール用)
#---------------------------------------------#
function GetMail_from($source) {

	$MAILBODY=array();
	if(!$source){ return; };

	//文字コード検出順番
	mb_language("Japanese");
	mb_internal_encoding("SJIS");
	mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS");

	//解析
	$decoder = new Mail_mimeDecode($source);
	$params['include_bodies'] = false; //ボディを解析しない
	$params['decode_bodies'] = false; //ボディをコード変換しない
	$params['decode_headers'] = true; //ヘッダをコード変換する
	$structure = $decoder->decode($params);

	//メールヘッダ情報の取得
	$MAILBODY['from'] = mb_convert_encoding($structure->headers['from'], mb_internal_encoding(), mb_detect_order());
	//print_r($headers);

	//署名部の除去(iPhone特殊事例用)
	preg_match("/(.*)<<(.*)>>/",$MAILBODY['from'],$str);
	if($str[2]!="") $MAILBODY['from']=$str[2];

	//署名部の除去(本処理)
	preg_match("/(.*)<(.*)>/",$MAILBODY['from'],$str);
	if($str[2]!="") $MAILBODY['from']=$str[2];

	//「"」による特殊エスケープに対する処理
	preg_match("/^\"(.*)\"@(.*)/",$MAILBODY['from'],$str);
	if($str[1]!="" && $str[2]!="") $MAILBODY['from']=$str[1]."@".$str[2];

	return $MAILBODY['from'];
}

#---------------------------------------------#
// 概要 メールボディの取得・分解
// $ary['body'] : メール本文（テキスト）
// $ary['html'] : メール本文（HTML）
// $ary['files'][n] : 添付ファイルまたは本文中(HTML)の画像ファイル nは0から連番
// $ary['files'][n]['type'] : ファイルタイプ。image/jpeg など
// $ary['files'][n]['name'] : ファイルのオリジナル名。xxx.jpg など
// $ary['files'][n]['body'] : ファイル本体。バイナリストリーム。
#---------------------------------------------#
function getbody($structure) {
	static $i = 0, $ary = array();

	if (strtolower($structure->ctype_primary) == "multipart") {
		//複数本文があるメール（本文を１件づつ処理する）
		foreach ($structure->parts as $part) {
			//タイプ
			switch (strtolower($part->ctype_primary)) {
				case "image": //HTML本文中の画像・添付画像
					$ary['files'][$i]['type'] = strtolower($part->ctype_primary)."/".strtolower($part->ctype_secondary);
					$ary['files'][$i]['name'] = $part->ctype_parameters['name'];
					if(!$ary['files'][$i]['name']) $ary['files'][$i]['name'] = $part->d_parameters['filename']; //ファイル名格納先が特殊な場合用
					$ary['files'][$i]['cid'] = trim($part->headers['content-id'], "<>");
					$ary['files'][$i]['body'] = $part->body;
					$i++;
					break;
				case "text": //テキスト本文の抽出
					if ($part->ctype_secondary=="plain") {
						$ary['tempdata'] = trim(mb_convert_encoding($part->body, mb_internal_encoding(), mb_detect_order()));
						$ary['body'] .= mail_decode($ary['tempdata']);
						$ary['body'] .= "<br>";
					} else { //HTML本文
						$ary['tempdata'] = trim(mb_convert_encoding($part->body, mb_internal_encoding(), mb_detect_order()));
						$ary[$part->ctype_secondary] .= mail_decode($ary['tempdata']);
					}
					break;
				case "multipart": //マルチパートの中にマルチパートがある場合（MS-OutlookExpressからHTML形式で送信した場合）
					getbody($part);
					break;
			}
		}
	} elseif (strtolower($structure->ctype_primary) == "text") {
		//テキスト本文のみのメール
		$ary['body'] = trim(mb_convert_encoding($structure->body, mb_internal_encoding(), mb_detect_order()));
		$ary['body'] = mail_decode($ary['body']);
	} elseif (strtolower($structure->ctype_primary) == "image") {
		//画像添付のみのメール
		$ary['files'][0]['type'] = strtolower($structure->ctype_primary)."/".strtolower($structure->ctype_secondary);
		$ary['files'][0]['name'] = $structure->ctype_parameters['name'];
		if(!$ary['files'][0]['name']) $ary['files'][0]['name'] = $structure->d_parameters['filename']; //ファイル名格納先が特殊な場合用
		$ary['files'][0]['cid'] = trim($structure->headers['content-id'], "<>");
		$ary['files'][0]['body'] = $structure->body;
	}
	return $ary;

}

function  mail_decode($req)
{
	if(!$req) { return; };
	//$str_search = array("&#184;","&",',',"<",">","&lt;&gt;","\'","\!",'\"',"\$","\^","\`","*","\t","\r\n","\r","\n","\0"); //不都合な文字（配列１）
	//$str_replace = array(",","＆","&#44;","&lt;","&gt;","<>","&#39;","&quot;","&#34;","&#36;","&#94;","&#96;","&#42;","","<br>","<br>","<br>",""); //置き換える文字（配

	$str_search = array(',',"\'","<>","\r\n","\r","\n","\0",'\''); //不都合な文字（配列１）
	$str_replace = array("&#44;","&#39;","&lt;&gt;","<br>","<br>","<br>","",""); //置き換える文字（配

	//decode;
	$key = str_replace($str_search,$str_replace,$req);
	return $key;
}

?>