Пример #1
0
/**
 * 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));
     }
 }