attachfileは任意のモジュールにファイル添付機能を追加するモジュールです。
※バージョンアップに際しては当ドキュメント下部の履歴を参照してください。
特定の環境では手動での作業が必要になります。
GIJOEさん作のd3forum-0.49 (alpha)を参考にして作成したものであり、見よう見まね
でDuplicatable V3(D3)技術に対応してみました。
任意のモジュールに機能を追加する機構もd3forumのコメント統合を真似しています。
ただ、XOOPSやPHP、D3への理解が不完全な状態で作成したため、現バージョンには多く
の不具合が含まれているかもしれません。
確認環境:
サーバー:XOOPS 2.0.16a JP(XOOPS Cube Legacy 2.1で動作したとの報告あり)
クライアント:Windows XP SP2
Firefox 2.0.0.11 / Internet Explorer 7
※ファイル添付機能を追加する対象モジュール毎の権限設定プラグインを
XOOPS_TRUST_PATH/modules/attachfile/plugins/モジュール名/permission.php
として追加する必要があります。
現バージョンではd3forum用のプラグインのみ存在します。
権限設定をせずにひとまず使いたいという場合は以下のディレクトリをコピーしてデ
ィレクトリ名をモジュール名に変更してください。
XOOPS_TRUST_PATH/modules/attachfile/plugins/_sample
@D3モジュールを設定する(既に設定してある場合は不要です)
01.DocumentRootの外に専用のディレクトリを作ってください。
例) /home/yourhome/xoops_trust_path/
02.上記ディレクトリへのフルパスをmainfile.phpに設定してください。
例) define('XOOPS_TRUST_PATH','/home/yourhome/xoops_trust_path');
@インストールする
01.「D3モジュールを設定する」を実施してください。
02.attachfileのアーカイブを展開してください。
03.アーカイブ内のhtml/modules/attachfileをXOOPS_ROOT_PATH/modulesの下にコピー
してください。
このとき、ディレクトリ名はattachfile以外に変えても構いません。
04.アーカイブ内のhtml/class/smarty/pluginsの中身を
XOOPS_ROOT_PATH/class/smarty/pluginsにコピーしてください。
05.アーカイブ内のxoops_trust_path/modules/attachfileを
XOOPS_TRUST_PATH/modulesにコピーしてください。
このとき、ディレクトリ名はattachfileのままにしてください。
06.XOOPS_TRUST_PATH/uploads/attachfileを作成してください。
このフォルダはWebサーバに書込み権限を設定する必要があります。
手順03にてディレクトリ名をattachfile以外に変えた場合はこのフォルダも同じ名
前にする必要があります。
07.XOOPSモジュール管理画面でattachfileモジュールをインストールしてください。
このとき、attachfileモジュールがメインメニューに表示されないように表示順を
0に設定します。
08.XOOPSグループ管理画面かaltsysモジュールで必要なグループに対してattachfile
モジュールへのアクセス権限を付与してください。
@任意のモジュールにファイル添付機能を追加する
01.対象のモジュールに対して以下のファイルが存在することを確認します。
D3モジュールの場合、ここでいう「モジュール名」とはXOOPS_TRUST_PATH/modules
内のディレクトリ名です(XOOPS_ROOT_PATHの方ではありません)。
XOOPS_TRUST_PATH/modules/attachfile/plugins/モジュール名/permission.php
存在しない場合は以下のフォルダをコピーして作成する必要があります。
XOOPS_TRUST_PATH/modules/attachfile/plugins/_sample
attachfile_check_upload_permission_plugin()は、対象のモジュールの対象コン
テンツに対して編集権限が存在する場合にtrue、それ以外にfalseを返します。
attachfile_check_download_permission_plugin()は、対象のモジュールの対象コ
ンテンツに対して参照権限が存在する場合にtrue、それ以外にfalseを返します。
ひとまずコンテンツに対する権限如何に関わらず使えるようにしたい場合は
_sampleをそのままコピーして使ってください。
02.XOOPSテンプレートマネージャ画面かaltsysモジュールで任意の場所にファイル添
付機能へのリンクを埋め込みます。
埋め込めるものは以下のものです。
アップロード用ウィンドウを開くためのリンクを表示(添付ファイル数つき)
{attachfile_attach_upload dirname=attachfile target_id=$post.id}
上記項目用のラベル(thとか)
{attachfile_attach_upload dirname=attachfile label=1}
ダウンロード用ウィンドウを開くためのリンクを表示(添付ファイル数つき)
{attachfile_attach_download dirname=attachfile target_id=$post.id}
上記項目用のラベル(thとか)
{attachfile_attach_download dirname=attachfile label=1}
添付ファイル数のみを表示
{attachfile_attach_num dirname=attachfile target_id=$post.id}
上記項目用のラベル(thとか)
{attachfile_attach_num dirname=attachfile label=1}
なお、dirnameはattachfileモジュールのXOOPS_ROOT_PATH側のディレクトリ名で
す(XOOPS_TRUST_PATH側ではありません)。
大抵の場合はattachfileになるかと思います。
target_idは対象のモジュールのコンテンツを一意に特定するためのIDです。
対象のモジュールに合わせて設定してください。
labelは常に1です。1という値自体はダミーです。
==============================================================================
【d3forumでの設定例】
以下にd3forum-0.81の個別投稿の表示/編集画面でファイル添付機能を追加する際の
テンプレートの改変箇所を示します。
d3forum_inc_eachpost.html
「<div class="d3f_info_ctrl">」の1行下あたり
------------------------------------
<{attachfile_attach_download dirname=attachfile target_id=$post.id}>
------------------------------------
d3forum_main_post_form.html
「<th class="head"><{$smarty.const._MD_D3FORUM_OPTIONS}></th>」の2行上あたり
------------------------------------
<tr valign="top" align="left">
<th class="head">
<{attachfile_attach_upload dirname=attachfile label=1}>
</th>
<td class="even">
<{attachfile_attach_upload dirname=attachfile target_id=$post.id}>
</td>
</tr>
------------------------------------
==============================================================================
【picoでの設定例】
以下にpico-1.12にファイル添付機能を追加する際の手順を示します。
01.XOOPS_TRUST_PATH/modules/attachfile/plugins/_sampleをコピーして
XOOPS_TRUST_PATH/modules/attachfile/plugins/picoを作成してください。
本来ならここでpicoの権限をチェックするロジックを入れるますが、今回はひとま
ずこのまま使います。
02.picoのテンプレートに以下のコードを追加します。
pico_main_content_form.html
「<{$smarty.const._MD_PICO_TH_CONTENTOPTIONS}>」の3行上あたり
------------------------------------
<tr valign="top" align="left">
<th class="head">
<{attachfile_attach_upload dirname=attachfile label=1}>
</th>
<td class="even">
<{attachfile_attach_upload dirname=attachfile target_id=$content.id}>
</td>
</tr>
------------------------------------
pico_main_viewcontent.html
「<!-- print icon -->」の1行上あたり
------------------------------------
<{attachfile_attach_download dirname=attachfile target_id=$content.id}>
------------------------------------
==============================================================================
【noneでの設定例】
以下にnone-1.0にファイル添付機能を追加する際の手順を示しています。
http://www.unknown-artifacts.info/cms/modules/d3forum/index.php?post_id=18==============================================================================
【Bulletin2での設定例】
Bulletin2の投稿画面はSmartyではなくXoopsFormで実装しているようですので、
Bulletin2モジュールへのHackが必要になります。
参考:
http://suin.jp/modules/xhnewbb/viewtopic-topic_id-55-viewmode-flat.html 以下にBulletin-2.04にファイル添付機能を追加する際の手順を示します。
このケースではテンプレートの変更だけでなくBulletin2モジュールに対するHackを
行いますので、Bulletin2をアップデートする際に注意が必要になります。
01.XOOPS_TRUST_PATH/modules/attachfile/plugins/_sampleをコピーして
XOOPS_TRUST_PATH/modules/attachfile/plugins/bulletinを作成してください。
本来ならここでbulletinの権限をチェックするロジックを入れますが、今回はひ
とまずこのまま使います。
02.通常、attachfileは対象モジュールのテンプレートに組み込みますが、Bulletin2
の場合は投稿画面がXoopsFormであるため、
XOOPS_TRUST_PATH/modules/bulletin/include/storyform.inc.php
を直接Hackします。
以下のコードを追加してください。
storyform.inc.php
71行目「// options」の1行上あたり
------------------------------------
// for attachfile
require_once( XOOPS_ROOT_PATH.'/class/smarty/plugins/function.attachfile_attach_upload.php' );
$att_title_params['dirname'] = 'attachfile';
$att_title_params['label'] = '1';
ob_start();
smarty_function_attachfile_attach_upload( $att_title_params, $dummy );
$att_title = ob_get_contents();
ob_end_clean();
$att_content_params['dirname'] = 'attachfile';
if ( $storyid > 0 ) {
$att_content_params['target_id'] = $storyid;
}
ob_start();
smarty_function_attachfile_attach_upload( $att_content_params, $dummy );
$att_content = ob_get_contents();
ob_end_clean();
$form->addElement( new XoopsFormLabel( $att_title, $att_content ) );
------------------------------------
03.Bulletin2のテンプレートに以下のコードを追加します。
bulletin_item.html
「<div class="itemFoot">」の1行下あたり
------------------------------------
<{attachfile_attach_download dirname=attachfile target_id=$story.id}>
------------------------------------
==============================================================================
@参考:ファイルの管理方法
ファイルシステム上のファイル名:
プレフィクス+XOOPS_ROOT_PATH側ディレクトリ名+コンテンツID(10桁)
プレフィクス:
一般設定画面にて以下の3つから選択。
・なし(デフォルト)
・XOOPS_DB_PREFIXと同じ(末尾に"_"が付加される)
・XOOPS_DB_NAMEと同じ(末尾に"_"が付加される)
例)DB名が"MyCMS"、テーブルのプレフィクスが"XOOPS"、XOOPS_ROOT_PATH側デ
ィレクトリ名が"d3forum"、コンテンツIDが"0000000001"の場合
「なし」→"d3forum0000000001"
「XOOPS_DB_PREFIXと同じ」→"XOOPS_d3forum0000000001"
「XOOPS_DB_NAMEと同じ」→"MyCMS_d3forum0000000001"
※いずれの場合もDB内のテーブル「attach」のカラム「saved_name」には
"d3forum0000000001"として格納されている。
@TODO
・コンテンツ削除時にファイルも自動で削除するための機能
・ファイル管理画面
・チケットちゃんと対応
・XOOPS Cube Legacy 2.1対応(動作報告あり)
・添付ユーザとタイムスタンプの記録
・単一コンテンツに対する添付数制限機能
・メジャーモジュールのプラグイン対応
・メジャー言語対応
・JavaScriptのない環境への対応
・ファイルマネージャ機能(階層フォルダ、保存場所指定など)を実装する
@履歴
0.16(2008/04/19)
・ja_utf8の言語ファイルmain.phpがBOM付UTF8になっていたのをBOM無UTF8に修正。(thx:si-ra)
0.15(2008/03/23)
・ポップアップウィンドウ名を固定(attachfile_popup)に変更。
・XOOPS Cube Legacyの場合に言語設定をXCube_LanguageManagerから読み取るように変
更。(thx:nobuo)
・ポップアップウィンドウのタイトルの取得元を多言語対応。
・ja_utf8の言語ファイルを追加。
0.14(2007/12/23)
・d3forumへの適用例のバージョン表記をd3forum-0.49 (alpha)から0.81に変更(適用
方法自体は変更なし)。
・Bulletin2モジュールへの適用方法をREADMEに明記。(thx:naox)
・実ファイル名にプレフィクスとしてXOOPS_DB_PREFIXやXOOPS_DB_NAMEを付加できる機
能を追加。(thx:naao)
・READMEの「ファイルの管理方法」の記述を詳細化。
互換上の注意:
既に添付ファイルが存在する状態で「実ファイル名プレフィクス」設定を変更する
場合、既存のファイル名は自動で変換されません。
既に添付ファイルが存在する状態で「実ファイル名プレフィクス」設定を変更する
際には手でファイル名を変更してください。
なお、「実ファイル名プレフィクス」設定はDBに格納されている実ファイル名
(attach.saved_name)には影響しませんので、DB内のデータを変更する必要はあ
りません。
0.13(2007/07/07)
・picoモジュールへの適用方法をREADMEに明記。(thx:tomo_chan)
・noneモジュールへの適用方法をREADMEに明記。(thx:delphinus)
・表示順を0にすることをREADMEに明記。
・xoops_version.phpで存在しないcommon_functions.phpを参照していたのを修正。
(thx:crash119)
0.12(2007/03/27)
・一般設定でアップロード用フォルダ名を設定するようになっていたのを、
atttachfileのXOOPS_ROOT_PATH側のディレクトリ名を設定するように変更。
互換上の注意:
バージョン0.11以前を使っており、かつ、一般設定のアップロードパスの指定と
atttachfileのXOOPS_ROOT_PATH側のディレクトリ名が異なる設定をしていた場合は
手動でアップロード用ディレクトリ名を変更する必要があります。
該当する場合はXOOPS_TRUST_PATH/uploads直下のフォルダ名をatttachfileの
XOOPS_ROOT_PATH側のディレクトリ名と同じものに変更してください。
なお、通常のインストールではアップロードパスもatttachfileのXOOPS_ROOT_PATH
内のディレクトリ名も「atttachfile」であるため、この作業は不要です。
0.11(2007/03/26)
・ダウンロード時に「"Cache-Control: private」ヘッダをつけてIE6使用時に直接開け
るように修正。
・テンプレートのmetaタグをtitleよりも前に移動。
・当ドキュメントをEUC-JPに変換。
0.10(2007/03/26)
・アーカイブ内のxoops_trust_path直下がmodulesになっていなかったのを修正。
・一般設定用の定数がDB制限の30文字を超えていたため正しく表示されていなかったの
を修正。
・当ドキュメントに「uploads」フォルダの書込み権限の記述を追加。
0.01(2007/03/25)
・新規公開
当モジュールの提供元:
http://www.unknown-artifacts.info/cms/ライセンス:GPL