X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=gruntmaster-problem;h=5d18b2b7f22223c63f26ec42c70f5ff9ae1398ad;hb=625a7bd077ef2781d055a77bffa19dd9d6c0d1f2;hp=724a17eace3704e8d108c0b46c0b0361278e464f;hpb=756368d098d3fac404f5770fe17b3a4ab5721629;p=gruntmaster-data.git diff --git a/gruntmaster-problem b/gruntmaster-problem index 724a17e..5d18b2b 100755 --- a/gruntmaster-problem +++ b/gruntmaster-problem @@ -9,9 +9,17 @@ use JSON qw/encode_json/; use Term::ANSIColor qw/RED RESET/; use Getopt::Long qw/:config require_order/; +use constant LEVEL_VALUES => { + beginner => 100, + easy => 250, + medium => 500, + hard => 1000, +}; + ################################################## -my $db = Gruntmaster::Data->connect('dbi:Pg:'); +my $dsn = $ENV{GRUNTMASTER_DSN} // 'dbi:Pg:'; +my $db = Gruntmaster::Data->connect($dsn); sub cmd_help{ exec perldoc => $0 @@ -23,8 +31,10 @@ sub cmd_add{ my $private = prompt('Private?', '-yn') eq 'y'; my $contest = prompt 'Contest'; my $author = prompt 'Problem author (full name)'; + my $writer = prompt 'Problem statement writer (full name)'; my $owner = prompt 'Problem owner (username)'; my $level = prompt 'Problem level', -menu => "beginner\neasy\nmedium\nhard"; + my $value = LEVEL_VALUES->{$level}; my $statement = read_file prompt 'File with problem statement', -complete => 'filenames'; my $generator = prompt 'Generator', -menu => "File\nRun\nUndef"; my $runner = prompt 'Runner', -menu => "File\nVerifier\nInteractive"; @@ -53,54 +63,71 @@ sub cmd_add{ $verformat = prompt "[Runner::$runner] Verifier format", -menu => [qw/C CPP MONO JAVA PASCAL PERL PYTHON/]; } - $db->problems->create ({ + my %options = ( id => $id, name => $name, level => $level, + value => $value, statement => $statement, author => $author, + writer => $writer, owner => $owner, generator => $generator, runner => $runner, judge => $judge, testcnt => $testcnt, - (private => $private)x!! $private, - (timeout => $timeout)x!! $timeout, - (olimit => $olimit)x!! $olimit, - (tests => encode_json \@tests)x!! @tests, - (gensource => $gensource)x!! $gensource, - (genformat => $genformat)x!! $genformat, - (versource => $versource)x!! $versource, - (verformat => $verformat)x!! $verformat, - }); + ); + $options{private} = $private if $private; + $options{timeout} = $timeout if $timeout; + $options{olimit} = $olimit if $olimit; + $options{tests} = encode_json \@tests if @tests; + $options{gensource} = $gensource if $gensource; + $options{genformat} = $genformat if $genformat; + $options{versource} = $versource if $versource; + $options{verformat} = $verformat if $verformat; + $db->problems->create (\%options); $db->contest_problems->create({problem => $id, contest => $contest}) if $contest; - #PUBLISH genpage => $contest ? "ct/$contest/pb/index.html" : 'pb/index.html'; - #PUBLISH genpage => $contest ? "ct/$contest/pb/$id.html" : "pb/$id.html"; } sub cmd_set{ my $file; GetOptions ( 'file!' => \$file ); - my ($id, %values) = @ARGV; + my ($id, %values) = @_; %values = map { $_ => scalar read_file $values{$_} } keys %values if $file; - $db->problem($id)->update(\%values); - #PUBLISH genpage => 'pb/index.html'; - #PUBLISH genpage => "pb/$id.html"; + $db->problem($id)->update(\%values) +} + +sub cmd_get{ + my ($id, $col) = @_; + say $db->problem($id)->get_column($col) } sub cmd_list{ local $, = "\n"; - say map {$_->id} $db->problems->all; + say map {$_->id} $db->problems->all } sub cmd_rm{ - $db->problem(shift)->delete; - #PUBLISH genpage => $contest ? "ct/$contest/pb/index.html" : 'pb/index.html'; + $db->problem(shift)->delete } sub cmd_show{ - local $_ = shift or goto &cmd_list; + my %columns = $db->problem(shift)->get_columns; + print <. - =over =item B @@ -155,6 +181,10 @@ Removes the problem with id I. Sets the I configuration option of problem I to I. +=item B I I + +Get the value of the I configuration option of problem I + =item B --file I I I Sets the I configuration option of problem I to the contents of the file I. @@ -169,10 +199,9 @@ Marius Gavrilescu Emarius@ieval.roE Copyright (C) 2014 by Marius Gavrilescu -This library is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.18.1 or, +at your option, any later version of Perl 5 you may have available. =cut