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();
        }
    }
コード例 #2
0
    public function process(Pap_Db_Visit $visit) {
        $visitorId = $visit->getVisitorId();
        $this->logMessage('Backward compatibility processor ('.$visitorId.') - started');

        if (!$visit->isNewVisitor()) {
            $this->logMessage('Not new visitor ('.$visitorId.') - stopped');
            return;
        }

        if ($visit->getCookies() == '') {
            $this->logMessage('Not old cookie ('.$visitorId.') - stopped');
            return;
        }
        
        $this->visitorAffiliateCache->setAccountId(Gpf_Db_Account::DEFAULT_ACCOUNT_ID);
        $visitorAffiliates = $this->visitorAffiliateCache->getVisitorAffiliateAllRows($visitorId);

        $this->loadCookies($visit);

        if ($this->firstClickCookie !== null) {
            $this->logMessage('Processing first click cookie');
            $visitorAffiliates->add($this->createVisitorAffiliate($this->firstClickCookie, $visit));
            $visit->setNewVisitor(false);
        }

        if ($this->lastClickCookie !== null) {
            if ($this->firstClickCookie == null ||
            !$this->lastClickCookie->equals($this->firstClickCookie)) {
                $this->logMessage('Processing last click cookie');
                $visitorAffiliates->add($this->createVisitorAffiliate($this->lastClickCookie, $visit));
                $visit->setNewVisitor(false);
            }
        }

        if ($this->saleCookie !== null) {
            $this->logMessage('Processing sale cookie - creating visitor affiliate');
            $saleVisitorAffiliate = $this->createVisitorAffiliateFromSale($this->saleCookie, $visit);
            $this->addSaleToVisitorAffiliates($saleVisitorAffiliate, $visitorAffiliates);
            $visit->setNewVisitor(false);
        }

        $this->logMessage('Backward compatibility - finished');
    }
    /**
     * Check if visitor affiliates are in SplitCommissions format - if not convert
     */
    public function checkCompatibility($visitorId, Pap_Tracking_Visit_VisitorAffiliateCache $cache) {
        $rows = $cache->getVisitorAffiliateAllRows($visitorId);

        switch ($rows->getValidSize()) {
            case 0:
                break;
            case 1:
                $this->cloneVisitorAffiliate($rows->getValid(0), $rows, true);
                break;
            case 2:
                if ($rows->getValid(0)->getUserId() != $rows->getValid(1)->getUserId()) {
                    if ($rows->getValid(0)->getDateVisit() < $rows->getValid(1)->getDateVisit()) {
                        $this->cloneVisitorAffiliate($rows->getValid(0), $rows, false);
                    } else {
                        $this->cloneVisitorAffiliate($rows->getValid(1), $rows, false);
                    }
                }
                break;
            case 3:

                $firstClickVisitorAffiliate = $this->getFirstClickVisitorAffiliate($rows);

                if ($rows->getValid(0)->getUserId() != $rows->getValid(1)->getUserId() &&
                $rows->getValid(1)->getUserId() != $rows->getValid(2)->getUserId() &&
                $rows->getValid(0)->getUserId() != $rows->getValid(2)->getUserId() ) {
                    $this->cloneVisitorAffiliate($firstClickVisitorAffiliate, $rows);
                    return;
                }

                if ($this->checkTwoVisitorAffiliateAreSameAndRemove(0, 1, $rows, $firstClickVisitorAffiliate, $cache)) {
                    return;
                }

                if ($this->checkTwoVisitorAffiliateAreSameAndRemove(1, 2, $rows, $firstClickVisitorAffiliate, $cache)) {
                    return;
                }

                if ($this->checkTwoVisitorAffiliateAreSameAndRemove(0, 2, $rows, $firstClickVisitorAffiliate, $cache)) {
                    return;
                }
                break;
            default:
                $this->checkIfFirstVisitorAffiliateClickIsThereTwoTimes($rows);
        }

        foreach ($rows as $row) {
            $row->setActual(false);
        }
    }
コード例 #4
0
    public function process(Pap_Contexts_Tracking $context) {
        $context->debug('Preparing for save visitor affiliate');

        $cacheCompoundContex = new Pap_Common_VisitorAffiliateCacheCompoundContext($this->visitorAffiliateCache, $context);
        Gpf_Plugins_Engine::extensionPoint('PostAffiliate.click.beforeSaveVisitorAffiliate', $cacheCompoundContex);

        if ($cacheCompoundContex->getVisitorAffiliateAlreadySaved()) {
            $context->debug('VisitorAffiliate already set by plugins, not saving');
            return;
        }
        
        Pap_Tracking_Common_VisitorAffiliateCheckCompatibility::getHandlerInstance()->checkCompatibility($context->getVisitorId(), $this->visitorAffiliateCache);

        $rows = $this->visitorAffiliateCache->getVisitorAffiliateAllRows($context->getVisitorId());
        
        $context->debug('Found ' . $rows->getSize() . ' records in visitorAffiliates');
        switch ($rows->getSize()) {
            case 0:
                $visitorAffiliate = $this->createAndPrepareVisitorAffiliate($context);
                $visitorAffiliate->setActual(true);
                $rows->add($visitorAffiliate);
                $context->debug('Saving first visitorAffiliate '.$visitorAffiliate->toString());
                break;
            case 1:
                $lastVisit = $this->createAndPrepareVisitorAffiliate($context);
                if ($this->isOverWriteEnabled($context) || !$rows->get(0)->isValid()) {
                    $rows->get(0)->setActual(false);
                    $lastVisit->setActual(true);
                }
                $context->debug('Adding second visitorAffiliate '.$lastVisit->toString());
                $rows->add($lastVisit);
                break;
            case 2:
                if ($this->isOverWriteEnabled($context) || ($rows->get(0)->isActual() && !$rows->get(0)->isValid())) {
                    $rows->get(0)->setActual(false);
                    $this->prepareVisitorAffiliate($rows->get(1), $context);
                    $rows->get(1)->setActual(true);
                    $context->debug('Overwrting second visitor affilite '.$rows->get(1)->toString());
                } else {
                    if ($rows->get(1)->isActual() && $rows->get(1)->isValid()) {
                        $rows->add($this->createAndPrepareVisitorAffiliate($context));
                        $context->debug('Adding third (last) visitor affiliate '.$rows->get(1)->toString());
                    } else {
                        $this->prepareVisitorAffiliate($rows->get(1), $context);
                        $context->debug('Overwriting second visitor affiliate '.$rows->get(1)->toString());
                    }
                }
                break;
            case 3:
                if ($this->isOverWriteEnabled($context) || ($rows->get(1)->isActual() && !$rows->get(1)->isValid())) {
                    for ($i = 1; $i <=2; $i++) {
                        if ($rows->get($i)->isPersistent()) {
                            $rows->get($i)->delete();
                            $context->debug('Deleting '.$i.' visitoraffiliate ' . $rows->get($i)->toString());
                        }
                        $rows->remove($i);
                    }
                    $rows->correctIndexes();
                    $lastVisit = $this->createAndPrepareVisitorAffiliate($context);
                    $lastVisit->setActual(true);
                    $rows->add($lastVisit);
                    $context->debug('Adding third (last) visitor affiliate '.$lastVisit->toString());
                } else {
                    $this->prepareVisitorAffiliate($rows->get(2), $context);
                    $context->debug('Overwriting third (last) visitor affiliate '.$rows->get(2)->toString());
                }
                break;
            default:
                $context->error('Too many rows per visitor in visitor affiliates table');
                break;
        }

        $this->checkActualSelected($rows);

        $context->debug('Finished saving visitor affiliate');
        $context->debug('');
    }
コード例 #5
0
 /**
  * @throws Gpf_Exception
  * @return Pap_Tracking_Common_VisitorAffiliateCollection
  */
 protected function getVisitorAffiliatesCollection(Pap_Contexts_Action $context) {
     return $this->visitorAffiliateCache->getVisitorAffiliateAllRows($context->getVisitorAffiliate()->getVisitorId());
 }