Beispiel #1
0
    def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
             use_https=False, token_generator=default_token_generator):
        """
        Generates a one-use only link for resetting password and sends to the user
        """
        from django.core.mail import send_mail
        for user in self.users_cache:
            if not domain_override:
                current_site = Site.objects.get_current()
                site_name = current_site.name
                domain = current_site.domain
            else:
                site_name = domain = domain_override
            t = loader.get_template(email_template_name)
            c = {
                # This line is the only difference to the django form
                'campaign': get_current_campaign(),

                'email': user.email,
                'domain': domain,
                'site_name': site_name,
                'uid': int_to_base36(user.id),
                'user': user,
                'token': token_generator.make_token(user),
                'protocol': use_https and 'https' or 'http',
            }
            send_mail(_("Password reset on %s") % site_name,
                t.render(Context(c)), None, [user.email])
Beispiel #2
0
    def get_absolute_url(self):
        """URL at which we view this users details - standard Django concept"""
        campaign = get_current_campaign()
        if not campaign:
            return 'ERROR'
 
        return '/' + campaign.slug + self.get_user().get_absolute_url()
def context(request):
    'Custom template_context_processor. Adds context for template pages'

    result = {}
    result['geuser'] = geuser = get_current_user()
    result['organization'] = get_current_organization()

    result['campaign'] = campaign = get_current_campaign()
    if request.user.is_authenticated() and geuser and campaign:
        campaign.add_user(geuser)
        result['campaign_start_date'] = campaign.get_start_date(geuser)
        result['campaign_end_date'] = campaign.get_end_date(geuser)

    result['MEDIA_1'] = settings.MEDIA_URL_1
    result['MEDIA_2'] = settings.MEDIA_URL_2
    return result
Beispiel #4
0
def create(request, campaign_slug):
    """Create a new Action and Pledge on it"""

    if request.method != 'POST':
        return HttpResponseNotAllowed(['POST'])

    geuser = request.user.get_profile()
    if not 'title' in request.POST or not 'description' in request.POST:
        return HttpResponse('ERROR: title and description are required',
                mimetype='text/plain')
    
    title = request.POST['title']
    description = request.POST['description']

    action = Action.objects.create(
            campaign = get_current_campaign(),
            title = title,
            description = description,
            created_by = geuser)

    action.pledge(geuser)
    ActionView.clear_popular_cache(action.campaign)

    return redirect_to_indicator(request, campaign_slug=campaign_slug) 
Beispiel #5
0
def dashboard(request, campaign_slug, indicator_id):
    "Home page"

    response_map = {}

    try:
        geuser = request.user.get_profile()
    except Profile.DoesNotExist:
        return reverse('registration_logout', kwargs={'campaign_slug': campaign_slug})

    campaign = get_current_campaign()
    campaign.add_user(geuser)

    if campaign.get_end_date(geuser) < datetime.date.today():
        url = reverse('results', kwargs={'campaign_slug': campaign.slug})
        return HttpResponseRedirect(url)

    indicator_list = Indicator.objects.all_regular_indicators(campaign) 
    response_map['indicator_list'] = indicator_list

    response_map['one_week_ago'] = datetime.datetime.now() - datetime.timedelta(7)
    
    indicator = None

    try:
        next_indicator = Indicator.objects.next(geuser, campaign)
        response_map['last_answered'] = next_indicator
    except Indicator.DoesNotExist:
        next_indicator = None
        response_map['is_done'] = True

    if indicator_id:
        try:
            indicator = Indicator.objects.get_cached(campaign, long(indicator_id))
        except Indicator.DoesNotExist:
            return HttpResponseRedirect('/')
    else:
        if next_indicator:
            indicator = next_indicator
        else :
            url = reverse('results', kwargs={'campaign_slug': campaign.slug})
            return HttpResponseRedirect(url)

    yesterday = geuser.local_datetime().date() - datetime.timedelta(1)
    try: 
        response_map['current_answer'] = \
            Answer.objects.get(
                user = geuser,
                indicator_id = indicator.id, 
                action_date = yesterday
            )
    except Answer.DoesNotExist:
        pass

    try:
        previous = Answer.objects.\
                filter(
                    user = geuser,
                    indicator_id = indicator.id,
                    action_date__lt = yesterday).\
                order_by('-action_date')[0]
    except (Answer.DoesNotExist, IndexError):
        previous = None

    response_map['next'] = indicator_form(indicator=indicator, user=geuser, previous=previous)

    if not indicator.image:
        # If no image we display a bar graph
        indicator_view = indicator.view(geuser, Indicator.objects.average_user())
        encoder = JSONEncoder(default = json_encoder_default)
        response_map['indicator_json'] = encoder.encode(indicator_view) 

    response_map['recent_activity_list'] = EntryView.recent_activity(campaign)

    popular_actions = ActionView.popular(campaign, geuser)
    response_map['popular_actions'] = popular_actions

    all_actions = list(popular_actions)
    random.shuffle(all_actions)
    response_map['all_actions'] = all_actions

    response_map['status_dashboard'] = _status_dashboard(request, response_map, campaign, geuser)
    response_map['action_dashboard'] = _action_dashboard(request, response_map, campaign, geuser)

    return render_to_response(
            'dashboard.html', 
            response_map, 
            context_instance=RequestContext(request))
Beispiel #6
0
def results(request, campaign_slug, indicator_id = None):
    'Display the results'

    response_map = {'is_done': True}

    try:
        geuser = request.user.get_profile()
    except Profile.DoesNotExist:
        return reverse('registration_logout', kwargs={'campaign_slug': campaign_slug})

    organization = get_current_organization()

    campaign = get_current_campaign()

    overall_indicator = Indicator.objects.overall_indicator(campaign)
    response_map['overall_indicator'] = overall_indicator

    indicator_list = Indicator.objects.all_regular_indicators(campaign)
    response_map['indicator_list'] = indicator_list

    if not indicator_id and 'indicator_id' in request.REQUEST:
        indicator_id = request.REQUEST['indicator_id']

    if indicator_id:
        indicator = Indicator.objects.get(pk=indicator_id).subclass()
    else:
        indicator = overall_indicator
    response_map['current_indicator'] = indicator

    from_user = geuser
    if 'from' in request.GET and request.GET['from'] != 'me':
        from_group_id = request.GET['from']
        from_user = Group.objects.get(pk = from_group_id)
    response_map['from_user'] = from_user

    to_user = Indicator.objects.average_user()
    is_compare_to_all = True
    if 'to' in request.GET and request.GET['to'] != 'all':
        to_group_id = request.GET['to']
        to_user = Group.objects.get(pk = to_group_id)
        is_compare_to_all = False
    response_map['to_user'] = to_user
    response_map['is_compare_to_all'] = is_compare_to_all

    indicator_view = indicator.view(from_user, to_user)
    encoder = JSONEncoder(default = json_encoder_default)
    response_map['indicator_json'] = encoder.encode(indicator_view) 
    
    now = datetime.datetime.now()
    yesterday = now - datetime.timedelta(1) 
    response_map['one_week_ago'] = now - datetime.timedelta(7)

    response_map['my_groups'] = geuser.groups.all()
    response_map['all_groups'] = Group.objects.filter(organization = organization)

    indicator_rating_list = []
    for ind in indicator_list:
        try:
            (ind.user_rating, ind.user_rating_exact) = ind.compared_to_average(geuser, yesterday)
            ind.user_rating_exact = abs(ind.user_rating_exact)
            indicator_rating_list.append(ind)
        except Answer.DoesNotExist:
            # User or Avg User has no answer for that day, don't display the indicator
            #ind.user_rating, ind.user_rating_exact = 0, 0
            pass

    indicator_rating_list.sort(key=lambda x: x.user_rating, reverse=True)
    response_map['indicator_rating_list'] = indicator_rating_list

    above, avg, below = [], [], []
    for indicator in indicator_rating_list:
        if indicator.user_rating > 0:
            above.append(indicator)
        elif indicator.user_rating == 0:
            avg.append(indicator)
        else:
            below.append(indicator)
    response_map['indicator_rating_above'] = above
    response_map['indicator_rating_avg'] = avg
    response_map['indicator_rating_below'] = below

    if campaign.get_end_date(geuser) < datetime.date.today() or 'completed' in request.GET:
        response_map['completed'] = is_completed = True

        my_stats = campaign.stats(geuser) 
        my_stats['completed_pledges'] = Pledge.objects.filter(
                is_completed=True, 
                user=geuser, 
                action__campaign = campaign)
        my_stats['pending_pledges'] = Pledge.objects.filter(
                is_completed=False, 
                user=geuser, 
                action__campaign = campaign)
        response_map['my_stats'] = my_stats

    else:
        response_map['completed'] = is_completed = False

    response_map['recent_activity_list'] = EntryView.recent_activity(campaign)

    popular_actions = ActionView.popular(campaign, geuser)
    response_map['popular_actions'] = popular_actions

    all_actions = list(popular_actions)
    if not is_completed:
        # Completed screen shows most popular actions first
        random.shuffle(all_actions)
    response_map['all_actions'] = all_actions

    response_map['status_dashboard'] = \
            _status_dashboard(request, response_map, campaign, geuser)
    response_map['action_dashboard'] = \
            _action_dashboard(request, response_map, campaign, geuser)

    return render_to_response(
            'results.html',
            response_map,
            context_instance=RequestContext(request))