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