version 1.512.2.24.2.10, 2024/02/27 19:46:23
|
version 1.580, 2023/11/17 17:02:21
|
Line 69 use lib '/home/httpd/lib/perl/';
|
Line 69 use lib '/home/httpd/lib/perl/';
|
use LONCAPA; |
use LONCAPA; |
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag')); |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','print','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag')); |
} |
} |
|
|
|
|
Line 194 sub end_web {
|
Line 194 sub end_web {
|
return ''; |
return ''; |
} |
} |
|
|
|
sub start_print { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
|
if ($target ne 'edit' && $target ne 'modified') { |
|
if ($target ne 'tex') { |
|
my $skip = &Apache::lonxml::get_all_text("/print",$parser,$style); |
|
&Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]"); |
|
} |
|
} elsif ($target eq "edit") { |
|
my $bodytext = &Apache::lonxml::get_all_text_unbalanced("/print",$parser); |
|
my $result = &Apache::edit::tag_start($target,$token); |
|
$result .= &Apache::edit::editfield($token->[1],$bodytext,'',80,1); |
|
return $result; |
|
} elsif ($target eq "modified") { |
|
return $token->[4].&Apache::edit::modifiedfield("/print",$parser); |
|
} |
|
return ''; |
|
} |
|
|
|
sub end_print { |
|
return ''; |
|
} |
|
|
sub start_tex { |
sub start_tex { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
Line 228 sub end_tex {
|
Line 250 sub end_tex {
|
sub homework_js { |
sub homework_js { |
my ($postsubmit,$timeout); |
my ($postsubmit,$timeout); |
if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) { |
if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) { |
my $crstype; |
my $crstype = &Apache::loncommon::course_type(); |
if (&Apache::loncommon::course_type() eq 'Community') { |
if ($crstype eq 'Community') { |
$crstype = 'community'; |
$crstype = 'community'; |
|
} elsif ($crstype eq 'Placement') { |
|
$crstype = 'placement'; |
} else { |
} else { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) { |
$crstype = 'official'; |
$crstype = 'official'; |
Line 272 sub homework_js {
|
Line 296 sub homework_js {
|
$jstimeout = 1000 * $timeout; |
$jstimeout = 1000 * $timeout; |
} |
} |
return &Apache::loncommon::resize_textarea_js(). |
return &Apache::loncommon::resize_textarea_js(). |
&Apache::loncommon::colorfuleditor_js(). |
&Apache::loncommon::colorfuleditor_js(). |
&Apache::lonxml::setmode_javascript(). |
&setmode_javascript(). |
<<"JS"; |
<<"JS"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
Line 385 var postsubmit = '$postsubmit';
|
Line 409 var postsubmit = '$postsubmit';
|
JS |
JS |
} |
} |
|
|
|
sub setmode_javascript { |
|
return <<"ENDSCRIPT"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function setmode(form,probmode) { |
|
var initial = form.problemmode.value; |
|
form.problemmode.value = probmode; |
|
form.submit(); |
|
form.problemmode.value = initial; |
|
} |
|
// ]]> |
|
</script> |
|
ENDSCRIPT |
|
} |
|
|
sub page_start { |
sub page_start { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, |
$extra_head)=@_; |
$extra_head)=@_; |
Line 406 sub page_start {
|
Line 445 sub page_start {
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
my %textarea_args; |
my %textarea_args; |
if (($env{'request.state'} ne 'construct') || |
if (($env{'request.state'} ne 'construct') || |
($env{'environment.nocodemirror'})) { |
(&Apache::loncommon::nocodemirror())) { |
%textarea_args = ( |
%textarea_args = ( |
dragmath => 'math', |
dragmath => 'math', |
); |
); |
Line 481 sub page_start {
|
Line 520 sub page_start {
|
} |
} |
} |
} |
if ($needs_upload) { |
if ($needs_upload) { |
$extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js(). |
$extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js() |
'<script type="text/javascript" '. |
.'<script type="text/javascript" |
'src="/res/adm/includes/file_upload.js"></script>'; |
src="/res/adm/includes/file_upload.js"></script>'; |
} |
} |
} |
} |
|
|
Line 514 sub page_start {
|
Line 553 sub page_start {
|
} elsif (!defined($found{'body'}) |
} elsif (!defined($found{'body'}) |
&& $env{'request.state'} eq 'construct') { |
&& $env{'request.state'} eq 'construct') { |
if ($target eq 'web' || $target eq 'edit') { |
if ($target eq 'web' || $target eq 'edit') { |
# Breadcrumbs for Authoring Space |
unless ($env{'form.inhibitmenu'} eq 'yes') { |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
my $text = 'Authoring Space'; |
&Apache::lonhtmlcommon::add_breadcrumb({ |
my $href = &Apache::loncommon::authorspace($env{'request.uri'}); |
'text' => 'Authoring Space', |
if ($env{'request.course.id'}) { |
'href' => &Apache::loncommon::authorspace($env{'request.uri'}), |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
}); |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
# breadcrumbs (and tools) will be created |
if ($href eq "/priv/$cdom/$cnum/") { |
# in start_page->bodytag->innerregister |
$text = &mt('Course Authoring Space'); |
|
} |
|
} |
|
# Breadcrumbs for Authoring Space |
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
|
&Apache::lonhtmlcommon::add_breadcrumb({ |
|
'text' => $text, |
|
'href' => $href, |
|
}); |
|
# breadcrumbs (and tools) will be created |
|
# in start_page->bodytag->innerregister |
|
|
# FIXME Where are we? |
# FIXME Where are we? |
# &Apache::lonhtmlcommon::add_breadcrumb({ |
# &Apache::lonhtmlcommon::add_breadcrumb({ |
# 'text' => 'Problem Editing', # 'Problem Testing' |
# 'text' => 'Problem Editing', # 'Problem Testing' |
# 'href' => '', |
# 'href' => '', |
# }); |
# }); |
$pageheader =&Apache::loncommon::head_subbox( |
$pageheader = &Apache::loncommon::head_subbox( |
&Apache::loncommon::CSTR_pageheader()); |
&Apache::loncommon::CSTR_pageheader()); |
} |
} |
|
} |
} elsif (!defined($found{'body'})) { |
} elsif (!defined($found{'body'})) { |
my %add_entries; |
my %add_entries; |
my $background=&Apache::lonxml::get_param('background',$parstack, |
my $background=&Apache::lonxml::get_param('background',$parstack, |
Line 630 sub get_resource_name {
|
Line 680 sub get_resource_name {
|
} |
} |
|
|
sub setup_rndseed { |
sub setup_rndseed { |
my ($safeeval,$target,$probpartlist)=@_; |
my ($safeeval,$target,$probpartlist,$prevparttype)=@_; |
my ($symb)=&Apache::lonnet::whichuser(); |
my ($symb)=&Apache::lonnet::whichuser(); |
my ($questiontype,$set_safespace,$rndseed,$numtries,$reqtries); |
my ($questiontype,$set_safespace,$rndseed,$numtries,$reqtries); |
if ($target eq 'analyze') { |
if ($target eq 'analyze') { |
Line 693 sub setup_rndseed {
|
Line 743 sub setup_rndseed {
|
} |
} |
$env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed; |
$env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed; |
} |
} |
if ( ($env{'form.resetdata'} eq &mt('New Problem Variation') |
if ( ($env{'form.resetdata'} eq 'new_problem_variation' |
&& $env{'form.submitted'} eq 'yes') || |
&& $env{'form.submitted'} eq 'yes') || |
$env{'form.newrandomization'} eq &mt('New Randomization')) { |
$env{'form.newrandomization'} eq &mt('New Randomization')) { |
srand(time); |
srand(time); |
Line 747 sub setup_rndseed {
|
Line 797 sub setup_rndseed {
|
if ($target eq 'grade') { |
if ($target eq 'grade') { |
$Apache::lonhomework::rawrndseed = $rndseed; |
$Apache::lonhomework::rawrndseed = $rndseed; |
} |
} |
|
} elsif ($prevparttype eq 'randomizetry') { |
|
if ($env{'form.0.rndseed'} ne '') { |
|
$set_safespace = 1; |
|
$rndseed = $env{'form.0.rndseed'}; |
|
} |
} |
} |
if ($set_safespace) { |
if ($set_safespace) { |
if ($safeeval) { |
if ($safeeval) { |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
&Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval); |
&Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval); |
|
if (($Apache::lonhomework::type eq 'randomizetry') || ($prevparttype eq 'randomizetry')) { |
|
&Apache::lonxml::debug("Setting randomizetrypart to $Apache::inputtags::part"); |
|
&Apache::run::run('$external::randomizetrypart="'.$Apache::inputtags::part.'";',$safeeval); |
|
} |
} |
} |
} |
} |
unless (($env{'request.state'} eq "construct") || ($symb eq '')) { |
unless (($env{'request.state'} eq "construct") || ($symb eq '')) { |
Line 776 sub problem_edit_action_button {
|
Line 835 sub problem_edit_action_button {
|
|
|
sub problem_edit_buttons { |
sub problem_edit_buttons { |
my ($mode)=@_; |
my ($mode)=@_; |
|
my %editors = &Apache::loncommon::permitted_editors(); |
# Buttons that save |
# Buttons that save |
my $result = '<div style="float:right">'; |
my $result = '<div style="float:right">'; |
if ($mode eq 'editxml') { |
if ($mode eq 'editxml') { |
$result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML'); |
if ($editors{'xml'}) { |
|
$result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML'); |
|
} |
$result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View'); |
$result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View'); |
} else { |
} else { |
$result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit'); |
if ($editors{'edit'}) { |
|
$result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit'); |
|
} |
$result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View'); |
$result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View'); |
} |
} |
$result.="\n</div>\n"; |
$result.="\n</div>\n"; |
Line 790 sub problem_edit_buttons {
|
Line 854 sub problem_edit_buttons {
|
$result .= '<div>'. |
$result .= '<div>'. |
&problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1); |
&problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1); |
if ($mode eq 'editxml') { |
if ($mode eq 'editxml') { |
$result.=&problem_edit_action_button('subedit','edit','e','Edit',1); |
if ($editors{'edit'}) { |
|
$result.=&problem_edit_action_button('subedit','edit','e','Edit',1); |
|
} |
$result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1); |
$result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1); |
if ($env{'environment.nocodemirror'}) { |
if (&Apache::loncommon::nocodemirror()) { |
$result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); |
$result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); |
} |
} |
} else { |
} else { |
$result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1); |
if ($editors{'xml'}) { |
|
$result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1); |
|
} |
$result.=&problem_edit_action_button('subundo','undo','u','Undo',1); |
$result.=&problem_edit_action_button('subundo','undo','u','Undo',1); |
} |
} |
$result.="\n</div>"; |
$result.="\n</div>"; |
Line 810 sub problem_edit_header {
|
Line 878 sub problem_edit_header {
|
<div class="LC_edit_problem_header"> |
<div class="LC_edit_problem_header"> |
<div class="LC_edit_problem_header_title"> |
<div class="LC_edit_problem_header_title"> |
'.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
'.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
</div><div class="LC_edit_actionbar" id="actionbar">'. |
</div><div class="LC_edit_actionbar" id="actionbar">'. |
'<input type="hidden" name="problemmode" value="saveedit" />'. |
'<input type="hidden" name="problemmode" value="saveedit" />'. |
&problem_edit_buttons(); |
&problem_edit_buttons(); |
|
|
$return .= '</div></div>' . &Apache::lonxml::message_location(); |
$return .= '</div></div>' . &Apache::lonxml::message_location(); |
$return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" /> |
$return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" /> |
Line 840 sub problem_edit_header {
|
Line 908 sub problem_edit_header {
|
return $return; |
return $return; |
} |
} |
|
|
|
|
sub problem_edit_footer { |
sub problem_edit_footer { |
my $resource = $env{'request.ambiguous'}; |
my $resource = $env{'request.ambiguous'}; |
return '</td></tr></table><br /> |
return '</td></tr></table><br /> |
Line 869 sub option {
|
Line 936 sub option {
|
|
|
sub problem_web_to_edit_header { |
sub problem_web_to_edit_header { |
my ($rndseed)=@_; |
my ($rndseed)=@_; |
|
my %editors = &Apache::loncommon::permitted_editors(); |
my $result .= '<div class="LC_edit_problem_header">'; |
my $result .= '<div class="LC_edit_problem_header">'; |
|
|
if (!$Apache::lonhomework::parsing_a_task) { |
if (!$Apache::lonhomework::parsing_a_task) { |
Line 916 sub problem_web_to_edit_header {
|
Line 984 sub problem_web_to_edit_header {
|
".&mt("Problem Type:")." |
".&mt("Problem Type:")." |
<select name='problemtype'> |
<select name='problemtype'> |
<option value=''></option> |
<option value=''></option> |
".&option('exam' ,'problemtype').&mt("Exam Problem")."</option> |
".&option('exam' ,'problemtype').&mt("Bubblesheet Exam Problem")."</option> |
".&option('problem','problemtype').&mt("Homework Problem")."</option> |
".&option('problem','problemtype').&mt("Homework Problem")."</option> |
".&option('survey' ,'problemtype').&mt("Survey Question")."</option> |
".&option('survey' ,'problemtype').&mt("Survey Question")."</option> |
".&option('surveycred' ,'problemtype').&mt("Survey Question (with credit)")."</option> |
".&option('surveycred' ,'problemtype').&mt("Survey Question (with credit)")."</option> |
Line 968 $show_all
|
Line 1036 $show_all
|
</div> |
</div> |
<input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" /> |
<input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" /> |
<input type="submit" name="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" /> |
<input type="submit" name="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" /> |
<input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" /> |
<button type="submit" name="resetdata" accesskey="r" value="reset_submissions"> |
|
'.&mt('Reset Submissions').'</button> |
</div> |
</div> |
<hr /> |
<hr /> |
<div class="LC_edit_problem_header_randomize_row"> |
<div class="LC_edit_problem_header_randomize_row"> |
Line 997 $show_all
|
Line 1066 $show_all
|
<hr /> |
<hr /> |
<div>'; |
<div>'; |
$result.='<input type="hidden" name="problemmode" value="view" />'; |
$result.='<input type="hidden" name="problemmode" value="view" />'; |
$result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '. |
if ($editors{'edit'}) { |
'onclick="javascript:setmode(this.form,'."'edit'".')" />'; |
$result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '. |
$result .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '. |
'onclick="javascript:setmode(this.form,'."'edit'".')" />'; |
'onclick="javascript:setmode(this.form,'."'editxml'".')" />'; |
} |
|
if ($editors{'xml'}) { |
|
$result .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '. |
|
'onclick="javascript:setmode(this.form,'."'editxml'".')" />'; |
|
} |
|
if (($editors{'daxe'}) && |
|
($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9)) { |
|
my $uri = $env{'request.uri'}; |
|
my $daxeurl = '/daxepage'.$uri; |
|
$result .= '<input type="button" value="'.&mt('Edit with Daxe').'" '. |
|
'onclick="window.open(\''.$daxeurl.'\',\'_blank\');" />'; |
|
} |
$result.=' |
$result.=' |
</div> |
</div> |
<hr /> |
<hr /> |
Line 1027 sub initialize_storage {
|
Line 1107 sub initialize_storage {
|
|| $Apache::lonhomework::type eq 'practice') { |
|| $Apache::lonhomework::type eq 'practice') { |
|
|
my $namespace = $symb || $env{'request.uri'}; |
my $namespace = $symb || $env{'request.uri'}; |
if ($env{'form.resetdata'} eq &mt('Reset Submissions') || |
if ($env{'form.resetdata'} eq 'reset_submissions' || |
($env{'form.resetdata'} eq &mt('New Problem Variation') |
($env{'form.resetdata'} eq 'new_problem_variation' |
&& $env{'form.submitted'} eq 'yes') || |
&& $env{'form.submitted'} eq 'yes') || |
$env{'form.newrandomization'} eq &mt('New Randomization')) { |
$env{'form.newrandomization'} eq &mt('New Randomization')) { |
&Apache::lonnet::tmpreset($namespace,'',$domain,$name); |
&Apache::lonnet::tmpreset($namespace,'',$domain,$name); |
Line 1081 sub initialize_storage {
|
Line 1161 sub initialize_storage {
|
where awarded >= 1 when correct). |
where awarded >= 1 when correct). |
|
|
Will call &store_aggregates() to increment totals for attempts, |
Will call &store_aggregates() to increment totals for attempts, |
students, and corrects, if running user has student role. |
students, and corrects, if running user has student role. |
|
|
=cut |
=cut |
|
|
Line 1368 sub needs_linkprot_passback {
|
Line 1448 sub needs_linkprot_passback {
|
$lti_in_use = $domlti{$itemnum}; |
$lti_in_use = $domlti{$itemnum}; |
} |
} |
my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink); |
my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink); |
my ($passback,$pbscope); |
my $passback; |
if ($scope eq 'res') { |
if ($scope eq 'resource') { |
if ($deeplink_symb eq $symb) { |
if ($deeplink_symb eq $symb) { |
$passback = 1; |
$passback = 1; |
$pbscope = 'resource'; |
|
} |
} |
} elsif ($scope eq 'map') { |
} elsif ($scope eq 'map') { |
if (&Apache::lonnet::clutter($deeplink_map) eq $map) { |
if (&Apache::lonnet::clutter($deeplink_map) eq $map) { |
$passback = 1; |
$passback = 1; |
$pbscope = 'nonrec'; |
|
} |
|
} elsif ($scope eq 'rec') { |
|
if (&Apache::lonnet::clutter($deeplink_map) eq $map) { |
|
$passback = 1; |
|
$pbscope = 'map'; |
|
} else { |
|
my @recurseup = &Apache::lonnet::get_map_hierarchy($map,$env{'request.course.id'}); |
|
if (grep(/^\Q$deeplink_map\E$/,@recurseup)) { |
|
$passback = 1; |
|
$pbscope = 'map'; |
|
} |
|
} |
} |
|
} elsif ($scope eq 'recurse') { |
|
#FIXME check if $deeplink_map contains $map |
|
$passback = 1; |
} |
} |
return ($passback,$pbscope,$deeplink_map,$deeplink_symb,$crsdef,$itemnum,$lti_in_use); |
return ($passback,$scope,$deeplink_map,$deeplink_symb,$crsdef,$itemnum,$lti_in_use); |
} |
} |
} |
} |
} |
} |
Line 1504 sub store_aggregates {
|
Line 1574 sub store_aggregates {
|
} else { |
} else { |
$anoncounter{$symb."\0".$part} = 1; |
$anoncounter{$symb."\0".$part} = 1; |
} |
} |
my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}}; |
my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}.'::'}; |
if ($needsrelease) { |
if ($needsrelease) { |
my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; |
my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; |
if ($curr_required eq '') { |
if ($curr_required eq '') { |
&Apache::lonnet::update_released_required($needsrelease); |
&Apache::lonnet::update_released_required($needsrelease); |
Line 1565 sub access_status_msg {
|
Line 1635 sub access_status_msg {
|
&Apache::lonnavmaps::timeToHumanString($accessmsg,'start')); |
&Apache::lonnavmaps::timeToHumanString($accessmsg,'start')); |
} elsif ($status eq 'NOTRESERVABLE') { |
} elsif ($status eq 'NOTRESERVABLE') { |
$msg.=&mt('Not available to make a reservation.'); |
$msg.=&mt('Not available to make a reservation.'); |
|
} elsif ($status eq 'NEED_DIFFERENT_IP') { |
|
if ($ipused) { |
|
$msg.=&mt('You must use the same computer ([_1]) you used when you first accessed this resource using your time/place-based reservation.',"IP: $ipused"); |
|
} else { |
|
$msg.=&mt('Each student must use a different computer to access this resource at this time and/or place.').'<br />'. |
|
&mt('Somebody else has already used this particular computer for that purpose.'); |
|
} |
} |
} |
$msg.='<br />'; |
$msg.='<br />'; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
Line 1584 sub access_status_msg {
|
Line 1661 sub access_status_msg {
|
|
|
sub checkin_prompt { |
sub checkin_prompt { |
my ($target,$slot_name,$slot,$type) = @_; |
my ($target,$slot_name,$slot,$type) = @_; |
my $result; |
my $result; |
if ($target eq 'web') { |
if ($target eq 'web') { |
$result = &Apache::bridgetask::proctor_validation_screen($slot); |
$result = &Apache::bridgetask::proctor_validation_screen($slot); |
} elsif ($target eq 'grade') { |
} elsif ($target eq 'grade') { |
Line 1602 sub selfcheckin_resource {
|
Line 1679 sub selfcheckin_resource {
|
$Apache::lonhomework::history{'resource.0.checkedin'}; |
$Apache::lonhomework::history{'resource.0.checkedin'}; |
if ($checked_in eq '') { |
if ($checked_in eq '') { |
# unproctored slot access, self checkin |
# unproctored slot access, self checkin |
|
my $needsiptied; |
|
if (ref($slot)) { |
|
$needsiptied = $slot->{'iptied'}; |
|
} |
my $check = &Apache::bridgetask::check_in('problem',undef,undef, |
my $check = &Apache::bridgetask::check_in('problem',undef,undef, |
$slot_name); |
$slot_name,$needsiptied); |
if ($check =~ /^error: /) { |
if ($check =~ /^error: /) { |
&Apache::lonnet::logthis("Error during self-checkin of problem (symb: $symb) using slot: $slot_name"); |
&Apache::lonnet::logthis("Error during self-checkin of problem (symb: $symb) using slot: $slot_name"); |
} else { |
} else { |
Line 1628 sub checkout_msg {
|
Line 1709 sub checkout_msg {
|
'resource'=>'The resource needs to be checked out', |
'resource'=>'The resource needs to be checked out', |
'id_expln'=>'As a resource gets checked out, a unique timestamped ID is given to it, and a permanent record is left in the system.', |
'id_expln'=>'As a resource gets checked out, a unique timestamped ID is given to it, and a permanent record is left in the system.', |
'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.', |
'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.', |
'checkout'=>'Check out Exam for Viewing', |
'checkout'=>'Check out Bubblesheet Exam for Viewing', |
'checkout?'=>'Check out Exam?'); |
'checkout?'=>'Check out Bubblesheet Exam?'); |
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
return (<<ENDCHECKOUT); |
return (<<ENDCHECKOUT); |
<h2>$lt{'resource'}</h2> |
<h2>$lt{'resource'}</h2> |
Line 1830 sub start_problem {
|
Line 1911 sub start_problem {
|
my $status; |
my $status; |
my $accessmsg; |
my $accessmsg; |
my $resource_due; |
my $resource_due; |
|
my $ipused; |
|
|
my $name= &get_resource_name($parstack,$safeeval); |
my $name= &get_resource_name($parstack,$safeeval); |
my ($result,$form_tag_start,$slot_name,$slot,$probpartlist,$firstaccres); |
my ($result,$form_tag_start,$slot_name,$slot,$probpartlist,$firstaccres); |
Line 1838 sub start_problem {
|
Line 1920 sub start_problem {
|
$target eq 'tex') { |
$target eq 'tex') { |
if ($env{'form.markaccess'}) { |
if ($env{'form.markaccess'}) { |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my ($timelimit) = ($interval[0] =~ /^(\d+)/); |
my ($timelimit) = split(/_/,$interval[0]); |
my $is_set = &Apache::lonnet::set_first_access($interval[1],$timelimit); |
my $is_set = &Apache::lonnet::set_first_access($interval[1],$timelimit); |
unless (($is_set eq 'ok') || ($is_set eq 'already_set')) { |
unless (($is_set eq 'ok') || ($is_set eq 'already_set')) { |
$firstaccres = $is_set; |
$firstaccres = $is_set; |
Line 1874 sub start_problem {
|
Line 1956 sub start_problem {
|
$target eq 'tex') { |
$target eq 'tex') { |
|
|
my ($symb)= &Apache::lonnet::whichuser(); |
my ($symb)= &Apache::lonnet::whichuser(); |
($status,$accessmsg,$slot_name,$slot) = |
($status,$accessmsg,$slot_name,$slot,$ipused) = |
&Apache::lonhomework::check_slot_access('0','problem',$symb,$probpartlist); |
&Apache::lonhomework::check_slot_access('0','problem',$symb,$probpartlist); |
push (@Apache::inputtags::status,$status); |
push (@Apache::inputtags::status,$status); |
} |
} |
|
|
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';} |
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';} |
|
|
Line 1916 sub start_problem {
|
Line 1998 sub start_problem {
|
} |
} |
$form_tag_start.='<input type="hidden" name="rndseed" value="'. |
$form_tag_start.='<input type="hidden" name="rndseed" value="'. |
$rndseedval.'" />'. |
$rndseedval.'" />'. |
'<input type="submit" name="resetdata" |
'<button type="submit" name="resetdata" |
value="'.&mt('New Problem Variation').'" />'; |
value="new_problem_variation">'.&mt('New Problem Variation').'</button>'; |
if (exists($env{'form.username'})) { |
if (exists($env{'form.username'})) { |
$form_tag_start.= |
$form_tag_start.= |
'<input type="hidden" name="username" |
'<input type="hidden" name="username" |
Line 1940 sub start_problem {
|
Line 2022 sub start_problem {
|
} |
} |
if (($env{'request.state'} ne "construct") && |
if (($env{'request.state'} ne "construct") && |
($Apache::lonhomework::type eq 'randomizetry') && |
($Apache::lonhomework::type eq 'randomizetry') && |
($status eq 'CAN_ANSWER')) { |
($status eq 'CAN_ANSWER') && |
|
($env{'course.'.$env{'request.course.id'}.'.type'} ne 'Placement') && |
|
(!$env{'request.role.adv'})) { |
|
# "New Problem Variation Each Try" header suppressed for Placement Tests, unless course personnel. |
my @parts; |
my @parts; |
if (ref($probpartlist) eq 'ARRAY') { |
if (ref($probpartlist) eq 'ARRAY') { |
@parts = @{$probpartlist}; |
@parts = @{$probpartlist}; |
Line 1966 sub start_problem {
|
Line 2051 sub start_problem {
|
( $status eq 'NOTRESERVABLE') || |
( $status eq 'NOTRESERVABLE') || |
( $status eq 'RESERVABLE') || |
( $status eq 'RESERVABLE') || |
( $status eq 'RESERVABLE_LATER') || |
( $status eq 'RESERVABLE_LATER') || |
( $status eq 'INVALID_ACCESS')) { |
( $status eq 'INVALID_ACCESS') || |
|
( $status eq 'NEED_DIFFERENT_IP')) { |
my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, |
my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, |
$style); |
$style); |
if (($status eq 'NOT_YET_VIEWED') && ($firstaccres)) { |
if (($status eq 'NOT_YET_VIEWED') && ($firstaccres)) { |
Line 1996 sub start_problem {
|
Line 2082 sub start_problem {
|
'<input type="hidden" name="submitted" value="yes" />'; |
'<input type="hidden" name="submitted" value="yes" />'; |
# create a page header and exit |
# create a page header and exit |
if ($env{'request.state'} eq "construct") { |
if ($env{'request.state'} eq "construct") { |
$result.= &problem_web_to_edit_header($env{'form.rndseed'}); |
if ($env{'form.inhibitmenu'} eq 'yes') { |
|
# error messages can be useful in any case |
|
$result.= &Apache::lonxml::message_location(); |
|
} else { |
|
$result.= &problem_web_to_edit_header($env{'form.rndseed'}); |
|
} |
if ($Apache::lonhomework::type eq 'practice') { |
if ($Apache::lonhomework::type eq 'practice') { |
$result.= '<input type="submit" name="resetdata" '. |
$result.= '<button type="submit" name="resetdata" '. |
'value="'.&mt('New Problem Variation').'" />'. |
'value="new_problem_variation">'.&mt('New Problem Variation').'</button>'. |
&practice_problem_header().'<hr />'; |
&practice_problem_header().'<hr />'; |
} elsif ($Apache::lonhomework::type eq 'randomizetry') { |
} elsif ($Apache::lonhomework::type eq 'randomizetry') { |
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
Line 2190 sub end_problem {
|
Line 2281 sub end_problem {
|
# Added separately at end of this routine, after added |
# Added separately at end of this routine, after added |
# <script></script> so document will be valid xhtml. |
# <script></script> so document will be valid xhtml. |
# |
# |
$result.= &Apache::loncommon::end_page({'discussion' => 1, |
my $showdisc = 1; |
|
if (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') && |
|
(!$env{'request.role.adv'})) { |
|
# For Placement Tests footer with "Post Discussion" and "Send Feedback" links is suppressed. |
|
$showdisc = 0; |
|
my ($symb)= &Apache::lonnet::whichuser(); |
|
if ($symb) { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
my $hastries = &Apache::lonplacementtest::has_tries($symb,$navmap); |
|
# For Placement Tests test status is displayed if this is the last resource in the course |
|
# and there are no tries left |
|
unless ($hastries) { |
|
if (&Apache::lonplacementtest::is_lastres($symb,$navmap)) { |
|
my ($score,$incomplete) = |
|
&Apache::lonplacementtest::check_completion(undef,undef,1); |
|
if (!$incomplete) { |
|
$result .= &Apache::lonplacementtest::showresult(1,1); |
|
} elsif ($incomplete < 100) { |
|
$result.= &Apache::lonplacementtest::showincomplete($incomplete,1); |
|
} |
|
} else { |
|
# For Placement Tests score is displayed if test has just been completed |
|
my ($score,$incomplete) = &Apache::lonplacementtest::check_completion(undef,undef,1); |
|
if (!$incomplete) { |
|
$result.= &Apache::lonplacementtest::showresult(1,1); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
$result.= &Apache::loncommon::end_page({'discussion' => $showdisc, |
'notbody' => 1}); |
'notbody' => 1}); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $endminipage = ''; |
my $endminipage = ''; |
Line 2244 ENDJS
|
Line 2367 ENDJS
|
@Apache::inputtags::response=(); |
@Apache::inputtags::response=(); |
$result=&Apache::response::mandatory_part_meta; |
$result=&Apache::response::mandatory_part_meta; |
} |
} |
$result.=&Apache::response::meta_part_order(); |
$result.=&Apache::response::meta_part_order('problem'); |
$result.=&Apache::response::meta_response_order(); |
$result.=&Apache::response::meta_response_order(); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
&Apache::lonxml::debug("in end_problem with $target, edit"); |
&Apache::lonxml::debug("in end_problem with $target, edit"); |
Line 2305 sub start_library {
|
Line 2428 sub start_library {
|
'<input type="hidden" name="submitted" value="yes" />'; |
'<input type="hidden" name="submitted" value="yes" />'; |
$result.=&problem_web_to_edit_header($rndseed); |
$result.=&problem_web_to_edit_header($rndseed); |
if ($Apache::lonhomework::type eq 'practice') { |
if ($Apache::lonhomework::type eq 'practice') { |
$result.= '<input type="submit" name="resetdata" '. |
$result.= '<button type="submit" name="resetdata" '. |
'value="'.&mt('New Problem Variation').'" />'. |
'value="new_problem_variation">'.&mt('New Problem Variation').'</button>'. |
&practice_problem_header().'<hr />'; |
&practice_problem_header().'<hr />'; |
} |
} |
} |
} |
return $result; |
return $result; |
Line 2323 sub end_library {
|
Line 2446 sub end_library {
|
&& $env{'request.state'} eq "construct") { |
&& $env{'request.state'} eq "construct") { |
$result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1}); |
$result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1}); |
} elsif ($target eq 'meta') { |
} elsif ($target eq 'meta') { |
|
$result.=&Apache::response::meta_part_order('library'); |
$result.=&Apache::response::meta_response_order(); |
$result.=&Apache::response::meta_response_order(); |
} |
} |
if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') { |
if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') { |
Line 2952 sub start_part {
|
Line 3076 sub start_part {
|
if (($target eq 'grade') && &Apache::response::submitted()) { |
if (($target eq 'grade') && &Apache::response::submitted()) { |
$Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed; |
$Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed; |
} |
} |
|
} elsif (@Apache::inputtags::partlist > 1) { |
|
my $prevparttype = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[-2].type"); |
|
if ($prevparttype eq 'randomizetry') { |
|
my $rndseed=&setup_rndseed($safeeval,$target,'',$prevparttype); |
|
if (($target eq 'grade') && &Apache::response::submitted()) { |
|
$Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed; |
|
} |
|
} |
} elsif (($target eq 'grade') && &Apache::response::submitted()) { |
} elsif (($target eq 'grade') && &Apache::response::submitted()) { |
$Apache::lonhomework::results{"resource.$id.rndseed"}=$Apache::lonhomework::rawrndseed; |
$Apache::lonhomework::results{"resource.$id.rndseed"}=$Apache::lonhomework::rawrndseed; |
} |
} |
Line 3028 sub start_part {
|
Line 3160 sub start_part {
|
if ($status eq 'CAN_ANSWER') { |
if ($status eq 'CAN_ANSWER') { |
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
my $num = scalar(@Apache::inputtags::partlist)-1; |
my $num = scalar(@Apache::inputtags::partlist)-1; |
if ((($Apache::lonhomework::default_type eq 'randomizetry') || |
if ((($Apache::lonhomework::default_type eq 'randomizetry') || |
($Apache::lonhomework::randomizetrypart)) && |
($Apache::lonhomework::randomizetrypart)) && |
($Apache::lonhomework::type ne 'randomizetry')) { |
($Apache::lonhomework::type ne 'randomizetry')) { |
$result .= &randomizetry_part_header($problemstatus,'none',$num); |
$result .= &randomizetry_part_header($problemstatus,'none',$num); |
} elsif ($Apache::lonhomework::type eq 'randomizetry') { |
} elsif ($Apache::lonhomework::type eq 'randomizetry') { |
Line 3089 sub end_part {
|
Line 3221 sub end_part {
|
$gradestatus=''; |
$gradestatus=''; |
} |
} |
$result.=$gradestatus; |
$result.=$gradestatus; |
if ($$tagstack[-2] eq 'td' and $target eq 'tex') { |
if ($$tagstack[-2] eq 'td' and $target eq 'tex') { |
if (not $env{'form.problem_split'}=~/yes/) { |
if (not $env{'form.problem_split'}=~/yes/) { |
$result.='\end{minipage}'; |
$result.='\end{minipage}'; |
} |
} |
Line 3209 sub start_problemtype {
|
Line 3341 sub start_problemtype {
|
['hide','Hide']] |
['hide','Hide']] |
,$token); |
,$token); |
$result .=&Apache::edit::checked_arg('When used as type(s):','for', |
$result .=&Apache::edit::checked_arg('When used as type(s):','for', |
[ ['exam','Exam/Quiz Problem'], |
[ ['exam','Bubblesheet Exam/Quiz Problem'], |
['survey','Survey'], |
['survey','Survey'], |
['surveycred','Survey (with credit)'], |
['surveycred','Survey (with credit)'], |
['anonsurvey','Anonymous Survey'], |
['anonsurvey','Anonymous Survey'], |
Line 3258 sub end_startouttext {
|
Line 3390 sub end_startouttext {
|
.&Apache::edit::deletelist($target,$token) |
.&Apache::edit::deletelist($target,$token) |
.'</span></td>' |
.'</span></td>' |
.'<td><span id="math_'.$areaid.'">'; |
.'<td><span id="math_'.$areaid.'">'; |
if ($env{'environment.nocodemirror'}) { |
if (&Apache::loncommon::nocodemirror()) { |
$result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1); |
$result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1); |
} else { |
} else { |
$result.=' '; |
$result.=' '; |
Line 3352 sub end_simpleeditbutton {
|
Line 3484 sub end_simpleeditbutton {
|
} |
} |
|
|
sub practice_problem_header { |
sub practice_problem_header { |
return '<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'. |
return '<h3 class="LC_info">'.&mt('Practice Problem').'</h3>'. |
'<span class="LC_info">'.&mt('Submissions are not permanently recorded'). |
'<span class="LC_info">'.&mt('Submissions are not permanently recorded'). |
'</span>'; |
'</span>'; |
} |
} |
Line 3414 sub randomizetry_part_header {
|
Line 3546 sub randomizetry_part_header {
|
if ($num > 1) { |
if ($num > 1) { |
$output .= '<hr />'; |
$output .= '<hr />'; |
} |
} |
$output .= '<span class="LC_info"><h4>'.$header.'</h4></span>'. |
$output .= '<h4 class="LC_info">'.$header.'</h4>'. |
'<span class="LC_info">'.$text.'</span><br /><br />'; |
'<span class="LC_info">'.$text.'</span><br /><br />'; |
return $output; |
return $output; |
} |
} |