ExceptionHandler.php 2.42 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<?php
/*
	Question2Answer by Gideon Greenspan and contributors
	http://www.question2answer.org/

	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	More about this license: http://www.question2answer.org/license.php
*/

namespace Q2A\Exceptions;

use Exception;
22
use Q2A\Http\Exceptions\MethodNotAllowedException;
Scott committed
23
use Q2A\Http\Exceptions\PageNotFoundException;
24 25 26 27 28

class ExceptionHandler
{
	public function __construct()
	{
29
		require_once QA_INCLUDE_DIR . 'app/format.php';
30 31 32 33 34 35 36 37
	}

	public function handle(Exception $exception)
	{
		if ($exception instanceof FatalErrorException) {
			$this->handleFatalErrorException($exception);
		} elseif ($exception instanceof PageNotFoundException) {
			return $this->handlePageNotFoundException($exception);
38 39
		} elseif ($exception instanceof MethodNotAllowedException) {
			return $this->handleMethodNotAllowedException($exception);
40 41 42 43 44 45 46 47 48 49 50 51 52 53
		} elseif ($exception instanceof ErrorMessageException) {
			return $this->handleErrorMessageException($exception);
		} else {
			return $this->handleUnknownException($exception);
		}
	}

	private function handleFatalErrorException(FatalErrorException $exception)
	{
		qa_fatal_error($exception->getMessage());
	}

	private function handlePageNotFoundException(PageNotFoundException $exception)
	{
54
		qa_404();
55 56 57 58 59 60 61

		$qa_content = $this->handleErrorMessageException($exception);
		$qa_content['suggest_next'] = qa_html_suggest_qs_tags(qa_using_tags());

		return $qa_content;
	}

62 63
	private function handleMethodNotAllowedException(MethodNotAllowedException $exception)
	{
64
		qa_http_error('405', 'Method Not Allowed');
65 66 67 68 69 70

		$qa_content = $this->handleErrorMessageException($exception);

		return $qa_content;
	}

71 72 73 74 75 76 77 78 79 80 81 82 83
	private function handleErrorMessageException(ErrorMessageException $exception)
	{
		$qa_content = qa_content_prepare();
		$qa_content['error'] = $exception->getMessage();

		return $qa_content;
	}

	private function handleUnknownException(Exception $exception)
	{
		return $this->handleErrorMessageException(new ErrorMessageException($exception->getMessage()));
	}
}