ページへ戻る

− Links

 印刷 

inc​/imgBd_d3f のバックアップソース(No.1) :: Motion cafe

xpwiki:inc編集/imgBd_d3f編集 のバックアップソース(No.1)

  Next »[2]
* ImageBoard(v.1.2) -> d3forum インポートに挑戦! [#t26e056a]

** 履歴 [#t479e868]
- 2009/04/15 初版公開

** 概要 [#c0738c49]

 「ImageBoard」 ・・ Perlで書かれたツリー表示式のcgi掲示板で、[[特報くらぶダウンロードセンター>http://www.big.or.jp/~talk/t-club/soft/mini_r6/]]で配布されている。

 古いログ形式(レスできないやつ)しかインポートできませんが、一応公開しておきます。

 なお、毎度のお約束ですが、小生のスキルはそれほど高くありませんので、不具合が出る可能性があります。 &font(Red){いきなり本番環境で実行するのはもってのほか};。私でもやりません(笑) まずはテスト環境で実行してみて、続いて本番環境に d3forumの複製フォーラムを作ってそこにインポートしてみるなどして、問題なければ本番モジュールで実行して下さい。

*** 特徴 [#j1cbeb6f]
特徴というほどでもありませんが、
+ d3forumに既にある記事はそのままで、インポート可能
+ 取り込み先フォーラムの選択
+ 投稿者名でツリーを自動作成、選択インポート
+ インポート済みのツリーは自動スキップ
 (このため、同トピックにインポート後に付いた返信は、インポートできません)
+ ImageBoard用は画像の自動リンクを維持

などなど。

*** 動作環境 [#b04ecbdb]
PHP5 (PHP4で動くかどうかわかりません)
mysql5  (mysql4で動くかどうかわかりません)
xoops-2.0.16a-JP、 XOOPS_Cube_Legacy-2.1.6 (それ以前でも動くと思います)
d3forum-0.85 (それ以前でも動くと思います)
Web Forum v3.03のログ。
 現在はver5.01らしいですが、ログ形式はおそらく変わっていないとようなので使えると思います。

** 準備 [#s1c45344]

*** d3forumモジュール [#idf66e54]

 まず、d3forumの最新版をインストールします。 :-D
当方、d3forum-0.85で動作確認しました。 最新版でなくても動作すると思いますが、未検証です。 また、最初にカテゴリの作成と権限設定、取り込み先フォーラムの作成と権限設定までは行っておいてください。

続いて、スクリプト1つと、 カスタムテンプレート1つを準備します。

*** スクリプト import_imgboard.php [#fcdcf87c]

 以下のzipファイルをダウンロードし、解凍後、(trust_path)/modules/d3forum/main/ ディレクトリ内にアップロードします。 文字コード「EUC-JP」で保存してありますので、UTF-8などで運用中の方は、ファイルの文字コード変換を行ってください。(コメントだけなので、変換しなくても動作するかもしれません。) &font(Green){変換先の文字コード設定と、元記事の記事番号を追記するかどうかの設定};が、スクリプトの冒頭にありますので、必要に応じて設定します。

|ダンロードはこちら -> (zip)|

 なお、サーバー負荷の上昇を抑えるため、記事単位でインポート直後のトピック同期処理は初期設定では「不使用」としていて、インポート後に管理画面で同期が必要です。  サーバー能力に余裕があって大丈夫と判断する場合は、import_imgboard.php 内の冒頭の、以下の記述を変更することで、記事1件ごとにsync動作が入るようになります。(お勧めはできません)

#code(php,1-){{
$sync_each_post = false ;
// ↓ 書き換え
$sync_each_post = true ;
}}

*** テンプレート _custom_webforum2_d3forum.html [#r65b29e2]
Altsysの「テンプレート管理」-「カスタムテンプレート」で、以下のコードを「_custom_webforum2_d3forum.html」として作成します。

#code(html,1-){{
<h2>webforumログ -> d3forumインポート</h2>

<{* あなたのuid=<{$wf2d3f_uid}><br /> *}>
<{if $wf2d3f_isadmin}>
実行権限:OK
	<form name="MainForm" action="./index.php?page=<{$wf2d3f_actionname}>" method="post">
  <{if $wf2d3f_step==0}>
	<{if count($wf2d3f_logfiles)>0 }>
	    インポート元:wforumのログファイル名:
	    <select name="wf_fileid">
	    <{foreach item=logfile from=$wf2d3f_logfiles}>
		<option value=<{$logfile.num}>><{$logfile.filename}></option>
	    <{/foreach}>
	    </select><br />
	<{/if}>
 	<{if count($wf2d3f_forums)>0 }>
	    インポート先:d3forumフォーラム:
	    <select name="forum_id">
	    <{foreach item=forum from=$wf2d3f_forums}>
		<option value=<{$forum.forum_id}>><{$forum.forum_title}></option>
	    <{/foreach}>
	    </select><br />
	<{/if}>
  <{elseif $wf2d3f_step==1}>
	    webforumのログファイル名:<{$wf2d3f_wf_filename}> から
	    d3forumのフォーラム名:<{$wf2d3f_forum_title}> に、以下の中から選択スレッドをインポートします。<br />
	    <table class="outer">
	    <tbody border="1"><tr><th align="center">選択<br /><input type='checkbox' title='この縦一列のチェックボックスすべてをON/OFFします' onclick="with(document.MainForm){for(i=0;i<length;i++){if(elements[i].type=='checkbox'&&elements[i].name.indexOf('wf2d3f_thread')>=0){elements[i].checked=this.checked;}}}" />全選択/解除</th>
	    <th align="center">No</th><th align="center">スレッド</th><th align="center">トピ開始日時</th></tr>
	    <{foreach key=num item=thread from=$wf2d3f_threads}>
		<tr class="<{cycle values='odd,even'}>"><td align="center"><input type="checkbox" name="wf2d3f_thread[<{$num}>]" value="<{$thread.thread_id}>" /></td><td><{$thread.thread_id}></td><td><{$thread.title}></td><td align="center"><{$thread.post_time|date_format:"%Y年%m月%d日 %H時%M分"}></td></tr>
	    <{/foreach}>
	    </table>
	    よろしければ「送信」してください。<br />
	<input type=hidden name="forum_title" value=<{$wf2d3f_forum_title}> />
	<input type=hidden name="forum_id" value=<{$wf2d3f_forum_id}> />
	<input type=hidden name="wf_topic_id" value=<{$wf2d3f_wf_topic_id}> />
	<input type=hidden name="wf_fileid" value=<{$wf2d3f_file_id}> />
  <{elseif $wf2d3f_step==2}>
	    インポートが完了しました。<br />
	    最初のページに戻るには下のボタンで送信してください。<br />
  <{/if}>
	<input type=hidden name="page" value="<{$wf2d3f_actionname}>" />
	<input type=hidden name="step" value="<{$wf2d3f_step_next}>" />
	<input type=submit value="送信" />
	</form>
<br />
<{else}>
実行権限:NG
権限がありません。
<{/if}>
}}

*** ログファイル [#ndb2cda0]
 インポートするログファイルは、サーバーの文字コードに変換するなりして、 (trust_path)/modules/d3forum/main/log/ フォルダを作成して、その中に放り込みます。 このフォルダを変更する場合は、スクリプト内の記述も変更してください。

** 実行 [#j571e4f9]
*** ログファイル・フォーラム選択 [#yd3a8586]
管理者でログインし、以下のアドレス(実際のサイトに応じて読み替え)にアクセスします。

 /modules/(d3forum)/index.php?page=import_imgboard

下記のようにインポート元ログファイルと、先d3forumのフォーラムリストが出ますので、それぞれ選択して「送信」を押します。

|&ref(wf2d3f_1.gif,mw:300,mh:300);|

*** スレッド選択 [#y7c22c1a]
 続いて、選択したログから、投稿者別のスレッド一覧(d3forumで言うトピックに当たる)が表示されます。 「全て」選択すると、記事数によってはサーバーにかなりの負荷がかかりますので、適宜様子を見ながら、少しずつインポートすることをお勧めします。 選択後、「送信」ボタンで実際にインポートが行われます。

|&ref(wf2d3f_2.gif,mw:300,mh:300);|

*** インポート完了 [#g63e208a]
 インポートが完了しました。 「送信」を押すと、最初の画面に戻ります。
|&ref(wf2d3f_3.gif,mw:300,mh:300);|

*** ImgBoardの画像リンク [#f0c363ae]
 cbbs(Child Tree)ログからの取り込みの場合は、以下のように画像への自動リンクも維持されます。

||

*** 同期処理 [#k47bb9b8]
 全てのインポートが終了したら、管理画面に入り、d3forumの「冗長情報の同期」の「トピック」を実行してください。 その後、念のため「フォーラム」「カテゴリ」も同期処理を行ってください。

*** 権限設定 [#ub1f61be]
 各掲示板の権限設定など、必要に応じて行ってください。

*** スクリプトの削除 [#c3ebc53b]
 インポート作業が完了したら、セキュリティホールになりえるかも知れませんので&font(Red){、必ずサーバー上からスクリプトを削除してください};。

** 謝辞 [#q7219937]
 このスクリプトの作成・公開にあたり、d3forumのコードを参考にさせていただき、ました。 作者のGIJOE氏に、御礼申し上げます。

 特に、d3forumのほうは一部「transact_functions.php」などのソースincludeさせていただきました。 この中の「d3forum_sync_topic」プロシジャが無かったら、すんなり行かなかったと思います。


  Next »[2]