def on_order_paid(order, payment, request, **kwargs): if not request: return ga_data = order.data.get("google_analytics", {}) tracker = Tracker(settings.GOOGLE_ANALYTICS_ID, request.get_host()) # create visitor visitor = Visitor() try: visitor.extract_from_utma(ga_data.get("utma", "")) except ValueError: return # utma cookie value is invalid visitor.extract_from_server_meta(ga_data.get("meta", {})) # create session session = Session() try: session.extract_from_utmb(ga_data.get("utmb", "")) except ValueError: return # utmb cookie value is invalid # create transaction transaction = Transaction() transaction.order_id = order.order_id transaction.total = order.subtotal transaction.tax = order.tax transaction.shipping = order.shipping transaction.city = order.billing_city.encode("utf8") transaction.country = ("%s" % order.billing_country).encode("utf8") transaction.currency = order.currency for item in order.items.all(): i = Item() i.sku = item.sku i.name = item.name.encode("utf8") i.price = item.unit_price i.quantity = item.quantity transaction.add_item(i) # tracker.setcurrencyCode tracker.track_transaction(transaction, session, visitor) order.data["google_analytics"]["tracked"] = now() order.save()
def complete_process(request, backend, *args, **kwargs): """Authentication complete process""" # pop redirect value before the session is trashed on login() redirect_value = request.session.get(REDIRECT_FIELD_NAME, '') or \ request.REQUEST.get(REDIRECT_FIELD_NAME, '') if GA_ID: ga_tracker = Tracker(GA_ID, request.META.get('HTTP_HOST', "")) utmz = request.COOKIES.get("__utmz") if utmz: try: campaign = Campaign() campaign.extract_from_utmz(utmz) ga_tracker.campaign = campaign except: pass ga_visitor = Visitor() try: ga_visitor.extract_from_utma(request.COOKIES.get("__utma","")) except: pass ga_visitor.ip_address = request.META.get('REMOTE_ADDR') ga_session = Session() try: ga_session.extract_from_utmb(request.COOKIES.get("__utmb")) except: pass else: ga_tracker = None # Django 1.5 allow us to define custom User Model, so integrity errors # can be raised. try: user = auth_complete(request, backend, *args, **kwargs) except IntegrityError: try: if ga_tracker: ga_tracker.track_event(Event("Logins",backend.AUTH_BACKEND.name+"CompleteError", request.build_absolute_uri()), ga_session, ga_visitor) except: pass url = setting('SIGNUP_ERROR_URL', setting('LOGIN_ERROR_URL')) return HttpResponseRedirect(url) if isinstance(user, HttpResponse): return user if not user and request.user.is_authenticated(): return HttpResponseRedirect(redirect_value) msg = None if user: if getattr(user, 'is_active', True): # catch is_new flag before login() might reset the instance is_new = getattr(user, 'is_new', False) login(request, user) # user.social_user is the used UserSocialAuth instance defined # in authenticate process social_user = user.social_user if redirect_value: request.session[REDIRECT_FIELD_NAME] = redirect_value or \ DEFAULT_REDIRECT if setting('SOCIAL_AUTH_SESSION_EXPIRATION', True): # Set session expiration date if present and not disabled by # setting. Use last social-auth instance for current provider, # users can associate several accounts with a same provider. expiration = social_user.expiration_datetime() if expiration: try: request.session.set_expiry(expiration) except OverflowError: # Handle django time zone overflow, set default expiry. request.session.set_expiry(None) # store last login backend name in session key = setting('SOCIAL_AUTH_LAST_LOGIN', 'social_auth_last_login_backend') request.session[key] = social_user.provider # Remove possible redirect URL from session, if this is a new # account, send him to the new-users-page if defined. new_user_redirect = backend_setting(backend, 'SOCIAL_AUTH_NEW_USER_REDIRECT_URL') if new_user_redirect and is_new: url = new_user_redirect else: url = redirect_value or \ backend_setting(backend, 'SOCIAL_AUTH_LOGIN_REDIRECT_URL') or \ DEFAULT_REDIRECT if ga_tracker: ga_tracker.track_event(Event("Logins",backend.AUTH_BACKEND.name+"Complete", request.build_absolute_uri()), ga_session, ga_visitor) else: msg = setting('SOCIAL_AUTH_INACTIVE_USER_MESSAGE', None) url = backend_setting(backend, 'SOCIAL_AUTH_INACTIVE_USER_URL', LOGIN_ERROR_URL) else: msg = setting('LOGIN_ERROR_MESSAGE', None) url = backend_setting(backend, 'LOGIN_ERROR_URL', LOGIN_ERROR_URL) if ga_tracker: ga_tracker.track_event(Event("Logins",backend.AUTH_BACKEND.name+"CompleteError", request.build_absolute_uri()), ga_session, ga_visitor) if msg: messages.error(request, msg) if redirect_value and redirect_value != url: redirect_value = quote(redirect_value) if '?' in url: url += '&%s=%s' % (REDIRECT_FIELD_NAME, redirect_value) else: url += '?%s=%s' % (REDIRECT_FIELD_NAME, redirect_value) return HttpResponseRedirect(url)