def admin_projects(request): """ Lists local projects in a table with links to edit or delete """ site = Site.objects.get_current() # optional active=True|False filter active = request.GET.get('active', None) if active != None: project_list = Project.objects.filter(site=Site.objects.get_current()).filter(active=ast.literal_eval(active))\ .order_by('short_name') else: if request.method == 'GET': project_list = Project.objects.filter(site=Site.objects.get_current()).order_by('short_name') else: # list project by search criteria. Search function located in utils.py # get list of all projects project_list = get_projects_by_name(request.POST['match']) # filter projects to include local site only project_list = project_list.filter(site=Site.objects.get_current()).order_by('short_name') # retrieve top-level projects, ordered alphabetically by short name. Only list those on the current site. return render(request, 'cog/admin/admin_projects.html', {'project_list': paginate(project_list, request), 'title': '%s Projects Administration' % site.name})
def signal_list(request, project_short_name): project = get_object_or_404(Project, short_name__iexact=project_short_name) # template in /templates/cog/signal return render(request, 'cog/signal/signal_list.html', {'project': project, 'title': '%s Activity' % project.full_name(), 'project_signals': paginate(project.signals(), request, max_counts_per_page=10)})
def post_list(request, project_short_name): project = get_object_or_404(Project, short_name__iexact=project_short_name) # query by project qset = Q(project=project) #TODO: remove type query if not needed (type is all posts) # query by type #type = request.GET.get('type', None) type = 'post' qset = qset & Q(type=type) list_title = 'List All Pages' #TODO: remove text query if not needed # text query query = request.GET.get('query', '') #if query: # qset = qset & (Q(title__icontains=query) | Q(body__icontains=query) | Q(author__first_name__icontains=query) | # Q(author__last_name__icontains=query) | Q(author__username__icontains=query)) # list_title = "Search Results for '%s'" % query # topic constraint topic = request.GET.get('topic', '') #if topic: # qset = qset & Q(topic__name=topic) # list_title += ' [topic=%s]' % topic # execute query, order by descending update date or title sortby = request.GET.get('sortby', 'title') if sortby == 'date': results = Post.objects.filter(project=project).distinct().order_by('-update_date') elif sortby == 'topic': results = Post.objects.filter(project=project).distinct().order_by('-topic') else: results = Post.objects.filter(project=project).distinct().order_by('title') # list all possible topics for posts of this project, and of given type # must follow the foreign key relation Post -> Topic backward (through 'topic.post_set') #TODO: remove topic list if not used #topic_list = Topic.objects.all().order_by('name') topic_list = Topic.objects.filter(Q(post__project=project) & Q(post__type=type)).distinct().order_by('-name') return render(request, 'cog/post/post_list.html', {"object_list": paginate(results, request, max_counts_per_page=50), "title": '%s Pages' % project.short_name, "list_title": list_title, "query": query, "project": project, "topic": topic, "topic_list": topic_list})
def doc_list(request, project_short_name): project = get_object_or_404(Project, short_name__iexact=project_short_name) # query by project qset = Q(project=project) #list_title = 'All Documents' # do not list private documents unless user is a project member if request.user.is_anonymous() or not userHasUserPermission(request.user, project): qset = qset & Q(is_private=False) # optional query parameters query = request.GET.get('query', '') if query: qset = qset & ( Q(title__icontains=query) | Q(description__icontains=query) | Q(path__icontains=query) ) #list_title = "Search Results for '%s'" % query # document type filter_by = request.GET.get('filter_by', DOCUMENT_TYPE_ALL) # validate 'filter_by' value if filter_by.lower() not in VALID_FILTER_BY_VALUES: raise Exception("Invalid 'filter_by' value") if filter_by != DOCUMENT_TYPE_ALL: types = DOCUMENT_TYPES[filter_by] _qset = Q(path__iendswith=types[0]) for type in types[1:]: _qset = _qset | Q(path__iendswith=type) #list_title += ", type: %s, " % filter_by qset = qset & _qset order_by = request.GET.get('order_by', 'title') # validate 'order_by' value if order_by.lower() not in VALID_ORDER_BY_VALUES: raise Exception("Invalid 'order_by' value") #list_title += ", order by %s" % order_by # execute query, order by descending update date results = Doc.objects.filter(qset).distinct().order_by(order_by) list_title = "Total Number of Matching Documents: %d" % len(results) return render(request, 'cog/doc/doc_list.html', {"object_list": paginate(results, request, max_counts_per_page=100), 'project': project, 'title': '%s Files' % project.short_name, "query": query, "order_by": order_by, "filter_by": filter_by, "list_title":list_title})
def render_membership_page(request, project, users, title, view_name): # load project groups groups = project.getGroups() return render(request, 'cog/membership/membership_list.html', {'project': project, 'users': paginate(users, request, max_counts_per_page=50), 'groups': groups, 'view_name': view_name, 'title': title, 'list_title': '%s Membership' % project.short_name})
def news_list(request, project_short_name): project = get_object_or_404(Project, short_name__iexact=project_short_name) return render( request, "cog/news/news_list.html", { "project": project, "title": "%s News" % project.short_name, "project_news": paginate(project_news(project), request, max_counts_per_page=10), }, )
def admin_users(request): # optional parameters (via GET or POST) queryDict = getQueryDict(request) sortby = queryDict.get('sortby', 'username') # default to sort by 'username' match = queryDict.get('match', None) if match: users = getAdminUsersThatMatch(match, sortby=sortby) else: users = User.objects.all().order_by(sortby) title = 'List System/Node Users' return render(request, 'cog/admin/admin_users.html', {'users': paginate(users, request, max_counts_per_page=50), 'title': title})
def paginate_filter(objects, request): # must use max_counts_per_page=MAX_COUNTS_PER_PAGE since a filter accepts at most 2 parameters return paginate(objects, request)