/** * 登録されているRSS一覧を表示(携帯用) */ function print_rss_list_k() { global $_conf; $pageTitle = $_conf['expack.misc.multi_favs'] ? FavSetManager::getFavSetPageTitleHt('m_rss_set', 'RSS') : 'RSS'; echo $pageTitle; echo '<hr>'; $i = 1; if ($rss_list = FileCtl::file_read_lines($_conf['expack.rss.setting_path'], FILE_IGNORE_NEW_LINES)) { foreach ($rss_list as $rss_info) { $p = explode("\t", $rss_info); if (count($p) > 1) { $site = $p[0]; $xml = $p[1]; if (!empty($p[2])) { $atom = 1; $atom_q = '&atom=1'; } else { $atom = 0; $atom_q = ''; } if ($i <= 9) { $accesskey_at = $_conf['k_accesskey_at'][$i]; $accesskey_st = "{$i} "; } else { $accesskey_at = ''; $accesskey_st = ''; } $localpath = rss_get_save_path($xml); if (PEAR::isError($localpath)) { echo $accesskey_st . $site . ' ' . $localpath->getMessage() . "<br>\n"; } else { $mtime = file_exists($localpath) ? filemtime($localpath) : 0; $site_en = UrlSafeBase64::encode($site); $xml_en = rawurlencode($xml); $rss_q = sprintf('?xml=%s&site_en=%s%s&mt=%d', $xml_en, $site_en, $atom_q, $mtime); $rss_q_ht = p2h($rss_q); echo "{$accesskey_st}<a href=\"subject_rss.php{$rss_q_ht}\"{$accesskey_at}>{$site}</a><br>\n"; } $i++; } } } }
/** * spmodeを設定する */ public function setSpMode($name) { global $_conf; $halfwidth = $_conf['ktai'] && !$_conf['iphone']; switch ($name) { case 'recent': $this->spmode = $name; $this->ptitle = $halfwidth ? '最近読んだスレ' : '最近読んだスレ'; break; case 'res_hist': $this->spmode = $name; $this->ptitle = '書き込み履歴'; break; case 'fav': $this->spmode = $name; $this->ptitle = $halfwidth ? 'お気にスレ' : 'お気にスレ'; break; case 'taborn': $this->spmode = $name; $this->ptitle = $this->itaj . ($halfwidth ? ' (アボン中)' : ' (あぼーん中)'); break; case 'soko': $this->spmode = $name; $this->ptitle = "{$this->itaj} (dat倉庫)"; break; case 'palace': $this->spmode = $name; $this->ptitle = $halfwidth ? 'スレの殿堂' : 'スレの殿堂'; break; case 'merge_favita': $this->spmode = $name; if ($_conf['expack.misc.multi_favs']) { $this->ptitle = str_replace(array('>', '<', '"', '''), array('>', '<', '"', "'"), FavSetManager::getFavSetPageTitleHt('m_favita_set', 'お気に板')) . ' (まとめ)'; } else { $this->ptitle = 'お気に板 (まとめ)'; } break; } }
// match登録よりheadなげて聞いたほうがよさそうだが、ワンレスポンス増えるのが困る if (!strcasecmp($aThreadList->host, 'livesoccer.net')) { $ptitle_url .= 'index2.html'; } } // あぼーん or 倉庫 } elseif ($aThreadList->spmode == 'taborn' || $aThreadList->spmode == 'soko') { $ptitle_url = $p2_subject_url; // 書き込み履歴 } elseif ($aThreadList->spmode == 'res_hist') { $ptitle_url = "./read_res_hist.php{$_conf['k_at_q']}#footer"; } // }}} // {{{ ページタイトル部分HTML設定 if ($aThreadList->spmode == 'fav' && $_conf['expack.misc.multi_favs']) { $ptitle_hd = FavSetManager::getFavSetPageTitleHt('m_favlist_set', $aThreadList->ptitle); } else { $ptitle_hd = p2h($aThreadList->ptitle); } if ($aThreadList->spmode == 'taborn') { $ptitle_ht = <<<EOP <a href="{$ptitle_url}"><b>{$aThreadList->itaj_hd}</b></a>(アボン中) EOP; } elseif ($aThreadList->spmode == 'soko') { $ptitle_ht = <<<EOP <a href="{$ptitle_url}"><b>{$aThreadList->itaj_hd}</b></a>(dat倉庫) EOP; } elseif (!empty($ptitle_url)) { $ptitle_ht = <<<EOP <a href="{$ptitle_url}" class="nobutton"><b>{$ptitle_hd}</b></a> EOP;
} else { $favita[$no] = $name = $no ? "お気に板{$no}" : 'お気に板'; } echo "<li><a href=\"#favita{$no}\">{$name}</a></li>"; } echo "</ul>\n"; $orig_favita_brd = $_conf['favita_brd']; foreach ($favita as $no => $name) { $_conf['favita_brd'] = $_conf['pref_dir'] . DIRECTORY_SEPARATOR . ($no ? "p2_favita{$no}.brd" : 'p2_favita.brd'); menu_iphone_show_favorite_boards($name, $no); } $_conf['favita_brd'] = $orig_favita_brd; // }}} // {{{ RSS if ($_conf['expack.rss.enabled']) { $rss = FavSetManager::getFavSetTitles('m_rss_set'); if (!$rss) { $rss = array(); } echo '<ul id="rss" title="RSS">'; for ($no = 0; $no <= $_conf['expack.misc.favset_num']; $no++) { if (isset($rss[$no]) && strlen($rss[$no]) > 0) { $name = $rss[$no]; } else { $rss[$no] = $name = $no ? "RSS{$no}" : 'RSS'; } echo "<li><a href=\"#rss{$no}\">{$name}</a></li>"; } echo "</ul>\n"; $orig_rss_setting_path = $_conf['expack.rss.setting_path']; foreach ($rss as $no => $name) {
/** * お気に板をプリントする for 携帯 */ public function printFavIta() { global $_conf; $show_flag = false; // favita読み込み if ($lines = FileCtl::file_read_lines($_conf['favita_brd'], FILE_IGNORE_NEW_LINES)) { if ($_conf['expack.misc.multi_favs']) { $favset_title = FavSetManager::getFavSetPageTitleHt('m_favita_set', 'お気に板'); } else { $favset_title = 'お気に板'; } echo "<div>{$favset_title}"; if ($_conf['merge_favita']) { echo " (<a href=\"{$_conf['subject_php']}?spmode=merge_favita{$_conf['k_at_a']}{$_conf['m_favita_set_at_a']}\">まとめ</a>)"; } echo " [<a href=\"editfavita.php{$_conf['k_at_q']}{$_conf['m_favita_set_at_a']}\">編集</a>]<hr>"; $i = 0; foreach ($lines as $l) { $i++; if (preg_match("/^\t?(.+)\t(.+)\t(.+)\$/", $l, $matches)) { $itaj = rtrim($matches[3]); $itaj_view = p2h($itaj); $itaj_en = UrlSafeBase64::encode($itaj); if ($i <= 9) { $accesskey_at = $_conf['k_accesskey_at'][$i]; $accesskey_st = $_conf['k_accesskey_st'][$i]; } else { $accesskey_at = ''; $accesskey_st = ''; } echo <<<EOP <a href="{$_conf['subject_php']}?host={$matches[1]}&bbs={$matches[2]}&itaj_en={$itaj_en}{$_conf['k_at_a']}"{$accesskey_at}>{$accesskey_st}{$itaj_view}</a><br> EOP; // [<a href="{$_SERVER['SCRIPT_NAME']}?host={$matches[1]}&bbs={$matches[2]}&setfavita=0&view=favita{$_conf['k_at_a']}{$_conf['m_favita_set_at_a']}">削</a>] $show_flag = true; } } echo "</div>"; } if (empty($show_flag)) { echo "<p>お気に板はまだないようだ</p>"; } }
<input type="hidden" name="bbs" value="{$aThread->bbs}"> <input type="hidden" name="key" value="{$aThread->key}"> <input type="text" size="7" name="ls" value="{$aThread->ls}"> {$_conf['k_input_ht']} <input type="submit" value="go"> </form> GOTO; //==================================================================== // HTMLプリント //==================================================================== // ツールバー部分HTML ======= // お気にマーク設定 $similar_q = '&itaj_en=' . UrlSafeBase64::encode($aThread->itaj) . '&method=similar&word=' . rawurlencode($aThread->ttitle_hc) . '&refresh=1'; $itaj_hd = p2h($aThread->itaj); if ($_conf['expack.misc.multi_favs']) { $favlist_titles = FavSetManager::getFavSetTitles('m_favlist_set'); $toolbar_setfav_ht = 'お気に['; $favdo = !empty($aThread->favs[0]) ? 0 : 1; $favdo_q = '&setfav=' . $favdo; $favmark = $favdo ? '+' : '★'; $favtitle = (!isset($favlist_titles[0]) || $favlist_titles[0] == '' ? 'お気にスレ' : $favlist_titles[0]) . ($favdo ? 'に追加' : 'から外す'); $setnum_q = '&setnum=0'; $toolbar_setfav_ht .= <<<EOP <span class="favdo set0"><a href="info.php?{$host_bbs_key_q}{$ttitle_en_q}{$favdo_q}{$setnum_q}" target="info" onclick="return setFavJs('{$host_bbs_key_q}{$ttitle_en_q}', '{$favdo}', {$STYLE['info_pop_size']}, 'read', this, '0');" title="{$favtitle}">{$favmark}</a></span> EOP; for ($i = 1; $i <= $_conf['expack.misc.favset_num']; $i++) { $favdo = !empty($aThread->favs[$i]) ? 0 : 1; $favdo_q = '&setfav=' . $favdo; $favmark = $favdo ? $i : '★'; $favtitle = (!isset($favlist_titles[$i]) || $favlist_titles[$i] == '' ? 'お気にスレ' . $i : $favlist_titles[$i]) . ($favdo ? 'に追加' : 'から外す'); $setnum_q = '&setnum=' . $i;
alert("見たいスレッドのURLを入力して下さい。 例:http://pc.2ch.net/test/read.cgi/mac/1034199997/"); return false; } EOP; $onclick_ht = htmlspecialchars($onclick_ht, ENT_QUOTES); echo <<<EOP <form id="urlform" method="GET" action="{$_conf['read_php']}" target="read"> スレURLを直接指定 <input id="url_text" type="text" value="{$ini_url_text}" name="url" size="62"> <input type="submit" name="btnG" value="表\示" onclick="{$onclick_ht}"> </form> EOP; if ($aThreadList->spmode == 'fav' && $_conf['expack.misc.multi_favs']) { echo "\t<div style=\"margin:8px 8px;\">\n"; echo FavSetManager::makeFavSetSwitchForm('m_favlist_set', 'お気にスレ', NULL, NULL, FALSE, array('spmode' => 'fav', 'norefresh' => 1)); echo "\t</div>\n"; } //} //================ echo '</body> </html>'; /* * Local Variables: * mode: php * coding: cp932 * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: nil * End: */
} else { $taborn_link_ht = ''; } // }}} // {{{ 新規スレッド作成 if (!$aThreadList->spmode) { $buildnewthread_ht = <<<EOP <a href="post_form.php?{$host_bbs_q}&newthread=1{$_conf['k_at_a']}">スレ立て</a> EOP; } else { $buildnewthread_ht = ''; } // }}} // {{{ お気にスレセット切替 if ($aThreadList->spmode == 'fav' && $_conf['expack.misc.multi_favs']) { $switchfavlist_ht = '<div>' . FavSetManager::makeFavSetSwitchForm('m_favlist_set', 'お気にスレ', NULL, NULL, FALSE, array('spmode' => 'fav')) . '</div>'; } else { $switchfavlist_ht = ''; } // }}} // {{{ ソート変更 (新着 レス No. タイトル 板 すばやさ 勢い Birthday ☆) $sorts = array('midoku' => '新着', 'res' => 'レス', 'no' => 'No.', 'title' => 'タイトル'); if ($aThreadList->spmode and $aThreadList->spmode != 'taborn' and $aThreadList->spmode != 'soko') { $sorts['ita'] = '板'; } if ($_conf['sb_show_spd']) { $sorts['spd'] = 'すばやさ'; } if ($_conf['sb_show_ikioi']) { $sorts['ikioi'] = '勢い'; }
/** * お気にスレ、お気に板、RSSのセットリストを切り替えるselect要素を生成する * * @param string $set_name * @param string $set_title * @param bool $set_selected * @param string $onchange * @return string */ public static function makeFavSetSwitchElem($set_name, $set_title, $set_selected = false, $onchange = null) { global $_conf; // 変数初期化 $i = isset($_SESSION[$set_name]) ? (int) $_SESSION[$set_name] : 0; if ($onchange) { $onchange_ht = " onchange=\"{$onchange}\""; } else { $onchange_ht = ''; } // ユーザ設定タイトルを読み込む if (!($titles = FavSetManager::getFavSetTitles($set_name))) { $titles = array(); } // SELECT要素作成 $select_ht = "<select name=\"{$set_name}\"{$onchange_ht}>"; if (!$set_selected) { $select_ht .= "<option value=\"{$i}\" selected>[{$set_title}]</option>"; } for ($j = 0; $j <= $_conf['expack.misc.favset_num']; $j++) { if (!isset($titles[$j]) || strlen($titles[$j]) == 0) { $titles[$j] = $j == 0 ? $set_title : $set_title . $j; } // 全角英数スペースカナを半角に if ($_conf['ktai'] && $_conf['mobile.save_packet']) { $titles[$j] = mb_convert_kana($titles[$j], 'rnsk'); } $selected = $set_selected && $i == $j ? ' selected' : ''; $select_ht .= "<option value=\"{$j}\"{$selected}>{$titles[$j]}</option>"; } $select_ht .= "</select>\n"; return $select_ht; }
EOFORM; // お気に板同期フォーム $sync_favita_form_ht = <<<EOFORM <form method="POST" action="{$_SERVER['SCRIPT_NAME']}" target="_self"> <p> {$_conf['k_input_ht']} <input type="hidden" id="syncfavita" name="syncfavita" value="1"> <input type="submit" name="submit" value="板リストとホストを同期する">(板のホスト移転に対応します) </p> </form> EOFORM; // お気に板切替フォーム if ($_conf['expack.misc.multi_favs']) { $switch_favita_form_ht = FavSetManager::makeFavSetSwitchForm('m_favita_set', 'お気に板', null, null, !$_conf['ktai']); } else { $switch_favita_form_ht = ''; } $script_enable_html = ''; //================================================================ // ヘッダ //================================================================ P2Util::header_nocache(); echo $_conf['doctype']; echo <<<EOP <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript">
function readNew($aThread) { global $_conf, $newthre_num, $STYLE; global $word; static $favlist_titles = null; if ($_conf['expack.misc.multi_favs'] && is_null($favlist_titles)) { $favlist_titles = FavSetManager::getFavSetTitles('m_favlist_set'); if (empty($favlist_titles)) { $favlist_titles = array(); } if (!isset($favlist_titles[0]) || $favlist_titles[0] == '') { $favlist_titles[0] = 'お気にスレ'; } for ($i = 1; $i <= $_conf['expack.misc.favset_num']; $i++) { if (!isset($favlist_titles[$i]) || $favlist_titles[$i] == '') { $favlist_titles[$i] = 'お気にスレ' . $i; } } } $newthre_num++; //========================================================== // idxの読み込み //========================================================== // hostを分解してidxファイルのパスを求める $aThread->setThreadPathInfo($aThread->host, $aThread->bbs, $aThread->key); // FileCtl::mkdirFor($aThread->keyidx); // 板ディレクトリが無ければ作る // この操作はおそらく不要 $aThread->itaj = P2Util::getItaName($aThread->host, $aThread->bbs); if (!$aThread->itaj) { $aThread->itaj = $aThread->bbs; } // idxファイルがあれば読み込む if ($lines = FileCtl::file_read_lines($aThread->keyidx, FILE_IGNORE_NEW_LINES)) { $data = explode('<>', $lines[0]); } else { $data = array_fill(0, 12, ''); } $aThread->getThreadInfoFromIdx(); //================================================================== // DATのダウンロード //================================================================== if (!($word and file_exists($aThread->keydat))) { $aThread->downloadDat(); } // DATを読み込み $aThread->readDat(); $aThread->setTitleFromLocal(); // ローカルからタイトルを取得して設定 //=========================================================== // 表示レス番の範囲を設定 //=========================================================== // 取得済みなら if ($aThread->isKitoku()) { $from_num = $aThread->readnum + 1 - $_conf['respointer'] - $_conf['before_respointer_new']; if ($from_num > $aThread->rescount) { $from_num = $aThread->rescount - $_conf['respointer'] - $_conf['before_respointer_new']; } if ($from_num < 1) { $from_num = 1; } //if (!$aThread->ls) { $aThread->ls = "{$from_num}-"; //} } $aThread->lsToPoint(); //================================================================== // ヘッダ 表示 //================================================================== $motothre_url = $aThread->getMotoThread(false, ''); $ttitle_en = UrlSafeBase64::encode($aThread->ttitle); $ttitle_en_q = '&ttitle_en=' . $ttitle_en; $bbs_q = '&bbs=' . $aThread->bbs; $key_q = '&key=' . $aThread->key; $host_bbs_key_q = 'host=' . $aThread->host . $bbs_q . $key_q; $popup_q = '&popup=1'; // require_once P2_LIB_DIR . '/read_header.inc.php'; $prev_thre_num = $newthre_num - 1; $next_thre_num = $newthre_num + 1; if ($prev_thre_num != 0) { $prev_thre_ht = "<a href=\"#ntt{$prev_thre_num}\">▲</a>"; } else { $prev_thre_ht = ''; } $next_thre_ht = "<a id=\"ntta{$next_thre_num}\" href=\"#ntt{$next_thre_num}\">▼</a>"; P2Util::printInfoHtml(); // ヘッダ部分HTML $read_header_ht = <<<EOP <table id="ntt{$newthre_num}" class="toolbar"> <tr> <td class="lblock"><h3 class="thread_title">{$aThread->ttitle_hd}</h3></td> <td class="rblock">{$prev_thre_ht} {$next_thre_ht}</td> </tr> </table> EOP; //================================================================== // ローカルDatを読み込んでHTML表示 //================================================================== $aThread->resrange['nofirst'] = true; $GLOBALS['newres_to_show_flag'] = false; if ($aThread->rescount) { $aShowThread = new ShowThreadPc($aThread, true); if ($_conf['expack.spm.enabled']) { $read_header_ht .= $aShowThread->getSpmObjJs(); } $res1 = $aShowThread->quoteOne(); $read_cont_ht = $res1['q']; $read_cont_ht .= $aShowThread->getDatToHtml(); // レス追跡カラー if ($_conf['backlink_coloring_track']) { $read_cont_ht .= $aShowThread->getResColorJs(); } // IDカラーリング if ($_conf['coloredid.enable'] > 0 && $_conf['coloredid.click'] > 0) { $read_header_ht .= $aShowThread->getIdColorJs(); } // 外部ツール $pluswiki_js = ''; if ($_conf['wiki.idsearch.spm.mimizun.enabled']) { require_once './plugin/mimizun/mimizun.class.php'; $mimizun = new mimizun(); $mimizun->host = $aThread->host; $mimizun->bbs = $aThread->bbs; if ($mimizun->isEnable()) { $pluswiki_js .= "WikiTools.addMimizun({$aShowThread->spmObjName});"; } } if ($_conf['wiki.idsearch.spm.hissi.enabled']) { require_once './plugin/hissi/hissi.class.php'; $hissi = new hissi(); $hissi->host = $aThread->host; $hissi->bbs = $aThread->bbs; if ($hissi->isEnable()) { $pluswiki_js .= "WikiTools.addHissi({$aShowThread->spmObjName});"; } } if ($_conf['wiki.idsearch.spm.stalker.enabled']) { require_once './plugin/stalker/stalker.class.php'; $stalker = new stalker(); $stalker->host = $aThread->host; $stalker->bbs = $aThread->bbs; if ($stalker->isEnable()) { $pluswiki_js .= "WikiTools.addStalker({$aShowThread->spmObjName});"; } } if ($pluswiki_js) { $read_header_ht .= <<<EOP <script type="text/javascript"> //<![CDATA[ {$pluswiki_js} //]]> </script> EOP; } unset($aShowThread); } //================================================================== // フッタ 表示 //================================================================== // $read_footer_navi_new 続きを読む 新着レスの表示 $newtime = date("gis"); // リンクをクリックしても再読込しない仕様に対抗するダミークエリー $info_st = '情報'; $delete_st = '削除'; $prev_st = '前'; $next_st = '次'; $dores_st = '書込'; $read_footer_navi_new = "<a href=\"{$_conf['read_php']}?{$host_bbs_key_q}&ls={$aThread->rescount}-&nt={$newtime}#r{$aThread->rescount}\">新着レスの表\示</a>"; if (!empty($_conf['disable_res'])) { $dores_ht = <<<EOP <a href="{$motothre_url}" target="_blank">{$dores_st}</a> EOP; } else { $dores_ht = <<<EOP <a href="post_form.php?{$host_bbs_key_q}&rescount={$aThread->rescount}{$ttitle_en_q}" target='_self' onclick="return OpenSubWin('post_form.php?{$host_bbs_key_q}&rescount={$aThread->rescount}{$ttitle_en_q}{$popup_q}&from_read_new=1',{$STYLE['post_pop_size']},1,0)">{$dores_st}</a> EOP; } // ツールバー部分HTML ======= // お気にマーク設定 $itaj_hd = htmlspecialchars($aThread->itaj, ENT_QUOTES); $similar_q = '&itaj_en=' . UrlSafeBase64::encode($aThread->itaj) . '&method=similar&word=' . rawurlencode($aThread->ttitle_hc); if ($_conf['expack.misc.multi_favs']) { $toolbar_setfav_ht = 'お気に['; $favdo = !empty($aThread->favs[0]) ? 0 : 1; $favdo_q = '&setfav=' . $favdo; $favmark = $favdo ? '+' : '★'; $favtitle = $favlist_titles[0] . ($favdo ? 'に追加' : 'から外す'); $setnum_q = '&setnum=0'; $toolbar_setfav_ht .= <<<EOP <span class="favdo set0"><a href="info.php?{$host_bbs_key_q}{$ttitle_en_q}{$favdo_q}{$setnum_q}" target="info" onclick="return setFavJs('{$host_bbs_key_q}{$ttitle_en_q}', '{$favdo}', {$STYLE['info_pop_size']}, 'read_new', this, '0');" title="{$favtitle}">{$favmark}</a></span> EOP; for ($i = 1; $i <= $_conf['expack.misc.favset_num']; $i++) { $favdo = !empty($aThread->favs[$i]) ? 0 : 1; $favdo_q = '&setfav=' . $favdo; $favmark = $favdo ? $i : '★'; $favtitle = $favlist_titles[$i] . ($favdo ? 'に追加' : 'から外す'); $setnum_q = '&setnum=' . $i; $toolbar_setfav_ht .= <<<EOP |<span class="favdo set{$i}"><a href="info.php?{$host_bbs_key_q}{$ttitle_en_q}{$favdo_q}{$setnum_q}" target="info" onclick="return setFavJs('{$host_bbs_key_q}{$ttitle_en_q}', '{$favdo}', {$STYLE['info_pop_size']}, 'read_new', this, '{$i}');" title="{$favtitle}">{$favmark}</a></span> EOP; } $toolbar_setfav_ht .= ']'; } else { $favdo = !empty($aThread->fav) ? 0 : 1; $favdo_q = '&setfav=' . $favdo; $favmark = $favdo ? '+' : '★'; $favtitle = $favdo ? 'お気にスレに追加' : 'お気にスレから外す'; $toolbar_setfav_ht = <<<EOP <span class="favdo"><a href="info.php?{$host_bbs_key_q}{$ttitle_en_q}{$favdo_q}" target="info" onclick="return setFavJs('{$host_bbs_key_q}{$ttitle_en_q}', '{$favdo}', {$STYLE['info_pop_size']}, 'read_new', this, '0');" title="{$favtitle}">お気に{$favmark}</a></span> EOP; } $toolbar_right_ht = <<<EOTOOLBAR <a href="{$_conf['subject_php']}?{$host_bbs_key_q}" target="subject" title="板を開く">{$itaj_hd}</a> <a href="info.php?{$host_bbs_key_q}{$ttitle_en_q}" target="info" onclick="return OpenSubWin('info.php?{$host_bbs_key_q}{$ttitle_en_q}{$popup_q}',{$STYLE['info_pop_size']},1,0)" title="スレッド情報を表\示">{$info_st}</a> {$toolbar_setfav_ht} <span><a href="info.php?{$host_bbs_key_q}{$ttitle_en_q}&dele=true" target="info" onclick="return deleLog('{$host_bbs_key_q}{$ttitle_en_q}', {$STYLE['info_pop_size']}, 'read_new', this);" title="ログを削除する">{$delete_st}</a></span> <!-- <a href="info.php?{$host_bbs_key_q}{$ttitle_en_q}&taborn=2" target="info" onclick="return OpenSubWin('info.php?{$host_bbs_key_q}{$ttitle_en_q}&popup=2&taborn=2',{$STYLE['info_pop_size']},0,0)" title="スレッドのあぼーん状態をトグルする">あぼん</a> --> <a href="{$motothre_url}" title="板サーバ上のオリジナルスレを表\示" onmouseover="showMotoLsPopUp(event, this)" onmouseout="hideMotoLsPopUp()">元スレ</a> <a href="{$_conf['subject_php']}?{$host_bbs_key_q}{$similar_q}" target="subject" title="タイトルが似ているスレッドを検索">似スレ</a> EOTOOLBAR; // レスのすばやさ $spd_ht = ""; if ($spd_st = $aThread->getTimePerRes() and $spd_st != "-") { $spd_ht = '<span class="spd" title="すばやさ=時間/レス">' . "" . $spd_st . "" . '</span>'; } // datサイズ if (file_exists($aThread->keydat) && ($dsize_ht = filesize($aThread->keydat))) { $dsize_ht = sprintf('<span class="spd" title="%s">%01.1fKB</span> |', 'datサイズ', $dsize_ht / 1024); } else { $dsize_ht = ''; } // IC2リンク、件数 if ($_conf['expack.ic2.enabled'] && $_conf['expack.ic2.thread_imagelink']) { $spanid = 'ic2_count_' . sprintf('%u', crc32($aThread->keydat)); $ic2navi = '<a href="iv2.php?field=memo&key=' . rawurlencode($aThread->ttitle) . '" target="_blank">キャッシュ画像' . ($_conf['expack.ic2.thread_imagecount'] ? '<span id="ic2_count_' . sprintf('%u', crc32($aThread->keydat)) . '"></span>' : '') . '</a> '; } // フッタ部分HTML $read_footer_ht = <<<EOP <table class="toolbar"> <tr> <td class="lblock">{$res1['body']} | <a href="{$_conf['read_php']}?{$host_bbs_key_q}&offline=1&rescount={$aThread->rescount}#r{$aThread->rescount}">{$aThread->ttitle_hd}</a> | {$dores_ht} {$dsize_ht} {$spd_ht}</td> <td class="rblock">{$ic2navi}{$toolbar_right_ht}</td> <td class="rblock"><a href="#ntt{$newthre_num}">▲</a></td> </tr> </table> EOP; // 透明あぼーんで表示がない場合はスキップ if ($GLOBALS['newres_to_show_flag']) { echo '<div style="width:100%;">' . "\n"; // ほぼIE ActiveXのGray()のためだけに囲ってある echo $read_header_ht; echo $read_cont_ht; echo $read_footer_ht; echo '</div>' . "\n\n"; echo '<hr>' . "\n\n"; } //================================================================== // key.idx の値設定 //================================================================== if ($aThread->rescount) { $aThread->readnum = min($aThread->rescount, max(0, $data[5], $aThread->resrange['to'])); $newline = $aThread->readnum + 1; // $newlineは廃止予定だが、旧互換用に念のため $sar = array($aThread->ttitle, $aThread->key, $data[2], $aThread->rescount, $aThread->modified, $aThread->readnum, $data[6], $data[7], $data[8], $newline, $data[10], $data[11], $aThread->datochiok); P2Util::recKeyIdx($aThread->keyidx, $sar); // key.idxに記録 } }
/** * スレッド情報を取得する * * @param string $host * @param string $bbs * @param string $key * @return object スレッド情報 */ function get_thread_info($host, $bbs, $key) { global $_conf; $group = P2Util::getHostGroupName($host); $info = new stdClass(); $info->type = 'thread'; $info->group = $group; $info->host = $host; $info->bbs = $bbs; $info->key = $key; $aThread = new Thread(); // hostを分解してidxファイルのパスを求める $aThread->setThreadPathInfo($host, $bbs, $key); $key_line = $aThread->getThreadInfoFromIdx(); // $aThread->length をset $aThread->getDatBytesFromLocalDat(); // 板名を取得 $aThread->itaj = P2Util::getItaName($host, $bbs); if (!$aThread->itaj) { if (isset($_GET['itaj_en'])) { $aThread->itaj = UrlSafeBase64::decode($_GET['itaj_en']); } else { $aThread->itaj = $bbs; } } $info->itaj = $aThread->itaj; // スレタイトルを取得 if (!$aThread->ttitle) { if (isset($_GET['ttitle_en'])) { $aThread->setTtitle(UrlSafeBase64::decode($_GET['ttitle_en'])); } else { $aThread->setTitleFromLocal(); } } $info->ttitle = $aThread->ttitle; // お気にスレ登録状況を取得 $favs = array(); if ($_conf['expack.misc.multi_favs']) { $favlist_titles = FavSetManager::getFavSetTitles('m_favlist_set'); for ($i = 0; $i <= $_conf['expack.misc.favset_num']; $i++) { if (!isset($favlist_titles[$i]) || $favlist_titles[$i] == '') { if ($i == 0) { $favtitle = 'お気にスレ'; } else { $favtitle = "お気にスレ{$i}"; } } else { $favtitle = $favlist_titles[$i]; } $favs[$i] = array('title' => $favtitle, 'set' => !empty($aThread->favs[$i])); } } else { $favs[0] = array('title' => 'お気にスレ', 'set' => !empty($aThread->fav)); } $info->favs = $favs; // 殿堂チェック $info->palace = false; if ($pallines = FileCtl::file_read_lines($_conf['palace_idx'], FILE_IGNORE_NEW_LINES)) { foreach ($pallines as $l) { $palarray = explode('<>', $l); if ($aThread->key == $palarray[1] && $aThread->bbs == $palarray[11]) { if (P2Util::getHostGroupName($palarray[10]) == $group) { $info->palace = true; break; } } } } // スレッドあぼーんチェック $info->taborn = false; $taborn_idx = P2Util::idxDirOfHostBbs($host, $bbs) . 'p2_threads_aborn.idx'; if ($tabornlines = FileCtl::file_read_lines($taborn_idx, FILE_IGNORE_NEW_LINES)) { foreach ($tabornlines as $l) { $tabornarray = explode('<>', $l); if ($key == $tabornarray[1]) { $info->taborn = true; break; } } } // ログ関連 $hasLog = false; if (file_exists($aThread->keydat)) { $info->keydat = $aThread->keydat; $info->length = $aThread->length; $hasLog = true; } else { $info->keydat = null; $info->length = -1; } if (file_exists($aThread->keyidx)) { $info->keyidx = $aThread->keyidx; $hasLog = true; } else { $info->keyidx = null; } if ($aThread->gotnum) { $info->gotnum = $aThread->gotnum; } elseif ($hasLog) { $info->gotnum = 0; } else { $info->gotnum = -1; } return $info; }
/** * お気に板をプリントする */ public function printFavIta() { global $_conf, $matome_i, $STYLE; $menu_php_ht = p2h(isset($GLOBALS['menu_php_self']) ? $GLOBALS['menu_php_self'] : $_SERVER['SCRIPT_NAME']); echo <<<EOP <div class="menu_cate"> <b><a class="menu_cate" href="javascript:void(0);" onclick="showHide('c_favita');" target="_self">お気に板</a></b> [<a href="editfavita.php" target="subject">編集</a>] EOP; // お気に板切り替え if ($_conf['expack.misc.multi_favs']) { echo "<br>\n"; echo FavSetManager::makeFavSetSwitchElem('m_favita_set', 'お気に板', true, "replaceMenuItem('c_favita', 'm_favita_set', this.options[this.selectedIndex].value);"); } if ($_conf['expack.misc.multi_favs']) { $favset_title = FavSetManager::getFavSetPageTitleHt('m_favita_set', 'お気に板'); } else { $favset_title = 'お気に板'; } echo " <div class=\"itas\" id=\"c_favita\">\n"; if ($_conf['merge_favita']) { echo <<<EOP <a href="{$_conf['subject_php']}?spmode=merge_favita{$_conf['m_favita_set_at_a']}">{$favset_title} (まとめ)</a><br> EOP; } // favita読み込み $favitas = array(); if ($lines = FileCtl::file_read_lines($_conf['favita_brd'], FILE_IGNORE_NEW_LINES)) { foreach ($lines as $l) { if (preg_match("/^\t?(.+)\t(.+)\t(.+)\$/", $l, $matches)) { $favitas[] = array('host' => $matches[1], 'bbs' => $matches[2], 'itaj' => $matches[3]); } } } if ($favitas) { // 新着数を表示する場合・まとめてプリフェッチ if ($_conf['enable_menu_new'] && !empty($_GET['new'])) { if ($_conf['expack.use_pecl_http'] == 1) { P2HttpExt::activate(); P2HttpRequestPool::fetchSubjectTxt($favitas); $GLOBALS['expack.subject.multi-threaded-download.done'] = true; } elseif ($_conf['expack.use_pecl_http'] == 2) { if (P2CommandRunner::fetchSubjectTxt('merge_favita', $_conf)) { $GLOBALS['expack.subject.multi-threaded-download.done'] = true; } } } foreach ($favitas as $favita) { extract($favita); $itaj_view = p2h($itaj); $itaj_en = UrlSafeBase64::encode($itaj); $itaj_js = addslashes($itaj_view); $p_htm['star'] = <<<EOP <a href="{$menu_php_ht}?host={$host}&bbs={$bbs}&setfavita=0{$_conf['m_favita_set_at_a']}" target="_self" class="fav" title="「{$itaj_view}」をお気に板から外す" onclick="return window.confirm('「{$itaj_js}」をお気に板から外してよろしいですか?');">★</a> EOP; // onclick="return confirmSetFavIta('{$itaj_ht}');" // 新着数を表示する場合 if ($_conf['enable_menu_new'] && !empty($_GET['new'])) { $matome_i++; $spmode = null; // $shinchaku_num, $_newthre_num をセット include P2_LIB_DIR . '/subject_new.inc.php'; if ($shinchaku_num > 0) { $class_newres_num = ' class="newres_num"'; } else { $class_newres_num = ' class="newres_num_zero"'; } if ($_newthre_num) { $newthre_ht = "{$_newthre_num}"; } else { $newthre_ht = ''; } echo <<<EOP {$p_htm['star']} <a href="{$_conf['subject_php']}?host={$host}&bbs={$bbs}&itaj_en={$itaj_en}" onclick="chMenuColor({$matome_i});">{$itaj_view}</a> <span id="newthre{$matome_i}" class="newthre_num">{$newthre_ht}</span> (<a href="{$_conf['read_new_php']}?host={$host}&bbs={$bbs}" target="read" id="un{$matome_i}" onclick="chUnColor({$matome_i});"{$class_newres_num}>{$shinchaku_num}</a>)<br> EOP; // 新着数を表示しない場合 } else { echo <<<EOP {$p_htm['star']} <a href="{$_conf['subject_php']}?host={$host}&bbs={$bbs}&itaj_en={$itaj_en}">{$itaj_view}</a><br> EOP; } flush(); } // foreach // 空っぽなら } else { echo ' (空っぽ)'; } echo " </div>\n</div>\n"; }
EOP; } P2Util::printInfoHtml(); //============================================================== // セット切り替えフォームを表示 //============================================================== if ($_conf['expack.misc.multi_favs'] && ($_GET['view'] == 'favita' || $_GET['view'] == 'rss')) { echo '<hr>'; if ($_GET['view'] == 'favita') { $set_name = 'm_favita_set'; $set_title = 'お気に板'; } elseif ($_GET['view'] == 'rss') { $set_name = 'm_rss_set'; $set_title = 'RSS'; } echo FavSetManager::makeFavSetSwitchForm($set_name, $set_title, NULL, NULL, FALSE, array('view' => $_GET['view'])); } //============================================================== // フッタを表示 //============================================================== echo '<hr>'; echo $list_navi_ht; echo '<div class="center">'; echo $modori_url_ht; echo $_conf['k_to_index_ht']; echo '</div></body></html>'; /* * Local Variables: * mode: php * coding: cp932 * tab-width: 4
/** * お気に入りセットリストを更新する * * @return boolean 更新に成功したらTRUE, 失敗したらFALSE */ function updateFavSetList() { global $_conf; if (file_exists($_conf['expack.misc.favset_file'])) { $setlist_titles = FavSetManager::getFavSetTitles(); } else { FileCtl::make_datafile($_conf['expack.misc.favset_file']); } if (empty($setlist_titles)) { $setlist_titles = array(); } $setlist_names = array('m_favlist_set', 'm_favita_set', 'm_rss_set'); foreach ($setlist_names as $setlist_name) { if (isset($_POST["{$setlist_name}_titles"]) && is_array($_POST["{$setlist_name}_titles"])) { $setlist_titles[$setlist_name] = array(); for ($i = 0; $i <= $_conf['expack.misc.favset_num']; $i++) { if (!isset($_POST["{$setlist_name}_titles"][$i])) { $setlist_titles[$setlist_name][$i] = ''; continue; } $newname = trim($_POST["{$setlist_name}_titles"][$i]); $newname = preg_replace('/\\r\\n\\t/', ' ', $newname); $newname = htmlspecialchars($newname, ENT_QUOTES); $setlist_titles[$setlist_name][$i] = $newname; } } } $newdata = serialize($setlist_titles); if (FileCtl::file_write_contents($_conf['expack.misc.favset_file'], $newdata) === FALSE) { P2Util::pushInfoHtml("<p>p2 error: {$_conf['expack.misc.favset_file']} にお気に入りセット設定を書き込めませんでした。"); return FALSE; } return TRUE; }
alert("見たいスレッドのURLを入力して下さい。 例:http://pc.2ch.net/test/read.cgi/mac/1034199997/"); return false; } EOP; $onclick_ht = p2h($onclick_ht); echo <<<EOP <form id="urlform" method="GET" action="{$_conf['read_php']}" target="read"> スレURLを直接指定 <input id="url_text" type="text" value="{$ini_url_text}" name="url" size="62"> <input type="submit" name="btnG" value="表\示" onclick="{$onclick_ht}"> </form> EOP; if ($aThreadList->spmode == 'fav' && $_conf['expack.misc.multi_favs']) { echo "\t<div style=\"margin:8px 8px;\">\n"; echo FavSetManager::makeFavSetSwitchForm('m_favlist_set', 'お気にスレ', null, null, false, array('spmode' => 'fav', 'norefresh' => 1)); echo "\t</div>\n"; } //} //================ echo '</body> </html>'; /* * Local Variables: * mode: php * coding: cp932 * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: nil * End: */
} else { $taborn_link_ht = ''; } // }}} // {{{ 新規スレッド作成 if (!$aThreadList->spmode) { $buildnewthread_ht = <<<EOP <a href="post_form.php?{$host_bbs_q}&newthread=1{$_conf['k_at_a']}">スレ立て</a> EOP; } else { $buildnewthread_ht = ''; } // }}} // {{{ お気にスレセット切替 if ($aThreadList->spmode == 'fav' && $_conf['expack.misc.multi_favs']) { $switchfavlist_ht = '<div>' . FavSetManager::makeFavSetSwitchForm('m_favlist_set', 'お気にスレ', null, null, false, array('spmode' => 'fav')) . '</div>'; } else { $switchfavlist_ht = ''; } // }}} // {{{ ソート変更 (新着 レス No. タイトル 板 すばやさ 勢い Birthday ☆) $sorts = array('midoku' => '新着', 'res' => 'レス', 'no' => 'No.', 'title' => 'タイトル'); if ($aThreadList->spmode and $aThreadList->spmode != 'taborn' and $aThreadList->spmode != 'soko') { $sorts['ita'] = '板'; } if ($_conf['sb_show_spd']) { $sorts['spd'] = 'すばやさ'; } if ($_conf['sb_show_ikioi']) { $sorts['ikioi'] = '勢い'; }
FileCtl::mkdirRecursive($_conf['session_dir']); } elseif (!is_writable($_conf['session_dir'])) { p2die("セッションデータ保存ディレクトリ ({$_conf['session_dir']}) に書き込み権限がありません。"); } session_save_path($_conf['session_dir']); } // }}} $_p2session = new Session(null, null, $_conf['use_cookies']); // }}} // {{{ お気にセット // 複数のお気にセットを使うとき if ($_conf['expack.misc.multi_favs']) { // 切り替え表示用に全てのお気にスレ・お気に板を読み込んでおく FavSetManager::loadAllFavSet(); // お気にセットを切り替える FavSetManager::switchFavSet(); } else { $_conf['m_favlist_set'] = ''; $_conf['m_favlist_set_at_a'] = ''; $_conf['m_favlist_set_input_ht'] = ''; $_conf['m_favita_set'] = ''; $_conf['m_favita_set_at_a'] = ''; $_conf['m_favita_set_input_ht'] = ''; $_conf['m_rss_set'] = ''; $_conf['m_rss_set_at_a'] = ''; $_conf['m_rss_set_input_ht'] = ''; } // }}} // {{{ misc. // DOCTYPE HTML 宣言 $_conf['doctype'] = '';
//============================================================== if ($_conf['expack.rss.enabled']) { require_once P2EX_LIB_DIR . '/rss/menu.inc.php'; } flush(); //============================================================== // ■特別 //============================================================== $norefresh_q = '&norefresh=true'; echo <<<EOP <div class="menu_cate"><b><a class="menu_cate" href="javascript:void(0);" onclick="showHide('c_spacial');" target="_self">特別</a></b> EOP; if ($_conf['expack.misc.multi_favs']) { $favlist_onchange = "openFavList('{$_conf['subject_php']}', this.options[this.selectedIndex].value, window.top.subject);"; echo "<br>\n"; echo FavSetManager::makeFavSetSwitchElem('m_favlist_set', 'お気にスレ', FALSE, $favlist_onchange); } echo <<<EOP <div class="itas" id="c_spacial"> EOP; // ■新着数を表示する場合 if ($_conf['enable_menu_new'] == 1 && $_GET['new']) { // 並列ダウンロードの設定 if ($_conf['expack.use_pecl_http'] == 1) { P2HttpExt::activate(); $GLOBALS['expack.subject.multi-threaded-download.done'] = true; } elseif ($_conf['expack.use_pecl_http'] == 2) { $GLOBALS['expack.subject.multi-threaded-download.done'] = true; } // {{{ お気にスレ // ダウンロード
EOP; } P2Util::printInfoHtml(); //============================================================== // セット切り替えフォームを表示 //============================================================== if ($_conf['expack.misc.multi_favs'] && ($_GET['view'] == 'favita' || $_GET['view'] == 'rss')) { echo '<hr>'; if ($_GET['view'] == 'favita') { $set_name = 'm_favita_set'; $set_title = 'お気に板'; } elseif ($_GET['view'] == 'rss') { $set_name = 'm_rss_set'; $set_title = 'RSS'; } echo FavSetManager::makeFavSetSwitchForm($set_name, $set_title, null, null, false, array('view' => $_GET['view'])); } //============================================================== // フッタを表示 //============================================================== echo '<hr>'; echo $list_navi_ht; echo '<div class="center">'; echo $modori_url_ht; echo $_conf['k_to_index_ht']; echo '</div></body></html>'; /* * Local Variables: * mode: php * coding: cp932 * tab-width: 4