generated from NJUPTAAA/NOJ_Extension_Babel_Template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Biblioteca.php
66 lines (57 loc) · 2.48 KB
/
Biblioteca.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
namespace App\Babel\Extension\codeforces;
use App\Babel\Biblioteca\BibliotecaBase;
use App\Models\Services\OJService;
use App\Models\Services\ProblemService;
use App\Models\Eloquent\ProblemDialect;
use Exception;
class Biblioteca extends BibliotecaBase
{
private $bibliotecaNamespace = 'CodeForces';
public function run($conf)
{
$pcode = $conf["pcode"];
$dialect = $conf["dialect"];
if (blank(OJService::oid('codeforces'))) {
throw new Exception("Online Judge Not Found");
}
$this->getFromBiblioteca($pcode, $dialect);
}
private function getFromBiblioteca($pcode, $dialect)
{
$pid = ProblemService::pid($pcode);
if (blank($pid)) {
throw new Exception("Problem Code Not Found");
}
$catalog = json_decode(file_get_contents("{$this->bibliotecaUrl}/{$this->bibliotecaNamespace}/catalog.min.json"), true);
if (!isset($catalog[$pcode]) || blank($catalog[$pcode])) {
throw new Exception("Problem Not Found on Biblioteca");
}
foreach (json_decode(file_get_contents("{$this->bibliotecaUrl}/{$this->bibliotecaNamespace}/$pcode.min.json"), true) as $language => $dialectInfo) {
if ($dialect != 'all' && $dialect != $language) {
continue;
}
$action = 'Updat';
$dialectInstance = ProblemDialect::where(['problem_id' => $pid, 'dialect_language' => $language, 'is_biblioteca' => true])->first();
if (blank($dialectInstance)) {
$dialectInstance = new ProblemDialect();
$action = 'Fetch';
}
$this->line("<fg=yellow>{$action}ing</> $language of $pcode");
$dialectInstance->problem_id = $pid;
$dialectInstance->dialect_name = "Biblioteca Translation for $language";
$dialectInstance->dialect_language = $language;
$dialectInstance->is_biblioteca = true;
foreach (['title', 'description', 'input', 'output', 'note'] as $fields) {
if (isset($dialectInfo[$fields]) && filled($dialectInfo[$fields])) {
$dialectInstance->$fields = $dialectInfo[$fields];
} else {
$dialectInstance->$fields = null;
}
}
$dialectInstance->copyright = "Biblioteca la Babel";
$dialectInstance->save();
$this->line("<fg=green>{$action}ed </> $language of $pcode");
}
}
}