Revision 7dd3047d
b/snf-astakos-app/astakos/im/functions.py | ||
---|---|---|
431 | 431 |
except AstakosUser.DoesNotExist: |
432 | 432 |
raise IOError(_(astakos_messages.UNKNOWN_USER_ID) % user_id) |
433 | 433 |
|
434 |
def create_membership(project_application_id, user_id): |
|
434 |
def create_membership(project, user): |
|
435 |
if isinstance(project, int): |
|
436 |
project = get_project_by_application_id(project) |
|
437 |
if isinstance(user, int): |
|
438 |
user = get_user_by_id(user) |
|
439 |
m = ProjectMembership( |
|
440 |
project=project, |
|
441 |
person=user, |
|
442 |
request_date=datetime.now()) |
|
435 | 443 |
try: |
436 |
project = get_project_by_application_id(project_application_id) |
|
437 |
m = ProjectMembership( |
|
438 |
project=project, |
|
439 |
person=user_id, |
|
440 |
request_date=datetime.now()) |
|
444 |
m.save() |
|
441 | 445 |
except IntegrityError, e: |
442 | 446 |
raise IOError(_(astakos_messages.MEMBERSHIP_REQUEST_EXISTS)) |
443 | 447 |
else: |
444 |
m.save() |
|
445 | 448 |
return m |
446 | 449 |
|
447 | 450 |
def get_membership(project, user): |
... | ... | |
546 | 549 |
logger.error(e.message) |
547 | 550 |
return membership |
548 | 551 |
|
552 |
def enroll_member(project, user, request_user=None): |
|
553 |
membership = create_membership(project, user) |
|
554 |
accept_membership(project, user, request_user) |
|
555 |
|
|
549 | 556 |
def leave_project(project_application_id, user_id): |
550 | 557 |
""" |
551 | 558 |
Raises: |
b/snf-astakos-app/astakos/im/templates/im/projects/project_detail.html | ||
---|---|---|
187 | 187 |
{% else %} |
188 | 188 |
<td>Pending |
189 | 189 |
{% if user == object.owner %} |
190 |
<a href="{% url project_approve_member object.id m.person.id %}?{% if page %}page={{ page }}{% endif %}{% if sorting %}&sorting={{sorting}}{% endif %}">Accept</a>
|
|
190 |
<a href="{% url project_accept_member object.id m.person.id %}?{% if page %}page={{ page }}{% endif %}{% if sorting %}&sorting={{sorting}}{% endif %}">Accept</a>
|
|
191 | 191 |
<a href="{% url project_reject_member object.id m.person.id %}?{% if page %}page={{ page }}{% endif %}{% if sorting %}&sorting={{sorting}}{% endif %}">Reject</a> |
192 | 192 |
{% endif %} |
193 | 193 |
</td> |
b/snf-astakos-app/astakos/im/urls.py | ||
---|---|---|
76 | 76 |
url(r'^project/(?P<application_id>\w+)/?$', 'project_detail', {}, name='project_detail'), |
77 | 77 |
url(r'^project/(?P<application_id>\w+)/join/?$', 'project_join', {}, name='project_join'), |
78 | 78 |
url(r'^project/(?P<application_id>\w+)/leave/?$', 'project_leave', {}, name='project_leave'), |
79 |
url(r'^project/(?P<application_id>\w+)/(?P<user_id>\d+)/approve/?$', 'project_approve_member', {}, name='project_approve_member'),
|
|
79 |
url(r'^project/(?P<application_id>\w+)/(?P<user_id>\d+)/accept/?$', 'project_accept_member', {}, name='project_accept_member'),
|
|
80 | 80 |
url(r'^project/(?P<application_id>\w+)/(?P<user_id>\d+)/reject/?$', 'project_reject_member', {}, name='project_reject_member'), |
81 | 81 |
url(r'^project/(?P<application_id>\w+)/(?P<user_id>\d+)/remove/?$', 'project_remove_member', {}, name='project_remove_member'), |
82 | 82 |
|
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
98 | 98 |
# send_group_creation_notification, |
99 | 99 |
SendNotificationError, |
100 | 100 |
accept_membership, reject_membership, remove_membership, |
101 |
leave_project, join_project) |
|
101 |
leave_project, join_project, enroll_member)
|
|
102 | 102 |
# from astakos.im.endpoints.qh import timeline_charge |
103 | 103 |
from astakos.im.settings import ( |
104 | 104 |
COOKIE_DOMAIN, LOGOUT_NEXT, |
... | ... | |
1188 | 1188 |
@login_required |
1189 | 1189 |
@transaction.commit_manually |
1190 | 1190 |
def project_detail(request, application_id): |
1191 |
resource_catalog = None |
|
1191 | 1192 |
result = callpoint.list_resources() |
1192 | 1193 |
if not result.is_success: |
1193 | 1194 |
messages.error( |
... | ... | |
1196 | 1197 |
) |
1197 | 1198 |
else: |
1198 | 1199 |
resource_catalog = result.data |
1199 |
# resource_catalog = ResourcePresentation(RESOURCES_PRESENTATION_DATA) |
|
1200 |
# resource_catalog.update_from_result(result) |
|
1201 | 1200 |
|
1202 | 1201 |
addmembers_form = AddProjectMembersForm() |
1203 | 1202 |
if request.method == 'POST': |
... | ... | |
1205 | 1204 |
if addmembers_form.is_valid(): |
1206 | 1205 |
try: |
1207 | 1206 |
rollback = False |
1208 |
map(lambda u: accept_membership( |
|
1207 |
application_id = int(application_id) |
|
1208 |
map(lambda u: enroll_member( |
|
1209 | 1209 |
application_id, |
1210 | 1210 |
u, |
1211 | 1211 |
request_user=request.user), |
... | ... | |
1370 | 1370 |
@signed_terms_required |
1371 | 1371 |
@login_required |
1372 | 1372 |
@transaction.commit_manually |
1373 |
def project_approve_member(request, application_id, user_id):
|
|
1373 |
def project_accept_member(request, application_id, user_id):
|
|
1374 | 1374 |
rollback = False |
1375 | 1375 |
try: |
1376 | 1376 |
application_id = int(application_id) |
... | ... | |
1391 | 1391 |
transaction.rollback() |
1392 | 1392 |
else: |
1393 | 1393 |
transaction.commit() |
1394 |
return project_detail(request, application_id)
|
|
1394 |
return redirect(reverse('project_detail', args=(application_id,)))
|
|
1395 | 1395 |
|
1396 | 1396 |
@require_http_methods(["GET"]) |
1397 | 1397 |
@signed_terms_required |
... | ... | |
1418 | 1418 |
transaction.rollback() |
1419 | 1419 |
else: |
1420 | 1420 |
transaction.commit() |
1421 |
return project_detail(request, application_id)
|
|
1421 |
return redirect(reverse('project_detail', args=(application_id,)))
|
|
1422 | 1422 |
|
1423 | 1423 |
@require_http_methods(["GET"]) |
1424 | 1424 |
@signed_terms_required |
... | ... | |
1445 | 1445 |
transaction.rollback() |
1446 | 1446 |
else: |
1447 | 1447 |
transaction.commit() |
1448 |
return project_detail(request, application_id)
|
|
1448 |
return redirect(reverse('project_detail', args=(application_id,)))
|
|
1449 | 1449 |
|
1450 | 1450 |
|
Also available in: Unified diff