예제 #1
0
파일: login.py 프로젝트: adatapost/pollster
def index(request):    
    if request.user.is_authenticated():
        return HttpResponseRedirect("/profile/%s/" % request.user.username)

    next = request.GET.get("next", None)

    if request.method == 'POST': # If the form has been submitted...
        form = LoginForm(request.POST)
        if form.is_valid(): # All validation rules pass
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = auth.authenticate(username=username, password=password)
            if user is not None:
                # TODO: AYT #if user.is_active:
                auth.login(request, user)

                # get next redirect
                next = request.POST.get("next", None)
                if next == None or next == 'None':
                    return HttpResponseRedirect('/profile/%s/' % user.username) # Redirect after POST
                else:
                    return HttpResponseRedirect(str(next)) # Redirect after POST
            else:
                
                return base.render(request, "login.html", {"form":form, "errors":"Wrong username or password.  Can't log you in!",})
    else:
        form = LoginForm() # An unbound form

    return base.render(request, "login.html", {"form":form, "next":next})
예제 #2
0
파일: profile.py 프로젝트: partriv/pollster
def change_password(request, username=None):
    user = User.objects.get(username=username)
    if request.user != user:
        return HttpResponseNotFound()
    vars = {}
    
    if request.method == 'POST':
        form = ChangePasswordForm(request.POST)
        if form.is_valid():
            old_pw = form.cleaned_data["old_password"]
            new_pw = form.cleaned_data["new_password"]
            conf_new_pw = form.cleaned_data["confirm_new_password"]
            if user.check_password(old_pw):
                if new_pw == conf_new_pw:
                    user.set_password(new_pw)
                    user.save()
                    return HttpResponseRedirect("/profile/%s/" % user.username)
                else:
                    vars["error"] = "Your passwords do not match"    
            else:
                vars["error"] = "Your old password is incorrect"
        vars["form"] = form                            
    else:
        vars["form"] = ChangePasswordForm()
    return base.render(request=request, template="user/change_password.html", vars=vars)
예제 #3
0
def index(request,
          selected='recent',
          db_polls=None,
          daysago=None,
          page_num=1,
          page_link_prefix="",
          time_link_prefix=""):
    # PollService().reconcileTagCount()
    # PollService().reconcilePollVoteCounts()
    # PollService().reconcileUntaggedPolls()
    # PollService().reconcilePollCommentsCount()
    # PollService().resizeAnswerColumn()
    print 'setting pw'
    #UserService().set_user_pw('ew', '8a7p9a0a')

    polls = PollService().getPollsForLister(
        db_polls, request.user, page_num, page_link_prefix + time_link_prefix)
    vars = {}
    vars.update(polls)
    if page_num > 1:
        vars['show_ad'] = True
    vars["selected"] = selected
    vars["link_prefix"] = page_link_prefix
    vars["time_link_prefix"] = time_link_prefix

    return base.render(request, "home.html", vars)
예제 #4
0
def index(request):
    vars = {}
    inactive_polls = Poll.objects.filter(user=request.user,
                                         active=False)  #@UndefinedVariable
    if len(inactive_polls) > 0:
        vars["inactive_polls"] = inactive_polls

    form = PollForm()
    if request.method == 'POST':
        form = PollForm(request.POST)
        if form.is_valid():  # All validation rules pass
            p = Poll()
            question = form.cleaned_data["question"]
            question = question.strip()
            q_url = PollService().get_next_url(question)
            p.question = form.cleaned_data["question"]
            p.url = q_url
            p.user = request.user
            p.total_votes = 0
            p.total_comments = 0
            p.save()

            return HttpResponseRedirect("/create-poll/answers/%s/" % q_url)
    vars["form"] = form
    return base.render(request, "pollcreate.html", vars)
예제 #5
0
파일: profile.py 프로젝트: partriv/pollster
def mail_view(request, username=None, page_num=1): 
    """
    mail view controller
    """
    id = request.GET.get("id", None)
    if id:
        # request to mark mail as read
        msg = PollsterMessage.objects.get(id=id)     #@UndefinedVariable
        if msg.to_user == request.user:
            # make sure the person who owns the message is marking it
            msg.read = True
            msg.save()
        else:
            return HttpResponseForbidden("Nope! :)")
        return HttpResponse(content="happy success!")
    
    # YOU CAN ONLY DO IT FOR URESELF
    if username != request.user.username:
        return HttpResponseRedirect("/profile/%s/mail/view/" % request.user.username)
    
    vars = {}
    
    messages = PollsterMessage.objects.filter(to_user=request.user)   #@UndefinedVariable
    vars["msgCount"] = messages.count()    
    paginator = Paginator(messages.order_by('-date_created'), 20)
    vars["paginator"] = paginator
    vars["page"] = paginator.page(page_num)

    page_hash = paging_utils.setup_page_hash(paginator=paginator, page_num=page_num, page_link_prefix="/profile/%s/mail/view" % username)
    vars.update(page_hash)
    
    vars["messageForm"] = MessageForm()
    return base.render(request, "user/mailview.html", vars)
예제 #6
0
def index(request):
    vars = {}
    inactive_polls = Poll.objects.filter(user=request.user, active=False)      #@UndefinedVariable
    if len(inactive_polls) > 0:
        vars["inactive_polls"] = inactive_polls 
    
    form = PollForm()
    if request.method == 'POST':
        form = PollForm(request.POST)
        if form.is_valid(): # All validation rules pass
            p = Poll()
            question = form.cleaned_data["question"]
            question = question.strip()
            q_url = PollService().get_next_url(question)            
            p.question = form.cleaned_data["question"]
            p.url = q_url            
            p.user = request.user
            p.total_votes = 0
            p.total_comments = 0
            p.save()
            

            return HttpResponseRedirect("/create-poll/answers/%s/" % q_url)
    vars["form"] = form
    return base.render(request, "pollcreate.html", vars)
예제 #7
0
파일: error.py 프로젝트: adatapost/pollster
def index(request):
    error_code = int(request.GET['error'])

    try:
        error = consts.ERROR_ENGLISH[error_code]
    except:
        error = 'Unknown error.'
    return base.render(request, "error.html", {"error":error,})
예제 #8
0
def index(request):
    error_code = int(request.GET['error'])

    try:
        error = consts.ERROR_ENGLISH[error_code]
    except:
        error = 'Unknown error.'
    return base.render(request, "error.html", {
        "error": error,
    })
예제 #9
0
def index(request, username):
    user = auth.models.User.objects.get(username = username)
    if request.user != user:
        return HttpResponseNotFound()
    
    data = UserData.objects.get(user=request.user)      #@UndefinedVariable
    
    vars = {}    
    vars["data"] = data
    vars["chart_type"] = data.default_chart_type 
    return base.render(request, "user/usersettings.html", vars)
예제 #10
0
def answers(request, poll_url=None, errors=None, form=None):
    """answers creation view"""    
    
    vars = {}
    ps = PollService()    
    log = logging.getLogger("POLL CREATE")
    
    # get the poll    
    p = Poll.objects.get(url=poll_url)       #@UndefinedVariable
    vars["poll"] = p    
    # make sure the user editing the poll is the creator
    if p.user != request.user:
        log.debug("User attempting to finish poll creator who did not create it: %s" % p.url)
        return HttpResponseRedirect("/")
    if p.active:
        vars["edit_mode"] = True
        votes = PollVote.objects.filter(poll=p).count()   #@UndefinedVariable
        vars["edit_active"]  = votes < consts.POLL_VOTES_BEFORE_PERMANENTLY_ACTIVE 

    
    # get the answers
    pa = PollAnswer.objects.filter(poll=p)   #@UndefinedVariable
    pa_len = len(pa)
    if  pa_len > 0:
        moreAnswers = pa_len - consts.MIN_ANSWERS_FOR_ACTIVE_POLL
        if moreAnswers < 0:
            vars["moreAnswers"] = moreAnswers         
        vars["answers"] = pa
        
    #load up tags    
    tags = p.tags.all()
    if len(tags) > 0:
        vars["tags"] = tags

    
    if form == None:
        form = PollAnswerForm()
    
    # set initial fields
    form.fields["description"].initial= p.description
    plink = p.link
    form.fields["link"].initial= plink
    if plink != None and plink.strip() != "":
        vars["link"] = plink
        vars["domain"] = urlparse(plink)[1]
    
            
    vars["form"] = form
    vars["allow_user_answers"] = p.allow_user_answers
    vars["errors"] = errors
            
    return base.render(request, "poll_create_answers.html", vars)
예제 #11
0
def answers(request, poll_url=None, errors=None, form=None):
    """answers creation view"""

    vars = {}
    ps = PollService()
    log = logging.getLogger("POLL CREATE")

    # get the poll
    p = Poll.objects.get(url=poll_url)  #@UndefinedVariable
    vars["poll"] = p
    # make sure the user editing the poll is the creator
    if p.user != request.user:
        log.debug(
            "User attempting to finish poll creator who did not create it: %s"
            % p.url)
        return HttpResponseRedirect("/")
    if p.active:
        vars["edit_mode"] = True
        votes = PollVote.objects.filter(poll=p).count()  #@UndefinedVariable
        vars[
            "edit_active"] = votes < consts.POLL_VOTES_BEFORE_PERMANENTLY_ACTIVE

    # get the answers
    pa = PollAnswer.objects.filter(poll=p)  #@UndefinedVariable
    pa_len = len(pa)
    if pa_len > 0:
        moreAnswers = pa_len - consts.MIN_ANSWERS_FOR_ACTIVE_POLL
        if moreAnswers < 0:
            vars["moreAnswers"] = moreAnswers
        vars["answers"] = pa

    #load up tags
    tags = p.tags.all()
    if len(tags) > 0:
        vars["tags"] = tags

    if form == None:
        form = PollAnswerForm()

    # set initial fields
    form.fields["description"].initial = p.description
    plink = p.link
    form.fields["link"].initial = plink
    if plink != None and plink.strip() != "":
        vars["link"] = plink
        vars["domain"] = urlparse(plink)[1]

    vars["form"] = form
    vars["allow_user_answers"] = p.allow_user_answers
    vars["errors"] = errors

    return base.render(request, "poll_create_answers.html", vars)
예제 #12
0
def get_spillover_answers(request):
    """
    ajax handler for spill over request
    """
    pid = request.GET.get("pid", None)
    poll = Poll.objects.get(id=pid) #@UndefinedVariable
    answers = PollService().get_poll_results(poll, drop_zero_results=False)
    vars = {}
    for a in answers:
        if a.__class__ == PollResultSpilloverListItem:            
            vars["answers"] = a.spill_over_list
    vars["poll"] = poll
    return base.render(request, "pollview/pollview-answer-lister.html", vars)
예제 #13
0
def get_spillover_answers(request):
    """
    ajax handler for spill over request
    """
    pid = request.GET.get("pid", None)
    poll = Poll.objects.get(id=pid)  #@UndefinedVariable
    answers = PollService().get_poll_results(poll, drop_zero_results=False)
    vars = {}
    for a in answers:
        if a.__class__ == PollResultSpilloverListItem:
            vars["answers"] = a.spill_over_list
    vars["poll"] = poll
    return base.render(request, "pollview/pollview-answer-lister.html", vars)
예제 #14
0
파일: profile.py 프로젝트: partriv/pollster
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)
예제 #15
0
파일: test.py 프로젝트: partriv/pollster
def index(request):
    
    log = logging.getLogger('test')
    vars = {}
    #if not request.facebook.check_session(request):
    print 'test'
     
    """
    info = pyFacebook.users.getInfo([pyFacebook.uid], ['name', 'birthday',
    'affiliations', 'sex'])[0]
    print 'Your Name:     ', info['name']
    print 'Your Birthday: ', info['birthday']
    print 'Your Gender:   ', info['sex']

    """
        
    fb_service = FacebookService()
    fb = fb_service.getFacebookSession(request)
    friend_ids = fb.friends.get()
    info = fb.users.getInfo(friend_ids, ['name', 'pic'])
    vars["info"] = info
    uid = fb.users.getLoggedInUser()
    #uid = fb.uid
    log.debug("USER ID: " + str(uid))
    
    # YOU CAN DO THIS
    #fb.notifications.send(to_ids=[uid, friend_ids[0]], notification="Hey whats up!")    
    #fbml = '<fb:profile-action url="http://www.pollstruck.com/">Voted on some poll</fb:profile-action>'
    fbml = "par voted on this shit!!!!!"
    setit = fb.profile.setFBML(fbml, uid, fbml, '', '', fbml)
    
    log.debug("GET FBML: " + str(fb.profile.getFBML()))
    log.debug("FB SET: " + str(setit))
    
    #bundle = fb.feed.registerTemplateBundle(one_line_story_templates=["{*actor*} just voted on some poll on Pollstruck."] )
    #log.debug("REGISTER TEMPLATE BUNDLE: " + str(bundle))
    
    #fb.feed.publishUserAction(template_bundle_id=0, story_size=1)
    #fb.feed.publishStoryToUser(title="testing 123", body="This is a body")

    # CANT DO THESE
    #fb.users.setStatus(status='is updating his status from a secret place.', clear=False, uid=uid)
    #fb.feed.publishActionOfUser(title="testing 123", body="This is a body")
    #fb.feed.publishStoryToUser(title="Testing 123", body="testing body")        
    #fb.stream.publish(message='Testing 123')


    return base.render(request=request, template="test.html", vars=vars)

    
예제 #16
0
파일: profile.py 프로젝트: partriv/pollster
def activity_index(request, username=None):
    vars = {}
    phase = int(request.GET.get('phase', 0))    
    user_for_profile = User.objects.get(username=username)
    owner = user_for_profile == request.user
    vars["owner"] = owner
    activity, remain = PollService().getUserFeed(user=user_for_profile, owner=owner, phase=phase, request_user=request.user)
    vars["activity"] = activity
    vars["remain"] = remain
    vars["user_for_profile"] = user_for_profile
    vars["datetimenow"] = datetime.datetime.now()
    if remain:
        return base.render(request=request, template="user/profile-activity-lister.html", vars=vars)
    else:
        return HttpResponse(content="0")
예제 #17
0
파일: login.py 프로젝트: partriv/pollster
def index(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect("/profile/%s/" % request.user.username)

    next = request.GET.get("next", None)

    if request.method == 'POST':  # If the form has been submitted...
        form = LoginForm(request.POST)
        if form.is_valid():  # All validation rules pass
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = auth.authenticate(username=username, password=password)
            if user is not None:
                # TODO: AYT #if user.is_active:
                auth.login(request, user)

                # get next redirect
                next = request.POST.get("next", None)
                if next == None or next == 'None':
                    return HttpResponseRedirect(
                        '/profile/%s/' % user.username)  # Redirect after POST
                else:
                    return HttpResponseRedirect(
                        str(next))  # Redirect after POST
            else:

                return base.render(
                    request, "login.html", {
                        "form": form,
                        "errors":
                        "Wrong username or password.  Can't log you in!",
                    })
    else:
        form = LoginForm()  # An unbound form

    return base.render(request, "login.html", {"form": form, "next": next})
예제 #18
0
def get_voters(request):
    """
    ajax request handler to get  voters for an answer
    """
    aid = request.GET.get("aid", None)
    pid = request.GET.get("pid", None)
    poll_answer=PollAnswer.objects.get(id=aid) #@UndefinedVariable
    votes = PollVote.objects.filter(poll=Poll.objects.get(id=pid), poll_answer=poll_answer) #@UndefinedVariable
    users = []
    for v in votes:
        users.append(v.user)
    vars = {}
    vars["answer"] = poll_answer.answer
    vars["users"] =  users
    vars["votes"] = len(votes)
    return base.render(request, "ajax/pollview-voters.html", vars)
예제 #19
0
def index(request, search_terms=None, page_num=1, sort=None):
    initial = {"type":0}
    vars = {}
    vars["sort"] = sort
    if search_terms:
        ps = PollService()
        user = RequestUtils.getCurrentUser(request)
        prefix = "/search/%s" % search_terms
        vars["prefix"] = prefix
        polls = ps.searchPolls(search_terms, user, sort)
        paging_prefix = ps.addSortSuffix(prefix, sort)
        polls = ps.getPollsForLister(polls, request.user, page_num, page_link_prefix=paging_prefix)
        vars.update(polls)
        vars["search_terms"] = search_terms
    vars["form"] = SearchForm(initial=initial)
    vars["meta_desc"] = "Pollstruck search for %s." % search_terms    
    return base.render(request, "search.html", vars)
예제 #20
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)
예제 #21
0
def get_voters(request):
    """
    ajax request handler to get  voters for an answer
    """
    aid = request.GET.get("aid", None)
    pid = request.GET.get("pid", None)
    poll_answer = PollAnswer.objects.get(id=aid)  #@UndefinedVariable
    votes = PollVote.objects.filter(
        poll=Poll.objects.get(id=pid),
        poll_answer=poll_answer)  #@UndefinedVariable
    users = []
    for v in votes:
        users.append(v.user)
    vars = {}
    vars["answer"] = poll_answer.answer
    vars["users"] = users
    vars["votes"] = len(votes)
    return base.render(request, "ajax/pollview-voters.html", vars)
예제 #22
0
파일: home.py 프로젝트: adatapost/pollster
def index(request, selected='recent', db_polls = None, daysago=None, page_num=1, page_link_prefix="", time_link_prefix=""):
    # PollService().reconcileTagCount()
    # PollService().reconcilePollVoteCounts()
    # PollService().reconcileUntaggedPolls()
    # PollService().reconcilePollCommentsCount()
    # PollService().resizeAnswerColumn()
    print 'setting pw'
    #UserService().set_user_pw('ew', '8a7p9a0a')
    
    polls = PollService().getPollsForLister(db_polls, request.user, page_num, page_link_prefix + time_link_prefix)
    vars = {} 
    vars.update(polls) 
    if page_num > 1:
        vars['show_ad'] = True
    vars["selected"] = selected    
    vars["link_prefix"] = page_link_prefix
    vars["time_link_prefix"] = time_link_prefix
    
    return base.render(request, "home.html", vars)
예제 #23
0
def tag(request, tag_name=None, page_num=1, sort=None):
    """
    tag search page
    """
    vars = {}
    vars["sort"] = sort
    initial = {"type": 1}
    if tag_name:
        vars["search_terms"] = tag_name
        vars["tag"] = tag_name
        tag_prefix = "/tag/%s" % tag_name
        vars["prefix"] = tag_prefix

        tags = []
        tag_names = tag_name.split(",")
        for t in tag_names:
            try:
                tags.append(
                    Tag.objects.get(name=t.strip()))  #@UndefinedVariable
            except Tag.DoesNotExist:  #@UndefinedVariable
                pass
        if len(tags) > 0:
            ps = PollService()
            user = RequestUtils.getCurrentUser(request)
            polls = ps.searchPollsByTag(tag=tags, sort=sort)
            prefix = ps.addSortSuffix(tag_prefix, sort)
            spolls = PollService().getPollsForLister(polls,
                                                     user,
                                                     page_num=page_num,
                                                     page_link_prefix=prefix)
            vars.update(spolls)

    vars["form"] = SearchForm(initial=initial)
    # special side bar for tag search view
    tags = Tag.objects.filter()[0:200]  #@UndefinedVariable
    vars["side_nav_top_title"] = "Tags"
    vars["tag_cloud"] = buildTagCloud(tags)
    desc = "Pollstruck Tag search for: "
    for t in tag_names:
        desc += t.strip()
    desc = desc.rstrip(", ")
    vars["meta_desc"] = desc
    return base.render(request, "search.html", vars)
예제 #24
0
def index(request, search_terms=None, page_num=1, sort=None):
    initial = {"type": 0}
    vars = {}
    vars["sort"] = sort
    if search_terms:
        ps = PollService()
        user = RequestUtils.getCurrentUser(request)
        prefix = "/search/%s" % search_terms
        vars["prefix"] = prefix
        polls = ps.searchPolls(search_terms, user, sort)
        paging_prefix = ps.addSortSuffix(prefix, sort)
        polls = ps.getPollsForLister(polls,
                                     request.user,
                                     page_num,
                                     page_link_prefix=paging_prefix)
        vars.update(polls)
        vars["search_terms"] = search_terms
    vars["form"] = SearchForm(initial=initial)
    vars["meta_desc"] = "Pollstruck search for %s." % search_terms
    return base.render(request, "search.html", vars)
예제 #25
0
파일: profile.py 프로젝트: partriv/pollster
def mail_sent(request, username=None, page_num=1): 
    """
    mail view controller
    """
    # YOU CAN ONLY DO IT FOR URESELF
    if username != request.user.username:
        return HttpResponseRedirect("/profile/%s/mail/view/" % request.user.username)
    
    vars = {}
    messages = PollsterMessage.objects.filter(from_user=request.user)   #@UndefinedVariable
    vars["msgCount"] = messages.count()    
    paginator = Paginator(messages.order_by('-date_created'), 20)
    vars["paginator"] = paginator
    vars["page"] = paginator.page(page_num)

    page_hash = paging_utils.setup_page_hash(paginator=paginator, page_num=page_num, page_link_prefix="/profile/%s/mail/sent" % username)
    vars.update(page_hash)
    
    vars["messageForm"] = MessageForm()
    vars["sent_mode"] = True    
    return base.render(request, "user/mailview.html", vars)
예제 #26
0
파일: profile.py 프로젝트: partriv/pollster
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)
예제 #27
0
def tag(request, tag_name=None, page_num=1, sort=None):
    """
    tag search page
    """
    vars= {}
    vars["sort"] = sort
    initial = {"type":1}
    if tag_name:
        vars["search_terms"] = tag_name
        vars["tag"] = tag_name
        tag_prefix = "/tag/%s" % tag_name
        vars["prefix"] = tag_prefix
        
        tags = []
        tag_names = tag_name.split(",")
        for t in tag_names:
            try:
                tags.append(Tag.objects.get(name=t.strip()))   #@UndefinedVariable
            except Tag.DoesNotExist:   #@UndefinedVariable
                pass
        if len(tags) > 0:
            ps = PollService()
            user = RequestUtils.getCurrentUser(request)
            polls = ps.searchPollsByTag(tag=tags, sort=sort)
            prefix = ps.addSortSuffix(tag_prefix, sort)
            spolls = PollService().getPollsForLister(polls, user, page_num=page_num, page_link_prefix=prefix)
            vars.update(spolls)
                
    vars["form"] = SearchForm(initial=initial)
    # special side bar for tag search view
    tags = Tag.objects.filter()[0:200]   #@UndefinedVariable
    vars["side_nav_top_title"] = "Tags"
    vars["tag_cloud"] = buildTagCloud(tags)    
    desc = "Pollstruck Tag search for: "
    for t in tag_names:
        desc  += t.strip()
    desc = desc.rstrip(", ")
    vars["meta_desc"] = desc
    return base.render(request, "search.html", vars)
예제 #28
0
def mailusers(request):
    
    vars = {}
    form = None
    if request.method == 'POST': # If the form has been submitted...
        form = MailUsersForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            subject = form.cleaned_data["subject"]
            body = form.cleaned_data["body"]
            body = body.replace("\n", "<br/>")
            par_user = User.objects.get(username='******')
            # message every user in the system
            for u in User.objects.all():
                ps = PollService()
                ps.sendPollsterMessage(to_user=u, from_user=par_user, subject=subject, body=body)

            vars["done"] = True
    
    if not form:
        form = MailUsersForm(initial={"subject":"Recent updates"})
    vars["form"] = form
    return base.render(request, template="admin/mailuser.html", vars=vars)
예제 #29
0
파일: static.py 프로젝트: partriv/pollster
def contact(request):
    return base.render(request, "static/contact.html")
예제 #30
0
파일: login.py 프로젝트: partriv/pollster
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)
예제 #31
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)
예제 #32
0
def sitemap(request):
    vars = get_vars()
    return base.render(request=request, template="sitemap.html", vars=vars)
예제 #33
0
파일: profile.py 프로젝트: partriv/pollster
def edit(request, username=None):
    if username != request.user.username:
        return HttpResponseRedirect("/")
    
    user = request.user

    try:
        user.get_profile()
    except auth.models.SiteProfileNotAvailable:
        pass

    if request.method == 'POST':
        form = UserProfileForm(request.POST)
        if form.is_valid():
            try:
                user_profile = UserProfile.objects.get(user=user)   #@UndefinedVariable
            except UserProfile.DoesNotExist:   #@UndefinedVariable
                user_profile = UserProfile(user=user)
                user_profile.save()
            
            user_profile.sex = int(form.cleaned_data['sex'])
            user_profile.income = form.cleaned_data['income']
            user_profile.ethnicity = form.cleaned_data['ethnicity']
            user_profile.sexual_orientation = form.cleaned_data['sexual_orientation']
            user_profile.relationship_status = form.cleaned_data['relationship_status']
            user_profile.country = form.cleaned_data['country']
            user_profile.birthday = form.cleaned_data['birthday']
            user_profile.city = form.cleaned_data['city'] 
            user_profile.state = form.cleaned_data['state']
            user_profile.zip_code = form.cleaned_data['zip_code']
            user_profile.phone = form.cleaned_data['phone']
            user_profile.about = form.cleaned_data['about']

            def save_tag(form_field):
                if str(form_field):
                    try:
                        tag = Tag.objects.get(name=form_field)   #@UndefinedVariable
                    except Tag.DoesNotExist:   #@UndefinedVariable
                        tag = Tag(name=form_field, poll_count=0)
                        tag.save()
                    return tag
                return None
                

            tag = save_tag(form.cleaned_data['education'])
            user_profile.education = tag

            tag = save_tag(form.cleaned_data['work'])
            user_profile.work = tag

            tag = save_tag(form.cleaned_data['political'])
            user_profile.political = tag

            tag = save_tag(form.cleaned_data['religious'])
            user_profile.religious = tag


            def save_comma_tags(user_profile, form_field,  form_field_name):
                tags = form_field.split(',')
                for tag in tags:
                    tag = tag.strip(' ')
                    tag = save_tag(tag)
                    if tag:
                        getattr(user_profile, form_field_name).add(tag)
                
            save_comma_tags(user_profile, form.cleaned_data['interests'], 'interests')
            save_comma_tags(user_profile, form.cleaned_data['music'], 'music')
            save_comma_tags(user_profile, form.cleaned_data['tv'], 'tv')
            save_comma_tags(user_profile, form.cleaned_data['books'], 'books')
            save_comma_tags(user_profile, form.cleaned_data['movies'], 'movies')


#            user_profile.screen_name = form.cleaned_data['screen_name'] + '||' + form.cleaned_data['screen_name_service']

            user_profile.save()
            ScreenName(screen_name=form.cleaned_data['screen_name'], service=form.cleaned_data['screen_name_service'], user_profile=user_profile).save()

    else:
        try:
            user_profile = UserProfile.objects.get(user=user)   #@UndefinedVariable
            education = ''
            if user_profile.education:
                education = user_profile.education.name

            work = ''
            if user_profile.work:
                work = user_profile.work.name

            political = ''
            if user_profile.political is not None:
                political = user_profile.political.name

            religious = ''
            if user_profile.religious is not None:
                religious = user_profile.religious.name

            def get_all_tags(tag_name):
                tags = ''
                if getattr(user_profile, tag_name) is not None:
                    query_set = getattr(user_profile, tag_name).all()
                    all_tags = []
                    for q in query_set:
                        all_tags.append(q.name)
                    tags = ', '.join(all_tags)
                return tags
                

            interests = get_all_tags('interests')
            music = get_all_tags('music')
            tv = get_all_tags('tv')
            books = get_all_tags('books')
            movies = get_all_tags('movies')

            initial = {'sex':user_profile.sex, 'birthday':user_profile.birthday, 'country':user_profile.country,
                       'city':user_profile.city, 'state':user_profile.state, 'zip_code':user_profile.zip_code, 'phone':user_profile.phone,
                       'income':user_profile.income, 'ethnicity':user_profile.ethnicity, 'sexual_orientation':user_profile.sexual_orientation,
                       'relationship_status':user_profile.relationship_status, 'political':political, 'religious':religious,
                       'about':user_profile.about, 'education':education, 'work':work, 'interests':interests, 'music':music, 'tv':tv,
                       'books':books, 'movies':movies}
            form = UserProfileForm(initial=initial)
        except UserProfile.DoesNotExist:   #@UndefinedVariable
            form = UserProfileForm(initial={'country':consts.PROFILE_UNITED_STATES})
        

    vars = {}

    vars['form'] = form
    return base.render(request, "user/profile_edit.html", vars)
예제 #34
0
def thanks(request):
    return base.render(request, "thanks_register.html")
예제 #35
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)
예제 #36
0
파일: sitemap.py 프로젝트: partriv/pollster
def sitemap(request):
    vars = get_vars()
    return base.render(request=request, template="sitemap.html", vars=vars)
예제 #37
0
def contact(request):
    return base.render(request, "static/contact.html")
예제 #38
0
def thanks(request):
    return base.render(request, "thanks_register.html")
예제 #39
0
def about(request):
    return base.render(request, "static/about.html")
예제 #40
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)
예제 #41
0
파일: login.py 프로젝트: adatapost/pollster
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)
예제 #42
0
파일: static.py 프로젝트: partriv/pollster
def about(request):
    return base.render(request, "static/about.html")