def application_entries_search(request, template_name="memberships/entries/search.html"): """ Displays a page for searching membership application entries. """ query = request.GET.get('q') if get_setting('site', 'global', 'searchindex') and query: entries = AppEntry.objects.search(query, user=request.user) else: status = request.GET.get('status', None) filters = get_query_filters(request.user, 'memberships.view_appentry') entries = AppEntry.objects.filter(filters).distinct() if status: status_filter = get_status_filter(status) entries = entries.filter(status_filter) entries = entries.select_related() entries = entries.order_by('-entry_time') apps = App.objects.all() types = MembershipType.objects.all() EventLog.objects.log() return render_to_response(template_name, { 'entries': entries, 'apps': apps, 'types': types, }, context_instance=RequestContext(request))
def search(request, template_name="profiles/search.html"): # check if allow anonymous user search allow_anonymous_search = get_setting('module', 'users', 'allowanonymoususersearchuser') allow_user_search = get_setting('module', 'users', 'allowusersearch') if request.user.is_anonymous(): if not allow_anonymous_search: raise Http403 if request.user.is_authenticated(): if not allow_user_search and not request.user.profile.is_superuser: raise Http403 query = request.GET.get('q', None) filters = get_query_filters(request.user, 'profiles.view_profile') profiles = Profile.objects.filter(filters).distinct() if query: profiles = profiles.filter(Q(user__first_name__icontains=query) | Q(user__last_name__icontains=query) | Q(user__email__icontains=query) | Q(user__username__icontains=query)) profiles = profiles.order_by('user__last_name', 'user__first_name') log_defaults = { 'event_id' : 124000, 'event_data': '%s searched by %s' % ('Profile', request.user), 'description': '%s searched' % 'Profile', 'user': request.user, 'request': request, 'source': 'profiles' } EventLog.objects.log(**log_defaults) return render_to_response(template_name, {'profiles':profiles, "user_this":None}, context_instance=RequestContext(request))
def navigation(context, nav_id): """ Renders the nav and its nav items. This will call nav_item that will call itself recursively nesting the subnavs """ user = AnonymousUser() if 'user' in context: if isinstance(context['user'], User): user = context['user'] try: nav_id = Variable(nav_id) nav_id = nav_id.resolve(context) except: pass try: filters = get_query_filters(user, 'navs.view_nav') navs = Nav.objects.filter(filters).filter(id=nav_id) if user.is_authenticated(): if not user.profile.is_superuser: navs = navs.distinct() nav = navs[0] except: return None context.update({ "nav": nav, "items": nav.top_items, }) return context
def search(request, template_name="articles/search.html"): get = dict(request.GET) query = get.pop('q', []) get.pop('page', None) # pop page query string out; page ruins pagination query_extra = ['%s:%s' % (k, v[0]) for k, v in get.items() if v[0].strip()] query = ' '.join(query) if query_extra: query = '%s %s' % (query, ' '.join(query_extra)) if get_setting('site', 'global', 'searchindex') and query: articles = Article.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'articles.view_article') articles = Article.objects.filter(filters).distinct() if not request.user.is_anonymous(): articles = articles.select_related() if not has_perm(request.user, 'articles.view_article'): articles = articles.filter(release_dt__lte=datetime.now()) articles = articles.order_by('-release_dt') EventLog.objects.log() # Query list of category and subcategory for dropdown filters category = request.GET.get('category') try: category = int(category) except: category = 0 categories, sub_categories = Article.objects.get_categories(category=category) return render_to_response(template_name, {'articles': articles, 'categories': categories, 'sub_categories': sub_categories}, context_instance=RequestContext(request))
def search(request, template_name="jobs/search.html"): query = request.GET.get('q', None) my_jobs = request.GET.get('my_jobs', False) my_pending_jobs = request.GET.get('my_pending_jobs', False) if get_setting('site', 'global', 'searchindex') and query: jobs = Job.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'jobs.view_job') jobs = Job.objects.filter(filters).distinct() if not request.user.is_anonymous(): jobs = jobs.select_related() jobs = jobs.order_by('status_detail', 'list_type', '-post_dt') # filter for "my jobs" if my_jobs and not request.user.is_anonymous(): template_name = "jobs/my_jobs.html" jobs = jobs.filter(creator_username=request.user.username) # filter for "my pending jobs" if my_pending_jobs and not request.user.is_anonymous(): template_name = "jobs/my_pending_jobs.html" jobs = jobs.filter(creator_username=request.user.username, status_detail__contains='pending') EventLog.objects.log() return render_to_response(template_name, {'jobs': jobs}, context_instance=RequestContext(request))
def index(request, template_name="help_files/index.html"): """List all topics and all links""" topic_pks = [] filters = get_query_filters(request.user, 'help_files.view_helpfile') # Access the join table and iterate over a dict to avoid # n+1 queries to get all of the correct topics. byhelpfile = {} for tp in HelpFile_Topics.objects.select_related('helpfile', 'topic').all(): byhelpfile.setdefault(tp.helpfile.id, []).append(tp.topic) # Use stored lists for hf in HelpFile.objects.filter(filters).distinct(): if byhelpfile.get(hf.id, ''): for topic in byhelpfile[hf.id]: topic_pks.append(topic.pk) topic_pks = sorted(list(set(topic_pks))) topics = Topic.objects.filter(pk__in=topic_pks) m = len(topics) / 2 topics = topics[:m], topics[m:] # two columns most_viewed = HelpFile.objects.filter(filters).order_by( '-view_totals').distinct()[:5] featured = HelpFile.objects.filter(filters).filter( is_featured=True).distinct()[:5] faq = HelpFile.objects.filter(filters).filter(is_faq=True).distinct()[:3] EventLog.objects.log() return render_to_response(template_name, locals(), context_instance=RequestContext(request))
def search(request, template_name="jobs/search.html"): query = request.GET.get('q', None) my_jobs = request.GET.get('my_jobs', False) my_pending_jobs = request.GET.get('my_pending_jobs', False) if get_setting('site', 'global', 'searchindex') and query: jobs = Job.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'jobs.view_job') jobs = Job.objects.filter(filters).distinct() if not request.user.is_anonymous(): jobs = jobs.select_related() jobs = jobs.order_by('status_detail', 'list_type', '-post_dt') # filter for "my jobs" if my_jobs and not request.user.is_anonymous(): template_name = "jobs/my_jobs.html" jobs = jobs.filter(creator_username=request.user.username) # filter for "my pending jobs" if my_pending_jobs and not request.user.is_anonymous(): template_name = "jobs/my_pending_jobs.html" jobs = jobs.filter( creator_username=request.user.username, status_detail__contains='pending' ) EventLog.objects.log() return render_to_response(template_name, {'jobs': jobs}, context_instance=RequestContext(request))
def search(request, template_name="stories/search.html"): """ This page lists out all stories from newest to oldest. If a search index is available, this page will also have the option to search through stories. """ has_index = get_setting('site', 'global', 'searchindex') query = request.GET.get('q', None) if has_index and query: stories = Story.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'stories.view_story') stories = Story.objects.filter(filters).distinct() if request.user.is_authenticated(): stories = stories.select_related() stories = stories.order_by('-create_dt') EventLog.objects.log( **{ 'event_id': 1060400, 'event_data': '%s searched by %s' % ('Story', request.user), 'description': '%s searched' % 'Story', 'user': request.user, 'request': request, 'source': 'stories' }) return render_to_response(template_name, {'stories': stories}, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): super(ArticleForm, self).__init__(*args, **kwargs) if self.instance.pk: self.fields['body'].widget.mce_attrs[ 'app_instance_id'] = self.instance.pk else: self.fields['body'].widget.mce_attrs['app_instance_id'] = 0 self.fields['group'].initial = Group.objects.get_initial_group_id() default_groups = Group.objects.filter(status=True, status_detail="active") if self.user and not self.user.profile.is_superuser: if 'status_detail' in self.fields: self.fields.pop('status_detail') filters = get_query_filters(self.user, 'user_groups.view_group', **{'perms_field': False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list('pk', 'name')) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list('pk', 'name') self.fields['group'].choices = groups_list self.fields['google_profile'].help_text = mark_safe( GOOGLE_PLUS_HELP_TEXT) self.fields['timezone'].initial = settings.TIME_ZONE
def search(request, template_name="user_groups/search.html"): """ This page lists out all user groups. If a search index is available, this page also allows you to search through user groups. """ has_index = get_setting('site', 'global', 'searchindex') query = request.GET.get('q', None) if has_index and query: groups = Group.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'groups.view_group', perms_field=False) groups = Group.objects.filter(filters).distinct() if request.user.is_authenticated(): groups = groups.select_related() groups = groups.order_by('slug') log_defaults = { 'event_id': 164000, 'event_data': '%s searched by %s' % ('Group', request.user), 'description': '%s searched' % 'Group', 'user': request.user, 'request': request, 'source': 'user_groups' } EventLog.objects.log(**log_defaults) return render_to_response(template_name, {'groups': groups}, context_instance=RequestContext(request))
def nav(context, nav_id): """ Renders the nav from cache if not will use the navigation tag for rendering the nav """ user = AnonymousUser() if 'user' in context: if isinstance(context['user'], User): user = context['user'] try: filters = get_query_filters(user, 'navs.view_nav') navs = Nav.objects.filter(filters).filter(id=nav_id) if user.is_authenticated(): if not user.profile.is_superuser: navs = navs.distinct() nav_object = navs[0] nav = get_nav(nav_object.pk) if not nav: cache_nav(nav_object) except: return None context.update({ "cached": nav, "nav_id": nav_id, }) return context
def search(request, template_name="resumes/search.html"): """ This page lists out all resumes from newest to oldest. If a search index is available, this page will also have the option to search through resumes. """ has_index = get_setting("site", "global", "searchindex") query = request.GET.get("q", None) if has_index and query: resumes = Resume.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, "resumes.view_resume") resumes = Resume.objects.filter(filters).distinct() if request.user.is_authenticated(): resumes = resumes.select_related() resumes = resumes.order_by("-create_dt") EventLog.objects.log( **{ "event_id": 354000, "event_data": "%s searched by %s" % ("Resume", request.user), "description": "%s searched" % "Resume", "user": request.user, "request": request, "source": "resumes", } ) return render_to_response(template_name, {"resumes": resumes}, context_instance=RequestContext(request))
def search(request, template_name="user_groups/search.html"): """ This page lists out all user groups. If a search index is available, this page also allows you to search through user groups. """ query = request.GET.get('q', None) form = GroupSearchForm(request.GET) cat = None filters = get_query_filters(request.user, 'groups.view_group', perms_field=False) groups = Group.objects.filter(filters).distinct() if request.user.is_authenticated(): groups = groups.select_related() if form.is_valid(): cat = form.cleaned_data['search_category'] if query and cat: groups = groups.filter(**{cat: query}) groups = groups.order_by('slug') EventLog.objects.log() return render_to_response(template_name, { 'groups': groups, 'form': form }, context_instance=RequestContext(request))
def search(request, template_name="directories/search.html"): get = dict(request.GET) query = get.pop('q', []) get.pop('page', None) # pop page query string out; page ruins pagination query_extra = ['%s:%s' % (k,v[0]) for k,v in get.items() if v[0].strip()] query = ' '.join(query) if query_extra: query = '%s %s' % (''.join(query), ' '.join(query_extra)) if get_setting('site', 'global', 'searchindex') and query: directories = Directory.objects.search(query, user=request.user).order_by('headline_exact') else: filters = get_query_filters(request.user, 'directories.view_directory') directories = Directory.objects.filter(filters).distinct() if not request.user.is_anonymous(): directories = directories.select_related() directories = directories.order_by('headline') EventLog.objects.log() category = request.GET.get('category') try: category = int(category) except: category = 0 categories, sub_categories = Directory.objects.get_categories(category=category) return render_to_response(template_name, { 'directories':directories, 'categories':categories, 'sub_categories':sub_categories, }, context_instance=RequestContext(request))
def membership_search(request, template_name="memberships/search.html"): membership_view_perms = get_setting('module', 'memberships', 'memberprotection') if not membership_view_perms == "public": return HttpResponseRedirect(reverse('profile.search') + "?members=on") query = request.GET.get('q') mem_type = request.GET.get('type') total_count = Membership.objects.all().count() if get_setting('site', 'global', 'searchindex') and (total_count > 1000 or query): members = Membership.objects.search(query, user=request.user) if mem_type: members = members.filter(mem_type=mem_type) members = members.order_by('last_name') else: filters = get_query_filters(request.user, 'memberships.view_membership') members = Membership.objects.filter(filters).distinct() if mem_type: members = members.filter(membership_type__pk=mem_type) members = members.exclude(status_detail='expired') members = members.order_by('user__last_name') types = MembershipType.objects.all() EventLog.objects.log() return render_to_response(template_name, {'members': members, 'types': types}, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): super(FileForm, self).__init__(*args, **kwargs) default_groups = Group.objects.filter(status=True, status_detail="active") if args: post_data = args[0] else: post_data = None if self.user and not self.user.profile.is_superuser: filters = get_query_filters(self.user, 'user_groups.view_group', **{'perms_field': False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list('pk', 'name')) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list('pk', 'name') self.fields['group'].choices = groups_list if self.instance and self.instance.pk: self.fields['file_sub_cat'].queryset = FilesCategory.objects.filter( parent=self.instance.file_cat) if post_data: file_cat = post_data.get('file_cat', '0') if file_cat and file_cat != '0' and file_cat != u'': file_cat = FilesCategory.objects.get(pk=int(file_cat)) self.fields['file_sub_cat'].queryset = FilesCategory.objects.filter(parent=file_cat)
def __init__(self, *args, **kwargs): if 'user' in kwargs: self.user = kwargs.pop('user', None) else: self.user = None data = args[0] if args else kwargs['data'] if 'data' in kwargs else None category = data['file_cat'] if data and 'file_cat' in data else None super(FileSearchForm, self).__init__(*args, **kwargs) user = self.user or AnonymousUser() filters = get_query_filters(user, 'user_groups.view_group', **{'perms_field': False}) groups = Group.objects.filter(filters).distinct() groups_list = [[g.id, g.name] for g in groups] if user.is_authenticated(): users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) groups_list.insert(0, ['', '------------']) self.fields['group'].choices = tuple(groups_list) # Update categories and subcategories choices main_categories = FilesCategory.objects.filter(parent__isnull=True) self.fields['file_cat'].queryset = main_categories if category: sub_categories = FilesCategory.objects.filter(parent=category) self.fields['file_sub_cat'].empty_label = "-----------" self.fields['file_sub_cat'].queryset = sub_categories
def __init__(self, *args, **kwargs): super(ArticleForm, self).__init__(*args, **kwargs) if self.instance.pk: self.fields['body'].widget.mce_attrs['app_instance_id'] = self.instance.pk else: self.fields['body'].widget.mce_attrs['app_instance_id'] = 0 self.fields['group'].initial = Group.objects.get_initial_group_id() default_groups = Group.objects.filter(status=True, status_detail="active") if self.user and not self.user.profile.is_superuser: if 'status_detail' in self.fields: self.fields.pop('status_detail') filters = get_query_filters(self.user, 'user_groups.view_group', **{'perms_field': False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list('pk', 'name')) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list('pk', 'name') self.fields['group'].choices = groups_list self.fields['google_profile'].help_text = mark_safe(GOOGLE_PLUS_HELP_TEXT)
def nearest(request, template_name="locations/nearest.html"): locations = [] lat, lng = None, None query = request.GET.get('q') filters = get_query_filters(request.user, 'locations.view_location') if query: lat, lng = get_coordinates(address=query) all_locations = Location.objects.filter(filters).distinct() if not request.user.is_anonymous(): all_locations = all_locations.select_related() if all((lat,lng)): for location in all_locations: location.distance = location.get_distance2(lat, lng) if location.distance != None: locations.append(location) locations.sort(key=lambda x: x.distance) EventLog.objects.log() return render_to_response(template_name, { 'locations':locations, 'origin': {'lat':lat,'lng':lng}, }, context_instance=RequestContext(request))
def search(request, template_name="resumes/search.html"): """ This page lists out all resumes from newest to oldest. If a search index is available, this page will also have the option to search through resumes. """ has_index = get_setting('site', 'global', 'searchindex') query = request.GET.get('q', None) if has_index and query: resumes = Resume.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'resumes.view_resume') resumes = Resume.objects.filter(filters).distinct() if request.user.is_authenticated(): resumes = resumes.select_related() resumes = resumes.order_by('-create_dt') EventLog.objects.log(**{ 'event_id' : 354000, 'event_data': '%s searched by %s' % ('Resume', request.user), 'description': '%s searched' % 'Resume', 'user': request.user, 'request': request, 'source': 'resumes' }) return render_to_response(template_name, {'resumes':resumes}, context_instance=RequestContext(request))
def search(request, template_name="user_groups/search.html"): """ This page lists out all user groups. If a search index is available, this page also allows you to search through user groups. """ has_index = get_setting('site', 'global', 'searchindex') query = request.GET.get('q', None) if has_index and query: groups = Group.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'groups.view_group', perms_field=False) groups = Group.objects.filter(filters).distinct() if request.user.is_authenticated(): groups = groups.select_related() groups = groups.order_by('slug') log_defaults = { 'event_id' : 164000, 'event_data': '%s searched by %s' % ('Group', request.user), 'description': '%s searched' % 'Group', 'user': request.user, 'request': request, 'source': 'user_groups' } EventLog.objects.log(**log_defaults) return render_to_response(template_name, {'groups':groups}, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): super(StoryForm, self).__init__(*args, **kwargs) if self.instance.image: self.fields['photo_upload'].help_text = '<input name="remove_photo" id="id_remove_photo" type="checkbox"/> Remove current image: <a target="_blank" href="/files/%s/">%s</a>' % (self.instance.image.pk, basename(self.instance.image.file.name)) else: self.fields.pop('remove_photo') default_groups = Group.objects.filter(status=True, status_detail="active") if self.user and not self.user.profile.is_superuser: if 'status_detail' in self.fields: self.fields.pop('status_detail') filters = get_query_filters(self.user, 'user_groups.view_group', **{'perms_field': False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list('pk', 'name')) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list('pk', 'name') self.fields['group'].choices = groups_list
def search(request, template_name="locations/search.html"): filters = get_query_filters(request.user, 'locations.view_location') locations = Location.objects.filter(filters).distinct() if not request.user.is_anonymous(): locations = locations.select_related() data = { 'country': request.POST.get('country', ''), 'state': request.POST.get('state', ''), 'city': request.POST.get('city', '') } form = LocationFilterForm(data, request.POST or None) if request.method == 'POST' and form.is_valid(): locations = form.filter_results(locations) locations = locations.order_by('location_name') EventLog.objects.log() return render_to_response(template_name, { 'locations': locations, 'form': form }, context_instance=RequestContext(request))
def render(self, context): user = AnonymousUser() if 'user' in context: if isinstance(context['user'], User): user = context['user'] try: pk = Variable(self.pk) pk = pk.resolve(context) except: pk = self.pk try: filters = get_query_filters(user, 'navs.view_nav') nav = Nav.objects.filter(filters).filter(pk=pk) if user.is_authenticated(): if not user.profile.is_superuser: nav = nav.distinct() context[self.context_var] = nav[0] except: pass return unicode()
def search(request, cat_slug=None, template_name="videos/list.html"): """ This page lists out all videos. The order can be customized. If a search index is available, this page will also have the option to search through videos. """ has_index = get_setting('site', 'global', 'searchindex') query = request.GET.get('q', None) categories = Category.objects.all() cat = request.GET.get('cat', cat_slug) if has_index and query: if cat: cat_query = 'cat:%s' % cat query = ' '.join([query, cat_query]) categories = Category.objects.filter(slug=cat) category = None if categories: category = category[0] videos = Video.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'videos.view_video') videos = Video.objects.filter(filters).distinct() if request.user.is_authenticated(): videos = videos.select_related() videos = videos.order_by('-ordering', '-create_dt') EventLog.objects.log() return render_to_response(template_name, locals(), context_instance=RequestContext(request))
def render(self, context): day = self.day.resolve(context) type_slug = self.type_slug.resolve(context) types = Type.objects.filter(slug=type_slug) type = None if types: type = types[0] day = datetime(day.year, day.month, day.day) weekday = day.strftime('%a') #one day offset so we can get all the events on that day bound = timedelta(hours=23, minutes=59) start_dt = day+bound end_dt = day filters = get_query_filters(context['user'], 'events.view_event') events = Event.objects.filter(filters).filter(start_dt__lte=start_dt, end_dt__gte=end_dt).distinct() if type: events = events.filter(type=type) if weekday == 'Sun' or weekday == 'Sat': events = events.filter(on_weekend=True) events = events.order_by(self.ordering or 'start_dt') context[self.context_var] = events return ''
def render(self, context): user = AnonymousUser() if 'user' in context: if isinstance(context['user'], User): user = context['user'] try: pk = Variable(self.pk) pk = pk.resolve(context) except: pk = self.pk try: filters = get_query_filters(user, 'boxes.view_box') box = Box.objects.filter(filters).filter(pk=pk) if user.is_authenticated(): if not user.profile.is_superuser: box = box.distinct() context['box'] = box[0] template = get_template('boxes/edit-link.html') output = '<div id="box-%s" class="boxes">%s %s</div>' % ( box[0].pk, box[0].content, template.render(context), ) return output except: return unicode()
def __init__(self, *args, **kwargs): super(ArticleForm, self).__init__(*args, **kwargs) if self.instance.pk: self.fields["body"].widget.mce_attrs["app_instance_id"] = self.instance.pk else: self.fields["body"].widget.mce_attrs["app_instance_id"] = 0 self.fields["group"].initial = Group.objects.get_initial_group_id() default_groups = Group.objects.filter(status=True, status_detail="active") if self.user and not self.user.profile.is_superuser: if "status_detail" in self.fields: self.fields.pop("status_detail") filters = get_query_filters(self.user, "user_groups.view_group", **{"perms_field": False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list("pk", "name")) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list("pk", "name") self.fields["group"].choices = groups_list
def detail(request, slug, template_name="committees/detail.html"): committee = get_object_or_404(Committee, slug=slug) if has_perm(request.user, "committee.view_committee", committee): EventLog.objects.log(instance=committee) officers = committee.officers() # has_group_view_permission is True if there is at least one # group where the user is a member that has a view_committee permission. has_group_view_permission = False # Check user for group view permissions if request.user.is_authenticated(): groups = request.user.group_set.all() perms = has_groups_perms(committee).filter(group__in=groups) for perm in perms: # Check if permission has view committee permission has_group_view_permission |= perm.codename == "view_committee" if has_group_view_permission: break filters = get_query_filters(request.user, "files.view_file") files = File.objects.filter(filters).filter(group=committee.group).distinct() return render_to_response( template_name, { "committee": committee, "officers": officers, "files": files, "has_group_view_permission": has_group_view_permission, }, context_instance=RequestContext(request), ) else: raise Http403
def render(self, context): day = self.day.resolve(context) type_slug = self.type_slug.resolve(context) types = Type.objects.filter(slug=type_slug) type = None if types: type = types[0] day = datetime(day.year, day.month, day.day) weekday = day.strftime('%a') #one day offset so we can get all the events on that day bound = timedelta(hours=23, minutes=59) start_dt = day + bound end_dt = day filters = get_query_filters(context['user'], 'events.view_event') events = Event.objects.filter(filters).filter( start_dt__lte=start_dt, end_dt__gte=end_dt).distinct() if type: events = events.filter(type=type) if weekday == 'Sun' or weekday == 'Sat': events = events.filter(on_weekend=True) events = events.order_by(self.ordering or 'start_dt') context[self.context_var] = events return ''
def search(request, template_name="user_groups/search.html"): """ This page lists out all user groups. If a search index is available, this page also allows you to search through user groups. """ query = request.GET.get('q', None) form = GroupSearchForm(request.GET) cat = None filters = get_query_filters(request.user, 'groups.view_group', perms_field=False) groups = Group.objects.filter(filters).distinct() if request.user.is_authenticated(): groups = groups.select_related() if form.is_valid(): cat = form.cleaned_data['search_category'] if query and cat: groups = groups.filter(**{cat: query} ) groups = groups.order_by('slug') EventLog.objects.log() return render_to_response(template_name, {'groups':groups, 'form': form}, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): super(StoryForm, self).__init__(*args, **kwargs) if self.instance.image: self.fields[ 'photo_upload'].help_text = '<input name="remove_photo" id="id_remove_photo" type="checkbox"/> Remove current image: <a target="_blank" href="/files/%s/">%s</a>' % ( self.instance.image.pk, basename(self.instance.image.file.name)) else: self.fields.pop('remove_photo') default_groups = Group.objects.filter(status=True, status_detail="active") if self.user and not self.user.profile.is_superuser: if 'status_detail' in self.fields: self.fields.pop('status_detail') filters = get_query_filters(self.user, 'user_groups.view_group', **{'perms_field': False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list('pk', 'name')) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list('pk', 'name') self.fields['group'].choices = groups_list
def detail(request, slug, template_name="studygroups/detail.html"): study_group = get_object_or_404(StudyGroup, slug=slug) if has_perm(request.user, 'studygroup.view_studygroup', study_group): EventLog.objects.log(instance=study_group) officers = study_group.officers() #has_group_view_permission is True if there is at least one #group where the user is a member that has a view_studygroup permission. has_group_view_permission = False #Check user for group view permissions if request.user.is_authenticated(): groups = request.user.group_set.all() perms = has_groups_perms(study_group).filter(group__in=groups) for perm in perms: #Check if permission has view studygroup permission has_group_view_permission |= perm.codename == 'view_studygroup' if has_group_view_permission: break filters = get_query_filters(request.user, 'files.view_file') files = File.objects.filter(filters).filter(group=study_group.group).distinct() return render_to_response(template_name, { 'study_group': study_group, 'officers': officers, 'files': files, 'has_group_view_permission': has_group_view_permission, }, context_instance=RequestContext(request)) else: raise Http403
def nearest(request, template_name="locations/nearest.html"): locations = [] lat, lng = None, None query = request.GET.get('q') filters = get_query_filters(request.user, 'locations.view_location') if query: lat, lng = get_coordinates(address=query) all_locations = Location.objects.filter(filters).distinct() if not request.user.is_anonymous(): all_locations = all_locations.select_related() if all((lat, lng)): for location in all_locations: location.distance = location.get_distance2(lat, lng) if location.distance != None: locations.append(location) locations.sort(key=lambda x: x.distance) EventLog.objects.log() return render_to_response(template_name, { 'locations': locations, 'origin': { 'lat': lat, 'lng': lng }, }, context_instance=RequestContext(request))
def index(request, template_name="help_files/index.html"): """List all topics and all links""" topic_pks = [] filters = get_query_filters(request.user, 'help_files.view_helpfile') # Access the join table and iterate over a dict to avoid # n+1 queries to get all of the correct topics. byhelpfile = {} for tp in HelpFile_Topics.objects.select_related('helpfile', 'topic').all(): byhelpfile.setdefault(tp.helpfile.id, []).append(tp.topic) # Use stored lists for hf in HelpFile.objects.filter(filters).distinct(): if byhelpfile.get(hf.id, ''): for topic in byhelpfile[hf.id]: topic_pks.append(topic.pk) topic_pks = sorted(list(set(topic_pks))) topics = Topic.objects.filter(pk__in=topic_pks) m = len(topics) / 2 topics = topics[:m], topics[m:] # two columns most_viewed = HelpFile.objects.filter(filters).order_by('-view_totals').distinct()[:5] featured = HelpFile.objects.filter(filters).filter(is_featured=True).distinct()[:5] faq = HelpFile.objects.filter(filters).filter(is_faq=True).distinct()[:3] EventLog.objects.log() return render_to_response(template_name, locals(), context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): super(NewsForm, self).__init__(*args, **kwargs) if self.instance.pk: self.fields['body'].widget.mce_attrs['app_instance_id'] = self.instance.pk else: self.fields['body'].widget.mce_attrs['app_instance_id'] = 0 self.fields['group'].initial = Group.objects.get_initial_group_id() default_groups = Group.objects.filter(status=True, status_detail="active") #if not self.user.profile.is_superuser: if self.user and not self.user.profile.is_superuser: if 'status_detail' in self.fields: self.fields.pop('status_detail') filters = get_query_filters(self.user, 'user_groups.view_group', **{'perms_field': False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list('pk', 'name')) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list('pk', 'name') self.fields['group'].choices = groups_list self.fields['google_profile'].help_text = mark_safe(GOOGLE_PLUS_HELP_TEXT) # only show the remove photo checkbox if there is already a thumbnail if self.instance.thumbnail: self.fields['photo_upload'].help_text = '<input name="remove_photo" id="id_remove_photo" type="checkbox"/> Remove current image: <a target="_blank" href="/files/%s/">%s</a>' % (self.instance.thumbnail.pk, basename(self.instance.thumbnail.file.name)) else: self.fields.pop('remove_photo')
def search(request, template_name="articles/search.html"): filters = get_query_filters(request.user, 'articles.view_article') articles = Article.objects.filter(filters).distinct() cat = None if not request.user.is_anonymous(): articles = articles.select_related() query = request.GET.get('q', None) tag = request.GET.get('tag', None) form = ArticleSearchForm(request.GET, is_superuser=request.user.is_superuser) if tag: articles = articles.filter(tags__icontains=tag) if form.is_valid(): cat = form.cleaned_data['search_category'] filter_date = form.cleaned_data['filter_date'] date = form.cleaned_data['date'] if cat in ('featured', 'syndicate'): articles = articles.filter(**{cat: True}) elif query and cat: articles = articles.filter(**{cat: query}) if filter_date and date: articles = articles.filter(release_dt__month=date.month, release_dt__day=date.day, release_dt__year=date.year) if not has_perm(request.user, 'articles.view_article'): articles = articles.filter(release_dt__lte=datetime.now()) # don't use order_by with "whoosh" if not query or settings.HAYSTACK_SEARCH_ENGINE.lower() != "whoosh": articles = articles.order_by('-release_dt') else: articles = articles.order_by('-create_dt') EventLog.objects.log() # Query list of category and subcategory for dropdown filters category = request.GET.get('category') try: category = int(category) except: category = 0 categories, sub_categories = Article.objects.get_categories( category=category) return render_to_response(template_name, { 'articles': articles, 'categories': categories, 'form': form, 'sub_categories': sub_categories }, context_instance=RequestContext(request))
def search(request, template_name="articles/search.html"): filters = get_query_filters(request.user, 'articles.view_article') articles = Article.objects.filter(filters).distinct() cat = None if not request.user.is_anonymous(): articles = articles.select_related() query = request.GET.get('q', None) # Handle legacy tag links if query and "tag:" in query: return HttpResponseRedirect("%s?q=%s&search_category=tags__icontains" %(reverse('articles'), query.replace('tag:', ''))) tag = request.GET.get('tag', None) form = ArticleSearchForm(request.GET, is_superuser=request.user.is_superuser) if tag: articles = articles.filter(tags__icontains=tag) if form.is_valid(): cat = form.cleaned_data['search_category'] filter_date = form.cleaned_data['filter_date'] date = form.cleaned_data['date'] if cat in ('featured', 'syndicate'): articles = articles.filter(**{cat : True } ) elif query and cat: articles = articles.filter( **{cat : query} ) if filter_date and date: articles = articles.filter( release_dt__month=date.month, release_dt__day=date.day, release_dt__year=date.year ) if not has_perm(request.user, 'articles.view_article'): if request.user.is_anonymous(): articles = articles.filter(release_dt__lte=datetime.now()) else: articles = articles.filter(Q(release_dt__lte=datetime.now()) | Q(owner=request.user) | Q(creator=request.user)) # Query list of category and subcategory for dropdown filters category = request.GET.get('category') sub_cat = request.GET.get('sub_category') try: category = int(category) except: category = 0 categories, sub_categories = Article.objects.get_categories(category=category) if category > 0: cat_article_ids = CategoryItem.objects.filter(content_type_id=ContentType.objects.get_for_model(Article), category_id=category, parent_id__isnull=True).values('object_id') articles = articles.filter(id__in=[c['object_id'] for c in cat_article_ids]) if sub_cat: try: sub_cat = int(sub_cat) subcat_article_ids = CategoryItem.objects.filter(content_type_id=ContentType.objects.get_for_model(Article), parent_id=sub_cat, category_id__isnull=True).values('object_id') articles = articles.filter(id__in=[c['object_id'] for c in subcat_article_ids]) except Exception, e: pass
def search(request, template_name="entities/search.html"): filters = get_query_filters(request.user, 'entities.view_entity') entities = Entity.objects.filter(filters).distinct() EventLog.objects.log() return render_to_response(template_name, {'entities':entities}, context_instance=RequestContext(request))
def search(request, template_name="entities/search.html"): filters = get_query_filters(request.user, 'entities.view_entity') entities = Entity.objects.filter(filters).distinct() EventLog.objects.log() return render_to_response(template_name, {'entities': entities}, context_instance=RequestContext(request))
def search(request, template_name="articles/search.html"): filters = get_query_filters(request.user, 'articles.view_article') articles = Article.objects.filter(filters).distinct() cat = None if not request.user.is_anonymous(): articles = articles.select_related() query = request.GET.get('q', None) # Handle legacy tag links if query and "tag:" in query: return HttpResponseRedirect("%s?q=%s&search_category=tags__icontains" %(reverse('articles'), query.replace('tag:', ''))) tag = request.GET.get('tag', None) form = ArticleSearchForm(request.GET, is_superuser=request.user.is_superuser) if tag: articles = articles.filter(tags__icontains=tag) if form.is_valid(): cat = form.cleaned_data['search_category'] filter_date = form.cleaned_data['filter_date'] date = form.cleaned_data['date'] if cat in ('featured', 'syndicate'): articles = articles.filter(**{cat : True } ) elif query and cat: articles = articles.filter( **{cat : query} ) if filter_date and date: articles = articles.filter( release_dt__month=date.month, release_dt__day=date.day, release_dt__year=date.year ) if not has_perm(request.user, 'articles.view_article'): if request.user.is_anonymous(): articles = articles.filter(release_dt__lte=datetime.now()) else: articles = articles.filter(Q(release_dt__lte=datetime.now()) | Q(owner=request.user) | Q(creator=request.user)) # don't use order_by with "whoosh" if not query or settings.HAYSTACK_SEARCH_ENGINE.lower() != "whoosh": articles = articles.order_by('-release_dt') else: articles = articles.order_by('-create_dt') EventLog.objects.log() # Query list of category and subcategory for dropdown filters category = request.GET.get('category') try: category = int(category) except: category = 0 categories, sub_categories = Article.objects.get_categories(category=category) return render_to_response(template_name, {'articles': articles, 'categories': categories, 'form' : form, 'sub_categories': sub_categories}, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): super(FilewithCategoryForm, self).__init__(*args, **kwargs) default_groups = Group.objects.filter(status=True, status_detail="active") if args: post_data = args[0] else: post_data = None if self.user and not self.user.profile.is_superuser: filters = get_query_filters(self.user, 'user_groups.view_group', **{'perms_field': False}) groups = default_groups.filter(filters).distinct() groups_list = list(groups.values_list('pk', 'name')) users_groups = self.user.profile.get_groups() for g in users_groups: if [g.id, g.name] not in groups_list: groups_list.append([g.id, g.name]) else: groups_list = default_groups.values_list('pk', 'name') self.fields['group'].choices = groups_list content_type = ContentType.objects.get(app_label='files', model='file') categories = CategoryItem.objects.filter(content_type=content_type, parent__exact=None) categories = list(set([cat.category.name for cat in categories])) categories = [[cat, cat] for cat in categories] categories.insert(0, [0, '------------']) if post_data: new_category = post_data.get('category', '0') if new_category != '0': categories.append([new_category, new_category]) self.fields['category'].choices = tuple(categories) # set up the sub category choices sub_categories = CategoryItem.objects.filter(content_type=content_type, category__exact=None) sub_categories = list(set([cat.parent.name for cat in sub_categories])) sub_categories = [[cat, cat] for cat in sub_categories] sub_categories.insert(0, [0, '------------']) if post_data: new_sub_category = post_data.get('sub_category', '0') if new_sub_category != '0': sub_categories.append([new_sub_category, new_sub_category]) self.fields['sub_category'].choices = tuple(sub_categories) if self.instance and self.instance.pk: category = Category.objects.get_for_object(self.instance, 'category') sub_category = Category.objects.get_for_object( self.instance, 'sub_category') self.fields['category'].initial = category self.fields['sub_category'].initial = sub_category
def emergency_announcement(context, user): filters = get_query_filters(user, 'announcements.view_emergencyannouncement') announcements = EmergencyAnnouncement.objects.filter(filters).distinct() announcements = announcements.filter(enabled=True).order_by('-create_dt') context.update({ "user": user, "announcements": announcements }) return context
def search(request, template_name="navs/search.html"): query = request.GET.get('q', None) filters = get_query_filters(request.user, 'navs.view_nav') navs = Nav.objects.filter(filters).distinct() if query: navs = navs.filter( Q(title__icontains=query) | Q(description__icontains=query)) EventLog.objects.log() return render_to_response(template_name, {'navs': navs}, context_instance=RequestContext(request))
def get_images(self, user=None, status=True, status_detail='active'): """ Returns the images of this photosets and filters according to the given user's permissions. This makes use of the search index to avoid hitting the database. """ # user information user = user or AnonymousUser() filters = get_query_filters(user, 'photos.view_image') photos = Image.objects.filter(filters).filter(photoset=self.pk) return photos
def search(request, template_name="directories/search.html"): filters = get_query_filters(request.user, 'directories.view_directory') directories = Directory.objects.filter(filters).distinct() cat = None category = None sub_category = None if not request.user.is_anonymous(): directories = directories.select_related() query = request.GET.get('q', None) # Handle legacy tag links if query and "tag:" in query: return HttpResponseRedirect( "%s?q=%s&search_category=tags__icontains" % (reverse('directories'), query.replace('tag:', ''))) form = DirectorySearchForm(request.GET, is_superuser=request.user.is_superuser) if form.is_valid(): cat = form.cleaned_data['search_category'] category = form.cleaned_data['category'] sub_category = form.cleaned_data['sub_category'] if query and cat: directories = directories.filter(**{cat: query}) if category: directories = directories.filter(categories__category__id=category) if sub_category: directories = directories.filter(categories__parent__id=sub_category) directories = directories.order_by('headline') EventLog.objects.log() try: category = int(category) except: category = 0 categories, sub_categories = Directory.objects.get_categories( category=category) return render_to_response(template_name, { 'directories': directories, 'categories': categories, 'form': form, 'sub_categories': sub_categories }, context_instance=RequestContext(request))
def render(self, context): request = context.get('request', None) query = request.GET.get('q', None) cat = request.GET.get('search_category', None) day = self.day.resolve(context) type_slug = self.type_slug.resolve(context) types = Type.objects.filter(slug=type_slug) type = None if types: type = types[0] day = datetime(day.year, day.month, day.day) weekday = day.strftime('%a') #one day offset so we can get all the events on that day bound = timedelta(hours=23, minutes=59) start_dt = day + bound end_dt = day filters = get_query_filters(context['user'], 'events.view_event') events = Event.objects.filter(filters).filter( start_dt__lte=start_dt, end_dt__gte=end_dt).distinct().extra( select={ 'hour': 'extract( hour from start_dt )' }).extra(select={'minute': 'extract( minute from start_dt )'}) if type: events = events.filter(type=type) if weekday == 'Sun' or weekday == 'Sat': events = events.filter(on_weekend=True) if self.ordering == "single_day": events = events.order_by('-priority', 'hour', 'minute') else: if self.ordering: events = events.order_by(self.ordering) else: events = events.order_by('-priority', 'start_dt') if cat == 'priority': events = events.filter(**{cat: True}) elif query and cat: events = events.filter(**{cat: query}) context[self.context_var] = events return ''
def search(request, template_name="directories/search.html"): query = request.GET.get('q') category = request.GET.get('category') subcategory = request.GET.get('sub_category') if get_setting('site', 'global', 'searchindex') and query: if category: try: query = '%s category:%s' % ( query, Category.objects.get(id=int(category)).name) except (Category.DoesNotExist, ValueError): pass if subcategory: try: query = '%s subcategory:%s' % ( query, Category.objects.get(id=int(subcategory)).name) except (Category.DoesNotExist, ValueError): pass directories = Directory.objects.search( query, user=request.user).order_by('headline_exact') else: filters = get_query_filters(request.user, 'directories.view_directory') directories = Directory.objects.filter(filters).distinct() if not request.user.is_anonymous(): directories = directories.select_related() if category: directories = directories.filter(categories__category=category) if subcategory: directories = directories.filter(categories__parent=subcategory) directories = directories.order_by('headline') EventLog.objects.log() try: category = int(category) except: category = 0 categories, sub_categories = Directory.objects.get_categories( category=category) return render_to_response(template_name, { 'directories': directories, 'categories': categories, 'sub_categories': sub_categories, }, context_instance=RequestContext(request))
def search(request, template_name="discounts/search.html"): if not has_perm(request.user, 'discounts.view_discount'): raise Http403 filters = get_query_filters(request.user, 'discounts.view_discount') discounts = Discount.objects.filter(filters).distinct() query = request.GET.get('q', None) if query: discounts = discounts.filter(discount_code__icontains=query) EventLog.objects.log() return render_to_response(template_name, {'discounts': discounts}, context_instance=RequestContext(request))
def search(request, template_name="news/search.html"): query = request.GET.get('q', None) if get_setting('site', 'global', 'searchindex') and query: news = News.objects.search(query, user=request.user) else: filters = get_query_filters(request.user, 'news.view_news') news = News.objects.filter(filters).distinct() news = news.order_by('-release_dt') EventLog.objects.log() return render_to_response(template_name, {'search_news': news}, context_instance=RequestContext(request))
def search(request, template_name="files/search.html"): """ This page lists out all files from newest to oldest. If a search index is available, this page will also have the option to search through files. """ query = u'' category = u'' sub_category = u'' group = None form = FileSearchForm(request.GET, **{'user': request.user}) if form.is_valid(): query = form.cleaned_data['q'] category = form.cleaned_data['category'] sub_category = form.cleaned_data['sub_category'] group = form.cleaned_data['group'] filters = get_query_filters(request.user, 'files.view_file') files = File.objects.filter(filters).distinct() if query: files = files.filter(Q(file__icontains=query)| Q(name__icontains=query)| Q(description__icontains=query)| Q(tags__icontains=query)) if category: files = files.filter(categories__category__name=category) if sub_category: files = files.filter(categories__parent__name=sub_category) if group: files = files.filter(group_id=group) files = files.order_by('-update_dt') EventLog.objects.log() layout = get_setting("module", "files", "layout") base_template_path = "files/base.html" if layout == 'grid': base_template_path = "base-wide.html" return render_to_response( template_name, { 'files': files, 'form': form, 'layout': layout, 'base_template_path': base_template_path, }, context_instance=RequestContext(request))
def group_choices(user): """ returns a list of (group.pk, group.label) for groups viewable for the given user. """ filters = get_query_filters(user, 'groups.view_group', perms_field=False) groups = Group.objects.filter(filters).exclude(type="membership").distinct() if not user.profile.is_superuser: groups = groups.exclude(allow_self_add=False) choices = [(group.pk, "%s (%s)" % (group.label, group.name)) for group in groups] return choices