2 /************************************************************************/
\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
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
19 $owner_type = WORKSPACE_ASSIGNMENT;
\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
28 if (isset($_POST['upload']) && isset($_POST['owner_id'])) {
\r
29 // handle the file upload
\r
30 $_POST['comments'] = trim($_POST['comments']);
\r
32 $parent_folder_id = abs($_POST['folder']);
\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
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
40 } else if ($_FILES['file']['error'] || !is_uploaded_file($_FILES['file']['tmp_name'])) {
\r
41 $msg->addError('FILE_NOT_SAVED');
\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
55 if (!$msg->containsErrors()) {
\r
56 $_POST['description'] = $addslashes(trim($_POST['description']));
\r
57 $_FILES['file']['name'] = addslashes($_FILES['file']['name']);
\r
59 if ($_POST['comments']) {
\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
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
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
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
89 // fs_delete_file($row['file_id'], $owner_type, $owner_id);
\r
93 $msg->addFeedback('ASSIGNMENT_HANDED_IN');
\r
94 header('Location: index.php');
\r
97 $msg->addError('FILE_NOT_SAVED');
\r
100 header('Location: index.php');
\r
104 // action - Delete Files/Folders (pre-confirmation)
\r
106 foreach ($_POST as $name => $val) {
\r
107 if (substr($name, 0, 5) == 'files') $files = $val;
\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
120 $msg->addConfirm(array('FILE_DELETE', $file_list_to_print), $hidden_vars);
\r
122 require(AT_INCLUDE_PATH.'header.inc.php');
\r
123 $msg->printConfirm();
\r
124 require(AT_INCLUDE_PATH.'footer.inc.php');
\r
128 // action - Confirm Delete Files/Folders
\r
129 else if ($has_priv && isset($_POST['submit_yes'])) {
\r
131 // handle the delete
\r
132 if (isset($_POST['files'])) {
\r
133 $files = explode(',', $_POST['files']);
\r
135 if (isset($files)) {
\r
136 foreach ($files as $file) {
\r
137 fs_delete_file($file, $owner_type, $_REQUEST['owner_id']);
\r
139 $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');
\r
142 header('Location: index.php');
\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
153 $groups_list = implode(',',$_SESSION['groups']);
\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
171 $sql .= "(SELECT assignment_id, title, date_due, 0
\r
172 FROM ".TABLE_PREFIX."assignments
\r
174 AND course_id=$_SESSION[course_id]
\r
175 AND (date_cutoff=0 OR UNIX_TIMESTAMP(date_cutoff) > ".time()."))
\r
178 $assignment_list_result = mysql_query($sql, $db);
\r
180 $_custom_css = $_base_path . 'mods/_standard/assignment_dropbox/module.css'; // use a custom stylesheet
\r
182 require (AT_INCLUDE_PATH.'header.inc.php');
\r
185 <div class="input-form">
\r
187 if (mysql_num_rows($assignment_list_result) == 0) {
\r
188 echo _AT('none_found');
\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
195 if ($assignment_row['group_id'] == 0) {
\r
196 $folder_id = $_SESSION['member_id'];
\r
198 $folder_id = $assignment_row['group_id'];
\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
211 $result = mysql_query($sql, $db);
\r
213 <div id="assignment_desc">
\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
218 <?php } else { // students ?>
\r
219 <a href="javascript:ATutor.mods.assignment_dropbox.toggleDiv(<?php echo $assignment_row['assignment_id']; ?>)" class="floatleft">
\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
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
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
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
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
251 <input type="submit" name="delete" value="<?php echo _AT('delete'); ?>" class="button"
\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
260 <?php if (mysql_num_rows($result) == 0) { ?>
\r
262 <td colspan="5"><?php echo _AT('none_found'); ?></td>
\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
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
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
282 $lang_var = 'fs_revisions';
\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
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
296 if ($file_info['num_comments'] == 1) {
\r
297 $lang_var = 'fs_comment';
\r
299 $lang_var = 'fs_comments';
\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
305 <?php } // end of while ($file_info) ?>
\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
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" />
\r
315 <input type="submit" name="upload" value="<?php echo _AT('upload'); ?>" class="button"/>
\r
318 <label for="description"><?php echo _AT('description'); ?></label><br />
\r
319 <textarea name="description" id="description" rows="1" cols="20"></textarea>
\r
322 </div><!-- end of assignment_detail -->
\r
324 } // end of while (assignment list)
\r
329 <script type="text/javascript">
\r
332 var ATutor = ATutor || {};
\r
333 ATutor.mods = ATutor.mods || {};
\r
334 ATutor.mods.assignment_dropbox = ATutor.mods.assignment_dropbox || {};
\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
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
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
354 jQuery('#assignment_detail'+assignment_id).toggle();
\r
357 //set up the open/close state of each assignment div
\r
358 var initialize = function () {
\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
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
367 <?php } // end of while
\r
371 jQuery(document).ready(initialize);
\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
385 function togglerowhighlight(obj, boxid) {
\r
386 if (document.getElementById(boxid).checked) {
\r
387 obj.className = 'selected';
\r
389 obj.className = '';
\r
396 <?php require (AT_INCLUDE_PATH.'footer.inc.php'); ?>