From 416978f0a310aa6a7c25a03e4ac338ac6601f622 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Wed, 19 Oct 2016 12:28:10 -0400 Subject: [PATCH] HOR-1959 --- .../BusinessModel/Cases/InputDocument.php | 224 ++++++++++++++++++ .../Services/Api/Cases/InputDocument.php | 18 ++ 2 files changed, 242 insertions(+) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php index 93c9d0e80..53ca8677f 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php @@ -460,6 +460,230 @@ class InputDocument } } + /** + * Download InputDocument + * + * @param $app_uid + * @param $app_doc_uid + * @param $version + * @throws \Exception + */ + public function downloadInputDocument($app_uid, $app_doc_uid, $version) + { + try { + $oAppDocument = new \AppDocument(); + if ($version == 0) { + $docVersion = $oAppDocument->getLastAppDocVersion($app_doc_uid); + } else { + $docVersion = $version; + } + $oAppDocument->Fields = $oAppDocument->load($app_doc_uid, $docVersion); + $sAppDocUid = $oAppDocument->getAppDocUid(); + $iDocVersion = $oAppDocument->getDocVersion(); + $info = pathinfo($oAppDocument->getAppDocFilename()); + + $app_uid = \G::getPathFromUID($oAppDocument->Fields['APP_UID']); + $file = \G::getPathFromFileUID($oAppDocument->Fields['APP_UID'], $sAppDocUid); + + $ext = (isset($info['extension']) ? $info['extension'] : ''); + $realPath = PATH_DOCUMENT . $app_uid . '/' . $file[0] . $file[1] . '_' . $iDocVersion . '.' . $ext; + $realPath1 = PATH_DOCUMENT . $app_uid . '/' . $file[0] . $file[1] . '.' . $ext; + if (!file_exists($realPath) && file_exists($realPath1)) { + $realPath = $realPath1; + } + $filename = $info['basename']; + $mimeType = $this->mime_content_type($filename); + header('HTTP/1.0 206'); + header('Pragma: public'); + header('Expires: -1'); + header('Cache-Control: public, must-revalidate, post-check=0, pre-check=0'); + header('Content-Transfer-Encoding: binary'); + header("Content-Disposition: attachment; filename=\"$filename\""); + header("Content-Length: " . filesize($realPath)); + header("Content-Type: $mimeType"); + header("Content-Description: File Transfer"); + + if ($fp = fopen($realPath, 'rb')) { + ob_end_clean(); + while (!feof($fp) and (connection_status() == 0)) { + print(fread($fp, 8192)); + flush(); + } + @fclose($fp); + } + } catch (\Exception $e) { + throw $e; + } + } + + public function mime_content_type($filename) { + $idx = explode( '.', $filename ); + $count_explode = count($idx); + $idx = strtolower($idx[$count_explode-1]); + + $mimet = array( + 'ai' =>'application/postscript', + 'aif' =>'audio/x-aiff', + 'aifc' =>'audio/x-aiff', + 'aiff' =>'audio/x-aiff', + 'asc' =>'text/plain', + 'atom' =>'application/atom+xml', + 'avi' =>'video/x-msvideo', + 'bcpio' =>'application/x-bcpio', + 'bmp' =>'image/bmp', + 'cdf' =>'application/x-netcdf', + 'cgm' =>'image/cgm', + 'cpio' =>'application/x-cpio', + 'cpt' =>'application/mac-compactpro', + 'crl' =>'application/x-pkcs7-crl', + 'crt' =>'application/x-x509-ca-cert', + 'csh' =>'application/x-csh', + 'css' =>'text/css', + 'dcr' =>'application/x-director', + 'dir' =>'application/x-director', + 'djv' =>'image/vnd.djvu', + 'djvu' =>'image/vnd.djvu', + 'doc' =>'application/msword', + 'dtd' =>'application/xml-dtd', + 'dvi' =>'application/x-dvi', + 'dxr' =>'application/x-director', + 'eps' =>'application/postscript', + 'etx' =>'text/x-setext', + 'ez' =>'application/andrew-inset', + 'gif' =>'image/gif', + 'gram' =>'application/srgs', + 'grxml' =>'application/srgs+xml', + 'gtar' =>'application/x-gtar', + 'hdf' =>'application/x-hdf', + 'hqx' =>'application/mac-binhex40', + 'html' =>'text/html', + 'html' =>'text/html', + 'ice' =>'x-conference/x-cooltalk', + 'ico' =>'image/x-icon', + 'ics' =>'text/calendar', + 'ief' =>'image/ief', + 'ifb' =>'text/calendar', + 'iges' =>'model/iges', + 'igs' =>'model/iges', + 'jpe' =>'image/jpeg', + 'jpeg' =>'image/jpeg', + 'jpg' =>'image/jpeg', + 'js' =>'application/x-javascript', + 'kar' =>'audio/midi', + 'latex' =>'application/x-latex', + 'm3u' =>'audio/x-mpegurl', + 'man' =>'application/x-troff-man', + 'mathml' =>'application/mathml+xml', + 'me' =>'application/x-troff-me', + 'mesh' =>'model/mesh', + 'mid' =>'audio/midi', + 'midi' =>'audio/midi', + 'mif' =>'application/vnd.mif', + 'mov' =>'video/quicktime', + 'movie' =>'video/x-sgi-movie', + 'mp2' =>'audio/mpeg', + 'mp3' =>'audio/mpeg', + 'mpe' =>'video/mpeg', + 'mpeg' =>'video/mpeg', + 'mpg' =>'video/mpeg', + 'mpga' =>'audio/mpeg', + 'ms' =>'application/x-troff-ms', + 'msh' =>'model/mesh', + 'mxu m4u' =>'video/vnd.mpegurl', + 'nc' =>'application/x-netcdf', + 'oda' =>'application/oda', + 'ogg' =>'application/ogg', + 'pbm' =>'image/x-portable-bitmap', + 'pdb' =>'chemical/x-pdb', + 'pdf' =>'application/pdf', + 'pgm' =>'image/x-portable-graymap', + 'pgn' =>'application/x-chess-pgn', + 'php' =>'application/x-httpd-php', + 'php4' =>'application/x-httpd-php', + 'php3' =>'application/x-httpd-php', + 'phtml' =>'application/x-httpd-php', + 'phps' =>'application/x-httpd-php-source', + 'png' =>'image/png', + 'pnm' =>'image/x-portable-anymap', + 'ppm' =>'image/x-portable-pixmap', + 'ppt' =>'application/vnd.ms-powerpoint', + 'ps' =>'application/postscript', + 'qt' =>'video/quicktime', + 'ra' =>'audio/x-pn-realaudio', + 'ram' =>'audio/x-pn-realaudio', + 'ras' =>'image/x-cmu-raster', + 'rdf' =>'application/rdf+xml', + 'rgb' =>'image/x-rgb', + 'rm' =>'application/vnd.rn-realmedia', + 'roff' =>'application/x-troff', + 'rtf' =>'text/rtf', + 'rtx' =>'text/richtext', + 'sgm' =>'text/sgml', + 'sgml' =>'text/sgml', + 'sh' =>'application/x-sh', + 'shar' =>'application/x-shar', + 'shtml' =>'text/html', + 'silo' =>'model/mesh', + 'sit' =>'application/x-stuffit', + 'skd' =>'application/x-koan', + 'skm' =>'application/x-koan', + 'skp' =>'application/x-koan', + 'skt' =>'application/x-koan', + 'smi' =>'application/smil', + 'smil' =>'application/smil', + 'snd' =>'audio/basic', + 'spl' =>'application/x-futuresplash', + 'src' =>'application/x-wais-source', + 'sv4cpio' =>'application/x-sv4cpio', + 'sv4crc' =>'application/x-sv4crc', + 'svg' =>'image/svg+xml', + 'swf' =>'application/x-shockwave-flash', + 't' =>'application/x-troff', + 'tar' =>'application/x-tar', + 'tcl' =>'application/x-tcl', + 'tex' =>'application/x-tex', + 'texi' =>'application/x-texinfo', + 'texinfo' =>'application/x-texinfo', + 'tgz' =>'application/x-tar', + 'tif' =>'image/tiff', + 'tiff' =>'image/tiff', + 'tr' =>'application/x-troff', + 'tsv' =>'text/tab-separated-values', + 'txt' =>'text/plain', + 'ustar' =>'application/x-ustar', + 'vcd' =>'application/x-cdlink', + 'vrml' =>'model/vrml', + 'vxml' =>'application/voicexml+xml', + 'wav' =>'audio/x-wav', + 'wbmp' =>'image/vnd.wap.wbmp', + 'wbxml' =>'application/vnd.wap.wbxml', + 'wml' =>'text/vnd.wap.wml', + 'wmlc' =>'application/vnd.wap.wmlc', + 'wmlc' =>'application/vnd.wap.wmlc', + 'wmls' =>'text/vnd.wap.wmlscript', + 'wmlsc' =>'application/vnd.wap.wmlscriptc', + 'wmlsc' =>'application/vnd.wap.wmlscriptc', + 'wrl' =>'model/vrml', + 'xbm' =>'image/x-xbitmap', + 'xht' =>'application/xhtml+xml', + 'xhtml' =>'application/xhtml+xml', + 'xls' =>'application/vnd.ms-excel', + 'xml xsl' =>'application/xml', + 'xpm' =>'image/x-xpixmap', + 'xslt' =>'application/xslt+xml', + 'xul' =>'application/vnd.mozilla.xul+xml', + 'xwd' =>'image/x-xwindowdump', + 'xyz' =>'chemical/x-xyz', + 'zip' =>'application/zip' + ); + + if (isset( $mimet[$idx] )) { + return $mimet[$idx]; + } else { + return 'application/octet-stream'; + } + } + /** * Delete InputDocument * diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php index 298adcb5a..7a2f48c42 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases/InputDocument.php @@ -53,6 +53,24 @@ class InputDocument extends Api } } + /** + * @url GET /:app_uid/input-document/:app_doc_uid/file + * + * @param string $app_uid {@min 32}{@max 32} + * @param string $app_doc_uid {@min 32}{@max 32} + * @param int $v {@from path} + * @throws \Exception + */ + public function doDownloadInputDocument($app_uid, $app_doc_uid, $v = 0) + { + try { + $inputDocument = new \ProcessMaker\BusinessModel\Cases\InputDocument(); + $inputDocument->downloadInputDocument($app_uid, $app_doc_uid, $v); + } catch (\Exception $e) { + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + } + /** * @url DELETE /:app_uid/:del_index/input-document/:app_doc_uid *