No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

129 líneas
5.1KB

  1. import web
  2. import models.project
  3. from models.user import get_user_name_by_id
  4. from views.utils import get_nav_bar, get_element_count
  5. from views.forms import get_apply_form, get_apply_permissions_form
  6. # Get html templates
  7. render = web.template.render('templates/')
  8. class Apply:
  9. def GET(self):
  10. """
  11. Get the apply view where users can sign up for a project
  12. """
  13. # Get session
  14. session = web.ctx.session
  15. # Get navbar
  16. nav = get_nav_bar(session)
  17. data = web.input(projectid=0)
  18. if data.projectid:
  19. project = models.project.get_project_by_id(data.projectid)
  20. else:
  21. project = [[]]
  22. tasks = [[]]
  23. # Assemble form and set the user in context as an applicant with all permissions
  24. apply_form = get_apply_form()
  25. apply_permissions_form = get_apply_permissions_form()
  26. applicants = [[session.userid, session.username]]
  27. permissions = [["TRUE", "TRUE", "TRUE"]]
  28. render = web.template.render('templates/', globals={"get_apply_permissions_form":get_apply_permissions_form, 'session':session})
  29. return render.apply(nav, apply_form, get_apply_permissions_form, project, applicants, permissions)
  30. def POST(self):
  31. """
  32. Post an application to the view, adding selected users to a project
  33. """
  34. data = web.input(projectid=0, add_user=None, remove_user=None, apply=None)
  35. session = web.ctx.session
  36. nav = get_nav_bar(session)
  37. # Assemble form
  38. applicants = [session.username]
  39. apply_form = get_apply_form()
  40. apply_permission_form = get_apply_permissions_form()
  41. # Prepare globals
  42. render = web.template.render('templates/', globals={"get_apply_permissions_form":get_apply_permissions_form, 'session':session})
  43. if data.projectid:
  44. project = models.project.get_project_by_id(data.projectid)
  45. if data.add_user:
  46. applicants, permissions = self.get_applicants(data, "add_user")
  47. return render.apply(nav, apply_form, get_apply_permissions_form, project, applicants,permissions)
  48. elif data.remove_user:
  49. applicants, permissions = self.get_applicants(data, "remove_user")
  50. return render.apply(nav, apply_form, get_apply_permissions_form, project, applicants, permissions)
  51. # Set users as working on project and set project status in progress
  52. elif data.apply:
  53. applicants, permissions = self.get_applicants(data, "")
  54. for applicant, permission in zip(applicants, permissions):
  55. models.project.set_projects_user(data.projectid, str(applicant[0]), permission[0], permission[1], permission[2])
  56. models.project.update_project_status(data.projectid, "in progress")
  57. raise web.seeother(('/project?projectid=' + str(data.projectid)))
  58. def get_applicants(self, data, operation):
  59. """
  60. Get applicants and corresponding permissions from the input data with and operation
  61. :param data: Input data
  62. :param operation: Either empty, add_user or remove_user
  63. :type data: Storage
  64. :type operation: str
  65. """
  66. user_count = get_element_count(data, "user_")
  67. applicants = []
  68. permissions = []
  69. # Create the lists of current applying users and their permissions
  70. for i in range (0, user_count):
  71. print("Raw applicant", data["user_"+str(i)])
  72. applicant = data["user_"+str(i)][1:][:-1].split(",")
  73. applicants.append([ int(applicant[0]), applicant[1][2:][:-1] ])
  74. read, write, modify = "FALSE", "FALSE", "FALSE"
  75. try:
  76. data["read_permission_"+str(i)]
  77. read = "TRUE"
  78. except Exception as e:
  79. read = "FALSE"
  80. pass
  81. try:
  82. data["write_permission_"+str(i)]
  83. write = "TRUE"
  84. except Exception as e:
  85. write = "FALSE"
  86. pass
  87. try:
  88. data["modify_permission_"+str(i)]
  89. modify = "TRUE"
  90. except Exception as e:
  91. modify = "FALSE"
  92. pass
  93. permissions.append([read, write, modify])
  94. if operation == "remove_user":
  95. user_to_remove = data.remove_user[1:][:-1].split(",")
  96. user_to_remove = [int(user_to_remove[0]), user_to_remove[1][2:][:-1]]
  97. for i in range (0, user_count):
  98. if user_to_remove == applicants[i]:
  99. applicants.pop(i)
  100. permissions.pop(i)
  101. break
  102. elif operation == "add_user":
  103. user_id_to_add = data.user_to_add
  104. user_name_to_add = get_user_name_by_id(user_id_to_add)
  105. new_applicant = [ int(user_id_to_add), user_name_to_add ]
  106. if new_applicant not in applicants:
  107. applicants.append(new_applicant)
  108. permissions.append(["TRUE", "FALSE", "FALSE"])
  109. return applicants, permissions