OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / m / bbs_2ch / include / container / m_bbs_2chThreadWidgetContainer.php
1 <?php
2 /**
3  * index.php用コンテナクラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
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
15  */
16 require_once($gEnvManager->getCurrentWidgetContainerPath() .    '/m_bbs_2chBaseWidgetContainer.php');
17
18 class m_bbs_2chThreadWidgetContainer extends m_bbs_2chBaseWidgetContainer
19 {
20         /**
21          * コンストラクタ
22          */
23         function __construct()
24         {
25                 // 親クラスを呼び出す
26                 parent::__construct();
27         }
28         /**
29          * テンプレートファイルを設定
30          *
31          * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
32          * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
33          *
34          * @param RequestManager $request               HTTPリクエスト処理クラス
35          * @param object         $param                 任意使用パラメータ。そのまま_assign()に渡る
36          * @return string                                               テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
37          */
38         function _setTemplate($request, &$param)
39         {
40                 $task = $request->trimValueOf('task');
41                 if ($task == self::TASK_NEW_THREAD){            // 新規スレッド作成画面
42                         return 'newthread.tmpl.html';
43                 } else {                        // スレッド一覧画面
44                         return 'thread.tmpl.html';
45                 }
46         }
47         /**
48          * テンプレートにデータ埋め込む
49          *
50          * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
51          *
52          * @param RequestManager $request               HTTPリクエスト処理クラス
53          * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
54          * @param                                                               なし
55          */
56         function _assign($request, &$param)
57         {
58                 $task = $request->trimValueOf('task');
59                 if ($task == self::TASK_NEW_THREAD){            // 新規スレッド作成画面
60                         return $this->createNewThread($request);
61                 } else {                        // スレッド一覧画面
62                         return $this->createThreadList($request);
63                 }
64         }
65         /**
66          * 新規スレッド投稿画面作成
67          *
68          * @param RequestManager $request               HTTPリクエスト処理クラス
69          * @param                                                               なし
70          */
71         function createNewThread($request)
72         {
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メールアドレス
79                 
80                 $isCompleted = false;           // 登録完了かどうか
81                 if ($act == 'add'){             // 新規追加のとき
82                         if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){           // 正常なPOST値のとき
83                                 // 入力チェック
84                                 $this->checkInput($subject, 'タイトル', 'ERROR:タイトルが存在しません!');
85                                 if (function_exists('mb_strlen')){
86                                         $length = mb_strlen($subject);
87                                 } else {
88                                         $length = strlen($subject);
89                                 }
90                                 if ($length > $this->_configArray[self::CF_SUBJECT_LENGTH]) $this->setUserErrorMsg('ERROR:タイトルが長すぎます!(最大文字数' . $this->_configArray[self::CF_SUBJECT_LENGTH] . ')');
91                         
92                                 // その他の入力項目のエラーチェック
93                                 $this->checkMessageInput($this->_boardId, -1/*スレッドIDチェックなし*/, $name, $email, $message);
94                         
95                                 // エラーなしの場合は、データを更新
96                                 if ($this->getMsgCount() == 0){
97                                         // スレッドID作成
98                                         $threadId = md5(time() . $this->gRequest->trimServerValueOf('REMOTE_ADDR'));
99                                 
100                                         // 新規スレッドの追加
101                                         $ret = $this->_db->addNewThread($this->_boardId, $threadId, $subject, $name, $email, $message);
102
103                                         if ($ret){              // データ追加成功のとき
104                                                 //$this->setMsg(self::MSG_GUIDANCE, 'スレッドを作成しました');
105                                                 $this->setMsg(self::MSG_GUIDANCE, '書きこみが終わりました。');
106                                                 $isCompleted = true;                    // 投稿完了
107                                         } else {
108                                                 //$this->setMsg(self::MSG_APP_ERR, 'スレッドを作成に失敗しました');
109                                                 $this->setMsg(self::MSG_APP_ERR, '書きこみに失敗しました。');
110                                         }
111                                 }
112                         } else {
113                                 $this->setMsg(self::MSG_APP_ERR, '不正な投稿により、書きこみに失敗しました。');
114                         }
115                         $request->unsetSessionValue(M3_SESSION_POST_TICKET);            // セッション値をクリア
116                 }
117
118                 // 入力データを再設定
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));
125                 } else {
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));
129                 }
130                 
131                 $makeThreadColor = $this->_configArray[self::CF_MAKE_THREAD_COLOR];             // スレッド作成部背景色
132                 $makeThreadStyle .= 'background-color:' . $makeThreadColor . ';';
133                 $this->tmpl->addVar("_widget", "make_thread_style", $makeThreadStyle);
134                 
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');// ファイルアップロード領域追加
139                 }
140                 $this->tmpl->addVar("_widget", "enctype", $enctype);
141                 
142                 // ハッシュキー作成
143                 $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo());
144                 $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket);         // セッションに保存
145                 $this->tmpl->addVar("_widget", "ticket", $postTicket);                          // 画面に書き出し
146                 
147                 // 送信先
148                 $this->tmpl->addVar("_widget", "post_url", $this->_currentPageUrl);
149         }
150         /**
151          * 取得したコンテンツ項目をテンプレートに設定する
152          *
153          * @param int           $index                  行番号
154          * @param array         $fetchedRow             取得行
155          * @param object        $param                  任意使用パラメータ
156          * @return bool                                         trueを返すとループ続行。falseを返すとその時点で終了。
157          */
158         function itemsLoop($index, $fetchedRow)
159         {
160                 return true;
161         }
162 }
163 ?>