Переместил кнопку редактирования задачи, добавил возможность менять статус шаблона у проекта

This commit is contained in:
Andrei 2023-03-11 23:38:19 +05:00
parent 34462d76ee
commit 2f995f3ec9
6 changed files with 87 additions and 60 deletions

66
main.py
View File

@ -64,6 +64,8 @@ def base():
@app.route('/admin', methods=['GET', 'POST']) @app.route('/admin', methods=['GET', 'POST'])
def admin(): def admin():
if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated: if current_user.is_authenticated:
if current_user.role == 1: if current_user.role == 1:
data_session = db_session.create_session() data_session = db_session.create_session()
@ -94,7 +96,9 @@ def admin():
@app.route('/template/<int:id_template>/create') @app.route('/template/<int:id_template>/create')
def create_by_template(id_template): def create_by_template(id_template):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
current_template = data_session.query(Projects).filter(Projects.id == id_template).first() current_template = data_session.query(Projects).filter(Projects.id == id_template).first()
if current_template: if current_template:
@ -120,7 +124,9 @@ def create_by_template(id_template):
@app.route('/template/<int:id_template>') @app.route('/template/<int:id_template>')
def template_project(id_template): def template_project(id_template):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
current_project = data_session.query(Projects).filter(Projects.id == id_template).first() current_project = data_session.query(Projects).filter(Projects.id == id_template).first()
if current_project: if current_project:
@ -136,7 +142,9 @@ def template_project(id_template):
@app.route('/showcase/link/<int:id_link>/delete') @app.route('/showcase/link/<int:id_link>/delete')
def delete_link(id_link): def delete_link(id_link):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
if current_user.role in [1, 4]: if current_user.role in [1, 4]:
data_session = db_session.create_session() data_session = db_session.create_session()
link = data_session.query(ShowCaseLink).filter(ShowCaseLink.id == id_link).first() link = data_session.query(ShowCaseLink).filter(ShowCaseLink.id == id_link).first()
@ -153,7 +161,9 @@ def delete_link(id_link):
@app.route('/showcase', methods=['GET', 'POST']) @app.route('/showcase', methods=['GET', 'POST'])
def showcase(): def showcase():
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
form = AddLink() if current_user.role in [1, 4] else None form = AddLink() if current_user.role in [1, 4] else None
data_session = db_session.create_session() data_session = db_session.create_session()
if request.method == 'POST' and current_user.role in [1, 4]: if request.method == 'POST' and current_user.role in [1, 4]:
@ -171,14 +181,16 @@ def showcase():
data_session.query(Projects).filter(Projects.is_template == 1).all())) data_session.query(Projects).filter(Projects.is_template == 1).all()))
list_links = data_session.query(ShowCaseLink).all() list_links = data_session.query(ShowCaseLink).all()
return render_template('showcase.html', title='Витрина', list_template=list_template, list_links=list_links, return render_template('showcase.html', title='Витрина', list_template=list_template, list_links=list_links,
form=form, type=type) form=form)
else: else:
return redirect('/login') return redirect('/login')
@app.route('/project/<int:id_project>/quest/<int:id_task>/edit', methods=['GET', 'POST']) @app.route('/project/<int:id_project>/quest/<int:id_task>/edit', methods=['GET', 'POST'])
def edit_quest(id_project, id_task): def edit_quest(id_project, id_task):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
current_project = data_session.query(Projects).filter(Projects.id == id_project).first() current_project = data_session.query(Projects).filter(Projects.id == id_project).first()
current_task = data_session.query(Quests).filter(Quests.id == id_task).first() current_task = data_session.query(Quests).filter(Quests.id == id_task).first()
@ -215,7 +227,9 @@ def edit_quest(id_project, id_task):
@app.route('/project/<int:id_project>/file/<int:id_file>/delete') @app.route('/project/<int:id_project>/file/<int:id_file>/delete')
def delete_file(id_project, id_file): def delete_file(id_project, id_file):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
from_path = request.args.get('from') if request.args.get('from') else '' from_path = request.args.get('from') if request.args.get('from') else ''
data_session = db_session.create_session() data_session = db_session.create_session()
current_project = data_session.query(Projects).filter(Projects.id == id_project).first() current_project = data_session.query(Projects).filter(Projects.id == id_project).first()
@ -246,7 +260,9 @@ def delete_file(id_project, id_file):
@app.route('/project/<int:id_project>/quest/<int:id_task>', methods=['GET', 'POST']) @app.route('/project/<int:id_project>/quest/<int:id_task>', methods=['GET', 'POST'])
def task_project(id_project, id_task): def task_project(id_project, id_task):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
current_project = data_session.query(Projects).filter(Projects.id == id_project).first() current_project = data_session.query(Projects).filter(Projects.id == id_project).first()
current_task = data_session.query(Quests).filter(Quests.id == id_task).first() current_task = data_session.query(Quests).filter(Quests.id == id_task).first()
@ -314,7 +330,9 @@ def task_project(id_project, id_task):
@app.route('/project/<int:id_project>/quest/new', methods=['GET', 'POST']) @app.route('/project/<int:id_project>/quest/new', methods=['GET', 'POST'])
def new_task_project(id_project): def new_task_project(id_project):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
current_project = data_session.query(Projects).filter(Projects.id == id_project).first() current_project = data_session.query(Projects).filter(Projects.id == id_project).first()
if current_project: if current_project:
@ -345,7 +363,9 @@ def new_task_project(id_project):
@app.route('/project/<int:id_project>/edit', methods=['GET', 'POST']) @app.route('/project/<int:id_project>/edit', methods=['GET', 'POST'])
def edit_project(id_project): def edit_project(id_project):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
current_project = data_session.query(Projects).filter(Projects.id == id_project).first() current_project = data_session.query(Projects).filter(Projects.id == id_project).first()
if current_project: if current_project:
@ -382,6 +402,7 @@ def edit_project(id_project):
data_session.commit() data_session.commit()
current_project.name = form.name.data current_project.name = form.name.data
current_project.description = form.description.data current_project.description = form.description.data
current_project.is_template = form.is_template.data
data_session.commit() data_session.commit()
return redirect(f'/project/{current_project.id}') return redirect(f'/project/{current_project.id}')
if form.del_photo.data: if form.del_photo.data:
@ -391,6 +412,7 @@ def edit_project(id_project):
return redirect(f'/project/{current_project.id}/edit') return redirect(f'/project/{current_project.id}/edit')
form.name.data = current_project.name form.name.data = current_project.name
form.description.data = current_project.description form.description.data = current_project.description
form.is_template.data = current_project.is_template
return render_template('edit_project.html', title='Изменение проекта', form=form, list_users=list_users, return render_template('edit_project.html', title='Изменение проекта', form=form, list_users=list_users,
staff=staff, project=current_project) staff=staff, project=current_project)
else: else:
@ -403,7 +425,9 @@ def edit_project(id_project):
@app.route('/project/<int:id_project>', methods=['POST', 'GET']) @app.route('/project/<int:id_project>', methods=['POST', 'GET'])
def project(id_project): def project(id_project):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
current_project = data_session.query(Projects).filter(Projects.id == id_project).first() current_project = data_session.query(Projects).filter(Projects.id == id_project).first()
if current_project: if current_project:
@ -486,7 +510,9 @@ def recovery():
@app.route('/project/<int:id_project>/delete', methods=['GET', 'POST']) @app.route('/project/<int:id_project>/delete', methods=['GET', 'POST'])
def delete_project(id_project): def delete_project(id_project):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
project_del = data_session.query(Projects).filter(Projects.id == id_project).first() project_del = data_session.query(Projects).filter(Projects.id == id_project).first()
if project_del: if project_del:
@ -511,7 +537,9 @@ def delete_project(id_project):
@app.route('/user/<string:_login>', methods=['GET', 'POST']) @app.route('/user/<string:_login>', methods=['GET', 'POST'])
def user_view(_login): def user_view(_login):
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
user = data_session.query(User).filter(User.login == _login).first() user = data_session.query(User).filter(User.login == _login).first()
if user: if user:
@ -532,7 +560,9 @@ def user_view(_login):
@app.route('/projects/new', methods=['GET', 'POST']) @app.route('/projects/new', methods=['GET', 'POST'])
def new_project(): def new_project():
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
form = ProjectForm() form = ProjectForm()
data_session = db_session.create_session() data_session = db_session.create_session()
list_users = list( list_users = list(
@ -569,7 +599,9 @@ def new_project():
@app.route('/projects', methods=['GET', 'POST']) @app.route('/projects', methods=['GET', 'POST'])
def projects(): def projects():
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
find = False find = False
form = FindProjectForm() form = FindProjectForm()
data_session = db_session.create_session() data_session = db_session.create_session()
@ -597,7 +629,9 @@ def projects():
@app.route('/profile', methods=['GET', 'POST']) @app.route('/profile', methods=['GET', 'POST'])
def profile(): def profile():
if current_user.is_authenticated and not current_user.banned: if current_user.banned:
return redirect('/logout')
if current_user.is_authenticated:
data_session = db_session.create_session() data_session = db_session.create_session()
form = EditProfileForm( form = EditProfileForm(
CombinedMultiDict((request.files, request.form)), CombinedMultiDict((request.files, request.form)),

View File

@ -26,35 +26,6 @@ body {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
} }
.link_edit_block {
margin-left: 0.5vw;
background-color: #9E795A;
border: #9E795A;
width: 13vw;
height: 4.5vw;
color: #ffffff;
border-radius: 5vw;
vertical-align: middle;
font-size: 1.5vw;
}
.link_edit {
width: 13vw;
height: 4.5vw;
}
.link_edit:hover {
text-decoration: none;
color: #000000;
}
.link_edit_text {
width: 13vw;
height: 4.5vw;
text-align: center;
font-size: 1.5vw;
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
.link_back { .link_back {
background-color: #ffffff; background-color: #ffffff;
color: #000000; color: #000000;

View File

@ -309,7 +309,6 @@
background-color: #000000; background-color: #000000;
border: 2px solid #ffffff; border: 2px solid #ffffff;
border-radius: 3vw; border-radius: 3vw;
margin-left: 2vw;
} }
.quest_solve_link:hover { .quest_solve_link:hover {
text-decoration: none; text-decoration: none;
@ -328,14 +327,14 @@
#quest_solve_link_id { #quest_solve_link_id {
display: none; display: none;
} }
.link_back_block { .link_back_block, .link_edit_block {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex-direction: column; flex-direction: column;
flex-wrap: nowrap; flex-wrap: nowrap;
} }
.link_back { .link_back, .link_edit {
background-color: #ffffff; background-color: #ffffff;
color: #000000; color: #000000;
width: 15vw; width: 15vw;
@ -346,11 +345,14 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.link_back:hover { .link_edit {
width: 13vw;
}
.link_back:hover, .link_edit:hover {
text-decoration: none; text-decoration: none;
color: #000000; color: #000000;
} }
.link_back_text { .link_back_text, .link_edit_text {
font-size: 1.5vw; font-size: 1.5vw;
margin-top: 15px; margin-top: 15px;
display: flex; display: flex;
@ -415,4 +417,15 @@
} }
.button_text { .button_text {
font-size: 1.3vw; font-size: 1.3vw;
}
.quest_buttons_block {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 15vw;
margin-top: 3vw;
}
.link_edit_block {
margin-top: 1vw;
} }

View File

@ -7,13 +7,6 @@
<p class="link_back_text">К проекту</p> <p class="link_back_text">К проекту</p>
</a> </a>
</div> </div>
{% if task.creator == current_user.id or project.creator == current_user.id %}
<div class="link_edit_block">
<a class="link_edit" href="{{ task.id }}/edit">
<p class="link_edit_text">Редактировать</p>
</a>
</div>
{% endif %}
</div> </div>
<div class="name_block"> <div class="name_block">
<div class="title_block"> <div class="title_block">

View File

@ -46,6 +46,12 @@
</div> </div>
</div> </div>
<div class="buttons_form_block"> <div class="buttons_form_block">
<div class="box">
{{ form.is_template(class="is_template")}} {{form.is_template.label }}<br/>
{% for error in form.is_template.errors %}
<div class="alert alert-danger" role="alert">{{ error }}</div>
{% endfor %}
</div>
{% if 'none' in project.photo %} {% if 'none' in project.photo %}
<div class="form_data"> <div class="form_data">
<label class="form_label">{{ form.logo.label }}</label> <label class="form_label">{{ form.logo.label }}</label>

View File

@ -15,7 +15,7 @@
</a> </a>
</div> </div>
{% else %} {% else %}
<p style="width: 12vw;"> </p> <p style="width: 12vw;"></p>
{% endif %} {% endif %}
</div> </div>
<div class="brand_block"> <div class="brand_block">
@ -62,10 +62,11 @@
data-bs-target="#panelsStayOpen-collapse{{ quest.id }}" aria-expanded="true" data-bs-target="#panelsStayOpen-collapse{{ quest.id }}" aria-expanded="true"
aria-controls="panelsStayOpen-collapse{{ quest.id }}"> aria-controls="panelsStayOpen-collapse{{ quest.id }}">
<div class="quest_button_block_one"> <div class="quest_button_block_one">
<div class="quest_title_block"{% if project.is_template %}style="width:100%;!important"{% endif %}> <div class="quest_title_block" {% if project.is_template
%}style="width:100%;!important" {% endif %}>
<p class="quest_title">{{ quest.name }}</p> <p class="quest_title">{{ quest.name }}</p>
</div> </div>
{% if not project.is_template %} {% if not project.is_template %}
</div> </div>
{% if quest.overdue == 'yes' and quest.realized != 1 %} {% if quest.overdue == 'yes' and quest.realized != 1 %}
<div class="deadline_block alert alert-danger" role="alert"> <div class="deadline_block alert alert-danger" role="alert">
@ -103,11 +104,20 @@
<p class="quest_description_text">{{ quest.description }}</p> <p class="quest_description_text">{{ quest.description }}</p>
</div> </div>
</div> </div>
<div class="quest_buttons_block">
<div class="quest_solve_button"> <div class="quest_solve_button">
<a class="quest_solve_link" href="{{ project.id }}/quest/{{ quest.id }}"> <a class="quest_solve_link" href="{{ project.id }}/quest/{{ quest.id }}">
<p class="quest_solve_text">Решить</p> <p class="quest_solve_text">Решить</p>
</a> </a>
</div> </div>
{% if quest.creator == current_user.id or project.creator == current_user.id %}
<div class="link_edit_block">
<a class="link_edit" href="{{ project.id }}/quest/{{ quest.id }}/edit">
<p class="link_edit_text">Редактировать</p>
</a>
</div>
{% endif %}
</div>
</div> </div>
{% else %} {% else %}
<div class="quest_body"> <div class="quest_body">