~ubuntu-branches/ubuntu/maverick/mahara/maverick-updates

« back to all changes in this revision

Viewing changes to htdocs/group/view.json.php

  • Committer: Bazaar Package Importer
  • Author(s): Nigel McNie
  • Date: 2008-04-29 11:15:39 UTC
  • Revision ID: james.westby@ubuntu.com-20080429111539-b28eqkagavaub2zr
Tags: upstream-1.0.2
ImportĀ upstreamĀ versionĀ 1.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
 * Mahara: Electronic portfolio, weblog, resume builder and social networking
 
4
 * Copyright (C) 2006-2008 Catalyst IT Ltd (http://www.catalyst.net.nz)
 
5
 *
 
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.
 
10
 *
 
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.
 
15
 *
 
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/>.
 
18
 *
 
19
 * @package    mahara
 
20
 * @subpackage core
 
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
 
24
 *
 
25
 */
 
26
 
 
27
define('INTERNAL', 1);
 
28
define('JSON', 1);
 
29
 
 
30
require(dirname(dirname(__FILE__)) . '/init.php');
 
31
require_once('group.php');
 
32
 
 
33
json_headers();
 
34
 
 
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');
 
39
 
 
40
$limit   = param_integer('limit', 10);
 
41
$offset  = param_integer('offset', 0);
 
42
 
 
43
$count = 0;
 
44
$data = array();
 
45
 
 
46
if (!$membership = user_can_access_group($id)) {
 
47
    group_json_empty();
 
48
}
 
49
$group = get_record('group', 'id', $id, 'deleted', 0);
 
50
 
 
51
$dbnow  = db_format_timestamp(time());
 
52
 
 
53
switch ($type) {
 
54
    case 'views':
 
55
        if ($submitted && !($membership & GROUP_MEMBERSHIP_TUTOR) && !($membership & GROUP_MEMBERSHIP_ADMIN) && !($membership & GROUP_MEMBERSHIP_STAFF) && !($membership & GROUP_MEMBERSHIP_OWNER)) {
 
56
            throw new AccessDeniedException();
 
57
        }
 
58
 
 
59
        $where = '';
 
60
        $values = array();
 
61
 
 
62
        if ($submitted) {
 
63
            $where = 'WHERE v.submittedto = ?';
 
64
            $values[] = $id;
 
65
        }
 
66
        else {
 
67
            $where = 'WHERE (
 
68
                     a.group = ? 
 
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 > ? )
 
73
                 )';
 
74
            $values[] = $id;
 
75
            $values[] = $dbnow;
 
76
            $values[] = $dbnow;
 
77
            $values[] = $dbnow;
 
78
            $values[] = $dbnow;
 
79
 
 
80
            if ($membership & GROUP_MEMBERSHIP_TUTOR) {
 
81
                $where .= ' OR v.submittedto = ?';
 
82
                $values[] = $id;
 
83
            }
 
84
            else if ($membership) {
 
85
                $where .= ' AND tutoronly = 0';
 
86
            }
 
87
        }
 
88
 
 
89
        $count = count_records_sql('
 
90
            SELECT COUNT(DISTINCT id)
 
91
            FROM  {view} v
 
92
            LEFT OUTER JOIN {view_access_group} a ON a.view=v.id
 
93
            ' . $where,
 
94
            $values
 
95
        );
 
96
 
 
97
        $data = get_records_sql_array('
 
98
            SELECT DISTINCT v.*, u.username, u.firstname, u.lastname, u.preferredname, u.id AS usr 
 
99
            FROM {view} v
 
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',
 
102
            $values,
 
103
            $offset,
 
104
            $limit
 
105
        );
 
106
        if (empty($data)) {
 
107
            $data = array();
 
108
        }
 
109
        foreach ($data as $d) {
 
110
            $tmp = clone($d);
 
111
            $tmp->id = $tmp->usr;
 
112
            $d->ownername = display_name($tmp);
 
113
        }
 
114
        break;
 
115
    case 'members':
 
116
        $select = 'SELECT u.*,g.tutor ';
 
117
        $sql = '    FROM {usr} u JOIN {group_member} g
 
118
                        ON g.member = u.id 
 
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);
 
124
        }
 
125
        else {
 
126
            if ($membership == GROUP_MEMBERSHIP_MEMBER) {
 
127
                group_json_empty();
 
128
            }
 
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);
 
133
        }
 
134
        if (empty($data)) {
 
135
            $data = array();
 
136
        }
 
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') . ')';
 
141
            }
 
142
            else if (!empty($d->tutor) && $membership == GROUP_MEMBERSHIP_MEMBER) {
 
143
                $d->displayname .= ' (' . get_string('tutor', 'group') . ')';
 
144
            }
 
145
        }
 
146
        break;
 
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();
 
150
         }
 
151
         foreach ($_REQUEST as $k => $v) {
 
152
             if (preg_match('/member-(\d+)/', $k, $m)) {
 
153
                 $user = $m[1];
 
154
                 $changed = false;
 
155
                 try {
 
156
                     switch ($v) {
 
157
                         case 'remove':
 
158
                             if ($id == $group->id) {
 
159
                                 json_reply(true, get_string('memberchangefailed', 'group'));
 
160
                             }
 
161
                             else {
 
162
                                 group_remove_user($id, $user);
 
163
                                 $changed = true;
 
164
                             }
 
165
                             break;
 
166
                         case 'member':
 
167
                         case 'tutor':
 
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) {
 
171
                                     $changed = true;
 
172
                                     set_field('group_member', 'tutor', 0, 'member', $user, 'group', $id);
 
173
                                 }
 
174
                                 else if ($v == 'tutor' && $cm->tutor == 0) {
 
175
                                     $changed = true;
 
176
                                     set_field('group_member', 'tutor', 1, 'member', $user, 'group', $id);  
 
177
                                 }
 
178
                                 // else not changed.
 
179
                             }
 
180
                             else {
 
181
                                 group_add_member($id, $user);
 
182
                                 delete_records('group_member_request', 'member', $user, 'group', $id);
 
183
                                 $changed = true;
 
184
                                 $v = 'added' . $v; // for the string for notify
 
185
                             }
 
186
                             break;
 
187
                         case 'declinerequest':
 
188
                             delete_records('group_member_request', 'member', $user, 'group', $id);
 
189
                             $changed = true;
 
190
                             break;
 
191
                     }
 
192
                 }
 
193
                 catch (SQLException $e) {
 
194
                     json_reply(true, get_string('memberchangefailed', 'group'));
 
195
                 }
 
196
                 if ($changed) {
 
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'
 
204
                                                                     . $v, 'group'),
 
205
                               'url'     => get_config('wwwroot') . 'group/view.php?id=' . $id));
 
206
                 }
 
207
             }
 
208
         }
 
209
         json_reply(false, get_string('memberchangesuccess', 'group'));
 
210
         break;
 
211
     case 'release':
 
212
         if (!($membership & GROUP_MEMBERSHIP_OWNER) && !($membership & GROUP_MEMBERSHIP_ADMIN) && !($membership & GROUP_MEMBERSHIP_TUTOR) && !($membership & GROUP_MEMBERSHIP_STAFF)) {
 
213
             throw new AccessDeniedException();
 
214
         }
 
215
         $view = param_integer('view');
 
216
         require_once(get_config('libroot') . 'view.php');
 
217
         $view = new View($view);
 
218
         $view->release($id);
 
219
         json_reply(false, get_string('viewreleasedsuccess', 'group'));
 
220
         break;
 
221
}
 
222
 
 
223
if (!$data) {
 
224
    $data = array();
 
225
}
 
226
 
 
227
echo json_encode(array(
 
228
    'count'      => $count,
 
229
    'data'    =>  $data,
 
230
    'limit'   => $limit,
 
231
    'offset'  => $offset,
 
232
    'id'      => $id,
 
233
    'type'    => $type,
 
234
    'pending' => $pending,
 
235
    'submitted' => $submitted)
 
236
);
 
237
 
 
238
function group_json_empty() {
 
239
    global $limit, $offset, $id, $type, $pending, $submitted;
 
240
    echo json_encode(array(
 
241
        'count'     => 0 ,
 
242
        'data'      => array(),
 
243
        'limit'     => $limit,
 
244
        'offset'    => $offset,
 
245
        'id'        => $id,
 
246
        'type'      => $type,
 
247
        'pending'   => $pending,
 
248
        'submitted' => $submitted)
 
249
    );
 
250
    exit;
 
251
}
 
252
 
 
253
 
 
254
?>