99use App \Entity \Submission ;
1010use App \Entity \Testcase ;
1111use App \Form \Type \SubmitProblemType ;
12+ use App \Form \Type \SubmitProblemPasteType ;
1213use App \Service \ConfigurationService ;
1314use App \Service \DOMJudgeService ;
1415use App \Service \SubmissionService ;
@@ -54,34 +55,111 @@ public function createAction(Request $request, ?Problem $problem = null): Respon
5455 if ($ problem !== null ) {
5556 $ data ['problem ' ] = $ problem ;
5657 }
57- $ form = $ this ->formFactory
58+ $ formUpload = $ this ->formFactory
5859 ->createBuilder (SubmitProblemType::class, $ data )
5960 ->setAction ($ this ->generateUrl ('team_submit ' ))
6061 ->getForm ();
6162
62- $ form ->handleRequest ($ request );
63+ $ formPaste = $ this ->formFactory
64+ ->createBuilder (SubmitProblemPasteType::class, $ data )
65+ ->setAction ($ this ->generateUrl ('team_submit ' ))
66+ ->getForm ();
6367
64- if ($ form ->isSubmitted () && $ form ->isValid ()) {
68+ $ formUpload ->handleRequest ($ request );
69+ $ formPaste ->handleRequest ($ request );
70+
71+ if ($ formUpload ->isSubmitted () && $ formUpload ->isValid ()) {
6572 if ($ contest === null ) {
6673 $ this ->addFlash ('danger ' , 'No active contest ' );
6774 } elseif (!$ this ->dj ->checkrole ('jury ' ) && !$ contest ->getFreezeData ()->started ()) {
6875 $ this ->addFlash ('danger ' , 'Contest has not yet started ' );
6976 } else {
7077 /** @var Problem $problem */
71- $ problem = $ form ->get ('problem ' )->getData ();
78+ $ problem = $ formUpload ->get ('problem ' )->getData ();
7279 /** @var Language $language */
73- $ language = $ form ->get ('language ' )->getData ();
80+ $ language = $ formUpload ->get ('language ' )->getData ();
7481 /** @var UploadedFile[] $files */
75- $ files = $ form ->get ('code ' )->getData ();
82+ $ files = $ formUpload ->get ('code ' )->getData ();
7683 if (!is_array ($ files )) {
7784 $ files = [$ files ];
7885 }
79- $ entryPoint = $ form ->get ('entry_point ' )->getData () ?: null ;
86+ $ entryPoint = $ formUpload ->get ('entry_point ' )->getData () ?: null ;
8087 $ submission = $ this ->submissionService ->submitSolution (
81- $ team , $ this ->dj ->getUser (), $ problem ->getProbid (), $ contest , $ language , $ files , 'team page ' , null ,
82- null , $ entryPoint , null , null , $ message
88+ $ team ,
89+ $ this ->dj ->getUser (),
90+ $ problem ->getProbid (),
91+ $ contest ,
92+ $ language ,
93+ $ files ,
94+ 'team page ' ,
95+ null ,
96+ null ,
97+ $ entryPoint ,
98+ null ,
99+ null ,
100+ $ message
101+ );
102+
103+ if ($ submission ) {
104+ $ this ->addFlash (
105+ 'success ' ,
106+ 'Submission done! Watch for the verdict in the list below. '
107+ );
108+ } else {
109+ $ this ->addFlash ('danger ' , $ message );
110+ }
111+ return $ this ->redirectToRoute ('team_index ' );
112+ }
113+ } elseif ($ formPaste ->isSubmitted () && $ formPaste ->isValid ()) {
114+ if ($ contest === null ) {
115+ $ this ->addFlash ('danger ' , 'No active contest ' );
116+ } elseif (!$ this ->dj ->checkrole ('jury ' ) && !$ contest ->getFreezeData ()->started ()) {
117+ $ this ->addFlash ('danger ' , 'Contest has not yet started ' );
118+ } else {
119+ $ problem = $ formPaste ->get ('problem ' )->getData ();
120+ $ language = $ formPaste ->get ('language ' )->getData ();
121+ $ codeContent = $ formPaste ->get ('code_content ' )->getData ();
122+ if ($ codeContent == null || empty (trim ($ codeContent ))) {
123+ $ this ->addFlash ('danger ' ,'No code content provided. ' );
124+ return $ this ->redirectToRoute ('team_index ' );
125+ }
126+ $ tempDir = sys_get_temp_dir ();
127+ $ tempFileName = sprintf (
128+ 'submission_%s_%s_%s.%s ' ,
129+ $ user ->getUsername (),
130+ $ problem ->getName (),
131+ date ('Y-m-d_H-i-s ' ),
132+ $ language ->getExtensions ()[0 ]
83133 );
134+ $ tempFileName = preg_replace ('/[^a-zA-Z0-9_.-]/ ' , '_ ' , $ tempFileName );
135+ $ tempFilePath = $ tempDir . DIRECTORY_SEPARATOR . $ tempFileName ;
136+ file_put_contents ($ tempFilePath , $ codeContent );
84137
138+ $ uploadedFile = new UploadedFile (
139+ $ tempFilePath ,
140+ $ tempFileName ,
141+ 'application/octet-stream ' ,
142+ null ,
143+ true
144+ );
145+
146+ $ files = [$ uploadedFile ];
147+ $ entryPoint = $ formPaste ->get ('entry_point ' )->getData () ?: null ;
148+ $ submission = $ this ->submissionService ->submitSolution (
149+ $ team ,
150+ $ this ->dj ->getUser (),
151+ $ problem ,
152+ $ contest ,
153+ $ language ,
154+ $ files ,
155+ 'team page ' ,
156+ null ,
157+ null ,
158+ $ entryPoint ,
159+ null ,
160+ null ,
161+ $ message
162+ );
85163 if ($ submission ) {
86164 $ this ->addFlash (
87165 'success ' ,
@@ -90,11 +168,17 @@ public function createAction(Request $request, ?Problem $problem = null): Respon
90168 } else {
91169 $ this ->addFlash ('danger ' , $ message );
92170 }
171+
93172 return $ this ->redirectToRoute ('team_index ' );
94173 }
95174 }
96175
97- $ data = ['form ' => $ form ->createView (), 'problem ' => $ problem ];
176+ $ data = [
177+ 'formupload ' => $ formUpload ->createView (),
178+ 'formpaste ' => $ formPaste ->createView (),
179+ 'problem ' => $ problem ,
180+ 'defaultSubmissionCodeMode ' => (bool ) $ this ->config ->get ('default_submission_code_mode ' ),
181+ ];
98182 $ data ['validFilenameRegex ' ] = SubmissionService::FILENAME_REGEX ;
99183
100184 if ($ request ->isXmlHttpRequest ()) {
0 commit comments