Exemplo n.º 1
0
def email_on_comment(request, object_id):
    log = logging.getLogger('pollajax.email_on_comment')
    comment = ThreadedComment.objects.get(id=object_id)
    poll = Poll.objects.get(id=comment.object_id)  #@UndefinedVariable
    if comment.parent_id:
        parent_comment = ThreadedComment.objects.get(id=comment.parent_id)
        user = parent_comment.user
        data = UserService(user=user).getUserData()
        if data.email_on_comment_reply:
            # someone replied to your comment
            body = """Hello!<br/>It looks like %s has replied to your comment on the poll <a href="%s">%s</a>.  
            <br/>Just thought you'd like to know!
            <br/>
            Thanks!
            <br/>        
            P.S. If you'd like to turn off these emails you can visit your settings from the user profile page.
            """ % (comment.user, settings_local.HOST_NAME + "view-poll/" +
                   poll.url + "/", poll.question)

            subject, from_email, to = '%s has replied to your comment' % comment.user, '*****@*****.**', parent_comment.user.email
            text_content = 'Hello!\nIt looks like %s has replied to your comment on the poll: %s.  Just thought you would like to know!\n\nThanks!\nP.S. If you would like to turn off these emails you can visit your settings from the user profile page.' % (
                comment.user, poll.question)
            html_content = body
            msg = EmailMultiAlternatives(subject, text_content, from_email,
                                         [to])
            msg.attach_alternative(html_content, "text/html")
            try:
                msg.send()
            except:
                # swallow zee exceptions!!
                log.error("could not send email to %s" %
                          parent_comment.user.email)

    else:
        data = UserService(user=poll.user).getUserData()
        # someone replied to your poll
        if data.email_on_poll_comment:
            body = """Hello!<br/>It looks like %s has commented on your poll <a href="%s">%s</a>.  
            <br/>Just thought you'd like to know!
            <br/>
            Thanks!
            <br/>        
            P.S. If you'd like to turn off these emails you can visit your settings from the user profile page.
            """ % (comment.user, settings_local.HOST_NAME + "view-poll/" +
                   poll.url + "/", poll.question)

            subject, from_email, to = '%s has commented on your poll' % comment.user, '*****@*****.**', poll.user.email
            text_content = 'Hello!\nIt looks like %s has commented on your poll: %s.\nJust thought you would like to know!\n\nThanks!\nP.S. If you would like to turn off these emails you can visit your settings from the user profile page.' % (
                comment.user, poll.question)
            html_content = body
            msg = EmailMultiAlternatives(subject, text_content, from_email,
                                         [to])
            msg.attach_alternative(html_content, "text/html")
            try:
                msg.send()
            except:
                # KILL ZEE EXCEPTIONS
                log.error("could not send email to %s" % poll.user.email)
    return HttpResponse()
Exemplo n.º 2
0
def set_chart_type(request):
    chart_type = request.GET.get("val", None)
    if not consts.CHART_TYPES_WHITE_LIST.count(chart_type):
        return HttpResponse(content="Not Saved")
    user = request.user
    
    data = UserService(user=user).getUserData()
    data.default_chart_type = chart_type
    data.save()
    return HttpResponse(content="Saved your selection: %s" % chart_type)
Exemplo n.º 3
0
def which_pic(request):
    val = int(request.GET.get("val", None))
    val = val == 1    
    data = UserService(user=request.user).getUserData()
    data.use_profile_pic = val
    data.save()    
    if val:
        result = "Pollstruck pic"
    else:
        result = "Facebook pic"
    return HttpResponse(content="Saved your selection: %s" % result)
Exemplo n.º 4
0
def email_on_comment_reply(request):
    user = request.user
    val = int(request.GET.get("val", None))
    val = val == 1

    data = UserService(user=user).getUserData()
    data.email_on_comment_reply = val
    data.save()
    if val:
        result = "You will get an email when someone replies to your comment on a poll"
    else:
        result = "You won't get an email when someone replies to your comment on a poll"    
    return HttpResponse(content=result)     
Exemplo n.º 5
0
def link_new_window(request):
    user = request.user
    val = int(request.GET.get("val", None))
    val = val == 1

    data = UserService(user=user).getUserData()
    data.link_in_new_window = val
    data.save()
    if val:
        result = "Open in new window"
    else:
        result = "Open in same window"    
    return HttpResponse(content="Saved your selection: %s" % result)
Exemplo n.º 6
0
def email_on_vote(request):
    user = request.user
    val = int(request.GET.get("val", None))
    val = val == 1

    data = UserService(user=user).getUserData()
    data.email_on_vote = val
    data.save()
    if val:
        result = "You will get an email when someone votes on your poll"
    else:
        result = "You won't receieve an email when someone votes on your poll"    
    return HttpResponse(content="Saved your selection: %s" % result) 
Exemplo n.º 7
0
def get_user_pic(id, size):
    u = User.objects.get(id=id)
    data = UserService(user=u).getUserData()
    if data.facebook_id and (not data.use_profile_pic):
        if size == 'big':
            return '<fb:profile-pic uid="' + str(
                data.facebook_id
            ) + '" linked="false" facebook-logo="true" size="normal" height="128"></fb:profile-pic>'
        elif size == 'medium':
            return '<fb:profile-pic uid="' + str(
                data.facebook_id
            ) + '" linked="false" facebook-logo="true" size="small" height="64"></fb:profile-pic>'
        elif size == 'small':
            return '<fb:profile-pic uid="' + str(
                data.facebook_id
            ) + '" linked="false" facebook-logo="true" size="small" height="24"></fb:profile-pic>'
        else:
            return '<fb:profile-pic uid="' + str(
                data.facebook_id
            ) + '" linked="false" facebook-logo="true" size="tiny" height="16"></fb:profile-pic>'
    else:
        if size == "big":
            return '<img alt="' + u.username + '" src="' + settings_local.USER_FILES_URL + settings_local.USER_FILES_THUMBS_BIG + data.profile_pic + '" />'
        elif size == "medium":
            return '<img alt="' + u.username + '" src="' + settings_local.USER_FILES_URL + settings_local.USER_FILES_THUMBS_MEDIUM + data.profile_pic + '" />'
        elif size == "small":
            return '<img alt="' + u.username + '" src="' + settings_local.USER_FILES_URL + settings_local.USER_FILES_THUMBS_SMALL + data.profile_pic + '" />'
        else:
            return '<img alt="' + u.username + '" src="' + settings_local.USER_FILES_URL + settings_local.USER_FILES_THUMBS_TINY + data.profile_pic + '" />'
Exemplo n.º 8
0
def render(request, template, vars=None):
    baseVars = {}
    baseVars["debug"] = settings.DEBUG
    baseVars["FACEBOOK_API_KEY"] = settings.FACEBOOK_API_KEY
    baseVars["FACEBOOK_SECRET_KEY"] = settings.FACEBOOK_SECRET_KEY

    baseVars["USER_FILES_URL"] = StringUtils.addTrailingSlash(
        settings_local.USER_FILES_URL)
    baseVars["USER_FILES_THUMBS_BIG"] = StringUtils.addTrailingSlash(
        settings_local.USER_FILES_THUMBS_BIG)
    baseVars["USER_FILES_THUMBS_MEDIUM"] = StringUtils.addTrailingSlash(
        settings_local.USER_FILES_THUMBS_MEDIUM)
    baseVars["USER_FILES_THUMBS_SMALL"] = StringUtils.addTrailingSlash(
        settings_local.USER_FILES_THUMBS_SMALL)
    baseVars["USER_FILES_THUMBS_TINY"] = StringUtils.addTrailingSlash(
        settings_local.USER_FILES_THUMBS_TINY)

    baseVars["POLL_FILES_URL"] = StringUtils.addTrailingSlash(
        settings_local.POLL_FILES_URL)
    baseVars["POLL_RESULTS_MAGIC_THRESH"] = consts.POLL_RESULTS_MAGIC_THRESH
    baseVars["SITE_NAME"] = consts.SITE_NAME
    baseVars["leader_board_ad"] = adfactory.get_leaderboard()
    baseVars["med_square_ad"] = adfactory.get_medium_square()

    baseVars[
        "POLL_VOTES_BEFORE_PERMANENTLY_ACTIVE"] = consts.POLL_VOTES_BEFORE_PERMANENTLY_ACTIVE

    tags = Tag.objects.filter().order_by(
        '-poll_count')[:100]  #@UndefinedVariable
    baseVars["header_tags"] = tags
    if request.user.is_authenticated():
        user = request.user
        baseVars["user"] = user
        us = UserService(user)
        data = us.getUserData()
        msgCount = PollsterMessage.objects.filter(
            read=False, to_user=request.user).count()  #@UndefinedVariable
        baseVars["newMail"] = msgCount > 0
        baseVars["newMailCnt"] = msgCount
        baseVars["profile_pic"] = data.profile_pic

    # if conflict between child class and base class vars then child wins
    # so child can override base vars
    if vars:
        baseVars.update(vars)
    return render_to_response(template, baseVars)
Exemplo n.º 9
0
def friend(request):
    id = request.GET.get("id")
    user = User.objects.get(id=id)
    if request.user == user:
        return HttpResponseForbidden("Nope!!")
    
    us = UserService(request.user)
    data = us.getUserData()
    # add friend
    data.friends.add(user)
    data.save()
    
    # do reverse as well
    # TODO: check user settings before auto adding this
    
    to_data = UserService(user).getUserData()
    # add friend
    to_data .friends.add(request.user)
    to_data.save()
    
    # notify user
    ps = PollService()
    subject = "%s added you as  friend" % request.user.username
    body = "Hi, %s has just added you as a friend.  As a result %s has been automatically added to your friends list.\n This is because he/she added you to their list.  You can change this setting in your settings if you like." % (request.user.username, request.user.username)
    ps.sendPollsterMessage(to_user=user, from_user=request.user, subject=subject, body=body)    
    
    return HttpResponse(content="You are now friends!")
Exemplo n.º 10
0
def render(request, template, vars=None):
    baseVars = {}
    baseVars["debug"] = settings.DEBUG
    baseVars["FACEBOOK_API_KEY"] = settings.FACEBOOK_API_KEY
    baseVars["FACEBOOK_SECRET_KEY"] = settings.FACEBOOK_SECRET_KEY
    
    baseVars["USER_FILES_URL"] = StringUtils.addTrailingSlash(settings_local.USER_FILES_URL)
    baseVars["USER_FILES_THUMBS_BIG"] = StringUtils.addTrailingSlash(settings_local.USER_FILES_THUMBS_BIG)
    baseVars["USER_FILES_THUMBS_MEDIUM"] = StringUtils.addTrailingSlash(settings_local.USER_FILES_THUMBS_MEDIUM)
    baseVars["USER_FILES_THUMBS_SMALL"] = StringUtils.addTrailingSlash(settings_local.USER_FILES_THUMBS_SMALL)
    baseVars["USER_FILES_THUMBS_TINY"] = StringUtils.addTrailingSlash(settings_local.USER_FILES_THUMBS_TINY)
    
    baseVars["POLL_FILES_URL"] = StringUtils.addTrailingSlash(settings_local.POLL_FILES_URL)
    baseVars["POLL_RESULTS_MAGIC_THRESH"] = consts.POLL_RESULTS_MAGIC_THRESH
    baseVars["SITE_NAME"] = consts.SITE_NAME
    baseVars["leader_board_ad"] = adfactory.get_leaderboard()
    baseVars["med_square_ad"] = adfactory.get_medium_square()
    
    
    baseVars["POLL_VOTES_BEFORE_PERMANENTLY_ACTIVE"] = consts.POLL_VOTES_BEFORE_PERMANENTLY_ACTIVE
     
    tags = Tag.objects.filter().order_by('-poll_count')[:100]   #@UndefinedVariable
    baseVars["header_tags"] = tags
    if request.user.is_authenticated():
        user = request.user    
        baseVars["user"] = user
        us = UserService(user)
        data = us.getUserData()
        msgCount = PollsterMessage.objects.filter(read=False, to_user=request.user).count()   #@UndefinedVariable
        baseVars["newMail"] = msgCount > 0
        baseVars["newMailCnt"] = msgCount
        baseVars["profile_pic"] = data.profile_pic
        
    
    
     
    # if conflict between child class and base class vars then child wins
    # so child can override base vars
    if vars:
        baseVars.update(vars)    
    return render_to_response(template, baseVars)
Exemplo n.º 11
0
def pic(request, username=None):
    vars= {}
    user = User.objects.get(username=username)
    if user != request.user:
        return HttpResponseForbidden("NopeLOL!")
    us = UserService(user)
    data = us.getUserData()
    if data.profile_pic:
        vars["pic"] = data.profile_pic
    
    form = ProfilePicForm()
    if request.method == 'POST':
        form = ProfilePicForm(request.POST)
        if form.is_valid():
            f = request.FILES['file']
            us.uploadUserPic(f)
            return HttpResponseRedirect("/profile/%s/pic/" % username)
        
    vars["form"] = form
    
    return base.render(request=request, template="user/profile_pic.html", vars=vars)
Exemplo n.º 12
0
def watch_poll(request):
    """
    ajax handler signs up users to watch a poll
    """
    log = logging.getLogger('pollview.watch_poll')
    pid = request.GET.get("pid", None)
    type = request.GET.get("type", None)
    ps = PollService()
    if type == 'a':
        # add the poll to request users watch
        userdata = UserService(request.user).getUserData()
        poll = Poll.objects.get(id=pid, active=True)  #@UndefinedVariable

        if PollWatch.objects.filter(
                user=request.user,
                poll=poll).count() == 0:  #@UndefinedVariable
            pw = PollWatch()
            pw.poll = poll
            pw.user = request.user
            pw.save()
            userdata.polls_watched.add(pw)
            userdata.save()
        else:
            log.error("User trying to watch poll multiple times, user: %s" %
                      request.user.username)
            return HttpResponse("Already watching!")

        if poll.user != request.user:
            # send message to poll creator
            # as long as you arent poll creator
            subject = "%s is watching your poll" % request.user.username
            body = "Hello.  This is just a note to let you know %s is watching your poll '%s'.  Thanks, The Mgmt." % (
                request.user.username, poll.question)
            ps.sendPollsterMessage(to_user=poll.user,
                                   from_user=request.user,
                                   subject=subject,
                                   body=body)

        return HttpResponse("You are watching this poll")
    elif type == 'd':
        userdata = UserService(user=request.user).getUserData()
        poll = Poll.objects.get(id=pid)  #@UndefinedVariable
        pw = PollWatch.objects.get(user=request.user,
                                   poll=poll)  #@UndefinedVariable
        userdata.polls_watched.remove(pw)
        userdata.save()
        pw.delete()
        return HttpResponse("You are no longer watching this poll")

    return HttpResponseForbidden("unauthorized")
Exemplo n.º 13
0
def index(request, username=None, polls=None, vars=None, page_num=1, page_link_prefix=None):
    #if vars == None:
    #    return voted_on(request, username=username, page_num=page_num)
        #vars = {"class":"index-view"}
        
    user_for_profile = None
    if username == None:
        # if no username specified then just display 
        # profile of user who is logged in
        user_for_profile = request.user
    else:
        user_for_profile = User.objects.get(username=username)    
    vars["user_for_profile"] = user_for_profile
    
    vars['show_ad'] = True

    # get some sweet user stats!
    total_polls_count = Poll.objects.filter(active=1).count() #@UndefinedVariable
    user_polls_count = Poll.objects.filter(user=user_for_profile, active=1).count() #@UndefinedVariable
    vars["user_polls_count"] = user_polls_count
    if total_polls_count > 0:
        vars["user_polls_percent"] = (1.0 * user_polls_count / total_polls_count) * 100
    user_comments_count = 0
    poll_set = set()
    for tc in ThreadedComment.objects.filter(user=user_for_profile):
        poll_set.add(tc.object_id)
        user_comments_count+=1
    vars["user_comments_count"] = user_comments_count
    vars["user_poll_comments"] = len(poll_set)
    user_votes_count = PollVote.objects.filter(user=user_for_profile).count() #@UndefinedVariable
    vars["user_votes_count"] = user_votes_count
    if total_polls_count > 0:
        vars["user_votes_percent"] = (1.0 * user_votes_count / total_polls_count) * 100
        
    
    # check owner
    owner = user_for_profile.username == request.user.username
    vars["owner"] = owner

    # pass in the logged in user
    if not vars.has_key('activity'):
        if not page_link_prefix:
            page_link_prefix = "/profile/%s" % user_for_profile.username        
        polls = PollService().getPollsForLister(polls, request.user, page_num=page_num, page_link_prefix=page_link_prefix)
        vars.update(polls)
    else:
        pass
        
    vars["user_prof_data"] = UserService(user_for_profile).getUserData()
    vars["messageForm"] = MessageForm()
    return base.render(request, "user/profile.html", vars)
Exemplo n.º 14
0
def watch_poll(request):
    """
    ajax handler signs up users to watch a poll
    """    
    log = logging.getLogger('pollview.watch_poll')
    pid = request.GET.get("pid", None)
    type = request.GET.get("type", None)
    ps = PollService()
    if type == 'a':
        # add the poll to request users watch
        userdata = UserService(request.user).getUserData()
        poll = Poll.objects.get(id=pid, active=True) #@UndefinedVariable
        
        if PollWatch.objects.filter(user=request.user, poll=poll).count() == 0: #@UndefinedVariable
            pw = PollWatch()
            pw.poll = poll
            pw.user = request.user
            pw.save()
            userdata.polls_watched.add(pw)                
            userdata.save()
        else:        
            log.error("User trying to watch poll multiple times, user: %s" % request.user.username)
            return HttpResponse("Already watching!")
        
                
        if poll.user != request.user:
            # send message to poll creator
            # as long as you arent poll creator
            subject = "%s is watching your poll" % request.user.username
            body = "Hello.  This is just a note to let you know %s is watching your poll '%s'.  Thanks, The Mgmt." % (request.user.username, poll.question)
            ps.sendPollsterMessage(to_user=poll.user, from_user=request.user, subject=subject, body=body)
            
            
        
        return HttpResponse("You are watching this poll")
    elif type == 'd':
        userdata = UserService(user=request.user).getUserData()        
        poll = Poll.objects.get(id=pid) #@UndefinedVariable
        pw = PollWatch.objects.get(user=request.user, poll=poll) #@UndefinedVariable
        userdata.polls_watched.remove(pw)
        userdata.save()
        pw.delete()
        return HttpResponse("You are no longer watching this poll")
    
    return HttpResponseForbidden("unauthorized")
Exemplo n.º 15
0
    def handle_noargs(self, **options):
        users = [
            "yoyo_champion", "speakerbox", "camera-obscura", "chessmstr9000",
            "beerguy25", "LA girl", "bikethief", "punkyparty", "jonjon",
            "nkomar", "tracerbullet", "napolean", "polldancer",
            "answer_master", "slashdot_guy", "power_poller", "stlcl",
            "smither palmer", "23skidoo", "leslie anne", "mary w",
            "charleswes", "jerkateer", "band-aid", "cameragirl", "brodeo5000",
            "mona lisa", "cigbum", "toker", "superdrunkie", "moleskinnotebook",
            "needanotherbeer", "superbutt", "shopping maniac", "disco stu",
            "chef", "sgt terry", "wolfshirt", "ted streetcar", "dc", "ew",
            "dakur", "starpony", "zoop", "higgins", "nineve", "salstress",
            "mario", "miaux", "theo", "millicent", "moss", "multimind",
            "sefafim", "dddave", "bukowski", "misses", "xartet", "bougyman",
            "merreck", "magus", "igor", "furcifer"
        ]

        print len(users)
        raise PollsterException("Are you sure you are creating new users?")
        for user in users:
            user = UserService().createUser(username=user,
                                            email=user + "@parsworld.com",
                                            password="******")
            self.log.debug('created %s' % user.username)
Exemplo n.º 16
0
def index(request, poll_url=None, demographics=None, preview=False):
    """
    index handler
    """

    log = logging.getLogger("POLL VIEW")
    pollService = PollService()
    vars = {}
    vars['show_ad'] = True
    vars["pollview"] = True
    vars["preview"] = preview
    p = None
    random_poll = pollService.get_random_polls(1, request.user)
    if len(random_poll) > 0:
        vars["random_poll"] = random_poll[0]
    if poll_url == None:
        return HttpResponseRedirect("/view-poll/%s/" % random_poll.url)
    else:
        try:
            # get the poll and its tags
            if preview:
                p = Poll.objects.get(url=poll_url)  #@UndefinedVariable
                if request.user != p.user:
                    log.debug(
                        "User %s trying to preview poll he doesn't own, %s" %
                        (request.user.username, p.url))
                    raise Http404
            else:
                p = Poll.objects.get(url=poll_url,
                                     active=True)  #@UndefinedVariable
        except Poll.DoesNotExist:  #@UndefinedVariable
            log.debug(
                "Attempt to view poll which is not active or does not exist, trying to send to create, slug: %s"
                % poll_url)
            return HttpResponseRedirect("/create-poll/answers/%s/" % poll_url)

    tags = p.tags.all()
    vars["tags"] = tags
    vars["poll"] = p
    if p.description and p.description != "":
        vars["poll_desc"] = p.description
    if p.link:
        vars["domain"] = urlparse(p.link)[1]

    if p.total_votes == 0:
        vars["noVotes"] = True

    # get the poll files
    pf = PollFile.objects.filter(poll=p)  #@UndefinedVariable
    vars["pollFiles"] = pollService.get_poll_file_w_icons(pf)

    # check for content box
    if len(pf) > 0 or p.video_link or p.link:
        vars["showContentBox"] = True

    # do not show voting form if user has already voted
    form = None

    results = pollService.get_poll_results(p, drop_zero_results=False)

    # user is logged in
    if request.user.is_authenticated():
        # check to see if user is watching this
        us = UserService(request.user)
        data = us.getUserData()
        if data.polls_watched.filter(poll=p).count() > 0:
            vars["watching"] = True

        if request.user == p.user:
            vars["creator"] = True

        # get the answer forms
        try:
            # check if user has voted
            poll_vote = PollVote.objects.get(
                poll=p, user=request.user)  #@UndefinedVariable
            vars['your_answer'] = poll_vote.poll_answer.answer
        except PollVote.DoesNotExist:  #@UndefinedVariable
            # they haven't so show them the answer form
            form = poll_answer_style_factory(consts.PREDEFINED_ANSWERS, p,
                                             results)
        except PollVote.MultipleObjectsReturned:  #@UndefinedVariable
            # oh jesus, somehow they have multiple votes, log it and take their first one
            poll_vote = PollVote.objects.filter(
                poll=p, user=request.user)[0]  #@UndefinedVariable
            logging.getLogger("PollView").critical(
                "user has more than one vote for a poll id: %d and user: %s." %
                (p.id, request.user.username))
    else:
        form = poll_answer_style_factory(consts.PREDEFINED_ANSWERS, p, results)

    # open flash chart
    demographic_url_param = ''
    if demographics:
        demographic_url_param = demographics

    ansForm = AnswerForm()
    vars["answerForm"] = ansForm
    vars['form'] = form

    # poll display type
    chart_type = consts.DEFAULT_CHART_TYPE
    vars["link_in_new_window"] = True
    if request.user.is_authenticated():
        data = UserService(request.user).getUserData()
        vars["link_in_new_window"] = data.link_in_new_window
        chart_type = data.default_chart_type

    # get the gchart
    vars["chart_type"] = chart_type
    gcf = GChartFactory()
    res_w_votes = []
    res_wo_votes = []
    # grab only the results with votes to display on the chart
    for r in results:
        if r.votes > 0:
            res_w_votes.append(r)
        else:
            res_wo_votes.append(r)
    pchart = gcf.get_chart(res_w_votes)
    vars["gChart"] = pchart.get_url()
    vars["results"] = res_w_votes
    vars['results_wo_votes'] = res_wo_votes

    # create description tag:
    description = ""
    description += "Is it: "
    for i in range(0, len(vars["results"])):
        a = vars["results"][i]
        if isinstance(a.answer, PollAnswer):
            description += a.answer.answer + ", "
            if i + 1 == len(vars["results"]) - 1:
                description += "or "
    description = description.rstrip(", ")
    description += "?  "
    if p.description:
        description += p.description
    vars["meta_desc"] = description

    if p.link:
        vars['domain'] = urlparse(p.link)
    return base.render(request, "pollview.html", vars)
Exemplo n.º 17
0
def watching(request, username=None, page_num=1):
    us = UserService(user=User.objects.get(username=username))
    polls = us.getPollsWatched()
    return index(request, username, polls, {"class":"watch-view"}, page_num=page_num, page_link_prefix="/profile/%s/watching" % username)
Exemplo n.º 18
0
    def getUserFeed(self, user, owner=False, phase=0, request_user=None):
        """
        Gets the activity feed for a user
        This method is the hoss method of all methods in methodtown
        """
        
        us = UserService(user=user)
        userdata = us.getUserData()
        userdata_friends = userdata.friends.all()
        if not owner:
            request_user_friends = UserService(user=request_user).getFriends()
            friend_ids = [friend.id for friend in request_user_friends]
            userdata_friends = userdata_friends.filter(id__in=friend_ids) 
                        
        user_feed = []
        # create the motherfuckin window bitches!!!!!!
        start_index = phase * consts.POLL_ACTIVITY_WINDOW
        end_index = (phase+1) *  consts.POLL_ACTIVITY_WINDOW
        self.log.debug("start index: %d -- end index: %d" % (start_index, end_index))
        self.log.debug("Phase: %d" % phase)
        if owner:
            # only show friends stuff on owner feed
            for f in userdata_friends:
                # get polls friends created                
                friend_polls = Poll.objects.filter(user=f, active=True).order_by('-date_created')   #@UndefinedVariable
                for fp in friend_polls:
                    timestamp = time.mktime(fp.date_created.timetuple())
                    ci = CreatedItem(timestamp=timestamp, poll=fp, date=fp.date_created)
                    ci.friend_related = True
                    user_feed.append(ci)
                    
                # get friends votes
                friend_votes = PollVote.objects.filter(user=f).order_by('-date_created')   #@UndefinedVariable
                for fv in friend_votes:
                    timestamp = time.mktime(fv.date_created.timetuple())
                    vi = VoteItem(vote=fv, timestamp=timestamp, poll=fv.poll, date=fv.date_created)
                    vi.friend_related = True
                    vi.friend_voted = True
                    user_feed.append(vi)
                
                # get friends comments
                friend_comments = ThreadedComment.objects.filter(user=f).order_by('-date_modified')
                for fc in friend_comments:
                    timestamp = time.mktime(fc.date_modified.timetuple())
                    ci = CommentItem(comment=fc, timestamp=timestamp, poll=fc.content_object, date=fc.date_modified)
                    ci.friend_related = True
                    ci.friend_commented = True
                    user_feed.append(ci)

        # get polls created by user
        user_polls = Poll.objects.filter(user=user, active=True).order_by('-date_created')   #@UndefinedVariable
        for poll in user_polls:
            self.appendPollVotesAndComments(user_feed=user_feed, poll=poll, user_related=True, start_index=start_index, end_index=end_index)
            
            # add polls user created
            timestamp = time.mktime(poll.date_created.timetuple())
            ci = CreatedItem(timestamp=timestamp, poll=poll, date=poll.date_created)
            ci.user_related = True
            user_feed.append(ci)
        
        # get user's watched polls
        watched_polls = userdata.polls_watched.order_by('-poll__date_modified')                
        for wp in watched_polls:
            self.appendPollVotesAndComments(user_feed=user_feed, poll=wp.poll, watching=True, start_index=start_index, end_index=end_index)
        
        # get users votes
        user_votes = PollVote.objects.filter(user=user).order_by('-date_created')   #@UndefinedVariable
        for uv in user_votes:
            timestamp = time.mktime(uv.date_created.timetuple())
            vi = VoteItem(vote=uv, timestamp=timestamp, poll=uv.poll, date=uv.date_created)
            try:
                vi = user_feed[user_feed.index(vi)]                                        
            except ValueError:                                
                user_feed.append(vi)
            vi.user_voted = True
        
        # get user comments
        user_comments = ThreadedComment.objects.filter(user=user).order_by('-date_modified')
        for uc in user_comments:
            timestamp = time.mktime(uc.date_modified.timetuple())
            ci = CommentItem(comment=uc, timestamp=timestamp, poll=uc.content_object, date=uc.date_modified)
            try:
                ci = user_feed[user_feed.index(ci)]                                        
            except ValueError:                                
                user_feed.append(ci)
            ci.user_commented = True
        
        # sort that shit out
        remain = len(user_feed) > end_index
        user_feed.sort()
        user_feed.reverse()
        # TODO: FOR THE LOVE OF GOD CACHE THE F*****G USER_FEED RIGHT HERE!!!!!!!!!!!!!!!!!!!!!!!!!!
        user_feed = user_feed[start_index:end_index]
        return user_feed, remain
Exemplo n.º 19
0
def facebook_connect(request):
    next = request.GET.get("next", None)
    vars = {}
    form = FacebookConnectForm()
    vars["form"] = form

    log = logging.getLogger('facebook_connect')
    request.session['session_key'] = request.COOKIES.get(
        settings.FACEBOOK_API_KEY + '_session_key')
    request.session['uid'] = request.COOKIES.get(settings.FACEBOOK_API_KEY +
                                                 '_uid')
    log.debug("session key: " + str(request.session['session_key']))
    log.debug("uid: " + str(request.session['uid']))
    fb = FacebookService().getFacebookSession(request)
    if not fb:
        log.critical("Facebook Service did not initialize")
        return HttpResponseRedirect(fb.get_login_url())

    vars["fb"] = fb
    uid = fb.users.getLoggedInUser()
    uid = int(uid)
    log.debug("user id: " + str(uid))

    try:
        data = UserData.objects.get(facebook_id=uid)  #@UndefinedVariable
        # user already has facebook connected to an account
        # just log them in and redirect them
        user = User.objects.get(id=data.user.id)
        log.debug("User already exists...")
        if not request.user.is_authenticated():
            user = auth.authenticate(
                username=user.username,
                password=FacebookService().getUserPassword(uid))
            try:
                auth.login(request, user)
            except NotImplementedError:
                # user already had a pollstruck account with a diff password
                vars["login_block"] = True
                vars["no_facebook"] = True
                vars["form"] = LoginForm()
                return base.render(request=request,
                                   template="user/facebook_connect.html",
                                   vars=vars)
        if next:
            return HttpResponseRedirect(next)
        return HttpResponseRedirect("/profile/%s/" % user.username)
    except UserData.DoesNotExist:  #@UndefinedVariable

        if request.user.is_authenticated() and request.user.userdata_set.get(
                user=request.user).facebook_id == None:
            log.debug("linking accounts")
            # user has pollstruck account already but no facebook
            # link their account to facebook automatically
            us = UserService(user=request.user)
            data = us.getUserData()
            data.facebook_id = uid
            data.save()
            if next:
                return HttpResponseRedirect(next)
            return HttpResponseRedirect('/profile/%s/' % request.user.username)

    # they are good to go
    if request.method == 'POST':
        form = FacebookConnectForm(request.POST)
        vars["form"] = form
        if form.is_valid():
            # create a user for the facebook user
            username = form.cleaned_data["username"]
            email = form.cleaned_data["email"]
            if User.objects.filter(username=username).count() > 0:
                vars["user_error"] = "That username exists"
                return base.render(request=request,
                                   template="user/facebook_connect.html",
                                   vars=vars)
            if User.objects.filter(email=email).count() > 0:
                vars["email_error"] = "That email exists"
                return base.render(request=request,
                                   template="user/facebook_connect.html",
                                   vars=vars)

            us = UserService()
            user = us.createUser(
                username=username,
                email=email,
                password=FacebookService().getUserPassword(uid))
            auth.login(request, user)
            data = us.getUserData()
            data.facebook_id = uid
            # default all *new* incoming facebook users to use their facebook pic
            data.use_profile_pic = False
            data.save()
            if next:
                return HttpResponseRedirect(next)
            return HttpResponseRedirect('/')
    else:
        pass

    return base.render(request=request,
                       template="user/facebook_connect.html",
                       vars=vars)
Exemplo n.º 20
0
    def getUserFeed(self, user, owner=False, phase=0, request_user=None):
        """
        Gets the activity feed for a user
        This method is the hoss method of all methods in methodtown
        """

        us = UserService(user=user)
        userdata = us.getUserData()
        userdata_friends = userdata.friends.all()
        if not owner:
            request_user_friends = UserService(user=request_user).getFriends()
            friend_ids = [friend.id for friend in request_user_friends]
            userdata_friends = userdata_friends.filter(id__in=friend_ids)

        user_feed = []
        # create the motherfuckin window bitches!!!!!!
        start_index = phase * consts.POLL_ACTIVITY_WINDOW
        end_index = (phase + 1) * consts.POLL_ACTIVITY_WINDOW
        self.log.debug("start index: %d -- end index: %d" %
                       (start_index, end_index))
        self.log.debug("Phase: %d" % phase)
        if owner:
            # only show friends stuff on owner feed
            for f in userdata_friends:
                # get polls friends created
                friend_polls = Poll.objects.filter(
                    user=f,
                    active=True).order_by('-date_created')  #@UndefinedVariable
                for fp in friend_polls:
                    timestamp = time.mktime(fp.date_created.timetuple())
                    ci = CreatedItem(timestamp=timestamp,
                                     poll=fp,
                                     date=fp.date_created)
                    ci.friend_related = True
                    user_feed.append(ci)

                # get friends votes
                friend_votes = PollVote.objects.filter(user=f).order_by(
                    '-date_created')  #@UndefinedVariable
                for fv in friend_votes:
                    timestamp = time.mktime(fv.date_created.timetuple())
                    vi = VoteItem(vote=fv,
                                  timestamp=timestamp,
                                  poll=fv.poll,
                                  date=fv.date_created)
                    vi.friend_related = True
                    vi.friend_voted = True
                    user_feed.append(vi)

                # get friends comments
                friend_comments = ThreadedComment.objects.filter(
                    user=f).order_by('-date_modified')
                for fc in friend_comments:
                    timestamp = time.mktime(fc.date_modified.timetuple())
                    ci = CommentItem(comment=fc,
                                     timestamp=timestamp,
                                     poll=fc.content_object,
                                     date=fc.date_modified)
                    ci.friend_related = True
                    ci.friend_commented = True
                    user_feed.append(ci)

        # get polls created by user
        user_polls = Poll.objects.filter(user=user, active=True).order_by(
            '-date_created')  #@UndefinedVariable
        for poll in user_polls:
            self.appendPollVotesAndComments(user_feed=user_feed,
                                            poll=poll,
                                            user_related=True,
                                            start_index=start_index,
                                            end_index=end_index)

            # add polls user created
            timestamp = time.mktime(poll.date_created.timetuple())
            ci = CreatedItem(timestamp=timestamp,
                             poll=poll,
                             date=poll.date_created)
            ci.user_related = True
            user_feed.append(ci)

        # get user's watched polls
        watched_polls = userdata.polls_watched.order_by('-poll__date_modified')
        for wp in watched_polls:
            self.appendPollVotesAndComments(user_feed=user_feed,
                                            poll=wp.poll,
                                            watching=True,
                                            start_index=start_index,
                                            end_index=end_index)

        # get users votes
        user_votes = PollVote.objects.filter(user=user).order_by(
            '-date_created')  #@UndefinedVariable
        for uv in user_votes:
            timestamp = time.mktime(uv.date_created.timetuple())
            vi = VoteItem(vote=uv,
                          timestamp=timestamp,
                          poll=uv.poll,
                          date=uv.date_created)
            try:
                vi = user_feed[user_feed.index(vi)]
            except ValueError:
                user_feed.append(vi)
            vi.user_voted = True

        # get user comments
        user_comments = ThreadedComment.objects.filter(
            user=user).order_by('-date_modified')
        for uc in user_comments:
            timestamp = time.mktime(uc.date_modified.timetuple())
            ci = CommentItem(comment=uc,
                             timestamp=timestamp,
                             poll=uc.content_object,
                             date=uc.date_modified)
            try:
                ci = user_feed[user_feed.index(ci)]
            except ValueError:
                user_feed.append(ci)
            ci.user_commented = True

        # sort that shit out
        remain = len(user_feed) > end_index
        user_feed.sort()
        user_feed.reverse()
        # TODO: FOR THE LOVE OF GOD CACHE THE F*****G USER_FEED RIGHT HERE!!!!!!!!!!!!!!!!!!!!!!!!!!
        user_feed = user_feed[start_index:end_index]
        return user_feed, remain
Exemplo n.º 21
0
    def getPollsForLister(self,
                          polls=None,
                          user=None,
                          page_num=1,
                          page_link_prefix=""):
        """
        @param user: ALWAYS the request.user 
        given a list of poll objects, this will return a hash with a 
        list of tuples with the following order 
        {
            "paginator":paginator object,
            "polls":[(poll, file, tags), ...]
        }        
        
        This badboy also returns some major paging shit!!!!!
        
        """
        if polls == None:
            return None

        request_user = user

        pollListerHash = {}

        paged_polls = Paginator(polls, consts.POLL_LISTER_RPP)
        pollListerHash["paginator"] = paged_polls
        pollListerHash["total"] = len(polls)
        polls_page = paged_polls.page(page_num)

        page_hash = paging_utils.setup_page_hash(
            paginator=paged_polls,
            page_num=page_num,
            page_link_prefix=page_link_prefix)
        pollListerHash.update(page_hash)

        polls = polls_page.object_list
        aug_polls = []

        # go over db polls
        for p in polls:
            file = None
            poll_files = p.pollfile_set.all()
            len_pf = len(poll_files)
            more_pics = None

            # check the files first
            # do single or more picture logic
            if len_pf > 0:
                more_pics = 1
                if len_pf > 1:
                    more_pics = 2
                for pf in poll_files:
                    if pf.main_file == True:
                        # set main thumbnail if selected
                        file = pf.file
                if file == None:
                    file = poll_files[0].file

            # get the tags
            tags = p.tags.all()

            # store the link domain
            domain = urlparse(p.link)

            # check if the REQUEST user has voted
            voted = False
            watching = False
            if request_user and request_user.is_authenticated():
                count = p.pollvote_set.filter(user=request_user).count()
                if count > 0:
                    voted = True
                rqst_us = UserService(user=request_user).getUserData()
                if rqst_us.polls_watched.filter(poll=p).count() > 0:
                    watching = True

            # store it all on the super tuple
            # gets unpacked in the lister
            icons = False
            if p.link or more_pics or p.video_link:
                icons = True
            poll_user_data = UserService(p.user).getUserData()

            results = self.get_poll_results(p, drop_zero_results=True)
            gcf = GChartFactory()
            gchart = gcf.get_chart(results, 125, 125)

            pollhash = {}
            pollhash['poll'] = p
            pollhash['file'] = file
            pollhash['more_pics'] = more_pics
            pollhash['tags'] = tags
            pollhash['domain'] = domain
            pollhash['voted'] = voted
            pollhash['icons'] = icons
            pollhash['poll_user_data'] = poll_user_data
            pollhash['watching'] = watching
            if p.total_votes > 0:
                pollhash['chart_url'] = gchart.get_url()
            else:
                pollhash[
                    'chart_url'] = '/i/icons/chart_ph%d.png' % random.randint(
                        1, 3)
            aug_polls.append(pollhash)

            #aug_polls.append((p, file, more_pics, tags, domain[1], voted, icons, poll_user_data, watching))

        pollListerHash["polls"] = aug_polls

        return pollListerHash
Exemplo n.º 22
0
def index(request, poll_url=None, demographics=None, preview=False):
    """
    index handler
    """
    
    log = logging.getLogger("POLL VIEW")
    pollService = PollService()
    vars = {}
    vars['show_ad'] = True
    vars["pollview"] = True
    vars["preview"] = preview
    p = None
    random_poll = pollService.get_random_polls(1, request.user)
    if len(random_poll) > 0:        
        vars["random_poll"] = random_poll[0]
    if poll_url == None:        
        return HttpResponseRedirect("/view-poll/%s/" % random_poll.url)        
    else:       
        try:
            # get the poll and its tags                
            if preview:
                p = Poll.objects.get(url=poll_url) #@UndefinedVariable
                if request.user != p.user:
                    log.debug("User %s trying to preview poll he doesn't own, %s" % (request.user.username, p.url))
                    raise Http404
            else:
                p = Poll.objects.get(url=poll_url, active=True) #@UndefinedVariable
        except Poll.DoesNotExist: #@UndefinedVariable
            log.debug("Attempt to view poll which is not active or does not exist, trying to send to create, slug: %s" % poll_url)
            return HttpResponseRedirect("/create-poll/answers/%s/" % poll_url)    
    
    tags = p.tags.all()
    vars["tags"] = tags
    vars["poll"] = p
    if p.description and p.description != "":
        vars["poll_desc"] = p.description
    if p.link:
        vars["domain"] = urlparse(p.link)[1]
    
    if p.total_votes == 0:
        vars["noVotes"] = True
    
    
    # get the poll files
    pf = PollFile.objects.filter(poll=p) #@UndefinedVariable
    vars["pollFiles"] = pollService.get_poll_file_w_icons(pf)
    
    # check for content box
    if len(pf) > 0 or p.video_link or p.link:
        vars["showContentBox"] = True
    
    # do not show voting form if user has already voted
    form = None     

    results = pollService.get_poll_results(p, drop_zero_results=False)

    # user is logged in   
    if request.user.is_authenticated():
        # check to see if user is watching this
        us = UserService(request.user)
        data = us.getUserData() 
        if data.polls_watched.filter(poll=p).count() > 0:
            vars["watching"] = True
                
        if request.user == p.user:
            vars["creator"] = True
        
        # get the answer forms
        try:
            # check if user has voted
            poll_vote = PollVote.objects.get(poll=p, user=request.user) #@UndefinedVariable
            vars['your_answer'] = poll_vote.poll_answer.answer
        except PollVote.DoesNotExist: #@UndefinedVariable
            # they haven't so show them the answer form
            form = poll_answer_style_factory(consts.PREDEFINED_ANSWERS, p, results)
        except PollVote.MultipleObjectsReturned: #@UndefinedVariable
            # oh jesus, somehow they have multiple votes, log it and take their first one
            poll_vote = PollVote.objects.filter(poll=p, user=request.user)[0] #@UndefinedVariable
            logging.getLogger("PollView").critical("user has more than one vote for a poll id: %d and user: %s." % (p.id, request.user.username)) 
    else:
        form = poll_answer_style_factory(consts.PREDEFINED_ANSWERS, p, results)

    # open flash chart
    demographic_url_param = ''
    if demographics:
        demographic_url_param = demographics
    
    ansForm = AnswerForm()
    vars["answerForm"] = ansForm
    vars['form'] = form
    
    
    # poll display type
    chart_type = consts.DEFAULT_CHART_TYPE
    vars["link_in_new_window"] = True
    if request.user.is_authenticated():
        data = UserService(request.user).getUserData()
        vars["link_in_new_window"] = data.link_in_new_window
        chart_type = data.default_chart_type
    
    # get the gchart
    vars["chart_type"] = chart_type
    gcf = GChartFactory()
    res_w_votes = []
    res_wo_votes = []
    # grab only the results with votes to display on the chart
    for r in results:
        if r.votes > 0:
            res_w_votes.append(r)
        else:
            res_wo_votes.append(r)
    pchart = gcf.get_chart(res_w_votes)
    vars["gChart"] = pchart.get_url()
    vars["results"] = res_w_votes
    vars['results_wo_votes'] = res_wo_votes
    
    # create description tag:
    description = ""
    description += "Is it: "
    for i in range(0, len(vars["results"])):
        a = vars["results"][i]
        if isinstance(a.answer, PollAnswer):            
            description += a.answer.answer + ", "
            if i+1 == len(vars["results"]) - 1:
                description += "or "
    description = description.rstrip(", ")
    description += "?  "
    if p.description:
        description += p.description
    vars["meta_desc"] = description
    
    if p.link:
        vars['domain'] = urlparse(p.link)  
    return base.render(request, "pollview.html", vars)
Exemplo n.º 23
0
def facebook_connect(request):
    next = request.GET.get("next", None)
    vars = {}
    form = FacebookConnectForm()
    vars["form"] = form
    
    log = logging.getLogger('facebook_connect')
    request.session['session_key'] = request.COOKIES.get(settings.FACEBOOK_API_KEY + '_session_key')
    request.session['uid'] = request.COOKIES.get(settings.FACEBOOK_API_KEY + '_uid')
    log.debug("session key: " + str(request.session['session_key'])) 
    log.debug("uid: " + str(request.session['uid'])) 
    fb = FacebookService().getFacebookSession(request)
    if not fb:
        log.critical("Facebook Service did not initialize")
        return HttpResponseRedirect(fb.get_login_url())
    
    vars["fb"] = fb    
    uid = fb.users.getLoggedInUser()
    uid = int(uid)
    log.debug("user id: " + str(uid))
        
    try:
        data = UserData.objects.get(facebook_id=uid)      #@UndefinedVariable
        # user already has facebook connected to an account
        # just log them in and redirect them        
        user = User.objects.get(id=data.user.id)
        log.debug("User already exists...")
        if not request.user.is_authenticated():
            user = auth.authenticate(username=user.username, password=FacebookService().getUserPassword(uid))
            try:            
                auth.login(request, user)
            except NotImplementedError:
                # user already had a pollstruck account with a diff password
                vars["login_block"] = True
                vars["no_facebook"] = True
                vars["form"] = LoginForm()
                return base.render(request=request, template="user/facebook_connect.html", vars=vars)            
        if next:
            return HttpResponseRedirect(next)
        return HttpResponseRedirect("/profile/%s/" % user.username)
    except UserData.DoesNotExist:      #@UndefinedVariable
        
        if request.user.is_authenticated() and request.user.userdata_set.get(user=request.user).facebook_id == None:
            log.debug("linking accounts")
            # user has pollstruck account already but no facebook
            # link their account to facebook automatically
            us = UserService(user=request.user)
            data = us.getUserData()
            data.facebook_id = uid 
            data.save()
            if next:
                return HttpResponseRedirect(next)
            return HttpResponseRedirect('/profile/%s/' % request.user.username)
        
        
    # they are good to go
    if request.method == 'POST':
        form = FacebookConnectForm(request.POST)
        vars["form"] = form
        if form.is_valid():
            # create a user for the facebook user
            username = form.cleaned_data["username"]
            email = form.cleaned_data["email"]
            if User.objects.filter(username=username).count() > 0:                
                vars["user_error"] = "That username exists"
                return base.render(request=request, template="user/facebook_connect.html", vars=vars)
            if User.objects.filter(email=email).count() > 0:
                vars["email_error"] = "That email exists"
                return base.render(request=request, template="user/facebook_connect.html", vars=vars)
                
            us = UserService()
            user = us.createUser(username=username, email=email, password=FacebookService().getUserPassword(uid))            
            auth.login(request, user)
            data = us.getUserData()
            data.facebook_id = uid
            # default all *new* incoming facebook users to use their facebook pic
            data.use_profile_pic = False 
            data.save()            
            if next:
                return HttpResponseRedirect(next)
            return HttpResponseRedirect('/')
    else:
        pass

    return base.render(request=request, template="user/facebook_connect.html", vars=vars)
Exemplo n.º 24
0
def index(request):
    next = request.GET.get("next", None)
    if request.user.is_authenticated():
        if next:
            return HttpResponseRedirect(next)
        else:
            return HttpResponseRedirect('/')
    vars = {}
    if request.method == 'POST':  # If the form has been submitted...
        cap_image = request.META['REMOTE_ADDR'] + '.jpg'

        form = RegForm(request.POST)  # A form bound to the POST data
        if form.is_valid():  # All validation rules pass
            name = form.cleaned_data["name"]
            if name and name != "":
                #  check the name honey pot,
                # if it has anything, return a 404, as to confuse
                # the ... SCUM BAGS!
                return HttpResponseNotFound(content="Not found")

            if form.cleaned_data["username"].strip() == "":
                return base.render(
                    request, "register.html", {
                        "cap_image": cap_image,
                        "form": form,
                        "error": "Please enter a valid username"
                    })
            if form.cleaned_data["password"] != form.cleaned_data[
                    "confirm_password"]:
                return base.render(
                    request, "register.html", {
                        "cap_image": cap_image,
                        "form": form,
                        "error": "Passwords do not match"
                    })
            if models.User.objects.filter(
                    username=form.cleaned_data["username"]).count() > 0:
                return base.render(request, "register.html", {
                    "cap_image": cap_image,
                    "form": form,
                    "error": "User exists"
                })
            if models.User.objects.filter(
                    email=form.cleaned_data["email"]).count() > 0:
                return base.render(request, "register.html", {
                    "cap_image": cap_image,
                    "form": form,
                    "error": "Email exists"
                })
            if form.cleaned_data['imghash'] != sha.new(
                    SALT + form.cleaned_data['imgtext']).hexdigest():
                return base.render(
                    request, "register.html", {
                        "cap_image": cap_image,
                        "form": form,
                        "error": "Please enter the correct text"
                    })

            # register the user
            username = cleanName(form.cleaned_data["username"])
            user = UserService().createUser(
                username=username,
                email=form.cleaned_data["email"],
                password=form.cleaned_data["password"])
            if user is not None:
                auth.login(request, user)

            # check redirects
            next = form.cleaned_data.get("next", None)
            if next.strip() == "": next = None

            if next:
                return HttpResponseRedirect(next)  # Redirect after POST
            return HttpResponseRedirect(
                '/register/thanks/')  # Redirect after POST
    else:
        imghash, imgname = get_captcha(request)
        cap_image = imgname
        initial = {"next": next, "imghash": imghash}
        form = RegForm(initial=initial)  # An unbound form

    vars["cap_image"] = cap_image
    vars["form"] = form
    return base.render(request, "register.html", vars)