コメントAPI
Moodle 2.0
作成中です - Mitsuhiro Yoshida (トーク)
目的
コメントAPIのゴールは以下のとおりです:
- コメントを一元管理する
- Moodle全体を通して、すべてのコメントに一貫したアプローチを使用する
- コメントAPIを既存モジュールに簡単に統合できる
- JavaScriptが有効か否かに関係なく動作する
概要
コメントAPIでは以下の機能を提供します:
- コメントを追加すr
- コメントを管理する
- コメントを削除する
また、ページを再読み込みすることなくコメントを追加/削除するための派手なAjaxインターフェイスも提供します。
コメントAPIデータベーステーブル
フィールド | タイプ | デフォルト | 情報 |
---|---|---|---|
id | int(10) | auto-incrementing | このコメントのユニークID |
userid | int(10) | このコメントの投稿者 | |
contextid | int(10) | コンテクストテーブルで定義された コンテクストID - コメントの所有者であるプラグインのインスタンスを識別します。 | |
itemid | int(10) | プラグイン固有のアイテムID (例: フォーラム投稿、ブログエントリ、課題提出等) | |
commentarea | int(10) | 例えばあなたはユーザプロファイルではユーザ説明または趣味をコメントできますが、これらは同じitemid (==userid) を共有しているため、comment_areaで分離する必要があります。 | |
timecreated | int(10) | ||
timemodified | int(10) | ||
content | text | コメントのコンテンツ |
コメントAPIを使用する
format_text関数にオプションを追加する
このformat_text関数を使用した場合、テキスト末尾にコメントアイコンが自動的に追加されます:
例えばフォーラムモジュールで次のコードを使用した場合、すべての投稿にコメントアイコンが追加されます:
$cmt = new stdclass;
$cmt->contextid = $modcontext->id;
$cmt->area = 'format_post';
$cmt->itemid = $post->id;
$options->comments = $cmt;
echo format_text($post->message, $post->messageformat, $options, $course->id)."<hr />";
コメントクラスを使用する
コメントAPIを他の場所で使用する場合、以下のコードを使用してください:
$options->area = 'database_entry';
$options->context = $context;
$options->itemid = $record->id;
$options->component = 'mod_data';
$options->showcount = true;
$comment = new comment($options);
$comment->output(false);
コメントAPI概要
一般的にコメントAPIを動作させるためにあなたが知る必要のある関数は以下2つのみです:
- comment::init (コメントAPIの初期化に使用する)
- $comment->output (コメントの表示に使用する)
コメントクラスはcomment/lib.phpに実装されています。
class comment()
__construct($contextid, $comment_area, $itemid))
クラスメンバを初期化します。
init()
コメントの初期化および言語の設定に使用される静的関数です。HTMLのヘッダ表示の前に必ず呼び出されます。
output($return = false)
コメントインターフェースのHTMLスニペットをプリントします。$returnにtrueに設定した場合、プリントの代わりにHTML文字列を返します。
print_comments($params = array())
非JavaScriptのコメントインターフェイスで使用されます。コメントリストを表示します。
add($content)
コメントをデータベースに追加するパブリックインスタンス関数です。これはcomment/comment_ajax.phpで使用されます。
count()
コメント数をカウントします。
delete($id)
データベースからコメントを削除します。これはcomment/comment_ajax.phpで使用されます。
delete_comments
特定のコンテクストのすべてのコメントを削除する (例: フォーラム投稿に付随するすべてのコメント)。
Javascript API
コメントAPIではブラウザとmoodle間の通信を処理するためにYUI3モジュールM.core_commentを実装しました。これはcomment/comment.js内にあります。
M.core_comment.initをコールした場合、CommentHelperクラスのインスタンスが生成されます。あなたはこのインスタンスに対して何かをコールする必要はなく、単にそのまま動作します。
Moodleモジュールコールバック
Comment APIはモジュール/ブロック/ブログがコメント表示方法を決めれるようにできます。
データ妥当性検証
このコールバックメソッドは必須であり、必ず実装する必要があります。そうでない場合、新しいコメントはデフォルトで拒否されます。プラグインはpluginname_comment_validateコールバックを実装して、コメントパラメータを検証する必要があります。また、検証に合格した場合、trueを返す必要があります。
パーミッションコントロール
モジュールには投稿許および閲覧許可を返す関数「pluginname_comment_permissions」を実装する必要があります。
ブロックではblock_baseの「blockname_comment_permissions」関数を上書きする必要があります。
ブログでは「blog_comment_permissions」関数を実装する必要があります。
この関数は配列を返します: array('post'=>true, 'view'=>true)
新しい追加コメントを確認する
コールバック関数により、あなたはデータベースに挿入する前にコメント内容を変更したり、このコメントを拒否できます。
「コメント詳細を含むコメントオブジェクト」および「コンテキストおよびコース情報を含む$params」の2つの引数を取得します。
モジュールでは「modname_comment_add」という関数名の関数を実装できます。
ブロックでは「blockname_comment_add」関数をオーバーライドする必要があります。
ブロックでは「blog_comment_add」関数を実装する必要があります。
この関数はブール値を返すべきです。
コメントをフィルタ/フォーマットする
このコールバックはユーザがコメントの表示を要求した場合にモジュールによるコメントのチェックおよびフォーマットを可能にします。
pluginname_comment_addと同じ引数を取得します。
モジュールには「pluginname_comment_display」という関数名の関数を実装できます。
ブロックでは「blockname_comment_display」関数をオーバーライドする必要があります。
ブロックでは「blog_comment_display」関数を実装する必要があります。
これはコメントオブジェクトを返します。
コメントテンプレートを定義する
モジュールはpluginname_comment_templateという関数名の関数を実装できます。これはモジュールがコメントテンプレートを定義できるようにします。
テンプレートには4つの埋め込み変数___id___, ___content__, ___time__, ___name___を持つ必要があります。それらはhtml id、コメントコンテンツ、コメント時間、コメント投稿者名に置換されます。
バックアップおよびリストア Backup and Restore
Comments will automatically be included in the activity/course backups and restored provided the itemids can be updated during the restore process. To do this either: コメントは自動的に活動/コースのバックアップに含まれます。リストア処理中に提供されたアイテムIDを更新できる場合、バックアップがリストアされます。これには以下のいずれかを考慮してください:
- do not use item ids and rely just on the context
- アイテムIDを使用せずにコンテキストにのみ依存する。
- make the commentarea the same as one of the mappings in the restore (set_mapping); or
- override the function "get_comment_mapping_itemname" in the restore activity class
If you do not do one of these the comments will be silently ignored on restore.
関連情報
- コアAPI (Dev_docs)
- MDL-19118 - Comment API issue