Exemplo n.º 1
0
def get_assertion(request, uid):
    """
    Handle badge assertion requests.
    """

    award = get_object_or_404(Award, pk=uid)

    if award.ob_state=='REVOKED':
        return HttpResponseGone('{"revoked": true}', mimetype="application/json")

    badge = award.badge
    recipient_email = get_user(award.user_uri)['email']
    image = get_image(badge.image_uri)

    assertion = create_assertion_from_template(
        uid = uid,
        recipient_email = recipient_email,
        image = image['url'],
        evidence = award.evidence_url,
        issued_on = award.date_awarded,
        badge_id = badge.pk,
    )
    json_assertion = json.dumps(assertion)
    print json_assertion
    return HttpResponse(json_assertion, mimetype="application/json")
Exemplo n.º 2
0
def view(request, project_id):
    project = project_api.get_project(project_api.id2uri(project_id))
    project = fetch_resources(project)
    badge = badge_api.get_badge(project['badge_uri'])
    badge = fetch_badge_resources(badge)
    feedback = project_api.get_project_feedback(project['uri'])
    for fb in feedback:
        if fb.get('expert_uri'):
            fb['expert'] = p2pu_user_api.get_user(fb['expert_uri'])
    can_revise = False
    can_give_feedback = False
    if request.session.get('user'):
        user_uri = request.session['user']['uri']
        if user_uri == project['author_uri']:
            can_revise = project_api.can_revise_project(project['uri'])
        can_give_feedback = project_api.ready_for_feedback(project['uri'])
        can_give_feedback &= user_uri in badge_api.get_badge_experts(badge['uri'])

    context = {
        'project': project,
        'badge': badge,
        'feedback': feedback,
        'can_revise': can_revise,
        'can_give_feedback': can_give_feedback
    }
    return render_to_response(
        'project/view.html',
        context,
        context_instance=RequestContext(request)
    )
Exemplo n.º 3
0
def fetch_resources(project, feedback_list=None):
    project['image'] = get_image(project['image_uri'])
    project['author'] = get_user(project['author_uri'])

    project['badge'] = get_badge(project['badge_uri'])
    fetch_badge_resources(project['badge'])

    if feedback_list:
        add_feedback_to_project(feedback_list, project)

    return project
Exemplo n.º 4
0
def edit(request, badge_id):
    user_uri = request.session['user']['uri']
    user = p2pu_user_api.get_user(user_uri)
    user_partner = user['partner']
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))

    if not user_uri == badge['author_uri']:
        messages.error(request, _('You cannot edit someone elses badge!'))
        return http.HttpResponseRedirect(reverse(
            'badge_preview', args=(badge_id,)
        ))

    if request.method == 'POST':
        form = BadgeForm(request.POST, request.FILES, user_uri=user_uri, editing=True, published=badge['published'])
    else:
        form = BadgeForm(badge, user_uri=user_uri, editing=True, published=badge['published'])

    if request.method == 'POST' and form.is_valid():
        try:
            updated = {}
            if 'image_uri' in request.FILES:
                image = media_api.upload_image(
                    request.FILES['image_uri'],
                    request.session['user']['uri'],
                    media_root=settings.MEDIA_ROOT,
                )
                updated['image_uri'] = image['uri']

            for attr in ['title', 'description', 'requirements']:
                if not badge[attr] == form.cleaned_data[attr]:
                    updated[attr] = form.cleaned_data[attr]

            badge = badge_api.update_badge(badge['uri'], **updated)

            if badge['published']:
                return http.HttpResponseRedirect(
                    reverse('badge_view', args=(badge_api.uri2id(badge['uri']),))
                )

            return http.HttpResponseRedirect(
                reverse('badge_preview', args=(badge_api.uri2id(badge['uri']),))
            )
        except badge_api.DuplicateTitleError:
            form.errors['title'] = [_('Badge title needs to be unique'), ]

    return render_to_response(
        'badge/badge_info/edit.html', {
            'badge': badge,
            'form': form,
            'user_is_partner': user_partner,
            'existing_img': media_api.get_image(badge['image_uri']),
        },
        context_instance=RequestContext(request))
Exemplo n.º 5
0
def _feedback2dict(feedback):

    json = {
        'expert_uri': feedback.expert_uri,
        'expert': p2pu_user_api.get_user(feedback.expert_uri),
        'good': feedback.good,
        'bad': feedback.bad,
        'ugly': feedback.ugly,
        'date_created': feedback.date_created,
        'badge_awarded': feedback.badge_awarded,
    }
    return json
Exemplo n.º 6
0
def profile_feedback(request, username):
    user = user_api.get_user(user_api.username2uri(username))
    user = check_if_owner(request.session.get('user', default=None), username, user)

    projects = list_projects_that_user_gave_feedback(user['uri'])

    return render_to_response(
        'dashboard/dashboard_feedback.html', {
            'user': user,
            'projects': projects,
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 7
0
def profile(request, username ):

    context = {}
    user_uri = u'/uri/user/{0}'.format(username)
    context['draft_badges'] = badge_api.get_user_draft_badges(user_uri)
    context['earned_badges'] = badge_api.get_user_earned_badges(user_uri)
    context['created_badges'] = badge_api.get_user_created_badges(user_uri)
    context['awarded_badges'] = badge_api.get_user_awarded_badges(user_uri)
    map(fetch_badge_resources, context['draft_badges'])
    map(fetch_badge_resources, context['earned_badges'])
    map(fetch_badge_resources, context['created_badges'])
    map(fetch_badge_resources, context['awarded_badges'])

    context['feedback_your_projects'] = project_api.search_projects(author_uri=user_uri)
    map(fetch_resources, context['feedback_your_projects'])
    peer_projects = []
    feedback_latest = []
    for badge in context['earned_badges']:
        feedback_latest += project_api.get_projects_ready_for_feedback(badge['uri'])
        peer_projects += project_api.search_projects(badge_uri=badge['uri'])

    filter_func = lambda project: not project['author_uri'] == user_uri
    peer_projects = filter(filter_func, peer_projects)

    badges_under_revision = []
    context['badges_under_revision'] = None
    for project in context['feedback_your_projects']:
        badge_uri = project_api.get_badge_uri_from_project_under_revision(project['uri'])
        if badge_uri:
            badge = badge_api.get_badge(badge_uri)
            fetch_badge_resources(badge)
            badges_under_revision.append(badge)

    if badges_under_revision:
        context['badges_under_revision'] = badges_under_revision

    context['feedback_peer_projects'] = map(fetch_resources, peer_projects)
    context['feedback_latest'] = map(fetch_resources, feedback_latest)
    context['user'] = user_api.get_user(user_api.username2uri(username))
    context['can_delete'] = False

    if 'user' in request.session:
        if context['user']['username'] == request.session.get('user')['username']:
            context['can_delete'] = True

    return render_to_response(
        'dashboard/dashboard.html',
        context,
        context_instance=RequestContext(request)
    )
Exemplo n.º 8
0
def profile_badges(request, username):
    user = user_api.get_user(user_api.username2uri(username))
    user = check_if_owner(request.session.get('user', default=None), username, user)
    badges = map(fetch_badge_resources, badge_api.get_user_earned_badges(user['uri']))
    draft_badges = map(fetch_badge_resources, badge_api.get_user_draft_badges(user['uri']))

    projects = list_projects_by_user(user['uri'])

    return render_to_response(
        'dashboard/dashboard_badges.html', {
            'user': user,
            'projects': projects,
            'badges': badges,
            'draft_badges': draft_badges,
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 9
0
def create(request):
    user_uri = request.session['user']['uri']
    user = p2pu_user_api.get_user(user_uri)
    user_partner = user['partner']

    form = BadgeForm(user_uri=user_uri)

    if request.method == 'POST':
        form = BadgeForm(request.POST, request.FILES, user_uri=user_uri)

    if form.is_valid():
        try:
            if request.FILES['image_uri'].size > (256 * 1024):
                raise media_api.UploadImageError('Image size too large.')

            image = media_api.upload_image(
                request.FILES['image_uri'],
                user_uri,
                media_root=settings.MEDIA_ROOT,
                delete_original=True)

            badge = badge_api.create_badge(
                form.cleaned_data['title'],
                image['uri'],
                form.cleaned_data['description'],
                form.cleaned_data['requirements'],
                user_uri,
                partner_name=form.cleaned_data['partner']
            )
            return http.HttpResponseRedirect(
                reverse('badge_publish', args=(badge_api.uri2id(badge['uri']),))
            )
        except badge_api.DuplicateTitleError:
            form.errors['title'] = [_('Badge title needs to be unique'), ]
        except media_api.UploadImageError:
            form.errors['title'] = [_('Badge image cannot be uploaded. Possible reasons: format not supported'
                                      '(png, jpeg, jpg, gif), file size too large (up to 256kb).'), ]

    return render_to_response(
        'badge/badge_info/create.html', {
            'form': form,
            'user_is_partner': user_partner,
        },
        context_instance=RequestContext(request))
Exemplo n.º 10
0
def profile_dashboard(request, username):
    user = user_api.get_user(user_api.username2uri(username))
    user = check_if_owner(request.session.get('user', default=None), username, user)

    if not user.get('is_owner'):
        return redirect(to=reverse('profile_badges', args=[username]))

    badges = map(fetch_badge_resources, badge_api.get_user_earned_badges(user['uri']))

    projects = list_projects_ready_for_feedback(badges)

    return render_to_response(
        'dashboard/dashboard.html', {
            'user': user,
            'projects': projects,
            'badges': badges,
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 11
0
def send_notification(receiver_uri, subject, text, html=None, sender=None, callback=None):
    """
    Send a notification to a single receiver via the Django-mandrill to a user
    receiver - uri of user to send the notification to
    sender - name to use in from part of email
    """
    receiver = get_user(receiver_uri)

    msg = EmailMultiAlternatives(
        subject=subject,
        body=text,
        from_email=settings.DEFAULT_FROM_EMAIL,
        to=[receiver['email']],
    )

    if html:
        msg.attach_alternative(html, "text/html")

    try:
        msg.send()
    except:
        log.error(u'Could not send email notification to {0}'.format(receiver['email']))
Exemplo n.º 12
0
 def test_get_user(self):
     user = user_api.save_user('testuser', '/media/images/test.png')
     user2 = user_api.get_user(user['uri'])
     self.assertEqual(user, user2)
Exemplo n.º 13
0
def fetch_badge_resources( badge ):
    badge['image'] = media_api.get_image(badge['image_uri'])
    badge['author'] = p2pu_user_api.get_user(badge['author_uri'])
    return badge
Exemplo n.º 14
0
def fetch_resources( project ):
    project['image'] = media_api.get_image(project['image_uri'])
    project['author'] = p2pu_user_api.get_user(project['author_uri'])
    return project
Exemplo n.º 15
0
def fetch_badge_resources( badge ):
    badge['image'] = media_api.get_image(badge['image_uri'])
    badge['author'] = p2pu_user_api.get_user(badge['author_uri'])
    badge['url'] = settings.ORGANISATION_URL + reverse('badge_view', args=(badge['id'],))
    return badge