| … | |
… | |
| 826 | |
826 | |
| 827 | # return a string form of the old problem IDs in the new order (not used by caller, incidentally) |
827 | # return a string form of the old problem IDs in the new order (not used by caller, incidentally) |
| 828 | return join(', ', map {$_->[0]} @sortme); |
828 | return join(', ', map {$_->[0]} @sortme); |
| 829 | } |
829 | } |
| 830 | |
830 | |
| 831 | # swap index given with next bigger index |
|
|
| 832 | # leftover from when we had up/down buttons |
|
|
| 833 | # maybe we will bring them back |
|
|
| 834 | |
|
|
| 835 | #sub moveme { |
|
|
| 836 | # my $index = shift; |
|
|
| 837 | # my $db = shift; |
|
|
| 838 | # my $setID = shift; |
|
|
| 839 | # my (@problemIDList) = @_; |
|
|
| 840 | # my ($prob1, $prob2, $prob); |
|
|
| 841 | # |
|
|
| 842 | # foreach my $problemID (@problemIDList) { |
|
|
| 843 | # my $problemRecord = $db->getGlobalProblem($setID, $problemID); # checked |
|
|
| 844 | # die "global $problemID for set $setID not found." unless $problemRecord; |
|
|
| 845 | # if ($problemRecord->problem_id == $index) { |
|
|
| 846 | # $prob1 = $problemRecord; |
|
|
| 847 | # } elsif ($problemRecord->problem_id == $index + 1) { |
|
|
| 848 | # $prob2 = $problemRecord; |
|
|
| 849 | # } |
|
|
| 850 | # } |
|
|
| 851 | # if (not defined $prob1 or not defined $prob2) { |
|
|
| 852 | # die "cannot find problem $index or " . ($index + 1); |
|
|
| 853 | # } |
|
|
| 854 | # |
|
|
| 855 | # $prob1->problem_id($index + 1); |
|
|
| 856 | # $prob2->problem_id($index); |
|
|
| 857 | # $db->putGlobalProblem($prob1); |
|
|
| 858 | # $db->putGlobalProblem($prob2); |
|
|
| 859 | # |
|
|
| 860 | # my @setUsers = $db->listSetUsers($setID); |
|
|
| 861 | # |
|
|
| 862 | # my $user; |
|
|
| 863 | # foreach $user (@setUsers) { |
|
|
| 864 | # $prob1 = $db->getUserProblem($user, $setID, $index); #checked |
|
|
| 865 | # die " problem $index for set $setID and effective user $user not found" |
|
|
| 866 | # unless $prob1; |
|
|
| 867 | # $prob2 = $db->getUserProblem($user, $setID, $index+1); #checked |
|
|
| 868 | # die " problem $index for set $setID and effective user $user not found" |
|
|
| 869 | # unless $prob2; |
|
|
| 870 | # $prob1->problem_id($index+1); |
|
|
| 871 | # $prob2->problem_id($index); |
|
|
| 872 | # $db->putUserProblem($prob1); |
|
|
| 873 | # $db->putUserProblem($prob2); |
|
|
| 874 | # } |
|
|
| 875 | #} |
|
|
| 876 | |
831 | |
| 877 | # primarily saves any changes into the correct set or problem records (global vs user) |
832 | # primarily saves any changes into the correct set or problem records (global vs user) |
| 878 | # also deals with deleting or rearranging problems |
833 | # also deals with deleting or rearranging problems |
| 879 | sub initialize { |
834 | sub initialize { |
| 880 | my ($self) = @_; |
835 | my ($self) = @_; |
| … | |
… | |
| 1481 | } |
1436 | } |
| 1482 | } |
1437 | } |
| 1483 | |
1438 | |
| 1484 | # Sets the specified header to "" so that the default file will get used. |
1439 | # Sets the specified header to "" so that the default file will get used. |
| 1485 | foreach my $header ($r->param('defaultHeader')) { |
1440 | foreach my $header ($r->param('defaultHeader')) { |
| 1486 | $setRecord->$header(""); |
1441 | $setRecord->$header("defaultHeader"); |
| 1487 | } |
1442 | } |
| 1488 | } |
1443 | } |
| 1489 | |
1444 | |
| 1490 | # Leftover code from when there were up/down buttons |
1445 | # Leftover code from when there were up/down buttons |
| 1491 | |
1446 | |
| … | |
… | |
| 1571 | my $r = $self->r; |
1526 | my $r = $self->r; |
| 1572 | my $ce = $r->ce; |
1527 | my $ce = $r->ce; |
| 1573 | |
1528 | |
| 1574 | return "No source file specified" unless $file; |
1529 | return "No source file specified" unless $file; |
| 1575 | return "Problem source is drawn from a grouping set" if $file =~ /^group/; |
1530 | return "Problem source is drawn from a grouping set" if $file =~ /^group/; |
|
|
1531 | if ( $file eq "defaultHeader" ) { |
|
|
1532 | $file = $ce->{webworkFiles}{screenSnippets}{setHeader}; |
|
|
1533 | } else { |
| 1576 | # $file = $ce->{courseDirs}->{templates} . '/' . $file unless $file =~ m|^/|; # bug: 1725 allows access to all files e.g. /etc/passwd |
1534 | # $file = $ce->{courseDirs}->{templates} . '/' . $file unless $file =~ m|^/|; # bug: 1725 allows access to all files e.g. /etc/passwd |
| 1577 | $file = $ce->{courseDirs}->{templates} . '/' . $file ; # only files in template directory can be accessed |
1535 | $file = $ce->{courseDirs}->{templates} . '/' . $file ; # only files in template directory can be accessed |
| 1578 | |
1536 | } |
|
|
1537 | |
| 1579 | my $text = "This source file "; |
1538 | my $text = "This source file "; |
| 1580 | my $fileError; |
1539 | my $fileError; |
| 1581 | return "" if -e $file && -f $file && -r $file; |
1540 | return "" if -e $file && -f $file && -r $file; |
| 1582 | return $text . "is not readable!" if -e $file && -f $file; |
1541 | return $text . "is not readable!" if -e $file && -f $file; |
| 1583 | return $text . "is a directory!" if -d $file; |
1542 | return $text . "is a directory!" if -d $file; |
| … | |
… | |
| 1917 | print CGI::Tr({}, CGI::td({}, [ |
1876 | print CGI::Tr({}, CGI::td({}, [ |
| 1918 | CGI::start_table({border => 0, cellpadding => 0}) . |
1877 | CGI::start_table({border => 0, cellpadding => 0}) . |
| 1919 | CGI::Tr({}, CGI::td({}, $properties{$header}->{name})) . |
1878 | CGI::Tr({}, CGI::td({}, $properties{$header}->{name})) . |
| 1920 | CGI::Tr({}, CGI::td({}, CGI::a({href => $editHeaderLink, target=>"WW_Editor"}, "Edit it"))) . |
1879 | CGI::Tr({}, CGI::td({}, CGI::a({href => $editHeaderLink, target=>"WW_Editor"}, "Edit it"))) . |
| 1921 | CGI::Tr({}, CGI::td({}, CGI::a({href => $viewHeaderLink, target=>"WW_View"}, "View it"))) . |
1880 | CGI::Tr({}, CGI::td({}, CGI::a({href => $viewHeaderLink, target=>"WW_View"}, "View it"))) . |
| 1922 | # CGI::Tr({}, CGI::td({}, CGI::checkbox({name => "defaultHeader", value => $header, label => "Use Default"}))) . |
|
|
| 1923 | CGI::end_table(), |
1881 | CGI::end_table(), |
| 1924 | # "", |
|
|
| 1925 | # CGI::input({ name => "set.$setID.$header", value => $setRecord->{$header}, size => 50}) . |
|
|
| 1926 | # join ("\n", $self->FieldHTML($userToShow, $setID, $problemID, "source_file")) . |
|
|
| 1927 | # CGI::br() . CGI::div({class=> "RenderSolo"}, $problem_html[0]->{body_text}), |
|
|
| 1928 | |
1882 | |
| 1929 | comboBox({ |
1883 | comboBox({ |
| 1930 | name => "set.$setID.$header", |
1884 | name => "set.$setID.$header", |
| 1931 | request => $r, |
1885 | request => $r, |
| 1932 | default => $r->param("set.$setID.$header") || $setRecord->{$header}, |
1886 | default => $r->param("set.$setID.$header") || $setRecord->{$header}, |
| 1933 | multiple => 0, |
1887 | multiple => 0, |
| 1934 | values => ["", @headerFileList], |
1888 | values => ["defaultHeader", @headerFileList], |
| 1935 | labels => { "" => "Use Default Header File" }, |
1889 | labels => { "defaultHeader" => "Use Default Header File" }, |
| 1936 | }) . |
1890 | }) . |
| 1937 | ($error{$header} ? |
1891 | ($error{$header} ? |
| 1938 | CGI::div({class=>"ResultsWithError", style=>"font-weight: bold"}, $error{$header}) |
1892 | CGI::div({class=>"ResultsWithError", style=>"font-weight: bold"}, $error{$header}) |
| 1939 | : CGI::div({class=> "RenderSolo"}, $header_html{$header}->{body_text}) |
1893 | : CGI::div({class=> "RenderSolo"}, $header_html{$header}->{body_text}) |
| 1940 | ), |
1894 | ), |