mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 11:38:15 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php namespace App\Http\Controllers;
 | |
| 
 | |
| use Datatable;
 | |
| use Input;
 | |
| use Redirect;
 | |
| use Session;
 | |
| use URL;
 | |
| use Utils;
 | |
| use View;
 | |
| use Validator;
 | |
| use Response;
 | |
| use App\Models\Document;
 | |
| use App\Ninja\Repositories\DocumentRepository;
 | |
| 
 | |
| class DocumentController extends BaseController
 | |
| {
 | |
|     protected $documentRepo;
 | |
|     protected $model = 'App\Models\Document';
 | |
| 
 | |
|     public function __construct(DocumentRepository $documentRepo)
 | |
|     {
 | |
|         // parent::__construct();
 | |
| 
 | |
|         $this->documentRepo = $documentRepo;
 | |
|     }
 | |
|     
 | |
|     public function get($publicId)
 | |
|     {
 | |
|         $document = Document::scope($publicId)
 | |
|                         ->firstOrFail();
 | |
|         
 | |
|         if(!$this->checkViewPermission($document, $response)){
 | |
|             return $response;
 | |
|         }
 | |
|         
 | |
|         return static::getDownloadResponse($document);
 | |
|     }
 | |
|     
 | |
|     public static function getDownloadResponse($document){
 | |
|         $direct_url = $document->getDirectUrl();
 | |
|         if($direct_url){
 | |
|             return redirect($direct_url);
 | |
|         }
 | |
|         
 | |
|         $stream = $document->getStream();
 | |
|         
 | |
|         if($stream){
 | |
|             $headers = [
 | |
|                 'Content-Type'        => Document::$types[$document->type]['mime'],
 | |
|                 'Content-Length'      => $document->size,
 | |
|             ];
 | |
| 
 | |
|             $response = Response::stream(function() use ($stream) {
 | |
|                 fpassthru($stream);
 | |
|             }, 200, $headers);
 | |
|         }
 | |
|         else{
 | |
|             $response = Response::make($document->getRaw(), 200);
 | |
|             $response->header('content-type', Document::$types[$document->type]['mime']);
 | |
|         }
 | |
|             
 | |
|         return $response;
 | |
|     }
 | |
|     
 | |
|     public function getPreview($publicId)
 | |
|     {
 | |
|         $document = Document::scope($publicId)
 | |
|                         ->firstOrFail();
 | |
|         
 | |
|         if(!$this->checkViewPermission($document, $response)){
 | |
|             return $response;
 | |
|         }
 | |
|         
 | |
|         if(empty($document->preview)){
 | |
|             return Response::view('error', array('error'=>'Preview does not exist!'), 404);
 | |
|         }
 | |
|         
 | |
|         $direct_url = $document->getDirectPreviewUrl();
 | |
|         if($direct_url){
 | |
|             return redirect($direct_url);
 | |
|         }
 | |
|         
 | |
|         $previewType = pathinfo($document->preview, PATHINFO_EXTENSION);
 | |
|         $response = Response::make($document->getRawPreview(), 200);
 | |
|         $response->header('content-type', Document::$types[$previewType]['mime']);
 | |
|         
 | |
|         return $response;
 | |
|     }
 | |
|     
 | |
|     public function getVFSJS($publicId, $name){
 | |
|         $document = Document::scope($publicId)
 | |
|                         ->firstOrFail();
 | |
|         
 | |
|         if(substr($name, -3)=='.js'){
 | |
|             $name = substr($name, 0, -3);
 | |
|         }
 | |
|         
 | |
|         if(!$this->checkViewPermission($document, $response)){
 | |
|             return $response;
 | |
|         }
 | |
|         
 | |
|         if(!$document->isPDFEmbeddable()){
 | |
|             return Response::view('error', array('error'=>'Image does not exist!'), 404);
 | |
|         }
 | |
|         
 | |
|         $content = $document->preview?$document->getRawPreview():$document->getRaw();
 | |
|         $content = 'ninjaAddVFSDoc('.json_encode(intval($publicId).'/'.strval($name)).',"'.base64_encode($content).'")';
 | |
|         $response = Response::make($content, 200);
 | |
|         $response->header('content-type', 'text/javascript');
 | |
|         $response->header('cache-control', 'max-age=31536000');
 | |
|         
 | |
|         return $response;
 | |
|     }
 | |
|     
 | |
|     public function postUpload()
 | |
|     {
 | |
|         if (!Utils::isPro()) {
 | |
|             return;
 | |
|         }
 | |
|         
 | |
|         if(!$this->checkCreatePermission($response)){
 | |
|             return $response;
 | |
|         }
 | |
|                 
 | |
|         $result = $this->documentRepo->upload(Input::all()['file'], $doc_array);
 | |
|                 
 | |
|         if(is_string($result)){
 | |
|              return Response::json([
 | |
|                 'error' => $result,
 | |
|                 'code'  => 400
 | |
|             ], 400);
 | |
|         } else {
 | |
|              return Response::json([
 | |
|                 'error' => false,
 | |
|                 'document' => $doc_array,
 | |
|                 'code'  => 200
 | |
|             ], 200);
 | |
|         }
 | |
|     }
 | |
| }
 |