Esempio n. 1
0
def answer_create_single(request, campaign_slug=None, indicator_id=None):
    """POST response to a single indicator
    
    @param indicator_id: Id of the Indicator who's question we are answering.
    If not given in the url, we look in GET and POST.
     
    @return: For AJAX call HttpResponse OK if success, ERROR plus some detail if failure.
    For an HTTP call, redirect to next indicator
    """
    
    if not indicator_id:
        try:
            indicator_id = request.REQUEST['indicator_id']
        except KeyError:
            return HttpResponse('ERROR - Missing indicator_id', mimetype='text/plain')
 
    indicator = Indicator.objects.get(pk = indicator_id).subclass()
    
    geuser = request.user.get_profile()
    
    if request.method == 'POST':
            
        form = indicator_form(request.POST, indicator=indicator, user=geuser)

        if not form.is_valid():
            return HttpResponse(
                    'ERROR - Invalid form - {err}'.format(err=unicode(form.errors)),
                    mimetype='text/plain')
        
        form.save()

        if request.is_ajax():
            return HttpResponse('OK')

    return redirect_to_indicator(request, campaign_slug=campaign_slug) 
Esempio n. 2
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))