Example #1
0
def revise(request, project_id):
    project = project_api.get_project(project_api.id2uri(project_id))
    badge = badge_api.get_badge(project['badge_uri'])
    fetch_badge_resources(badge)

    if request.method == 'POST':
        form = RevisionForm(request.POST)
    else:
        form = RevisionForm()

    if form.is_valid():
        try:
            project_api.revise_project(
                project['uri'],
                form.cleaned_data['improvement'],
                form.cleaned_data.get('work_url', None)
            )
        except Exception as e:
            messages.error(request, _(e.args[0]))
        return http.HttpResponseRedirect(reverse('project_view', args=(project_id,)))

    context = {
        'badge': badge,
        'project': project,
        'form': form
    }
    return render_to_response(
        'project/revise.html',
        context,
        context_instance=RequestContext(request)
    )
Example #2
0
def create( request, badge_id ):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)
    context = { 'badge': badge }
    user_uri = request.session['user']['uri']

    if request.method == 'POST':
        form = ProjectForm(request.POST, request.FILES)
    else:
        form = ProjectForm()

    if form.is_valid():
        image = media_api.upload_image(request.FILES['image'], user_uri)
        try:
            project = project_api.create_project(
                badge['uri'],
                user_uri,
                form.cleaned_data['title'],
                image['uri'],
                form.cleaned_data['work_url'],
                form.cleaned_data['description'],
                form.cleaned_data['reflection'],
                form.cleaned_data['tags']
            )
            return http.HttpResponseRedirect(reverse('project_view', args=(project['id'],)))
        except project_api.MultipleProjectError:
            messages.error(request, _('You have already submitted a project for this badge.'))

    context['form'] = form
    return render_to_response(
        'project/create.html',
        context,
        context_instance=RequestContext(request)
    )
Example #3
0
def browse_all_badges(request):

    badges = badge_api.get_published_badges()
    for badge in badges:
        fetch_badge_resources(badge)
    paginator = Paginator(badges, 10) # Show 10 badges per page

    page = request.GET.get('page')
    try:
        badges = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        badges = paginator.page(1)
    except EmptyPage:
        return HttpResponse(status=404)

    if request.is_ajax():
        return render_to_response('landing/browse_badges.html',{'badges': badges}, context_instance=RequestContext(request))

    return render_to_response(
        'landing/list_badges.html',{
            'badges': badges,
        },
        context_instance=RequestContext(request)
    )
Example #4
0
def preview( request, badge_id ):
    context = {
        'badge': badge_api.get_badge(badge_api.id2uri(badge_id))
    }
    fetch_badge_resources(context['badge'])
    return render_to_response(
        'badge/preview.html',
        context,
        context_instance=RequestContext(request)
    )
Example #5
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
Example #6
0
def list_projects_by_user(user_uri):
    """
    Listing all the projects that user has
    """
    projects = search_projects(author_uri=user_uri)

    for project in projects:
        badge = get_badge(project['badge_uri'])
        fetch_badge_resources(badge)
        feedback_list = get_project_feedback(project['uri'])
        fetch_resources(project, feedback_list=feedback_list)

    return projects
Example #7
0
def preview(request, badge_id):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)
    user = request.session['user']
    user['is_author'] = _user_is_author(badge, user)

    return render_to_response(
        'badge/badge_info/preview.html', {
            'badge': badge,
            'user': user,
        },
        context_instance=RequestContext(request)
    )
Example #8
0
def view( request, badge_id ):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)
    context = {
        'badge': badge
    }
    context['projects'] = map(fetch_resources, project_api.search_projects(badge_uri=badge['uri']))
    context['experts'] = badge_api.get_badge_experts(badge['uri'])

    return render_to_response(
        'badge/view.html',
        context,
        context_instance=RequestContext(request)
    )
Example #9
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)
    )
Example #10
0
def list_projects_that_user_gave_feedback(user_uri):
    """
    Listing all project that user gave feedback to
    """

    projects_list = get_projects_user_gave_feedback(user_uri)

    for project in projects_list:
        badge = get_badge(project['badge_uri'])
        fetch_badge_resources(badge)

        feedback_list = get_project_feedback(project['uri'])
        fetch_resources(project, feedback_list=feedback_list)

    return projects_list
Example #11
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'])
    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)
    )
Example #12
0
def preview(request, badge_id):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))

    if badge['published_date']:
        return HttpResponseRedirect(reverse('badge_view', args=[badge_id]))

    fetch_badge_resources(badge)
    user = request.session['user']
    user['is_author'] = _user_is_author(badge, user)

    return render_to_response(
        'badge/badge_info/preview.html', {
            'badge': badge,
            'user': user,
        },
        context_instance=RequestContext(request)
    )
Example #13
0
def create(request, badge_id):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)
    context = {'badge': badge}
    user_uri = request.session['user']['uri']

    if request.method == 'POST':
        form = ProjectForm(request.POST, request.FILES)
    else:
        form = ProjectForm()

    if form.is_valid():

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

            project = project_api.create_project(
                badge['uri'],
                user_uri,
                form.cleaned_data['title'],
                image['uri'],
                form.cleaned_data['work_url'],
                form.cleaned_data['description'],
                form.cleaned_data['reflection'],
                form.cleaned_data['tags']
            )
            return http.HttpResponseRedirect(reverse('project_view', args=(project['id'],)))
        except project_api.MultipleProjectError:
            messages.error(request, _('You have already submitted a project for this badge.'))
        except media_api.UploadImageError:
            messages.error(request, _('Project image cannot be uploaded. Possible reasons: format not supported'
                                      '(png, jpeg, jpg, gif), file size too large (up to 256kb).'))

    context['form'] = form
    return render_to_response(
        'project/create.html',
        context,
        context_instance=RequestContext(request)
    )
Example #14
0
def view( request, badge_id ):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)
    context = {
        'badge': badge
    }
    context['projects'] = map(fetch_resources, project_api.search_projects(badge_uri=badge['uri']))

    expert_uris = badge_api.get_badge_experts(badge['uri'])

    if request.session.get('user'):
        context['user_is_expert'] = request.session['user']['uri'] in expert_uris

    context['experts'] = map(p2pu_user_api.get_user, expert_uris)

    return render_to_response(
        'badge/view.html',
        context,
        context_instance=RequestContext(request)
    )
Example #15
0
def search_badges(text):
    query = Q(title__icontains=text) | \
            Q(description__icontains=text) | \
            Q(requirements__icontains=text) | \
            Q(author_uri__icontains=text)
    badges = badge_api.Badge.objects.filter(query, deleted=False, date_published__isnull=False) \
        .order_by('title').distinct().all()
    badges_val = []
    for badge in badges:
        badges_val.append(fetch_badge_resources(badge_api._badge2dict(badge)))
    return badges_val
Example #16
0
def view(request, badge_id):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)

    projects = project_api.search_projects_awarded_badges(badge_uri=badge['uri'])
    for project in projects:
        fetch_resources(project, feedback_list=project_api.get_project_feedback(project['uri']))

    expert_uris = badge_api.get_badge_experts(badge['uri'])
    user = request.session.get('user')

    if user:
        user['is_expert'] = user['uri'] in expert_uris
        user['is_author'] = _user_is_author(badge, user)
        if user['is_author']:
            user['can_delete_badge'] = badge_api.is_allowed_to_remove(badge['uri'])
        if user['is_expert']:
            user['added_to_backpack'] = badge_api.pushed_to_backpack(badge, user['uri'])

    projects_ready_for_feedback = project_api.get_projects_ready_for_feedback(badge['uri'])
    for project in projects_ready_for_feedback:
        feedback_list = project_api.get_project_feedback(project['uri'])
        fetch_resources(project, feedback_list=feedback_list)

    experts = map(p2pu_user_api.get_user, expert_uris)

    iframe = '//%s%s?rendering=normal' % (settings.ORGANISATION_URL,
                                               reverse('badge_view_embedded', args=[badge_id]))

    return render_to_response(
        'badge/badge_info/view.html', {
            'user': user,
            'badge': badge,
            'projects': projects,
            'projects_ready_for_feedback': projects_ready_for_feedback,
            'experts': experts,
            'iframe': iframe,
            'organisation_url': settings.ORGANISATION_URL,
        },
        context_instance=RequestContext(request)
    )
def send_badge_creation_notification(badge):
    subject_template = 'emails/badge_created_subject.txt'
    text_template = 'emails/badge_created.txt'
    html_template = 'emails/badge_created.html'
    context = { 'badge': fetch_badge_resources(badge) }
    return send_notification_i18n(
        badge['author_uri'],
        subject_template,
        text_template,
        html_template,
        context=context
    )
Example #18
0
def view(request, badge_id):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)
    context = {'badge': badge}
    context['projects'] = map(fetch_resources, project_api.search_projects_awarded_badges(badge_uri=badge['uri']))

    expert_uris = badge_api.get_badge_experts(badge['uri'])

    if request.session.get('user'):
        context['user_is_expert'] = request.session['user']['uri'] in expert_uris

    context['experts'] = map(p2pu_user_api.get_user, expert_uris)

    context['iframe'] = 'http://%s%s?rendering=normal' % (settings.ORGANISATION_URL,
                                                          reverse('badge_view_embedded', args=[badge_id]))

    return render_to_response(
        'badge/view.html',
        context,
        context_instance=RequestContext(request)
    )
Example #19
0
def view_embedded(request, badge_id):
    # Get username from parameters or None
    username = request.GET.get('username', None)
    # Check if user is logged in
    if 'user' in request.session:
        username = request.session['user']['username']

    badge_uri = badge_api.id2uri(badge_id)
    badge = badge_api.get_badge(badge_uri)
    fetch_badge_resources(badge)
    projects = None
    user_has_badge = False
    template = 'badge/embed/embedded_large.html'

    if username:
        user_has_badge = badge_api.check_if_user_has_badge(badge['uri'],
                                                           p2pu_user_api.username2uri(username))
    if user_has_badge:
        projects = project_api.get_projects_ready_for_feedback(badge_uri)

    if projects:
        map(fetch_resources, projects)

    # Extract rendering preference -> default large
    rendering = request.GET.get('rendering', 'large')

    if rendering == 'normal':
        template = 'badge/embed/embedded_normal.html'

    return render_to_response(
        template,
        {
            'badge': badge,
            'projects': projects,
            'user_has_badge': user_has_badge,
            'rendering': rendering,
        },
        context_instance=RequestContext(request)
    )
Example #20
0
def feedback(request, project_id):
    project = project_api.get_project(project_api.id2uri(project_id))
    fetch_resources(project)
    feedback = project_api.get_project_feedback(project_api.id2uri(project_id))
    badge = badge_api.get_badge(project['badge_uri'])
    fetch_badge_resources(badge)
    user_uri = request.session['user']['uri']

    if request.method == 'POST':
        form = FeedbackForm(request.POST)
    else:
        form = FeedbackForm()

    if form.is_valid():
        try:
            feedback = project_api.submit_feedback(
                project['uri'],
                user_uri,
                form.cleaned_data['good'],
                form.cleaned_data['bad'],
                form.cleaned_data['ugly'],
                form.cleaned_data.get('award_badge', form.cleaned_data.get('award_badge', False))
            )
            if feedback == project_api.submit_feedback_result.AWARDED:
                badge_api.award_badge(
                    badge['uri'],
                    project['author_uri'],
                    user_uri,
                    reverse('project_view', args=(project_id,)),
                )
                messages.success(request, _("Success! You've awarded the Badge to %s" % project['author']['username']))
            elif feedback == project_api.submit_feedback_result.REQUIRES_APPROVAL:
                messages.error(request, _("Badge can only be awarded by it's creator. "
                                          "We had notified them that you liked this project."))
        except Exception, e:
            messages.error(request, _(e[0]))
        return http.HttpResponseRedirect(reverse('project_view', args=(project_id,)))
def send_badge_awarded_notification(badge, expert_uri):
    subject_template = 'emails/badge_awarded_subject.txt'
    text_template = 'emails/badge_awarded.txt'
    html_template = 'emails/badge_awarded.html'
    context = { 'badge': fetch_badge_resources(badge) }

    # NOT the best place to hide this dependancy!!
    from project import models as project_api
    from project.view_helpers import fetch_resources

    project = project_api.search_projects(badge['uri'], expert_uri)
    if len(project) == 1:
        context['project'] = fetch_resources(project[0])
    projects = project_api.get_projects_ready_for_feedback(badge['uri'])
    context['projects'] = map(fetch_resources, projects[:3])
    return send_notification_i18n(
        expert_uri,
        subject_template,
        text_template,
        html_template,
        context=context
    )