Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@googlemail.com>2014-12-04 05:04:02 +0300
committerThomas Steur <thomas.steur@googlemail.com>2014-12-04 05:04:02 +0300
commit9d71fc8e92e5b434fd69c7ab4b83a69169064cf3 (patch)
tree8cb2798746e4defb1a978cd758df72006ec419ae /core/Tracker/Handler.php
parent784b738f9c4a92c42a9d8e6b85c28a82a3af0a2f (diff)
Tracker refactoring
Diffstat (limited to 'core/Tracker/Handler.php')
-rw-r--r--core/Tracker/Handler.php118
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);
+ }
+ }
+
+}