move code up one directory
[atutor.git] / mods / _standard / assignment_dropbox / index.php
1 <?php\r
2 /************************************************************************/\r
3 /* ATutor                                                                                                                               */\r
4 /************************************************************************/\r
5 /* Copyright (c) 2002-2010                                              */\r
6 /* Inclusive Design Institute                                           */\r
7 /* http://atutor.ca                                                     */\r
8 /* This program is free software. You can redistribute it and/or        */\r
9 /* modify it under the terms of the GNU General Public License          */\r
10 /* as published by the Free Software Foundation.                        */\r
11 /************************************************************************/\r
12 \r
13 define('AT_INCLUDE_PATH', '../../../include/');\r
14 require (AT_INCLUDE_PATH.'vitals.inc.php');\r
15 require_once(AT_INCLUDE_PATH.'../mods/_core/file_manager/filemanager.inc.php'); // for get_human_size()\r
16 require_once(AT_INCLUDE_PATH.'../mods/_standard/file_storage/file_storage.inc.php'); // for get_human_size()\r
17 require('assignment_dropbox.inc.php');\r
18 \r
19 $owner_type = WORKSPACE_ASSIGNMENT;\r
20 \r
21 if (isset($_REQUEST['owner_id']) && !($has_priv = ad_authenticate($_REQUEST['owner_id']))) {\r
22         $msg->addError('ACCESS_DENIED');\r
23         header('Location: index.php');\r
24         exit;\r
25 }\r
26 \r
27 // action - Upload\r
28 if (isset($_POST['upload']) && isset($_POST['owner_id'])) {\r
29         // handle the file upload\r
30         $_POST['comments'] = trim($_POST['comments']);\r
31 \r
32         $parent_folder_id = abs($_POST['folder']);\r
33         \r
34         if ($_FILES['file']['error'] == UPLOAD_ERR_INI_SIZE) {\r
35                 $msg->addError(array('FILE_TOO_BIG', get_human_size(megabytes_to_bytes(substr(ini_get('upload_max_filesize'), 0, -1)))));\r
36 \r
37         } else if (!isset($_FILES['file']['name']) || ($_FILES['file']['error'] == UPLOAD_ERR_NO_FILE) || ($_FILES['file']['size'] == 0)) {\r
38                 $msg->addError('FILE_NOT_SELECTED');\r
39 \r
40         } else if ($_FILES['file']['error'] || !is_uploaded_file($_FILES['file']['tmp_name'])) {\r
41                 $msg->addError('FILE_NOT_SAVED');\r
42         }\r
43 \r
44         // check that we own this folder\r
45 //      if ($parent_folder_id) {\r
46 //              $sql = "SELECT folder_id FROM ".TABLE_PREFIX."folders WHERE folder_id=$parent_folder_id AND owner_type=$owner_type AND owner_id=$owner_id";\r
47 //              $result = mysql_query($sql, $db);\r
48 //              if (!$row = mysql_fetch_assoc($result)) {\r
49 //                      $msg->addError('ACCESS_DENIED');\r
50 //                      header('Location: '.AT_BASE_HREF.'mods/_standard/file_storage/index.php');\r
51 //                      exit;\r
52 //              }\r
53 //      }\r
54 \r
55         if (!$msg->containsErrors()) {\r
56                 $_POST['description'] = $addslashes(trim($_POST['description']));\r
57                 $_FILES['file']['name'] = addslashes($_FILES['file']['name']);\r
58 \r
59                 if ($_POST['comments']) {\r
60                         $num_comments = 1;\r
61                 } else {\r
62                         $num_comments = 0;\r
63                 }\r
64 \r
65                 $sql = "INSERT INTO ".TABLE_PREFIX."files\r
66                                (owner_type, owner_id, member_id, folder_id, \r
67                                 parent_file_id, date, num_comments, num_revisions, file_name,\r
68                                 file_size, description) \r
69                         VALUES ($owner_type, $_POST[owner_id], $_SESSION[member_id], $_POST[folder_id], \r
70                                 0, NOW(), $num_comments, 0, '{$_FILES['file']['name']}', \r
71                                 {$_FILES['file']['size']}, '$_POST[description]')";\r
72                 $result = mysql_query($sql, $db);\r
73 \r
74                 if ($result && ($file_id = mysql_insert_id($db))) {\r
75                         $path = fs_get_file_path($file_id);\r
76                         move_uploaded_file($_FILES['file']['tmp_name'], $path . $file_id);\r
77 \r
78                         // check if this file name already exists\r
79 //                      $sql = "SELECT file_id, num_revisions FROM ".TABLE_PREFIX."files WHERE owner_type=$owner_type AND owner_id=$owner_id AND folder_id=$parent_folder_id AND file_id<>$file_id AND file_name='{$_FILES['file']['name']}' AND parent_file_id=0 ORDER BY file_id DESC LIMIT 1";\r
80 //                      $result = mysql_query($sql, $db);\r
81 //                      if ($row = mysql_fetch_assoc($result)) {\r
82 //                              if ($_config['fs_versioning']) {\r
83 //                                      $sql = "UPDATE ".TABLE_PREFIX."files SET parent_file_id=$file_id, date=date WHERE file_id=$row[file_id]";\r
84 //                                      $result = mysql_query($sql, $db);\r
85 //\r
86 //                                      $sql = "UPDATE ".TABLE_PREFIX."files SET num_revisions=$row[num_revisions]+1, date=date WHERE file_id=$file_id";\r
87 //                                      $result = mysql_query($sql, $db);\r
88 //                              } else {\r
89 //                                      fs_delete_file($row['file_id'], $owner_type, $owner_id);\r
90 //                              }\r
91 //                      }\r
92 \r
93                         $msg->addFeedback('ASSIGNMENT_HANDED_IN');\r
94                         header('Location: index.php');\r
95                         exit;\r
96                 } else {\r
97                         $msg->addError('FILE_NOT_SAVED');\r
98                 }\r
99         }\r
100         header('Location: index.php');\r
101         exit;\r
102 }\r
103 \r
104 // action - Delete Files/Folders (pre-confirmation)\r
105 $files = array();\r
106 foreach ($_POST as $name => $val) {\r
107         if (substr($name, 0, 5) == 'files') $files = $val;\r
108 }\r
109 if ($has_priv && isset($_POST['delete']) && is_array($files)) {\r
110         $hidden_vars = array();\r
111         $hidden_vars['owner_id'] = $_REQUEST['owner_id'];\r
112         $file_list_to_print = '';\r
113         $files = implode(',', $files);\r
114         $hidden_vars['files'] = $files;\r
115         $sql = "SELECT file_name FROM ".TABLE_PREFIX."files WHERE file_id IN ($files) AND owner_type=$owner_type AND owner_id=$_REQUEST[owner_id] ORDER BY file_name";\r
116         $result = mysql_query($sql, $db);\r
117         while ($row = mysql_fetch_assoc($result)) {\r
118                 $file_list_to_print .= '<li style="list-style: none; margin: 0px; padding: 0px 10px;"><img src="images/file_types/'.fs_get_file_type_icon($row['file_name']).'.gif" height="16" width="16" alt="" title="" /> '.htmlspecialchars($row['file_name']).'</li>';\r
119         }\r
120         $msg->addConfirm(array('FILE_DELETE', $file_list_to_print), $hidden_vars);\r
121                 \r
122         require(AT_INCLUDE_PATH.'header.inc.php');\r
123         $msg->printConfirm();\r
124         require(AT_INCLUDE_PATH.'footer.inc.php');\r
125         exit;\r
126 \r
127 }\r
128 // action - Confirm Delete Files/Folders\r
129 else if ($has_priv && isset($_POST['submit_yes'])) {\r
130 \r
131         // handle the delete\r
132         if (isset($_POST['files'])) {\r
133                 $files = explode(',', $_POST['files']);\r
134         }\r
135         if (isset($files)) {\r
136                 foreach ($files as $file) {\r
137                         fs_delete_file($file, $owner_type, $_REQUEST['owner_id']);\r
138                 }\r
139                 $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');\r
140         }\r
141 \r
142         header('Location: index.php');\r
143         exit;\r
144 }\r
145 // action - Cancel Delete\r
146 else if ($has_priv && isset($_POST['submit_no'])) {\r
147         $msg->addFeedback('CANCELLED');\r
148         header('Location: index.php');\r
149         exit;\r
150 }\r
151 \r
152 // display\r
153 $groups_list = implode(',',$_SESSION['groups']);\r
154 \r
155 $sql = '';\r
156 if (authenticate(AT_PRIV_ASSIGNMENTS, AT_PRIV_RETURN)) { // instructor\r
157         $sql = "SELECT * FROM ".TABLE_PREFIX."assignments WHERE course_id=$_SESSION[course_id] ORDER BY title";\r
158 } else { // students\r
159         if ($groups_list <> '') {\r
160                 $sql = "(SELECT assignment_id, a.title, date_due, g.group_id\r
161                    FROM ".TABLE_PREFIX."groups_types gt, ".TABLE_PREFIX."groups g, ".TABLE_PREFIX."assignments a\r
162                   WHERE g.group_id in (".$groups_list.")\r
163                     AND g.group_id in (SELECT group_id FROM ".TABLE_PREFIX."file_storage_groups)\r
164                     AND g.type_id = gt.type_id\r
165                     AND gt.course_id = $_SESSION[course_id]\r
166                     AND gt.type_id = a.assign_to\r
167                     AND (a.date_cutoff=0 OR UNIX_TIMESTAMP(a.date_cutoff) > ".time()."))\r
168                 UNION\r
169                 ";\r
170         }\r
171         $sql .= "(SELECT assignment_id, title, date_due, 0\r
172                    FROM ".TABLE_PREFIX."assignments \r
173                   WHERE assign_to=0 \r
174                     AND course_id=$_SESSION[course_id] \r
175                     AND (date_cutoff=0 OR UNIX_TIMESTAMP(date_cutoff) > ".time()."))\r
176                 ORDER BY title";\r
177 }\r
178 $assignment_list_result = mysql_query($sql, $db);\r
179 \r
180 $_custom_css = $_base_path . 'mods/_standard/assignment_dropbox/module.css'; // use a custom stylesheet\r
181 \r
182 require (AT_INCLUDE_PATH.'header.inc.php');\r
183 \r
184 ?>\r
185 <div class="input-form">\r
186 <?php\r
187 if (mysql_num_rows($assignment_list_result) == 0) {\r
188         echo _AT('none_found');\r
189 }\r
190 else {\r
191         echo _AT('flag_text', '<img src="'.AT_BASE_HREF.'mods/_standard/assignment_dropbox/flag.png" border="0" />');\r
192         while ($assignment_row = mysql_fetch_assoc($assignment_list_result)) {\r
193                 $owner_id = $assignment_row['assignment_id'];\r
194                 \r
195                 if ($assignment_row['group_id'] == 0) {\r
196                         $folder_id = $_SESSION['member_id'];\r
197                 } else {\r
198                         $folder_id = $assignment_row['group_id'];\r
199                 }\r
200                 \r
201                 // default sql for instructor: find all submitted assignments\r
202                 $sql = "SELECT * FROM ".TABLE_PREFIX."files \r
203                          WHERE owner_type=$owner_type \r
204                            AND owner_id=$owner_id \r
205                            AND parent_file_id=0";\r
206                 // students: find his own submitted assignments\r
207                 if (!authenticate(AT_PRIV_ASSIGNMENTS, AT_PRIV_RETURN)) {\r
208                         $sql .= " AND folder_id=$folder_id \r
209                            ORDER BY date DESC, file_name, file_size";\r
210                 }\r
211                 $result = mysql_query($sql, $db);\r
212 ?>\r
213   <div id="assignment_desc">\r
214     <h4>\r
215       <?php if (authenticate(AT_PRIV_ASSIGNMENTS, AT_PRIV_RETURN)) { // instructor ?>\r
216       <a href="javascript:window.location='<?php echo AT_BASE_HREF. url_rewrite("mods/_standard/file_storage/index.php?ot=". $owner_type.SEP."oid=". $assignment_row['assignment_id'].SEP."folder=0"); ?>';" class="floatleft">\r
217       \r
218       <?php } else { // students ?>\r
219       <a href="javascript:ATutor.mods.assignment_dropbox.toggleDiv(<?php echo $assignment_row['assignment_id']; ?>)" class="floatleft">\r
220       <?php } ?>\r
221       <img id="toggleImg<?php echo $assignment_row['assignment_id']; ?>" src="<?php echo AT_BASE_HREF; ?>images/mswitch_plus.gif" border="0" />\r
222       <?php echo $assignment_row['title']; ?>\r
223       </a>\r
224       <div id="flag<?php echo $assignment_row['assignment_id']; ?>" class="flagdiv">\r
225       <?php if (mysql_num_rows($result) > 0) { ?>\r
226         <img src="<?php echo AT_BASE_HREF; ?>mods/_standard/assignment_dropbox/flag.png" border="0" />\r
227       <?php }?>    \r
228       </div>\r
229     </h4><br />\r
230     <strong><?php echo _AT('due_date');?>: <?php if ($assignment_row['date_due'] == '0000-00-00 00:00:00') echo _AT('no'); else echo $assignment_row['date_due']; ?></strong>\r
231   </div>\r
232   \r
233   <div id="assignment_detail<?php echo $assignment_row['assignment_id']; ?>" class="assignment-detail" style="display:none">\r
234     <?php echo '<small>'._AT('delete_text').'</small>';?><br /><br />\r
235     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" name="form<?php echo $assignment_row['assignment_id']; ?>">\r
236     <input type="hidden" id="assignment_detail<?php echo $assignment_row['assignment_id']; ?>_toggled" value="0" />\r
237     <table class="data">\r
238     <thead>\r
239     <tr>\r
240       <th scope="col" width="10"><input type="checkbox" value="<?php echo _AT('select_all'); ?>" id="all" title="<?php echo _AT('select_all'); ?>" id="selectall<?php echo $assignment_row['assignment_id']; ?>" name="selectall<?php echo $assignment_row['assignment_id']; ?>" onclick="CheckAll(<?php echo $assignment_row['assignment_id']; ?>);" /></th>\r
241       <th scope="col"><?php echo _AT('file'); ?></th>\r
242       <th scope="col"><?php echo _AT('size'); ?></th>\r
243       <th scope="col"><?php echo _AT('date'); ?></th>\r
244       <th scope="col"><?php echo _AT('comments');  ?></th>\r
245     </tr>\r
246     </thead>\r
247 \r
248     <tfoot>\r
249     <tr>\r
250       <td colspan="5">\r
251         <input type="submit" name="delete" value="<?php echo _AT('delete'); ?>" class="button" \r
252           <?php \r
253           if ($assignment_row['date_due'] <> '0000-00-00 00:00:00' && strtotime("now") > strtotime($assignment_row['date_due'])) \r
254                 echo 'disabled="disabled"'; ?> />\r
255       </td>\r
256     </tr>\r
257     </tfoot>\r
258   \r
259     <tbody>\r
260   <?php if (mysql_num_rows($result) == 0) { ?>\r
261       <tr>\r
262         <td colspan="5"><?php echo _AT('none_found'); ?></td>\r
263       </tr>\r
264   <?php } else { \r
265   while ($file_info = mysql_fetch_assoc($result)) {?> \r
266       <tr onmousedown="document.form<?php echo $assignment_row['assignment_id']; ?>['r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>'].checked = !document.form<?php echo $assignment_row['assignment_id']; ?>['r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>'].checked; togglerowhighlight(this, 'r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>');" id="r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>_0">\r
267         <td valign="top" width="10">\r
268           <input type="checkbox" name="files<?php echo $assignment_row['assignment_id']; ?>[]" value="<?php echo $file_info['file_id']; ?>" id="r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>" onmouseup="this.checked=!this.checked" />\r
269         </td>\r
270         <td valign="top">\r
271           <img src="images/file_types/<?php echo fs_get_file_type_icon($file_info['file_name']); ?>.gif" height="16" width="16" alt="" title="" /> <label for="r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>" onmousedown="document.form<?php echo $assignment_row['assignment_id']; ?>['r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>'].checked = !document.form<?php echo $assignment_row['assignment_id']; ?>['r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>'].checked; togglerowhighlight(this, 'r<?php echo $assignment_row['assignment_id']; ?>_<?php echo $file_info['file_id']; ?>');"><?php echo htmlspecialchars($file_info['file_name']); ?></label>\r
272                   <?php if ($file_info['description']): ?>\r
273           <p class="fm-desc"><?php echo htmlspecialchars($file_info['description']); ?></p>\r
274                   <?php endif; ?>\r
275         </td>\r
276                 <!-- <td valign="top">\r
277                         <?php if ($_config['fs_versioning']): ?>\r
278                                 <?php if ($file_info['num_revisions']): \r
279                                         if ($file_info['num_revisions'] == 1) {\r
280                                                 $lang_var = 'fs_revision';\r
281                                         } else {\r
282                                                 $lang_var = 'fs_revisions';\r
283                                         }\r
284                                         ?>\r
285                                         \r
286           <a href="<?php echo url_rewrite('mods/_standard/file_storage/revisions.php'.$owner_arg_prefix.'id='.$file_info['file_id']); ?>"><?php echo _AT($lang_var, $file_info['num_revisions']); ?></a>\r
287                                 <?php else: ?>\r
288                                         -\r
289                                 <?php endif; ?>\r
290                         <?php endif; ?>\r
291         </td> -->\r
292         <td align="right" valign="top"><?php echo get_human_size($file_info['file_size']); ?></td>\r
293         <td align="right" valign="top"><?php echo AT_date(_AT('filemanager_date_format'), $file_info['date'], AT_DATE_MYSQL_DATETIME); ?></td>\r
294         <td valign="top">\r
295                 <?php \r
296                 if ($file_info['num_comments'] == 1) {\r
297                         $lang_var = 'fs_comment';\r
298                 } else {\r
299                         $lang_var = 'fs_comments';\r
300                 }\r
301                 ?>\r
302         <a href="<?php echo url_rewrite('mods/_standard/file_storage/comments.php?ot='.$owner_type.SEP.'oid='. $assignment_row['assignment_id'].SEP.'id='.$file_info['file_id']); ?>"><?php echo _AT($lang_var, $file_info['num_comments']); ?></a></td>\r
303           </tr>\r
304   <?php }?>\r
305   <?php } // end of while ($file_info) ?>\r
306     </tbody>\r
307   \r
308     </table>\r
309   \r
310     <input type="hidden" name="owner_id" value="<?php echo $owner_id; ?>" />\r
311     <input type="hidden" name="folder_id" value="<?php echo $folder_id; ?>" />\r
312     <div class="row">\r
313       <span class="required" title="<?php echo _AT('required_field'); ?>">*</span><label for="file"><?php echo _AT('upload_file'); ?></label><br />\r
314       <input type="file" name="file" id="file" />&nbsp;\r
315       <input type="submit" name="upload" value="<?php echo _AT('upload'); ?>"  class="button"/>\r
316     </div>\r
317     <div class="row">\r
318       <label for="description"><?php echo _AT('description'); ?></label><br />\r
319       <textarea name="description" id="description" rows="1" cols="20"></textarea>\r
320     </div>\r
321     </form>\r
322   </div><!-- end of assignment_detail -->\r
323 <?php           \r
324         } // end of while (assignment list)\r
325 }\r
326 ?>\r
327 </div>\r
328 \r
329 <script type="text/javascript">\r
330 //<![CDATA[\r
331 \r
332 var ATutor = ATutor || {};\r
333 ATutor.mods = ATutor.mods || {};\r
334 ATutor.mods.assignment_dropbox = ATutor.mods.assignment_dropbox || {};\r
335 \r
336 (function () {\r
337     // Toggle div of assignment details\r
338     // param: assignment_id: used to compose div id\r
339     // param: set_to_state: Optional. \r
340     //        When provided, is the open/close state for the div\r
341     //        When not given, find the current open/close state on the div and reverse the state. \r
342     ATutor.mods.assignment_dropbox.toggleDiv = function (assignment_id, set_to_state){\r
343                 flag = typeof(set_to_state) != 'undefined' ? set_to_state : jQuery("#assignment_detail"+assignment_id+"_toggled").val();\r
344 \r
345                 if (flag==1){\r
346                         jQuery("#toggleImg"+assignment_id).attr("src", "<?php echo AT_BASE_HREF; ?>images/mswitch_plus.gif");\r
347                         jQuery('#assignment_detail'+assignment_id+'_toggled').val(0);\r
348                         ATutor.setcookie('ad'+assignment_id+'_'+<?php echo $_SESSION['member_id'];?>, '1', 1);\r
349                 } else {\r
350                         jQuery('#toggleImg'+assignment_id).attr('src', '<?php echo AT_BASE_HREF; ?>images/mswitch_minus.gif');\r
351                         jQuery('#assignment_detail'+assignment_id+'_toggled').val(1);\r
352                         ATutor.setcookie('ad'+assignment_id+'_'+<?php echo $_SESSION['member_id'];?>, '0', 1);\r
353                 }\r
354                 jQuery('#assignment_detail'+assignment_id).toggle();            \r
355     };\r
356 \r
357     //set up the open/close state of each assignment div\r
358     var initialize = function () {\r
359         <?php \r
360         if (mysql_num_rows($assignment_list_result) > 0) {\r
361                 mysql_data_seek($assignment_list_result, 0);\r
362                 while ($assignment_row = mysql_fetch_assoc($assignment_list_result)) {\r
363         ?>\r
364                         if (ATutor.getcookie("ad<?php echo $assignment_row['assignment_id'].'_'.$_SESSION['member_id']; ?>") == "0") {\r
365                                 ATutor.mods.assignment_dropbox.toggleDiv(<?php echo $assignment_row['assignment_id']; ?>, 0);\r
366                         }\r
367         <?php } // end of while\r
368         } // end of if?>\r
369     };\r
370     \r
371     jQuery(document).ready(initialize);\r
372 })();\r
373 \r
374 function CheckAll(assignmentID) {\r
375         len = eval("document.form"+assignmentID+".elements.length");\r
376         for (var i=0;i<len;i++) {\r
377                 var e = eval("document.form"+assignmentID+".elements[i]");\r
378                 if ((e.name == 'files'+assignmentID+'[]') && (e.type=='checkbox')) {\r
379                         e.checked = eval("document.form"+assignmentID+".selectall"+assignmentID+".checked");\r
380                         togglerowhighlight(document.getElementById(e.id +"_0"), e.id);\r
381                 }\r
382         }\r
383 }\r
384 \r
385 function togglerowhighlight(obj, boxid) {\r
386         if (document.getElementById(boxid).checked) {\r
387                 obj.className = 'selected';\r
388         } else {\r
389                 obj.className = '';\r
390         }\r
391 }\r
392 \r
393 //]]>\r
394 </script>\r
395 \r
396 <?php require (AT_INCLUDE_PATH.'footer.inc.php'); ?>