boards.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. # -*- coding: utf-8 -*-
  2. """
  3. (c) 2014-2017 - Copyright Red Hat Inc
  4. Authors:
  5. Pierre-Yves Chibon <pingou@pingoured.fr>
  6. """
  7. # pylint: disable=too-many-lines
  8. # pylint: disable=too-many-branches
  9. # pylint: disable=too-many-locals
  10. # pylint: disable=too-many-statements
  11. from __future__ import absolute_import, unicode_literals
  12. import logging
  13. import flask
  14. from pagure.decorators import (
  15. has_issue_tracker,
  16. is_admin_sess_timedout,
  17. is_repo_admin,
  18. )
  19. from pagure.ui import UI_NS
  20. from pagure.utils import authenticated, login_required
  21. _log = logging.getLogger(__name__)
  22. @UI_NS.route("/<repo>/boards/<board_name>/")
  23. @UI_NS.route("/<repo>/boards/<board_name>")
  24. @UI_NS.route("/<namespace>/<repo>/boards/<board_name>/")
  25. @UI_NS.route("/<namespace>/<repo>/boards/<board_name>")
  26. @UI_NS.route("/fork/<username>/<repo>/boards/<board_name>/")
  27. @UI_NS.route("/fork/<username>/<repo>/boards/<board_name>")
  28. @UI_NS.route("/fork/<username>/<namespace>/<repo>/boards/<board_name>/")
  29. @UI_NS.route("/fork/<username>/<namespace>/<repo>/boards/<board_name>")
  30. @has_issue_tracker
  31. def view_board(repo, board_name, username=None, namespace=None):
  32. """View a board"""
  33. project = flask.g.repo
  34. board_out = None
  35. for board in project.boards:
  36. if board.name == board_name:
  37. board_out = board
  38. break
  39. if board_out is None:
  40. flask.abort(404)
  41. # Hide private tickets
  42. private = False
  43. # If user is authenticated, show him/her his/her private tickets
  44. if authenticated():
  45. private = flask.g.fas_user.username
  46. # If user is repo committer, show all tickets including the private ones
  47. if flask.g.repo_committer:
  48. private = None
  49. max_items = 0
  50. for status in board.statuses:
  51. max_items = max([max_items, len(status.boards_issues)])
  52. return flask.render_template(
  53. "board.html",
  54. select="boards",
  55. repo=project,
  56. username=username,
  57. board=board_out,
  58. max_items=max_items,
  59. private=private,
  60. )
  61. @UI_NS.route("/<repo>/settings/boards/<board_name>/", methods=("GET", "POST"))
  62. @UI_NS.route("/<repo>/settings/boards/<board_name>", methods=("GET", "POST"))
  63. @UI_NS.route(
  64. "/<namespace>/<repo>/settings/boards/<board_name>/",
  65. methods=("GET", "POST"),
  66. )
  67. @UI_NS.route(
  68. "/<namespace>/<repo>/settings/boards/<board_name>", methods=("GET", "POST")
  69. )
  70. @UI_NS.route(
  71. "/fork/<username>/<repo>/settings/boards/<board_name>/",
  72. methods=("GET", "POST"),
  73. )
  74. @UI_NS.route(
  75. "/fork/<username>/<repo>/settings/boards/<board_name>",
  76. methods=("GET", "POST"),
  77. )
  78. @UI_NS.route(
  79. "/fork/<username>/<namespace>/<repo>/settings/boards/<board_name>/",
  80. methods=("GET", "POST"),
  81. )
  82. @UI_NS.route(
  83. "/fork/<username>/<namespace>/<repo>/settings/boards/<board_name>",
  84. methods=("GET", "POST"),
  85. )
  86. @login_required
  87. @is_admin_sess_timedout
  88. @is_repo_admin
  89. def view_board_settings(repo, board_name, username=None, namespace=None):
  90. """Presents and update the settings of the board"""
  91. project = flask.g.repo
  92. if not project.boards:
  93. flask.abort(404)
  94. board_out = None
  95. for board in project.boards:
  96. if board.name == board_name:
  97. board_out = board
  98. break
  99. if board_out is None:
  100. flask.abort(404)
  101. return flask.render_template(
  102. "settings_board.html",
  103. select="settings",
  104. repo=project,
  105. username=username,
  106. board=board_out,
  107. )