/[drupal]/contributions/modules/og_gradebook/og_gradebook.module
ViewVC logotype

Contents of /contributions/modules/og_gradebook/og_gradebook.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download) (as text)
Sat Apr 7 05:29:18 2007 UTC (2 years, 7 months ago) by rwohleb
Branch: MAIN
CVS Tags: HEAD
Branch point for: DRUPAL-5, DRUPAL-6--1
Changes since 1.3: +69 -63 lines
File MIME type: text/x-php
* Initial support for Drupal 5
1 <?php
2 // $Id: og_gradebook.module,v 1.3 2006/11/15 08:51:46 rwohleb Exp $
3
4 // hook_help
5 function og_gradebook_help($section) {
6 switch ($section) {
7 case 'admin/modules#description':
8 return t('Ties gradebook to organic groups.');
9 }
10 }
11
12 // hook_menu
13 /*
14 function og_gradebook_menu($may_cache) {
15 $items = array();
16
17 if ($may_cache) {
18 $items[] = array(
19 'path' => 'og_gradebook',
20 'callback' => 'og_gradebook_page',
21 'type' => MENU_CALLBACK,
22 'access' => user_access('access content'),
23 );
24 }
25
26 return $items;
27 }
28
29 function og_gradebook_page($gradebook) {
30 $gid = $_GET['edit']['og_groups'][0];
31 $group = node_load($gid);
32 og_set_group_context($group);
33
34 $gradebook = gradebookapi_gradebook_load($gradebook);
35 return gradebook_gradebook_page($gradebook);
36 }
37 */
38
39 /**
40 * Implementation of hook_settings().
41 */
42 function og_gradebook_settings() {
43 $form['#submit']['og_gradebook_settings_submit'] = array(); // custom submit handler
44 $form['#submit']['system_settings_form_submit'] = array(); // form.inc never calls the $callback if a submit handler is defined
45
46 $form['update'] = array(
47 '#type' => 'fieldset',
48 '#title' => t('Retroactively update old groups'),
49 '#description' => t('Pressing this button will create gradebooks for any groups that do not already have them.'),
50 '#collapsible' => TRUE,
51 );
52 $form['update']['button'] = array(
53 '#type' => 'submit',
54 '#value' => t('Update old groups'),
55 );
56 return $form;
57 }
58
59 /**
60 * Custom submit handler for group update
61 */
62 function og_gradebook_settings_submit($form_id, $form_values) {
63 if ($_POST['op'] == t('Update old groups')) {
64 og_gradebook_retroactively_apply();
65 }
66 }
67
68 // Implementation of hook_nodeapi
69 function og_gradebook_nodeapi($node, $op, $teaser = NULL) {
70 switch ($op) {
71 case 'insert':
72 if (og_is_group_type($node->type)) {
73 $edit = array('name' => $node->title, 'description' => $node->og_description, 'vid' => gradebookapi_get_vid());
74 $status = taxonomy_save_term($edit);
75 db_query('INSERT INTO {og_gradebook} (tid, nid) VALUES (%d, %d)', $edit['tid'], $node->nid);
76 }
77 break;
78 case 'update':
79 if (og_is_group_type($node->type)) {
80 $result = db_query('SELECT tid FROM {og_gradebook} WHERE nid = %d', $node->nid);
81 if ($term = db_fetch_object($result)) {
82 $edit = array('tid' => $term->tid, 'name' => $node->title, 'description' => $node->og_description, 'vid' => gradebookapi_get_vid());
83 $status = taxonomy_save_term($edit);
84 }
85 else {
86 // We hit a group that doesn't already have a gradebook. Pretend this is an insert.
87 return og_gradebook_nodeapi($node, 'insert', $teaser);
88 }
89 }
90 break;
91 case 'delete':
92 // Delete existing terms for this og
93 if (og_is_group_type($node->type)) {
94 // TODO: delete grades, etc
95 $result = db_query('SELECT tid FROM {og_gradebook} WHERE nid = %d', $node->nid);
96 while ($term = db_fetch_object($result)) {
97 taxonomy_del_term($term->tid);
98 }
99 db_query('DELETE FROM {og_gradebook} WHERE nid = %d', $node->nid);
100 }
101 break;
102 }
103 }
104
105 function og_gradebook_get_gradebook($group_id) {
106 // Grab most recent term created for group; this will be the gradebook id
107 return db_result(db_query_range('SELECT tid FROM {og_gradebook} WHERE nid = %d ORDER BY tid DESC', $group_id, 0, 1));
108 }
109
110 function og_gradebook_get_group($gradebook_id) {
111 // Grab most recent term created for group; this will be the group id
112 return db_result(db_query_range('SELECT nid FROM {og_gradebook} WHERE tid = %d ORDER BY nid DESC', $gradebook_id, 0, 1));
113 }
114
115 /**
116 * Implementation of hook_og_create_links().
117 */
118 function og_gradebook_og_create_links($group) {
119 $links = array();
120
121 // Get group's forum
122 $gradebook = og_gradebook_get_gradebook($group->nid);
123 if ($gradebook) {
124 //$links[] = l(t('Gradebook'), "og_gradebook/$gradebook/$group->nid", array('title' => t('View group gradebook.')), "edit[og_groups][]=$group->nid");
125 //$links[] = l(t('Gradebook'), "gradebook/$gradebook", array('title' => t('View group gradebook.')), "edit[og_groups][]=$group->nid");
126 $links[] = l(t('Gradebook'), 'gradebook/' . $gradebook, array('title' => t('View group gradebook.')));
127 }
128
129 return $links;
130 }
131
132 // hook_form_alter
133 function og_gradebook_form_alter($form_id, &$form) {
134 // TODO: if non-group assignment is put in to a group, assign to group. same for the opposite.
135 // Auto-select group's gradebook
136 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
137 $node = $form['#node'];
138 $types = gradebookapi_get_assignment_types();
139
140 // are we an assignment type?
141 if (in_array($node->type, $types)) {
142 $group = og_get_group_context();
143
144 if ($group->nid) {
145 $options = array();
146 $vid = gradebookapi_get_vid();
147 $root = og_gradebook_get_gradebook($group->nid);
148
149 $tree = taxonomy_get_tree($vid, $root);
150
151 $options[$root] = '<'. t('root') .'>';
152 foreach ($tree as $term) {
153 $options[$term->tid] = str_repeat('--', $term->depth) . $term->name;
154 }
155
156 $vcount = 0;
157 foreach ($form['taxonomy'] as $key => $value) {
158 if (is_int($key)) {
159 ++$vcount;
160 }
161 }
162 if (($vcount <= 1) && (count($options)<=1)) {
163 unset($form['taxonomy']['#type']);
164 }
165
166 if (count($options)>1) {
167 $form['taxonomy'][$vid]['#options'] = $options;
168
169 // make sure default is valid
170 $default = $form['taxonomy'][$vid]['#default_value'];
171 $form['taxonomy'][$vid]['#default_value'] = array();
172 foreach ($default as $key => $tid) {
173 if (in_array($tid, array_keys($options))) {
174 $form['taxonomy'][$vid]['#default_value'][] = $tid;
175 }
176 }
177 if (count($form['taxonomy'][$vid]['#default_value']) <= 0) {
178 $form['taxonomy'][$vid]['#default_value'][] = $root;
179 }
180 }
181 else {
182 $form['taxonomy'][$vid] = array('#type' => 'hidden', '#value' => $term);
183 }
184 }
185 }
186 }
187 }
188
189 function og_gradebook_retroactively_apply() {
190 $counter = 0;
191 // Obtain list of all groups
192 $result = db_query('SELECT og.nid, n.title, n.type FROM {og} og INNER JOIN {node} n on og.nid = n.nid');
193 while ($group = db_fetch_object($result)) {
194 // See if terms are found for this group
195 if (!db_result(db_query('SELECT * FROM {og_gradebook} ogt WHERE ogt.nid = %d', $group->nid))) {
196 // If so, fake a nodeapi insert
197 og_gradebook_nodeapi($group, 'insert');
198 $counter++;
199 }
200 }
201 drupal_set_message(t('%num groups had forums created', array('%num' => $counter)));
202 }
203
204 // hook_gradebookapi_students
205 function og_gradebook_gradebookapi_students($gradebook) {
206 $students = array();
207
208 if ($group_id = og_gradebook_get_group($gradebook->tid)) {
209 $sql = "SELECT u.uid FROM {og_uid} ou INNER JOIN {users} u ON ou.uid = u.uid WHERE ou.nid = %d AND u.status > 0 AND ou.is_active > 0 AND ou.is_admin < 1";
210 $result = db_query($sql, $group_id);
211 while ($user = db_fetch_object($result)) {
212 $students[$user->uid] = $user->uid;
213 }
214 }
215
216 return $students;
217 }
218
219 // hook_gradebookapi_teachers
220 function og_gradebook_gradebookapi_teachers($gradebook) {
221 $teachers = array();
222
223 if ($group_id = og_gradebook_get_group($gradebook->tid)) {
224 $sql = "SELECT u.uid FROM {og_uid} ou INNER JOIN {users} u ON ou.uid = u.uid WHERE ou.nid = %d AND u.status > 0 AND ou.is_active > 0 AND ou.is_admin > 0";
225 $result = db_query($sql, $group_id);
226 while ($user = db_fetch_object($result)) {
227 $teachers[$user->uid] = $user->uid;
228 }
229 }
230
231 return $teachers;
232 }
233
234 // similiar to og_init
235 function og_gradebook_init() {
236 if (arg(0) == 'gradebook') {
237 //if (is_numeric(arg(1)) || (variable_get('gradebook_show_default', 1))) {
238 if (is_numeric(arg(1))) {
239 //$gradebook = (is_numeric(arg(1))?gradebookapi_gradebook_load(arg(1)):gradebookapi_default_gradebook_load());
240 $gradebook = gradebookapi_gradebook_load(arg(1));
241
242 $group_id = og_gradebook_get_group($gradebook->tid);
243 $group_node = og_set_theme($group_id);
244 //$group_node = node_load($group_id);
245 og_set_group_context($group_node);
246
247 og_set_locale();
248 }
249 }
250 }

  ViewVC Help
Powered by ViewVC 1.1.2