@@ -200,14 +200,15 @@ public function importContestData(mixed $data, ?string &$errorMessage = null, st
200
200
return false ;
201
201
}
202
202
203
- $ contest = new Contest ();
203
+ $ newShortNameAndExternalId = preg_replace (
204
+ $ invalid_regex ,
205
+ '_ ' ,
206
+ $ data ['short_name ' ] ?? $ data ['shortname ' ] ?? $ data ['short-name ' ] ?? $ data ['id ' ]
207
+ );
208
+ $ contest = $ this ->em ->getRepository (Contest::class)->findOneBy (['externalid ' => $ newShortNameAndExternalId ]) ?: new Contest ();
204
209
$ contest
205
210
->setName ($ data ['name ' ] ?? $ data ['formal_name ' ] )
206
- ->setShortname (preg_replace (
207
- $ invalid_regex ,
208
- '_ ' ,
209
- $ data ['short_name ' ] ?? $ data ['shortname ' ] ?? $ data ['short-name ' ] ?? $ data ['id ' ]
210
- ))
211
+ ->setShortname ($ newShortNameAndExternalId )
211
212
->setExternalid ($ contest ->getShortname ())
212
213
->setWarningMessage ($ data ['warning_message ' ] ?? $ data ['warning-message ' ] ?? null )
213
214
->setStarttimeString (date_format ($ startTime , 'Y-m-d H:i:s e ' ))
@@ -321,18 +322,19 @@ public function importProblemsData(Contest $contest, array $problems, array &$id
321
322
foreach ($ problems as $ problemData ) {
322
323
// Deal with obsolete attribute names. Also for name fall back to ID if it is not specified.
323
324
$ problemName = $ problemData ['name ' ] ?? $ problemData ['short-name ' ] ?? $ problemData ['id ' ] ?? null ;
325
+ $ problemExternal = $ problemData ['id ' ] ?? $ problemData ['short-name ' ] ?? $ problemLabel ?? null ;
324
326
$ problemLabel = $ problemData ['label ' ] ?? $ problemData ['letter ' ] ?? null ;
325
327
326
- $ problem = new Problem ();
328
+ $ problem = $ this -> em -> getRepository (Problem::class)-> findOneBy ([ ' externalid ' => $ problemName ]) ?: new Problem ();
327
329
$ problem
328
330
->setName ($ problemName )
329
331
->setTimelimit ($ problemData ['time_limit ' ] ?? 10 )
330
- ->setExternalid ($ problemData [ ' id ' ] ?? $ problemData [ ' short-name ' ] ?? $ problemLabel ?? null );
332
+ ->setExternalid ($ problemExternal );
331
333
332
334
$ this ->em ->persist ($ problem );
333
335
$ this ->em ->flush ();
334
336
335
- $ contestProblem = new ContestProblem ();
337
+ $ contestProblem = $ this -> em -> getRepository (ContestProblem::class)-> findOneBy ([ ' shortname ' => $ problemLabel , ' problem ' => $ problem , ' contest ' => $ contest ]) ?: new ContestProblem ();
336
338
$ contestProblem
337
339
->setShortname ($ problemLabel )
338
340
->setColor ($ problemData ['rgb ' ] ?? $ problemData ['color ' ] ?? null )
0 commit comments