コメントAPI

提供:MoodleDocs
2023年5月5日 (金) 15:02時点におけるMitsuhiro Yoshida (トーク | 投稿記録)による版
移動先:案内検索

Moodle 2.0


作成中です - Mitsuhiro Yoshida (トーク)

目的

コメントAPIのゴールは以下のとおりです:

  • コメントを一元管理する
  • Moodle全体を通して、すべてのコメントに一貫したアプローチを使用する
  • コメントAPIを既存モジュールに簡単に統合できる
  • JavaScriptが有効か否かに関係なく動作する


概要

コメントAPIでは以下の機能を提供します:

  1. コメントを追加すr
  2. コメントを管理する
  3. コメントを削除する

また、ページを再読み込みすることなくコメントを追加/削除するための派手な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つのみです:

  1. comment::init (コメントAPIの初期化に使用する)
  2. $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」関数を実装する必要があります。

この関数はブール値を返すべきです。

コメントをフィルタ/フォーマットする Filter/format comments

This callback allows modules check/format comments when user request to display comments. このコールバックはユーザがコメントの表示を要求した場合にモジュールによるコメントのチェックおよびフォーマットを可能にします。

It takes the same arguments as pluginname_comment_add pluginname_comment_addと同じ引数を取得します。

Modules can implement a function named pluginname_comment_display. モジュールには「pluginname_comment_display」という関数名の関数を実装できます。

Blocks need to overwrite blockname_comment_display function. ブロックでは「blockname_comment_display」関数をオーバーライドする必要があります。

Blog need to implement blog_comment_display function. ブロックでは「blog_comment_display」関数を実装する必要があります。

It will return the comment object. これはコメントオブジェクトを返します。

コメントテンプレートを定義する Define a comment template

Modules can implement a function named pluginname_comment_template, which allow modules define a comment template. The template must have 4 embedding variables, ___id___, ___content___, ___time___, ___name___, they will be replaced with html id, comments content, comment time and commenter name

バックアップおよびリストア 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:

  • do not use item ids and rely just on the context
  • 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.

関連情報