/** * Downloads a document to the browser, either as 'inline' or 'attachment' * * @param WebPage $oPage The web page for the output * @param string $sClass Class name of the object * @param mixed $id Identifier of the object * @param string $sAttCode Name of the attribute containing the document to download * @param string $sContentDisposition Either 'inline' or 'attachment' * @return none */ function DownloadDocument(WebPage $oPage, $sClass, $id, $sAttCode, $sContentDisposition = 'attachment') { try { $oObj = MetaModel::GetObject($sClass, $id, false, false); if (!is_object($oObj)) { throw new Exception("Invalid id ({$id}) for class '{$sClass}' - the object does not exist or you are not allowed to view it"); } $oDocument = $oObj->Get($sAttCode); if (is_object($oDocument)) { $oPage->TrashUnexpectedOutput(); $oPage->SetContentType($oDocument->GetMimeType()); $oPage->SetContentDisposition($sContentDisposition, $oDocument->GetFileName()); $oPage->add($oDocument->GetData()); } } catch (Exception $e) { $oPage->p($e->getMessage()); } }
public function AsyncAction(WebPage $oPage, $sCode, $aParameters) { $oParameters = new PHPParameters(); // For security reasons: add the extension now so that this action can be used to read *only* .zip files from the disk... $sBackupFile = $aParameters['backup'] . '.zip'; if (file_exists($sBackupFile)) { // Make sure there is NO output at all before our content, otherwise the document will be corrupted $sPreviousContent = ob_get_clean(); $oPage->SetContentType('application/zip'); $oPage->SetContentDisposition('attachment', basename($sBackupFile)); $oPage->add(file_get_contents($sBackupFile)); } }