Commit | Line | Data |
---|---|---|
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 | */ | |
25 | define(['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 | ||
2646e9d6 RW |
137 | return { |
138 | setDiscussionSubscriptionState: setDiscussionSubscriptionState, | |
2893812e | 139 | addDiscussionPost: addDiscussionPost, |
99bda8a7 | 140 | setDiscussionLockState: setDiscussionLockState, |
8885cd57 | 141 | setFavouriteDiscussionState: setFavouriteDiscussionState, |
34e6dd24 MM |
142 | setPinDiscussionState: setPinDiscussionState, |
143 | getDiscussionByUserID: getDiscussionByUserID | |
2646e9d6 RW |
144 | }; |
145 | }); |