<?php
/**
 * DBクラス
 *
 * PHP versions 5
 *
 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
 *
 * @package    Magic3 Framework
 * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
 * @copyright  Copyright 2006-2010 Magic3 Project.
 * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
 * @version    SVN: $Id: bbs_2ch_mainDb.php 2782 2010-01-15 08:44:25Z fishbone $
 * @link       http://www.magic3.org
 */
require_once($gEnvManager->getDbPath() . '/baseDb.php');

class bbs_2ch_mainDb extends BaseDb
{
	/**
	 * BBS定義値をすべて取得
	 *
	 * @param array  $rows			レコード
	 * @param string $boardId		掲示板ID
	 * @return bool					1行以上取得 = true, 取得なし= false
	 */
	function getAllConfig(&$rows, $boardId = '')
	{
		$queryStr  = 'SELECT * FROM bbs_2ch_config ';
		$queryStr .=  'WHERE tg_board_id = ? ';
		$queryStr .=   'ORDER BY tg_index';
		$retValue = $this->selectRecords($queryStr, array($boardId), $rows);
		return $retValue;
	}
	/**
	 * スレッドの新規追加
	 *
	 * @param string  $boardId		掲示板ID
	 * @param string  $threadId		スレッドID
	 * @param string  $subject		スレッド件名
	 * @param string  $userName		投稿者名
	 * @param string  $email		Eメールアドレス
	 * @param bool    $message		投稿メッセージ
	 * @return bool					true = 成功、false = 失敗
	 */
	function addNewThread($boardId, $threadId, $subject, $userName, $email, $message)
	{
		$now = date("Y/m/d H:i:s");	// 現在日時
		$user = $this->gEnv->getCurrentUserId();	// 現在のユーザ
		$accessLog = $this->gEnv->getCurrentAccessLogSerial();
				
		// トランザクション開始
		$this->startTransaction();
		
		// データを追加
		$queryStr  = 'INSERT INTO bbs_2ch_thread ';
		$queryStr .=   '(';
		$queryStr .=   'th_board_id, ';
		$queryStr .=   'th_id, ';
		$queryStr .=   'th_subject, ';
		$queryStr .=   'th_message_count, ';
		$queryStr .=   'th_dt, ';
		$queryStr .=   'th_log_serial, ';
		$queryStr .=   'th_create_user_id, ';
		$queryStr .=   'th_create_dt) ';
		$queryStr .=  'VALUES ';
		$queryStr .=  '(?, ?, ?, ?, ?, ?, ?, ?)';
		$this->execStatement($queryStr, array($boardId, $threadId, $subject, 1, $now, $accessLog, $user, $now));
		
		$queryStr  = 'INSERT INTO bbs_2ch_thread_message ';
		$queryStr .=   '(';
		$queryStr .=   'te_board_id, ';
		$queryStr .=   'te_thread_id, ';
		$queryStr .=   'te_user_name, ';
		$queryStr .=   'te_email, ';
		$queryStr .=   'te_message, ';
		$queryStr .=   'te_regist_dt, ';
		$queryStr .=   'te_log_serial, ';
		$queryStr .=   'te_update_user_id, ';
		$queryStr .=   'te_update_dt) ';
		$queryStr .=  'VALUES ';
		$queryStr .=  '(?, ?, ?, ?, ?, ?, ?, ?, ?)';
		$this->execStatement($queryStr, array($boardId, $threadId, $userName, $email, $message, $now, $accessLog, $user, $now));
			
		// トランザクション確定
		$ret = $this->endTransaction();
		return $ret;
	}
	/**
	 * スレッド件名を取得
	 *
	 * @param function	$callback		コールバック関数
	 * @param string    $boardId		掲示板ID
	 * @param int       $limit			取得数(-1=すべて取得)
	 * @return 			なし
	 */
	function getThread($callback, $boardId, $limit)
	{
		$queryStr = 'SELECT * FROM bbs_2ch_thread ';
		$queryStr .=  'WHERE th_board_id = ? ';
		$queryStr .=    'AND th_deleted = false ';		// 削除されていない
		if ($limit == -1){
			$queryStr .=  'ORDER BY th_dt DESC';
		} else {
			$queryStr .=  'ORDER BY th_dt DESC limit ' . intval($limit);
		}
		$this->selectLoop($queryStr, array($boardId), $callback, null);
	}
	/**
	 * スレッドメッセージを取得
	 *
	 * @param function	$callback		コールバック関数
	 * @param string    $boardId		掲示板ID
	 * @param array     $threadId		スレッドID
	 * @param int       $maxIndex		最大番号(-1のとき無制限)
	 * @return 			なし
	 */
	function getThreadMessage($callback, $boardId, $threadId, $maxIndex)
	{
		// スレッドの指定がないときは終了
		if (empty($threadId)) return;
		
		// CASE文作成
		$caseStr = 'CASE te_thread_id ';
		$thread = '';
		for ($i = 0; $i < count($threadId); $i++){
			$threadIdStr = addslashes($threadId[$i]);
			$caseStr .= 'WHEN \'' . $threadIdStr . '\' THEN ' . $i . ' ';
			$thread .= '\'' . $threadIdStr . '\',';
		}
		$caseStr .= 'END AS no';
		$thread = rtrim($thread, ',');
			
		$queryStr  = 'SELECT *, ' . $caseStr . ' FROM bbs_2ch_thread_message ';
		$queryStr .=   'WHERE te_board_id = ? ';
		$queryStr .=     'AND te_index <= ' . intval($maxIndex) . ' ';
		$queryStr .=     'AND te_thread_id in (' . $thread . ') ';
		$queryStr .=   'ORDER BY no, te_index';
//echo $queryStr;
		$this->selectLoop($queryStr, array($boardId), $callback, null);
	}
}
?>
