def _smart_group(request, contact_store, group): if request.method == 'POST': if '_save_group' in request.POST: smart_group_form = SmartGroupForm(request.POST) if smart_group_form.is_valid(): group.name = smart_group_form.cleaned_data['name'] group.query = smart_group_form.cleaned_data['query'] group.save() return redirect(_group_url(group.key)) elif '_export' in request.POST: tasks.export_group_contacts.delay( request.user_api.user_account_key, group.key, True) messages.info( request, 'The export is scheduled and should ' 'complete within a few minutes.') return redirect(_group_url(group.key)) elif '_delete_group_contacts' in request.POST: tasks.delete_group_contacts.delay( request.user_api.user_account_key, group.key) messages.info(request, "The group's contacts will be deleted shortly.") return redirect(_group_url(group.key)) elif '_delete_group' in request.POST: tasks.delete_group.delay(request.user_api.user_account_key, group.key) messages.info(request, 'The group will be deleted shortly.') return redirect(reverse('contacts:index')) else: # We didn't get any useful POST variables, so just redirect back to # the group page without doing anything. return redirect(_group_url(group.key)) else: smart_group_form = SmartGroupForm({ 'name': group.name, 'query': group.query, }) keys = contact_store.get_contacts_for_group(group) limit = min(int(request.GET.get('limit', 100)), len(keys)) if keys: messages.info( request, "Showing %s of the group's %s contact(s)" % (limit, len(keys))) contacts = utils.contacts_by_key(contact_store, *keys[:limit]) return render( request, 'contacts/smart_group_detail.html', { 'group': group, 'selected_contacts': contacts, 'group_form': smart_group_form, })
def _smart_group(request, contact_store, group): if request.method == 'POST': if '_save_group' in request.POST: smart_group_form = SmartGroupForm(request.POST) if smart_group_form.is_valid(): group.name = smart_group_form.cleaned_data['name'] group.query = smart_group_form.cleaned_data['query'] group.save() return redirect(_group_url(group.key)) elif '_export' in request.POST: tasks.export_group_contacts.delay( request.user_api.user_account_key, group.key, True) messages.info(request, 'The export is scheduled and should ' 'complete within a few minutes.') return redirect(_group_url(group.key)) elif '_delete_group_contacts' in request.POST: tasks.delete_group_contacts.delay( request.user_api.user_account_key, group.key) messages.info( request, "The group's contacts will be deleted shortly.") return redirect(_group_url(group.key)) elif '_delete_group' in request.POST: tasks.delete_group.delay(request.user_api.user_account_key, group.key) messages.info(request, 'The group will be deleted shortly.') return redirect(reverse('contacts:index')) else: # We didn't get any useful POST variables, so just redirect back to # the group page without doing anything. return redirect(_group_url(group.key)) else: smart_group_form = SmartGroupForm({ 'name': group.name, 'query': group.query, }) keys = contact_store.get_contacts_for_group(group) limit = min(int(request.GET.get('limit', 100)), len(keys)) if keys: messages.info( request, "Showing %s of the group's %s contact(s)" % (limit, len(keys))) contacts = utils.contacts_by_key(contact_store, *keys[:limit]) return render(request, 'contacts/smart_group_detail.html', { 'group': group, 'selected_contacts': contacts, 'group_form': smart_group_form, })
def groups(request, type=None): contact_store = request.user_api.contact_store if request.POST: contact_group_form = ContactGroupForm(request.POST) smart_group_form = SmartGroupForm(request.POST) if '_new_group' in request.POST: if contact_group_form.is_valid(): group = contact_store.new_group( contact_group_form.cleaned_data['name']) messages.add_message( request, messages.INFO, 'New group created') return redirect(_group_url(group.key)) elif '_new_smart_group' in request.POST: if smart_group_form.is_valid(): name = smart_group_form.cleaned_data['name'] query = smart_group_form.cleaned_data['query'] smart_group = contact_store.new_smart_group( name, query) return redirect(_group_url(smart_group.key)) elif '_delete' in request.POST: groups = request.POST.getlist('group') for group_key in groups: group = contact_store.get_group(group_key) tasks.delete_group.delay(request.user_api.user_account_key, group.key) messages.info(request, '%d groups will be deleted ' 'shortly.' % len(groups)) return redirect(reverse('contacts:groups')) elif '_export' in request.POST: tasks.export_many_group_contacts.delay( request.user_api.user_account_key, request.POST.getlist('group')) messages.info(request, 'The export is scheduled and should ' 'complete within a few minutes.') return redirect(reverse('contacts:groups')) else: contact_group_form = ContactGroupForm() smart_group_form = SmartGroupForm() user_query = request.GET.get('q', '') query = user_query if query: if ':' not in query: query = 'name:%s' % (query,) keys = contact_store.groups.raw_search(query).get_keys() groups = utils.groups_by_key(contact_store, *keys) else: if type == 'static': groups = contact_store.list_static_groups() elif type == 'smart': groups = contact_store.list_smart_groups() else: groups = contact_store.list_groups() groups = sorted(groups, key=lambda group: group.created_at, reverse=True) paginator = Paginator(groups, 15) try: page = paginator.page(request.GET.get('p', 1)) except PageNotAnInteger: page = paginator.page(1) except EmptyPage: page = paginator.page(paginator.num_pages) pagination_params = urlencode({ 'query': query, }) return render(request, 'contacts/group_list.html', { 'paginator': paginator, 'pagination_params': pagination_params, 'page': page, 'query': user_query, 'contact_group_form': contact_group_form, })
def groups(request, type=None): contact_store = request.user_api.contact_store if request.POST: contact_group_form = ContactGroupForm(request.POST) smart_group_form = SmartGroupForm(request.POST) if '_new_group' in request.POST: if contact_group_form.is_valid(): group = contact_store.new_group( contact_group_form.cleaned_data['name']) messages.add_message(request, messages.INFO, 'New group created') return redirect(_group_url(group.key)) elif '_new_smart_group' in request.POST: if smart_group_form.is_valid(): name = smart_group_form.cleaned_data['name'] query = smart_group_form.cleaned_data['query'] smart_group = contact_store.new_smart_group(name, query) return redirect(_group_url(smart_group.key)) elif '_delete' in request.POST: groups = request.POST.getlist('group') for group_key in groups: group = contact_store.get_group(group_key) tasks.delete_group.delay(request.user_api.user_account_key, group.key) messages.info( request, '%d groups will be deleted ' 'shortly.' % len(groups)) return redirect(reverse('contacts:groups')) elif '_export' in request.POST: tasks.export_many_group_contacts.delay( request.user_api.user_account_key, request.POST.getlist('group')) messages.info( request, 'The export is scheduled and should ' 'complete within a few minutes.') return redirect(reverse('contacts:groups')) else: contact_group_form = ContactGroupForm() smart_group_form = SmartGroupForm() user_query = request.GET.get('q', '') query = user_query if query: if ':' not in query: query = 'name:%s' % (query, ) keys = contact_store.groups.raw_search(query).get_keys() groups = utils.groups_by_key(contact_store, *keys) else: if type == 'static': groups = contact_store.list_static_groups() elif type == 'smart': groups = contact_store.list_smart_groups() else: groups = contact_store.list_groups() groups = sorted(groups, key=lambda group: group.created_at, reverse=True) paginator = Paginator(groups, 15) try: page = paginator.page(request.GET.get('p', 1)) except PageNotAnInteger: page = paginator.page(1) except EmptyPage: page = paginator.page(paginator.num_pages) pagination_params = urlencode({ 'query': query, }) return render( request, 'contacts/group_list.html', { 'paginator': paginator, 'pagination_params': pagination_params, 'page': page, 'query': user_query, 'contact_group_form': contact_group_form, })