Overview
Submissions are student code submissions that get automatically judged against test cases. Each submission is tracked, graded, and can be selected as final.Submission Model
The Submission model tracks all submission data:Submission.php:26-27
Key Fields
Identification
user_id: Who submittedassignment_id: Assignment (0 for practice)problem_id: Which problemlanguage_id: Programming language used
Grading
pre_score: Raw score (0-10000, where 10000 = 100%)coefficient: Late penalty multiplier (0-100)status: PENDING, SCORE, ERROR, etc.judgement: Detailed test case results (JSON)
Selection
is_final: Whether this is the final submissionfile_name: Stored filenametime: Execution time
Submission Process
Creating a Submission
Route:GET /submissions/create/assignment/{assignment}/problem/{problem}
submission_controller.php:131-152
Submission Guards
submission_controller.php:111-129
File Upload
Submission Storage
Route:POST /submissions/store
- File Upload
- Code Editor
- Upload Handler
submission_controller.php:170-182
File Organization
Submission.php:51-59
Language Selection
Each problem supports specific programming languages with custom limits:submission_controller.php:348-350
Code Templates
Route:POST /submissions/get_template
Template Structure
Templates provide:- Banned keywords: Prevent use of certain functions
- Before code: Pre-written setup code
- After code: Post-insertion code
- Full template: Complete starter code
submission_controller.php:287-323
Viewing Results
View Submission Code
Route:POST /submissions/view_code
submission_controller.php:398-435
View Submission Status
Route:POST /submissions/view_status
submission_controller.php:451-467
Access Control
submission_controller.php:36-43
Final Submission Selection
Selecting Final Submission
Route:POST /submissions/select
Students can choose which submission counts for their grade:
submission_controller.php:382-397
Auto-select Best Submission
Assignments can automatically reset final submissions to best scores:Assignment.php:252-314
Rejudging Submissions
Rejudge Single Submission
Route:POST /submissions/rejudge
submission_controller.php:263-285
Rejudge All Submissions
Route:POST /submissions/rejudge_all_problems_assignment
submission_controller.php:232-261
Submission Listing
Route:GET /submissions/assignment/{assignment_id}/user/{user_id}/problem/{problem_id}/view/{choose}
submission_controller.php:52-109
Submission Routes
All Submission Routes
All Submission Routes
| Method | Route | Action | Permission |
|---|---|---|---|
| GET | /submissions/assignment/{aid}/user/{uid}/problem/{pid}/view/{choose} | List submissions | owner, instructor+ |
| GET | /submissions/create/assignment/{aid}/problem/{pid}/{oldsub?} | Create form | participant |
| POST | /submissions/store | Submit code | participant |
| POST | /submissions/get_template | Get code template | participant |
| POST | /submissions/view_code | View submitted code | owner, instructor+ |
| POST | /submissions/view_status | View judging status | owner, instructor+ |
| POST | /submissions/select | Select as final | owner |
| POST | /submissions/rejudge | Rejudge one | instructor+ |
| POST | /submissions/rejudge_all_problems_assignment | Rejudge many | instructor+ |
| GET | /rejudge/{assignment} | Rejudge interface | head_instructor, admin |
Best Practices
Submission
- Test code locally first
- Read problem requirements carefully
- Check language is allowed
- Verify file size limits
Code Quality
- Follow template structure
- Avoid banned keywords
- Handle edge cases
- Optimize for time/memory limits
Final Selection
- Review all submissions before selecting
- Consider late penalties
- Verify test results
- Select before deadline if possible
Rejudging
- Use sparingly to avoid queue overload
- Rejudge after fixing test cases
- Notify students of rejudge
- Monitor rejudge progress

