Revision 362dadaa snf-astakos-app/astakos/im/views/projects.py
b/snf-astakos-app/astakos/im/views/projects.py | ||
---|---|---|
41 | 41 |
from django.shortcuts import get_object_or_404 |
42 | 42 |
from django.contrib import messages |
43 | 43 |
from django.core.urlresolvers import reverse |
44 |
from django.http import Http404 |
|
44 |
from django.http import Http404, HttpResponse
|
|
45 | 45 |
from django.shortcuts import redirect |
46 | 46 |
from django.utils.html import escape |
47 | 47 |
from django.utils.translation import ugettext as _ |
... | ... | |
198 | 198 |
try: |
199 | 199 |
application_id = int(application_id) |
200 | 200 |
chain_id = get_related_project_id(application_id) |
201 |
cancel_application(application_id, request.user) |
|
201 |
cancel_application(chain_id, application_id, request.user)
|
|
202 | 202 |
except ProjectError as e: |
203 | 203 |
messages.error(request, e) |
204 | 204 |
|
... | ... | |
294 | 294 |
@cookie_fix |
295 | 295 |
@valid_astakos_user_required |
296 | 296 |
def project_detail(request, chain_id): |
297 |
return common_detail(request, chain_id) |
|
297 |
if request.method == 'POST': |
|
298 |
addmembers_form = AddProjectMembersForm( |
|
299 |
request.POST, |
|
300 |
chain_id=int(chain_id), |
|
301 |
request_user=request.user) |
|
302 |
with ExceptionHandler(request): |
|
303 |
addmembers(request, chain_id, addmembers_form) |
|
304 |
|
|
305 |
if addmembers_form.is_valid(): |
|
306 |
addmembers_form = AddProjectMembersForm() # clear form data |
|
307 |
else: |
|
308 |
addmembers_form = AddProjectMembersForm() # initialize form |
|
309 |
|
|
310 |
project = get_object_or_404(Project, id=chain_id) |
|
311 |
members = project.projectmembership_set |
|
312 |
approved_members_count = project.members_count() |
|
313 |
pending_members_count = project.count_pending_memberships() |
|
314 |
_limit = project.limit_on_members_number |
|
315 |
remaining_memberships_count = (max(0, _limit - approved_members_count) |
|
316 |
if _limit is not None else None) |
|
317 |
members = members.associated() |
|
318 |
members = members.select_related() |
|
319 |
members_table = tables.ProjectMembersTable(project, |
|
320 |
members, |
|
321 |
user=request.user, |
|
322 |
prefix="members_") |
|
323 |
RequestConfig(request, paginate={"per_page": settings.PAGINATE_BY} |
|
324 |
).configure(members_table) |
|
325 |
|
|
326 |
user = request.user |
|
327 |
is_project_admin = user.is_project_admin() |
|
328 |
is_owner = user.owns_project(project) |
|
329 |
|
|
330 |
if not (is_owner or is_project_admin) and \ |
|
331 |
not user.non_owner_can_view(project): |
|
332 |
m = _(astakos_messages.NOT_ALLOWED) |
|
333 |
raise PermissionDenied(m) |
|
334 |
|
|
335 |
membership = user.get_membership(project) if project else None |
|
336 |
membership_id = membership.id if membership else None |
|
337 |
mem_display = user.membership_display(project) if project else None |
|
338 |
can_join_req = can_join_request(project, user) if project else False |
|
339 |
can_leave_req = can_leave_request(project, user) if project else False |
|
340 |
|
|
341 |
return object_detail( |
|
342 |
request, |
|
343 |
queryset=Project.objects.select_related(), |
|
344 |
object_id=project.pk, |
|
345 |
template_name="im/projects/project_detail.html", |
|
346 |
extra_context={ |
|
347 |
'addmembers_form': addmembers_form, |
|
348 |
'approved_members_count': approved_members_count, |
|
349 |
'pending_members_count': pending_members_count, |
|
350 |
'members_table': members_table, |
|
351 |
'owner_mode': is_owner, |
|
352 |
'admin_mode': is_project_admin, |
|
353 |
'mem_display': mem_display, |
|
354 |
'membership_id': membership_id, |
|
355 |
'can_join_request': can_join_req, |
|
356 |
'can_leave_request': can_leave_req, |
|
357 |
'remaining_memberships_count': remaining_memberships_count, |
|
358 |
}) |
|
298 | 359 |
|
299 | 360 |
|
300 | 361 |
@transaction.commit_on_success |
... | ... | |
369 | 430 |
addmembers_form = None |
370 | 431 |
|
371 | 432 |
user = request.user |
372 |
is_project_admin = user.is_project_admin(application_id=application.id)
|
|
433 |
is_project_admin = user.is_project_admin() |
|
373 | 434 |
is_owner = user.owns_application(application) |
374 | 435 |
if not (is_owner or is_project_admin) and not project_view: |
375 | 436 |
m = _(astakos_messages.NOT_ALLOWED) |
... | ... | |
435 | 496 |
'project', flat=True) |
436 | 497 |
|
437 | 498 |
projects = Project.objects.search_by_name(q) |
438 |
projects = projects.filter(Project.o_state_q(Project.O_ACTIVE))
|
|
499 |
projects = projects.filter(state=Project.NORMAL)
|
|
439 | 500 |
projects = projects.exclude(id__in=accepted).select_related( |
440 | 501 |
'application', 'application__owner', 'application__applicant') |
441 | 502 |
|
... | ... | |
630 | 691 |
except ProjectApplication.DoesNotExist: |
631 | 692 |
raise Http404 |
632 | 693 |
|
694 |
chain_id = get_related_project_id(application_id) |
|
633 | 695 |
with ExceptionHandler(request): |
634 |
_project_app_approve(request, application_id) |
|
696 |
_project_app_approve(request, chain_id, application_id)
|
|
635 | 697 |
|
636 |
chain_id = get_related_project_id(application_id) |
|
637 |
if not chain_id: |
|
638 |
return redirect_back(request, 'project_list') |
|
639 | 698 |
return redirect(reverse('project_detail', args=(chain_id,))) |
640 | 699 |
|
641 | 700 |
|
642 | 701 |
@transaction.commit_on_success |
643 |
def _project_app_approve(request, application_id): |
|
644 |
approve_application(application_id) |
|
702 |
def _project_app_approve(request, project_id, application_id):
|
|
703 |
approve_application(project_id, application_id)
|
|
645 | 704 |
|
646 | 705 |
|
647 | 706 |
@require_http_methods(["POST"]) |
... | ... | |
663 | 722 |
except ProjectApplication.DoesNotExist: |
664 | 723 |
raise Http404 |
665 | 724 |
|
725 |
chain_id = get_related_project_id(application_id) |
|
666 | 726 |
with ExceptionHandler(request): |
667 |
_project_app_deny(request, application_id, reason) |
|
727 |
_project_app_deny(request, chain_id, application_id, reason)
|
|
668 | 728 |
|
669 | 729 |
return redirect(reverse('project_list')) |
670 | 730 |
|
671 | 731 |
|
672 | 732 |
@transaction.commit_on_success |
673 |
def _project_app_deny(request, application_id, reason): |
|
674 |
deny_application(application_id, reason=reason) |
|
733 |
def _project_app_deny(request, project_id, application_id, reason):
|
|
734 |
deny_application(project_id, application_id, reason=reason)
|
|
675 | 735 |
|
676 | 736 |
|
677 | 737 |
@require_http_methods(["POST"]) |
... | ... | |
688 | 748 |
m = _(astakos_messages.NOT_ALLOWED) |
689 | 749 |
raise PermissionDenied(m) |
690 | 750 |
|
751 |
chain_id = get_related_project_id(application_id) |
|
691 | 752 |
with ExceptionHandler(request): |
692 | 753 |
_project_app_dismiss(request, application_id) |
693 | 754 |
|
694 |
chain_id = None |
|
695 |
chain_id = get_related_project_id(application_id) |
|
696 | 755 |
if chain_id: |
697 | 756 |
next = reverse('project_detail', args=(chain_id,)) |
698 | 757 |
else: |
... | ... | |
700 | 759 |
return redirect(next) |
701 | 760 |
|
702 | 761 |
|
703 |
def _project_app_dismiss(request, application_id): |
|
762 |
def _project_app_dismiss(request, project_id, application_id):
|
|
704 | 763 |
# XXX: dismiss application also does authorization |
705 |
dismiss_application(application_id, request_user=request.user) |
|
764 |
dismiss_application(project_id, application_id, request_user=request.user)
|
|
706 | 765 |
|
707 | 766 |
|
708 | 767 |
@require_http_methods(["GET", "POST"]) |
... | ... | |
715 | 774 |
if not user.owns_project(project) and not user.is_project_admin(): |
716 | 775 |
return redirect(reverse('index')) |
717 | 776 |
|
718 |
return common_detail(request, chain_id, |
|
719 |
members_status_filter=members_status_filter, |
|
720 |
template_name=template_name) |
|
777 |
if request.method == 'POST': |
|
778 |
addmembers_form = AddProjectMembersForm( |
|
779 |
request.POST, |
|
780 |
chain_id=int(chain_id), |
|
781 |
request_user=request.user) |
|
782 |
with ExceptionHandler(request): |
|
783 |
addmembers(request, chain_id, addmembers_form) |
|
784 |
|
|
785 |
if addmembers_form.is_valid(): |
|
786 |
addmembers_form = AddProjectMembersForm() # clear form data |
|
787 |
else: |
|
788 |
addmembers_form = AddProjectMembersForm() # initialize form |
|
789 |
|
|
790 |
members = project.projectmembership_set |
|
791 |
approved_members_count = project.members_count() |
|
792 |
pending_members_count = project.count_pending_memberships() |
|
793 |
_limit = project.limit_on_members_number |
|
794 |
if _limit is not None: |
|
795 |
remaining_memberships_count = \ |
|
796 |
max(0, _limit - approved_members_count) |
|
797 |
flt = MEMBERSHIP_STATUS_FILTER.get(members_status_filter) |
|
798 |
if flt is not None: |
|
799 |
members = flt(members) |
|
800 |
else: |
|
801 |
members = members.associated() |
|
802 |
members = members.select_related() |
|
803 |
members_table = tables.ProjectMembersTable(project, |
|
804 |
members, |
|
805 |
user=request.user, |
|
806 |
prefix="members_") |
|
807 |
RequestConfig(request, paginate={"per_page": settings.PAGINATE_BY} |
|
808 |
).configure(members_table) |
|
809 |
|
|
810 |
|
|
811 |
user = request.user |
|
812 |
is_project_admin = user.is_project_admin() |
|
813 |
is_owner = user.owns_application(project) |
|
814 |
if ( |
|
815 |
not (is_owner or is_project_admin) and |
|
816 |
not user.non_owner_can_view(project) |
|
817 |
): |
|
818 |
m = _(astakos_messages.NOT_ALLOWED) |
|
819 |
raise PermissionDenied(m) |
|
820 |
|
|
821 |
membership = user.get_membership(project) if project else None |
|
822 |
membership_id = membership.id if membership else None |
|
823 |
mem_display = user.membership_display(project) if project else None |
|
824 |
can_join_req = can_join_request(project, user) if project else False |
|
825 |
can_leave_req = can_leave_request(project, user) if project else False |
|
826 |
|
|
827 |
return object_detail( |
|
828 |
request, |
|
829 |
queryset=Project.objects.select_related(), |
|
830 |
object_id=project.id, |
|
831 |
template_name='im/projects/project_members.html', |
|
832 |
extra_context={ |
|
833 |
'addmembers_form': addmembers_form, |
|
834 |
'approved_members_count': approved_members_count, |
|
835 |
'pending_members_count': pending_members_count, |
|
836 |
'members_table': members_table, |
|
837 |
'owner_mode': is_owner, |
|
838 |
'admin_mode': is_project_admin, |
|
839 |
'mem_display': mem_display, |
|
840 |
'membership_id': membership_id, |
|
841 |
'can_join_request': can_join_req, |
|
842 |
'can_leave_request': can_leave_req, |
|
843 |
'members_status_filter': members_status_filter, |
|
844 |
'remaining_memberships_count': remaining_memberships_count, |
|
845 |
}) |
|
721 | 846 |
|
722 | 847 |
|
723 | 848 |
@require_http_methods(["POST"]) |
Also available in: Unified diff