/** * 新着まとめ読み <a> * * @return string HTML */ function getShinchakuMatomeATag($aThreadList, $shinchaku_num) { global $_conf; static $upper_toolbar_done_ = false; $shinchaku_matome_atag = ''; // 倉庫なら新着まとめのリンクはなし if ($aThreadList->spmode == 'soko') { return $shinchaku_matome_atag = ''; } $attrs = array(); if (UA::isIPhoneGroup()) { $attrs['class'] = 'button'; } // 上下あるツールバーの下だけにアクセスキーをつける if ($upper_toolbar_done_) { $attrs[$_conf['accesskey_for_k']] = $_conf['k_accesskey']['matome']; } $upper_toolbar_done_ = true; $qs = array('host' => $aThreadList->host, 'bbs' => $aThreadList->bbs, 'spmode' => $aThreadList->spmode, 'nt' => date('gis'), UA::getQueryKey() => UA::getQueryValue()); $label = "{$_conf['k_accesskey']['matome']}.新まとめ"; if ($shinchaku_num) { $shinchaku_matome_atag = P2View::tagA(UriUtil::buildQueryUri($_conf['read_new_k_php'], array_merge($qs, array('norefresh' => '1'))), hs("{$label}({$shinchaku_num})"), $attrs); } else { $shinchaku_matome_atag = P2View::tagA(UriUtil::buildQueryUri($_conf['read_new_k_php'], $qs), hs($label), $attrs); } return $shinchaku_matome_atag; }
/** * フィルタ用に書き換えたフッタ変数を取得する * * @access public * @return array array(read_navi_previous_btm_ht, read_navi_next_btm_ht, read_footer_navi_new_btm_ht) */ function getResetReadNaviFooterK($aThread, $params) { global $_conf; global $_filter_hits, $_filter_range; // $prev_st, $next_st, $filter_page, $res_filter extract($params); // {{{ 検索クエリ $filter_qs = array('detect_hint' => '◎◇', 'host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'offline' => 1, 'word' => $GLOBALS['word'], 'ls' => 'all', UA::getQueryKey() => UA::getQueryValue()); foreach ($res_filter as $key => $value) { $filter_qs[$key] = $value; } // }}} if ($filter_page > 1) { $qs = array_merge($filter_qs, array('filter_page' => $filter_page - 1)); $read_navi_previous_url = UriUtil::buildQueryUri($_conf['read_php'], $qs); $read_navi_previous_btm_ht = sprintf('<a %1$s="%2$s" href="%3$s">%2$s.%4$s</a>', hs($_conf['accesskey_for_k']), hs($_conf['k_accesskey']['prev']), hs($read_navi_previous_url), hs($prev_st)); } if ($_filter_range['to'] < $_filter_hits) { $qs = array_merge($filter_qs, array('filter_page' => $filter_page + 1)); $read_navi_next_url = UriUtil::buildQueryUri($_conf['read_php'], $qs); $read_navi_next_btm_ht = sprintf('<a %1$s="%2$s" href="%3$s">%2$s.%4$s</a>', hs($_conf['accesskey_for_k']), hs($_conf['k_accesskey']['next']), hs($read_navi_next_url), hs($next_st)); } $read_footer_navi_new_btm_ht = ''; /* // ※メモ:「6.新着」(新着レスの表示)と「3.新20」(最新N件)は異なる。 $read_footer_navi_new_btm_ht = str_replace( " {$_conf['accesskey_for_k']}=\"{$_conf['k_accesskey']['next']}\"", '', $read_footer_navi_new_btm_ht ); $read_footer_navi_new_btm_ht = str_replace(">{$_conf['k_accesskey']['next']}.", '>', $read_footer_navi_new_btm_ht); */ return array('read_navi_previous_btm_ht' => $rread_navi_previous_btm_ht, 'read_navi_next_btm_ht' => $read_navi_next_btm_ht, 'read_footer_navi_new_btm_ht' => $read_footer_navi_new_btm_ht); }
/** * @return string */ function _getCookieLocationUri() { $qs = array('check_regist_cookie' => '1', 'regist_cookie' => intval(geti($_REQUEST['regist_cookie'])), UA::getQueryKey() => UA::getQueryValue()); if (defined('SID') && strlen(SID)) { $qs[session_name()] = session_id(); } return $next_uri = UriUtil::buildQueryUri('login.php', $qs); }
/** * @access public * @return string HTML */ function getSbToolbarShinchakuMatomeHtml($aThreadList, $shinchaku_num) { global $_conf; static $new_matome_i_ = 0; $new_matome_i_++; $shinchaku_matome_ht = ''; // 倉庫でなければ if ($aThreadList->spmode != 'soko') { $shinchaku_num_ht = ''; if ($shinchaku_num) { $shinchaku_num_ht = " (<span id=\"smynum{$new_matome_i_}\" class=\"matome_num\">{$shinchaku_num}</span>)"; } $shinchaku_matome_ht = P2View::tagA(UriUtil::buildQueryUri($_conf['read_new_php'], array('host' => $aThreadList->host, 'bbs' => $aThreadList->bbs, 'spmode' => $aThreadList->spmode, 'norefresh' => 1, 'nt' => date('gis'), UA::getQueryKey() => UA::getQueryValue())), '新着まとめ読み' . $shinchaku_num_ht, array('id' => "smy{$new_matome_i_}", 'class' => 'matome', 'onClick' => 'chNewAllColor();')); } return $shinchaku_matome_ht; }
if (defined('SID') && strlen(SID)) { $qs_sid[session_name()] = session_id(); } $location_url = UriUtil::buildQueryUri($_conf['subject_php'], $qs); $location_sid_url = UriUtil::buildQueryUri($_conf['subject_php'], $qs_sid); } else { $post = array($FROM_k => $FROM, $mail_k => $mail, $MESSAGE_k => $MESSAGE, $bbs_k => $bbs, $key_k => $key, $submit_k => $submit, $time_k => $time); if (P2Util::isHostJbbsShitaraba($host)) { $post[$dir_k] = $dir; } $qs_sid = $qs = array('host' => $host, 'bbs' => $bbs, 'key' => $key, 'ls' => "{$rescount}-", 'refresh' => 1, 'nt' => $newtime, UA::getQueryKey() => UA::getQueryValue()); if (defined('SID') && strlen(SID)) { $qs_sid[session_name()] = session_id(); } $location_url = UriUtil::buildQueryUri($_conf['read_php'], $qs) . "#r{$rescount}"; $location_sid_url = UriUtil::buildQueryUri($_conf['read_php'], $qs_sid) . "#r{$rescount}"; } // {{{ 2chで●ログイン中ならsid追加 if (!empty($_POST['maru_kakiko']) and P2Util::isHost2chs($host) && file_exists($_conf['sid2ch_php'])) { // ログイン後、24時間以上経過していたら自動再ログイン if (file_exists($_conf['idpw2ch_php']) and filemtime($_conf['sid2ch_php']) < time() - 60 * 60 * 24) { require_once P2_LIB_DIR . '/login2ch.func.php'; login2ch(); } if ($r = _getSID2ch()) { $post['sid'] = $r; } } // }}} // for hana mogera。クッキー確認画面ではpost、その後はcookieという仕様らしい。 foreach ($_POST as $k => $v) {
/** * IDフィルタリングリンク変換 * * @access private * @return string HTML */ function idfilter_callback($s) { global $_conf; $idstr = $s[0]; // ID:xxxxxxxxxx $id = $s[1]; // xxxxxxxxxx $idflag = ''; // 携帯/PC識別子 // IDは8桁または10桁(+携帯/PC識別子)と仮定して /* if (strlen($id) % 2 == 1) { $id = substr($id, 0, -1); $idflag = substr($id, -1); } elseif (isset($s[2])) { $idflag = $s[2]; } */ if (isset($this->thread->idcount[$id]) && $this->thread->idcount[$id] > 0) { $filter_url = UriUtil::buildQueryUri($_conf['read_php'], array('host' => $this->thread->host, 'bbs' => $this->thread->bbs, 'key' => $this->thread->key, 'ls' => 'all', 'offline' => '1', 'idpopup' => '1', 'field' => 'id', 'method' => 'just', 'match' => 'on', 'word' => $id, UA::getQueryKey() => UA::getQueryValue())); $num_ht = sprintf('(<a href="%s">%s</a>)', hs($filter_url), $this->thread->idcount[$id]); return "{$idstr}{$num_ht}"; } return $idstr; }
/** * @return string HTML */ function _getReadATag($aThread) { global $_conf; $ttitle_hs = hs($aThread->ttitle_hc); if ($_conf['k_save_packet']) { $ttitle_hs = mb_convert_kana($ttitle_hs, 'rnsk'); } return $read_atag = P2View::tagA(UriUtil::buildQueryUri($_conf['read_php'], array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'offline' => '1', 'rescount' => $aThread->rescount, UA::getQueryKey() => UA::getQueryValue())) . '#r' . rawurlencode($aThread->rescount), $ttitle_hs); }
$auth_ctl_html = sprintf('docomo端末ID認証登録済[%s]<br>', $atag); } else { if ($_login->pass_x) { $uri = UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('ctl_regist_docomo' => '1', 'regist_docomo' => '1', 'guid' => 'ON', UA::getQueryKey() => UA::getQueryValue())); $atag = sprintf('<a href="%s" utn>%s</a>', $uri, 'docomo端末IDで認証を登録'); $auth_ctl_html = sprintf('[%s]<br>', $atag); } } // Cookie認証 } else { if ($_login->checkUserPwWithCid($_COOKIE['cid'])) { $atag = P2View::tagA(UriUtil::buildQueryUri('cookie.php', array('ctl_regist_cookie' => '1', UA::getQueryKey() => UA::getQueryValue())), '解除'); $auth_cookie_html = sprintf('cookie認証登録済[%s]<br>', $atag); } else { if ($_login->pass_x) { $atag = P2View::tagA(UriUtil::buildQueryUri('cookie.php', array('ctl_regist_cookie' => '1', 'regist_cookie' => '1', UA::getQueryKey() => UA::getQueryValue())), 'cookieに認証を登録'); $auth_cookie_html = sprintf('[%s]<br>', $atag); } } } // Cookie認証登録解除処理 _preExecCheckRegistCookie(); //================================================================= // HTMLプリント //================================================================= $p_htm['body_onload'] = ''; if (!$_conf['ktai']) { $p_htm['body_onload'] = ' onLoad="setWinTitle();"'; } $body_at = P2View::getBodyAttrK(); P2Util::headerNoCache();
/** * お気に板をHTML表示する for 携帯 * * @access public * @return void */ function printFavItaHtml() { global $_conf; $csrfid = P2Util::getCsrfId(); $hr = P2View::getHrHtmlK(); $show_flag = false; if (file_exists($_conf['favita_path']) and $lines = file($_conf['favita_path'])) { echo 'お気に板 [<a href="editfavita.php?b=k">編集</a>]' . $hr; $i = 0; foreach ($lines as $l) { $i++; $l = rtrim($l); if (preg_match("/^\t?(.+)\t(.+)\t(.+)\$/", $l, $matches)) { $itaj = rtrim($matches[3]); $attr = array(); $key_num_st = ''; if ($i <= 9) { $attr[$_conf['accesskey_for_k']] = $i; $key_num_st = "{$i}."; } $atag = P2View::tagA(UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $matches[1], 'bbs' => $matches[2], 'itaj_en' => base64_encode($itaj), UA::getQueryKey() => UA::getQueryValue())), UA::isIPhoneGroup() ? hs($itaj) : hs("{$key_num_st}{$itaj}"), $attr); if (UA::isIPhoneGroup()) { echo '<li>' . $atag . '</li>'; } else { echo $atag . '<br>'; } // [<a href="{$_SERVER['SCRIPT_NAME']}?host={$matches[1]}&bbs={$matches[2]}&setfavita=0&csrfid={$csrfid}&view=favita{$_conf['k_at_a']}">削</a>] $show_flag = true; } } if (UA::isIPhoneGroup()) { ?> </ul><?php } } if (!$show_flag) { ?> <p>お気に板はまだないようだ</p><?php } }
_setOrderIndexMenuK($_GET['code'], $_GET['set']); } elseif (isset($_REQUEST['setfrom1'])) { P2Util::setConfUser('index_menu_k_from1', (int) $_REQUEST['setfrom1']); // デフォルトに戻す } elseif (isset($_GET['setdef'])) { P2Util::setConfUser('index_menu_k', $conf_user_def['index_menu_k']); P2Util::setConfUser('index_menu_k_from1', $conf_user_def['index_menu_k_from1']); } // }}} require_once P2_LIB_DIR . '/index_print_k.inc.php'; $setfrom1 = (int) (!$_conf['index_menu_k_from1']); require_once P2_LIB_DIR . '/index.funcs.php'; $menuKLinkHtmls = getIndexMenuKLinkHtmls(getIndexMenuKIni(), $noLink = true); $body_at = P2View::getBodyAttrK(); $hr = P2View::getHrHtmlK(); $index_uri = UriUtil::buildQueryUri('index.php', array(UA::getQueryKey() => UA::getQueryValue())); //================================================================ // ヘッダHTML表示 //================================================================ P2Util::headerNoCache(); P2View::printDoctypeTag(); ?> <html lang="ja"> <head> <?php P2View::printExtraHeadersHtml(); ?> <title><?php eh($_conf['p2name']); ?> - 携帯TOPメニューの並び替え</title>
/** * @static * @access public * @return void HTML出力 */ function printIncludeCssHtml($css) { global $_conf, $_login; $href = UriUtil::buildQueryUri('css.php', array('css' => $css, 'user' => $_login->user_u, 'skin' => $_conf['skin'])); ?> <link rel="stylesheet" type="text/css" href="<?php eh($href); ?> "><?php }
/** * レス記事をHTML表示する 携帯用 * * @access public * @param array * @return void */ function printArticlesHtmlK($datlines) { global $_conf; $hr = P2View::getHrHtmlK(); $n = 0; foreach ($datlines as $aline) { $n++; if ($n < $this->resrange['start'] or $n > $this->resrange['to']) { continue; } $aline = rtrim($aline); $ResArticle = $this->lineToRes($aline, $n); $daytime_hs = hs($ResArticle->daytime); $ttitle = html_entity_decode($ResArticle->ttitle, ENT_COMPAT, 'Shift_JIS'); $ttitle_hs = hs($ttitle); $msg_ht = $ResArticle->msg; // 大きさ制限 if (empty($_GET['k_continue'])) { if ($_conf['ktai_res_size'] && strlen($msg_ht) > $_conf['ktai_res_size']) { $msg_ht = substr($msg_ht, 0, $_conf['ktai_ryaku_size']); // 末尾に<br>があれば取り除く(不完全なものも含めて) $brtag = '<br>'; for ($i = 0; $i < strlen($brtag); $i++) { if (substr($msg_ht, -1) == $brtag[strlen($brtag) - $i - 1]) { $msg_ht = substr($msg_ht, 0, strlen($msg_ht) - 1); } } $msg_ht .= ' ' . P2View::tagA(UriUtil::buildQueryUri('read_res_hist.php', array('from' => $ResArticle->order, 'end' => $ResArticle->order, 'k_continue' => '1', UA::getQueryKey() => UA::getQueryValue())), hs('略')); } } // 番号 $res_ht = "[{$ResArticle->order}]"; // 名前 $array = explode('#', $ResArticle->name, 2); if (count($array) == 2) { $name_ht = sprintf('%s◆%s', $array[0], P2Util::mkTrip($array[1])); } else { $name_ht = hs($ResArticle->name); } $res_ht .= $name_ht . ':'; // メール if ($ResArticle->mail) { $res_ht .= hs($ResArticle->mail) . ':'; } // 日付とID $res_ht .= "{$daytime_hs}<br>\n"; // 板名 $res_ht .= P2View::tagA(UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $ResArticle->host, 'bbs' => $ResArticle->bbs, UA::getQueryKey() => UA::getQueryValue())), hs($ResArticle->itaj)) . ' / '; if ($ResArticle->key) { if (empty($ResArticle->resnum) || $ResArticle->resnum == 1) { $ls_qs = array(); $footer_anchor = '#footer'; } else { $lf = max(1, $ResArticle->resnum - 0); $ls_qs = array('ls' => "{$lf}-"); $footer_anchor = "#r{$lf}"; } $time = time(); $ttitle_qs = array_merge(array('host' => $ResArticle->host, 'bbs' => $ResArticle->bbs, 'key' => $ResArticle->key, UA::getQueryKey() => UA::getQueryValue(), 'nt' => time()), $ls_qs); $res_ht .= P2View::tagA(UriUtil::buildQueryUri($_conf['read_php'], $ttitle_qs) . $footer_anchor, "{$ttitle_hs} "); } else { $res_ht .= "{$ttitle_hs}\n"; } // 削除 // $res_ht = "<dt><input name=\"checked_hists[]\" type=\"checkbox\" value=\"{$ResArticle->order},,,,{$daytime_hs}\"> "; $from_q = isset($_GET['from']) ? '&from=' . intval($_GET['from']) : ''; $dele_ht = "[<a href=\"read_res_hist.php?checked_hists[]={$ResArticle->order},,,," . hs(urlencode($ResArticle->daytime)) . "{$from_q}{$_conf['k_at_a']}\">削除</a>]"; $res_ht .= $dele_ht; $res_ht .= '<br>'; // 内容 $res_ht .= "{$msg_ht}{$hr}\n"; if ($_conf['k_save_packet']) { $res_ht = mb_convert_kana($res_ht, 'rnsk'); } echo $res_ht; } }
/** * 書 <a> * * @return string HTML */ function _getDoResATag($aThread, $dores_st, $motothre_url) { global $_conf; $dores_atag = null; if ($_conf['disable_res']) { $dores_atag = P2View::tagA($motothre_url, hs("{$_conf['k_accesskey']['res']}.{$dores_st}"), array('target' => '_blank', $_conf['accesskey_for_k'] => $_conf['k_accesskey']['res'])); } else { $dores_atag = P2View::tagA(UriUtil::buildQueryUri('post_form.php', array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'rescount' => $aThread->rescount, 'ttitle_en' => base64_encode($aThread->ttitle), UA::getQueryKey() => UA::getQueryValue())), hs("{$_conf['k_accesskey']['res']}.{$dores_st}"), array($_conf['accesskey_for_k'] => $_conf['k_accesskey']['res'])); } return $dores_atag; }
/** * @return void HTML出力 */ function _printEditSortTrHtml($host, $bbs, $itaj) { global $_conf; $itaj_en = base64_encode($itaj); ?> <tr> <td> <?php echo P2View::tagA(UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $host, 'bbs' => $bbs, UA::getQueryKey() => UA::getQueryValue())), hs($itaj), array('title' => "{$host}/{$bbs}")); ?> </td> <td>[ <?php echo P2View::tagA(UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en, 'setfavita' => 'top', 'csrfid' => P2Util::getCsrfId(), UA::getQueryKey() => UA::getQueryValue())), hs('▲'), array('class' => 'te', 'title' => '一番上に移動')); ?> </td> <td> <?php echo P2View::tagA(UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en, 'setfavita' => 'up', 'csrfid' => P2Util::getCsrfId(), UA::getQueryKey() => UA::getQueryValue())), hs('↑'), array('class' => 'te', 'title' => '一つ上に移動')); ?> </td> <td> <?php echo P2View::tagA(UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en, 'setfavita' => 'down', 'csrfid' => P2Util::getCsrfId(), UA::getQueryKey() => UA::getQueryValue())), hs('↓'), array('class' => 'te', 'title' => '一つ下に移動')); ?> </td> <td> <?php echo P2View::tagA(UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en, 'setfavita' => 'bottom', 'csrfid' => P2Util::getCsrfId(), UA::getQueryKey() => UA::getQueryValue())), hs('▼'), array('class' => 'te', 'title' => '一番下に移動')); ?> ]</td> <td>[<?php echo P2View::tagA(UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('host' => $host, 'bbs' => $bbs, 'setfavita' => '0', 'csrfid' => P2Util::getCsrfId(), UA::getQueryKey() => UA::getQueryValue())), hs('削除'), array('title' => '削除')); ?> ]</td> </tr> <?php }
/** * スレッド一覧を表示する (<tr>〜</tr>) * * @access public * @return void */ function sb_print_k(&$aThreadList) { global $_conf, $sb_view, $p2_setting, $STYLE; global $sb_view; if (!$aThreadList->threads) { if ($aThreadList->spmode == 'fav' && $sb_view == 'shinchaku') { if (UA::isIPhoneGroup()) { ?> <p>お気にスレに新着なかったぽ</p><?php } else { ?> <p>お気にスレに新着なかったぽ</p><?php } } else { if (UA::isIPhoneGroup()) { ?> <p>該当サブジェクトはなかったぽ</p><?php } else { ?> <p>該当サブジェクトはなかったぽ</p><?php } } return; } // 変数 ================================================ // >>1 表示 $onlyone_bool = false; /* // ニュース系の板なら適用 if (ereg('news', $aThreadList->bbs) || $aThreadList->bbs == 'bizplus' || $aThreadList->spmode == 'news') { // 倉庫は除く if ($aThreadList->spmode != "soko") { $onlyone_bool = true; } } */ // 板名 if ($aThreadList->spmode and $aThreadList->spmode != "taborn" and $aThreadList->spmode != "soko") { $ita_name_bool = true; } else { $ita_name_bool = false; } /* // {{{ 新着ソート(現在未使用) $qs = array( 'sort' => 'midoku', 'norefresh' => '1', UA::getQueryKey() => UA::getQueryValue() ); // スペシャルモード時 if ($aThreadList->spmode) { $qs['spmode'] = $aThreadList->spmode; // あぼーんなら if ($aThreadList->spmode == "taborn" or $aThreadList->spmode == "soko") { $qs['host'] = $aThreadList->host; $qs['bbs'] = $aThreadList->bbs; } } else { $qs['host'] = $aThreadList->host; $qs['bbs'] = $aThreadList->bbs; } $midoku_sort_ht = P2View::tagA( UriUtil::buildQueryUri($_conf['subject_php'], $qs), '新着' ); // }}} */ //===================================================== // ボディ //===================================================== // spmodeがあればクエリー追加 if ($aThreadList->spmode) { $spmode_q = "&spmode={$aThreadList->spmode}"; } $i = 0; foreach ($aThreadList->threads as $aThread) { $i++; $midoku_ari = ""; $anum_ht = ""; // #r1 $bbs_q = "&bbs=" . $aThread->bbs; $key_q = "&key=" . $aThread->key; if ($aThreadList->spmode != "taborn") { if (!$aThread->torder) { $aThread->torder = $i; } } // {{{ 新着レス数 $unum_ht = ''; // 既得済み if ($aThread->isKitoku()) { $unum_ht = "{$aThread->unum}"; $anum = $aThread->rescount - $aThread->unum + 1 - $_conf['respointer']; if ($anum > $aThread->rescount) { $anum = $aThread->rescount; } $anum_ht = "#r{$anum}"; // 新着あり if ($aThread->unum > 0) { $midoku_ari = true; if (UA::isIPhoneGroup()) { $unum_ht = "{$aThread->unum}"; } else { $unum_ht = "<font color=\"#ff6600\">{$aThread->unum}</font>"; } } // subject.txtにない時 if (!$aThread->isonline) { // 誤動作防止のためログ削除操作をロック $unum_ht = "-"; } if (UA::isIPhoneGroup()) { $unum_ht = '<font class="unum">' . $unum_ht . '</font>'; } else { $unum_ht = '[' . $unum_ht . ']'; } } // }}} // 新規スレ $unum_new_ht = ''; if ($aThread->new) { if (UA::isIPhoneGroup()) { // $unum_ht = '<font color="#0000ff">●</font>'; $unum_ht = ''; $unum_new_ht = '<img class="unew" src="iui/icon_new.png">'; } else { $unum_ht = '<font color="#ff0000">新</font>'; } } // {{{ 板名 $ita_name_ht = ''; if ($ita_name_bool) { $ita_name = $aThread->itaj ? $aThread->itaj : $aThread->bbs; // 全角英数カナスペースを半角に if ($_conf['k_save_packet']) { $ita_name = mb_convert_kana($ita_name, 'rnsk'); } /* $ita_name_ht = sprintf('(%s)', P2View::tagA( UriUtil::buildQueryUri($_conf['subject_php'], array( 'host' => $aThread->host, 'bbs' => $aThread->bbs, UA::getQueryKey() => UA::getQueryValue() ) ), hs($ita_name) ) ); */ if (UA::isIPhoneGroup()) { $ita_name_ht = sprintf(' <span class="ita">(%s)</span>', hs($ita_name)); } else { $ita_name_ht = sprintf('(%s)', hs($ita_name)); } } // }}} // torder(info) ================================================= /* // お気にスレ if ($aThread->fav) { $torder_st = "<b>{$aThread->torder}</b>"; } else { $torder_st = $aThread->torder; } $torder_ht = "<a id=\"to{$i}\" class=\"info\" href=\"info.php?host={$aThread->host}{$bbs_q}{$key_q}{$_conf['k_at_a']}\">{$torder_st}</a>"; */ $torder_ht = $aThread->torder; // title ========================================================= $rescount_qs = array('rc' => $aThread->rescount); $offline_qs = array(); // dat倉庫 or 殿堂なら if ($aThreadList->spmode == 'soko' || $aThreadList->spmode == 'palace') { $rescount_qs = array(); $offline_qs = array('offline' => '1'); $anum_ht = ''; } // タイトル未取得なら if (!$aThread->ttitle_ht) { // 見かけ上のタイトルなので携帯対応URLである必要はない //if (P2Util::isHost2chs($aThread->host)) { // $aThread->ttitle_ht = "http://c.2ch.net/z/-/{$aThread->bbs}/{$aThread->key}/"; //} else { $aThread->ttitle_ht = "http://{$aThread->host}/test/read.cgi/{$aThread->bbs}/{$aThread->key}/"; //} } // 全角英数カナスペースを半角に if ($_conf['k_save_packet']) { $aThread->ttitle_ht = mb_convert_kana($aThread->ttitle_ht, 'rnsk'); } // 総レス数 if (UA::isIPhoneGroup()) { $rescount_ht = '<font class="sbnum"> ' . $aThread->rescount . '</font>'; } else { $rescount_ht = ' (' . $aThread->rescount . ')'; } $similarity_ht = ''; if ($aThread->similarity) { $similarity_ht = sprintf(' %0.1f%%', $aThread->similarity * 100); } // 新規スレ if ($aThread->new) { $classtitle_q = ' class="thre_title_new"'; } else { $classtitle_q = ' class="thre_title"'; } $thre_url = UriUtil::buildQueryUri($_conf['read_php'], array_merge(array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, UA::getQueryKey() => UA::getQueryValue()), $rescount_qs, $offline_qs)) . $anum_ht; // オンリー>>1 $onlyone_url = UriUtil::buildQueryUri($_conf['read_php'], array_merge(array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'onlyone' => '1', 'k_continue' => '1', UA::getQueryKey() => UA::getQueryValue()), $rescount_qs)); if ($onlyone_bool) { $one_ht = "<a href=\"{$onlyone_url}\">>>1</a>"; } if (P2Util::isHost2chs($aThreadList->host) and !$aThread->isKitoku()) { if ($GLOBALS['_conf']['k_sb_show_first'] == 1) { $thre_url = $onlyone_url; } elseif ($GLOBALS['_conf']['k_sb_show_first'] == 2) { $thre_url .= '&ls=1-'; } } // アクセスキー /* $access_ht = ""; if ($aThread->torder >= 1 and $aThread->torder <= 9) { $access_ht = " {$_conf['accesskey_for_k']}=\"{$aThread->torder}\""; } */ if (UA::isIPhoneGroup()) { // お気にマーク設定 $favvalue = !empty($aThread->fav) ? 0 : 1; $favtitle = $favvalue ? 'お気にスレに追加' : 'お気にスレから外す'; $itaj_hs = htmlspecialchars($aThread->itaj, ENT_QUOTES); $favmark = !empty($aThread->fav) ? '★' : '+'; if ($favmark == '★') { $favmark = '<img src="iui/icon_del.png">'; } else { $favmark = '<img src="iui/icon_add.png">'; } $sid_qs = array(); $sid_q = ''; if (defined('SID') && strlen(SID)) { $sid_qs[session_name()] = session_id(); $sid_q = hs('&' . session_name() . '=' . session_id()); } $setFavUri = UriUtil::buildQueryUri('info_i.php', array_merge(array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'ttitle_en' => base64_encode($aThread->ttitle), 'setfav' => $favvalue), $sid_qs)); $setFavUri_hs = hs($setFavUri); } //==================================================================================== // スレッド一覧 table ボディ HTMLプリント <tr></tr> //==================================================================================== if (UA::isIPhoneGroup()) { ?> <li><?php echo "<span class=\"plus\" id=\"{$aThread->torder}\" ><a href=\"{$setFavUri_hs}\" target=\"info\" onClick=\"return setFavJsNoStr('host={$aThread->host}{$bbs_q}{$key_q}{$ttitle_en_q}{$sid_q}', '{$favvalue}', {$STYLE['info_pop_size']}, 'read', 'this',{$aThread->torder});\" title=\"{$favtitle}\">{$favmark}</a></span>"; // ボディ echo <<<EOP <a href="{$thre_url}" class="ttitle">{$unum_new_ht}{$aThread->ttitle_ht}{$ita_name_ht}{$rescount_ht}{$similarity_ht}</a>{$unum_ht}</li> EOP; } else { echo <<<EOP <div> {$unum_ht}{$aThread->torder}.<a href="{$thre_url}">{$aThread->ttitle_ht}{$rescount_ht}{$similarity_ht}</a>{$ita_name_ht} </div> EOP; } } }
/** * お気に板をHTML表示する * * @access public * @return void */ function printFavItaHtml() { global $_conf, $matome_i, $STYLE; // favita読み込み $favitas = array(); if (file_exists($_conf['favita_path'])) { if ($lines = file($_conf['favita_path'])) { foreach ($lines as $l) { if (preg_match("/^\t?(.+)\t(.+)\t(.+)\$/", trim($l), $matches)) { $favitas[] = array('host' => $matches[1], 'bbs' => $matches[2], 'itaj' => $matches[3]); } } } } // 空っぽなら if (!$favitas) { echo <<<EOP <div class="menu_cate"><b>お気に板</b> [<a href="editfavita.php" target="subject">編集</a>]<br> <div class="itas" id="c_favita">(空っぽ)</div> </div> EOP; return; } // 新着数を表示する場合・まとめてプリフェッチ if ($_conf['enable_menu_new'] && !empty($_GET['shownew'])) { if ($_conf['expack.use_pecl_http'] == 1) { require_once P2_LIB_DIR . '/P2HttpExt.php'; P2HttpRequestPool::fetchSubjectTxt($favitas); $GLOBALS['expack.subject.multi-threaded-download.done'] = true; } } $csrfid = P2Util::getCsrfId(); echo <<<EOP <div class="menu_cate"><b><a class="menu_cate" href="javascript:void(0);" onClick="showHide('c_favita', 'itas_hide');" target="_self">お気に板</a></b> [<a href="editfavita.php" target="subject">編集</a>]<br> <div class="itas" id="c_favita"> EOP; foreach ($favitas as $favita) { extract($favita); // $host, $bbs, $itaj $itaj_en = base64_encode($itaj); $uri = UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('host' => $host, 'bbs' => $bbs, 'setfavita' => '0', 'csrfid' => $csrfid)); $star_atag = P2View::tagA($uri, '★', array('target' => '_self', 'class' => 'fav', 'title' => "「{$itaj}」をお気に板から外す", 'onClick' => "return confirmSetFavIta('" . str_replace(array("\\", "'"), array("\\\\", "\\'"), $itaj) . "');")); // 新着数を表示する場合 if ($_conf['enable_menu_new'] && !empty($_GET['shownew'])) { $matome_i++; // $host, $bbs $spmode = ''; $shinchaku_num = 0; $_newthre_num = 0; include './subject_new.php'; // $shinchaku_num, $_newthre_num がセットされる $newthre_ht = ''; if ($_newthre_num) { $newthre_ht = "{$_newthre_num}"; } $subject_uri = UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en)); $subject_atag = P2View::tagA($subject_uri, hs($itaj), array('onClick' => "chMenuColor('{$matome_i}');")); $read_new_uri = UriUtil::buildQueryUri($_conf['read_new_php'], array('host' => $host, 'bbs' => $bbs)); $read_new_attr = array('target' => 'read', 'id' => "un{$matome_i}", 'onClick' => "chUnColor('{$matome_i}');"); if ($shinchaku_num > 0) { $read_new_attr['class'] = 'newres_num'; } else { $read_new_attr['class'] = 'newres_num_zero'; } $read_new_atag = P2View::tagA($read_new_uri, hs($shinchaku_num), $read_new_attr); echo <<<EOP {$star_atag} {$subject_atag} <span id="newthre{$matome_i}" class="newthre_num">{$newthre_ht}</span> ({$read_new_atag})<br> EOP; // 新着数を表示しない場合 } else { $subject_uri = UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en)); $subject_atag = P2View::tagA($subject_uri, hs($itaj)); echo "{$star_atag} {$subject_atag}<br>"; } ob_flush(); flush(); } // foreach echo " </div>\n"; echo "</div>\n"; }
/** * 1- 101- 201- のリンクHTMLを取得する * _getHeadBarHtml() から呼ばれる * * @return string HTML */ function _getReadNaviRangeHtml($aThread, $rnum_range) { global $_conf; static $cache_ = array(); if (array_key_exists("{$aThread->host}/{$aThread->bbs}/{$aThread->key}", $cache_)) { return $cache_["{$aThread->host}/{$aThread->bbs}/{$aThread->key}"]; } $read_navi_range_ht = ''; for ($i = 1; $i <= $aThread->rescount; $i = $i + $rnum_range) { $ito = $i + $rnum_range - 1; $qs = array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'ls' => "{$i}-{$ito}", UA::getQueryKey() => UA::getQueryValue()); if ($ito <= $aThread->gotnum) { $qs['offline'] = '1'; } $url = UriUtil::buildQueryUri($_conf['read_php'], $qs); $read_navi_range_ht .= P2View::tagA($url, "{$i}-") . "\n"; } return $cache_["{$aThread->host}/{$aThread->bbs}/{$aThread->key}"] = $read_navi_range_ht; }
/** * 新着まとめ読みのキャッシュリンクHTMLを表示する * * @return void */ function _printMatomeCacheLinksHtml() { global $_conf; $max = $_conf['matome_cache_max']; $links = array(); for ($i = 0; $i <= $max; $i++) { $dnum = $i ? '.' . $i : ''; $file = $_conf['matome_cache_path'] . $dnum . $_conf['matome_cache_ext']; //echo '<!-- ' . $file . ' -->'; if (file_exists($file)) { $filemtime = filemtime($file); $date = date('Y/m/d G:i:s', $filemtime); $b = filesize($file) / 1024; $kb = round($b, 0); $atag = P2View::tagA(UriUtil::buildQueryUri('read_new.php', array('cview' => '1', 'cnum' => "{$i}", 'filemtime' => $filemtime)), hs($date), array('target' => 'read')); $links[] = sprintf('%s %dKB', $atag, $kb); } } if ($links) { echo '<ul><li class="group">新着まとめ読みの前回キャッシュ</li></ul><div id="usage" class="panel"><filedset>' . implode('<br>', $links) . '</fildset></div>' . "\n"; } }
/** * @return string <a> */ function _getDatSokoATag($aThreadList) { global $_conf; $dat_soko_atag = ''; if (!$aThreadList->spmode or $aThreadList->spmode == 'taborn') { $uri = UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $aThreadList->host, 'bbs' => $aThreadList->bbs, 'norefresh' => '1', 'spmode' => 'soko', UA::getQueryKey() => UA::getQueryValue())); $dat_soko_atag = P2View::tagA($uri, hs('dat倉庫')); } return $dat_soko_atag; }
foreach ($formdata as $k => $v) { printf($row_format, $k, htmlspecialchars($v['word'], ENT_QUOTES), $v['ic'], $v['re'], htmlspecialchars($v['ht'], ENT_QUOTES), $v['hn'], htmlspecialchars($v['bbs'], ENT_QUOTES), htmlspecialchars($v['tt'], ENT_QUOTES), strlen($v['ht']) > 0 ? htmlspecialchars($v['ht'], ENT_QUOTES) : '--'); } echo $htm['form_submit']; } // PCなら if (!$_conf['ktai']) { echo '</table>' . "\n"; } ?> </form> <?php // 携帯なら if (UA::isK()) { echo P2View::getHrHtmlK(); echo P2View::tagA(UriUtil::buildQueryUri($_conf['editpref_php'], array(UA::getQueryKey() => UA::getQueryValue())), hs(sprintf('%s.設定編集', $_conf['k_accesskey']['up'])), array($_conf['accesskey_for_k'] => $_conf['k_accesskey']['up'])); echo P2View::getBackToIndexKATag(); } ?> </body></html> <?php /* * Local Variables: * mode: php * coding: cp932 * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: nil * End: */ // vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker:
if (isset($_POST['checked_hists'])) { $checked_hists = $_POST['checked_hists']; } elseif (isset($_GET['checked_hists'])) { $checked_hists = $_GET['checked_hists']; } $checked_hists and deleMsg($checked_hists); } // 古いバージョンの形式であるデータPHP形式(p2_res_hist.dat.php, タブ区切り)の書き込み履歴を、 // dat形式(p2_res_hist.dat, <>区切り)に変換する P2Util::transResHistLogPhpToDat(); //====================================================================== // メイン //====================================================================== $karappoMsgHtml = 'p2 - 書き込み履歴内容は空っぽのようです。'; if (!$_conf['res_write_rec']) { $karappoMsgHtml .= sprintf('<p>現在、書き込み内容ログは記録しない設定になっています。<br>設定は、%sのページで変更可能\です。</p>', P2View::tagA(UriUtil::buildQueryUri('edit_conf_user.php', array(UA::getQueryKey() => UA::getQueryValue())), hs('設定編集'), array('target' => 'subject'))); } // 特殊DAT読み if (!file_exists($_conf['p2_res_hist_dat'])) { P2Util::printSimpleHtml($karappoMsgHtml); exit; } $res_hist_dat_size = filesize($_conf['p2_res_hist_dat']); $logSizeSt = P2Util::getTranslatedUnitFileSize($res_hist_dat_size); $maxLogSize = 0; //1024*1024*10; $maxLogSizeSt = P2Util::getTranslatedUnitFileSize($maxLogSize); if ($maxLogSize and $res_hist_dat_size > $maxLogSize) { P2Util::printSimpleHtml(sprintf('書き込みログ容量(%s/%s)が大き過ぎるため、表\示できません。<br> %sのページより、書き込みログの一括削除を行って下さい。', hs($logSizeSt), hs($maxLogSizeSt), P2View::tagA($_conf['editpref_php'], hs('設定管理'), array('target' => 'subject')))); exit;
/** * @return string HTML */ function _getPostLinkATag($aThread, $ttitle_en) { return $post_link_atag = P2View::tagA(UriUtil::buildQueryUri('post_form.php', array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'rescount' => $aThread->rescount, 'ttitle_en' => $ttitle_en, UA::getQueryKey() => UA::getQueryValue())), '書'); }
/** * 新着まとめ読みのキャッシュリンクHTMLを表示する * * @return void */ function _printMatomeCacheLinksHtml() { global $_conf; $max = $_conf['matome_cache_max']; $links = array(); for ($i = 0; $i <= $max; $i++) { $dnum = $i ? '.' . $i : ''; $file = $_conf['matome_cache_path'] . $dnum . $_conf['matome_cache_ext']; //echo '<!-- ' . $file . ' -->'; if (file_exists($file)) { $filemtime = filemtime($file); $date = date('Y/m/d G:i:s', $filemtime); $b = filesize($file) / 1024; $kb = round($b, 0); $atag = P2View::tagA(UriUtil::buildQueryUri('read_new.php', array('cview' => '1', 'cnum' => "{$i}", 'filemtime' => $filemtime)), hs($date), array('target' => 'read')); $links[] = sprintf('%s %dKB', $atag, $kb); } } if ($links) { echo '<p>新着まとめ読みの前回キャッシュを表\示<br>' . implode('<br>', $links) . '</p>' . "\n"; if ($_conf['ktai']) { $hr = P2View::getHrHtmlK(); echo $hr . "\n"; } } }
$client_host_st = '端末ホスト'; $client_ip_st = '端末IPアドレス'; $browser_ua_st = 'ブラウザUA'; $p2error_st = 'rep2 エラー'; $logout_st = 'ログアウト'; } else { $status_st = 'ステータス'; $autho_user_st = '認証ユーザ'; $client_host_st = '端末ホスト'; $client_ip_st = '端末IPアドレス'; $browser_ua_st = 'ブラウザUA'; $p2error_st = 'rep2 エラー'; $logout_st = 'ログアウト'; } $login_uri = UriUtil::buildQueryUri('login.php', array(UA::getQueryKey() => UA::getQueryValue())); $login2ch_uri = UriUtil::buildQueryUri('login2ch.php', array(UA::getQueryKey() => UA::getQueryValue())); $body_onload = ''; if (UA::isPC()) { $body_onload = ' onLoad="setWinTitle();"'; } $hr = P2View::getHrHtmlK(); $body_at = P2View::getBodyAttrK(); //========================================================= // HTMLプリント //========================================================= P2Util::headerNoCache(); P2View::printDoctypeTag(); ?> <html lang="ja"> <head> <?php
// p2 - サブジェクト - 携帯ヘッダ表示 // for subject.php //=============================================================== // HTML表示用変数 //=============================================================== $newtime = date("gis"); // {{{ ページタイトル部分URL設定 $p2_subject_url = UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $aThreadList->host, 'bbs' => $aThreadList->bbs, UA::getQueryKey() => UA::getQueryValue())); $ptitle_url = null; // あぼーん or 倉庫 if ($aThreadList->spmode == 'taborn' or $aThreadList->spmode == 'soko') { $ptitle_url = $p2_subject_url; // 書き込み履歴 } elseif ($aThreadList->spmode == 'res_hist') { $ptitle_url = UriUtil::buildQueryUri('read_res_hist.php', array(UA::getQueryKey() => UA::getQueryValue())); // 通常 板 } elseif (!$aThreadList->spmode) { // 特別なパターン index2.html // match登録よりheadなげて聞いたほうがよさそうだが、ワンレスポンス増えるのが困る if (preg_match('/www\\.onpuch\\.jp/', $aThreadList->host)) { $ptitle_url = $ptitle_url . 'index2.html'; } elseif (preg_match("/livesoccer\\.net/", $aThreadList->host)) { $ptitle_url = $ptitle_url . 'index2.html'; // PC } elseif (empty($_conf['ktai'])) { $ptitle_url = "http://{$aThreadList->host}/{$aThreadList->bbs}/i/"; // 携帯 } else { if (!empty($GLOBALS['word']) || !empty($GLOBALS['wakati_words'])) { $ptitle_url = $p2_subject_url;
/** * @access private * @return string HTML */ function getMarutoriHtml() { global $_conf; $marutori_atag = P2View::tagA(UriUtil::buildQueryUri($_conf['read_php'], array('host' => $this->host, 'bbs' => $this->bbs, 'key' => $this->key, 'ls' => $this->ls, 'maru' => 'true', UA::getQueryKey() => UA::getQueryValue())), hs('●IDでp2に取り込む')); return "[{$marutori_atag}]"; }
/** * メニュー項目のリンクHTMLを取得する * * @access private * @param array $menuKIni メニュー項目 標準設定 * @param boolean $noLink リンクをつけないのならtrue * @return string HTML */ function _getMenuKLinkHtml($code, $menuKIni, $noLink = false) { global $_conf, $_login; static $accesskey_ = 0; // 無効なコード指定なら if (!isset($menuKIni[$code][0]) || !isset($menuKIni[$code][1])) { return false; } $accesskey = ++$accesskey_; if ($_conf['index_menu_k_from1']) { $accesskey = $accesskey + 1; if ($accesskey == 10) { $accesskey = 0; } } if ($accesskey > 9) { $accesskey = null; } $href = $menuKIni[$code][0] . '&user='******'&' . UA::getQueryKey() . '=' . UA::getQueryValue(); $name = $menuKIni[$code][1]; /*if (!is_null($accesskey)) { $name = $accesskey . '.' . $name; }*/ if ($noLink) { $linkHtml = hs($name); } else { $accesskeyAt = is_null($accesskey) ? '' : " {$_conf['accesskey_for_k']}=\"{$accesskey}\""; $linkHtml = "<a href=\"" . hs($href) . '">' . hs($name) . "</a>"; } // 特別 - #.ログ if ($code == 'res_hist') { $name = 'ログ'; if ($noLink) { $logHt = hs($name); } else { $newtime = date('gis'); $logHt = P2View::tagA(UriUtil::buildQueryUri('read_res_hist.php', array('nt' => $newtime, UA::getQueryKey() => UA::getQueryValue())), hs($name), array($_conf['accesskey_for_k'] => '#')); } $linkHtml .= ' </li><li>' . $logHt; } return $linkHtml; }
/** * @return string HTML */ function _getOffRecentATag($aThread, $offrecent_accesskey, $ttitle_en) { global $_conf; $preKey = ''; if (UA::isK() && $offrecent_accesskey) { $preKey = $offrecent_accesskey . '.'; } return P2View::tagA(UriUtil::buildQueryUri('info_i.php', array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'offrecent' => '1', 'popup' => (int) (bool) geti($_GET['popup']), 'ttitle_en' => $ttitle_en, UA::getQueryKey() => UA::getQueryValue())), sprintf('%s履歴から外す', hs($preKey)), array('title' => 'このスレを「最近読んだスレ」と「書き込み履歴」から外します', 'accesskey' => $offrecent_accesskey)); }
/** * 「続きを読む」 <a> * * @return string HTML */ function _getTudukiATag($aThread, $tuduki_st) { global $_conf; return P2View::tagA(UriUtil::buildQueryUri($_conf['read_php'], array('host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'ls' => $GLOBALS['last_hit_resnum'] . '-', 'offline' => '1')), hs($tuduki_st), array('accesskey' => $_conf['pc_accesskey']['tuduki'], 'title' => sprintf('アクセスキー[%s]', $_conf['pc_accesskey']['tuduki']), 'style' => 'white-space: nowrap;')); }
/** * 2ch, bbspink 板リンク * * @access private * @return string|false HTML */ function plugin_link2chSubject($url, $purl, $html) { global $_conf; if (preg_match('{^http://(\\w+\\.(?:2ch\\.net|bbspink\\.com))/([^/]+)/$}', $url, $m)) { return sprintf('%s [%s]', P2View::tagA($url, $html, array('target' => 'subject')), P2View::tagA(UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $m[1], 'bbs' => $m[2])), hs('板をp2で開く'), array('target' => 'subject'))); } return false; }