| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| declare(strict_types=1); |
|
|
| namespace Piwik\Tracker; |
|
|
| use Piwik\Container\StaticContainer; |
| use Piwik\Date; |
| use Piwik\Exception\UnexpectedWebsiteFoundException; |
| use Piwik\Plugins\UserCountry\Columns\Base; |
|
|
| trait RequestHandlerTrait |
| { |
| protected $fieldsThatRequireAuth = [ |
| 'city', |
| 'region', |
| 'country', |
| 'lat', |
| 'long', |
| ]; |
|
|
| protected function checkSiteExists(Request $request): void |
| { |
| try { |
| $request->getIdSite(); |
| } catch (UnexpectedWebsiteFoundException $e) { |
| $idSite = $request->getRawParams()['idsite'] ?? null; |
| if (is_numeric($idSite) && (string)(int)$idSite === (string)$idSite && (int)$idSite >= 0) { |
| |
| StaticContainer::get(Failures::class)->logFailure(Failures::FAILURE_ID_INVALID_SITE, $request); |
| } |
|
|
| throw $e; |
| } |
| } |
|
|
| protected function validateRequest(Request $request): void |
| { |
| |
| foreach ($this->fieldsThatRequireAuth as $field) { |
| Base::getValueFromUrlParamsIfAllowed($field, $request); |
| } |
|
|
| |
| $request->getCurrentTimestamp(); |
| } |
|
|
| protected function markArchivedReportsAsInvalidIfArchiveAlreadyFinished(Request $request): void |
| { |
| $idSite = (int)$request->getIdSite(); |
| $time = $request->getCurrentTimestamp(); |
|
|
| $timezone = $this->getTimezoneForSite($idSite); |
|
|
| if (!isset($timezone)) { |
| return; |
| } |
|
|
| $date = Date::factory((int)$time, $timezone); |
|
|
| |
| $startOfToday = Date::factoryInTimezone('yesterday', $timezone)->addDay(1); |
| $isLaterThanYesterday = $date->getTimestamp() >= $startOfToday->getTimestamp(); |
| if ($isLaterThanYesterday) { |
| return; |
| } |
|
|
| StaticContainer::get('Piwik\Archive\ArchiveInvalidator')->rememberToInvalidateArchivedReportsLater($idSite, $date); |
| } |
|
|
| private function getTimezoneForSite(int $idSite): ?string |
| { |
| try { |
| $site = Cache::getCacheWebsiteAttributes($idSite); |
| } catch (UnexpectedWebsiteFoundException $e) { |
| return null; |
| } |
|
|
| if (!empty($site['timezone'])) { |
| return $site['timezone']; |
| } |
|
|
| return null; |
| } |
| } |
|
|