3
* Mahara: Electronic portfolio, weblog, resume builder and social networking
4
* Copyright (C) 2006-2008 Catalyst IT Ltd (http://www.catalyst.net.nz)
6
* This program is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
21
* @author Catalyst IT Ltd
22
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL
23
* @copyright (C) 2006-2008 Catalyst IT Ltd http://catalyst.net.nz
27
define('INTERNAL', 1);
30
require(dirname(dirname(__FILE__)) . '/init.php');
31
require_once('group.php');
35
$id = param_integer('id');
36
$pending = param_boolean('pending', 0); // for memberlist
37
$submitted = param_boolean('submitted', 0); // for viewlist
38
$type = param_alpha('type');
40
$limit = param_integer('limit', 10);
41
$offset = param_integer('offset', 0);
46
if (!$membership = user_can_access_group($id)) {
49
$group = get_record('group', 'id', $id, 'deleted', 0);
51
$dbnow = db_format_timestamp(time());
55
if ($submitted && !($membership & GROUP_MEMBERSHIP_TUTOR) && !($membership & GROUP_MEMBERSHIP_ADMIN) && !($membership & GROUP_MEMBERSHIP_STAFF) && !($membership & GROUP_MEMBERSHIP_OWNER)) {
56
throw new AccessDeniedException();
63
$where = 'WHERE v.submittedto = ?';
69
AND ( v.startdate IS NULL OR v.startdate < ? )
70
AND ( v.stopdate IS NULL OR v.stopdate > ? )
71
AND ( a.startdate IS NULL OR a.startdate < ? )
72
AND ( a.stopdate IS NULL OR a.stopdate > ? )
80
if ($membership & GROUP_MEMBERSHIP_TUTOR) {
81
$where .= ' OR v.submittedto = ?';
84
else if ($membership) {
85
$where .= ' AND tutoronly = 0';
89
$count = count_records_sql('
90
SELECT COUNT(DISTINCT id)
92
LEFT OUTER JOIN {view_access_group} a ON a.view=v.id
97
$data = get_records_sql_array('
98
SELECT DISTINCT v.*, u.username, u.firstname, u.lastname, u.preferredname, u.id AS usr
100
LEFT OUTER JOIN {view_access_group} a ON a.view=v.id
101
INNER JOIN {usr} u ON (v.owner = u.id AND u.deleted = 0) ' . $where . ' ORDER BY v.title, v.id',
109
foreach ($data as $d) {
111
$tmp->id = $tmp->usr;
112
$d->ownername = display_name($tmp);
116
$select = 'SELECT u.*,g.tutor ';
117
$sql = ' FROM {usr} u JOIN {group_member} g
119
WHERE g.group = ? AND u.deleted = 0
120
ORDER BY firstname, lastname, u.id';
121
if (empty($pending)) { // default behaviour - actual members
122
$count = count_records('group_member', 'group', $id);
123
$data = get_records_sql_array($select . $sql, array($id), $offset, $limit);
126
if ($membership == GROUP_MEMBERSHIP_MEMBER) {
129
$sql = str_replace('group_member', 'group_member_request', $sql);
130
$select = 'SELECT u.*, 1 AS request, g.reason';
131
$count = count_records('group_member_request', 'group', $id);
132
$data = get_records_sql_array($select . $sql, array($id), $offset, $limit);
137
foreach ($data as $d) {
138
$d->displayname = display_name($d);
139
if ($d->id == $group->owner && $membership == GROUP_MEMBERSHIP_MEMBER) {
140
$d->displayname .= ' (' . get_string('owner', 'group') . ')';
142
else if (!empty($d->tutor) && $membership == GROUP_MEMBERSHIP_MEMBER) {
143
$d->displayname .= ' (' . get_string('tutor', 'group') . ')';
147
case 'membercontrol':
148
if (!($membership & GROUP_MEMBERSHIP_OWNER) && !($membership & GROUP_MEMBERSHIP_ADMIN) && !($membership & GROUP_MEMBERSHIP_TUTOR) && !($membership & GROUP_MEMBERSHIP_STAFF)) {
149
throw new AccessDeniedException();
151
foreach ($_REQUEST as $k => $v) {
152
if (preg_match('/member-(\d+)/', $k, $m)) {
158
if ($id == $group->id) {
159
json_reply(true, get_string('memberchangefailed', 'group'));
162
group_remove_user($id, $user);
168
if ($cm = get_record('group_member', 'member', $user, 'group', $id)) {
169
// already a member so just set the flag
170
if ($v == 'member' && $cm->tutor == 1) {
172
set_field('group_member', 'tutor', 0, 'member', $user, 'group', $id);
174
else if ($v == 'tutor' && $cm->tutor == 0) {
176
set_field('group_member', 'tutor', 1, 'member', $user, 'group', $id);
181
group_add_member($id, $user);
182
delete_records('group_member_request', 'member', $user, 'group', $id);
184
$v = 'added' . $v; // for the string for notify
187
case 'declinerequest':
188
delete_records('group_member_request', 'member', $user, 'group', $id);
193
catch (SQLException $e) {
194
json_reply(true, get_string('memberchangefailed', 'group'));
197
require_once('activity.php');
198
$lang = get_user_language($user);
199
activity_occurred('maharamessage',
200
array('users' => array($user),
201
'subject' => get_string_from_language($lang, 'groupmembershipchangesubject',
202
'group', $group->name),
203
'message' => get_string_from_language($lang, 'groupmembershipchangedmessage'
205
'url' => get_config('wwwroot') . 'group/view.php?id=' . $id));
209
json_reply(false, get_string('memberchangesuccess', 'group'));
212
if (!($membership & GROUP_MEMBERSHIP_OWNER) && !($membership & GROUP_MEMBERSHIP_ADMIN) && !($membership & GROUP_MEMBERSHIP_TUTOR) && !($membership & GROUP_MEMBERSHIP_STAFF)) {
213
throw new AccessDeniedException();
215
$view = param_integer('view');
216
require_once(get_config('libroot') . 'view.php');
217
$view = new View($view);
219
json_reply(false, get_string('viewreleasedsuccess', 'group'));
227
echo json_encode(array(
234
'pending' => $pending,
235
'submitted' => $submitted)
238
function group_json_empty() {
239
global $limit, $offset, $id, $type, $pending, $submitted;
240
echo json_encode(array(
247
'pending' => $pending,
248
'submitted' => $submitted)