7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
10 * @author 株式会社 毎日メディアサービス
11 * @copyright Copyright 2010 株式会社 毎日メディアサービス.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: chacha_mainReadWidgetContainer.php 3362 2010-07-10 03:08:21Z fishbone $
14 * @link http://www.m-media.co.jp
16 require_once($gEnvManager->getCurrentWidgetContainerPath() . '/chacha_mainBaseWidgetContainer.php');
18 class chacha_mainReadWidgetContainer extends chacha_mainBaseWidgetContainer
20 private $messageCount; // メッセージ数
21 private $isExistsMessage; // メッセージが存在するかどうか
22 private $isExistsNextPage; // 次のページがあるかどうか
27 function __construct()
30 parent::__construct();
35 * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
36 * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
38 * @param RequestManager $request HTTPリクエスト処理クラス
39 * @param object $param 任意使用パラメータ。そのまま_assign()に渡る
40 * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
42 function _setTemplate($request, &$param)
44 return 'thread_read.tmpl.html';
49 * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
51 * @param RequestManager $request HTTPリクエスト処理クラス
52 * @param object $param 任意使用パラメータ。_setTemplate()と共有。
55 function _assign($request, &$param)
57 $act = $request->trimValueOf('act');
58 $pageNo = $request->trimIntValueOf(M3_REQUEST_PARAM_PAGE_NO, '1'); // ページ番号
59 if (empty($pageNo)) $pageNo = 1;
63 if ($this->gEnv->canUseCookie()){ // クッキー使用可能なとき
64 $clientId = $this->gAccess->getClientId();
68 $clientMemberId = ''; // 現在の端末の会員ID
69 $ret = $this->_db->getMemberInfoByDeviceId($clientId, $row);
70 if ($ret) $clientMemberId = $row['mb_id'];
73 // 1つ多く呼び出し、次のページがあるか確認
74 $this->messageCount = $this->_configArray[self::CF_MESSAGE_COUNT_MYPAGE]; // 最大項目数
75 $this->_db->getThread($this->_boardId, $this->messageCount, $pageNo, array($this, 'itemsLoop'), true);
78 $innerStyle = self::CSS_BLOG_INNER_STYLE;
79 //$innerColor = $this->_configArray[self::CF_PROFILE_COLOR]; // プロフィール背景色
80 if (empty($innerColor)) $innerColor = $this->_configArray[self::CF_INNER_BG_COLOR]; // デフォルトの内枠背景色
81 if (!empty($innerColor)) $innerStyle .= 'background-color:' . $innerColor . ';';
82 $this->tmpl->addVar("_widget", "inner_style", $innerStyle);
84 // 登録用リンクを作成。会員として認識できないときはプロフィール画面へ、認識できる場合はマイページ画面へ遷移。
85 $this->tmpl->setAttribute('top_link_area', 'visibility', 'visible');
86 if (empty($clientMemberId)){
87 $rigistLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_PROFILE, true));
88 $registName = 'ユーザ登録';
90 $rigistLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_MYPAGE . '&' . self::URL_PARAM_MEMBER_ID . '=' . $clientMemberId, true));
93 $this->tmpl->addVar("top_link_area", "regist_url", $rigistLink);
94 $this->tmpl->addVar("top_link_area", "regist_name", $registName);
96 // スレッドが存在しないときは一覧を非表示にする
97 if (!$this->isExistsMessage){
98 $this->setGuidanceMsg('メッセージが投稿されていません');
100 $this->tmpl->setAttribute('message_list', 'visibility', 'hidden');
105 if ($pageNo > 1){ // 前のページがあるとき
106 $foreLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_READ . '&page=' . ($pageNo -1), true));
107 $pageLink .= '<a href="' . $foreLink . '"><b>前へ</b></a>';
109 if ($this->isExistsNextPage){ // 次のページがあるとき
110 if (!empty($pageLink)) $pageLink .= ' ';
111 $nextLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_READ . '&page=' . ($pageNo +1), true));
112 $pageLink .= '<a href="' . $nextLink . '"><b>次へ</b></a>';
114 $this->tmpl->addVar("_widget", "page_link", $pageLink);
117 * 取得したメッセージ項目をテンプレートに設定する
119 * @param int $index 行番号
120 * @param array $fetchedRow 取得行
121 * @param object $param 任意使用パラメータ
122 * @return bool trueを返すとループ続行。falseを返すとその時点で終了。
124 function itemsLoop($index, $fetchedRow)
127 if ($index >= $this->messageCount){
128 $this->isExistsNextPage = true; // 次のページあり
133 $no = $fetchedRow['mt_update_no']; // スレッド更新番号
134 $memberId = $fetchedRow['mb_id']; // 会員ID
135 $memberName = $fetchedRow['mb_name']; // 会員名
136 $messageId = $fetchedRow['mm_thread_id'];
137 $messageCount = $fetchedRow['mt_message_count'] -1; // メッセージ数
138 if ($messageCount <= 0) $messageCount = ''; // 返信がないときはメッセージ数を表示しない
139 $mypageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId, true));
140 $messageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MESSAGE_ID . '=' . $messageId, true));
143 $nameTag = '<a href="' . $mypageLink . '">' . $this->convertToDispString($memberName) . '</a>';
146 $weekDay = array('日', '月', '火', '水', '木', '金', '土');
147 $timestamp = strtotime($fetchedRow['mm_regist_dt']);
148 $weekNo = intval(date('w', $timestamp));
149 $date = date('Y/m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp);
152 $message = $this->convertToDispString($fetchedRow['mm_message']);// 文字エスケープ処理
153 $message = $this->_convertToPreviewTextWithSpace($message); // 改行をスペースに変換
154 $message = $this->convDispMessage($message, $fetchedRow['mm_thread_id']);// メッセージ内のリンクを作成
157 $messageIdTag = '<a href="' . $messageLink . '">#' . $messageId . '</a>';
160 /*if ($fetchedRow['mm_deleted']){
161 $message = '参照できません。';
164 $avatarImageUrl = $this->getAvatarUrl($memberId);
165 $avatarTag = '<img src="' . $this->getUrl($avatarImageUrl) . '" width="' . self::AVATAR_SIZE . '" height="' . self::AVATAR_SIZE .'" />';
166 $avatarTag = '<a href="' . $mypageLink . '">' . $avatarTag . '</a>';
170 'id' => $messageIdTag, // メッセージID
171 'message_count' => $messageCount, // メッセージ数
172 'name' => $nameTag, // 会員名
173 'date' => $date, // 投稿日付
174 'message' => $message, // 投稿文
175 'avatar' => $avatarTag // アバター画像
177 $this->tmpl->addVars('message_list', $row);
178 $this->tmpl->parseTemplate('message_list', 'a');
181 $this->isExistsMessage = true;