| [ Index ] |
PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008] |
[Summary view] [Print] [Text view]
1 <?php // $Id: downloads.php,v 1.16 2007/01/09 10:08:51 skodak Exp $ 2 require_once("../../config.php"); 3 require_once($CFG->libdir.'/filelib.php'); 4 5 # this is the upload/download plugin, which allows to put arbitrary binary 6 # files into the ewiki database using the provided specialized form, or the 7 # standard image upload form below every edit page (if EWIKI_ALLOW_BINARY) 8 9 10 #-- settings 11 12 # Defined in view.php 13 #define("EWIKI_UPLOAD_MAXSIZE", 2*1024*1024); 14 define("EWIKI_PAGE_UPLOAD", "FileUpload"); 15 define("EWIKI_PAGE_DOWNLOAD", "FileDownload"); 16 define("EWIKI_ACTION_ATTACHMENTS", "attachments"); #-- define to 0 to disable 17 18 #-- register plugin (main part) 19 $ewiki_plugins["page"][EWIKI_PAGE_UPLOAD] = "ewiki_page_fileupload"; 20 $ewiki_plugins["page"][EWIKI_PAGE_DOWNLOAD] = "ewiki_page_filedownload"; 21 $ewiki_plugins["action"]["binary"] = "ewiki_binary"; 22 23 #-- allow per-page downloads 24 if (defined("EWIKI_ACTION_ATTACHMENTS") && EWIKI_ACTION_ATTACHMENTS) { 25 $ewiki_plugins["action"][EWIKI_ACTION_ATTACHMENTS] = "ewiki_action_attachments"; 26 $ewiki_config["action_links"]["view"][EWIKI_ACTION_ATTACHMENTS] = "Attachments"; 27 } 28 29 30 #-- icons (best given absolute to www root) 31 /*$ewiki_binary_icons = array( 32 ".bin" => "/icons/exec.gif", 33 "application/" => "/icons/exec.gif", 34 "application/octet-stream" => "/icons/exec.gif", 35 ".ogg" => "/icons/son.gif", 36 ".jpeg" => "/icons/pic.gif", 37 "text/" => "/icons/txt.gif", 38 ".pdf" => "/icons/txt.gif", 39 );*/ 40 41 42 #-- the upload function __can__ use different sections 43 $ewiki_upload_sections = array( 44 "" => "main", 45 # "section2" => "section2", 46 ); 47 48 49 #-- text, translations 50 $ewiki_t["en"]["UPLOAD0"] = "Use this form to upload an arbitrary binary file into the wiki:<br />"; 51 $ewiki_t["en"]["UPL_NEWNAM"] = "Save with different filename"; 52 $ewiki_t["en"]["UPL_INSECT"] = "Upload into section"; 53 $ewiki_t["en"]["UPL_TOOLARGE"] = "Your upload has been rejected, because that file was too large!"; 54 $ewiki_t["en"]["UPL_REJSECT"] = 'The given download section "$sect" has been rejected. Please only use the default ones, or tell the WikiAdmin to reenable per-page uploads; else others can\'t find your uploaded files easily.<br /><br />'; 55 $ewiki_t["en"]["UPL_OK"] = "Your file was uploaded correctly, please see <a href=\"\$script".EWIKI_PAGE_DOWNLOAD."\">".EWIKI_PAGE_DOWNLOAD."</a>.<br /><br />"; 56 $ewiki_t["en"]["UPL_ERROR"] = "We're sorry, but something went wrong during the file upload.<br /><br />"; 57 $ewiki_t["en"]["DWNL_SEEUPL"] = 'See also <a href="$script'.EWIKI_PAGE_UPLOAD.'">FileUpload</a>, this page is only about downloading.<br /><br />'; 58 $ewiki_t["en"]["DWNL_NOFILES"] = "No files uploaded yet.<br />\n"; 59 $ewiki_t["en"]["file"] = "File"; 60 $ewiki_t["en"]["of"] = "of"; 61 $ewiki_t["en"]["comment"] = "Comment"; 62 $ewiki_t["en"]["dwnl_section"] = "download section"; 63 $ewiki_t["en"]["DWNL_ENTRY_FORMAT"] = 64 '<div class="download"><a href="$url">$icon$title</a><small>$size<br />'. 65 'uploaded on <b>$time</b>, downloaded <tt>$hits</tt> times<br />'. 66 '(<a href="$url">$id</a>)<br />'. 67 '$section'.'file is of type <tt>$type</tt>'. 68 '$comment'."</small></div><br />\n"; 69 70 $ewiki_t["de"]["UPLOAD0"] = "Mit diesem Formular kannst du beliebige Dateien in das Wiki abspeichern:<br />"; 71 $ewiki_t["de"]["UPL_NEWNAM"] = "Mit unterschiedlichem Dateinamen speichern"; 72 $ewiki_t["de"]["UPL_INSECT"] = "Hochladen in Bereich:"; 73 $ewiki_t["de"]["UPL_TOOLARGE"] = "Deine Datei wurde nicht aufgenommen, weil sie zu gro� war!"; 74 $ewiki_t["de"]["UPL_REJSECT"] = 'Der angegebene Download-Bereich "$sect" wird nicht verwendet. Bitte verwende einen von den voreingestellten Bereichen, damit Andere die Datei sp�ter auch finden k�nnen, oder frag den Administrator das Hochladen f�r beliebige Seiten zu aktivieren.<br /><br />'; 75 $ewiki_t["de"]["UPL_OK"] = "Deine Datei wurde korrekt hochgeladen, sehe einfach auf der <a href=\"\$script".EWIKI_PAGE_DOWNLOAD."\">".EWIKI_PAGE_DOWNLOAD."</a> nach.<br /><br />"; 76 $ewiki_t["de"]["UPL_ERROR"] = "'Tschuldige, aber irgend etwas ist w�hrend des Hochladens gr�ndlich schief gelaufen.<br /><br />"; 77 $ewiki_t["de"]["DWNL_SEEUPL"] = 'Siehe auch <a href="$script'.EWIKI_PAGE_UPLOAD.'">DateiHochladen</a>, auf dieser Seite stehen nur die Downloads.<br /><br />'; 78 $ewiki_t["de"]["DWNL_NOFILES"] = "Noch keine Dateien hochgeladen.<br />\n"; 79 $ewiki_t["de"]["file"] = "Datei"; 80 $ewiki_t["de"]["of"] = "von"; 81 $ewiki_t["de"]["comment"] = "Kommentar"; 82 $ewiki_t["de"]["dwnl_section"] = "Download Bereich"; 83 $ewiki_t["de"]["DWNL_ENTRY_FORMAT"] = 84 '<div class="download"><a href="$url">$icon$title</a><small>$size<br />'. 85 'am <b>$time</b> hochgeladen, <tt>$hits</tt> mal abgerufen<br />'. 86 '(<a href="$url">$id</a>)<br />'. 87 '$section'.'Datei ist vom Typ <tt>$type</tt>'. 88 '$comment'."</small></div><br />\n"; 89 90 91 92 93 function ewiki_page_fileupload($id, $data, $action, $def_sec="") { 94 95 global $CFG, $ewiki_upload_sections, $ewiki_plugins; 96 97 $o = ewiki_make_title($id, $id, 2); 98 99 $upload_file = $_FILES[EWIKI_UP_UPLOAD]; 100 if (empty($upload_file)) { 101 102 $o .= ewiki_t("UPLOAD0"); 103 104 $o .= '<div class="upload">'. 105 '<form action="' . 106 ewiki_script( ($action!="view" ? $action : ""), $id). 107 '" method="post" enctype="multipart/form-data">' ; 108 $o .= '<fieldset class="invisiblefieldset">'; 109 require_once($CFG->dirroot.'/lib/uploadlib.php'); 110 $o .= upload_print_form_fragment(1,array(EWIKI_UP_UPLOAD),array(ewiki_t("file")),false,null,0,0,true); 111 $o .= '<input type="submit" value="' . EWIKI_PAGE_UPLOAD . '" /><br /><br />' 112 .'<b>' . ewiki_t("comment") . '</b><br /><textarea name="comment" cols="35" rows="3"></textarea><br /><br />'; 113 114 if (empty($ewiki_upload_sections[$def_sec])) { 115 $ewiki_upload_sections[$def_sec] = $def_sec; 116 } 117 if (count($ewiki_upload_sections) > 1) { 118 if (empty($def_sec)) { 119 $def_sec = $_REQUEST["section"]; 120 } 121 $o .= '<b>'.ewiki_t("UPL_INSECT").'</b><br /><select name="section">'; 122 foreach ($ewiki_upload_sections as $id => $title) { 123 $o .= '<option value="'.$id.'"' .($id==$def_sec?' selected':''). '>'.$title.'</option>'; 124 } 125 $o .= '</select><br /><br />'; 126 } 127 128 $o .= '<b>'.ewiki_t("UPL_NEWNAM").'</b><br /><input type="text" name="new_filename" size="20" /><br /><br />'; 129 130 $o .= '</fieldset></form></div>'; 131 132 } 133 elseif ($upload_file["size"] > EWIKI_UPLOAD_MAXSIZE) { 134 135 $o .= ewiki_t("UPL_TOOLARGE"); 136 137 } 138 else { 139 140 $meta = array( 141 "X-Content-Type" => $upload_file["type"], 142 #"X-Content-Length" => $upload_file["size"], 143 ); 144 if (($s = $upload_file["name"]) && (strlen($s) >= 3) 145 || ($s = substr(md5(time()+microtime()),0,8) . ".dat")) 146 { 147 if (strlen($uu = trim($_REQUEST["new_filename"])) >= 3) { 148 if ($uu != $s) { 149 $meta["Original-Filename"] = $s; 150 } 151 $s = $uu; 152 } 153 $meta["Content-Location"] = $s; 154 ($p = 0) or 155 ($p = strrpos($s, "/")) and ($p++) or 156 ($p = strrpos($s, '\\')) and ($p++); 157 $meta["Content-Disposition"] = 'attachment; filename="'.urlencode(substr($s, $p)).'"'; 158 } 159 if (strlen($sect = $_REQUEST["section"])) { 160 if ($ewiki_upload_sections[$sect] 161 || ($action==EWIKI_ACTION_ATTACHMENTS) && ($data["content"]) 162 && strlen($ewiki_plugins["action"][EWIKI_ACTION_ATTACHMENTS])) { 163 $meta["section"] = $sect; 164 } 165 else { 166 $o .= ewiki_t("UPL_REJSECT", array('sect' => $sect)); 167 168 return($o); 169 } 170 } 171 if (strlen($s = trim($_REQUEST["comment"]))) { 172 $meta["comment"] = $s; 173 } 174 175 $result = ewiki_binary_save_image($upload_file["tmp_name"], "", "RETURN", $meta, "ACCEPT_ALL", $care_for_images=0); 176 177 if ($result) { 178 $o .= ewiki_t("UPL_OK", array('$script'=>ewiki_script())); 179 } 180 else { 181 $o .= ewiki_t("UPL_ERROR"); 182 } 183 184 } 185 186 return($o); 187 } 188 189 190 191 192 function ewiki_page_filedownload($id, $data, $action, $def_sec="") { 193 194 global $ewiki_binary_icons, $ewiki_upload_sections; 195 196 $o = ewiki_make_title($id, $id, 2); 197 #<off># $o .= ewiki_t("DWNL_SEEUPL", '$scr'=>ewiki_script("", "")); 198 199 200 #-- params (section, orderby) 201 ($orderby = $_REQUEST["orderby"]) or ($orderby = "created"); 202 203 if ($def_sec) { 204 $section = $def_sec; 205 } 206 else { 207 ($section = $_REQUEST["section"]) or ($section = ""); 208 if (count($ewiki_upload_sections) > 1) { 209 $oa = array(); 210 $ewiki_upload_sections["*"] = "*"; 211 if (empty($ewiki_plugins["action"][EWIKI_ACTION_ATTACHMENTS])) { 212 $ewiki_upload_sections["**"] = "**"; 213 } 214 foreach ($ewiki_upload_sections as $sec=>$title) { 215 $oa[] = '<a href="' . ewiki_script("", $id, array( 216 "orderby"=>$orderby, "section" => $sec)) . 217 '">' . $title . "</a>"; 218 } 219 $o .= '<div align="center" class="darker">'.implode(" · ", $oa).'</div><br />'; 220 } 221 } 222 223 224 #-- collect entries 225 $files = array(); 226 $sorted = array(); 227 $result = ewiki_database("GETALL", array("flags", "meta", "created", "hits", "userid")); 228 229 while ($row = $result->get()) { 230 if (($row["flags"] & EWIKI_DB_F_TYPE) == EWIKI_DB_F_BINARY) { 231 232 $m = &$row["meta"]; 233 if(!$section) { 234 $section="**"; 235 } 236 if ($m["section"] != $section) { 237 if ($section == "**") { 238 } 239 elseif (($section == "*") && !empty($ewiki_upload_sections[$m["section"]])) { 240 } 241 else { 242 continue; 243 } 244 } 245 else { 246 } 247 248 $files[$row["id"]] = $row; 249 $sorted[$row["id"]] = $row[$orderby]; 250 } 251 } 252 253 254 #-- sort 255 arsort($sorted); 256 257 258 #-- slice 259 ($pnum = $_REQUEST[EWIKI_UP_PAGENUM]) or ($pnum = 0); 260 if (count($sorted) > EWIKI_LIST_LIMIT) { 261 $o_nl .= '<div class="lighter">>> '; 262 for ($n=0; $n < (int)(count($sorted) / EWIKI_LIST_LIMIT); $n++) { 263 $o_nl .= '<a href="' . ewiki_script("", $id, array( 264 "orderby"=>$orderby, "section"=>$section, EWIKI_UP_PAGENUM=>$n)) . 265 '">[' . $n . "]</a> "; 266 } 267 $o_nl .= '</div><br />'; 268 $o .= $o_nl; 269 } 270 $sorted = array_slice($sorted, $pnum * EWIKI_LIST_LIMIT, EWIKI_LIST_LIMIT); 271 272 273 #-- output 274 if (empty($sorted)) { 275 276 $o .= ewiki_t("DWNL_NOFILES"); 277 } 278 else { 279 280 foreach ($sorted as $id=>$uu) { 281 $row = $files[$id]; 282 $o .= ewiki_entry_downloads($row, $section[0]=="*", true); 283 } 284 } 285 286 $o .= $o_nl; 287 288 return($o); 289 290 } 291 292 293 294 295 function ewiki_entry_downloads($row, $show_section=0, $fullinfo=false) { 296 297 global $ewiki_binary_icons, $ewiki_upload_sections; 298 299 $meta = &$row["meta"]; 300 301 $id = $row["id"]; 302 $p_title = basename($meta["Content-Location"]); 303 $p_time = userdate($row["created"]); 304 305 306 $p_hits = ($row["hits"] ? $row["hits"] : "0"); 307 $p_size = $meta["size"]; 308 $p_size = isset($p_size) ? (", " . ($p_size>=4096 ? round($p_size/1024)."K" : $p_size." bytes")) : ""; 309 $p_ct1 = $meta["Content-Type"]; 310 $p_ct2 = $meta["X-Content-Type"]; 311 if ($p_ct1==$p_ct2) { unset($p_ct2); } 312 if ($p_ct1 && !$p_ct2) { $p_ct = "<tt>$p_ct1</tt>"; } 313 elseif (!$p_ct1 && $p_ct2) { $p_ct = "<tt>$p_ct2</tt>"; } 314 elseif ($p_ct1 && $p_ct2) { $p_ct = "<tt>$p_ct1</tt>, <tt>$p_ct2</tt>"; } 315 else { $p_ct = "<tt>application/octet-stream</tt>"; } 316 $p_section = $ewiki_upload_sections[$meta["section"]]; 317 $p_section = $p_section ? $p_section : $meta["section"]; 318 $p_comment = strlen($meta["comment"]) ? '<table border="1" cellpadding="2" cellspacing="0"><tr><td class="lighter">'. 319 str_replace('</p>', '', str_replace('<p>', '', 320 ewiki_format($meta["comment"]))) . '</td></tr></table>' : "<br />"; 321 322 $p_icon = ""; 323 /*foreach ($ewiki_binary_icons as $str => $i) { 324 if (empty($str) || strstr($row["Content-Location"], $str) || strstr($p_ct, $str) || strstr($p_ct2, $str)) { 325 $p_icon = $i; 326 $p_icon_t = $str; 327 } 328 }*/ 329 330 /// Moodle Icon Handling 331 global $CFG; 332 $icon = mimeinfo("icon", $id); 333 $p_icon="$CFG->pixpath/f/$icon"; 334 $p_icon_t=""; 335 336 $info->id = $id; 337 $info->size = $p_size; 338 $info->icon = ($p_icon ? '<img src="'.$p_icon.'" alt="['.$p_icon_t.']" class="icon" /> ' : ''); 339 $info->time = $p_time; 340 $info->hits = $p_hits; 341 $info->section = ($show_section ? ewiki_t('dwnl_section') . ": $p_section<br />" : ''); 342 $info->type = $p_ct; 343 $info->url = ewiki_script_binary("", $row["id"]); 344 $info->title = $p_title; 345 $info->comment = format_text($p_comment); 346 347 if ($fullinfo) { 348 if ($user = get_record('user', 'id', $row['userid'])) { 349 if (!isset($course->id)) { 350 $course->id = 1; 351 } 352 $picture = print_user_picture($user->id, $course->id, $user->picture, false, true, true); 353 $value = $picture." <a href=\"$CFG->wwwroot/user/view.php?id=$user->id&course=$course->id\">". 354 fullname($user)."</a>"; 355 } 356 357 $o .= '<a href="'.$info->url.'">'.$info->icon.$info->title.'</a>'.$info->size.'<br />'. 358 $info->comment. 359 $info->section." ".get_string("fileisoftype","wiki").": ".$info->type.'<br />'. 360 get_string("uploadedon","wiki").": ".$info->time.", ". 361 ' by '.$value.'<br />'. 362 get_string("downloadtimes","wiki",$info->hits)."<br />". 363 // '(<a href="'.$info->url.'">'.$info->id."</a>)<br />". 364 '<br /><br />'; 365 } 366 else { 367 // global $moodle_format; // from wiki/view.php 368 $o .= '<a href="'.$info->url.'">'.$info->icon.$info->title.'</a>'.$info->size.'<br />'. 369 $info->comment.'<br /><br />'; 370 // $o = format_text($o, $moodle_format); 371 } 372 373 374 375 ewiki_t("DWNL_ENTRY_FORMAT", $info); 376 377 return($o); 378 } 379 380 381 382 #------------------------------------------------------- per-page uploads --- 383 384 385 function ewiki_action_attachments($id, $data, $action=EWIKI_ACTION_ATTACHMENTS) { 386 387 if (!empty($_FILES[EWIKI_UP_UPLOAD])) { 388 $o .= ewiki_page_fileupload($id, $data, EWIKI_ACTION_ATTACHMENTS, $id); 389 } 390 391 $o .= ewiki_page_filedownload(ucwords(EWIKI_ACTION_ATTACHMENTS) . " " . ewiki_t("of") . " $id", $data, "view", $id); 392 393 unset($_FILES[EWIKI_UP_UPLOAD]); 394 $o .= ewiki_page_fileupload($id, $data, EWIKI_ACTION_ATTACHMENTS, $id); 395 396 return($o); 397 398 } 399 400 401 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jan 14 11:33:29 2009 | Cross-referenced by PHPXref 0.7 |