From 7de7a6072c7f5e585e7dac5b5406836167914664 Mon Sep 17 00:00:00 2001 From: pikachu0542 Date: Fri, 13 Mar 2026 13:20:59 -0400 Subject: [PATCH 1/3] Added frontend checks to verify required fields are filled --- .../javascript/modules/majorProjectForm.js | 28 +++++++++++++++---- .../stylesheets/pages/_major-project.scss | 7 +++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/frontend/javascript/modules/majorProjectForm.js b/frontend/javascript/modules/majorProjectForm.js index a19da72d..36250529 100644 --- a/frontend/javascript/modules/majorProjectForm.js +++ b/frontend/javascript/modules/majorProjectForm.js @@ -57,15 +57,33 @@ export default class MajorProjectForm { skills.push(tag.textContent); } + let projectName = this.form.querySelector('input[name=name]').value; + let projectTldr = this.form.querySelector('input[name=tldr]').value; + let projectTimeSpent = this.form.querySelector('textarea[name=time-commitment]').value; + let projectDescription = this.form.querySelector('textarea[name=description]').value; + let projectLinks = this.form.querySelector('textarea[name=links]').value; + + // For each field, if it is not empty, trim it. + if (projectName !== "") projectName = projectName.trim(); + if (projectTldr !== "") projectTldr = projectTldr.trim(); + if (projectTimeSpent !== "") projectTimeSpent = projectTimeSpent.trim(); + if (projectDescription !== "") projectDescription = projectDescription.trim(); + + if (!projectName || !projectTldr || !projectTimeSpent || !projectDescription || skills.length === 0) { + alert("Error: At least one required field is empty. \n\nProject Name, TLDR, Time Commitment, Description, and at least one skill are required."); + return; + } + let payload = { - projectName: this.form.querySelector('input[name=name]').value, - projectTldr: this.form.querySelector('input[name=tldr]').value, - projectTimeSpent: this.form.querySelector('textarea[name=time-commitment]').value, + projectName: projectName, + projectTldr: projectTldr, + projectTimeSpent: projectTimeSpent, projectSkills: skills, - projectDescription: this.form.querySelector('textarea[name=description]').value, - projectLinks: this.form.querySelector('textarea[name=links]').value + projectDescription: projectDescription, + projectLinks: projectLinks }; + console.log(payload) FetchUtil.postWithWarning(this.endpoint, payload, { diff --git a/frontend/stylesheets/pages/_major-project.scss b/frontend/stylesheets/pages/_major-project.scss index d9e70f24..1cb65709 100644 --- a/frontend/stylesheets/pages/_major-project.scss +++ b/frontend/stylesheets/pages/_major-project.scss @@ -132,4 +132,11 @@ .no-imgs { margin-left: 0.2em; +} + +label:has(+ input:required):after, +label:has(+ textarea:required):after, +label:has(+ div input[name="skill"]:required)::after { + content: ' *'; + color: red; } \ No newline at end of file From b5af0fd51bbd5890fac1383eca4c509340520e84 Mon Sep 17 00:00:00 2001 From: pikachu0542 Date: Fri, 13 Mar 2026 13:27:20 -0400 Subject: [PATCH 2/3] Added env var to set app to not try to slack ping for MP submission --- .../blueprints/major_project_submission.py | 16 ++++++++++------ config.env.py | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/conditional/blueprints/major_project_submission.py b/conditional/blueprints/major_project_submission.py index 0bebff28..a31e5606 100644 --- a/conditional/blueprints/major_project_submission.py +++ b/conditional/blueprints/major_project_submission.py @@ -165,12 +165,16 @@ def submit_major_project(user_dict=None): # Send the slack ping only after we know that the data was properly saved to the DB - send_slack_ping( - { - "text": f" *{get_member_name(user_id)}* ({user_id})" - f" submitted their major project, *{name}*!" - } - ) + if app.config['DEV_DISABLE_SLACK_PING']: + log.info("Slack ping skipped due to environment override") + else: + send_slack_ping( + { + "text": f" *{get_member_name(user_id)}* ({user_id})" + f" submitted their major project, *{name}*!" + } + ) + return jsonify({"success": True}), 200 diff --git a/config.env.py b/config.env.py index d1a39bb5..1142a2c8 100644 --- a/config.env.py +++ b/config.env.py @@ -15,6 +15,7 @@ IP = env.get("CONDITIONAL_IP", "0.0.0.0") PORT = env.get("CONDITIONAL_PORT", 6969) WEBHOOK_URL = env.get("CONDITIONAL_WEBHOOK_URL", "INSERT URL HERE") +DEV_DISABLE_SLACK_PING = env.get("DEV_DISABLE_SLACK_PING", "false") == "true" PROFILING = env.get("CONDITIONAL_PROFILING", "false").lower() == "true" # DB Info From 7cc4f84f23e18c43121650282fd7d96799a7ec42 Mon Sep 17 00:00:00 2001 From: pikachu0542 Date: Fri, 13 Mar 2026 13:54:26 -0400 Subject: [PATCH 3/3] make lint happy --- conditional/blueprints/major_project_submission.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conditional/blueprints/major_project_submission.py b/conditional/blueprints/major_project_submission.py index a31e5606..ae89c073 100644 --- a/conditional/blueprints/major_project_submission.py +++ b/conditional/blueprints/major_project_submission.py @@ -174,7 +174,7 @@ def submit_major_project(user_dict=None): f" submitted their major project, *{name}*!" } ) - + return jsonify({"success": True}), 200