| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| declare(strict_types=1); |
|
|
| namespace Piwik\Plugins\BotTracking; |
|
|
| use Piwik\Date; |
| use Piwik\Period; |
| use Piwik\Site; |
| use Piwik\Plugins\BotTracking\BotDetector; |
| use Piwik\Plugins\BotTracking\Dao\BotRequestsDao; |
|
|
| class NoRecentRequestsMessage |
| { |
| public static function shouldShow(int $idSite, string $period, string $date): bool |
| { |
| if ($idSite <= 0 || $period === '' || $date === '') { |
| return false; |
| } |
|
|
| try { |
| $selected = Period\Factory::build($period, $date); |
| } catch (\Exception $e) { |
| return false; |
| } |
|
|
| $siteTimezone = Site::getTimezoneFor($idSite); |
| $todayLocal = Date::factoryInTimezone('today', $siteTimezone) |
| ->setTimezone($siteTimezone); |
|
|
| $last7Start = $todayLocal->subDay(6); |
| $last7End = $todayLocal->getEndOfDay(); |
| $selectedStart = $selected->getDateStart()->setTimezone($siteTimezone); |
| $selectedEnd = $selected->getDateEnd()->getEndOfDay()->setTimezone($siteTimezone); |
|
|
| $overlapsLast7 = !$selectedEnd->isEarlier($last7Start) |
| && !$selectedStart->isLater($last7End); |
|
|
| if (!$overlapsLast7) { |
| return false; |
| } |
|
|
| |
| $lastRequest = (new BotRequestsDao())->getLastServerTimeForSiteAndBotType( |
| $idSite, |
| BotDetector::BOT_TYPE_AI_CHATBOT |
| ); |
|
|
| if (empty($lastRequest)) { |
| return true; |
| } |
|
|
| |
| return Date::factory($lastRequest)->isEarlier($last7Start); |
| } |
| } |
|
|