public function checkCompatibility($visitorId, Pap_Tracking_Visit_VisitorAffiliateCache $cache) {
        $rows = $cache->getVisitorAffiliateAllRows($visitorId);

        if ($this->isVisitorAffiliatesCollectionValid($rows)) {
            return;
        }

        if ($rows->getSize() == 1) {
            $rows->get(0)->setActual();
            return;
        }

        Pap_Tracking_Visit_VisitorAffiliateCache::sortVisitorAffiliatesByDateVisit($rows);

        $rows->correctIndexes();

        for ($i=1, $size = $rows->getSize();$i<$size-1;$i++) {
            $cache->removeVisitorAffiliate($rows->get($i)->getId());
            $rows->remove($i);
        }

        $rows->correctIndexes();

        $campaign = $this->getCampaignById($rows->get(1)->getCampaignId());
        $user = $this->getUserById($rows->get(1)->getUserId());

        if ($this->cookieObject->isOverwriteEnabled($campaign, $user)) {
            $rows->get(1)->setActual();
        } else {
            $rows->get(0)->setActual();
        }
    }
    public function recognize(Pap_Contexts_Tracking $context) {
        if ($context->isVisitorAffiliateRecognized()) {
            return;
        }

        Pap_Tracking_Common_VisitorAffiliateCheckCompatibility::getHandlerInstance()->checkCompatibility($context->getVisitorId(), $this->visitorAffiliateCache);
        
        $context->debug('Getting VisitorAffiliate for visitorId = ' . $context->getVisitorId());
        if (($visitorAffiliate = $this->visitorAffiliateCache->getActualVisitorAffiliate($context->getVisitorId())) == null) {
            $context->debug('Recognize VisitorAffiliate not recognized from actual');
            return;
        }
        
        $context->debug('Recognize VisitorAffiliate recognized from actual, id: '.$visitorAffiliate->getId(). ', accountId: '. $visitorAffiliate->getAccountId());
        $context->setVisitorAffiliate($visitorAffiliate);
    }
コード例 #3
0
 private function createContext(Pap_Db_Visit $visit) {
     $context = new Pap_Contexts_Click();
     $context->setDoTrackerSave(true);
     $context->setVisit($visit);
     $context->setVisitorId($visit->getVisitorId());
     $context->setDateCreated($visit->getDateVisit());
     $this->accountRecognizer->recognize($context);
     $this->visitorAffiliateCache->setAccountId($context->getAccountId());
     return $context;
 }
コード例 #4
0
    public function recognize(Pap_Contexts_Action $context) {
        if ($context->isVisitorAffiliateRecognized()) {
            return;
        }
        
        if(Gpf_Settings::get(Pap_Settings::TRACK_BY_IP_SETTING_NAME) != Gpf::YES) {
            return;
        }
        
        $ip = $context->getIp();
        $context->debug('Trying to get visitor affiliate from IP address '. $ip);

        $visitorAffiliate = $this->visitorAffiliateCache->getLatestVisitorAffiliateFromIp($ip, $context->getAccountId());
        if ($visitorAffiliate == null) {
            $context->debug("No visitor affiliate from IP '$ip'");
            return;
        }
        
        try {
            $periodInSeconds = $this->getValidityInSeconds();
        } catch (Gpf_Exception $e) {
            $context->debug($e->getMessage());
            return;
        }
        
        
        $dateFrom = new Gpf_DateTime($context->getVisitDateTime());
        $dateFrom->addSecond(-1*$periodInSeconds);
        $dateVisit = new Gpf_DateTime($visitorAffiliate->getDateVisit());

        if ($dateFrom->compare($dateVisit) > 0) {
            $context->debug("    No click from IP '$ip' found within ip validity period");
            return null;
        }

        if (!$context->isTrackingMethodSet()) {
            $context->setTrackingMethod(Pap_Common_Transaction::TRACKING_METHOD_IP_ADDRESS);
        }
        $context->debug('Visitor affiliate recognized from IP, id: '.$visitorAffiliate->getId(). ', accountId: '. $visitorAffiliate->getAccountId());
        $context->setVisitorAffiliate($visitorAffiliate);
    }
コード例 #5
0
 protected function createVisitorAffiliate(Pap_Tracking_Cookie_ClickData $clickCookie, Pap_Db_Visit $visit) {
     $visitorAffiliate = $this->visitorAffiliateCache->createVisitorAffiliate($visit->getVisitorId());
     $visitorAffiliate->setBannerId($clickCookie->getBannerId());
     try {
         $click = $clickCookie->getClick();
         $visitorAffiliate->setUserId($click->getUserId());
         $visitorAffiliate->setCampaignId($click->getCampaignId());
     } catch (Gpf_Exception $e) {
     }
     $visitorAffiliate->setChannelId($clickCookie->getChannelId());
     $visitorAffiliate->setIp($this->getIp($clickCookie, $visit));
     $visitorAffiliate->setDateVisit($this->getDateVisit($clickCookie));
     $visitorAffiliate->setReferrerUrl($this->getReferrerUrl($clickCookie, $visit));
     $visitorAffiliate->setData1($clickCookie->getData1());
     $visitorAffiliate->setData2($clickCookie->getData2());
     $this->setVisitorAffiliateValidity($visitorAffiliate);
     return $visitorAffiliate;
 }
コード例 #6
0
 protected function onCampaignRecognized(Pap_Common_Campaign $campaign, Pap_Contexts_Tracking $context) {
     parent::onCampaignRecognized($campaign, $context);
     $this->visitorAffiliateCache->setAccountId($context->getAccountId());
 }
コード例 #7
0
 protected function createAndPrepareVisitorAffiliate(Pap_Contexts_Tracking $context) {
     $visitorAffiliate = $this->visitorAffiliateCache->createVisitorAffiliate($context->getVisitorId());
     $this->prepareVisitorAffiliate($visitorAffiliate, $context);
     return $visitorAffiliate;
 }
コード例 #8
0
    private function getVisitorAffiliate(Pap_Db_VisitorAffiliate $firstClickVisitorAffiliate,
    Pap_Db_VisitorAffiliate $oldVisitorAffiliate = null, Pap_Tracking_Visit_VisitorAffiliateCache $cache,
    Pap_Contexts_Tracking $context) {

        if ($firstClickVisitorAffiliate->getDateVisit() > $context->getDateCreated()) {
            return $firstClickVisitorAffiliate;
        }

        if ($oldVisitorAffiliate == null) {
            $visitorAffiliate = $cache->createVisitorAffiliate($context->getVisitorId());
            $visitorAffiliate->setDateVisit($context->getDateCreated());
            return $visitorAffiliate;
        }

        if ($oldVisitorAffiliate->getDateVisit() < $context->getDateCreated()) {
            return $oldVisitorAffiliate;
        }

        return null;
    }
コード例 #9
0
 /**
  * @throws Gpf_Exception
  * @return Pap_Tracking_Common_VisitorAffiliateCollection
  */
 protected function getVisitorAffiliatesCollection(Pap_Contexts_Action $context) {
     return $this->visitorAffiliateCache->getVisitorAffiliateAllRows($context->getVisitorAffiliate()->getVisitorId());
 }
コード例 #10
0
 protected function saveVisitChanges() {
     foreach ($this->visitProcessors as $visitHandler) {
         $visitHandler->saveChanges();
     }
     $this->visitorAffiliateCache->saveChanges();
 }
コード例 #11
0
    public function saveCommissions(Pap_Common_ActionProcessorCompoundContext $actionProcessorCompoundContext) {
        $context = $actionProcessorCompoundContext->getContext();
        $cache = $actionProcessorCompoundContext->getActionProcessor()->getVisitorAffiliatesCache();

        $context->debug('SplitCommissions save started');

        $commType = $this->getCommissionType($context);

        if ($context->getTrackingMethod() == Pap_Common_Transaction::TRACKING_METHOD_DEFAULT_AFFILIATE) {
            $context->debug('SplitCommissions - default affiliate. STOPPED');
            return;
        }

        if ($context->getTrackingMethod() == Pap_Common_Transaction::TRACKING_METHOD_FORCED_PARAMETER) {
            $context->debug('SplitCommissions - forced parameter. STOPPED');
            return;
        }

        if ($context->getTrackingMethod() == Pap_Common_Transaction::TRACKING_METHOD_COUPON) {
            $context->debug('SplitCommissions - coupon. STOPPED');
            return;
        }

        $this->saleId = Gpf_Common_String::generateId();

        $firstAffBonus = $this->loadCommissionTypeAttributeValue($commType->getId(), Pap_Features_SplitCommissions_SplitCommissionsForm::FIRST_AFF_BONUS);
        $lastAffBonus = $this->loadCommissionTypeAttributeValue($commType->getId(), Pap_Features_SplitCommissions_SplitCommissionsForm::LAST_AFF_BONUS);
        $this->minCommission = $this->loadCommissionTypeAttributeValue($commType->getId(), Pap_Features_SplitCommissions_SplitCommissionsForm::MIN_COMMISSION);

        Pap_Features_SplitCommissions_VisitorAffiliateCheckCompatibility::getHandlerInstance()->checkCompatibility($context->getVisitorId(), $cache);

        $visitorAffiliates = $cache->getVisitorAffiliateAllRows($context->getVisitorId());

        Pap_Tracking_Visit_VisitorAffiliateCache::sortVisitorAffiliatesByDateVisit($visitorAffiliates);

        $this->setSplitCommissions($this->getSplitCommissions($firstAffBonus, $lastAffBonus, $visitorAffiliates));

        $this->visitorAffiliateCollection = $visitorAffiliates;

        $this->processVisitorAffiliates($visitorAffiliates, $actionProcessorCompoundContext);

        $context->debug('SplitCommissions save finished');
        $actionProcessorCompoundContext->setCommissionsAlreadySaved(true);
    }
    private function checkTwoVisitorAffiliateAreSameAndRemove($index1, $index2, Pap_Tracking_Common_VisitorAffiliateCollection $rows,
    Pap_Db_VisitorAffiliate $firstClickVisitorAffiliate, Pap_Tracking_Visit_VisitorAffiliateCache $cache) {
        if ($rows->getValid($index1)->getUserId() != $rows->getValid($index2)->getUserId()) {
            return false;
        }

        if ($rows->getValid($index1)->getUserId() == $firstClickVisitorAffiliate->getUserId()) {
            return false;
        }

        $cache->removeVisitorAffiliate($rows->getValid($index2)->getId());
        $rows->remove($index2);
        $rows->correctIndexes();
        
        $this->cloneVisitorAffiliate($firstClickVisitorAffiliate, $rows, false);
        return true;
    }