Exemplo n.º 1
0
 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.'
     )
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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'
Exemplo n.º 6
0
 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())
Exemplo n.º 7
0
 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() + '#')
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
 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
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
 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
Exemplo n.º 12
0
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(),
    }
Exemplo n.º 13
0
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,
    }
Exemplo n.º 14
0
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,
    }