예제 #1
0
def as_view(request, template, data, slug, just_modify_data=False):
    ### add settings to the request so that the template
    ### can adjust what it displays depending on settings.
    data['settings'] = django.conf.settings
    if request.user.is_authenticated() or 'cookies_work' in request.session:
        # Great! Cookies work.
        pass
    else:
        request.session.set_test_cookie()
        if request.session.test_cookie_worked():
            request.session.delete_test_cookie()
            request.session['cookies_work'] = True


    # Where should the user be sent if she clicks 'logout'?
    # Depends on whether this is a login-requiring page.
    try:
        view_function, _, _ = resolve(request.path)
        is_login_required = isinstance(view_function,
                django.contrib.auth.decorators._CheckLogin)
        if is_login_required:
            data['go_here_after_logging_in_or_out'] = '/'
        else:
            data['go_here_after_logging_in_or_out'] = request.get_full_path()
    except:
        data['go_here_after_logging_in_or_out'] = '/'

    data['slug'] = slug # Account settings uses this.
    if just_modify_data:
        return data
    else:
        return render_response(request, template, data)
예제 #2
0
def as_view(request, template, data, slug):
    if request.user.is_authenticated() or 'cookies_work' in request.session:
        # Great! Cookies work.
        pass
    else:
        request.session.set_test_cookie()
        if request.session.test_cookie_worked():
            request.session.delete_test_cookie()
            request.session['cookies_work'] = True

    # Where should the user be sent if she clicks 'logout'?
    # Depends on whether this is a login-requiring page.
    try:
        view_function, _, _ = resolve(request.path)
        is_login_required = isinstance(
            view_function, django.contrib.auth.decorators._CheckLogin)
        if is_login_required:
            data['go_here_after_logging_in_or_out'] = '/'
        else:
            data['go_here_after_logging_in_or_out'] = request.get_full_path()
    except:
        data['go_here_after_logging_in_or_out'] = '/'

    data['slug'] = slug  # Account settings uses this.
    return render_response(request, template, data)
예제 #3
0
파일: views.py 프로젝트: armooo/oh-mainline
def widget_display_js(request, user_to_display__username):
    # FIXME: In the future, use:
    html_doc = widget_display_string(request, user_to_display__username)
    # to generate html_doc
    encoded_for_js = simplejson.dumps(html_doc)
    # Note: using application/javascript as suggested by
    # http://www.ietf.org/rfc/rfc4329.txt
    return render_response(request, 'base/append_ourselves.js',
                              {'in_string': encoded_for_js},
                              mimetype='application/javascript')
예제 #4
0
def page_to_js(request):
    # FIXME: In the future, use:
    # from django.template.loader import render_to_string
    # to generate html_doc
    html_doc = "<strong>zomg</strong>"
    encoded_for_js = simplejson.dumps(html_doc)
    # Note: using application/javascript as suggested by
    # http://www.ietf.org/rfc/rfc4329.txt
    return render_response(request, 'base/append_ourselves.js',
                              {'in_string': encoded_for_js},
                              mimetype='application/javascript')
예제 #5
0
def widget_display_js(request, user_to_display__username):
    # FIXME: In the future, use:
    html_doc = widget_display_string(request, user_to_display__username)
    # to generate html_doc
    encoded_for_js = simplejson.dumps(html_doc)
    # Note: using application/javascript as suggested by
    # http://www.ietf.org/rfc/rfc4329.txt
    return render_response(request,
                           'base/append_ourselves.js',
                           {'in_string': encoded_for_js},
                           mimetype='application/javascript')
예제 #6
0
def page_to_js(request):
    # FIXME: In the future, use:
    # from django.template.loader import render_to_string
    # to generate html_doc
    html_doc = "<strong>zomg</strong>"
    encoded_for_js = simplejson.dumps(html_doc)
    # Note: using application/javascript as suggested by
    # http://www.ietf.org/rfc/rfc4329.txt
    return render_response(request,
                           'base/append_ourselves.js',
                           {'in_string': encoded_for_js},
                           mimetype='application/javascript')
예제 #7
0
def as_view(request, template, data, slug):
    if request.user.is_authenticated() or "cookies_work" in request.session:
        # Great! Cookies work.
        pass
    else:
        request.session.set_test_cookie()
        if request.session.test_cookie_worked():
            request.session.delete_test_cookie()
            request.session["cookies_work"] = True

    # Where should the user be sent if she clicks 'logout'?
    # Depends on whether this is a login-requiring page.
    try:
        view_function, _, _ = resolve(request.path)
        is_login_required = isinstance(view_function, django.contrib.auth.decorators._CheckLogin)
        if is_login_required:
            data["go_here_after_logging_in_or_out"] = "/"
        else:
            data["go_here_after_logging_in_or_out"] = request.get_full_path()
    except:
        data["go_here_after_logging_in_or_out"] = "/"

    data["slug"] = slug  # Account settings uses this.
    return render_response(request, template, data)
예제 #8
0
def fetch_bugs(request, invalid_subscribe_to_alert_form=None):
    # Make the query string keys lowercase using a redirect.
    if any([k.lower() != k for k in request.GET.keys()]):
        new_GET = {}
        for key in request.GET.keys():
            new_GET[key.lower()] = request.GET[key]
        return HttpResponseRedirect(reverse(fetch_bugs) + '?' + mysite.base.unicode_sanity.urlencode(new_GET))

    if request.user.is_authenticated():
        person = request.user.get_profile()
        suggestion_keys = person.get_recommended_search_terms()
    else:
        suggestion_keys = []

    suggestions = [(i, k, False) for i, k in enumerate(suggestion_keys)]

    format = request.GET.get('format', None)
    start = int(request.GET.get('start', 1))
    end = int(request.GET.get('end', 10))

    total_bug_count = 0

    query = mysite.search.controllers.Query.create_from_GET_data(request.GET)

    if query:
        bugs = query.get_bugs_unordered()

        # Sort
        bugs = mysite.search.controllers.order_bugs(bugs)

        total_bug_count = bugs.count()

        bugs = bugs[start-1:end]

    else:
        bugs = []

    data = {}
    data['query'] = query

    prev_page_query_str = QueryDict('')
    prev_page_query_str = prev_page_query_str.copy()
    next_page_query_str = QueryDict('')
    next_page_query_str = next_page_query_str.copy()
    if query:
        prev_page_query_str['q'] = query.terms_string
        next_page_query_str['q'] = query.terms_string
    if format:
        prev_page_query_str['format'] = format
        next_page_query_str['format'] = format
    for facet_name, selected_option in query.active_facet_options.items():
        prev_page_query_str[facet_name] = selected_option
        next_page_query_str[facet_name] = selected_option
    diff = end - start
    prev_page_query_str['start'] = start - diff - 1
    prev_page_query_str['end'] = start - 1
    next_page_query_str['start'] = end + 1
    next_page_query_str['end'] = end + diff + 1

    data['start'] = start
    data['end'] = min(end, total_bug_count)
    data['prev_page_url'] = '/search/?' + prev_page_query_str.urlencode()
    data['next_page_url'] = '/search/?' + next_page_query_str.urlencode()
    data['this_page_query_str'] = mysite.base.unicode_sanity.urlencode(request.GET)

    is_this_page_1 = (start <= 1)
    is_this_the_last_page = ( end >= (total_bug_count - 1) )
    data['show_prev_page_link'] = not is_this_page_1
    data['show_next_page_link'] = not is_this_the_last_page

    if request.GET.get('confirm_email_alert_signup', ''):
        data['confirm_email_alert_signup'] = 1

    # If this the last page of results, display a form allowing user to
    # subscribe to a Volunteer Opportunity search alert
    if query and is_this_the_last_page:
        if invalid_subscribe_to_alert_form:
            alert_form = invalid_subscribe_to_alert_form
        else:
            initial = {
                    'query_string': request.META['QUERY_STRING'],
                    'how_many_bugs_at_time_of_request': len(bugs)
                    }
            if request.user.is_authenticated():
                initial['email'] = request.user.email
            alert_form = mysite.search.forms.BugAlertSubscriptionForm(initial=initial)
        data['subscribe_to_alert_form'] = alert_form

    # FIXME
    # The template has no way of grabbing what URLs to put in the [x]
    # So we help it out here by hacking around our fruity list-of-dicts
    # data structure.
    facet2any_query_string = {}
    for facet in query.active_facet_options:
        facet2any_query_string[facet] = query.get_facet_options(
            facet, [''])[0]['query_string']

    Bug = mysite.search.models.Bug
    from django.db.models import Q, Count
    data['popular_projects'] = list(Project.objects.filter(name__in=['Miro', 'GnuCash', 'brasero', 'Evolution Exchange', 'songbird']).order_by('name').reverse())
    data['all_projects'] = Project.objects.values('pk','name').filter(bug__looks_closed=False).annotate(Count('bug')).order_by('name')

    Person = mysite.profile.models.Person
    import random
    random_start = int(random.random() * 700)
    data['contributors'] = Person.objects.all()[random_start:random_start+5]
    data['contributors2'] = Person.objects.all()[random_start+10:random_start+15]
    data['languages'] = Project.objects.all().values_list('language', flat=True).order_by('language').exclude(language='').distinct()[:4]

    if format == 'json':
        # FIXME: Why `alert`?
        return bugs_to_json_response(data, bugs, request.GET.get(
            'jsoncallback', 'alert'))
    else:
        data['the_user'] = request.user
        data['suggestions'] = suggestions
        data['bunch_of_bugs'] = bugs
        data['url'] = 'http://launchpad.net/'
        data['total_bug_count'] = total_bug_count
        data['facet2any_query_string'] = facet2any_query_string
        data['project_count'] = mysite.search.controllers.get_project_count()

        return render_response(request, 'search/search.html', data)
예제 #9
0
def signup(request, signup_form=None):
    if signup_form is None:
        signup_form = mysite.account.forms.UserCreationFormWithEmail()

    return render_response(request, 'account/signup.html',
                           {'form': signup_form})
예제 #10
0
def register(request,
             template_name='authopenid/complete.html',
             redirect_field_name=django.contrib.auth.REDIRECT_FIELD_NAME,
             register_form=django_authopenid.forms.OpenidRegisterForm,
             auth_form=django.contrib.auth.forms.AuthenticationForm,
             register_account=django_authopenid.views.register_account,
             send_email=False,
             extra_context=None):
    """
    register an openid.

    If user is already a member he can associate its openid with 
    its account.

    A new account could also be created and automaticaly associated
    to the openid.

    :attr request: request object
    :attr template_name: string, name of template to use, 
    'authopenid/complete.html' by default
    :attr redirect_field_name: string, field name used for redirect. by default 
    'next'
    :attr register_form: form use to create a new account. By default 
    `OpenidRegisterForm`
    :attr auth_form: form object used for legacy authentification. 
    by default `OpenidVerifyForm` form auser auth contrib.
    :attr register_account: callback used to create a new account from openid. 
    It take the register_form as param.
    :attr send_email: boolean, by default True. If True, an email will be sent 
    to the user.
    :attr extra_context: A dictionary of variables to add to the template 
    context. Any callable object in this dictionary will be called to produce 
    the end result which appears in the context.
    """
    redirect_to = request.REQUEST.get(redirect_field_name, '')
    openid_ = request.session.get('openid', None)
    if openid_ is None or not openid_:
        return HttpResponseRedirect(
            "%s?%s" % (reverse('user_signin'),
                       urllib.urlencode({redirect_field_name: redirect_to})))

    nickname = ''
    email = ''
    if openid_.sreg is not None:
        nickname = openid_.sreg.get('nickname', '')
        email = openid_.sreg.get('email', '')
    if openid_.ax is not None and not nickname or not email:
        if openid_.ax.get('http://schema.openid.net/namePerson/friendly',
                          False):
            nickname = openid_.ax.get(
                'http://schema.openid.net/namePerson/friendly')[0]
        if openid_.ax.get('http://schema.openid.net/contact/email', False):
            email = openid_.ax.get('http://schema.openid.net/contact/email')[0]

    form1 = register_form(initial={
        'username': nickname,
        'email': email,
    })
    form2 = auth_form(initial={
        'username': nickname,
    })

    if request.POST:
        user_ = None
        if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
            redirect_to = settings.LOGIN_REDIRECT_URL
        if 'email' in request.POST.keys():
            form1 = register_form(data=request.POST)
            if form1.is_valid():
                user_ = register_account(form1, openid_)

                extra_profile_form = mysite.account.forms.SignUpIfYouWantToHelpForm(
                    request.POST, prefix='extra_profile_form')
                if extra_profile_form.is_valid():
                    person = user_.get_profile()
                    method2contact_info = {
                        'forwarder':
                        'You can reach me by email at $fwd',
                        'public_email':
                        'You can reach me by email at %s' % user_.email,
                    }
                    info = method2contact_info[extra_profile_form.cleaned_data[
                        'how_should_people_contact_you']]
                    person.contact_blurb = info
                    person.save()

        else:
            form2 = auth_form(data=request.POST)
            if form2.is_valid():
                user_ = form2.get_user()
        if user_ is not None:
            # associate the user to openid
            uassoc = django_authopenid.models.UserAssociation(
                openid_url=str(openid_), user_id=user_.id)
            uassoc.save(send_email=send_email)
            django.contrib.auth.login(request, user_)
            return HttpResponseRedirect(redirect_to)

    return render_response(
        request,
        template_name, {
            'form1':
            form1,
            'form2':
            form2,
            'extra_profile_form':
            mysite.account.forms.SignUpIfYouWantToHelpForm(
                prefix='extra_profile_form'),
            redirect_field_name:
            redirect_to,
            'nickname':
            nickname,
            'email':
            email
        },
        context_instance=django_authopenid.views._build_context(
            request, extra_context=extra_context))
예제 #11
0
def fetch_bugs(request, invalid_subscribe_to_alert_form=None):
    # Make the query string keys lowercase using a redirect.
    if any([k.lower() != k for k in request.GET.keys()]):
        new_GET = {}
        for key in request.GET.keys():
            new_GET[key.lower()] = request.GET[key]
        return HttpResponseRedirect(
            reverse(fetch_bugs) + '?' +
            mysite.base.unicode_sanity.urlencode(new_GET))

    if request.user.is_authenticated():
        person = request.user.get_profile()
        suggestion_keys = person.get_recommended_search_terms()
    else:
        suggestion_keys = []

    suggestions = [(i, k, False) for i, k in enumerate(suggestion_keys)]

    format = request.GET.get('format', None)
    start = int(request.GET.get('start', 1))
    end = int(request.GET.get('end', 10))

    total_bug_count = 0

    query = mysite.search.controllers.Query.create_from_GET_data(request.GET)

    if query:
        bugs = query.get_bugs_unordered()

        # Sort
        bugs = mysite.search.controllers.order_bugs(bugs)

        total_bug_count = bugs.count()

        bugs = bugs[start - 1:end]

    else:
        bugs = []

    data = {}
    data['query'] = query

    prev_page_query_str = QueryDict('')
    prev_page_query_str = prev_page_query_str.copy()
    next_page_query_str = QueryDict('')
    next_page_query_str = next_page_query_str.copy()
    if query:
        prev_page_query_str['q'] = query.terms_string
        next_page_query_str['q'] = query.terms_string
    if format:
        prev_page_query_str['format'] = format
        next_page_query_str['format'] = format
    for facet_name, selected_option in query.active_facet_options.items():
        prev_page_query_str[facet_name] = selected_option
        next_page_query_str[facet_name] = selected_option
    diff = end - start
    prev_page_query_str['start'] = start - diff - 1
    prev_page_query_str['end'] = start - 1
    next_page_query_str['start'] = end + 1
    next_page_query_str['end'] = end + diff + 1

    data['start'] = start
    data['end'] = min(end, total_bug_count)
    data['prev_page_url'] = '/search/?' + prev_page_query_str.urlencode()
    data['next_page_url'] = '/search/?' + next_page_query_str.urlencode()
    data['this_page_query_str'] = mysite.base.unicode_sanity.urlencode(
        request.GET)

    is_this_page_1 = (start <= 1)
    is_this_the_last_page = (end >= (total_bug_count - 1))
    data['show_prev_page_link'] = not is_this_page_1
    data['show_next_page_link'] = not is_this_the_last_page

    if request.GET.get('confirm_email_alert_signup', ''):
        data['confirm_email_alert_signup'] = 1

    # If this the last page of results, display a form allowing user to
    # subscribe to a Volunteer Opportunity search alert
    if query and is_this_the_last_page:
        if invalid_subscribe_to_alert_form:
            alert_form = invalid_subscribe_to_alert_form
        else:
            initial = {
                'query_string': request.META['QUERY_STRING'],
                'how_many_bugs_at_time_of_request': len(bugs)
            }
            if request.user.is_authenticated():
                initial['email'] = request.user.email
            alert_form = mysite.search.forms.BugAlertSubscriptionForm(
                initial=initial)
        data['subscribe_to_alert_form'] = alert_form

    # FIXME
    # The template has no way of grabbing what URLs to put in the [x]
    # So we help it out here by hacking around our fruity list-of-dicts
    # data structure.
    facet2any_query_string = {}
    for facet in query.active_facet_options:
        facet2any_query_string[facet] = query.get_facet_options(
            facet, [''])[0]['query_string']

    Bug = mysite.search.models.Bug
    from django.db.models import Q, Count
    data['popular_projects'] = list(
        Project.objects.filter(name__in=[
            'Miro', 'GnuCash', 'brasero', 'Evolution Exchange', 'songbird'
        ]).order_by('name').reverse())
    data['all_projects'] = Project.objects.values('pk', 'name').filter(
        bug__looks_closed=False).annotate(Count('bug')).order_by('name')

    Person = mysite.profile.models.Person
    import random
    random_start = int(random.random() * 700)
    data['contributors'] = Person.objects.all()[random_start:random_start + 5]
    data['contributors2'] = Person.objects.all()[random_start +
                                                 10:random_start + 15]
    data['languages'] = Project.objects.all().values_list(
        'language',
        flat=True).order_by('language').exclude(language='').distinct()[:4]

    if format == 'json':
        # FIXME: Why `alert`?
        return bugs_to_json_response(data, bugs,
                                     request.GET.get('jsoncallback', 'alert'))
    else:
        data['user'] = request.user
        data['suggestions'] = suggestions
        data['bunch_of_bugs'] = bugs
        data['url'] = 'http://launchpad.net/'
        data['total_bug_count'] = total_bug_count
        data['facet2any_query_string'] = facet2any_query_string
        data['project_count'] = mysite.search.controllers.get_project_count()

        return render_response(request, 'search/search.html', data)
예제 #12
0
def signup(request, signup_form=None):
    if signup_form is None:
        signup_form = mysite.account.forms.UserCreationFormWithEmail()

    return render_response(request, 'account/signup.html', {'form': signup_form})
예제 #13
0
def register(request, template_name='authopenid/complete.html', 
             redirect_field_name=django.contrib.auth.REDIRECT_FIELD_NAME, 
             register_form=django_authopenid.forms.OpenidRegisterForm,
             auth_form=django.contrib.auth.forms.AuthenticationForm, 
             register_account=django_authopenid.views.register_account, send_email=False, 
             extra_context=None):
    """
    register an openid.

    If user is already a member he can associate its openid with 
    its account.

    A new account could also be created and automaticaly associated
    to the openid.

    :attr request: request object
    :attr template_name: string, name of template to use, 
    'authopenid/complete.html' by default
    :attr redirect_field_name: string, field name used for redirect. by default 
    'next'
    :attr register_form: form use to create a new account. By default 
    `OpenidRegisterForm`
    :attr auth_form: form object used for legacy authentification. 
    by default `OpenidVerifyForm` form auser auth contrib.
    :attr register_account: callback used to create a new account from openid. 
    It take the register_form as param.
    :attr send_email: boolean, by default True. If True, an email will be sent 
    to the user.
    :attr extra_context: A dictionary of variables to add to the template 
    context. Any callable object in this dictionary will be called to produce 
    the end result which appears in the context.
    """
    redirect_to = request.REQUEST.get(redirect_field_name, '')
    openid_ = request.session.get('openid', None)
    if openid_ is None or not openid_:
        return HttpResponseRedirect("%s?%s" % (reverse('user_signin'),
                                urllib.urlencode({ 
                                redirect_field_name: redirect_to })))

    nickname = ''
    email = ''
    if openid_.sreg is not None:
        nickname = openid_.sreg.get('nickname', '')
        email = openid_.sreg.get('email', '')
    if openid_.ax is not None and not nickname or not email:
        if openid_.ax.get('http://schema.openid.net/namePerson/friendly', False):
            nickname = openid_.ax.get('http://schema.openid.net/namePerson/friendly')[0]
        if openid_.ax.get('http://schema.openid.net/contact/email', False):
            email = openid_.ax.get('http://schema.openid.net/contact/email')[0]
        
    
    form1 = register_form(initial={
        'username': nickname,
        'email': email,
    }) 
    form2 = auth_form(initial={ 
        'username': nickname,
    })

    if request.POST:
        user_ = None
        if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
            redirect_to = settings.LOGIN_REDIRECT_URL
        if 'email' in request.POST.keys():
            form1 = register_form(data=request.POST)        
            if form1.is_valid():
                user_ = register_account(form1, openid_)
                
                extra_profile_form = mysite.account.forms.SignUpIfYouWantToHelpForm(
                    request.POST, prefix='extra_profile_form')
                if extra_profile_form.is_valid():
                    person = user_.get_profile()
                    method2contact_info = {
                        'forwarder': 'You can reach me by email at $fwd',
                        'public_email': 'You can reach me by email at %s' % user_.email,
                        }
                    info = method2contact_info[extra_profile_form.cleaned_data[
                        'how_should_people_contact_you']]
                    person.contact_blurb = info
                    person.save()
                
        else:
            form2 = auth_form(data=request.POST)
            if form2.is_valid():
                user_ = form2.get_user()
        if user_ is not None:
            # associate the user to openid
            uassoc = django_authopenid.models.UserAssociation(
                        openid_url=str(openid_),
                        user_id=user_.id
            )
            uassoc.save(send_email=send_email)
            django.contrib.auth.login(request, user_)
            return HttpResponseRedirect(redirect_to) 
    
    return render_response(request, template_name, {
        'form1': form1,
        'form2': form2,
        'extra_profile_form': mysite.account.forms.SignUpIfYouWantToHelpForm(
            prefix='extra_profile_form'),
        redirect_field_name: redirect_to,
        'nickname': nickname,
        'email': email
    }, context_instance=django_authopenid.views._build_context(request, extra_context=extra_context))