def project_user_list(request, project, max_count=64, with_sections=False, paginate_sections=False, user_list_url=''): is_challenge = (project.category == Project.CHALLENGE) context = { 'request': request, 'project': project, 'user_list_url': user_list_url, 'with_sections': with_sections, 'paginate_sections': paginate_sections, 'is_challenge': is_challenge, } if is_challenge: organizers = project.adopters().order_by('-organizing', '-id') participants = project.non_adopter_participants().order_by('-id') followers = project.completed_tasks_users() else: organizers = project.organizers() participants = project.non_organizer_participants() followers = project.non_participant_followers() if with_sections: per_section_max_count = max_count / 3 if paginate_sections: context.update(get_pagination_context(request, organizers, per_section_max_count, prefix='organizers_')) context.update(get_pagination_context(request, participants, per_section_max_count, prefix='participants_')) context.update(get_pagination_context(request, followers, per_section_max_count, prefix='followers_')) context['organizers'] = context[ 'organizers_pagination_current_page'].object_list context['participants'] = context[ 'participants_pagination_current_page'].object_list context['followers'] = context[ 'followers_pagination_current_page'].object_list else: context['organizers'] = organizers[:per_section_max_count] context['participants'] = participants[:per_section_max_count] context['followers'] = followers[:per_section_max_count] show_more_link = (organizers.count() > per_section_max_count) show_more_link = show_more_link or ( participants.count() > per_section_max_count) show_more_link = show_more_link or ( followers.count() > per_section_max_count) context['show_more_link'] = show_more_link else: remaining = max_count context['organizers'] = organizers[:remaining] remaining -= context['organizers'].count() if remaining > 0: context['participants'] = participants[:remaining] remaining -= context['participants'].count() if remaining > 0: context['followers'] = followers[:remaining] remaining -= context['followers'].count() # It could be equal to (remaining < 0) but the big user # list page is not a has more information than the sidebar # section. context['show_more_link'] = True return context
def show(request, slug): try: badge = Badge.objects.get(slug=slug) except Badge.DoesNotExist: return pilot_badge_redirect(request, slug) is_eligible = badge.is_eligible(request.user) rubrics = badge.rubrics.all() peer_assessment = (badge.assessment_type == Badge.PEER) skill_badge = (badge.badge_type == Badge.SKILL) community_badge = (badge.badge_type == Badge.COMMUNITY) submissions = badge.submissions.all().order_by( '-created_on') awarded_user_ids = badge.awards.all().values('user_id') awarded_users = UserProfile.objects.filter( deleted=False, id__in=awarded_user_ids) related_projects = badge.groups.all() prerequisites = badge.prerequisites.all() context = { 'badge': badge, 'is_eligible': is_eligible, 'rubrics': rubrics, 'peer_skill': peer_assessment and skill_badge, 'peer_community': peer_assessment and community_badge, 'related_projects': related_projects, 'prerequisites': prerequisites, } context.update(get_pagination_context(request, awarded_users, 24, prefix='awarded_users_')) context.update(get_pagination_context(request, submissions, 24, prefix='submissions_')) return render_to_response('badges/badge.html', context, context_instance=RequestContext(request))
def badge_submissions(request, pending_page_url, awarded_page_url, mine_page_url, toggled_awards, toggled_mine, badge=None): pending_submissions = Submission.objects.filter(author__deleted=False, pending=True) awarded_submissions = Submission.objects.filter(author__deleted=False, pending=False) if badge: pending_submissions = pending_submissions.filter(badge=badge) awarded_submissions = awarded_submissions.filter(badge=badge) show_my_submissions_tab = False my_submissions = Submission.objects.none() if request.user.is_authenticated(): show_my_submissions_tab = True my_submissions = Submission.objects.filter( author=request.user.get_profile()) if badge: my_submissions = my_submissions.filter(badge=badge) context = { 'request': request, 'badge': badge, 'show_my_submissions_tab': show_my_submissions_tab, 'pending_page_url': pending_page_url, 'awarded_page_url': awarded_page_url, 'mine_page_url': mine_page_url, 'toggled_awards': toggled_awards, 'toggled_mine': toggled_mine, } context.update(get_pagination_context(request, pending_submissions, 24, prefix='pending_submissions_')) context.update(get_pagination_context(request, awarded_submissions, 24, prefix='awarded_submissions_')) context.update(get_pagination_context(request, my_submissions, 24, prefix='my_submissions_')) return context
def projects_reviews_list(request, toggled_under_review=False, toggled_accepted=False): reviews = Review.objects.values('project_id') accepted_reviews = Review.objects.filter( accepted=True).values('project_id') projects_pending = Project.objects.exclude( id__in=reviews) projects_under_review = Project.objects.filter( id__in=reviews).exclude(id__in=accepted_reviews) projects_accepted = Project.objects.filter( id__in=accepted_reviews) context = { 'toggled_under_review': toggled_under_review, 'toggled_accepted': toggled_accepted, 'pending_page_url': reverse('projects_pending_review'), 'under_review_page_url': reverse('projects_under_review'), 'accepted_page_url': reverse('accepted_projects') } context.update(get_pagination_context(request, projects_pending, 24, prefix='pending_')) context.update(get_pagination_context(request, projects_under_review, 24, prefix='under_review_')) context.update(get_pagination_context(request, projects_accepted, 24, prefix='accepted_')) return render_to_response('reviews/projects_reviews_list.html', context, context_instance=RequestContext(request))
def show_badge(request, slug): try: badge = Badge.objects.get(slug=slug) except Badge.DoesNotExist: return pilot_badge_redirect(request, slug) can_post_submission = badge.can_post_submission(request.user) can_give_to_peer = badge.can_give_to_peer(request.user) submissions = badge.submissions.all().order_by( '-created_on') if request.user.is_authenticated(): user = request.user.get_profile() user_submissions = submissions.filter(author=user) else: user_submissions = Submission.objects.none() awarded_user_ids = badge.awards.all().values('user_id') awarded_users = UserProfile.objects.filter( deleted=False, id__in=awarded_user_ids) related_projects = badge.groups.filter(deleted=False) prerequisites = badge.prerequisites.all() other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5] context = { 'badge': badge, 'can_post_submission': can_post_submission, 'can_give_to_peer': can_give_to_peer, 'related_projects': related_projects, 'prerequisites': prerequisites, 'user_submissions': user_submissions, 'other_badges_can_apply_for': other_badges_can_apply_for, } context.update(get_pagination_context(request, awarded_users, 24, prefix='awarded_users_')) context.update(get_pagination_context(request, submissions, 24, prefix='submissions_')) return render_to_response('badges/badge.html', context, context_instance=RequestContext(request))
def project_user_list(request, project, max_count=64, with_sections=False, paginate_sections=False, user_list_url=""): is_challenge = project.category == Project.CHALLENGE context = { "request": request, "project": project, "user_list_url": user_list_url, "with_sections": with_sections, "paginate_sections": paginate_sections, "is_challenge": is_challenge, } if is_challenge: organizers = project.adopters().order_by("-organizing", "-id") participants = project.non_adopter_participants().order_by("-id") followers = project.completed_tasks_users() else: organizers = project.organizers() participants = project.non_organizer_participants() followers = project.non_participant_followers() if with_sections: per_section_max_count = max_count / 3 if paginate_sections: context.update(get_pagination_context(request, organizers, per_section_max_count, prefix="organizers_")) context.update(get_pagination_context(request, participants, per_section_max_count, prefix="participants_")) context.update(get_pagination_context(request, followers, per_section_max_count, prefix="followers_")) context["organizers"] = context["organizers_pagination_current_page"].object_list context["participants"] = context["participants_pagination_current_page"].object_list context["followers"] = context["followers_pagination_current_page"].object_list else: context["organizers"] = organizers[:per_section_max_count] context["participants"] = participants[:per_section_max_count] context["followers"] = followers[:per_section_max_count] show_more_link = organizers.count() > per_section_max_count show_more_link = show_more_link or (participants.count() > per_section_max_count) show_more_link = show_more_link or (followers.count() > per_section_max_count) context["show_more_link"] = show_more_link else: remaining = max_count context["organizers"] = organizers[:remaining] remaining -= context["organizers"].count() if remaining > 0: context["participants"] = participants[:remaining] remaining -= context["participants"].count() if remaining > 0: context["followers"] = followers[:remaining] remaining -= context["followers"].count() # It could be equal to (remaining < 0) but the big user # list page is not a has more information than the sidebar # section. context["show_more_link"] = True return context
def badge_submissions(request, pending_page_url, awarded_page_url, mine_page_url, toggled_awards, toggled_mine, badge=None): pending_submissions = Submission.objects.filter(author__deleted=False, pending=True) awarded_submissions = Submission.objects.filter(author__deleted=False, pending=False) if badge: pending_submissions = pending_submissions.filter(badge=badge) awarded_submissions = awarded_submissions.filter(badge=badge) show_my_submissions_tab = False my_submissions = Submission.objects.none() if request.user.is_authenticated(): show_my_submissions_tab = True my_submissions = Submission.objects.filter( author=request.user.get_profile()) if badge: my_submissions = my_submissions.filter(badge=badge) context = { 'request': request, 'badge': badge, 'show_my_submissions_tab': show_my_submissions_tab, 'pending_page_url': pending_page_url, 'awarded_page_url': awarded_page_url, 'mine_page_url': mine_page_url, 'toggled_awards': toggled_awards, 'toggled_mine': toggled_mine, } context.update( get_pagination_context(request, pending_submissions, 24, prefix='pending_submissions_')) context.update( get_pagination_context(request, awarded_submissions, 24, prefix='awarded_submissions_')) context.update( get_pagination_context(request, my_submissions, 24, prefix='my_submissions_')) return context
def project_wall(request, project, discussion_area=False): is_organizing = project.is_organizing(request.user) is_participating = project.is_participating(request.user) if is_organizing: form = statuses_forms.ImportantStatusForm() elif is_participating: form = statuses_forms.StatusForm() else: form = None activities = project.activities() if discussion_area: activities = apply_filter(activities, 'messages') else: activities = filter_activities(request, activities) if project.category == Project.CHALLENGE: url = reverse('projects_discussion_area', kwargs=dict(slug=project.slug)) else: url = project.get_absolute_url() context = { 'request': request, 'user': request.user, 'project': project, 'participating': is_participating, 'organizing': is_organizing, 'form': form, 'discussion_area': discussion_area, 'domain': Site.objects.get_current().domain, 'wall_url': url, } context.update(get_pagination_context(request, activities)) return context
def dashboard(request): """Personalized dashboard for authenticated users.""" try: profile = request.user.get_profile() except UserProfile.DoesNotExist: user = request.user username = '' if user.username[:10] != 'openiduser': username = user.username form = CreateProfileForm( initial={ 'full_name': ' '.join((user.first_name, user.last_name)), 'email': user.email, 'username': username, }) messages.info( request, _('Please fill out your profile to finish registration.')) return render_to_response('dashboard/setup_profile.html', { 'form': form, }, context_instance=RequestContext(request)) show_welcome = not profile.discard_welcome activities = Activity.objects.dashboard(request.user.get_profile()) activities = filter_activities(request, activities) context = { 'profile': profile, 'profile_view': False, 'show_welcome': show_welcome, 'domain': Site.objects.get_current().domain, 'dashboard_url': reverse('dashboard'), } context.update(get_pagination_context(request, activities)) return render_to_response('dashboard/dashboard.html', context, context_instance=RequestContext(request))
def show_page(request, slug, page_slug): page = get_object_or_404(Page, project__slug=slug, slug=page_slug) can_edit = page.can_edit(request.user) if page.deleted: messages.error(request, _('This task was deleted.')) if can_edit: return http.HttpResponseRedirect(reverse('page_history', kwargs={'slug': page.project.slug, 'page_slug': page.slug})) else: return http.HttpResponseRedirect(page.project.get_absolute_url()) new_comment_url = reverse('page_comment', kwargs=dict( scope_app_label='projects', scope_model='project', scope_pk=page.project.id, page_app_label='content', page_model='page', page_pk=page.id)) first_level_comments = page.first_level_comments() context = { 'page': page, 'project': page.project, 'can_edit': can_edit, 'can_comment': page.can_comment(request.user), 'new_comment_url': new_comment_url, } context.update(get_pagination_context(request, first_level_comments)) return render_to_response('content/page.html', context, context_instance=RequestContext(request))
def index(request, activity_id): activity = get_object_or_404(Activity, id=activity_id) context = { 'activity': activity, 'domain': Site.objects.get_current().domain, } if activity.scope_object: is_challenge = (activity.scope_object.category == Project.CHALLENGE) from statuses.models import Status status_ct = ContentType.objects.get_for_model(Status) if is_challenge and activity.target_content_type != status_ct: raise http.Http404 scope_url = activity.scope_object.get_absolute_url() context['project'] = activity.scope_object else: scope_url = activity.actor.get_absolute_url() context['profile'] = activity.actor context['profile_view'] = True if activity.deleted: messages.error(request, _('This activity was deleted.')) if activity.can_edit(request.user): return http.HttpResponseRedirect(reverse('activity_restore', kwargs={'activity_id': activity.id})) return http.HttpResponseRedirect(scope_url) replies = activity.first_level_comments() context.update(get_pagination_context(request, replies)) return render_to_response('activity/index.html', context, context_instance=RequestContext(request))
def _filter_and_return(request, context, projects, max_count): tag_string = request.GET.get('filter_tags') filter_tags = [] if tag_string: filter_tags = tag_string.split('|') context['filter_tags'] = filter_tags if filter_tags: projects = get_courses_by_tags(filter_tags, projects) context['popular_tags'] = get_tags_for_courses(projects, filter_tags) context['projects'] = projects context.update(get_pagination_context(request, projects, max_count)) if request.is_ajax(): projects_html = render_to_string('learn/_learn_projects.html', context, context_instance=RequestContext(request)) projects_pagination = render_to_string('learn/_learn_pagination.html', context, context_instance=RequestContext(request)) learn_header = render_to_string('learn/_learn_header.html', context, context_instance=RequestContext(request)) learn_filters = render_to_string('learn/_learn_filters.html', context, context_instance=RequestContext(request)) data = { 'projects_html': projects_html, 'projects_pagination': projects_pagination, 'learn_header': learn_header, 'learn_filters': learn_filters, } json = simplejson.dumps(data) return http.HttpResponse(json, mimetype="application/json") return render_to_response('learn/learn.html', context, context_instance=RequestContext(request))
def dashboard(request): """Personalized dashboard for authenticated users.""" try: profile = request.user.get_profile() except UserProfile.DoesNotExist: user = request.user username = '' if user.username[:10] != 'openiduser': username = user.username form = CreateProfileForm(initial={ 'full_name': ' '.join((user.first_name, user.last_name)), 'email': user.email, 'username': username, }) messages.info(request, _('Please fill out your profile to finish registration.')) return render_to_response('dashboard/setup_profile.html', { 'form': form, }, context_instance=RequestContext(request)) show_welcome = not profile.discard_welcome activities = Activity.objects.dashboard( request.user.get_profile()) activities = filter_activities(request, activities) context = { 'profile': profile, 'profile_view': False, 'show_welcome': show_welcome, 'domain': Site.objects.get_current().domain, 'dashboard_url': reverse('dashboard'), } context.update(get_pagination_context(request, activities)) return render_to_response('dashboard/dashboard.html', context, context_instance=RequestContext(request))
def project_wall(request, project, discussion_area=False): is_organizing = project.is_organizing(request.user) is_participating = project.is_participating(request.user) if is_organizing: form = statuses_forms.ImportantStatusForm() elif is_participating: form = statuses_forms.StatusForm() else: form = None activities = project.activities() if discussion_area: activities = apply_filter(activities, "messages") else: activities = filter_activities(request, activities) if project.category == Project.CHALLENGE: url = reverse("projects_discussion_area", kwargs=dict(slug=project.slug)) else: url = project.get_absolute_url() context = { "request": request, "user": request.user, "project": project, "participating": is_participating, "organizing": is_organizing, "form": form, "discussion_area": discussion_area, "domain": Site.objects.get_current().domain, "wall_url": url, } context.update(get_pagination_context(request, activities)) return context
def show_signup(request, slug): sign_up = get_object_or_404(Signup, project__slug=slug) pending_answers = sign_up.answers.filter(deleted=False, accepted=False) project = sign_up.project is_organizing = is_participating = can_post_answer = False if request.user.is_authenticated(): profile = request.user.get_profile() is_organizing = project.organizers().filter(user=profile).exists() is_participating = project.participants().filter(user=profile).exists() if not is_organizing: if sign_up.status != Signup.CLOSED and not is_participating: can_post_answer = (not pending_answers.filter( author=profile).exists()) pending_answers_count = pending_answers.count() answers = sign_up.get_visible_answers(request.user) context = { 'sign_up': sign_up, 'project': project, 'organizing': is_organizing, 'participating': is_participating, 'can_post_answer': can_post_answer, 'pending_answers_count': pending_answers_count, } context.update(get_pagination_context(request, answers)) return render_to_response('signups/sign_up.html', context, context_instance=RequestContext(request))
def show(request, slug): project = get_object_or_404(Project, slug=slug) is_organizing = project.is_organizing(request.user) is_participating = project.is_participating(request.user) is_following = project.is_following(request.user) content_pages = Page.objects.filter(project__pk=project.pk, listed=True, deleted=False).order_by('index') content_pages_for_header = content_pages[0:3] content_pages_count = len(content_pages) if is_organizing: form = statuses_forms.ImportantStatusForm() elif is_participating: form = statuses_forms.StatusForm() else: form = None activities = project.activities() activities = filter_activities(request, activities) context = { 'project': project, 'participating': is_participating, 'following': is_following, 'organizing': is_organizing, 'content_pages_for_header': content_pages_for_header, 'content_pages_count': content_pages_count, 'form': form, 'domain': Site.objects.get_current().domain, } context.update(get_pagination_context(request, activities)) return render_to_response('projects/project.html', context, context_instance=RequestContext(request))
def show_page(request, slug, page_slug): page = get_object_or_404(Page, project__slug=slug, slug=page_slug) is_challenge = (page.project.category == Project.CHALLENGE) if is_challenge and not page.listed: msg = _("This page is not accesible on a %s.") return http.HttpResponseForbidden(msg % page.project.kind.lower()) can_edit = page.can_edit(request.user) if page.deleted: messages.error(request, _('This task was deleted.')) if can_edit: return http.HttpResponseRedirect(reverse('page_history', kwargs={'slug': page.project.slug, 'page_slug': page.slug})) else: return http.HttpResponseRedirect(page.project.get_absolute_url()) new_comment_url = reverse('page_comment', kwargs=dict( scope_app_label='projects', scope_model='project', scope_pk=page.project.id, page_app_label='content', page_model='page', page_pk=page.id)) first_level_comments = page.first_level_comments() all_listed_pages = page.project.pages.filter(deleted=False, listed=True).order_by('index') context = { 'page': page, 'project': page.project, 'can_edit': can_edit, 'can_comment': page.can_comment(request.user), 'new_comment_url': new_comment_url, 'is_challenge': is_challenge, 'all_listed_pages': all_listed_pages, } context.update(get_pagination_context(request, first_level_comments)) context.update(get_google_tracking_context(page.project)) return render_to_response('content/page.html', context, context_instance=RequestContext(request))
def list_tagged_all(request, tag_slug): """Display a list of non-user objects that are tagged with the tag and tag type.""" school = None tag = get_object_or_404(GeneralTag, slug=tag_slug) directory_url = reverse('tags_tagged_list', kwargs=dict(tag_slug=tag_slug)) if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) except School.DoesNotExist: return http.HttpResponseRedirect(directory_url) projects = Project.objects.filter(not_listed=False, tags__slug=tag_slug).exclude( category=Project.CHALLENGE).order_by('name') if school: projects = projects.filter(school=school) context = { 'tagged': projects, 'tag': tag, 'school': school, 'directory_url': directory_url, } context.update(get_pagination_context(request, projects, 24)) return render_to_response('tags/directory.html', context, context_instance=RequestContext(request))
def learn(request): projects = Project.objects.filter(not_listed=False, archived=False, under_development=False, deleted=False) if 'school' in request.GET: projects = projects.filter(school__slug=request.GET['school']) if 'featured' in request.GET: featured = request.GET['featured'] if featured == 'staff': projects = projects.filter(featured=True) elif featured == 'community': projects = projects.filter(community_featured=True) elif featured == 'fresh': one_week = datetime.datetime.now() - datetime.timedelta(weeks=1) projects = projects.filter(created_on__gte=one_week) if 'lang' in request.GET: projects = projects.filter(language=request.GET['lang']) if 'tag' in request.GET: projects = Project.get_tagged_projects(request.GET['tag'], projects) context = { 'projects': projects, 'schools': School.objects.all(), 'popular_tags': Project.get_popular_tags(), 'tags_form': project_forms.ProjectsTagSearch() } context.update(get_pagination_context(request, projects, 24)) return render_to_response('projects/learn.html', context, context_instance=RequestContext(request))
def list_tagged_all(request, tag_slug): """Display a list of non-user objects that are tagged with the tag and tag type.""" school = None tag = get_object_or_404(GeneralTag, slug=tag_slug) directory_url = reverse('tags_tagged_list', kwargs=dict(tag_slug=tag_slug)) if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) except School.DoesNotExist: return http.HttpResponseRedirect(directory_url) projects = Project.objects.filter( not_listed=False, tags__slug=tag_slug).exclude( category=Project.CHALLENGE).order_by('name') if school: projects = projects.filter(school=school) context = { 'tagged': projects, 'tag': tag, 'school': school, 'directory_url': directory_url, } context.update(get_pagination_context(request, projects, 24)) return render_to_response('tags/directory.html', context, context_instance=RequestContext(request))
def user_list(request, slug): """Display full list of users for the project.""" project = get_object_or_404(Project, slug=slug) participants = project.non_organizer_participants() followers = project.non_participant_followers() projects_users_url = reverse('projects_user_list', kwargs=dict(slug=project.slug)) context = { 'project': project, 'organizers': project.organizers(), 'projects_users_url': projects_users_url, } context.update(get_pagination_context(request, participants, 24, prefix='participants_')) context.update(get_pagination_context(request, followers, 24, prefix='followers_')) return render_to_response('projects/project_user_list.html', context, context_instance=RequestContext(request))
def show_badge(request, slug): try: badge = Badge.objects.get(slug=slug) except Badge.DoesNotExist: return pilot_badge_redirect(request, slug) is_eligible = False applications = [] peer_assessment = (badge.assessment_type == Badge.PEER) skill_badge = (badge.badge_type == Badge.SKILL) community_badge = (badge.badge_type == Badge.COMMUNITY) other_badge = (badge.badge_type == Badge.OTHER) submissions = badge.submissions.all().order_by('-created_on') if request.user.is_authenticated(): user = request.user.get_profile() is_eligible = badge.is_eligible(user) applications = submissions.filter(author=user) awarded_user_ids = badge.awards.all().values('user_id') awarded_users = UserProfile.objects.filter(deleted=False, id__in=awarded_user_ids) related_projects = badge.groups.all() prerequisites = badge.prerequisites.all() other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5] context = { 'badge': badge, 'is_eligible': is_eligible, 'peer_skill': peer_assessment and skill_badge, 'peer_community': peer_assessment and community_badge, 'other_badge': other_badge, 'related_projects': related_projects, 'prerequisites': prerequisites, 'applications': applications, 'other_badges_can_apply_for': other_badges_can_apply_for, } context.update( get_pagination_context(request, awarded_users, 24, prefix='awarded_users_')) context.update( get_pagination_context(request, submissions, 24, prefix='submissions_')) return render_to_response('badges/badge.html', context, context_instance=RequestContext(request))
def projects_reviews_list(request, toggled_reviewed=False): accepted_reviews = Review.objects.filter( accepted=True).values('project_id') new_projects = Project.objects.filter(under_development=False, archived=False, deleted=False, not_listed=False).exclude( id__in=accepted_reviews) reviewed_projects = Project.objects.filter( id__in=accepted_reviews) context = { 'toggled_reviewed': toggled_reviewed, 'show_new_page_url': reverse('reviews_show_new'), 'show_reviewed_page_url': reverse('reviews_show_reviewed') } context.update(get_pagination_context(request, new_projects, 24, prefix='new_')) context.update(get_pagination_context(request, reviewed_projects, 24, prefix='reviewed_')) return render_to_response('reviews/projects_reviews_list.html', context, context_instance=RequestContext(request))
def profile_view(request, username): profile = get_object_or_404(UserProfile, username=username) if profile.deleted: messages.error(request, _("This user account was deleted.")) return http.HttpResponseRedirect(reverse("users_user_list")) activities = Activity.objects.for_user(profile) activities = filter_activities(request, activities) context = {"profile": profile, "profile_view": True, "domain": Site.objects.get_current().domain} context.update(get_pagination_context(request, activities)) return render_to_response("users/profile.html", context, context_instance=RequestContext(request))
def show_badge(request, slug): try: badge = Badge.objects.get(slug=slug) except Badge.DoesNotExist: return pilot_badge_redirect(request, slug) is_eligible = False applications = [] peer_assessment = (badge.assessment_type == Badge.PEER) skill_badge = (badge.badge_type == Badge.SKILL) community_badge = (badge.badge_type == Badge.COMMUNITY) other_badge = (badge.badge_type == Badge.OTHER) submissions = badge.submissions.all().order_by( '-created_on') if request.user.is_authenticated(): user = request.user.get_profile() is_eligible = badge.is_eligible(user) applications = submissions.filter(author=user) awarded_user_ids = badge.awards.all().values('user_id') awarded_users = UserProfile.objects.filter( deleted=False, id__in=awarded_user_ids) related_projects = badge.groups.all() prerequisites = badge.prerequisites.all() other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5] context = { 'badge': badge, 'is_eligible': is_eligible, 'peer_skill': peer_assessment and skill_badge, 'peer_community': peer_assessment and community_badge, 'other_badge': other_badge, 'related_projects': related_projects, 'prerequisites': prerequisites, 'applications': applications, 'other_badges_can_apply_for': other_badges_can_apply_for, } context.update(get_pagination_context(request, awarded_users, 24, prefix='awarded_users_')) context.update(get_pagination_context(request, submissions, 24, prefix='submissions_')) return render_to_response('badges/badge.html', context, context_instance=RequestContext(request))
def show_badge(request, slug): try: badge = Badge.objects.get(slug=slug) except Badge.DoesNotExist: return pilot_badge_redirect(request, slug) can_post_submission = badge.can_post_submission(request.user) can_give_to_peer = badge.can_give_to_peer(request.user) submissions = badge.submissions.all().order_by('-created_on') if request.user.is_authenticated(): user = request.user.get_profile() user_submissions = submissions.filter(author=user) else: user_submissions = Submission.objects.none() awarded_user_ids = badge.awards.all().values('user_id') awarded_users = UserProfile.objects.filter(deleted=False, id__in=awarded_user_ids) related_projects = badge.groups.filter(deleted=False) prerequisites = badge.prerequisites.all() other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5] context = { 'badge': badge, 'can_post_submission': can_post_submission, 'can_give_to_peer': can_give_to_peer, 'related_projects': related_projects, 'prerequisites': prerequisites, 'user_submissions': user_submissions, 'other_badges_can_apply_for': other_badges_can_apply_for, } context.update( get_pagination_context(request, awarded_users, 24, prefix='awarded_users_')) context.update( get_pagination_context(request, submissions, 24, prefix='submissions_')) return render_to_response('badges/badge.html', context, context_instance=RequestContext(request))
def list_all(request): school = None directory_url = reverse("projects_directory") if "school" in request.GET: try: school = School.objects.get(slug=request.GET["school"]) except School.DoesNotExist: return http.HttpResponseRedirect(directory_url) projects = Project.objects.filter(not_listed=False).order_by("name") if school: projects = projects.filter(school=school) context = {"school": school, "directory_url": directory_url} context.update(get_pagination_context(request, projects, 24)) return render_to_response("projects/directory.html", context, context_instance=RequestContext(request))
def projects_reviews_list(request, toggled_reviewed=False): accepted_reviews = Review.objects.filter( accepted=True).values('project_id') new_projects = Project.objects.filter( under_development=False, archived=False, deleted=False, not_listed=False).exclude(id__in=accepted_reviews) reviewed_projects = Project.objects.filter(id__in=accepted_reviews) context = { 'toggled_reviewed': toggled_reviewed, 'show_new_page_url': reverse('reviews_show_new'), 'show_reviewed_page_url': reverse('reviews_show_reviewed') } context.update( get_pagination_context(request, new_projects, 24, prefix='new_')) context.update( get_pagination_context(request, reviewed_projects, 24, prefix='reviewed_')) return render_to_response('reviews/projects_reviews_list.html', context, context_instance=RequestContext(request))
def list_all(request): school = None directory_url = reverse('projects_directory') if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) except School.DoesNotExist: return http.HttpResponseRedirect(directory_url) projects = Project.objects.filter(not_listed=False).order_by('name') if school: projects = projects.filter(school=school) context = {'school': school, 'directory_url': directory_url} context.update(get_pagination_context(request, projects, 24)) return render_to_response('projects/directory.html', context, context_instance=RequestContext(request))
def list_all(request): school = None directory_url = reverse('projects_directory') if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) except School.DoesNotExist: return http.HttpResponseRedirect(directory_url) projects = Project.objects.filter(not_listed=False, deleted=False).order_by('name') if school: projects = projects.filter(school=school) context = {'school': school, 'directory_url': directory_url} context.update(get_pagination_context(request, projects, 24)) return render_to_response('projects/directory.html', context, context_instance=RequestContext(request))
def profile_view(request, username): profile = get_object_or_404(UserProfile, username=username) if profile.deleted: messages.error(request, _('This user account was deleted.')) return http.HttpResponseRedirect(reverse('users_user_list')) activities = Activity.objects.for_user(profile) activities = filter_activities(request, activities) context = { 'profile': profile, 'profile_view': True, 'domain': Site.objects.get_current().domain, } context.update(get_pagination_context(request, activities)) return render_to_response('users/profile.html', context, context_instance=RequestContext(request))
def dashboard(request): """Personalized dashboard for authenticated users.""" try: profile = request.user.get_profile() current_projects = profile.get_current_projects(only_public=False) users_following = profile.following() users_followers = profile.followers() interests = profile.tags.filter(category='interest').exclude( slug='').order_by('name') desired_topics = profile.tags.exclude(slug='').filter( category='desired_topic').order_by('name') links = Link.objects.filter(user=profile, project__isnull=True).order_by('index') except UserProfile.DoesNotExist: user = request.user username = '' if user.username[:10] != 'openiduser': username = user.username form = CreateProfileForm(initial={ 'full_name': ' '.join((user.first_name, user.last_name)), 'email': user.email, 'username': username, }) messages.info(request, _('Please fill out your profile to finish registration.')) return render_to_response('dashboard/setup_profile.html', { 'form': form, }, context_instance=RequestContext(request)) show_welcome = not profile.discard_welcome activities = Activity.objects.dashboard( request.user.get_profile()) activities = filter_activities(request, activities) context = { 'profile': profile, 'current_projects': current_projects, 'users_following': users_following, 'users_followers': users_followers, 'interests': interests, 'desired_topics': desired_topics, 'links': links, 'show_welcome': show_welcome, 'domain': Site.objects.get_current().domain, 'dashboard_url': reverse('dashboard'), } context.update(get_pagination_context(request, activities)) return render_to_response('dashboard/dashboard.html', context, context_instance=RequestContext(request))
def show_page(request, slug, page_slug): page = get_object_or_404(Page, project__slug=slug, slug=page_slug) is_challenge = (page.project.category == Project.CHALLENGE) if is_challenge and not page.listed: msg = _("This page is not accesible on a %s.") return http.HttpResponseForbidden(msg % page.project.kind.lower()) can_edit = page.can_edit(request.user) if page.deleted: messages.error(request, _('This task was deleted.')) if can_edit: return http.HttpResponseRedirect( reverse('page_history', kwargs={ 'slug': page.project.slug, 'page_slug': page.slug })) else: return http.HttpResponseRedirect(page.project.get_absolute_url()) new_comment_url = reverse('page_comment', kwargs=dict(scope_app_label='projects', scope_model='project', scope_pk=page.project.id, page_app_label='content', page_model='page', page_pk=page.id)) first_level_comments = page.first_level_comments() all_listed_pages = page.project.pages.filter(deleted=False, listed=True).order_by('index') if is_challenge and request.user.is_authenticated(): profile = request.user.get_profile() page.is_done = PerUserTaskCompletion.objects.filter( user=profile, page=page, unchecked_on__isnull=True) context = { 'page': page, 'project': page.project, 'can_edit': can_edit, 'can_comment': page.can_comment(request.user), 'new_comment_url': new_comment_url, 'is_challenge': is_challenge, 'all_listed_pages': all_listed_pages, 'next_page': page.get_next_page(), } context.update(get_pagination_context(request, first_level_comments)) return render_to_response('content/page.html', context, context_instance=RequestContext(request))
def show_page(request, slug, page_slug): page = get_object_or_404(Page, project__slug=slug, slug=page_slug) is_challenge = page.project.category == Project.CHALLENGE if is_challenge and not page.listed: msg = _("This page is not accesible on a %s.") return http.HttpResponseForbidden(msg % page.project.kind.lower()) can_edit = page.can_edit(request.user) if page.deleted: messages.error(request, _("This task was deleted.")) if can_edit: return http.HttpResponseRedirect( reverse("page_history", kwargs={"slug": page.project.slug, "page_slug": page.slug}) ) else: return http.HttpResponseRedirect(page.project.get_absolute_url()) new_comment_url = reverse( "page_comment", kwargs=dict( scope_app_label="projects", scope_model="project", scope_pk=page.project.id, page_app_label="content", page_model="page", page_pk=page.id, ), ) first_level_comments = page.first_level_comments() all_listed_pages = page.project.pages.filter(deleted=False, listed=True).order_by("index") context = { "page": page, "project": page.project, "can_edit": can_edit, "can_comment": page.can_comment(request.user), "new_comment_url": new_comment_url, "is_challenge": is_challenge, "all_listed_pages": all_listed_pages, } context.update(get_pagination_context(request, first_level_comments)) context.update(get_google_tracking_context(page.project)) return render_to_response("content/page.html", context, context_instance=RequestContext(request))
def dashboard(request): """Personalized dashboard for authenticated users.""" try: profile = request.user.get_profile() return HttpResponseRedirect(reverse("users_profile_view", kwargs={"username": request.user.username})) except UserProfile.DoesNotExist: user = request.user username = "" if user.username[:10] != "openiduser": username = user.username form = CreateProfileForm( initial={ "full_name": " ".join((user.first_name, user.last_name)), "email": user.email, "username": username, } ) messages.info(request, _("Please fill out your profile to finish registration.")) return render_to_response( "dashboard/setup_profile.html", {"form": form}, context_instance=RequestContext(request) ) show_welcome = not profile.discard_welcome activities = Activity.objects.dashboard(request.user.get_profile()) activities = filter_activities(request, activities) context = { "profile": profile, "current_projects": current_projects, "users_following": users_following, "users_followers": users_followers, "interests": interests, "desired_topics": desired_topics, "links": links, "show_welcome": show_welcome, "domain": Site.objects.get_current().domain, "dashboard_url": reverse("dashboard"), } context.update(get_pagination_context(request, activities)) return render_to_response("dashboard/dashboard.html", context, context_instance=RequestContext(request))
def index(request, activity_id): activity = get_object_or_404(Activity, id=activity_id) context = { 'activity': activity, 'domain': Site.objects.get_current().domain, } if activity.scope_object: scope_url = activity.scope_object.get_absolute_url() context['project'] = activity.scope_object else: scope_url = activity.actor.get_absolute_url() context['profile'] = activity.actor context['profile_view'] = True if activity.deleted: messages.error(request, _('This activity was deleted.')) if activity.can_edit(request.user): return http.HttpResponseRedirect(reverse('activity_restore', kwargs={'activity_id': activity.id})) return http.HttpResponseRedirect(scope_url) replies = activity.first_level_comments() context.update(get_pagination_context(request, replies)) return render_to_response('activity/index.html', context, context_instance=RequestContext(request))
def learn(request, max_count=24): projects = Project.objects.filter(not_listed=False, deleted=False).order_by('-created_on') get_params = request.GET.copy() if not 'language' in get_params: get_params['language'] = get_language() form = project_forms.ProjectsFilterForm(projects, get_params) context = { 'schools': School.objects.all(), 'popular_tags': Project.get_popular_tags(), 'form': form, 'learn_url': reverse('projects_learn'), 'infinite_scroll': request.GET.get('infinite_scroll', False), } if form.is_valid(): archived = form.cleaned_data['archived'] under_development = form.cleaned_data['under_development'] projects = projects.filter(archived=archived, under_development=under_development) closed_signup = form.cleaned_data['closed_signup'] if closed_signup: projects = projects.exclude( category=Project.CHALLENGE).filter( sign_up__status=Signup.CLOSED) else: projects = projects.filter(Q(category=Project.CHALLENGE) | Q(sign_up__status=Signup.MODERATED) | Q(sign_up__status=Signup.NON_MODERATED)) featured = form.cleaned_data['featured'] if featured == project_forms.ProjectsFilterForm.SHOWCASE: context['learn_showcase'] = True projects = projects.filter(featured=True) elif featured == project_forms.ProjectsFilterForm.COMMUNITY: context['learn_community'] = True projects = projects.filter(community_featured=True) elif featured == project_forms.ProjectsFilterForm.FRESH: context['learn_fresh'] = True one_week = datetime.datetime.now() - datetime.timedelta(weeks=1) projects = projects.filter(created_on__gte=one_week) elif featured == project_forms.ProjectsFilterForm.POPULAR: popular = Relationship.objects.filter( deleted=False, target_project__isnull=False).values( 'target_project').annotate(Count('source')).order_by( '-source__count')[:max_count] popular_ids = [d['target_project'] for d in popular] projects = projects.filter(id__in=popular_ids) elif featured == project_forms.ProjectsFilterForm.UPDATED: external_ct = ContentType.objects.get_for_model(RemoteObject) relationship_ct = ContentType.objects.get_for_model(Relationship) last_updated = Activity.objects.filter( deleted=False, scope_object__isnull=False).exclude( target_content_type=external_ct).exclude( target_content_type=relationship_ct).values( 'scope_object').annotate(Max('created_on')).order_by( '-created_on__max')[:max_count] last_updated_ids = [d['scope_object'] for d in last_updated] projects = projects.filter(id__in=last_updated_ids) school = form.cleaned_data['school'] if school: context['learn_school'] = school projects = projects.filter(school=school) tag = form.cleaned_data['tag'] if tag: context['learn_tag'] = tag projects = Project.get_tagged_projects(tag, projects) if not form.cleaned_data['all_languages']: language = form.cleaned_data['language'] projects = projects.filter(language__startswith=language) reviewed = form.cleaned_data['reviewed'] if reviewed: accepted_reviews = Review.objects.filter( accepted=True).values('project_id') projects = projects.filter(id__in=accepted_reviews) context['projects'] = projects context.update(get_pagination_context(request, projects, max_count)) if request.is_ajax(): projects_html = render_to_string('projects/_learn_projects.html', context, context_instance=RequestContext(request)) projects_pagination = render_to_string('projects/_learn_pagination.html', context, context_instance=RequestContext(request)) learn_header = render_to_string('projects/_learn_header.html', context, context_instance=RequestContext(request)) learn_filters = render_to_string('projects/_learn_filters.html', context, context_instance=RequestContext(request)) data = { 'projects_html': projects_html, 'projects_pagination': projects_pagination, 'learn_header': learn_header, 'learn_filters': learn_filters, } json = simplejson.dumps(data) return http.HttpResponse(json, mimetype="application/json") return render_to_response('projects/learn.html', context, context_instance=RequestContext(request))