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);
    }
コード例 #2
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('');
    }
 /**
  * @return Pap_Tracking_Common_VisitorAffiliateCheckCompatibility
  */
 public static function getHandlerInstance() {
     if(!self::$instance)  {
         return self::$instance = new Pap_Tracking_Common_VisitorAffiliateCheckCompatibility();
     }
     return self::$instance;
 }