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