diff --git a/core/ormdocument.class.inc.php b/core/ormdocument.class.inc.php index 94625b175..72a897f05 100644 --- a/core/ormdocument.class.inc.php +++ b/core/ormdocument.class.inc.php @@ -117,7 +117,18 @@ class ormDocument { return "".$this->GetFileName()."\n"; } - + + /** + * Returns an URL to download a document like an image (uses HTTP caching) + * @return string + */ + public function GetDownloadURL($sClass, $Id, $sAttCode) + { + // Compute a signature to reset the cache anytime the data changes (this is acceptable if used only with icon files) + $sSignature = md5($this->GetData()); + return utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=download_document&class=$sClass&id=$Id&field=$sAttCode&s=$sSignature&cache=86400"; + } + public function IsPreviewAvailable() { diff --git a/pages/ajax.render.php b/pages/ajax.render.php index 1bef4cf81..547c4c83d 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -778,9 +778,15 @@ try case 'download_document': $id = utils::ReadParam('id', ''); $sField = utils::ReadParam('field', ''); + $iCacheSec = (int) utils::ReadParam('cache', 0); if (!empty($sClass) && !empty($id) && !empty($sField)) { DownloadDocument($oPage, $sClass, $id, $sField, 'attachment'); + if ($iCacheSec > 0) + { + $oPage->add_header("Expires: "); // Reset the value set in ajax_page + $oPage->add_header("Cache-Control: no-transform,public,max-age=$iCacheSec,s-maxage=$iCacheSec"); + } } break;