Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Comment API: Difference between revisions

From MoodleDocs
No edit summary
m (Adding template for documentation)
Line 1: Line 1:
{{Moodle 2.0}}==Objectives==
{{Moodle 2.0}}
{| style="border: 1px solid #aaaaff; background-color: #eeeeff; width: 80%; margin: 0 auto 1em auto; padding: .2em; text-align: {{{align|left}}}"
|{{{image|}}}
| '''WORK IN PROGRESS: I've currently just created a template, so please ignore this page until this wip notices has been removed.''' However, you are free to help in the construction of this page by improving it. Please review the [{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|ac tion=history}} edit history] if you would like to contact the user who put up this notice. If this article has not been edited by that user in a while, please remove this template.
|}
<noinclude>


The goals of Comment API:


* Manage comments centrally
==Objectives==
* Use a consistent approach for all comments throughout Moodle
 
* Easily integrate Comment API with existing modules
The goals of Preferences API:
* Works no matter Javascript is enabled or not
 
* example goal




==Overview==
==Overview==


Comment API provides following functionalities:
Preference API provides following functionalities:
# Add comments
# example functionality
# Manage comments
# Delete comments
 
And provides a fancy ajax interface to add/delete comments without reloading page.


==Comment API database table==
==Comment API database table==
Line 30: Line 31:
| int(10)
| int(10)
| auto-incrementing
| auto-incrementing
| The unique ID for this comment.
| The unique ID for this preference.
|-
|-
| userid
| userid
| int(10)
| int(10)
|
|
| who wrote this comment
| The user that the preference belongs to
|-
|-
| contextid
| examplefield
| 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
| timecreated
Line 61: Line 52:
|
|
|
|
|-
| content
| text
|
| content of comment
|}
|}


==Use Comment API==
==Use Preference 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:
===Title for the example goes here===


For example, using the following code in the forum module will add a comment icon to every post:
Description of the example:


<code php>
<code php>
$cmt = new stdclass;
shortexamplecode();
$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 />";
</code>
</code>


===Use comment class===
===Title for the second example goes here===
To use Comment API elsewhere, using following code:
 
Description of the example:
 
<code php>
<code php>
$options->area    = 'database_entry';
shortexamplecode();
$options->context = $context;
$options->itemid  = $record->id;
$options->showcount = true;
$comment = new comment($options);
$comment->output(false);
</code>
</code>
If you are using Comment API in module context, you'd better add component option, it will help comment API find callback functions faster:
<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);
</code>
==Comment API overview==
Generally speaking, only two functions you need to know to get comment API worked:
# Use comment::init to initialize Comment API
# 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.
==Preference API overview==


It will return the comment object.
The Preference API has been implemented in lib/moodlelib.php.


=== Define a comment template ===
====examplefunction()====
Modules can implement a function named '''pluginname_comment_template''', which allow modules define a comment template.
Example function description.
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


==See also==
==See also==
* MDL-19118 - Comment API issue

Revision as of 09:01, 11 January 2012

Moodle 2.0


WORK IN PROGRESS: I've currently just created a template, so please ignore this page until this wip notices has been removed. However, you are free to help in the construction of this page by improving it. Please review the tion=history edit history if you would like to contact the user who put up this notice. If this article has not been edited by that user in a while, please remove this template.


Objectives

The goals of Preferences API:

  • example goal


Overview

Preference API provides following functionalities:

  1. example functionality

Comment API database table

Field Type Default Info
id int(10) auto-incrementing The unique ID for this preference.
userid int(10) The user that the preference belongs to
examplefield
timecreated int(10)
timemodified int(10)

Use Preference API

Title for the example goes here

Description of the example:

shortexamplecode();

Title for the second example goes here

Description of the example:

shortexamplecode();

Preference API overview

The Preference API has been implemented in lib/moodlelib.php.

examplefunction()

Example function description.

See also