~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/admin/user.py

  • Committer: William Grant
  • Date: 2010-02-26 03:35:37 UTC
  • Revision ID: grantw@unimelb.edu.au-20100226033537-dyveb5ut9fwpop67
Add a form to create a user.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
import formencode.validators
22
22
from genshi.filters import HTMLFormFiller
23
23
 
 
24
from ivle.database import User
 
25
import ivle.date
 
26
from ivle.pulldown_subj import enrol_user
24
27
from ivle.webapp import ApplicationRoot
25
 
from ivle.webapp.base.forms import BaseFormView
 
28
from ivle.webapp.base.forms import BaseFormView, URLNameValidator
26
29
from ivle.webapp.base.xhtml import XHTMLView
27
30
from ivle.webapp.base.plugins import ViewPlugin, MediaPlugin
28
31
from ivle.webapp.admin.publishing import root_to_user, user_url
29
 
from ivle.database import User
30
 
import ivle.date
31
32
 
32
33
 
33
34
class UsersView(XHTMLView):
185
186
        ctx['user'] = self.context
186
187
        ctx['error'] = error
187
188
 
 
189
 
 
190
class UserNewSchema(formencode.Schema):
 
191
    login = URLNameValidator() # XXX: Validate uniqueness.
 
192
    admin = formencode.validators.StringBoolean(if_missing=False)
 
193
    fullname = formencode.validators.UnicodeString(not_empty=True)
 
194
    studentid = formencode.validators.UnicodeString(not_empty=False,
 
195
                                                    if_missing=None
 
196
                                                    )
 
197
    email = formencode.validators.Email(not_empty=False,
 
198
                                        if_missing=None)
 
199
 
 
200
 
 
201
class UserNewView(BaseFormView):
 
202
    """A form for admins to create new users."""
 
203
    template = 'templates/user-new.html'
 
204
    tab = 'users'
 
205
 
 
206
    def authorize(self, req):
 
207
        """Only allow access if the requesting user is an admin."""
 
208
        return req.user and req.user.admin
 
209
 
 
210
    @property
 
211
    def validator(self):
 
212
        return UserNewSchema()
 
213
 
 
214
    def get_default_data(self, req):
 
215
        return {}
 
216
 
 
217
    def save_object(self, req, data):
 
218
        data['nick'] = data['fullname']
 
219
        data['email'] = unicode(data['email']) if data['email'] else None
 
220
        userobj = User(**data)
 
221
        req.store.add(userobj)
 
222
        enrol_user(req.config, req.store, userobj)
 
223
 
 
224
        return userobj
 
225
 
 
226
 
188
227
class Plugin(ViewPlugin, MediaPlugin):
189
228
    """
190
229
    The Plugin class for the user plugin.
192
231
 
193
232
    forward_routes = (root_to_user,)
194
233
    reverse_routes = (user_url,)
195
 
    views = [(ApplicationRoot, 'users', UsersView),
 
234
    views = [(ApplicationRoot, ('users', '+index'), UsersView),
 
235
             (ApplicationRoot, ('users', '+new'), UserNewView),
196
236
             (User, '+index', UserEditView),
197
237
             (User, '+admin', UserAdminView),
198
238
             (User, '+changepassword', PasswordChangeView),