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 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); } }
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(''); }
/** * @throws Gpf_Exception * @return Pap_Tracking_Common_VisitorAffiliateCollection */ protected function getVisitorAffiliatesCollection(Pap_Contexts_Action $context) { return $this->visitorAffiliateCache->getVisitorAffiliateAllRows($context->getVisitorAffiliate()->getVisitorId()); }