project.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <link rel="stylesheet" href="../static/css/project.css"/>
  2. {% extends "base.html" %} {% block content %}
  3. <div class="projects_page">
  4. <div class="link_back_block">
  5. <a class="link_back" href="../">
  6. <p class="link_back_text">К проектам</p>
  7. </a>
  8. </div>
  9. <div class="project_header">
  10. <div class="edit_block">
  11. {% if current_user.id == project.creator or current_user.role == 1 %}
  12. <div class="edit_button">
  13. <a id="edit_button" class="edit_button_link" href="">
  14. <p class="edit_button_text">Редактировать</p>
  15. </a>
  16. </div>
  17. {% else %}
  18. <p style="width: 12vw;"></p>
  19. {% endif %}
  20. </div>
  21. <div class="brand_block">
  22. <img class="project_logo" src="../{{project.photo}}"/>
  23. <p class="name_project header_title">{{ project.name }}</p>
  24. </div>
  25. <div class="notification_block">
  26. </div>
  27. </div>
  28. <div class="body_block">
  29. <div class="head_staff_block">
  30. <h3 class="header_title">Участники</h3>
  31. <div class="collaborator_block">
  32. <div class="staff_block">
  33. {% for user in staff %}
  34. <div class="user">
  35. <a class="link_to_user" href="/user/{{ user.login }}">
  36. <img class="user_logo" src="../{{user.photo}}">
  37. <p class="user_names">{{user.name}}</p>
  38. </a>
  39. </div>
  40. {% endfor %}
  41. </div>
  42. </div>
  43. </div>
  44. <div class="header_task_block">
  45. <div class="head_task">
  46. <h3 class="header_title_2">Задачи</h3>
  47. <div class="new_task_block">
  48. <a class="new_task_link" id="new_task_link" href="{{ project.id }}/quest/new">
  49. <p class="new_task_text">Добавить</p>
  50. </a>
  51. </div>
  52. </div>
  53. <div class="task_block">
  54. <div class="task">
  55. {% for quest in quests %}
  56. <div class="accordion list_quests" id="accordionPanelsStayOpen{{ quest.id }}">
  57. <div class="accordion-item quest">
  58. <h2 class="accordion-header quest_header" id="panelsStayOpen-heading{{ quest.id }}">
  59. <button class="accordion-button quest_header_button" type="button"
  60. data-bs-toggle="collapse"
  61. data-bs-target="#panelsStayOpen-collapse{{ quest.id }}" aria-expanded="true"
  62. aria-controls="panelsStayOpen-collapse{{ quest.id }}">
  63. <div class="quest_button_block_one"{% if project.is_template %}style="width: 97%;"{% endif %}>
  64. <div class="quest_title_block" {% if project.is_template
  65. %}style="width:100%;!important" {% endif %}>
  66. <p class="quest_title">{{ quest.name }}</p>
  67. </div>
  68. {% if not project.is_template %}
  69. </div>
  70. {% if quest.overdue == 'yes' and quest.realized != 1 %}
  71. <div class="deadline_block alert alert-danger" role="alert">
  72. {{ quest.time_left }}
  73. </div>
  74. {% elif quest.overdue == 'today' and quest.realized != 1 %}
  75. <div class="deadline_block alert alert-warning" role="alert">
  76. Дедлайн сегодня
  77. </div>
  78. {% elif quest.overdue == 'no' and quest.realized != 1 %}
  79. <div class="deadline_block alert alert-success" role="alert">
  80. {{ quest.time_left }}
  81. </div>
  82. {% elif quest.overdue == '' and quest.realized != 1 %}
  83. <div class="deadline_block alert alert-warning" role="alert">
  84. Дедлайна нет
  85. </div>
  86. {% else %}
  87. <div class="deadline_block alert alert-success" role="alert">
  88. Задача выполнена
  89. </div>
  90. {% endif %}
  91. {% endif %}
  92. </button>
  93. </h2>
  94. <div id="panelsStayOpen-collapse{{ quest.id }}"
  95. class="accordion-collapse collapse quest_body_block"
  96. aria-labelledby="panelsStayOpen-heading{{ quest.id }}">
  97. <div class="accordion-body quest_body">
  98. {% if quest.realized == 0 %}
  99. <div class="quest_body">
  100. <div class="quest_description_block">
  101. <p class="quest_description_title">Описание</p>
  102. <div class="quest_description">
  103. <p class="quest_description_text">{{ quest.description }}</p>
  104. </div>
  105. </div>
  106. <div class="quest_buttons_block">
  107. <div class="quest_solve_button">
  108. <a class="quest_solve_link" href="{{ project.id }}/quest/{{ quest.id }}">
  109. <p class="quest_solve_text">Решить</p>
  110. </a>
  111. </div>
  112. {% if quest.creator == current_user.id or project.creator == current_user.id or current_user.role == 1 %}
  113. <div class="link_edit_block">
  114. <a class="link_edit" href="{{ project.id }}/quest/{{ quest.id }}/edit">
  115. <p class="link_edit_text">Редактировать</p>
  116. </a>
  117. </div>
  118. {% endif %}
  119. </div>
  120. </div>
  121. {% else %}
  122. <div class="quest_body">
  123. <div class="quest_description_block">
  124. <p class="quest_description_title">Описание</p>
  125. <div class="quest_description">
  126. <p class="quest_description_text">{{ quest.description }}</p>
  127. </div>
  128. </div>
  129. <div class="quest_solve_button">
  130. <a class="quest_solve_link" href="{{ project.id }}/quest/{{ quest.id }}">
  131. <p class="quest_solve_text">Посмотреть</p>
  132. </a>
  133. </div>
  134. </div>
  135. {% endif %}
  136. </div>
  137. </div>
  138. </div>
  139. </div>
  140. {% endfor %}
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. <div class="files_block">
  146. <div class="head_files">
  147. <h2 class="files_title">Файлы</h2>
  148. <form action="" method="post" class="file_form" id="file_form" enctype="multipart/form-data">
  149. {{ form_file.hidden_tag() }}
  150. <div class="form_data bottom_data">
  151. {{ form_file.file(class="input_data", id="selectedFile", type="file", style="display: none;") }}
  152. {% for error in form_file.file.errors %}
  153. <div class="alert alert-danger" role="alert">{{ error }}</div>
  154. {% endfor %}
  155. </div>
  156. {{ form_file.submit(type="submit", id="upload_button", class="btn btn-success upload_button",
  157. style="display: none;") }}
  158. <button type="button" class="upload_button btn btn-primary" id="select_file_button"
  159. onclick="push_file()">Добавить
  160. </button>
  161. </form>
  162. </div>
  163. <div class="list_files_block">
  164. <div class="list_files">
  165. {% for item in file_tree %}
  166. {% if item['type'] == 'file' %}
  167. <div class="file">
  168. <div class="file_head">
  169. <nav class="file_head_group" style="--bs-breadcrumb-divider: '>';" aria-label="breadcrumb">
  170. <ol class="breadcrumb file_head_path">
  171. {% for path in item['current_path'] %}
  172. <li class="breadcrumb-item active file_path" aria-current="page">{{ path }}</li>
  173. {% endfor %}
  174. </ol>
  175. </nav>
  176. </div>
  177. <div class="file_buttons">
  178. <div class="btn-group file_buttons_groud">
  179. {% if current_user.id == project.creator or item['object'].user == current_user.id or current_user.role == 1%}
  180. <a href="../project/{{ project.id }}/file/{{ item['object'].id }}/delete?from=project"
  181. class="btn btn-primary file_delete"><p class="button_text">Удалить</p></a>
  182. {% endif %}
  183. <a href="../../../{{ item['path'] }}" download="" class="btn btn-primary file_download"><p
  184. class="button_text">Скачать</p></a>
  185. </div>
  186. </div>
  187. </div>
  188. {% elif item['type'] == 'folder' %}
  189. {% endif %}
  190. {% endfor %}
  191. </div>
  192. </div>
  193. </div>
  194. </div>
  195. <script type="text/javascript" src="../static/js/project.js"></script>
  196. {% endblock %}