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])
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
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)
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))
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))