:uFĖT8pOĖTP{OĖT>uFĖT8pOĖT(oOĖTAuFĖTP{OĖTCuFĖTˆpOĖTP{OĖTHuFĖTˆpOĖT(oOĖTLuFĖTP{OĖTOuFĖTØpOĖTP{OĖTTuFĖTØpOĖT(oOĖTXuFĖTP{OĖT[uFĖT(qOĖTP{OĖT`uFĖT(qOĖT(oOĖTduFĖTP{OĖTguFĖTxqOĖTP{OĖTluFĖTxqOĖT(oOĖTpuFĖTP{OĖTxuFĖTČqOĖTP{OĖT€uFĖTČqOĖT(oOĖT‡uFĖTP{OĖTuFĖTrOĖTP{OĖT˜uFĖTrOĖT(oOĖTŸuFĖTP{OĖT¨uFĖThrOĖTP{OĖT¸uFĖThrOĖT(oOĖTĀuFĖTP{OĖTČuFĖT¸rOĖTP{OĖTĐuFĖT¸rOĖT(oOĖT×uFĖTP{OĖTāuFĖTsOĖTP{OĖTčuFĖTsOĖT(oOĖTīuFĖTP{OĖTøuFĖTXsOĖTP{OĖTvFĖTXsOĖT(oOĖTvFĖTP{OĖTvFĖT¨sOĖTP{OĖTvFĖT¨sOĖT(oOĖTvFĖTP{OĖT%vFĖTøsOĖTP{OĖT)vFĖTøsOĖT(oOĖT,vFĖTP{OĖT.vFĖTHtOĖTP{OĖT2vFĖTHtOĖT(oOĖT5vFĖTP{OĖT7vFĖT˜tOĖTP{OĖT;vFĖT˜tOĖT(oOĖT>vFĖTP{OĖT@vFĖTčtOĖTP{OĖTDvFĖTčtOĖT(oOĖTGvFĖTP{OĖTIvFĖT8uOĖTP{OĖTMvFĖT8uOĖT(oOĖTPvFĖTP{OĖTRvFĖTˆuOĖTP{OĖTVvFĖTˆuOĖT(oOĖTYvFĖTP{OĖT[vFĖTØuOĖTP{OĖT_vFĖTØuOĖT(oOĖTbvFĖTP{OĖTdvFĖT(vOĖTP{OĖThvFĖT(vOĖT(oOĖTkvFĖTP{OĖTmvFĖTxvOĖTP{OĖTqvFĖTxvOĖT(oOĖTtvFĖTP{OĖTvvFĖTČvOĖTP{OĖTzvFĖTČvOĖT(oOĖT}vFĖTP{OĖTvFĖTwOĖTP{OĖTƒvFĖTwOĖT(oOĖT†vFĖTP{OĖTˆvFĖThwOĖTP{OĖTŒvFĖThwOĖT(oOĖTvFĖTP{OĖT‘vFĖT¸wOĖTP{OĖT•vFĖT¸wOĖT(oOĖT˜vFĖTP{OĖTšvFĖTxOĖTP{OĖTžvFĖTxOĖT(oOĖTĄvFĖTP{OĖTŖvFĖTXxOĖTP{OĖT¨vFĖTXxOĖT(oOĖTŦvFĖTP{OĖT¯vFĖT¨xOĖTP{OĖT´vFĖT¨xOĖT(oOĖT¸vFĖTP{OĖTģvFĖTøxOĖTP{OĖTĀvFĖTøxOĖT(oOĖTÄvFĖTP{OĖTĮvFĖTHyOĖTP{OĖTËvFĖTHyOĖT(oOĖTÎvFĖTP{OĖTĐvFĖT˜yOĖTP{OĖTÔvFĖT˜yOĖT(oOĖT×vFĖTP{OĖTŲvFĖTčyOĖTP{OĖTŨvFĖTčyOĖT(oOĖTāvFĖT°{OĖTwFĖT¸mOĖTøyOĖT°§5ĖTЧ5ĖTP”5ĖTđlOĖT0wFĖT8zOĖTŠ5ĖT0Š5ĖT°{OĖT`wFĖTø{OĖThzOĖT@Ģ5ĖT`Ģ5ĖTp˛5ĖTp˛5ĖT€Ģ5ĖT€˛5ĖT Ģ5ĖT°{OĖT wFĖThzOĖTČzOĖTā­5ĖTŽ5ĖTp˛5ĖTp˛5ĖT€Ģ5ĖT€˛5ĖT Ž5ĖT°{OĖTāwFĖThzOĖT({OĖT°Ž5ĖTĐŽ5ĖT Ž5ĖTp˛5ĖT€Ģ5ĖT€˛5ĖTđŽ5ĖT°{OĖT@xFĖTČlOĖTˆ{OĖTā¯5ĖT°5ĖTp˛5ĖTp˛5ĖT@‹5ĖT Š5ĖT˛5ĖT °5ĖT€ą5ĖTđlOĖThxFĖTø{OĖT`˛5ĖT˛5ĖTp˛5ĖTp˛5ĖT°˛5ĖT€˛5ĖT°{OĖT€xFĖTČlOĖTH|OĖTˇ5ĖT0ˇ5ĖTp˛5ĖTp˛5ĖT@‹5ĖT Š5ĖTŋ5ĖTP¸5ĖTPˇ5ĖT°{OĖT0†FĖTPĘOĖT°{OĖTP†FĖTČŪOĖT¸|OĖTPƒ6ĖT ƒ6ĖTЂ6ĖTđ‚6ĖTЂ6ĖTƒ6ĖTƒ6ĖT ƒ6ĖTƒ6ĖTĐ|OĖTЃ6ĖT „6ĖT 7ĖTđ‚6ĖT°’7ĖT€”7ĖT@ƒ6ĖTđ”7ĖTĀ”7ĖT°{OĖTFĖT¸mOĖT˜}OĖT€ĩ6ĖTļ6ĖTpĩ6ĖTđlOĖT°FĖTØ}OĖT É6ĖT°É6ĖTˆXPĖTXWPĖT`XPĖT@WPĖTpXPĖTPWPĖT¨XPĖTxWPĖT XPĖTpWPĖT˜XPĖThWPĖTXPĖT`WPĖThXPĖTHWPĖTHYPĖTØWPĖT YPĖTĀWPĖT0YPĖTĐWPĖThYPĖTøWPĖT`YPĖTđWPĖTXYPĖTčWPĖTPYPĖTāWPĖT(YPĖTČWPĖT €OĖT`€OĖT@€OĖT€OĖT OĖT€OĖTHWPĖTČWPĖTxWPĖTpWPĖThWPĖT`WPĖTøWPĖTđWPĖTčWPĖTāWPĖT 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; } }