Example #1
0
function processConversion($files, $converter, $pipeline, $autoPipeline, $afterConversion, $setupOpenOfficeOrg, $outputZip, $justShowPreviewDirectory = null)
{
    $forcedPipeline = getGlobalConfigItem('forcePipeline');
    if ($forcedPipeline != null) {
        $pipeline = 'fake:' . $forcedPipeline;
    }
    ensureClientType();
    if (thereWasAFileGiven($files, $pipeline) || $justShowPreviewDirectory) {
        $returnZipPath = null;
        $previewDirectory = null;
        if (!$justShowPreviewDirectory) {
            $previewDirectory = getTemporaryDirectoryInsideDirectory(getWritableDirectory(), 'preview');
            $temporaryDirectory = getTemporaryDirectory();
            $pipelineToRunOnDocuments = substringAfter($pipeline, ':');
            foreach ($files as $file) {
                if ($file['size'] != 0) {
                    $documentPath = moveUploadToConversionDirectory($file, $temporaryDirectory);
                    $oasisOpenDocumentPath = '';
                    if (!isAnOasisOpenDocument($file)) {
                        $oasisOpenDocumentPath = makeOasisOpenDocument($documentPath, $converter);
                        silentlyUnlink($documentPath);
                    } else {
                        $oasisOpenDocumentPath = $documentPath;
                    }
                    if ($pipelineToRunOnDocuments != "none") {
                        extractUsefulOasisOpenDocumentFiles($oasisOpenDocumentPath);
                        silentlyUnlink($oasisOpenDocumentPath);
                        $oasisOpenDocumentContentPath = dirname($oasisOpenDocumentPath) . DIRECTORY_SEPARATOR . 'docvert-content.xml';
                        applyPipeline($oasisOpenDocumentContentPath, $pipelineToRunOnDocuments, $autoPipeline, $previewDirectory);
                        silentlyUnlink($oasisOpenDocumentContentPath);
                    }
                }
            }
            $returnZipPath = zipAndDeleteTemporaryFiles($temporaryDirectory);
            if ($afterConversion == 'preview') {
                include_once dirname(__FILE__) . '/webpage.php';
                $themes = new Themes();
                //$returnZipPath = $themes->unzipConversionResults($returnZipPath, $previewDirectory); //WTF
            }
        } else {
            $previewDirectory = getWritableDirectory() . $justShowPreviewDirectory;
            $zipsInPreviewDirectory = glob($previewDirectory . DIRECTORY_SEPARATOR . '*.zip');
            if (count($zipsInPreviewDirectory) != 1) {
                $errorData = array('zipsInPreviewDirectory' => count($zipsInPreviewDirectory), 'previewDirectory' => $previewDirectory);
                webServiceError('&docvert-internal-error-no-zip-file;', 500, $errorData);
            }
            $returnZipPath = $zipsInPreviewDirectory[0];
        }
        if ($afterConversion == 'preview') {
            include_once dirname(__FILE__) . '/webpage.php';
            $themes = new Themes();
            $themes->previewConversionResults($returnZipPath, $previewDirectory);
        } elseif ($afterConversion == 'saveZip') {
            if (DOCVERT_CLIENT_TYPE == 'command line') {
                moveFile($returnZipPath, $outputZip);
                print 'Ok! File saved to ' . $outputZip . "\n";
                deleteDirectoryRecursively($temporaryDirectory);
                die;
            } else {
                webServiceError('&error-after-conversion-flag;');
            }
        } elseif ($afterConversion == 'downloadZip') {
            //TODO: different versions of IE want different "content disposition" header syntaxes
            //perhaps we could detect versions of IE and serve up what they need? Will need quite a bit of research.
            header('Content-Type: application/x-zip-compressed');
            header('Content-disposition: attachment; filename=' . basename($returnZipPath));
            $zipContents = file_get_contents($returnZipPath);
            print $zipContents;
            flush();
            silentlyUnlink($returnZipPath);
            deleteDirectoryRecursively($temporaryDirectory);
            die;
        } else {
            webServiceError('&error-unsupported-after-conversion;', 500, array('after-conversion' => revealXml($afterConversion)));
        }
    } elseif ($setupOpenOfficeOrg) {
        setupOpenOfficeOrg();
    } else {
        /* TODO: so there's been no upload and what do we do?
         * I suppose an http status code would be appropriate.
         *     http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
         * The 4xx series are for user error, which seems appropriate.
         * ...but none of them seem quite appropriate for a casual
         * "you didn't give me files" response.
         * They talk about malformed requests.
         *
         * So I'm doing a "400 Bad Request" in the meantime.
         */
        webServiceError('&error-no-files-uploaded;', '400 Bad Request');
    }
}