コード例 #1
0
ファイル: user.py プロジェクト: jsgf/imagestore2
    def replace_deleted(self):
        deleted = []
        for w in self.get_widgets():
            if w.isdeleted():
                print 'deleting %d' % w.user.id
                deleted.append(w)

        if deleted:
            replacements = db.User.select(dbfilters.userFilter(NOT(IN(db.User.q.id, [ w.user.id for w in deleted ]))),
                                          orderBy=db.User.q.id)

            for w in deleted:
                pics = db.Picture.select(db.Picture.q.ownerID == w.user.id).count()
                if pics != 0:
                    w.add_replacement(replacements, pics)
コード例 #2
0
ファイル: form.py プロジェクト: jsgf/imagestore2
def userOptList():
    users = db.User.select(dbfilters.userFilter(), orderBy=db.User.q.id)

    return [ (u.id, '%d: %s' % (u.id, u.fullname), u.id) for u in users ]
コード例 #3
0
ファイル: user.py プロジェクト: jsgf/imagestore2
def editusers(request):
    """Generate a table-form for doing mass edits of users.

    This allows an administrator to edit users' usernames, real names,
    email addresses and permissions, as well as "deleting" users (ie, disabling them).

    Form submission is in three phases:
     1. present form with current values
     2. when submitted, that presents the form with only the changed users, asking for
        confirmation
     3. commit the changes to the database
    """


    user = admin.login_user()

    if user is None or not user.mayAdmin:
        raise AccessError("You may not change user information")

    userform = form2.Form()
    userform.add(UserListWidget, 'users')
    userlist = userform.get_widget('users')

    userform.add(form2.HiddenWidget, 'state', value=0)

    for u in db.User.select(dbfilters.userFilter(), orderBy=db.User.q.id):
        userlist.adduser(u)

    state = int(userform['state'])
    
    if state == 0:
        userform.get_widget('state').value = 1
        userform.add_submit('update', 'Update users')
    elif state == 1 or (state == 2 and userform.has_errors()):
        userform.get_widget('state').value = 2
        userform.add_submit('confirm', 'Confirm updates')
    elif state == 2:
        pass
    else:
        raise QueryError('Bad state %d' % state)

    if state > 0:
        userform.add_submit('cancel', 'Cancel changes')
    else:
        userform.add_reset('reset', 'Cancel changes')

    if userform.get_submit() == 'cancel' or (state > 0 and not userlist.changed()):
        print 'CANCEL'
        return quixote.redirect(request.get_path())

    if state > 0:
        userlist.replace_deleted()
        for w in userlist.get_widgets():
            if not w.has_changed():
                w.skip_widget()

    def render():
        ret = TemplateIO(html=True)

        ret += page.pre(request, 'User administration', 'editusers')
        ret += page.menupane(request)
        ret += H('<h1>User administration</h1>\n')
        ret += userform.render()
        ret += page.post()

        return ret.getvalue()

    if not userform.is_submitted() or userform.has_errors() or state == 0 or state == 1:
        return render()

    assert state == 2, 'erk, otherwise'
    
    userlist.commit()

    return quixote.redirect(request.get_path()) # reload with the new details