diff options
author | Thomas Steur <thomas.steur@googlemail.com> | 2014-12-04 05:04:02 +0300 |
---|---|---|
committer | Thomas Steur <thomas.steur@googlemail.com> | 2014-12-04 05:04:02 +0300 |
commit | 9d71fc8e92e5b434fd69c7ab4b83a69169064cf3 (patch) | |
tree | 8cb2798746e4defb1a978cd758df72006ec419ae /core/Tracker/Handler.php | |
parent | 784b738f9c4a92c42a9d8e6b85c28a82a3af0a2f (diff) |
Tracker refactoring
Diffstat (limited to 'core/Tracker/Handler.php')
-rw-r--r-- | core/Tracker/Handler.php | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/core/Tracker/Handler.php b/core/Tracker/Handler.php new file mode 100644 index 0000000000..3970b910d1 --- /dev/null +++ b/core/Tracker/Handler.php @@ -0,0 +1,118 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Tracker; + +use Piwik\Common; +use Piwik\Exception\InvalidRequestParameterException; +use Piwik\Exception\UnexpectedWebsiteFoundException; +use Piwik\Tracker; +use Exception; +use Piwik\Url; + +class Handler +{ + /** + * @var Response + */ + private $response; + + /** + * @var ScheduledTasksRunner + */ + private $tasksRunner; + + public function __construct() + { + $this->setResponse(new Response()); + } + + public function setResponse($response) + { + $this->response = $response; + } + + public function init(Tracker $tracker, RequestSet $requestSet) + { + $this->response->init($tracker); + } + + public function process(Tracker $tracker, RequestSet $requestSet) + { + foreach ($requestSet->getRequests() as $request) { + $tracker->trackRequest($request); + } + } + + public function onStartTrackRequests(Tracker $tracker, RequestSet $requestSet) + { + } + + public function onAllRequestsTracked(Tracker $tracker, RequestSet $requestSet) + { + $tasks = $this->getScheduledTasksRunner(); + if ($tasks->shouldRun($tracker)) { + $tasks->runScheduledTasks(); + } + } + + private function getScheduledTasksRunner() + { + if (is_null($this->tasksRunner)) { + $this->tasksRunner = new ScheduledTasksRunner(); + } + + return $this->tasksRunner; + } + + /** + * @internal + */ + public function setScheduledTasksRunner(ScheduledTasksRunner $runner) + { + $this->tasksRunner = $runner; + } + + public function onException(Tracker $tracker, RequestSet $requestSet, Exception $e) + { + Common::printDebug("Exception: " . $e->getMessage()); + + $statusCode = 500; + if ($e instanceof UnexpectedWebsiteFoundException) { + $statusCode = 400; + } elseif ($e instanceof InvalidRequestParameterException) { + $statusCode = 400; + } + + $this->response->outputException($tracker, $e, $statusCode); + $this->redirectIfNeeded($requestSet); + } + + public function finish(Tracker $tracker, RequestSet $requestSet) + { + $this->response->outputResponse($tracker); + $this->redirectIfNeeded($requestSet); + return $this->response->getOutput(); + } + + public function getResponse() + { + return $this->response; + } + + protected function redirectIfNeeded(RequestSet $requestSet) + { + $redirectUrl = $requestSet->shouldPerformRedirectToUrl(); + + if (!empty($redirectUrl)) { + Url::redirectToUrl($redirectUrl); + } + } + +} |