Added Edit Feature
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
venv/
|
||||
__pycache__
|
||||
__pycache__/
|
||||
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
venv/
|
||||
__pycache__/
|
||||
@@ -6,8 +6,8 @@ services:
|
||||
- ./data/users:/app/users
|
||||
- ./data/users_courses:/app/users_courses
|
||||
ports:
|
||||
- 1600:1600
|
||||
|
||||
- 127.0.0.1:1600:1600
|
||||
mem_limit: 128M
|
||||
networks:
|
||||
default:
|
||||
name: unit-selector
|
||||
25
main.py
25
main.py
@@ -153,3 +153,28 @@ def delete_course(course_id):
|
||||
save_user_courses(session['username'], updated_courses)
|
||||
return redirect(url_for('index'))
|
||||
|
||||
@app.route('/edit/<course_id>', methods=['GET', 'POST'])
|
||||
def edit_course(course_id):
|
||||
if 'user_id' not in session:
|
||||
return redirect(url_for('login'))
|
||||
|
||||
courses = get_user_courses(session['username'])
|
||||
course = next((c for c in courses if c['id'] == course_id), None)
|
||||
|
||||
if not course:
|
||||
flash('درس مورد نظر یافت نشد', 'error')
|
||||
return redirect(url_for('index'))
|
||||
|
||||
if request.method == 'POST':
|
||||
course['name'] = request.form.get('name')
|
||||
course['code'] = request.form.get('code')
|
||||
course['group'] = request.form.get('group')
|
||||
course['day'] = request.form.get('day')
|
||||
course['prof'] = request.form.get('prof')
|
||||
course['priority'] = request.form.get('priority')
|
||||
save_user_courses(session['username'], courses)
|
||||
flash('درس با موفقیت ویرایش شد', 'success')
|
||||
return redirect(url_for('index'))
|
||||
|
||||
return render_template_string(TEMPLATE, page='edit_course', course=course, username=session['username'])
|
||||
|
||||
|
||||
68
ui/main.html
68
ui/main.html
@@ -435,6 +435,69 @@ footer a:hover { text-decoration: underline; }
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% elif page == 'edit_course' %}
|
||||
<!-- EDIT COURSE PAGE -->
|
||||
<div class="user-bar">
|
||||
<span>کاربر: <span class="username">{{ username }}</span></span>
|
||||
<a href="{{ url_for('logout') }}" class="btn-logout"><i class="fa-solid fa-sign-out-alt"></i> خروج</a>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
{% with messages = get_flashed_messages(with_categories=true) %}
|
||||
{% if messages %}
|
||||
{% for category, message in messages %}
|
||||
<div class="alert alert-{{ category }}">{{ message }}</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
|
||||
<div class="card-form">
|
||||
<h3>ویرایش درس</h3>
|
||||
<form action="{{ url_for('edit_course', course_id=course.id) }}" method="POST">
|
||||
<div class="form-grid">
|
||||
<div>
|
||||
<label>نام درس</label>
|
||||
<input type="text" name="name" value="{{ course.name }}" required>
|
||||
</div>
|
||||
<div>
|
||||
<label>اولویت درس</label>
|
||||
<select name="priority">
|
||||
<option value="high" {% if course.priority == 'high' %}selected{% endif %}>حیاتی</option>
|
||||
<option value="normal" {% if course.priority == 'normal' %}selected{% endif %}>عادی</option>
|
||||
<option value="low" {% if course.priority == 'low' %}selected{% endif %}>ذخیره</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-grid">
|
||||
<div>
|
||||
<label>کد درس</label>
|
||||
<input type="text" name="code" value="{{ course.code }}" style="direction:ltr;text-align:left" required>
|
||||
</div>
|
||||
<div>
|
||||
<label>کد ارائه</label>
|
||||
<input type="text" name="group" value="{{ course.group }}" style="direction:ltr;text-align:left" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-grid">
|
||||
<div>
|
||||
<label>نام استاد</label>
|
||||
<input type="text" name="prof" value="{{ course.prof }}">
|
||||
</div>
|
||||
<div>
|
||||
<label>روز و ساعت</label>
|
||||
<input type="text" name="day" value="{{ course.day }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;gap:1rem;margin-top:1.5rem;">
|
||||
<button type="submit" class="btn-submit" style="flex:1;">ذخیره تغییرات</button>
|
||||
<a href="{{ url_for('index') }}" class="btn-submit" style="flex:1;text-align:center;text-decoration:none;background:var(--text-muted);">انصراف</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<!-- MAIN APP PAGE -->
|
||||
<div class="user-bar">
|
||||
@@ -501,10 +564,15 @@ footer a:hover { text-decoration: underline; }
|
||||
<div class="course-card priority-{{ course.priority }}">
|
||||
<div class="card-header">
|
||||
<span class="course-name">{{ course.name }}</span>
|
||||
<div style="display:flex;gap:0.5rem;">
|
||||
<a href="{{ url_for('edit_course', course_id=course.id) }}" class="btn-delete" style="color: var(--primary);">
|
||||
<i class="fa-solid fa-pen"></i> ویرایش
|
||||
</a>
|
||||
<a href="{{ url_for('delete_course', course_id=course.id) }}" class="btn-delete" onclick="return confirm('آیا مطمئن هستید؟');">
|
||||
<i class="fa-solid fa-trash"></i> حذف
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="data-grid">
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user