Пример #1
0
    def account_details(self, request):
        if request.method == 'POST':
            form = ChangeDetailsForm(request.POST)
        else:
            form = ChangeDetailsForm()

        form.configure(request)

        if form.is_valid():
            data = form.cleaned_data

            u = request.user
            p = get_customer_model().objects.get(user=u)

            if request.settings.mailchimp_enabled:
                # subscription details
                ms = MailSnake(request.settings.mailchimp_api)
                person_name = [data.get('first_name'), data.get('last_name')]
                merge_vars = {'FNAME': ' '.join(person_name)}

                # unsubscribe if email changed or we no longer want to be subscribed
                if 'email_address' in form.changed_data or ('newsletter' in form.changed_data and not data.get('newsletter')):
                    try:
                        ms.listUnsubscribe(id=request.settings.mailchimp_list_id, email_address=u.email)
                    except:
                        pass

                # subscribe if newsletter subscription changed or email was changed
                if ('email_address' in form.changed_data or 'newsletter' in form.changed_data) and data.get('newsletter'):
                    try:
                        ms.listSubscribe(id=request.settings.mailchimp_list_id, email_address=data.get('email_address'), merge_vars=merge_vars)
                    except:
                        pass

                # update newletter state in profile
                p.newsletter = data.get('newsletter')

            # update personal details on user record
            u.first_name = data.get('first_name')
            u.last_name = data.get('last_name')
            u.email = data.get('email_address')
            u.save()

            # update personal details on profile record
            p.title = data.get('title')
            p.first_name = data.get('first_name')
            p.last_name = data.get('last_name')
            p.telephone = data.get('phone')
            p.email = data.get('email_address')
            p.save()

            # success message and redirect to dashboard
            messages.success(request, 'Your details have been changed.')
            return HttpResponseRedirect(reverse('shop.account.index'))


        return {
            'account_section': True,
            'form': form
        }
Пример #2
0
def add_customer_to_mailing_list(customer):
    '''
    When called, this adds the customer's email to the mailing list.
    '''
    if not hasattr(settings, 'MAILCHIMP_API_KEY') or not hasattr(
            settings, 'MAILCHIMP_LIST_ID'):
        logger.info(
            'Did not update mailing list to add customer %s, MailChimp is not set up.'
            % customer.id)
        return

    logger.info('Updating mailing list in MailChimp, adding customer %s.' %
                customer.id)
    ms = MailSnake(settings.MAILCHIMP_API_KEY)
    listId = settings.MAILCHIMP_LIST_ID

    ms.listSubscribe(id=listId,
                     email_address=customer.email,
                     email_type='html',
                     double_optin=False,
                     update_existing=True,
                     merge_vars={
                         'FNAME': customer.first_name,
                         'LNAME': customer.last_name
                     })
Пример #3
0
def earlyAccessSubmit(request):
    from signup.forms import SignupForm
    if request.method == 'POST': # If the form has been submitted...
        form = SignupForm(request.POST) # A form bound to the POST data
        if form.is_valid():
          ms = MailSnake('60a810702ef83b7de50b150df5008109-us5')
          lists = ms.lists()
          ms.listSubscribe(
            id = lists['data'][0]['id'],
            email_address = form.cleaned_data['email'],
            merge_vars = {
                'GROUPINGS': [
                    {'id': 7197,
                     'groups': 'Pre-Launch',},]
                },
            update_existing = True,
            double_optin = False,
            )
          return HttpResponseRedirect('/signup/thanks/') # Redirect after POST

    else:
        form = SignupForm() # An unbound form

    return render(request, 'signup.html', {
        'form': form,
    })
Пример #4
0
def main_post():
    ms = MailSnake(app.config['MAILCHIMP_KEY'])
    try:
        email = request.form.get('email')
        ms.listSubscribe(id=app.config['MAILCHIMP_LIST'], email_address=email)
        flash(
            'Thanks for subscribing! You will receive a confirmation email shortly.'
        )

    except InvalidEmailException as e:
        app.logger.info('Invalid email address: %r', email)
        flash(
            "Your email address was not accepted - please check and try again."
        )

    except ListAlreadySubscribedException as e:
        app.logger.info('Already subscribed: %s', email)
        if e.message:
            msg = Markup(e.message)
        else:
            msg = """You are already subscribed to our list.
                     Please contact %s to update your settings.""" % app.config[
                'TICKETS_EMAIL'][1]
        flash(msg)

    except MailSnakeException as e:
        app.logger.error('Error subscribing: %r', e)
        flash('Sorry, an error occurred.')

    return redirect(url_for('.main'))
Пример #5
0
def update_user_details(backend, details, uid, response, user=None, is_new=False,
                        *args, **kwargs):
    if user is None:
        return

    changed = False  # flag to track changes

    for name, value in details.iteritems():
        # configured fields if user already existed
        if not _ignore_field(name, is_new):
            if value and value != getattr(user, name, None):
                setattr(user, name, value)
                changed = True

	user.profile.activate()
	user.profile.fb_pic(uid)
	user.save()

	#add to mailchimp list
	if user.first_name:
		try:
			ms = MailSnake('f92abfa01e0a9cecc885186de4e37106-us7')
			key = ''
			ms.listSubscribe( id = 'ed61191f4e', email_address = user.email, merge_vars = { 'FNAME': user.first_name, 'LNAME': user.last_name, 'EKEY': key }, double_optin = False, send_welcome = False )
		except:
			print "Facebook login error: Couldn't add user to MailChimp list"
		else:
			user.profile.send_welcome_email(activate=False)
Пример #6
0
def main_post():
    ms = MailSnake(app.config['MAILCHIMP_KEY'])
    try:
        email = request.form.get('email')
        ms.listSubscribe(id=app.config['MAILCHIMP_LIST'], email_address=email)
        flash('Thanks for subscribing! You will receive a confirmation email shortly.')

    except InvalidEmailException as e:
        app.logger.info('Invalid email address: %r', email)
        flash("Your email address was not accepted - please check and try again.")

    except ListAlreadySubscribedException as e:
        app.logger.info('Already subscribed: %s', email)
        if e.message:
            msg = Markup(e.message)
        else:
            msg = """You are already subscribed to our list.
                     Please contact %s to update your settings.""" % app.config['TICKETS_EMAIL'][1]
        flash(msg)

    except MailSnakeException as e:
        app.logger.error('Error subscribing: %r', e)
        flash('Sorry, an error occurred.')

    return redirect(url_for('.main'))
Пример #7
0
def submit(request):
    # grab info
    email = request.POST['email']
    referrer = request.POST['referrer']

    # save locally
    # lead_to_submit = Lead(email=email, referrer=referrer)
    # lead_to_submit.save()

    # send to Mailchimp
    key = settings.MAILCHIMP_API_KEY
    list_num = settings.MAILCHIMP_LIST_NUM

    # see: http://www.nerdydork.com/integrate-mailchimp-with-your-django-app.html
    mailsnake = MailSnake(key)
    try:
        mailsnake.listSubscribe(id=list_num,
                                email_address=email,
                                double_optin=False,
                                send_welcome=False,
                                merge_vars={'referrer': referrer})
    except:
        pass

    return HttpResponseRedirect(reverse('landingpage.views.thanks'))
Пример #8
0
def submit(request):
    # grab info
    email = request.POST['email']
    referrer = request.POST['referrer']

    # save locally
    lead_to_submit = Lead(email=email, referrer=referrer)
    lead_to_submit.save()

    # send to Mailchimp
    key = settings.MAILCHIMP_API_KEY
    list_num = settings.MAILCHIMP_LIST_NUM

    # see: http://www.nerdydork.com/integrate-mailchimp-with-your-django-app.html
    mailsnake = MailSnake(key)
    try:
        mailsnake.listSubscribe(
            id=list_num,
            email_address=email,
            double_optin=False,
            send_welcome=False,
            merge_vars={
                'referrer': referrer
                }
        )
    except:
        pass

    return HttpResponseRedirect(reverse('landingpage.views.thanks'))
Пример #9
0
def earlyAccessSubmit(request):
    from signup.forms import SignupForm
    if request.method == 'POST':  # If the form has been submitted...
        form = SignupForm(request.POST)  # A form bound to the POST data
        if form.is_valid():
            ms = MailSnake('60a810702ef83b7de50b150df5008109-us5')
            lists = ms.lists()
            ms.listSubscribe(
                id=lists['data'][0]['id'],
                email_address=form.cleaned_data['email'],
                merge_vars={
                    'GROUPINGS': [
                        {
                            'id': 7197,
                            'groups': 'Pre-Launch',
                        },
                    ]
                },
                update_existing=True,
                double_optin=False,
            )
            return HttpResponseRedirect(
                '/signup/thanks/')  # Redirect after POST

    else:
        form = SignupForm()  # An unbound form

    return render(request, 'signup.html', {
        'form': form,
    })
Пример #10
0
def main_post():
    ms = MailSnake(app.config['MAILCHIMP_KEY'])
    try:
        email = request.form.get('email')
        ms.listSubscribe(id='d1798f7c80', email_address=email)
        flash('Thanks for subscribing! You will receive a confirmation email shortly.')
    except MailSnakeException, e:
        print e
        flash('Sorry, an error occurred.')
Пример #11
0
def main_post():
    ms = MailSnake(app.config['MAILCHIMP_KEY'])
    try:
        email = request.form.get('email')
        ms.listSubscribe(id='d1798f7c80', email_address=email)
        flash('Thanks for subscribing! You will receive a confirmation email shortly.')
    except MailSnakeException, e:
        app.logger.error('Error subscribing: %s', e)
        flash('Sorry, an error occurred.')
Пример #12
0
def main_post():
    ms = MailSnake(app.config["MAILCHIMP_KEY"])
    try:
        email = request.form.get("email")
        ms.listSubscribe(id="d1798f7c80", email_address=email)
        flash("Thanks for subscribing! You will receive a confirmation email shortly.")
    except MailSnakeException, e:
        print e
        flash("Sorry, an error occurred.")
Пример #13
0
    def form_valid(self, form):
        ms = MailSnake(getattr(settings, 'MAILCHIMP_KEY'))
        double_optin = getattr(settings, 'MAILCHIMP_CONFIRM', True)
        list_id = getattr(settings, 'MAILCHIMP_LIST_ID', None)

        if not list_id:
            list_id = ms.lists()['data'][0]['id']

        ms.listSubscribe(id=list_id, email_address=form.cleaned_data['email'],
                         merge_vars={'NAME': form.cleaned_data['name']},
                         update_existing=True, double_optin=double_optin)

        return super(SubscribeView, self).form_valid(form)
Пример #14
0
def __add_to_mailchimp(user):
    if settings.MAILCHIMP_AUTO_SUBSCRIBE:
        ms = MailSnake(settings.MAILCHIMP_API_KEY)
        ms.listSubscribe(
            id=settings.MAILCHIMP_LIST_ID,
            email_address=user.email,
            merge_vars={
                'FNAME': user.first_name,
                'LNAME': user.last_name,
            },
            double_optin=False,  # no confirm message
            send_welcome=True,  # if new, send welcome
            update_existing=True,  # if existing, update
        )
Пример #15
0
def __add_to_mailchimp(user):
    if settings.MAILCHIMP_AUTO_SUBSCRIBE:
        ms = MailSnake(settings.MAILCHIMP_API_KEY)
        ms.listSubscribe(
            id=settings.MAILCHIMP_LIST_ID,
            email_address=user.email,
            merge_vars={
                'FNAME': user.first_name,
                'LNAME': user.last_name,
            },
            double_optin=False,  # no confirm message
            send_welcome=True,  # if new, send welcome
            update_existing=True,  # if existing, update
        )
Пример #16
0
def connect(request):
  ms = MailSnake(settings.MAILCHIMP_API_KEY)
  lists = ms.lists()
  if request.method == 'POST':
    form = ConnectForm(request.POST)
    message = 'the sky is falling'
    if form.is_valid():
      ms.listSubscribe(
          id = lists['data'][0]['id'],
          email_address = (form.cleaned_data['email_signup']),
          update_existing = True,
          double_optin = False,
      )
      
      #ms.listStaticSegmentMembersAdd(
      #    id = lists['data'][0]['id'],
      #    seg_id = 157, #Fake Development People... kill this in production!
      #    batch = {
      #        'email_address': form.cleaned_data['email_signup']
      #        },
      #)
      
      
      if request.is_ajax(): #success with js
          message = 'success!'
          status = True
          return HttpResponse(json.dumps({'message':message, 'status':status}), 'application/json')
      else: #success with no js
          return redirect('success') 
    else:
      if request.is_ajax(): #error with js
          message = 'Invalid email address'
          status = False
          return HttpResponse(json.dumps({'message':message, 'status':status}), 'application/json')
      else: # error with no js
          form.addError('Invalid email address')  
  else:
    form = ConnectForm()
  
  
  return render_to_response(
    'signups/connect.html',
    {
      'form': form,
   
    },
    context_instance=RequestContext(request)
  )
Пример #17
0
def api_createuser(request):
    code = 100
    data = {'code':code, 'error': 'Request Error'}
    
    if request.POST:
        if 'name' in request.POST and 'email' in request.POST and 'password' in request.POST:
            name = request.POST['name']
            email_x = request.POST['email']
            password = request.POST['password']
            
            email = email_x.lower()
            
            if validateEmail(email):
                ck_u = User.objects.filter(email=email)
                if len(ck_u) > 0: 
                    existing_user = True
                    code = 100
                    data = {'code':code, 'error': 'User Already Exists'}
                else:
                    existing_user = False
                    u = User(username=email, password=password, email=email)
                    u.save()
                
                    """create invitation"""
                    store = Store.objects.filter(active=True,city='San Francisco')[0]
                    inv = Invitation(user=u, default_store=store, email=u.username, used=True)
                    inv.save()
                    
                    up = UserProfile(user=u, default_store=store)
                    up.save()
                    
                    """create default subscription"""
                    sub = Subscription(userprofile=up, subscription=False, subscription_type='un-subscribed')
                    sub.save()
                    
                    """Send admin email"""
                    sendSignupAdminEmail(u, 'San Francisco')
                    
                    """Send user email"""
                    sendWelcomeEmail(email,'sanfrancisco', 'San Francisco')
                    
                    """subscribe user to daily email"""
                    LIST_IDS = {'san-francisco':'eaa0a378ba'}
                    l_id = LIST_IDS['san-francisco']
                    
                    ms = MailSnake(settings.MAILCHIMP_API_KEY)
                    success = ms.listSubscribe(id=l_id, email_address=u.email, double_optin=False)
                    
                    d, code = api_auth_helper(u)
                    code = 200
                    data = {'code':code, 'account':d['account']}
            else:
                code = 100
                data = {'code':code, 'error': 'Invalid Email'}
        else:
            code = 100
            data = {'code':code, 'error': 'Invalid Sign-up'}
          
    return HttpResponse(simplejson.dumps(data, cls=MyJSONEncoder),content_type = 'application/javascript; charset=utf8')
Пример #18
0
def newsletter_signup_form(context):
    """
    Renders a default nessletter signup form based on MailChimp.
    """
    settings = value_or_none('settings', context)
    if not settings:
        raise ValueError("Expected 'settings' in template context.")

    if not settings.mailchimp_api or not settings.mailchimp_list_id:
        return ''

    request = value_or_none('request', context)
    if not request:
        raise ValueError("Expected 'request' in template context.")

    if request.method == 'POST':
        form = MailChimpSubscriptionForm(request.POST)
    else:
        form = MailChimpSubscriptionForm()

    msg = None
    msg_type = None

    if request.method == 'POST' and form.is_valid():
        d = form.cleaned_data

        merge_vars = {'FNAME': d.get('mailchimp_subscription__name', '')}
        ms = MailSnake(settings.mailchimp_api)

        try:
            ms.listSubscribe(id=settings.mailchimp_list_id,
                             email_address=d['mailchimp_subscription__email'],
                             merge_vars=merge_vars)
            msg = 'Almost finished...We need to confirm your email address. To complete the subscription process, please click the link in the email we just sent you.'
            msg_type = 'success'
        except:
            msg = 'Unfortunately we were unable to process your request. Please try again later...'
            msg_type = 'error'

    # render form
    t = get_template('cubane/cms/newsletter_form.html')
    c = copy.copy(context)
    c['form'] = form
    c['msg'] = msg
    c['msg_type'] = msg_type
    return t.render(c)
Пример #19
0
class MailchimpRegistrar(object):
    _mail_snake = None

    def __init__(self):
        if not hasattr(settings, 'MAILCHIMP_API_KEY'):
            logger.error('MailChimp API key not present')
        self._mail_snake = MailSnake(settings.MAILCHIMP_API_KEY)

    def _register_email(self, email, list_id):
        self._mail_snake.listSubscribe(id=list_id,
                                       email_address=email,
                                       merge_vars={'EMAIL': email},
                                       double_optin=True,
                                       update_existing=True)

    def subscribe_to_events_notification(self, email):
        list_id = settings.MAILCHIMP_EVENTS_NOTIFICATION_LIST_ID
        self._register_email(email, list_id)
Пример #20
0
def pre_save_user(sender, instance, **kwargs):
    try:
        original = User.objects.get(pk=instance.pk)
    except User.DoesNotExist:
        pass
    else:
        # Sync with MailChimp whenever a user becomes active
        if not original.is_active == instance.is_active and instance.is_active:
            user = instance
            profile = user.get_profile()

            mailsnake = MailSnake(settings.MAILCHIMP_API_KEY)

            if profile.newsletter:
                email = user.email.encode('utf-8')

                logger.debug('Subscribing ' + email + ' to MailChimp list...')
                try:
                    mailsnake.listSubscribe(id=settings.MAILCHIMP_LIST_ID,
                                            email_address=email,
                                            double_optin=False,
                                            update_existing=True,
                                            send_welcome=True)
                except:
                    logger.exception('Failed to subscribe ' + email +
                                     ' to MailChimp list')

            else:
                email = user.email.encode('utf-8')

                # If the user is already subscribed on MailChimp, go ahead and update our local state to match
                logger.debug('Retrieving subscription state for ' + email +
                             ' on MailChimp list...')
                try:
                    info = mailsnake.listMemberInfo(
                        id=settings.MAILCHIMP_LIST_ID, email_address=(email, ))
                except:
                    logger.exception(
                        'Failed to retrieve subscription state for ' + email)
                else:
                    if info['success'] == 1 and info['data'][0][
                            'status'] == 'subscribed':
                        profile.newsletter = True
                        profile.save(dispatch_signal=False)
Пример #21
0
def pre_save_user_profile(sender, instance, raw, **kwargs):
    # Don't update MailChimp if this is a raw save (to prevent cycles when updating in response to the MailChimp webhook)
    if not raw:
        try:
            original = UserProfile.objects.get(pk=instance.pk)
        except UserProfile.DoesNotExist:
            pass
        else:
            if not original.newsletter == instance.newsletter:
                user = instance.user
                # Update MailChimp whenever the newsletter preference changes for an active user
                if user.is_active:
                    email = user.email.encode('utf-8')
                    profile = instance

                    mailsnake = MailSnake(settings.MAILCHIMP_API_KEY)

                    if profile.newsletter:
                        logger.debug('Subscribing ' + email +
                                     ' to MailChimp list...')
                        try:
                            mailsnake.listSubscribe(
                                id=settings.MAILCHIMP_LIST_ID,
                                email_address=email,
                                double_optin=False,
                                update_existing=True,
                                send_welcome=True)
                        except:
                            logger.exception('Failed to subscribe ' + email +
                                             ' to MailChimp list')
                    else:
                        logger.debug('Unsubscribing ' + email +
                                     ' from MailChimp list...')
                        try:
                            mailsnake.listUnsubscribe(
                                id=settings.MAILCHIMP_LIST_ID,
                                email_address=email)
                        except:
                            logger.exception('Failed to unsubscribe ' + email +
                                             ' from MailChimp list')
Пример #22
0
    def form_valid(self, form):

      	ms = MailSnake(settings.MAILCHIMP_API_KEY)

        ms.listSubscribe(
            id = settings.MAILCHIMP_LIST_ID,
            email_address = form.cleaned_data['email'],
            merge_vars = {
                'FNAME': form.cleaned_data['first_name'],
                'GROUPINGS': [{'name':'reading','groups':'bcseoguide'}],
                },
            update_existing = True,
            double_optin = True,
        )

        if self.request.is_ajax():
            return self.response_class(
		request=self.request,
		template='sm/subscribe/ajax/success.html', 
		context={})
	
        return HttpResponseRedirect(reverse('subscribe_success'))
Пример #23
0
def newsletter_signup(request):
    email = request.POST['email']

    if re.match('^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$', email):
        ms = MailSnake(settings.MAILCHIMP_KEY)
        r = ms.listSubscribe(id='df179acee6', email_address=email)
        print(r)
        if r:
            return HttpResponse()  
        else:
            return HttpResponseServerError()
    else:
        #Invalid email address. Return 400        
        return HttpResponseBadRequest(content='Invalid email address')
Пример #24
0
def new_member(request):
	#auth.logout(request)
	if request.method == 'POST':
		uform = MyUserCreationForm(request.POST)
		pform = MemberForm(request.POST)
		if uform.is_valid() and pform.is_valid():
			user = uform.save()
			member = pform.save(commit=False)
			member.user = user
			member.save()
			user = authenticate(username=uform.data['username'], password=uform.data['password1'])
			auth.login(request, user)
			
			if settings.USE_MAILCHIMP:
				ms = MailSnake(settings.MAILCHIMP_API_KEY)
				lists = ms.lists()
				ms.listSubscribe(
					id = lists['data'][0]['id'], #TODO: assumes use of first list,
					email_address = user.email,
					merge_vars = {
						'FNAME' : user.first_name,
						'LNAME' : user.last_name,
					},
					update_existing = True,
					double_optin = False, #no confirm message
					send_welcome = True, #note: won't send if merely updates existing
				)
			
			return redirect('membership.views.enrollment')
	else:
		uform = MyUserCreationForm()
		pform = MemberForm()
	d = {
		'uform':uform,
		'pform':pform,
	}
	return render(request, 'membership/new_member.html', d)
Пример #25
0
def ajax_signup(request):
    if request.POST:
        new_signup = MyUserCreationForm(request.POST)
        if new_signup.is_valid():
            new_signup.save()
            uname = new_signup.cleaned_data["username"]

            """set up so username and email are the same"""
            user = User.objects.get(username=uname)
            user.email = uname
            user.save()

            """create user profile"""
            store_id = request.POST.get("default_store")
            store = Store.objects.get(id=store_id)
            up = UserProfile(user=user, default_store=store)
            up.save()

            """create default subscription"""
            sub = Subscription(userprofile=up, subscription=False, subscription_type="un-subscribed")
            sub.save()

            """email admin of new signup"""
            sendSignupAdminEmail(user, store)

            """email user with signup information"""
            sendSignupEmail(user, store)

            """subscrbe user to daily email"""
            LIST_IDS = {"sflaunch_group": "eaa0a378ba"}
            l_id = LIST_IDS["sflaunch_group"]

            ms = MailSnake(settings.MAILCHIMP_API_KEY)
            success = ms.listSubscribe(id=l_id, email_address=user.email, double_optin=False)

            username = user.username
            password = user.password
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)

            return HttpResponse("success", status=200)

    return HttpResponse("Username is already taken", status=403)
Пример #26
0
def CreateNewUserHelper(request, c_email, c_city):
    email = c_email.lower()
    token = get_rand_token()

    ck_u = User.objects.filter(email=email)
    if len(ck_u) > 0:
        existing_user = True
    else:
        existing_user = False
        u = User(username=email, password=token, email=email)
        u.save()

        """create invitation"""
        store = Store.objects.filter(active=True, city="San Francisco")[0]
        inv = Invitation(user=u, default_store=store, email=u.username, token=token, used=False)
        inv.save()

        # save in session
        request.session["user"] = base64.b16encode(str(u.id))

        CITY_LIST = {"san-francisco": "San Francisco"}
        cl_city = CITY_LIST[c_city]

        up = UserProfile(user=u, default_store=store)
        up.save()

        """create default subscription"""
        sub = Subscription(userprofile=up, subscription=False, subscription_type="un-subscribed")
        sub.save()

        """Send admin email"""
        sendSignupAdminEmail(u, cl_city)

        """Send welcome email to new user"""
        c = cl_city.lower()
        city = c.replace(" ", "")
        sendWelcomeEmail(email, token, city, cl_city)

        """subscribe user to daily email"""
        LIST_IDS = {"san-francisco": "eaa0a378ba"}
        l_id = LIST_IDS[c_city]

        ms = MailSnake(settings.MAILCHIMP_API_KEY)
        success = ms.listSubscribe(id=l_id, email_address=u.email, double_optin=False)
Пример #27
0
def admin_invite(request):
    if request.POST:
        form = InvitationForm(request.POST)
        if form.is_valid():
            c_email = form.cleaned_data["email"]
            email = c_email.lower()
            token = get_rand_token()

            u = User(username=email, password=token, email=email)
            u.save()

            store = form.cleaned_data["store"]
            up = UserProfile(user=u, default_store=store)
            up.save()

            """create default subscription"""
            sub = Subscription(userprofile=up, subscription=False, subscription_type="un-subscribed")
            sub.save()

            c = store.city.lower()
            city = c.replace(" ", "")
            send_invite_email(email, token, city, store)

            inv = Invitation(user=u, default_store=store, email=u.username, token=token, used=False)
            inv.save()

            """subscrbe user to daily email"""
            LIST_IDS = {"sflaunch_group": "eaa0a378ba"}
            l_id = LIST_IDS["sflaunch_group"]

            ms = MailSnake(settings.MAILCHIMP_API_KEY)
            success = ms.listSubscribe(id=l_id, email_address=u.email, double_optin=False)

    else:
        form = InvitationForm()

    invites = Invitation.objects.all()

    template = "profile/admin/admin_invite.html"
    data = {"form": form, "invites": invites}

    return render_to_response(template, data, context_instance=RequestContext(request))
Пример #28
0
def subscribe(request):
    ms = MailSnake(settings.MAILCHIMP_KEY)
    form = SubscriptionForm(request.POST)
    
    result = {}
    
    if form.is_valid():
        try:
            subscribed = ms.listSubscribe(id=settings.MAILCHIMP_NEWSLETTER_LIST_ID, 
                                          email_address=form.cleaned_data['email'], 
                                          double_optin=False)
            
            if subscribed:
                result = {'status': 'success', 'message': 'E-mail cadastrado com sucesso! :)'}
            else:
                result = {'status': 'error', 'message': 'Algo de errado aconteceu e seu e-mail não foi cadastrado. :('}
            
        except ListAlreadySubscribedException:
            result = {'status': 'success', 'message': 'O e-mail informado já estava cadastrado em nossa newsletter. ;)'}
    else:
        result = {'status': 'error', 'message': get_last_error_message(form)}
    
    return HttpResponse(simplejson.dumps(result), mimetype='application/json')
Пример #29
0
def redeem_now(request):
    user = None
    
    token = request.POST.get('token')
    if not token:
        token = request.GET.get('token')
    
    city = 'sanfrancisco'
    #if 'city' in request.GET:
    #    city = request.GET.get('city')
         
    try:
        gift = GiftSubscription.objects.get(gifttoken=token)
        user = gift.giftuser
        request.session['user'] = base64.b16encode(str(user.id))
    except GiftSubscription.DoesNotExist:
        raise Http404
    except:
        raise Http404
    
    if user:        
        if request.POST:
            form = SetPasswordForm(user, request.POST)
            if form.is_valid():
                form.save()
                
                """Get users default city"""
                up = UserProfile.objects.filter(user=user)
                if up:
                    store = up[0].default_store
                    c = store.city
                    city = c.lower().replace(' ','')
                
                """update to gift subscription"""
                gift.giftused = True
                gift.save() 
                
                """update to gift subscription"""
                s_type = "4 month unlimited (gift subscription)"
                sub = Subscription.objects.filter(userprofile=up[0])
                
                if len(sub) > 0:
                    s = sub[0]
                    s.subscription_type = s_type
                    s.subscription = True 
                    s.save()
                else:
                    s = Subscription(userprofile=up, subscription=True, subscription_type=s_type)
                    s.save()
                    
                """subscribe user to daily email"""
                LIST_IDS = {'sflaunch_group':'eaa0a378ba'}
                l_id = LIST_IDS['sflaunch_group']
          
                ms = MailSnake(settings.MAILCHIMP_API_KEY)
                success = ms.listSubscribe(id=l_id, email_address=user.email, double_optin=False)
                
                data = {'user':user, 'city':city}
                template = "gifts/thanks_gift_redeemed.html"
                return render_to_response(template, data,context_instance=RequestContext(request))
        
        else:
            form = SetPasswordForm(user) 
        
        data = {'form':form, 'user':user, 'token':token, 'city':city}
        template = 'gifts/gift_redeem.html'
        
        return render_to_response(template, data, context_instance=RequestContext(request))    
Пример #30
0
    def account_signup(self, request):
        email = request.session.get(settings.SIGNUP_EMAIL_SESSION_VAR, None)
        if email == '':
            raise Http404('Missing email address.')

        checkout = request.GET.get('checkout', False) == '1'
        form_class = self.get_account_signup_form()
        if request.method == 'POST':
            form = form_class(request.POST, initial={'checkout': checkout})
        else:
            form = form_class(initial={
                'email': email,
                'checkout': checkout
            })

        form.configure(request)

        if request.method == 'POST':
            captcha = validate_captcha(request)
            if not captcha:
                messages.add_message(request, messages.ERROR,
                    'Please tick the checkbox at the bottom of the form to prevent SPAM.'
                )

            if form.is_valid() and captcha:
                d = form.cleaned_data

                # create user account
                md5 = hashlib.md5()
                md5.update(d['email'])
                user = User.objects.create(
                    username = md5.hexdigest()[:30],
                    first_name = d['first_name'],
                    last_name = d['last_name'],
                    email = d['email']
                )

                # replace username with user id, set password and add user to list of customers
                user.username = unicode(user.id)
                user.set_password(d['password'])

                user.save()

                # create customer
                newsletter = 0
                if request.settings.mailchimp_enabled:
                    if d['newsletter']:
                        person_name = (d['first_name'],d['last_name'])
                        merge_vars = {'FNAME': " ".join(person_name)}
                        ms = MailSnake(request.settings.mailchimp_api)
                        try:
                            ms.listSubscribe(id=request.settings.mailchimp_list_id, email_address=d['email'], merge_vars=merge_vars)
                        except:
                            pass
                        newsletter = d['newsletter']
                customer = get_customer_model().objects.create(
                    user=user,
                    first_name = d['first_name'],
                    last_name = d['last_name'],
                    email=d['email'],
                    title=d['title'],
                    address1='',
                    city='',
                    county='',
                    postcode='',
                    country=d['country'],
                    telephone='',
                    newsletter=newsletter
                )

                # log customer in
                login_user_without_password(request, user)

                # go to dashboard or deliver page
                messages.success(request, 'Thank you for signing up with us.')
                if d['checkout']:
                    response = HttpResponseRedirect(reverse('shop.order.delivery'))
                else:
                    response = HttpResponseRedirect(reverse('shop.account.index'))

                response.set_cookie('cubaneShopLogin', '1')
                return response

        return {
            'account_section': True,
            'is_signup_page': True,
            'form': form
        }
Пример #31
0
def complete(request):
    """
    (3) Final checkout step, where the order is actually created from the basket.
    """
    basket = Basket(request)

    # redirect back to a previous step if we missed anything...
    next = get_next_checkout_step(request, basket, CurrentPage.COMPLETE())
    if next:
        return HttpResponseRedirect(next)

    # state or county
    if 'state' in basket.billing_address:
        county = basket.billing_address.get('state')
    else:
        county = basket.billing_address.get('county')

    # create account if requested
    if basket.signup:
        # create user account
        md5 = hashlib.md5()
        md5.update(basket.signup.get('email'))
        email = basket.signup.get('email')

        if User.objects.filter(email=email).count() > 0:
            messages.warning(
                request,
                'There is already an account with this email: %s.' % email)
            return HttpResponseRedirect(reverse('shop.account.login'))
        user = User.objects.create(username=md5.hexdigest()[:30],
                                   first_name=basket.signup.get('first_name'),
                                   last_name=basket.signup.get('last_name'),
                                   email=email)

        # replace username with user id and set password
        user.username = unicode(user.id)
        user.set_password(basket.signup.get('password'))
        user.save()

        # create profile
        get_customer_model().objects.create(
            user=user,
            first_name=user.first_name,
            last_name=user.last_name,
            email=user.email,
            title=basket.billing_address.get('title'),
            address1=basket.billing_address.get('address1'),
            address2=basket.billing_address.get('address2'),
            address3=basket.billing_address.get('address3'),
            city=basket.billing_address.get('city'),
            county=county,
            postcode=basket.billing_address.get('postcode'),
            country=basket.billing_address.get('country'),
            telephone=basket.billing_address.get('telephone'),
            newsletter=basket.newsletter)

        # log user in
        login_user_without_password(request, user)
        basket.signup = None
    else:
        if request.user.is_anonymous():
            user = None
        else:
            user = request.user

        # if specified, copy relevant information to customer's profile
        if user != None and basket.update_profile:
            user.first_name = basket.billing_address.get('first_name')
            user.last_name = basket.billing_address.get('last_name')
            user.save()

            customer = get_customer_model().objects.get(user=user)
            customer.address1 = basket.billing_address.get('address1')
            customer.address2 = basket.billing_address.get('address2')
            customer.address3 = basket.billing_address.get('address3')
            customer.city = basket.billing_address.get('city')
            customer.county = county
            customer.postcode = basket.billing_address.get('postcode')
            customer.country = basket.billing_address.get('country')
            customer.telephone = basket.billing_address.get('telephone')
            customer.save()

    # create single order
    order = get_order_model().create_from_basket(request, basket, user)

    # mailchimp
    if request.settings.mailchimp_enabled and basket.newsletter:
        email = basket.billing_address.get('email')
        first_name = basket.billing_address.get('first_name')
        last_name = basket.billing_address.get('last_name')
        person_name = (first_name, last_name)
        merge_vars = {'FNAME': " ".join(person_name)}
        ms = MailSnake(request.settings.mailchimp_api)
        try:
            ms.listSubscribe(id=request.settings.mailchimp_list_id,
                             email_address=email,
                             merge_vars=merge_vars)
        except:
            pass

    # redirect to order status page (payment from there...)
    basket.save()
    return HttpResponseRedirect(
        reverse('shop.order.status', args=[order.secret_id]))
Пример #32
0
def signup(request, city):
    LOCATIONS = {'sanfrancisco':'San Francisco'}
    STATE = {'sanfrancisco':'CA'}
    
    store_city = LOCATIONS[city]
    store_state = STATE[city]
    
    store_all = Store.objects.filter(city=store_city, active=True)
    
    if request.POST:
        new_signup = MyUserCreationForm(request.POST)
        if new_signup.is_valid():
            new_signup.save()
            uname = new_signup.cleaned_data['username']
            
            """set up so username and email are the same"""
            user = User.objects.get(username=uname)
            user.email = uname
            user.save()
            
            """create user profile"""
            store_id = request.POST.get('default_store')
            store = Store.objects.get(id=store_id)
            
            up = UserProfile(user=user, default_store=store)
            up.save()
            
            """create default subscription"""
            sub = Subscription(userprofile=up, subscription=False, subscription_type='un-subscribed')
            sub.save()
            
            """email admin of new signup"""
            sendSignupAdminEmail(user, store)
            
            """email user with signup information"""
            sendSignupEmail(user, store)
            
            """subscrbe user to daily email"""
            LIST_IDS = {'sflaunch_group':'eaa0a378ba'}
            l_id = LIST_IDS['sflaunch_group']
      
            ms = MailSnake(settings.MAILCHIMP_API_KEY)
            success = ms.listSubscribe(id=l_id, email_address=user.email, double_optin=False)
            
            username = user.username
            password = user.password
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
            
            request.session['user'] = base64.b16encode(str(up.user.id))
            
            return HttpResponseRedirect('/profile/subscribe/sanfrancisco')
    
    new_signup = MyUserCreationForm()
    location_form = UserProfileForm()
    
    mapForm = createMapMulti(store_all, store_city, store_state, largeMap=True, zoomControl=True, panControl=True)
        
    template = 'profile/signup.html'
    data = {'new_signup':new_signup, 'store_all':store_all, 'city':city,
                'store_city':store_city, 'location_form':location_form, 'map':mapForm}
    
    return render_to_response(template, data,context_instance=RequestContext(request))
Пример #33
0
def submit_orders(request):
	# gets logged in user profile, or anonymous profile
	profile = current_profile(request)
	current_cart = Cart(request)

	# the cart has its own discount logic
	# plus we need to account for any user submitted coupons
	total_amount = current_cart.discount_applied() * 100
	discount_amount = current_cart.discount() * 100.0
	coupon_amount = float(request.POST.get('coupon_amount', 0.0))
	shipping_amount = float(request.POST.get('shipping_amount', 0.0))

	# actual amount to charge with stripe
	final_amount = total_amount - coupon_amount + shipping_amount

	print(str(current_cart.count()) + ' items')
	print('total ' + str(total_amount))
	print('coupon amount ' + str(coupon_amount))
	print('shipping amount ' + str(shipping_amount))
	print('final amount ' + str(final_amount))

	# grab email for reference in stripe
	if profile.user.username == 'guest':
		email = request.POST.get('email_address', '')
	else:
		email = profile.user.email

	# subscribing people to mailchimp
	if request.POST.get('email_checkbox','') and email != '':
		ms = MailSnake(settings.MAILCHIMP_KEY)
		lists = ms.lists()
		ms.listSubscribe(
		    id = lists['data'][0]['id'],
		    email_address = email,
		    update_existing = True,
		    double_optin = False,
		)

	# see your keys here https://manage.stripe.com/account
	stripe.api_key = settings.STRIPE_SECRET_KEY # key the binx gave
	stripe_desc = str(email) + ", " + str(current_cart.count()) + " meshus"

	print(stripe_desc)

	# get the credit card details submitted by the form
	token = request.POST['stripe_token']

	# create the charge on Stripe's servers - this will charge the user's card
	charge = stripe.Charge.create(
	    amount = int(final_amount), # amount in cents, again
	    currency = "usd",
	    card = token,
	    description = stripe_desc
	)

	# store the shipping address information
	shipping = ShippingInfo()
	shipping.contact = email
	shipping.shipping_name = request.POST['shipping_name']
	shipping.shipping_address = request.POST['shipping_address']
	shipping.shipping_address_2 = request.POST['shipping_address_2']
	shipping.shipping_city = request.POST['shipping_city']
	shipping.shipping_zip = request.POST['shipping_zip']
	shipping.shipping_region = request.POST['shipping_region']
	shipping.shipping_state = request.POST['shipping_state']
	shipping.shipping_country = request.POST['shipping_country']

	# save shipping separately now, not in Order
	shipping.amount = shipping_amount

	shipping.save()

	items = current_cart.cart.item_set.all()

	if current_cart.count() > 1:
		return submit_multiple(request, shipping, items, final_amount, discount_amount, coupon_amount)
	elif current_cart.count() == 1:
		return submit_single(request, shipping, items, final_amount, coupon_amount)