profile_layout.html 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. {%- from theme("_macros/navigation.html") import sidebar with context -%}
  2. {% extends theme("layout.html") %}
  3. {% set page_title = _("%(user)s - User", user=user.username) %}
  4. {% block content %}
  5. {% block breadcrumb %}
  6. {% endblock %}
  7. <div class="page-view">
  8. <div class="card profile">
  9. <div class="card-header profile-header bg-white">
  10. <div class="row">
  11. <div class="col-12 col-sm-auto mb-3">
  12. <div class="mx-auto" style="width: 150px;">
  13. <div class="d-flex justify-content-center align-items-center">
  14. <img class="rounded" src="{{ url_for('static', filename='avatar150x150.png') }}" alt="" />
  15. </div>
  16. </div>
  17. </div>
  18. <div class="col d-flex flex-column flex-sm-row justify-content-between mb-3">
  19. <div class="text-sm-left mb-2 mb-sm-0">
  20. <h4 class="pt-sm-2 pb-1 mb-0 text-nowrap">{{ user.username }}</h4>
  21. <p class="mb-0">{{ user.primary_group.name }}</p>
  22. <div class="text-muted">
  23. <small>
  24. {%- if user|is_online %}
  25. <span class="badge bg-success">{% trans %}online{% endtrans %}</span>
  26. {%- else %}
  27. {%- if user.lastseen -%}
  28. Last seen {{ user.lastseen|time_since }}
  29. {%- else -%}
  30. {% trans %}Never seen{% endtrans %}
  31. {%- endif -%}
  32. {%- endif %}
  33. </small>
  34. </div>
  35. <div class="mt-2 profile-actions">
  36. {% if current_user|can_edit_user %}
  37. <a class="btn btn-sm btn-primary" href="{{ url_for('management.edit_user', user_id=user.id)}}">
  38. <span class="fas fa-edit"></span> {% trans %}Edit{% endtrans %}
  39. </a>
  40. {% endif %}
  41. {# Ban user #}
  42. {% if current_user|can_ban_user and not user.permissions['banned'] %}
  43. <form class="d-inline" method="post" action="{{ url_for('management.ban_user', user_id=user.id) }}">
  44. <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
  45. <button class="btn btn-sm btn-danger">
  46. <span class="fas fa-ban"></span> {% trans %}Ban{% endtrans %}
  47. </button>
  48. </form>
  49. {# Unban user #}
  50. {% elif current_user|can_ban_user and user.permissions['banned'] %}
  51. <form class="d-inline" method="post" action="{{ url_for('management.unban_user', user_id=user.id) }}">
  52. <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
  53. <button class="btn btn-sm btn-warning">
  54. <span class="fas fa-ban"></span> {% trans %}Unban{% endtrans %}
  55. </button>
  56. </form>
  57. {% endif %}
  58. {{ run_hook("flaskbb_tpl_profile_actions", user=user) }}
  59. </div>
  60. </div>
  61. <div class="text-sm-right col-2 profile-stats">
  62. <!-- TODO: Make this nicer -->
  63. <div class="row">
  64. <div class="col text-end text-nowrap" style="max-width: 80px;">Joined:</div>
  65. <div class="col ps-0 float-start text-nowrap">
  66. {{ user.date_joined|format_date }}
  67. </div>
  68. </div>
  69. <div class="row">
  70. <div class="col text-end text-nowrap" style="max-width: 80px;">Posts:</div>
  71. <div class="col ps-0 text-start text-nowrap">{{ user.post_count }}</div>
  72. </div>
  73. <div class="row">
  74. <div class="col text-end text-nowrap" style="max-width: 80px;">Topics:</div>
  75. <div class="col ps-0 float-start text-nowrap">{{ user.topic_count }}</div>
  76. </div>
  77. {{ run_hook("flaskbb_tpl_profile_stats", user=user) }}
  78. </div>
  79. </div>
  80. </div>
  81. {% block profile_navigation %}
  82. {{ sidebar(
  83. run_hook(
  84. "flaskbb_tpl_profile_links",
  85. user=user,
  86. is_markup=False
  87. ),
  88. extra_class="nav-tabs card-header-tabs profile-header-tab"
  89. )
  90. }}
  91. {% endblock %}
  92. </div>
  93. <div class="card-body page-body">
  94. <div class="row">
  95. {% block profile_content %}
  96. {% endblock %}
  97. </div>
  98. </div> <!-- end col -->
  99. </div> <!-- end row -->
  100. </div> <!-- end page-view -->
  101. {% endblock content %}