Skip to content
Snippets Groups Projects
Commit c89fefd3 authored by Jared Hancock's avatar Jared Hancock
Browse files

Merge branch 'issue/filename-commas' into hotfix/171

parents f921c9a6 b4b02114
No related branches found
No related tags found
No related merge requests found
...@@ -136,21 +136,23 @@ class AttachmentFile { ...@@ -136,21 +136,23 @@ class AttachmentFile {
return true; return true;
} }
function makeCacheable($ttl=3600) {
function display() {
// Thanks, http://stackoverflow.com/a/1583753/1025836 // Thanks, http://stackoverflow.com/a/1583753/1025836
$last_modified = strtotime($this->lastModified()); $last_modified = Misc::db2gmtime($this->lastModified());
header("Last-Modified: ".gmdate(DATE_RFC822, $last_modified)." GMT", false); header("Last-Modified: ".date('D, d M y H:i:s', $last_modified)." GMT", false);
header('ETag: "'.$this->getHash().'"'); header('ETag: "'.$this->getHash().'"');
header('Cache-Control: private, max-age=3600'); header("Cache-Control: private, max-age=$ttl");
header('Expires: ' . date(DATE_RFC822, time() + 3600) . ' GMT'); header('Expires: ' . gmdate(DATE_RFC822, time() + $ttl)." GMT");
header('Pragma: private'); header('Pragma: private');
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified || if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified ||
@trim($_SERVER['HTTP_IF_NONE_MATCH']) == $this->getHash()) { @trim($_SERVER['HTTP_IF_NONE_MATCH']) == $this->getHash()) {
header("HTTP/1.1 304 Not Modified"); header("HTTP/1.1 304 Not Modified");
exit(); exit();
} }
}
function display() {
$this->makeCacheable();
header('Content-Type: '.($this->getType()?$this->getType():'application/octet-stream')); header('Content-Type: '.($this->getType()?$this->getType():'application/octet-stream'));
header('Content-Length: '.$this->getSize()); header('Content-Length: '.$this->getSize());
...@@ -159,20 +161,20 @@ class AttachmentFile { ...@@ -159,20 +161,20 @@ class AttachmentFile {
} }
function download() { function download() {
$this->makeCacheable();
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Type: '.($this->getType()?$this->getType():'application/octet-stream')); header('Content-Type: '.($this->getType()?$this->getType():'application/octet-stream'));
$filename=basename($this->getName()); $filename=basename($this->getName());
$user_agent = strtolower ($_SERVER['HTTP_USER_AGENT']); $user_agent = strtolower ($_SERVER['HTTP_USER_AGENT']);
if ((is_integer(strpos($user_agent,'msie'))) && (is_integer(strpos($user_agent,'win')))) { if (false !== strpos($user_agent,'msie') && false !== strpos($user_agent,'win'))
header('Content-Disposition: filename='.$filename.';'); header('Content-Disposition: filename='.rawurlencode($filename).';');
}else{ elseif (false !== strpos($user_agent, 'safari') && false === strpos($user_agent, 'chrome'))
header('Content-Disposition: attachment; filename='.$filename.';' ); // Safari and Safari only can handle the filename as is
} header('Content-Disposition: filename='.str_replace(',', '', $filename).';');
else
// Use RFC5987
header("Content-Disposition: filename*=UTF-8''".rawurlencode($filename).';' );
header('Content-Transfer-Encoding: binary'); header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$this->getSize()); header('Content-Length: '.$this->getSize());
...@@ -238,7 +240,7 @@ class AttachmentFile { ...@@ -238,7 +240,7 @@ class AttachmentFile {
$sql='INSERT INTO '.FILE_TABLE.' SET created=NOW() ' $sql='INSERT INTO '.FILE_TABLE.' SET created=NOW() '
.',type='.db_input($file['type']) .',type='.db_input($file['type'])
.',size='.db_input($file['size']) .',size='.db_input($file['size'])
.',name='.db_input(Format::file_name($file['name'])) .',name='.db_input($file['name'])
.',hash='.db_input($file['hash']); .',hash='.db_input($file['hash']);
# XXX: ft does not exists during the upgrade when attachments are # XXX: ft does not exists during the upgrade when attachments are
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment