<?php
/**
 * Mylistの内容をサーバに保存する.
 */

ini_set('include_path', 'libs/pear:'. ini_get("include_path"));
require_once 'DB.php';

define('DB_CONNECTION_DSN', 'mysql://username@localhost/tkrb_myfavorit');


// gridの中に \n 区切りで1レコードはいっており、1レコードは , で区切られている
$aRecords = split("\n", $_POST['grid']);

// 簡単にバリデーション
$bResult = validate($aRecords);
if ($bResult == false) {
	echo 'validate faild';
	exit;
}

// DBに保存する
$bResult = save($aRecords);
if ($bResult == false) {
	echo 'save faild';
	exit;
}
echo 'success';
exit;


/**
 * 簡単にバリデーションする.
 *
 * @param  array   レコードのリスト
 * @return boolean 成否
 */
function validate($aRecords) {
	// 未登録
	if (count($aRecords) == 0) { return false; }
	
	foreach ($aRecords as $sRecord) {
		if ($sRecord == "" or $sRecord == "\n") continue; // 空行を削除
		$aRecord = split(',', $sRecord);
		
		// , 区切りで項目が多すぎる
		if (count($aRecord) > 4) { return false; }
		
		// idが数字じゃない
		if (preg_match("/^\d+$/", $aRecord[0]) == false) { return false; }
	}
	return true;
}

/**
 * DBに保存する.
 *
 * @param  array    保存するレコード
 * @return boolean  成否
 */
function save($aRecords) {
	$oDb = DB::connect(DB_CONNECTION_DSN);
	
	// ユーザの追加
	$sSql = sprintf("INSERT INTO users (regist_date) VALUES (NOW())");
	$rResult = $oDb->query($sSql);
	if(DB::isError($rResult)) {
//		echo $rResult->getMessage();
		return false;
	}
	
	// 取得
	$rResult = $oDb->getOne('SELECT MAX(id) FROM users');
	if(DB::isError($rResult)) {
//		echo $rResult->getMessage();
		return false;
	}
	$iUserId = $rResult;
	
	// お気に入りの追加
	foreach ($aRecords as $sRecord) {
		if ($sRecord == "" or $sRecord == "\n") continue; // 空行を削除
		$aRecord = split(',', $sRecord);
		
		$sSql = sprintf("INSERT INTO favorites ".
						"(user_id, web_api_id, image, title, comment) ".
						"VALUES ('%s', '%s', '%s', '%s', '%s')", 
						addslashes($iUserId),
						addslashes($aRecord[0]),
						addslashes($aRecord[1]),
						addslashes($aRecord[2]),
						addslashes($aRecord[3]));
		$rResult = $oDb->query($sSql);
		if(DB::isError($rResult)) {
			echo $rResult->getMessage();
			return false;
		}
	}
	return true;
}
?>