protected function _executePromotionUpdate($force = false) { if (!XenForo_Application::isRegistered('session') || XenForo_Application::getSession()->get('promotionChecked')) { return; } $visitor = XenForo_Visitor::getInstance(); if (!$visitor['user_id'] || $visitor['last_activity'] > XenForo_Application::$time - 1800 && !$force) { // guest or we've been active recently, so let the cron do it return; } XenForo_Application::getSession()->set('promotionChecked', true); /** @var $promotionModel XenForo_Model_UserGroupPromotion */ $promotionModel = $this->getModelFromCache('XenForo_Model_UserGroupPromotion'); if ($promotionModel->updatePromotionsForUser($visitor->toArray())) { // awarded promotions, reload XenForo_Visitor::setup($visitor['user_id'], XenForo_Visitor::getVisitorSetupOptions()); } }
protected function _postSaveAfterTransaction() { parent::_postSaveAfterTransaction(); if (SV_UserPromoOnUpdate_Globals::$RunPromotion) { // ensure we don't attempt to run the promotion twice in the same request SV_UserPromoOnUpdate_Globals::$RunPromotion = false; $user = $this->getMergedData(); /** @var $promotionModel XenForo_Model_UserGroupPromotion */ $promotionModel = $this->getModelFromCache('XenForo_Model_UserGroupPromotion'); if ($promotionModel->updatePromotionsForUser($user)) { $visitor = XenForo_Visitor::getInstance(); // awarded promotions, reload session if (XenForo_Application::isRegistered('session') && $visitor['user_id'] && $visitor['user_id'] == $user['user_id']) { XenForo_Application::getSession()->set('promotionChecked', true); XenForo_Visitor::setup($user['user_id'], XenForo_Visitor::getVisitorSetupOptions()); } } } }