Blob Blame Raw

from page.page import Page

import exception


class UserCreatePage(Page):
  def process(self, request, path, prevpath):
    if path:
      raise exception.HttpNotFound()
    if not request.model.users.can_create():
      raise exception.HttpNotFound()
    answer = request.answer
    answer.chain_title( answer.te('Create user') )
    answer.content += '<p>' + answer.te('Create user') + '</p>\n'
    answer.content += '<form method="post">\n'
    answer.content += '<input type="hidden" name="action" value="user.create" />\n'
    answer.content += '<p>' + answer.te('login:') + ' <input type="text" name="login" value="' + answer.encodedfield('login') + '" /></p>\n'
    answer.content += '<p>' + answer.te('password:') + ' <input type="password" name="password" /></p>\n'
    answer.content += '<p>' + answer.te('retry password:') + ' <input type="password" name="passwordretry" /></p>\n'
    answer.content += '<p>' + answer.te('name:') + ' <input type="text" name="name" value="' + answer.encodedfield('name') + '" /></p>\n'
    answer.content += '<p><input type="submit" value="' + answer.te('Submit') + '" /></p>\n'
    answer.content += '</form>\n'
    return answer.complete_content()


class UserPage(Page):
  def __init__(self):
    super().__init__()
    self.profile = UserProfilePage()
    
  def process(self, request, path, prevpath):
    if not path:
      raise exception.HttpNotFound()

    user = None
    if path[0].isdecimal():
      user = request.model.users.get_by_id(int(path[0]))
    else:
      user = request.model.users.get_by_login(str(path[0]))
    if not user:
      raise exception.HttpNotFound()

    request.answer.objects['user'] = user
    return self.profile.sub_process(request, path, prevpath)


class UserProfilePage(Page):
  def __init__(self):
    super().__init__()
    self.edit = UserUpdatePage()
    self.delete = UserDeletePage()

  def process(self, request, path, prevpath):
    user = request.answer.objects['user']
    answer = request.answer
    answer.chain_title( answer.e(user.login) )

    if path:
      if path[0] == 'edit':
        return self.edit.sub_process(request, path, prevpath)
      if path[0] == 'delete':
        return self.delete.sub_process(request, path, prevpath)
      raise exception.HttpNotFound()

    answer.content += '<p>' + answer.e(user.login) + '</p>\n'
    answer.content += '<p>' + answer.e(user.name) + '</p>\n'
    if user.superuser:
      answer.content += '<p>' + answer.te('Site admin') + '</p>\n'
    if user.can_update():
      answer.content += '<p>' + self.make_link(answer, prevpath + ['edit'], 'Edit user') + '</p>\n'
    return answer.complete_content()


class UserUpdatePage(Page):
  def process(self, request, path, prevpath):
    if path:
      raise exception.HttpNotFound()

    answer = request.answer
    user = answer.objects['user']
    if not user.can_update():
      raise exception.HttpNotFound()
    
    answer.chain_title( answer.te('Edit user') )
    answer.content += '<p>' + answer.te('Edit user') + '</p>\n'
    answer.content += '<p>' + answer.e(user.login) + '</p>\n'
    answer.content += '<form method="post">\n'
    answer.content += '<input type="hidden" name="action" value="user.update" />\n'
    answer.content += '<input type="hidden" name="user_id" value="' + answer.e(user.id) + '" />\n'
    answer.content += '<p>' + answer.te('name:') + ' <input type="text" name="name" value="' + answer.e(user.name) + '" /></p>\n'
    answer.content += '<p><input type="submit" value="' + answer.te('Submit') + '" /></p>\n'
    answer.content += '</form>\n'
    
    answer.content += '<p>' + answer.te('Change password') + '</p>\n'
    answer.content += '<form method="post">\n'
    answer.content += '<input type="hidden" name="action" value="user.setpassword" />\n'
    answer.content += '<input type="hidden" name="user_id" value="' + answer.e(user.id) + '" />\n'
    if user.id == request.model.myrights.user_id:
      answer.content += '<p>' + answer.te('old password:') + ' <input type="password" name="oldpassword" /></p>\n'
    answer.content += '<p>' + answer.te('new password:') + ' <input type="password" name="newpassword" /></p>\n'
    answer.content += '<p>' + answer.te('new password retry:') + ' <input type="password" name="newpasswordretry" /></p>\n'
    answer.content += '<p><input type="submit" value="' + answer.te('Submit') + '" /></p>\n'
    answer.content += '</form>\n'
    
    if user.id != request.model.myrights.user_id and not user.superuser is None:
      answer.content += '<p>' + answer.te('Global rights') + '</p>\n'
      answer.content += '<form method="post">\n'
      answer.content += '<input type="hidden" name="action" value="user.setsuperuser" />\n'
      answer.content += '<input type="hidden" name="user_id" value="' + answer.e(user.id) + '" />\n'
      answer.content += '<p><input type="checkbox" name="superuser"' + (' checked' if user.superuser else '') + '> ' + answer.te('site admin') + '</p>\n'
      answer.content += '<p><input type="submit" value="' + answer.te('Submit') + '" /></p>\n'
      answer.content += '</form>\n'

    if user.can_delete() and prevpath:
      answer.content += '<p>' + answer.te('Deletion') + '</p>\n'
      answer.content += '<form action="' + request.get_urlpath_escaped(prevpath[:-1] + ['delete']) + '">\n'
      answer.content += '<p><input type="submit" value="' + answer.te('Delete user') + '" /></p>\n'
      answer.content += '</form>\n'

    return answer.complete_content()


class UserDeletePage(Page):
  def process(self, request, path, prevpath):
    if path:
      raise exception.HttpNotFound()

    answer = request.answer
    user = answer.objects['user']
    if not user.can_delete():
      raise exception.HttpNotFound()

    answer.chain_title( answer.te('Delete user') )
    answer.content += '<p>' + answer.te('Do you really want do delete user?') + '</p>\n'
    answer.content += '<p>' + answer.e(user.id) + '</p>\n'
    answer.content += '<p>' + answer.e(user.login) + '</p>\n'
    answer.content += '<p>' + answer.e(user.name) + '</p>\n'
    answer.content += '<form method="post" action="' + request.get_urlpath_escaped([]) + '">\n'
    answer.content += '<input type="hidden" name="action" value="user.delete" />\n'
    answer.content += '<input type="hidden" name="user_id" value="' + answer.e(user.id) + '" />\n'
    if user.id == request.model.myrights.user_id:
      answer.content += '<p>' + answer.te('password to delete your account:') + ' <input type="password" name="password" /></p>\n'
    answer.content += '<p><input type="submit" value="' + answer.te('Confirm delete') + '" /></p>\n'
    answer.content += '</form>\n'
    return answer.complete_content()


class UserListPage(Page):
  def process(self, request, path, prevpath):
    if path:
      raise exception.HttpNotFound()
    if not prevpath:
      raise exception.HttpNotFound()
    if not request.model.users.can_list():
      raise exception.HttpNotFound()
    
    users = request.model.users.get_list()
    
    answer = request.answer
    answer.chain_title( answer.te('Users list') )
    answer.content += '<p>' + answer.te('Users list') + '</p>\n'
    for user in users:
      url = request.get_urlpath_escaped(prevpath[:-1] + ['user', str(user.id)])
      answer.content += '<p><a href="' + url + '">' \
                     + answer.e(user.id) + ' ' \
                     + answer.e(user.login) + ' ' \
                     + answer.e(user.name) + '</a></p>\n'

    if request.model.users.can_create():
      answer.content += '<p>' + self.make_link(answer, prevpath[:-1] + ['user_create'], 'Create user') + '</p>\n'

    return answer.complete_content()