diff --git a/data/migratedPages.yml b/data/migratedPages.yml index e070625534..51989411cf 100644 --- a/data/migratedPages.yml +++ b/data/migratedPages.yml @@ -97,6 +97,9 @@ Coding: Coding_style: - filePath: "/general/development/policies/codingstyle/index.md" slug: "/general/development/policies/codingstyle" +Comment_API: +- filePath: "/docs/apis/core/comment/index.md" + slug: "/docs/apis/core/comment/" Communication_Between_Components: - filePath: "/general/development/policies/component-communication/index.md" slug: "/general/development/policies/component-communication" diff --git a/docs/apis.md b/docs/apis.md index 3ffaa19d85..900d7fdece 100644 --- a/docs/apis.md +++ b/docs/apis.md @@ -90,7 +90,7 @@ The [Check API](./apis/subsystems/check/index.md) allows you to add security, pe ### Comment API (comment) -The [Comment API](https://docs.moodle.org/dev/Comment_API) allows you to save and retrieve user comments, so that you can easily add commenting to any of your code. +The [Comment API](./api/core/comment) allows you to save and retrieve user comments, so that you can easily add commenting to any of your code. ### Competency API (competency) diff --git a/docs/apis/core/comment/index.md b/docs/apis/core/comment/index.md new file mode 100644 index 0000000000..fbe7e34b0a --- /dev/null +++ b/docs/apis/core/comment/index.md @@ -0,0 +1,189 @@ +--- +title: Comment API +tags: + - API +--- +import { Since } from '@site/src/components'; + + + +## Objectives + +The goals of Comment API: + +- Manage comments centrally +- Use a consistent approach for all comments throughout Moodle +- Easily integrate Comment API with existing modules +- Works no matter JavaScript is enabled or not + +## Overview + +Comment API provides following functionalities: + +1. Add comments +1. Manage comments +1. Delete comments + +And provides a fancy ajax interface to add/delete comments without reloading page. + +## Comment API database table + +| Field | Type | Default | Info | +| --- | --- | --- | --- | +| id | int(10) | auto-incrementing | The unique ID for this comment. | +| userid | int(10) | | who wrote this comment | +| contextid | int(10) | | The context id defined in context table - identifies the instance of plugin owning the comment. | +| itemid | int(10) | | Some plugin specific item id (eg. forum post, blog entry or assignment submission) | +| commentarea | int(10) | | for example, in user profile, you can comment user's description or interests, but they share the same itemid(==userid), we need comment_area to separate them | +| timecreated | int(10) | | | +| timemodified | int(10) | | | +| content | text | | content of comment | + +## Use Comment API + +### Add an option to format_text function + +Using this `format_text` function will add a comment icon automatically at the end of the text: + +For example, using the following code in the forum module will add a comment icon to every post: + +```php +$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)."
"; +``` + +### Use comment class + +To use Comment API elsewhere, using following code: + +```php +$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); +``` + +## Comment API overview + +Generally speaking, only two functions you need to know to get comment API worked: + +1. Use `comment::init` to initialize Comment API +1. Use `$comment->output` to display comments + +The comment class has been implemented in `comment/lib.php`. + +### class comment() + +#### __construct($contextid, $comment_area, $itemid)) + +Initialize class members. + +#### init() + +It is a static function used to initialize comments, setting up languages, which must be called before html head printed. + +#### output($return = false) + +Will print the html snippet for commenting interface, if set `$return` as true, it will return html string instead of printing out. + +#### print_comments($params = array()) + +Used by non-JavaScript comment interface, will print a list of comments. + +#### add($content) + +Public instance funciton, add a comment to database, used in `comment/comment_ajax.php`. + +#### count() + +Counting the number of comments. + +#### delete($id) + +Delete a comment from database, used in `comment/comment_ajax.php` + +#### delete_comments + +Delete all comments in a specific contexts (like all comments belonging to a forum post). + +## JavaScript API + +Comment API implemented a YUI3 module M.core_comment to deal with the communication between browsers and moodle. +It can be found in `comment/comment.js`. + +Call `M.core_comment.init` will create an instance of CommentHelper class. You don't need to make any calls to this instance, it simply works out of box. + +## Moodle modules callback + +Comment API allows `modules/blocks/blog` to decide how comments display. + +### Data validation + +This callback method is required, it must be implemented. Otherwise, new comment will be rejected by default. +Plugins must implement `pluginname_comment_validate` callback to validate comments parameters, it must return true to pass validation. + +### Permission control + +Modules must implement function `pluginname_comment_permissions` to return post and view permission. + +Blocks need to overwrite `blockname_comment_permissions` function of block_base. + +Blog need to implement `blog_comment_permissions` function. + +This function will return an array: `array('post'=>true, 'view'=>true)`. + +### Check new added comment + +The callback function allows you to change the comment content before inserting into database or reject this comment. + +It takes two arguments, the comment object which contains comment details, and $params which contains context and course information. + +Modules can implement a function named `modname_comment_add`. + +Blocks need to overwrite `blockname_comment_add` function. + +Blog need to implement `blog_comment_add` function. + +This function should return a boolean value. + +### 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`. + +Modules can implement a function named `pluginname_comment_display`. + +Blocks need to overwrite `blockname_comment_display` function. + +Blog need to implement `blog_comment_display` function. + +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. + +## See also + +- [Core APIs](../../../apis.md) +- [MDL-19118](https://tracker.moodle.org/browse/MDL-19118) - Comment API issue +- [コメントAPI](https://docs.moodle.org/ja/コメントAPI)