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-2012 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: admin_s_bbs_2chMessageWidgetContainer.php 4851 2012-04-15 00:43:29Z fishbone $
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_s_bbs_2chBaseWidgetContainer.php');
17 require_once($gEnvManager->getCurrentWidgetDbPath() . '/s_bbs_2chDb.php');
19 class admin_s_bbs_2chMessageWidgetContainer extends admin_s_bbs_2chBaseWidgetContainer
21 private $db; // DB接続オブジェクト
22 private $serialNo; // 選択中の項目のシリアル番号
23 private $serialArray = array(); // 表示されているコンテンツシリアル番号
24 private $isExistsContent; // メッセージ項目が存在するかどうか
25 const DEFAULT_LIST_COUNT = 30; // 最大リスト表示数
26 const LIST_MESSAGE_LENGTH = 50; // 一覧に表示するメッセージの長さ
31 function __construct()
34 parent::__construct();
37 $this->db = new s_bbs_2chDb();
42 * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
43 * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
45 * @param RequestManager $request HTTPリクエスト処理クラス
46 * @param object $param 任意使用パラメータ。そのまま_assign()に渡る
47 * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
49 function _setTemplate($request, &$param)
52 $task = $request->trimValueOf('task');
54 case 'message': // メッセージ管理
56 $filename = 'admin_message.tmpl.html';
58 case 'message_detail': // メッセージ管理詳細
59 $filename = 'admin_message_detail.tmpl.html';
67 * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
69 * @param RequestManager $request HTTPリクエスト処理クラス
70 * @param object $param 任意使用パラメータ。_setTemplate()と共有。
73 function _assign($request, &$param)
75 $task = $request->trimValueOf('task');
77 case 'message': // メッセージ管理
79 $this->createList($request);
81 case 'message_detail': // メッセージ管理詳細
82 $this->createDetail($request);
89 * @param RequestManager $request HTTPリクエスト処理クラス
92 function createList($request)
95 $userId = $this->gEnv->getCurrentUserId();
96 $langId = $this->gEnv->getDefaultLanguage();
98 $pageNo = $request->trimIntValueOf(M3_REQUEST_PARAM_PAGE_NO, '1'); // ページ番号
99 if (empty($pageNo)) $pageNo = 1;
101 $act = $request->trimValueOf('act');
102 if ($act == 'delete'){ // 項目削除の場合
103 $listedItem = explode(',', $request->trimValueOf('seriallist'));
105 for ($i = 0; $i < count($listedItem); $i++){
107 $itemName = 'item' . $i . '_selected';
108 $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0;
110 if ($itemValue){ // チェック項目
111 $delItems[] = $listedItem[$i];
114 if (count($delItems) > 0){
115 $ret = $this->db->delMessage($delItems);
116 if ($ret){ // データ削除成功のとき
117 $this->setGuidanceMsg('データを削除しました');
119 $this->setAppErrorMsg('データ削除に失敗しました');
122 } else if ($act == 'selpage'){ // ページ選択
125 $maxListCount = self::DEFAULT_LIST_COUNT;
128 $totalCount = $this->db->getMessageCount($this->_boardId);
131 $pageCount = (int)(($totalCount -1) / $maxListCount) + 1; // 総ページ数
132 if ($pageNo < 1) $pageNo = 1;
133 if ($pageNo > $pageCount) $pageNo = $pageCount;
134 $this->firstNo = ($pageNo -1) * $maxListCount + 1; // 先頭番号
138 if ($pageCount > 1){ // ページが2ページ以上のときリンクを作成
139 for ($i = 1; $i <= $pageCount; $i++){
141 $link = ' ' . $i;
143 $link = ' <a href="#" onclick="selpage(\'' . $i . '\');return false;">' . $i . '</a>';
150 $this->db->getMessage($this->_boardId, $maxListCount, $pageNo, array($this, 'itemListLoop'));
151 if (!$this->isExistsContent) $this->tmpl->setAttribute('itemlist', 'visibility', 'hidden');// コンテンツ項目がないときは、一覧を表示しない
154 $this->tmpl->addVar("_widget", "page_link", $pageLink);
155 $this->tmpl->addVar("_widget", "total_count", $totalCount);
156 $this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定
161 * @param RequestManager $request HTTPリクエスト処理クラス
164 function createDetail($request)
167 $langId = $this->gEnv->getDefaultLanguage();
169 $act = $request->trimValueOf('act');
170 $this->serialNo = $request->trimValueOf('serial'); // 選択項目のシリアル番号
171 $name = $request->valueOf('item_name');
172 $message = $request->valueOf('item_message');
174 $reloadData = false; // データの再読み込み
175 if ($act == 'delete'){ // 項目削除の場合
176 if (empty($this->serialNo)){
177 $this->setUserErrorMsg('削除項目が選択されていません');
180 if ($this->getMsgCount() == 0){
181 $ret = $this->db->delMessage(array($this->serialNo));
182 if ($ret){ // データ削除成功のとき
183 $this->setGuidanceMsg('データを削除しました');
184 $reloadData = true; // データの再読み込み
186 $this->setAppErrorMsg('データ削除に失敗しました');
189 } else if ($act == 'update'){ // 項目更新の場合
191 if ($this->getMsgCount() == 0){
193 $ret = $this->db->getMessageBySerial($this->serialNo, $row);
195 //$name = $row['te_user_name']; // ニックネーム
196 $email = $row['te_email']; // Eメール
197 // $message = $row['te_message']; // メッセージ
200 $ret = $this->db->updateMessage($this->serialNo, $name, $email, $message);
204 $this->setGuidanceMsg('データを更新しました');
205 $reloadData = true; // データの再読み込み
207 $this->setAppErrorMsg('データ更新に失敗しました');
211 $reloadData = true; // データの再読み込み
213 if ($reloadData){ // データの再読み込み
214 $ret = $this->db->getMessageBySerial($this->serialNo, $row);
216 $no = $row['te_index'];
217 $name = $row['te_user_name']; // ニックネーム
218 $title = $row['th_subject']; // タイトル
219 $message = $row['te_message']; // メッセージ
220 $regist_dt = $row['te_regist_dt'];
228 $ret = $this->db->getMessageBySerial($this->serialNo, $row);
230 $no = $row['te_index'];
231 $name = $row['te_user_name']; // ニックネーム
232 $title = $row['th_subject']; // タイトル
233 $message = $row['te_message']; // メッセージ
234 $regist_dt = $row['te_regist_dt'];
239 $this->tmpl->addVar("_widget", "no", $no); // 投稿番号
240 $this->tmpl->addVar("_widget", "name", $this->convertToDispString($name)); // ニックネーム
241 $this->tmpl->addVar("_widget", "title", $this->convertToDispString($title)); // タイトル
242 $this->tmpl->addVar("_widget", "message", $this->convertToDispString($message)); // メッセージ
243 $this->tmpl->addVar("_widget", "regist_dt", $this->convertToDispDateTime($regist_dt)); // 投稿日時
246 $this->tmpl->addVar("_widget", "serial", $this->serialNo);
249 if (!empty($this->serialNo)){
250 $this->tmpl->setAttribute('del_button', 'visibility', 'visible');// 「削除」ボタン
251 $this->tmpl->setAttribute('update_button', 'visibility', 'visible');
255 * 取得したデータをテンプレートに設定する
257 * @param int $index 行番号(0~)
258 * @param array $fetchedRow フェッチ取得した行
259 * @param object $param 未使用
260 * @return bool true=処理続行の場合、false=処理終了の場合
262 function itemListLoop($index, $fetchedRow, $param)
264 $serial = $fetchedRow['te_serial'];
267 $message = $fetchedRow['te_message'];
268 $message = makeTruncStr($message, self::LIST_MESSAGE_LENGTH);// メッセージ長調整
271 'index' => $index, // 項目番号
272 'serial' => $serial, // シリアル番号
273 'no' => $this->convertToDispString($fetchedRow['te_index']), // 投稿番号
274 'title' => $this->convertToDispString($fetchedRow['th_subject']), // タイトル
275 'message' => $this->convertToDispString($message), // メッセージ
276 'name' => $this->convertToDispString($fetchedRow['te_user_name']), // ニックネーム
277 'update_dt' => $this->convertToDispDateTime($fetchedRow['te_regist_dt']) // 投稿日時
279 $this->tmpl->addVars('itemlist', $row);
280 $this->tmpl->parseTemplate('itemlist', 'a');
283 $this->serialArray[] = $serial;
285 $this->isExistsContent = true; // コンテンツ項目が存在するかどうか