function upload($doc, $docinfo) { global $Conf; if (is_object($doc)) { $doc = clone $doc; if (!$this->load($doc) && !get($doc, "error_html")) { set_error_html($doc, "The uploaded file was empty."); } } else { $doc = self::file_upload_json($doc); } if (get($doc, "error")) { return $doc; } // Check if paper one of the allowed mimetypes. if (!get($doc, "mimetype")) { $doc->mimetype = "application/octet-stream"; } // Sniff content since MacOS browsers supply bad mimetypes. if ($m = Mimetype::sniff(self::content($doc))) { $doc->mimetype = $m; } if ($m = Mimetype::lookup($doc->mimetype)) { $doc->mimetypeid = $m->mimetypeid; } $mimetypes = $this->mimetypes($doc, $docinfo); for ($i = 0; $i < count($mimetypes); ++$i) { if ($mimetypes[$i]->mimetype === $doc->mimetype) { break; } } if ($i >= count($mimetypes) && count($mimetypes)) { $e = "I only accept " . htmlspecialchars(Mimetype::description($mimetypes)) . " files."; $e .= " (Your file has MIME type “" . htmlspecialchars($doc->mimetype) . "” and starts with “" . htmlspecialchars(substr($doc->content, 0, 5)) . "”.)<br />Please convert your file to a supported type and try again."; return set_error_html($doc, $e); } if (!get($doc, "timestamp")) { $doc->timestamp = time(); } $this->store($doc, $docinfo); return $doc; }
public function mimetypes($doc = null, $docinfo = null) { global $Opt; if ($this->dtype > 0 && !$this->option) { return null; } $otype = $this->option ? $this->option->type : "pdf"; $mimetypes = array(); if (PaperOption::type_takes_pdf($otype)) { $mimetypes[] = Mimetype::lookup(".pdf"); } if (!$this->option && !defval($Opt, "disablePS")) { $mimetypes[] = Mimetype::lookup(".ps"); } if ($otype == "slides") { $mimetypes[] = Mimetype::lookup(".ppt"); $mimetypes[] = Mimetype::lookup(".pptx"); } if ($otype == "video") { $mimetypes[] = Mimetype::lookup(".mp4"); $mimetypes[] = Mimetype::lookup(".avi"); } return $mimetypes; }