Revision e47fb17a snf-astakos-app/astakos/im/forms.py
b/snf-astakos-app/astakos/im/forms.py | ||
---|---|---|
52 | 52 |
from django.utils.encoding import smart_unicode |
53 | 53 |
from django.core import validators |
54 | 54 |
from django.contrib.auth.models import AnonymousUser |
55 |
from django.core.exceptions import PermissionDenied |
|
55 | 56 |
|
56 | 57 |
from astakos.im.models import ( |
57 | 58 |
AstakosUser, EmailChange, Invitation, |
58 | 59 |
Resource, PendingThirdPartyUser, get_latest_terms, RESOURCE_SEPARATOR, |
59 |
ProjectApplication) |
|
60 |
ProjectApplication, Project)
|
|
60 | 61 |
from astakos.im.settings import ( |
61 | 62 |
INVITATIONS_PER_LEVEL, BASEURL, SITENAME, RECAPTCHA_PRIVATE_KEY, |
62 | 63 |
RECAPTCHA_ENABLED, DEFAULT_CONTACT_EMAIL, LOGGING_LEVEL, |
... | ... | |
64 | 65 |
MODERATION_ENABLED, PROJECT_MEMBER_JOIN_POLICIES, |
65 | 66 |
PROJECT_MEMBER_LEAVE_POLICIES) |
66 | 67 |
from astakos.im.widgets import DummyWidget, RecaptchaWidget |
67 |
from astakos.im.functions import send_change_email, submit_application |
|
68 |
from astakos.im.functions import ( |
|
69 |
send_change_email, submit_application, do_accept_membership_checks) |
|
68 | 70 |
|
69 | 71 |
from astakos.im.util import reserved_email, get_query, model_to_dict |
70 | 72 |
from astakos.im import auth_providers |
... | ... | |
102 | 104 |
""" |
103 | 105 |
Extends the built in UserCreationForm in several ways: |
104 | 106 |
|
105 |
* Adds email, first_name, last_name, recaptcha_challenge_field, recaptcha_response_field field. |
|
107 |
* Adds email, first_name, last_name, recaptcha_challenge_field, |
|
108 |
* recaptcha_response_field field. |
|
106 | 109 |
* The username field isn't visible and it is assigned a generated id. |
107 | 110 |
* User created is not active. |
108 | 111 |
""" |
... | ... | |
841 | 844 |
class AddProjectMembersForm(forms.Form): |
842 | 845 |
q = forms.CharField( |
843 | 846 |
max_length=800, widget=forms.Textarea, label=_('Add members'), |
844 |
help_text=_(astakos_messages.ADD_PROJECT_MEMBERS_Q_HELP), |
|
845 |
required=True) |
|
847 |
help_text=_(astakos_messages.ADD_PROJECT_MEMBERS_Q_HELP), required=True) |
|
846 | 848 |
|
849 |
def __init__(self, *args, **kwargs): |
|
850 |
application_id = kwargs.pop('application_id', None) |
|
851 |
if application_id: |
|
852 |
self.project = Project.objects.get(application__id=application_id) |
|
853 |
self.request_user = kwargs.pop('request_user', None) |
|
854 |
super(AddProjectMembersForm, self).__init__(*args, **kwargs) |
|
855 |
|
|
847 | 856 |
def clean(self): |
857 |
try: |
|
858 |
do_accept_membership_checks(self.project, self.request_user) |
|
859 |
except PermissionDenied, e: |
|
860 |
raise forms.ValidationError(e) |
|
861 |
|
|
848 | 862 |
q = self.cleaned_data.get('q') or '' |
849 | 863 |
users = q.split(',') |
850 | 864 |
users = list(u.strip() for u in users if u) |
851 | 865 |
db_entries = AstakosUser.objects.filter(email__in=users) |
852 | 866 |
unknown = list(set(users) - set(u.email for u in db_entries)) |
853 | 867 |
if unknown: |
854 |
raise forms.ValidationError(_(astakos_messages.UNKNOWN_USERS) % ','.join(unknown)) |
|
868 |
raise forms.ValidationError( |
|
869 |
_(astakos_messages.UNKNOWN_USERS) % ','.join(unknown)) |
|
855 | 870 |
self.valid_users = db_entries |
856 | 871 |
return self.cleaned_data |
857 | 872 |
|
Also available in: Unified diff