MDL-66074 mod_forum: Grader module documentation
[moodle.git] / mod / forum / amd / src / repository.js
CommitLineData
2646e9d6
RW
1// This file is part of Moodle - http://moodle.org/
2//
3// Moodle is free software: you can redistribute it and/or modify
4// it under the terms of the GNU General Public License as published by
5// the Free Software Foundation, either version 3 of the License, or
6// (at your option) any later version.
7//
8// Moodle is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11// GNU General Public License for more details.
12//
13// You should have received a copy of the GNU General Public License
14// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
15
16/**
c475fe41 17 * Forum repository class to encapsulate all of the AJAX requests that subscribe or unsubscribe
2646e9d6
RW
18 * can be sent for forum.
19 *
20 * @module mod_forum/repository
21 * @package mod_forum
22 * @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24 */
25define(['core/ajax'], function(Ajax) {
26 /**
27 * Set the subscription state for a discussion in a forum.
28 *
29 * @param {number} forumId ID of the forum the discussion belongs to
30 * @param {number} discussionId ID of the discussion with the subscription state
31 * @param {boolean} targetState Set the subscribed state. True == subscribed; false == unsubscribed.
32 * @return {object} jQuery promise
33 */
34 var setDiscussionSubscriptionState = function(forumId, discussionId, targetState) {
35 var request = {
36 methodname: 'mod_forum_set_subscription_state',
37 args: {
38 forumid: forumId,
39 discussionid: discussionId,
40 targetstate: targetState
41 }
42 };
43 return Ajax.call([request])[0];
44 };
45
117e4bd4 46 var addDiscussionPost = function(postid, subject, message, messageformat, isprivatereply, topreferredformat) {
9b4f09ba
P
47 var request = {
48 methodname: 'mod_forum_add_discussion_post',
49 args: {
50 postid: postid,
51 message: message,
88f6ca6c 52 messageformat: messageformat,
cee572aa
P
53 subject: subject,
54 options: [{
55 name: "private",
56 value: isprivatereply,
88f6ca6c 57 }, {
117e4bd4
EL
58 name: "topreferredformat",
59 value: topreferredformat,
cee572aa 60 }]
9b4f09ba
P
61 }
62 };
99bda8a7
P
63 return Ajax.call([request])[0];
64 };
9b4f09ba 65
99bda8a7
P
66 /**
67 * Set the favourite state for a discussion in a forum.
68 *
69 * @param {number} forumId ID of the forum the discussion belongs to
70 * @param {number} discussionId ID of the discussion with the subscription state
8885cd57 71 * @param {null|date} targetState Set the favourite state. True == favourited; false == unfavourited.
99bda8a7
P
72 * @return {object} jQuery promise
73 */
8885cd57 74 var setFavouriteDiscussionState = function(forumId, discussionId, targetState) {
99bda8a7
P
75 var request = {
76 methodname: 'mod_forum_toggle_favourite_state',
77 args: {
99bda8a7
P
78 discussionid: discussionId,
79 targetstate: targetState
80 }
81 };
9b4f09ba
P
82 return Ajax.call([request])[0];
83 };
84
2893812e
P
85 var setDiscussionLockState = function(forumId, discussionId, targetState) {
86 var request = {
87 methodname: 'mod_forum_set_lock_state',
88 args: {
89 forumid: forumId,
90 discussionid: discussionId,
25a97f99 91 targetstate: targetState}
92 };
93 return Ajax.call([request])[0];
94 };
95
8885cd57
P
96 /**
97 * Set the pinned state for the discussion provided.
98 *
99 * @param {number} forumid
100 * @param {number} discussionid
101 * @param {boolean} targetstate
8885cd57
P
102 * @return {*|Promise}
103 */
104 var setPinDiscussionState = function(forumid, discussionid, targetstate) {
25a97f99 105 var request = {
106 methodname: 'mod_forum_set_pin_state',
107 args: {
25a97f99 108 discussionid: discussionid,
8885cd57 109 targetstate: targetstate
2893812e
P
110 }
111 };
112 return Ajax.call([request])[0];
113 };
114
34e6dd24
MM
115 /**
116 * Get the discussions for the user and cmid provided.
117 *
118 * @param {number} userid
119 * @param {number} cmid
120 * @param {string} sortby
121 * @param {string} sortdirection
122 * @return {*|Promise}
123 */
124 var getDiscussionByUserID = function(userid, cmid, sortby = 'modified', sortdirection = 'DESC') {
125 var request = {
126 methodname: 'mod_forum_get_discussion_posts_by_userid',
127 args: {
128 userid: userid,
129 cmid: cmid,
130 sortby: sortby,
131 sortdirection: sortdirection,
132 },
133 };
134 return Ajax.call([request])[0];
135 };
136
3d58c1be
MM
137 /**
138 * Get the posts for the discussion ID provided.
139 *
140 * @param {number} discussionId
141 * @return {*|Promise}
142 */
143 var getDiscussionPosts = function(discussionId) {
144 var request = {
145 methodname: 'mod_forum_get_discussion_posts',
146 args: {
147 discussionid: discussionId,
148 },
149 };
150 return Ajax.call([request])[0];
151 };
152
2646e9d6
RW
153 return {
154 setDiscussionSubscriptionState: setDiscussionSubscriptionState,
2893812e 155 addDiscussionPost: addDiscussionPost,
99bda8a7 156 setDiscussionLockState: setDiscussionLockState,
8885cd57 157 setFavouriteDiscussionState: setFavouriteDiscussionState,
34e6dd24 158 setPinDiscussionState: setPinDiscussionState,
3d58c1be
MM
159 getDiscussionByUserID: getDiscussionByUserID,
160 getDiscussionPosts: getDiscussionPosts,
2646e9d6
RW
161 };
162});