def test_set_projects(self): """Posting a group of projects to an article should set that article's projects.""" project1 = ProjectFactory() project2 = ProjectFactory() staff = UserFactory(is_staff=True) project_form = ProjectManagerForm( { 'projects': [project1.pk, project2.pk] }, user=staff, ) ok_( project_form.is_valid(), 'We want to be sure we are posting valid data.' ) data = {'action': 'projects'} data.update(project_form.data) response = self.post_helper(data, staff) self.article.refresh_from_db() project1.refresh_from_db() project2.refresh_from_db() ok_(response.status_code, 200) ok_( self.article in project1.articles.all(), 'The article should be added to the project.' ) ok_( self.article in project2.articles.all(), 'The article should be added to teh project.' )
def post(self, request, **kwargs): """Handles POST requests on article pages""" # pylint:disable=unused-argument article = self.get_object() authorized = self.request.user.is_staff action = request.POST.get("action") clear_cache = False if not authorized: return HttpResponseForbidden() if action == "projects": form = ProjectManagerForm(request.POST, user=request.user) if form.is_valid(): projects = form.cleaned_data["projects"] article.projects.set(projects) clear_cache = True tags = request.POST.getlist("tags") if tags: tag_set = set() for tag in tags: new_tag, _ = Tag.objects.get_or_create(name=normalize(tag)) tag_set.add(new_tag) article.tags.set(*tag_set) clear_cache = True if clear_cache: article.clear_cache() return redirect(article)
def _projects(self, request, foia): """Handle updating projects""" form = ProjectManagerForm(request.POST) has_perm = foia.has_perm(request.user, 'change') if has_perm and form.is_valid(): projects = form.cleaned_data['projects'] foia.projects = projects return redirect(foia)
def _projects(self, request, foia): """Handle updating projects""" form = ProjectManagerForm(request.POST) if (foia.editable_by(request.user) or request.user.is_staff) and form.is_valid(): projects = form.cleaned_data['projects'] foia.projects = projects return redirect(foia)
def _project(self, foias, user, post): """Add the requests to the selected projects""" foias = [f for f in foias if f.has_perm(user, 'change')] form = ProjectManagerForm(post, user=user) if form.is_valid(): projects = form.cleaned_data['projects'] for foia in foias: foia.projects.add(*projects) return 'Requests added to projects'
def test_add_projects(self): """Posting a collection of projects to a request should add it to those projects.""" project = ProjectFactory() form = ProjectManagerForm({'projects': [project.pk]}) ok_(form.is_valid()) data = {'action': 'projects'} data.update(form.data) http_post_response(self.url, self.view, data, self.foia.user, **self.kwargs) project.refresh_from_db() ok_(self.foia in project.requests.all())
def _projects(self, request, foia): """Handle updating projects""" form = ProjectManagerForm(request.POST, user=request.user) has_perm = foia.has_perm(request.user, 'change') if has_perm and form.is_valid(): projects = form.cleaned_data['projects'] for proj in itertools.chain(foia.projects.all(), projects): # clear cache for old and new projects proj.clear_cache() foia.projects = projects return redirect(foia.get_absolute_url() + '#')
def projects(request, foia): """Handle updating projects""" form = ProjectManagerForm(request.POST, user=request.user) has_perm = foia.has_perm(request.user, "change") if has_perm and form.is_valid(): projects_ = form.cleaned_data["projects"] for proj in itertools.chain(foia.projects.all(), projects_): # clear cache for old and new projects proj.clear_cache() foia.projects.set(projects_) return _get_redirect(request, foia)
def get_context_data(self): """Add forms for bulk actions""" context = super(MyRequestList, self).get_context_data() context['project_form'] = ProjectManagerForm(user=self.request.user) context['tag_form'] = TagManagerForm(required=False) context['share_form'] = FOIAAccessForm(required=False) context['can_embargo'] = can_embargo(self.request.user) context['can_perm_embargo'] = can_embargo_permananently( self.request.user) return context
def post(self, request, **kwargs): """Handles POST requests on article pages""" # pylint:disable=unused-argument article = self.get_object() authorized = self.request.user.is_staff action = request.POST.get('action') if not authorized: return HttpResponseForbidden() if action == 'projects': form = ProjectManagerForm(request.POST) if form.is_valid(): projects = form.cleaned_data['projects'] article.projects = projects tags = request.POST.get('tags') if tags: tag_set = set() for tag in parse_tags(tags): new_tag, _ = Tag.objects.get_or_create(name=tag) tag_set.add(new_tag) article.tags.set(*tag_set) return redirect(article)
def get_context_data(self, **kwargs): """Add forms for bulk actions""" context = super(MyRequestList, self).get_context_data(**kwargs) context["project_form"] = ProjectManagerForm(user=self.request.user) # set auto_id to avoid clashing IDs with the tag filter context["tag_form"] = TagManagerForm(required=False, auto_id="id_tm_%s") context["share_form"] = FOIAAccessForm(required=False) context["can_embargo"] = can_embargo(self.request.user) context["can_perm_embargo"] = can_embargo_permananently( self.request.user) return context
def project_manager(context, mr_object): """Template tag to insert a project manager component""" try: projects = mr_object.projects.all() except AttributeError: projects = None try: owner = mr_object.user except AttributeError: owner = None user = context['user'] experimental = user.is_authenticated() and user.profile.experimental authorized = user.is_staff or (user == owner and experimental) form = ProjectManagerForm(initial={'projects': [project.pk for project in projects]}) return { 'projects': projects, 'form': form, 'authorized': authorized, 'endpoint': mr_object.get_absolute_url(), }
def project_manager(context, mr_object): """Template tag to insert a project manager component""" user = context["user"] try: projects = mr_object.projects.get_visible(user) except AttributeError: projects = None try: owner = mr_object.user except AttributeError: owner = None authorized = user.is_staff or user == owner form = ProjectManagerForm( initial={"projects": [project.pk for project in projects]}, user=user) has_projects = user.is_authenticated and user.projects.exists() return { "projects": projects, "form": form, "authorized": authorized, "endpoint": mr_object.get_absolute_url(), "has_projects": has_projects, }
def project_manager(context, mr_object): """Template tag to insert a project manager component""" user = context['user'] try: projects = mr_object.projects.get_visible(user) except AttributeError: projects = None try: owner = mr_object.user except AttributeError: owner = None authorized = user.is_staff or user == owner form = ProjectManagerForm( initial={'projects': [project.pk for project in projects]}, user=user, ) has_projects = user.is_authenticated and user.projects.exists() return { 'projects': projects, 'form': form, 'authorized': authorized, 'endpoint': mr_object.get_absolute_url(), 'has_projects': has_projects, }