Array ('self' => true), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Registers user visit to site * * @param kEvent $event * * @return void * @access protected */ protected function OnRegisterVisit($event) { if ( $this->Application->isAdmin || !$this->Application->ConfigValue('UseVisitorTracking') || $this->Application->RecallVar('visit_id') ) { // admin logins are not registered in visits list return ; } /** @var kDBItem $object */ $object = $event->getObject(Array ('skip_autoload' => true)); $object->SetDBField('VisitDate_date', adodb_mktime()); $object->SetDBField('VisitDate_time', adodb_mktime()); $object->SetDBField('Referer', getArrayValue($_SERVER, 'HTTP_REFERER')); $object->SetDBField('IPAddress', $this->Application->getClientIp()); if ( $object->Create() ) { $this->Application->StoreVar('visit_id', $object->GetID()); $this->Application->SetVar('visits_id', $object->GetID()); } } /** * Apply any custom changes to list's sql query * * @param kEvent $event * @return void * @access protected * @see kDBEventHandler::OnListBuild() */ protected function SetCustomQuery(kEvent $event) { parent::SetCustomQuery($event); /** @var kDBList $object */ $object = $event->getObject(); $types = $event->getEventParam('types'); if ( $types == 'myvisitors' ) { $user_id = $this->Application->RecallVar('user_id'); $object->addFilter('myitems_user1', 'au.PortalUserId = ' . $user_id); $object->addFilter('myitems_user2', 'au.PortalUserId >0'); //$object->AddGroupByField('VisitDate'); $object->AddGroupByField('%1$s.VisitId'); } if ( $types == 'myvisitororders' && $event->Special == 'incommerce' ) { $user_id = $this->Application->RecallVar('user_id'); $object->addFilter('myitems_orders', 'ord.OrderId IS NOT NULL'); $object->addFilter('myitems_user1', 'au.PortalUserId = ' . $user_id); $object->addFilter('myitems_user2', 'au.PortalUserId >0'); $object->addFilter('myitems_orders_processed', 'ord.Status = 4'); } } /** * Apply some special processing to object being * recalled before using it in other events that * call prepareObject * * @param kDBItem|kDBList $object * @param kEvent $event * @return void * @access protected */ protected function prepareObject(&$object, kEvent $event) { $types = $event->getEventParam('types'); if ( method_exists($object, 'AddGroupByField') ) { if ( (!$types || $types == 'myvisitors') && $object->Special == 'incommerce' ) { $object->addCalculatedField('OrderTotalAmountSum', 'SUM(IF(ord.Status = 4, ord.SubTotal+ord.ShippingCost+ord.VAT, 0))'); $object->addCalculatedField('OrderAffiliateCommissionSum', 'SUM( IF(ord.Status = 4,ord.AffiliateCommission,0))'); $object->addCalculatedField('OrderCountByVisit', 'SUM( IF(ord.Status = 4, 1, 0) )'); } if ( !$types ) { $object->AddGroupByField('%1$s.VisitId'); } } } /** * [HOOK] Updates user_id in current visit * * @param kEvent $event */ function OnUserLogin($event) { if ($event->MasterEvent->status == kEvent::erSUCCESS) { $user_id = $this->Application->RecallVar('user_id'); if ($user_id > 0) { // for real users only, not root,guest $this->Application->setVisitField('PortalUserId', $user_id); } } } }