1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\BulkTracking\Tracker;
use Exception;
use Piwik\Common;
use Piwik\Tracker;
class Response extends Tracker\Response
{
/**
* @var int[]
*/
private $invalidRequests = array();
/**
* @var bool
*/
private $isAuthenticated = false;
/**
* @var bool
*/
private $shouldSendResponse = true;
/**
* Echos an error message & other information, then exits.
*
* @param Tracker $tracker
* @param Exception $e
* @param int $statusCode eg 500
*/
public function outputException(Tracker $tracker, Exception $e, $statusCode)
{
Common::sendResponseCode($statusCode);
$this->logExceptionToErrorLog($e);
$result = $this->formatException($tracker, $e);
echo json_encode($result);
}
public function outputResponse(Tracker $tracker)
{
if ($this->hasAlreadyPrintedOutput()) {
return;
}
if (!$this->shouldSendResponse()) {
Common::sendResponseCode(204);
return;
}
$result = $this->formatResponse($tracker);
echo json_encode($result);
}
public function getOutput()
{
Common::sendHeader('Content-Type: application/json');
return parent::getOutput();
}
private function formatException(Tracker $tracker, Exception $e)
{
// when doing bulk tracking we return JSON so the caller will know how many succeeded
$result = array(
'status' => 'error',
'tracked' => $tracker->getCountOfLoggedRequests(),
'invalid' => count($this->invalidRequests),
);
$this->addInvalidIndicesIfAuthenticated($result);
// send error when in debug mode
if ($tracker->isDebugModeEnabled()) {
$result['message'] = $this->getMessageFromException($e);
}
return $result;
}
private function formatResponse(Tracker $tracker)
{
$result = array(
'status' => 'success',
'tracked' => $tracker->getCountOfLoggedRequests(),
'invalid' => count($this->invalidRequests),
);
$this->addInvalidIndicesIfAuthenticated($result);
return $result;
}
public function setShouldSendResponse(bool $shouldSendResponse)
{
$this->shouldSendResponse = $shouldSendResponse;
}
public function shouldSendResponse(): bool
{
return $this->shouldSendResponse;
}
public function setInvalidRequests($invalidRequests)
{
$this->invalidRequests = $invalidRequests;
}
public function setIsAuthenticated($isAuthenticated)
{
$this->isAuthenticated = $isAuthenticated;
}
private function addInvalidIndicesIfAuthenticated(&$result)
{
if ($this->isAuthenticated) {
$result['invalid_indices'] = $this->invalidRequests;
}
}
}
|