7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
9 * @package Magic3 Framework
10 * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11 * @copyright Copyright 2006-2011 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: m_bbs_2chThreadWidgetContainer.php 4038 2011-03-20 12:21:33Z fishbone $
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_bbs_2chBaseWidgetContainer.php');
18 class m_bbs_2chThreadWidgetContainer extends m_bbs_2chBaseWidgetContainer
23 function __construct()
26 parent::__construct();
31 * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
32 * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
34 * @param RequestManager $request HTTPリクエスト処理クラス
35 * @param object $param 任意使用パラメータ。そのまま_assign()に渡る
36 * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
38 function _setTemplate($request, &$param)
40 $task = $request->trimValueOf('task');
41 if ($task == self::TASK_NEW_THREAD){ // 新規スレッド作成画面
42 return 'newthread.tmpl.html';
44 return 'thread.tmpl.html';
50 * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
52 * @param RequestManager $request HTTPリクエスト処理クラス
53 * @param object $param 任意使用パラメータ。_setTemplate()と共有。
56 function _assign($request, &$param)
58 $task = $request->trimValueOf('task');
59 if ($task == self::TASK_NEW_THREAD){ // 新規スレッド作成画面
60 return $this->createNewThread($request);
62 return $this->createThreadList($request);
68 * @param RequestManager $request HTTPリクエスト処理クラス
71 function createNewThread($request)
73 $act = $request->trimValueOf('act');
74 $postTicket = $request->trimValueOf('ticket'); // POST確認用
75 $subject = $request->mobileTrimValueOf('bbs_subject');// 投稿件名
76 $message = $request->mobileTrimValueOf('bbs_message');// 投稿メッセージ
77 $name = $request->mobileTrimValueOf('bbs_name');// 名前
78 $email = $request->trimValueOf('bbs_email');// Eメールアドレス
80 $isCompleted = false; // 登録完了かどうか
81 if ($act == 'add'){ // 新規追加のとき
82 if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき
84 $this->checkInput($subject, 'タイトル', 'ERROR:タイトルが存在しません!');
85 if (function_exists('mb_strlen')){
86 $length = mb_strlen($subject);
88 $length = strlen($subject);
90 if ($length > $this->_configArray[self::CF_SUBJECT_LENGTH]) $this->setUserErrorMsg('ERROR:タイトルが長すぎます!(最大文字数' . $this->_configArray[self::CF_SUBJECT_LENGTH] . ')');
93 $this->checkMessageInput($this->_boardId, -1/*スレッドIDチェックなし*/, $name, $email, $message);
96 if ($this->getMsgCount() == 0){
98 $threadId = md5(time() . $this->gRequest->trimServerValueOf('REMOTE_ADDR'));
101 $ret = $this->_db->addNewThread($this->_boardId, $threadId, $subject, $name, $email, $message);
103 if ($ret){ // データ追加成功のとき
104 //$this->setMsg(self::MSG_GUIDANCE, 'スレッドを作成しました');
105 $this->setMsg(self::MSG_GUIDANCE, '書きこみが終わりました。');
106 $isCompleted = true; // 投稿完了
108 //$this->setMsg(self::MSG_APP_ERR, 'スレッドを作成に失敗しました');
109 $this->setMsg(self::MSG_APP_ERR, '書きこみに失敗しました。');
113 $this->setMsg(self::MSG_APP_ERR, '不正な投稿により、書きこみに失敗しました。');
115 $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア
119 if ($isCompleted){ // 投稿完了のとき
120 $this->tmpl->setAttribute('result_area', 'visibility', 'visible');// 投稿エリアを表示
121 $this->tmpl->addVar("result_area", "subject", $this->convertToDispString($subject));
122 $this->tmpl->addVar("result_area", "message", $this->convertToDispString($message));
123 $this->tmpl->addVar("result_area", "name", $this->convertToDispString($name));
124 $this->tmpl->addVar("result_area", "email", $this->convertToDispString($email));
126 $this->tmpl->setAttribute('input_area', 'visibility', 'visible');// 投稿エリアを表示
127 $this->tmpl->addVar("input_area", "subject", $this->convertToDispString($subject));
128 $this->tmpl->addVar("input_area", "message", $this->convertToDispString($message));
131 $makeThreadColor = $this->_configArray[self::CF_MAKE_THREAD_COLOR]; // スレッド作成部背景色
132 $makeThreadStyle .= 'background-color:' . $makeThreadColor . ';';
133 $this->tmpl->addVar("_widget", "make_thread_style", $makeThreadStyle);
135 $enctype = 'application/x-www-form-urlencoded';
136 if (!empty($this->_configArray[self::CF_FILE_UPLOAD])){ // ファイルアップロード許可のとき
137 $enctype = 'multipart/form-data';
138 $this->tmpl->setAttribute('file_upload', 'visibility', 'visible');// ファイルアップロード領域追加
140 $this->tmpl->addVar("_widget", "enctype", $enctype);
143 $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo());
144 $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket); // セッションに保存
145 $this->tmpl->addVar("_widget", "ticket", $postTicket); // 画面に書き出し
148 $this->tmpl->addVar("_widget", "post_url", $this->_currentPageUrl);
151 * 取得したコンテンツ項目をテンプレートに設定する
153 * @param int $index 行番号
154 * @param array $fetchedRow 取得行
155 * @param object $param 任意使用パラメータ
156 * @return bool trueを返すとループ続行。falseを返すとその時点で終了。
158 function itemsLoop($index, $fetchedRow)