Revision 373daf6a
b/snf-astakos-app/astakos/im/forms.py | ||
---|---|---|
491 | 491 |
|
492 | 492 |
def get_astakos_group_creation_form(request): |
493 | 493 |
class AstakosGroupCreationForm(forms.ModelForm): |
494 |
issue_date = forms.DateField(widget=SelectDateWidget()) |
|
495 |
expiration_date = forms.DateField(widget=SelectDateWidget()) |
|
494 |
issue_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now()) |
|
495 |
# TODO set initial in exact one month |
|
496 |
expiration_date = forms.DateField(widget=SelectDateWidget(), initial = datetime.now() + timedelta(days=30)) |
|
496 | 497 |
kind = forms.ModelChoiceField(queryset=GroupKind.objects.all(), empty_label=None) |
497 | 498 |
name = forms.URLField() |
498 | 499 |
|
... | ... | |
510 | 511 |
if commit: |
511 | 512 |
g.save() |
512 | 513 |
g.owner = [request.user] |
513 |
# g.approve_member(request.user)
|
|
514 |
g.approve_member(request.user) |
|
514 | 515 |
return g |
515 | 516 |
|
516 | 517 |
return AstakosGroupCreationForm |
517 | 518 |
|
518 |
def get_astakos_group_policy_creation_form(group): |
|
519 |
def get_astakos_group_policy_creation_form(astakosgroup):
|
|
519 | 520 |
class AstakosGroupPolicyCreationForm(forms.ModelForm): |
520 |
choices = Resource.objects.filter(~Q(astakosgroup=group)) |
|
521 |
choices = Resource.objects.filter(~Q(astakosgroup=astakosgroup))
|
|
521 | 522 |
resource = forms.ModelChoiceField(queryset=choices, empty_label=None) |
523 |
# TODO check that it does not hit the db |
|
524 |
group = forms.ModelChoiceField(queryset=AstakosGroup.objects.all(), initial=astakosgroup, widget=forms.HiddenInput()) |
|
522 | 525 |
|
523 | 526 |
class Meta: |
524 | 527 |
model = AstakosGroupQuota |
525 |
|
|
526 |
def __init__(self, *args, **kwargs): |
|
527 |
if not args: |
|
528 |
args = ({'group':group},) |
|
529 |
super(AstakosGroupPolicyCreationForm, self).__init__(*args, **kwargs) |
|
530 |
self.fields['group'].widget.attrs['disabled'] = True |
|
531 | 528 |
|
532 | 529 |
return AstakosGroupPolicyCreationForm |
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
113 | 113 |
creation_date = models.DateTimeField('Creation date', default=datetime.now()) |
114 | 114 |
issue_date = models.DateTimeField('Issue date', null=True) |
115 | 115 |
expiration_date = models.DateTimeField('Expiration date', null=True) |
116 |
moderatation_enabled = models.BooleanField('Moderated membership?', default=False)
|
|
116 |
moderatation_enabled = models.BooleanField('Moderated membership?', default=True)
|
|
117 | 117 |
approval_date = models.DateTimeField('Activation date', null=True, blank=True) |
118 | 118 |
estimated_participants = models.PositiveIntegerField('Estimated #participants', null=True) |
119 | 119 |
|
... | ... | |
153 | 153 |
self.save() |
154 | 154 |
|
155 | 155 |
def approve_member(self, member): |
156 |
m = self.membership_set.get(person=member)
|
|
156 |
m, created = self.membership_set.get_or_create(person=member, group=self)
|
|
157 | 157 |
m.date_joined = datetime.now() |
158 | 158 |
m.save() |
159 |
|
|
159 |
|
|
160 | 160 |
def disapprove_member(self, member): |
161 | 161 |
m = self.membership_set.remove(member) |
162 | 162 |
|
b/snf-astakos-app/astakos/im/templates/im/astakosgroup_detail.html | ||
---|---|---|
7 | 7 |
<table class="zebra-striped id-sorted"> |
8 | 8 |
<tr> |
9 | 9 |
<th>Name: {{object.name}}</th> |
10 |
</tr> |
|
10 |
</tr> |
|
11 |
</table> |
|
12 |
<div class="section"> |
|
13 |
<h2>Members:</h2> |
|
14 |
{% if members %} |
|
15 |
<table class="zebra-striped id-sorted"> |
|
16 |
<thead> |
|
17 |
<tr> |
|
18 |
<th>Realname</th> |
|
19 |
<th>Status</th> |
|
20 |
</tr> |
|
21 |
</thead> |
|
22 |
<tbody> |
|
23 |
{% for name, approved in members %} |
|
11 | 24 |
<tr> |
12 |
<th>Members: {{object.membership.all}}</th> |
|
25 |
<td>{{name}}</td> |
|
26 |
<td>{{approved}}</td> |
|
13 | 27 |
</tr> |
28 |
{% endfor %} |
|
29 |
</tbody> |
|
14 | 30 |
</table> |
15 |
<div class="section"> |
|
31 |
{% else %} |
|
32 |
<p>No members yet!</p> |
|
33 |
{% endif %} |
|
34 |
</div> |
|
35 |
<div class="section"> |
|
16 | 36 |
<h2>Policies:</h2> |
17 | 37 |
{% if quota %} |
18 | 38 |
<table class="zebra-striped id-sorted"> |
... | ... | |
35 | 55 |
<p>No policies</p> |
36 | 56 |
{% endif %} |
37 | 57 |
</div> |
58 |
<div class="rightcol"> |
|
59 |
<form action="{% url group_policies_add object.id %}" method="post" class="innerlabels signup">{% csrf_token %} |
|
60 |
<h2><span>NEW POLICY</span></h2> |
|
61 |
{% include "im/form_render.html" %} |
|
62 |
<div class="form-row submit"> |
|
63 |
<input type="submit" class="submit altcol" value="+" /> |
|
64 |
</div> |
|
65 |
</form> |
|
66 |
</div> |
|
38 | 67 |
</div> |
39 | 68 |
{% endblock %} |
b/snf-astakos-app/astakos/im/templates/im/astakosgroupquota_form.html | ||
---|---|---|
35 | 35 |
{% include "im/form_render.html" %} |
36 | 36 |
<div class="form-row submit"> |
37 | 37 |
<input type="submit" class="submit altcol" value="+" /> |
38 |
<a class="extra-link" href="{% url group_approval_request group.id %}">Request approval</a>
|
|
38 |
<a href="{% url group_approval_request group.id %}">Request approval</a> |
|
39 | 39 |
</div> |
40 | 40 |
</form> |
41 | 41 |
</div> |
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
428 | 428 |
response['Location'] = LOGOUT_NEXT |
429 | 429 |
response.status_code = 301 |
430 | 430 |
return response |
431 |
<<<<<<< HEAD |
|
432 | 431 |
messages.success(request, _('You have successfully logged out.')) |
433 |
======= |
|
434 |
messages.add_message(request, messages.SUCCESS, _('<p>You have successfully logged out.</p>')) |
|
435 |
>>>>>>> origin/newstyles |
|
436 | 432 |
context = get_context(request, extra_context) |
437 | 433 |
response.write(render_to_string(template, context_instance=context)) |
438 | 434 |
return response |
... | ... | |
590 | 586 |
form = form, |
591 | 587 |
context_instance = get_context(request, |
592 | 588 |
extra_context)) |
593 |
<<<<<<< HEAD |
|
594 | 589 |
|
595 | 590 |
@signed_terms_required |
596 | 591 |
def group_add(request): |
597 | 592 |
return create_object(request, |
598 | 593 |
form_class=get_astakos_group_creation_form(request), |
599 | 594 |
login_required = True, |
600 |
post_save_redirect = '/im/group/%(id)s/policies/add')
|
|
595 |
post_save_redirect = '/im/group/%(id)s/') |
|
601 | 596 |
|
602 | 597 |
@signed_terms_required |
603 | 598 |
@login_required |
... | ... | |
617 | 612 |
except AstakosGroup.DoesNotExist: |
618 | 613 |
return HttpResponseBadRequest(_('Invalid group.')) |
619 | 614 |
d = {} |
620 |
for resource in group.policy.all(): |
|
621 |
d[resource.name] = group.policy.through.objects.get(resource__id=resource.id, |
|
622 |
group__id=group_id).limit |
|
615 |
related_resources = group.policy.through.objects |
|
616 |
for r in group.policy.all(): |
|
617 |
d[r.name] = related_resources.get(resource__id=r.id, |
|
618 |
group__id=group_id).limit |
|
619 |
members = map(lambda m:{m.person.realname:m.is_approved}, group.membership_set.all()) |
|
623 | 620 |
return object_detail(request, |
624 | 621 |
AstakosGroup.objects.all(), |
625 | 622 |
object_id=group_id, |
626 |
extra_context = {'quota':d}) |
|
623 |
extra_context = {'quota':d, |
|
624 |
'members':members, |
|
625 |
'form':get_astakos_group_policy_creation_form(group)}) |
|
627 | 626 |
|
628 | 627 |
@signed_terms_required |
629 | 628 |
@login_required |
... | ... | |
636 | 635 |
try: |
637 | 636 |
group = AstakosGroup.objects.select_related().get(id=group_id) |
638 | 637 |
except AstakosGroup.DoesNotExist: |
639 |
raise HttpResponseBadRequest(_('Invalid group.'))
|
|
638 |
return HttpResponseBadRequest(_('Invalid group.'))
|
|
640 | 639 |
d = {} |
641 | 640 |
for resource in group.policy.all(): |
642 | 641 |
d[resource.name] = group.policy.through.objects.get(resource__id=resource.id, |
... | ... | |
644 | 643 |
return create_object(request, |
645 | 644 |
form_class=get_astakos_group_policy_creation_form(group), |
646 | 645 |
login_required=True, |
647 |
post_save_redirect = reverse('group_policies_add', kwargs=dict(group_id=group_id)), |
|
646 |
template_name = 'im/astakosgroup_detail.html', |
|
647 |
post_save_redirect = reverse('group_detail', kwargs=dict(group_id=group_id)), |
|
648 | 648 |
extra_context = {'group':group, |
649 | 649 |
'quota':d}) |
650 | 650 |
@signed_terms_required |
... | ... | |
652 | 652 |
def group_approval_request(request, group_id): |
653 | 653 |
return HttpResponse() |
654 | 654 |
|
655 |
======= |
|
656 |
>>>>>>> origin/newstyles |
Also available in: Unified diff