diff --git a/app/controllers/assignments_controller.rb b/app/controllers/assignments_controller.rb index 84d99f7c0..0b60a12a3 100644 --- a/app/controllers/assignments_controller.rb +++ b/app/controllers/assignments_controller.rb @@ -213,7 +213,14 @@ def varying_rubrics_by_round? private # Only allow a list of trusted parameters through. def assignment_params - params.require(:assignment).permit(:title, :description) + # Handle both wrapped and unwrapped params + permitted_params = if params[:assignment].present? + params.require(:assignment) + else + params + end + + permitted_params.permit! end # Helper method to determine staggered_and_no_topic for the assignment @@ -226,4 +233,4 @@ def get_staggered_and_no_topic(assignment) assignment.staggered_and_no_topic?(topic_id) end -end \ No newline at end of file +end diff --git a/db/migrate/20251202090000_add_frontend_fields_to_assignments.rb b/db/migrate/20251202090000_add_frontend_fields_to_assignments.rb new file mode 100644 index 000000000..6d912fa41 --- /dev/null +++ b/db/migrate/20251202090000_add_frontend_fields_to_assignments.rb @@ -0,0 +1,59 @@ +class AddFrontendFieldsToAssignments < ActiveRecord::Migration[8.0] + def change + change_table :assignments, bulk: true do |t| + # Base / flags + t.boolean :show_template_review, default: false, null: false + + # Team-related + t.boolean :show_teammate_review, default: false, null: false + t.boolean :is_pair_programming, default: false, null: false + t.boolean :has_mentors, default: false, null: false + t.boolean :auto_assign_mentors, default: false, null: false + + # Review-related + t.integer :maximum_number_of_reviews_per_submission + t.string :review_strategy + t.boolean :review_rubric_varies_by_round, default: false, null: false + t.boolean :review_rubric_varies_by_topic, default: false, null: false + t.boolean :review_rubric_varies_by_role, default: false, null: false + t.boolean :has_max_review_limit, default: false, null: false + t.integer :set_allowed_number_of_reviews_per_reviewer + t.integer :set_required_number_of_reviews_per_reviewer + t.boolean :is_review_anonymous, default: false, null: false + t.boolean :is_review_done_by_teams, default: false, null: false + t.boolean :allow_self_reviews, default: false, null: false + t.boolean :reviews_visible_to_other_reviewers, default: false, null: false + t.integer :number_of_review_rounds + t.boolean :has_quizzes, default: false, null: false + t.boolean :calibration_for_training, default: false, null: false + + # Deadline flags + t.boolean :use_signup_deadline, default: false, null: false + t.boolean :use_drop_topic_deadline, default: false, null: false + t.boolean :use_team_formation_deadline, default: false, null: false + t.boolean :staggered_deadline_assignment, default: false, null: false + + # Arrays / JSON fields + t.json :weights + t.json :notification_limits + t.json :use_date_updater + t.json :submission_allowed + t.json :review_allowed + t.json :teammate_allowed + t.json :metareview_allowed + t.json :reminder + + # Tag prompts / availability and topic-related flags + t.boolean :allow_tag_prompts, default: false, null: false + t.boolean :available_to_students, default: false, null: false + t.boolean :allow_topic_suggestion_from_students, default: false, null: false + t.boolean :enable_bidding_for_topics, default: false, null: false + t.boolean :enable_bidding_for_reviews, default: false, null: false + t.boolean :enable_authors_to_review_other_topics, default: false, null: false + t.boolean :allow_reviewer_to_choose_topic_to_review, default: false, null: false + t.boolean :allow_participants_to_create_bookmarks, default: false, null: false + end + end +end + + diff --git a/db/migrate/20251202100000_add_remaining_fields_to_assignments.rb b/db/migrate/20251202100000_add_remaining_fields_to_assignments.rb new file mode 100644 index 000000000..a62f78b71 --- /dev/null +++ b/db/migrate/20251202100000_add_remaining_fields_to_assignments.rb @@ -0,0 +1,25 @@ +class AddRemainingFieldsToAssignments < ActiveRecord::Migration[8.0] + def change + change_table :assignments, bulk: true do |t| + # Team/mentors + t.boolean :auto_assign_mentors, default: false, null: false + + # Review/quizzes + t.boolean :has_quizzes, default: false, null: false + t.boolean :calibration_for_training, default: false, null: false + + # Deadline flag + t.boolean :staggered_deadline_assignment, default: false, null: false + + # Tag/visibility/topic flags + t.boolean :available_to_students, default: false, null: false + t.boolean :allow_topic_suggestion_from_students, default: false, null: false + t.boolean :enable_bidding_for_topics, default: false, null: false + t.boolean :enable_bidding_for_reviews, default: false, null: false + t.boolean :enable_authors_to_review_other_topics, default: false, null: false + t.boolean :allow_reviewer_to_choose_topic_to_review, default: false, null: false + t.boolean :allow_participants_to_create_bookmarks, default: false, null: false + end + end +end + diff --git a/db/migrate/20251202103000_add_apply_late_policy_to_assignments.rb b/db/migrate/20251202103000_add_apply_late_policy_to_assignments.rb new file mode 100644 index 000000000..222f66494 --- /dev/null +++ b/db/migrate/20251202103000_add_apply_late_policy_to_assignments.rb @@ -0,0 +1,7 @@ +class AddApplyLatePolicyToAssignments < ActiveRecord::Migration[8.0] + def change + add_column :assignments, :apply_late_policy, :boolean, default: false, null: false + end +end + + diff --git a/db/schema.rb b/db/schema.rb index 462029322..a73067c50 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2025_04_27_014225) do +ActiveRecord::Schema[8.0].define(version: 2025_12_02_103000) do create_table "account_requests", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "username" t.string "full_name" @@ -102,6 +102,47 @@ t.boolean "enable_pair_programming", default: false t.boolean "has_teams", default: false t.boolean "has_topics", default: false + t.boolean "show_template_review", default: false, null: false + t.boolean "show_teammate_review", default: false, null: false + t.boolean "is_pair_programming", default: false, null: false + t.boolean "has_mentors", default: false, null: false + t.integer "maximum_number_of_reviews_per_submission" + t.string "review_strategy" + t.boolean "review_rubric_varies_by_round", default: false, null: false + t.boolean "review_rubric_varies_by_topic", default: false, null: false + t.boolean "review_rubric_varies_by_role", default: false, null: false + t.boolean "has_max_review_limit", default: false, null: false + t.integer "set_allowed_number_of_reviews_per_reviewer" + t.integer "set_required_number_of_reviews_per_reviewer" + t.boolean "is_review_anonymous", default: false, null: false + t.boolean "is_review_done_by_teams", default: false, null: false + t.boolean "allow_self_reviews", default: false, null: false + t.boolean "reviews_visible_to_other_reviewers", default: false, null: false + t.integer "number_of_review_rounds" + t.boolean "use_signup_deadline", default: false, null: false + t.boolean "use_drop_topic_deadline", default: false, null: false + t.boolean "use_team_formation_deadline", default: false, null: false + t.json "weights" + t.json "notification_limits" + t.json "use_date_updater" + t.json "submission_allowed" + t.json "review_allowed" + t.json "teammate_allowed" + t.json "metareview_allowed" + t.json "reminder" + t.boolean "allow_tag_prompts", default: false, null: false + t.boolean "auto_assign_mentors", default: false, null: false + t.boolean "has_quizzes", default: false, null: false + t.boolean "calibration_for_training", default: false, null: false + t.boolean "staggered_deadline_assignment", default: false, null: false + t.boolean "available_to_students", default: false, null: false + t.boolean "allow_topic_suggestion_from_students", default: false, null: false + t.boolean "enable_bidding_for_topics", default: false, null: false + t.boolean "enable_bidding_for_reviews", default: false, null: false + t.boolean "enable_authors_to_review_other_topics", default: false, null: false + t.boolean "allow_reviewer_to_choose_topic_to_review", default: false, null: false + t.boolean "allow_participants_to_create_bookmarks", default: false, null: false + t.boolean "apply_late_policy", default: false, null: false t.index ["course_id"], name: "index_assignments_on_course_id" t.index ["instructor_id"], name: "index_assignments_on_instructor_id" end