--- loncom/homework/structuretags.pm 2011/07/28 02:53:38 1.494 +++ loncom/homework/structuretags.pm 2011/12/12 11:19:53 1.497.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.494 2011/07/28 02:53:38 raeburn Exp $ +# $Id: structuretags.pm,v 1.497.2.1 2011/12/12 11:19:53 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -172,166 +172,6 @@ function setmode(form,probmode) { ENDSCRIPT } -sub file_delchk_js { - my $delfilewarn = &mt('You have indicated you wish to remove some files previously included in your submission.').'\\n'. - &mt('Continue submission with these files removed?'); - return <<"ENDSCRIPT"; - -ENDSCRIPT -} - -sub file_overwritechk_js { - my $overwritewarn = &mt('File(s) you uploaded for your submission will overwrite existing file(s) submitted for this item').'\\n'. - &mt('Continue submission and overwrite the file(s)?'); - return <<"ENDSCRIPT"; - -ENDSCRIPT -} - sub page_start { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, $extra_head)=@_; @@ -358,42 +198,61 @@ sub page_start { } my $is_task = ($env{'request.uri'} =~ /\.task$/); my $needs_upload; + my ($symb)= &Apache::lonnet::whichuser(); + my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb); if ($is_task) { - $extra_head .= &file_delchk_js(); + $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js(); } else { if (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.uploadedfiletypes") ne '') { - $needs_upload = 1; + unless ($env{'request.state'} eq 'construct') { + my $navmap = Apache::lonnavmaps::navmap->new(); + if (ref($navmap)) { + my $mapres = $navmap->getResourceByUrl($map); + my $is_page; + if (ref($mapres)) { + $is_page = $mapres->is_page(); + } + unless ($is_page) { + $needs_upload = 1; + } + } + } } else { unless ($env{'request.state'} eq 'construct') { - my ($symb)= &Apache::lonnet::whichuser(); my $navmap = Apache::lonnavmaps::navmap->new(); if (ref($navmap)) { - my $res = $navmap->getBySymb($symb); - if (ref($res)) { - my $partlist = $res->parts(); - if (ref($partlist) eq 'ARRAY') { - foreach my $part (@{$partlist}) { - my @types = $res->responseType($part); - my @ids = $res->responseIds($part); - for (my $i=0; $i < scalar(@ids); $i++) { - if ($types[$i] eq 'essay') { - my $partid = $part.'_'.$ids[$i]; - if (&Apache::lonnet::EXT("resource.$partid.uploadedfiletypes") ne '') { - $needs_upload = 1; - last; + my $mapres = $navmap->getResourceByUrl($map); + my $is_page; + if (ref($mapres)) { + $is_page = $mapres->is_page(); + } + unless ($is_page) { + my $res = $navmap->getBySymb($symb); + if (ref($res)) { + my $partlist = $res->parts(); + if (ref($partlist) eq 'ARRAY') { + foreach my $part (@{$partlist}) { + my @types = $res->responseType($part); + my @ids = $res->responseIds($part); + for (my $i=0; $i < scalar(@ids); $i++) { + if ($types[$i] eq 'essay') { + my $partid = $part.'_'.$ids[$i]; + if (&Apache::lonnet::EXT("resource.$partid.uploadedfiletypes") ne '') { + $needs_upload = 1; + last; + } } } } - } - } + } + } } } } } - } - if ($needs_upload) { - $extra_head .= &file_overwritechk_js()."\n". - &file_delchk_js(); + if ($needs_upload) { + $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js(); + } } my %body_args; @@ -424,7 +283,7 @@ sub page_start { &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb({ 'text' => 'Construction Space', - 'href' => &Apache::loncommon::authorspace(), + 'href' => &Apache::loncommon::authorspace($env{'request.uri'}), }); # breadcrumbs (and tools) will be created # in start_page->bodytag->innerregister @@ -489,10 +348,8 @@ sub page_start { my ($symb,$courseid,$udom,$uname)=&Apache::lonnet::whichuser(); my ($path,$multiresp) = &Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom); - if ($is_task) { - $form_tag_start .= ' onsubmit="return file_deletion_check(this);"'; - } elsif ($needs_upload) { - $form_tag_start .= ' onsubmit="return file_overwrite_check(this,'."'$path','$multiresp'".');"'; + if (($is_task) || ($needs_upload)) { + $form_tag_start .= ' onsubmit="return file_submission_check(this,'."'$path','$multiresp'".');"'; } $form_tag_start.='>'."\n"; @@ -1682,54 +1539,100 @@ sub end_block { } return $result; } - +# +# +# ... +# +# +# This declares the intent to provide content that can be rendered in the +# set of languages in the include specificatino but not in the exclude +# specification. If a currently preferred language is in the include list +# the content in the ... is rendered +# If the currently preferred language is in the exclude list, +# the content in the ..>[2]->{'include'}; my $exclude = $token->[2]->{'exclude'}; my @preferred_languages=&Apache::lonlocal::preferred_languages(); -# This should not even happen, since we should at least have the server language - if (!$preferred_languages[0]) { $preferred_languages[0]='en'; } -# Now loop over all languages in order of preference + + # This should not even happen, since we should at least have the server language + + if (!$preferred_languages[0]) { + $preferred_languages[0]='en'; + } + + # Now loop over all languages in order of preference + foreach my $preferred_language (@preferred_languages) { -# If the languageblock has no arguments, show the contents - $result=1; + + # If neither include/nor exlude is present the block is going + # to get rendered. + + my $render=1; my $found=0; -# Do we have an include argument? + + # If include is specified, don't render the block + # unless the preferred language is included in the set. + if ($include) { -# If include is specified, by default, don't render the block - $result=0; + $render=0; foreach my $included_language (split(/\,/,$include)) { -# ... but if my preferred language is included, render it if ($included_language eq $preferred_language) { - $result=1; + $render=1; $found=1; + last; # Only need to find the first. } } } -# Do we have an exclude argument? + # Do we have an exclude argument? + # If so, and one of the languages matches a preferred language + # inhibit rendering the block. Note that in the pathalogical case the + # author has specified a preferred language in both the include and exclude + # attribte exclude is preferred. + if ($exclude) { - $result=1; + $render=1; foreach my $excluded_language (split(/\,/,$exclude)) { if ($excluded_language eq $preferred_language) { - $result=0; + $render=0; $found=1; + last; # Only need to find the first. } } } - if ($found) { last; } + if ($found) { + last; # Done on any match of include or exclude. + } } - if ( ! $result ) { + # If $render not true skip the entire block until + # + + if ( ! $render ) { my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser, $style); &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]"); } - $result=''; + # If $render is true, we've not skipped the contents of the + # and the normal loncapa processing flow will render it as a matter of course. + } elsif ($target eq 'edit') { $result .=&Apache::edit::tag_start($target,$token); $result .=&Apache::edit::text_arg(&mt('Include Language:'),'include',