Skip to content

Commit

Permalink
Merge branch 'Deanna198:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
GauravDhanraja authored Apr 28, 2024
2 parents 0cde17a + ba5966d commit 21a6b92
Show file tree
Hide file tree
Showing 21 changed files with 321 additions and 1,854 deletions.
154 changes: 118 additions & 36 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

import datetime
from datetime import datetime, timedelta
from google.cloud import storage
import os
import pyrebase, firebase_auth, firebase_admin
from firebase_admin import credentials, firestore, storage
Expand Down Expand Up @@ -56,32 +57,14 @@ def sign_out_route():
return 'Sign-out failed'


@app.route('/admin/home')
def admin_dashboard():
if 'user_id' in session:
user_details = get_users_data()
userData = {"name" : user_details["name"],}
return render_template("admin/home.html",userData = userData)
else:
return redirect(url_for('sign_in_route'))


@app.route("/admin/profile", methods = ["GET"])
def admin_profile_page():
if 'user_id' in session:
user_details = get_users_data()
userData = {"name" : user_details["name"],}
return render_template("admin/profile.html",userData = userData)


courses = [
{"title": "Discrete Mathematics and Transform Techniques", "thumbnail": "/static/images/dsc-mths.png"},
{"title": "Materials Chemistry for Computer System", "thumbnail": "/static/images/chem.avif"},
{"title": "Applied Digital Logic Design (ADLD)", "thumbnail": "/static/images/digital.jpg"},
{"title": "Introduction to C programming", "thumbnail": "/static/images/c.jpg"},
{"title": "Basic Electrical Engineering", "thumbnail": "/static/images/elec.jpg"},
{"title": "Technical English", "thumbnail": "/static/images/tech.jpg"},
{"title": "Constitution of India", "thumbnail": "/static/images/constituiton.webp"}
{"title": "Discrete Mathematics and Transform Techniques", "thumbnail": "/static/images/dsc-mths.png", "name": "MAT"},
{"title": "Materials Chemistry for Computer System", "thumbnail": "/static/images/chem.avif", "name": "CHE"},
{"title": "Applied Digital Logic Design (ADLD)", "thumbnail": "/static/images/digital.jpg", "name": "ADLD"},
{"title": "Introduction to C programming", "thumbnail": "/static/images/c.jpg", "name": "CPP"},
{"title": "Basic Electrical Engineering", "thumbnail": "/static/images/elec.jpg", "name": "BEE"},
{"title": "Technical English", "thumbnail": "/static/images/tech.jpg", "name": "ENG"},
{"title": "Constitution of India", "thumbnail": "/static/images/constituiton.webp", "name": "COI"}
]

@app.route('/student/home', methods=["GET", "POST"])
Expand All @@ -102,15 +85,53 @@ def student_profile_page():
return render_template("public/profile.html",userData = userData)


@app.route("/student/courses/<int:course_id>", methods=["GET"])
@app.route("/student/courses/<int:course_id>", methods = ["GET"])
def student_course(course_id):
if 'user_id' in session:
user_details = get_users_data()
userData = {"name" : user_details["name"],}
userData = {"name": user_details["name"]}

# Retrieve the specific course details based on the course ID
course = courses[course_id]
return render_template("public/courses.html", userData=userData, course=course)
course_notes = show_course_notes(course['name'])

return render_template("public/courses.html", userData=userData, course=course, course_notes=course_notes)

@app.route("/student/download_file/<course_name>/<filename>", methods = ['GET'])
def download_course_notes(course_name, filename):
if 'user_id' in session:
user_details = get_users_data()
userData = {"name": user_details["name"]}

course = next((c for c in courses if c['name'] == course_name), None)
if course:
blob = bucket.blob(f'subjects/{course_name}/public/{filename}')
if blob.exists():
expiration_time = datetime.utcnow() + timedelta(minutes=60)
download_url = blob.generate_signed_url(expiration=expiration_time)
return redirect(download_url)
else:
return "File not found", 404
return "Course not found", 404
else:
return "Unauthorized", 401

def show_course_notes(course_name):
user_uid = session.get('user_uid')
user_details = get_users_data()
course = next((c for c in courses if c['name'] == course_name), None)
if course:
upload_path = f"subjects/{course_name}/public"
blobs = list(bucket.list_blobs(prefix=f"subjects/{course_name}/public/"))
files = []
for blob in blobs:
file_data = {
'filename': blob.name.split('/')[-1],
'download_url': blob.public_url
}
files.append(file_data)
return files
else:
return []


@app.route('/userprof/<filename>')
Expand Down Expand Up @@ -237,15 +258,76 @@ def upload_file():
blob = bucket.blob(upload_path + '/' + filename)
blob.upload_from_file(uploaded_file)

return """
<script>
alert("File uploaded successfully!");
window.history.back();
</script>
""" + remove_file_input_script
return redirect(url_for("admin_dashboard"))
else:
return "User not found!", 404

@app.route('/admin/delete_file', methods = ['POST'])
def delete_file():
user_uid = session.get('user_uid')
user_details = get_users_data()
if user_details:
user_name = user_details["name"]
filename = request.form['filename']
blob_name = f"subjects/{user_name}/public/{filename}"
blob = bucket.blob(blob_name)
blob.delete()
return redirect(url_for("admin_dashboard"))

@app.route('/admin/download_file', methods=['POST'])
def download_file():
filename = request.form['filename']
user_uid = session.get('user_uid')
user_details = get_users_data()
if user_details:
user_name = user_details["name"]
blob_name = f"subjects/{user_name}/public/{filename}"
blob = bucket.blob(blob_name)
if blob.exists():
expiration_time = datetime.utcnow() + timedelta(minutes=60) # expires in 1 hour
signed_url = blob.generate_signed_url(expiration = expiration_time, method='GET')
return redirect(signed_url)
else:
return "File not found!", 404
else:
return "User not found!", 404

def show_uploaded_files():
user_uid = session.get('user_uid')
user_details = get_users_data()
if user_details:
user_name = user_details["name"]
upload_path = f"subjects/{user_name}/public"
blobs = list(bucket.list_blobs(prefix=f"subjects/{user_name}/public/"))
files = []
for blob in blobs:
file_data = {
'filename': blob.name.split('/')[-1],
'download_url': blob.public_url
}
files.append(file_data)
return files
else:
return []

@app.route('/admin/home')
def admin_dashboard():
if 'user_id' in session:
user_details = get_users_data()
userData = {"name" : user_details["name"],}
files = show_uploaded_files()
return render_template("admin/home.html", userData = userData, files = files)
else:
return redirect(url_for('sign_in_route'))


@app.route("/admin/profile", methods = ["GET"])
def admin_profile_page():
if 'user_id' in session:
user_details = get_users_data()
userData = {"name" : user_details["name"],}
return render_template("admin/profile.html",userData = userData)


if __name__ == "__main__":
app.secret_key = os.environ.get("FLASK_SECRET_KEY", "MeOWmEWOnIGGAa")
Expand Down
77 changes: 58 additions & 19 deletions static/css/admin_home.css
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,9 @@
}


.dashboard .box-container .announcement button{
justify-self: flex-start;
background-color: var(--orange);
color: var(--white);
margin-top: 1rem;
border-radius: 0.3rem;
height: auto;
width: 7rem;
padding: 0.5rem;
.dashboard .box-container .announcement .option-btn{
width: 12rem;
justify-items: center;
}


Expand All @@ -60,7 +54,6 @@
}

.dashboard .box-container .notes h3{
display: flex;
font-size: 1.8rem;
color: var(--black);
margin-bottom: .2rem;
Expand All @@ -71,15 +64,9 @@
margin-top: 1rem;
}

.dashboard .box-container .notes button{
justify-self: flex-start;
background-color: var(--orange);
color: var(--white);
margin-top: 1rem;
border-radius: 0.3rem;
height: auto;
width: 7rem;
padding: 0.5rem;
.dashboard .box-container .notes .option-btn{
width: 12rem;
justify-items: center;
}

.dashboard .box-container .notes input[type="file"] {
Expand All @@ -89,3 +76,55 @@
background-color: var(--white);
color: var(--black);
}

.dashboard .box-container .uploaded-files{
display: grid;
grid-template-rows: auto;
border-radius: .5rem;
width: 60%;
height: auto;
background-color: var(--white);
padding: 2rem;
}

.dashboard .box-container .uploaded-files h3{
font-size: 1.8rem;
color: var(--black);
margin-bottom: 1rem;
}

.dashboard .box-container .uploaded-files .file-item{
display: inline;
margin-top: 1rem;
}
.dashboard .box-container .uploaded-files .file-item p{
grid-template-columns: 1fr;
grid-template-rows: auto;
margin-bottom: 1rem;
}

.dashboard .box-container .uploaded-files p{
font-size: 1.5rem;
color: var(--black);
}

/* Style download link */
.dashboard .box-container .uploaded-files .file-item .btn {
color: var(--white);
padding: 0.5rem 1rem;
border-radius: 0.3rem;
cursor: pointer;
text-decoration: none;
width: 12rem;
}

.dashboard .box-container .uploaded-files .file-item .delete {
background-color: var(--red);
color: var(--white);
padding: 0.5rem 1rem;
border-radius: 0.3rem;
cursor: pointer;
margin-top: 1rem;
margin-bottom: 1.5rem;
}

57 changes: 57 additions & 0 deletions static/css/courses.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
.course-details .box-container{
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
}

.course-details .box-container .notes{
border-radius: .5rem;
width: auto;
height: auto;
background-color: var(--white);
padding: 2rem;
}

.course-details .box-container .notes h3{
font-size: 1.8rem;
color: var(--black);
margin-bottom: 1rem;
}

.course-details .box-container .notes .file-item{
display: grid;
grid-template-columns: 2fr 1fr;
padding-bottom: 1rem;
padding-top: 1rem;
}

.course-details .box-container .notes .file-item p{
font-size: 1.5rem;
color: var(--black);
align-self: center;
}

.course-details .notes .file-item a{
font-size: 1.5rem;
padding: 1rem;
margin-top: 0;
height: fit-content;
width: min-content;
justify-content: center;
}


.course-details .box-container .assignment{
border-radius: .5rem;
width: auto;
height: auto;
background-color: var(--white);
padding: 2rem;
}

.course-details .box-container .assignment h3{
font-size: 1.8rem;
color: var(--black);
margin-bottom: 1rem;
}

Loading

0 comments on commit 21a6b92

Please sign in to comment.