| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace BookStack\Exceptions; | 
					
						
							| 
									
										
										
										
											2016-02-04 04:52:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  | use Exception; | 
					
						
							|  |  |  | use Illuminate\Contracts\Support\Responsable; | 
					
						
							| 
									
										
										
										
											2023-06-14 00:40:37 +08:00
										 |  |  | use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 00:40:37 +08:00
										 |  |  | class PrettyException extends Exception implements Responsable, HttpExceptionInterface | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2023-06-16 00:07:40 +08:00
										 |  |  |     protected ?string $subtitle = null; | 
					
						
							|  |  |  |     protected ?string $details = null; | 
					
						
							| 
									
										
										
										
											2023-06-14 00:40:37 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Render a response for when this exception occurs. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2021-10-27 05:04:18 +08:00
										 |  |  |      * {@inheritdoc} | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function toResponse($request) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-14 00:40:37 +08:00
										 |  |  |         $code = $this->getStatusCode(); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |         return response()->view('errors.' . $code, [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'message'  => $this->getMessage(), | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |             'subtitle' => $this->subtitle, | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'details'  => $this->details, | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |         ], $code); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function setSubtitle(string $subtitle): self | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->subtitle = $subtitle; | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |         return $this; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |     public function setDetails(string $details): self | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->details = $details; | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |         return $this; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-06-14 00:40:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the desired HTTP status code for this exception. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getStatusCode(): int | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return ($this->getCode() === 0) ? 500 : $this->getCode(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the desired HTTP headers for this exception. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getHeaders(): array | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-16 00:07:40 +08:00
										 |  |  |         return []; | 
					
						
							| 
									
										
										
										
											2023-06-14 00:40:37 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  | } |