@vvPx91ubk@{{Т0 0x`@0s0uPs@vvPx,1`k@{{Т0 0x`@0s0uPs@vvPx1#`k@{{Т0 0x`@0s0uPs@vvPx@ 1`k@{{Т0 0x`@0s0uPs@vvPx0 `k@{{Т0 0x`@0s0uPs@vvPx00`k@{{Т0 0x`@0s0uPs@vvPx@0_k@{{Т0 0x`@0s0uPs@vvPx0@4ck@{{Т0 0x`@0s0uPs@vvPx 0tbk@{{Т0 0x`@0s0uPs@vvPxP0_k@{{Т0 0x`@0s0uPs@vvPx0p_k@{{Т0 0x`@0s0uPs@vvPx00p_k@{{Т0 0x`@0s0uPs@vvPxn0_k@{{Т0 0x`@0s0uPs@vvPxH0_k@{{Т0 0x`@0s0uPs@vvPx>0bk@{{Т0 0x`@0s0uPs@vvPx+0_k@{{Т0 0x`@0s0uPs@vvPxP"0_k@{{Т0 0x`@0s0uPs@vvPx0_k@{{Т0 0x`@0s0uPs@vvPx@/ FROM tkampagne LEFT JOIN tkampagnevorgang ON tkampagnevorgang.kKampagne = tkampagne.kKampagne WHERE tkampagne.kKampagne = :cid AND tkampagne.nInternal = 0', ['cid' => $this->kKampagne] ); return true; } /** * @return stdClass[] */ public static function getAvailable(): array { $cacheID = 'campaigns'; /** @var stdClass[]|false $campaigns */ $campaigns = Shop::Container()->getCache()->get($cacheID); if ($campaigns !== false) { return $campaigns; } $campaigns = Shop::Container()->getDB()->selectAll( 'tkampagne', 'nAktiv', 1, '*, DATE_FORMAT(dErstellt, \'%d.%m.%Y %H:%i:%s\') AS dErstellt_DE' ); foreach ($campaigns as $campaign) { $campaign->kKampagne = (int)$campaign->kKampagne; $campaign->nDynamisch = (int)$campaign->nDynamisch; $campaign->nAktiv = (int)$campaign->nAktiv; $campaign->nInternal = (int)$campaign->nInternal; } Shop::Container()->getCache()->set($cacheID, $campaigns, [\CACHING_GROUP_CORE]); return $campaigns; } /** * @param stdClass $campaign * @return bool */ private static function validateStaticParams(stdClass $campaign): bool { $full = Shop::getURL() . '/?' . $campaign->cParameter . '=' . $campaign->cWert; \parse_str(\parse_url($full, \PHP_URL_QUERY) ?: '', $params); $ok = \count($params) > 0; foreach ($params as $param => $value) { if (!self::paramMatches(Request::verifyGPDataString($param), $value)) { $ok = false; break; } } return $ok; } /** * @param string $given * @param string $campaignValue * @return bool */ private static function paramMatches(string $given, string $campaignValue): bool { return \mb_convert_case($campaignValue, \MB_CASE_LOWER) === \mb_convert_case($given, \MB_CASE_LOWER); } /** * @former pruefeKampagnenParameter() */ public static function checkCampaignParameters(): void { $visitorID = Frontend::get('oBesucher')->kBesucher ?? 0; if ($visitorID <= 0) { return; } $campaigns = self::getAvailable(); if (\count($campaigns) === 0) { return; } $db = Shop::Container()->getDB(); $hit = false; $referrer = Visitor::getReferer(); foreach ($campaigns as $campaign) { // Wurde für die aktuelle Kampagne der Parameter via GET oder POST uebergeben? $given = Request::verifyGPDataString($campaign->cParameter); if ($given !== '' && ($campaign->nDynamisch === 1 || self::validateStaticParams($campaign))) { $hit = true; // wurde der HIT für diesen Besucher schon gezaehlt? $event = $db->select( 'tkampagnevorgang', ['kKampagneDef', 'kKampagne', 'kKey', 'cCustomData'], [ \KAMPAGNE_DEF_HIT, $campaign->kKampagne, $visitorID, Text::filterXSS($_SERVER['REQUEST_URI']) . ';' . $referrer ] ); if ($event === null) { $event = new stdClass(); $event->kKampagne = $campaign->kKampagne; $event->kKampagneDef = \KAMPAGNE_DEF_HIT; $event->kKey = $visitorID; $event->fWert = 1.0; $event->cParamWert = $given; $event->cCustomData = Text::filterXSS($_SERVER['REQUEST_URI']) . ';' . $referrer; if ($campaign->nDynamisch === 0) { $event->cParamWert = $campaign->cWert; } $event->dErstellt = 'NOW()'; $db->insert('tkampagnevorgang', $event); $_SESSION['Kampagnenbesucher'][$campaign->kKampagne] = $campaign; $_SESSION['Kampagnenbesucher'][$campaign->kKampagne]->cWert = $event->cParamWert; } } if (!$hit && \str_contains($_SERVER['HTTP_REFERER'] ?? '', '.google.')) { // Besucher kommt von Google und hat vorher keine Kampagne getroffen $event = $db->select( 'tkampagnevorgang', ['kKampagneDef', 'kKampagne', 'kKey'], [\KAMPAGNE_DEF_HIT, \KAMPAGNE_INTERN_GOOGLE, $visitorID] ); if ($event === null) { $campaign = new self(\KAMPAGNE_INTERN_GOOGLE, $db); $event = new stdClass(); $event->kKampagne = \KAMPAGNE_INTERN_GOOGLE; $event->kKampagneDef = \KAMPAGNE_DEF_HIT; $event->kKey = $visitorID; $event->fWert = 1.0; $event->cParamWert = $campaign->cWert; $event->dErstellt = 'NOW()'; if ($campaign->nDynamisch === 1) { $event->cParamWert = $given; } $db->insert('tkampagnevorgang', $event); $_SESSION['Kampagnenbesucher'][$campaign->kKampagne] = $campaign; $_SESSION['Kampagnenbesucher'][$campaign->kKampagne]->cWert = $event->cParamWert; } } } } /** * @param int $id * @param int $kKey * @param float|int $value * @param string|null $customData * @return int * @former setzeKampagnenVorgang() */ public static function setCampaignAction(int $id, int $kKey, $value, $customData = null): int { if ($id <= 0 || $kKey <= 0 || $value <= 0 || (($campaigns = Frontend::get('Kampagnenbesucher')) === null)) { return 0; } $events = []; if (!\is_array($campaigns)) { $campaigns = $campaigns instanceof self ? [$campaigns->kKampagne => $campaigns] : []; Frontend::set('Kampagnenbesucher', $campaigns); } foreach ($campaigns as $campaign) { $event = new stdClass(); $event->kKampagne = $campaign->kKampagne; $event->kKampagneDef = $id; $event->kKey = $kKey; $event->fWert = $value; $event->cParamWert = $campaign->cWert; $event->dErstellt = 'NOW()'; if ($customData !== null) { $event->cCustomData = \mb_substr($customData, 0, 255); } $events[] = $event; } return Shop::Container()->getDB()->insertBatch('tkampagnevorgang', $events); } /** * @return string */ public function getName(): string { return $this->cParameter === 'jtl' ? \__($this->cName) : $this->cName; } }