--- loncom/interface/loncommon.pm 2012/12/14 13:38:50 1.1075.2.19 +++ loncom/interface/loncommon.pm 2012/05/19 14:03:31 1.1077 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1075.2.19 2012/12/14 13:38:50 raeburn Exp $ +# $Id: loncommon.pm,v 1.1077 2012/05/19 14:03:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -70,8 +70,6 @@ use Apache::lonclonecourse(); use LONCAPA qw(:DEFAULT :match); use DateTime::TimeZone; use DateTime::Locale::Catalog; -use Authen::Captcha; -use Captcha::reCAPTCHA; # ---------------------------------------------- Designs use vars qw(%defaultdesign); @@ -887,14 +885,10 @@ sub check_uncheck_jscript { function checkAll(field) { if (field.length > 0) { for (i = 0; i < field.length; i++) { - if (!field[i].disabled) { - field[i].checked = true; - } + field[i].checked = true ; } } else { - if (!field.disabled) { - field.checked = true; - } + field.checked = true } } @@ -3232,7 +3226,7 @@ sub aboutmewrapper { if (!defined($username) && !defined($domain)) { return; } - return ''.$link.''; } @@ -4960,19 +4954,12 @@ Inputs: =item * $bgcolor, used to override the bgcolor on a webpage to a specific value -=item * $no_inline_link, if true and in remote mode, don't show the - 'Switch To Inline Menu' link - =item * $args, optional argument valid values are no_auto_mt_title -> prevents &mt()ing the title arg inherit_jsmath -> when creating popup window in a page, should it have jsmath forced on by the current page -=item * $advtoolsref, optional argument, ref to an array containing - inlineremote items to be added in "Functions" menu below - breadcrumbs. - =back Returns: A uniform header for LON-CAPA web pages. @@ -4984,7 +4971,7 @@ other decorations will be returned. sub bodytag { my ($title,$function,$addentries,$bodyonly,$domain,$forcereg, - $no_nav_bar,$bgcolor,$no_inline_link,$args,$advtoolsref)=@_; + $no_nav_bar,$bgcolor,$args)=@_; my $public; if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) @@ -5026,8 +5013,6 @@ sub bodytag { } if (!$realm) { $realm=' '; } -# Set messages - my $messages=&domainlogo($domain); my $extra_body_attr = &make_attr_string($forcereg,\%design); @@ -5062,13 +5047,11 @@ sub bodytag { $role = '('.$role.')' if $role; &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']); - if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { - return $bodytag; - } - - if ($env{'request.state'} eq 'construct') { $forcereg=1; } + if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { + return $bodytag; + } - unless ($env{'environment.remote'} eq 'on') { + if ($env{'request.state'} eq 'construct') { $forcereg=1; } # if ($env{'request.state'} eq 'construct') { # $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls @@ -5077,13 +5060,11 @@ sub bodytag { if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { - unless ($env{'request.noversionuri'} =~ m{/res/adm/pages/bookmarkmenu/}) { - if ($dc_info) { - $dc_info = qq|$dc_info|; - } - $bodytag .= qq|
$name $role
- $realm $dc_info
|; - } + if ($dc_info) { + $dc_info = qq|$dc_info|; + } + $bodytag .= qq|
$name $role
+ $realm $dc_info
|; return $bodytag; } @@ -5111,12 +5092,6 @@ sub bodytag { $args->{'bread_crumbs'}); } elsif ($forcereg) { $bodytag .= &Apache::lonmenu::innerregister($forcereg); - } else { - $bodytag .= - &Apache::lonmenu::prepare_functions($env{'request.noversionuri'}, - $forcereg,$args->{'group'}, - $args->{'bread_crumbs'}, - $advtoolsref); } }else{ # this is to seperate menu from content when there's no secondary @@ -5126,55 +5101,6 @@ sub bodytag { } return $bodytag; - } - -# -# Top frame rendering, Remote is up -# - - my $imgsrc = $img; - if ($img =~ /^\/adm/) { - $imgsrc = &lonhttpdurl($img); - } - my $upperleft=''.$function.''; - - # Explicit link to get inline menu - my $menu= ($no_inline_link?'' - :''.&mt('Switch to Inline Menu Mode').''); - - if ($dc_info) { - $dc_info = qq|($dc_info)|; - } - - unless ($env{'form.inhibitmenu'}) { - $bodytag .= qq|
$name $role
-
    -
  1. $menu
  2. -
$realm $dc_info
|; - } - my $funclist; - if ($env{'request.state'} eq 'construct') { - if (!$public){ - if ($env{'request.state'} eq 'construct') { - $funclist = &Apache::lonhtmlcommon::scripttag( - &Apache::lonmenu::utilityfunctions(), 'start'). - &Apache::lonhtmlcommon::scripttag('','end'). - &Apache::lonmenu::innerregister($forcereg, - $args->{'bread_crumbs'}); - } - } - } - return(< -$upperleft - $messages  - -$titleinfo $dc_info $menu - - -$funclist -ENDBODY } sub dc_courseid_toggle { @@ -5206,15 +5132,8 @@ sub make_attr_string { delete($attr_ref->{$key}); } } - if ($env{'environment.remote'} eq 'on') { - $attr_ref->{'onload'} = - &Apache::lonmenu::loadevents(). $on_load; - $attr_ref->{'onunload'}= - &Apache::lonmenu::unloadevents().$on_unload; - } else { - $attr_ref->{'onload'} = $on_load; - $attr_ref->{'onunload'}= $on_unload; - } + $attr_ref->{'onload'} = $on_load; + $attr_ref->{'onunload'}= $on_unload; } my $attr_string; @@ -5244,10 +5163,7 @@ i.e., $env{'internal.head.redirect'} exi sub endbodytag { my ($args) = @_; - my $endbodytag; - unless ((ref($args) eq 'HASH') && ($args->{'notbody'})) { - $endbodytag=''; - } + my $endbodytag=''; $endbodytag=&Apache::lontexconvert::jsMath_process()."\n".$endbodytag; if ( exists( $env{'internal.head.redirect'} ) ) { if (!(ref($args) eq 'HASH' && $args->{'noredirectlink'})) { @@ -5387,12 +5303,10 @@ form, .inline { .LC_error { color: red; + font-size: larger; } -.LC_warning { - color: darkorange; -} - +.LC_warning, .LC_diff_removed { color: red; } @@ -5555,11 +5469,11 @@ td.LC_table_cell_checkbox { text-align: left; } -.LC_head_subbox, .LC_actionbox { +.LC_head_subbox { clear:both; background: #F8F8F8; /* $sidebg; */ border: 1px solid $sidebg; - margin: 0 0 10px 0; + margin: 0 0 10px 0; padding: 3px; text-align: left; } @@ -6254,6 +6168,7 @@ div.LC_docs_entry_move { table.LC_data_table tr > td.LC_docs_entry_commands, table.LC_data_table tr > td.LC_docs_entry_parameter { + background: #DDDDDD; font-size: x-small; } @@ -6565,19 +6480,16 @@ ol.LC_primary_menu li:hover ul, ol.LC_pr position: absolute; margin: 0; padding: 0; - z-index: 2; } ol.LC_primary_menu li:hover li, ol.LC_primary_menu li.hover li { font-size: 90%; vertical-align: top; float: none; - border-left: 1px solid black; - border-right: 1px solid black; } ol.LC_primary_menu li:hover li a, ol.LC_primary_menu li.hover li a { - background-color:$data_table_light; + background-color:$data_table_light } ol.LC_primary_menu li li a:hover { @@ -6634,53 +6546,15 @@ ul#LC_secondary_menu { margin: 0; width: 100%; text-align: left; - float: left; } ul#LC_secondary_menu li { font-weight: bold; line-height: 1.8em; - border-right: 1px solid black; - vertical-align: middle; - float: left; -} - -ul#LC_secondary_menu li.LC_hoverable:hover, ul#LC_secondary_menu li.hover { - background-color: $data_table_light; -} - -ul#LC_secondary_menu li a { padding: 0 0.8em; -} - -ul#LC_secondary_menu li ul { - display: none; -} - -ul#LC_secondary_menu li:hover ul, ul#LC_secondary_menu li.hover ul { - display: block; - position: absolute; - margin: 0; - padding: 0; - list-style:none; - float: none; - background-color: $data_table_light; - z-index: 2; - margin-left: -1px; -} - -ul#LC_secondary_menu li ul li { - font-size: 90%; - vertical-align: top; - border-left: 1px solid black; border-right: 1px solid black; - background-color: $data_table_light - list-style:none; - float: none; -} - -ul#LC_secondary_menu li ul li:hover, ul#LC_secondary_menu li ul li.hover { - background-color: $data_table_dark; + display: inline; + vertical-align: middle; } ul.LC_TabContent { @@ -7020,7 +6894,6 @@ ul#LC_toolbar { list-style:none; position:relative; background-color:white; - overflow: auto; } ul#LC_toolbar li { @@ -7030,7 +6903,6 @@ ul#LC_toolbar li { float: left; display:inline; vertical-align:middle; - white-space: nowrap; } @@ -7127,27 +6999,6 @@ ul.LC_funclist li { cursor:pointer; } -/* - styles used by TTH when "Default set of options to pass to tth/m - when converting TeX" in course settings has been set - - option passed: -t - -*/ - -td div.comp { margin-top: -0.6ex; margin-bottom: -1ex;} -td div.comb { margin-top: -0.6ex; margin-bottom: -.6ex;} -td div.hrcomp { line-height: 0.9; margin-top: -0.8ex; margin-bottom: -1ex;} -td div.norm {line-height:normal;} - -/* - option passed -y3 -*/ - -span.roman {font-family: serif; font-style: normal; font-weight: normal;} -span.overacc2 {position: relative; left: .8em; top: -1.2ex;} -span.overacc1 {position: relative; left: .6em; top: -1.2ex;} - END } @@ -7201,8 +7052,8 @@ sub headtag { if (!$args->{'frameset'}) { $result .= &Apache::lonhtmlcommon::htmlareaheaders(); } - if ($args->{'force_register'}) { - $result .= &Apache::lonmenu::registerurl(1); + if ($args->{'force_register'} && $env{'request.noversionuri'} !~ m{^/res/adm/pages/}) { + $result .= Apache::lonxml::display_title(); } if (!$args->{'no_nav_bar'} && !$args->{'only_body'} @@ -7411,16 +7262,12 @@ $args - additional optional args support skip_phases -> hash ref of head -> skip the generation body -> skip all generation - no_inline_link -> if true and in remote mode, don't show the - 'Switch To Inline Menu' link no_auto_mt_title -> prevent &mt()ing the title arg inherit_jsmath -> when creating popup window in a page, should it have jsmath forced on by the current page bread_crumbs -> Array containing breadcrumbs bread_crumbs_component -> if exists show it as headline else show only the breadcrumbs - group -> includes the current group, if page is for a - specific group =back @@ -7433,7 +7280,7 @@ sub start_page { #&Apache::lonnet::logthis("start_page ".join(':',caller(0))); $env{'internal.start_page'}++; - my ($result,@advtools); + my $result; if (! exists($args->{'skip_phases'}{'head'}) ) { $result .= &xml_begin() . &headtag($title, $head_extra, $args); @@ -7450,8 +7297,7 @@ sub start_page { $args->{'function'}, $args->{'add_entries'}, $args->{'only_body'}, $args->{'domain'}, $args->{'force_register'}, $args->{'no_nav_bar'}, - $args->{'bgcolor'}, $args->{'no_inline_link'}, - $args, \@advtools); + $args->{'bgcolor'}, $args); } } @@ -7480,10 +7326,6 @@ sub start_page { &Apache::lonhtmlcommon::add_breadcrumb($crumb); } } - # if @advtools array contains items add then to the breadcrumbs - if (@advtools > 0) { - &Apache::lonmenu::advtools_crumbs(@advtools); - } #if bread_crumbs_component exists show it as headline else show only the breadcrumbs if(exists($args->{'bread_crumbs_component'})){ @@ -7512,9 +7354,7 @@ sub end_page { } else { $result .= &endbodytag($args); } - unless ($args->{'notbody'}) { - $result .= "\n"; - } + $result .= "\n"; if ($args->{'js_ready'}) { $result = &js_ready($result); @@ -7879,7 +7719,7 @@ sub simple_error_page { my ($r,$title,$msg) = @_; my $page = &Apache::loncommon::start_page($title). - '

'.&mt($msg).'

'. + &mt($msg). &Apache::loncommon::end_page(); if (ref($r)) { $r->print($page); @@ -9466,7 +9306,7 @@ sub get_env_multiple { sub ask_for_embedded_content { my ($actionurl,$state,$allfiles,$codebase,$args)=@_; my (%subdependencies,%dependencies,%mapping,%existing,%newfiles,%pathchanges, - %currsubfile,%unused,$rem); + %currsubfile,%unused); my $counter = 0; my $numnew = 0; my $numremref = 0; @@ -9479,10 +9319,6 @@ sub ask_for_embedded_content { my $heading = &mt('Upload embedded files'); my $buttontext = &mt('Upload'); - my $navmap; - if ($env{'request.course.id'}) { - $navmap = Apache::lonnavmaps::navmap->new(); - } if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) { my $current_path='/'; if ($env{'form.currentpath'}) { @@ -9512,13 +9348,6 @@ sub ask_for_embedded_content { if (ref($args) eq 'HASH') { $url = $args->{'docs_url'}; $toplevel = $url; - if ($args->{'context'} eq 'paste') { - ($cdom,$cnum) = ($url =~ m{^\Q/uploaded/\E($match_domain)/($match_courseid)/}); - ($path) = - ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/}); - $fileloc = &Apache::lonnet::filelocation('',$toplevel); - $fileloc =~ s{^/}{}; - } } } elsif ($actionurl eq '/adm/dependencies') { if ($env{'request.course.id'} ne '') { @@ -9528,7 +9357,6 @@ sub ask_for_embedded_content { $url = $args->{'docs_url'}; $title = $args->{'docs_title'}; $toplevel = "/$url"; - ($rem) = ($toplevel =~ m{^(.+/)[^/]+$}); ($path) = ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/}); $fileloc = &Apache::lonnet::filelocation('',$toplevel); @@ -9591,9 +9419,7 @@ sub ask_for_embedded_content { my @subdir_list = grep(!/^\./,readdir($dir)); map {$currsubfile{$path}{$_} = 1;} @subdir_list; } - } elsif (($actionurl eq '/adm/dependencies') || - (($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') && - ($args->{'context'} eq 'paste'))) { + } elsif ($actionurl eq '/adm/dependencies') { if ($env{'request.course.id'} ne '') { my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$}); if ($dir ne '') { @@ -9629,12 +9455,6 @@ sub ask_for_embedded_content { if (ref($currsubfile{$path}) eq 'HASH') { foreach my $file (keys(%{$currsubfile{$path}})) { unless ($subdependencies{$path}{$file}) { - next if (($rem ne '') && - (($env{"httpref.$rem"."$path/$file"} ne '') || - (ref($navmap) && - (($navmap->getResourceByUrl($rem."$path/$file") ne '') || - (($file =~ /^(.*\.s?html?)\.bak$/i) && - ($navmap->getResourceByUrl($rem."$path/$1"))))))); $unused{$path.'/'.$file} = 1; } } @@ -9657,9 +9477,7 @@ sub ask_for_embedded_content { my @dir_list = grep(!/^\./,readdir($dir)); map {$currfile{$_} = 1;} @dir_list; } - } elsif (($actionurl eq '/adm/dependencies') || - (($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') && - ($args->{'context'} eq 'paste'))) { + } elsif ($actionurl eq '/adm/dependencies') { if ($env{'request.course.id'} ne '') { my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$}); if ($dir ne '') { @@ -9693,23 +9511,9 @@ sub ask_for_embedded_content { unless (($file eq $filename) || ($file eq $filename.'.bak') || ($dependencies{$file})) { - if ($actionurl eq '/adm/dependencies') { - next if (($rem ne '') && - (($env{"httpref.$rem".$file} ne '') || - (ref($navmap) && - (($navmap->getResourceByUrl($rem.$file) ne '') || - (($file =~ /^(.*\.s?html?)\.bak$/i) && - ($navmap->getResourceByUrl($rem.$1))))))); - } $unused{$file} = 1; } } - if (($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') && - ($args->{'context'} eq 'paste')) { - $counter = scalar(keys(%existing)); - $numpathchg = scalar(keys(%pathchanges)); - return ($output,$counter,$numpathchg,\%existing); - } foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%newfiles)) { if ($actionurl eq '/adm/dependencies') { next if ($embed_file =~ m{^\w+://}); @@ -9726,6 +9530,7 @@ sub ask_for_embedded_content { $numremref++; } elsif ($args->{'error_on_invalid_names'} && $embed_file ne &Apache::lonnet::clean_filename($embed_file,{'keep_path' => 1,})) { + $upload_output.=''.&mt('Invalid characters').''; $numinvalid++; } else { @@ -11213,10 +11018,7 @@ function dependencyCheck(form,count,offs document.getElementById('arc_depon_'+count).style.display='block'; form.elements[depitem].options.length = 0; form.elements[depitem].options[0] = new Option('Select','',true,true); - for (var i=1; i<=numitems; i++) { - if (i == count) { - continue; - } + for (var i=1; i'."\n"; @@ -11441,7 +11242,7 @@ sub process_extracted_files { my ($outtext,$errtext)= &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'. $docuname.'/'.$folders{$outer}. - '.'.$containers{$outer},1,1); + '.'.$containers{$outer},1); unless ($errtext) { if (-e "$prefix$dir/$docstype/$mapinner{$outer}/$newidx/$title") { $result .= '
  • '.&mt('File: [_1] added to course',$docstitle).'
  • '."\n"; @@ -11449,93 +11250,87 @@ sub process_extracted_files { } } } - } - } else { - $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).'
    '; - } - } - for (my $i=1; $i<=$numitems; $i++) { - next unless ($env{'form.archive_'.$i} eq 'dependency'); - my $path = $env{'form.archive_content_'.$i}; - if ($path =~ /^\Q$pathtocheck\E/) { - my ($title) = ($path =~ m{/([^/]+)$}); - $referrer{$i} = $env{'form.archive_dependent_on_'.$i}; - if ($env{'form.archive_'.$referrer{$i}} eq 'display') { - if (ref($dirorder{$i}) eq 'ARRAY') { - my ($itemidx,$fullpath,$relpath); - if (ref($dirorder{$referrer{$i}}) eq 'ARRAY') { - my $container = $dirorder{$referrer{$i}}->[-1]; + } elsif ($env{'form.archive_'.$i} eq 'dependency') { + my ($title) = ($path =~ m{/([^/]+)$}); + $referrer{$i} = $env{'form.archive_dependent_on_'.$i}; + if ($env{'form.archive_'.$referrer{$i}} eq 'display') { + if (ref($dirorder{$i}) eq 'ARRAY') { + my ($itemidx,$fullpath,$relpath); for (my $j=0; $j<@{$dirorder{$i}}; $j++) { - if ($dirorder{$i}->[$j] eq $container) { - $itemidx = $j; + if (ref($dirorder{$referrer{$i}}) eq 'ARRAY') { + my $container = $dirorder{$referrer{$i}}->[-1]; + for (my $j=0; $j<@{$dirorder{$i}}; $j++) { + if ($dirorder{$i}->[$j] eq $container) { + $itemidx = $j; + } + } } } - } - if ($itemidx eq '') { - $itemidx = 0; - } - if (grep(/^\Q$referrer{$i}\E$/,@archdirs)) { - if ($mapinner{$referrer{$i}}) { - $fullpath = "$prefix$dir/$docstype/$mapinner{$referrer{$i}}"; - for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) { - if (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) { - unless (defined($newseqid{$dirorder{$i}->[$j]})) { - $fullpath .= '/'.$titles{$dirorder{$i}->[$j]}; - $relpath .= '/'.$titles{$dirorder{$i}->[$j]}; - if (!-e $fullpath) { - mkdir($fullpath,0755); + if ($itemidx ne '') { + if (grep(/^\Q$referrer{$i}\E$/,@archdirs)) { + if ($mapinner{$referrer{$i}}) { + $fullpath = "$prefix$dir/$docstype/$mapinner{$referrer{$i}}"; + for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) { + if (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) { + unless (defined($newseqid{$dirorder{$i}->[$j]})) { + $fullpath .= '/'.$titles{$dirorder{$i}->[$j]}; + $relpath .= '/'.$titles{$dirorder{$i}->[$j]}; + if (!-e $fullpath) { + mkdir($fullpath,0755); + } + } + } else { + last; } } - } else { - last; } - } - } - } elsif ($newdest{$referrer{$i}}) { - $fullpath = $newdest{$referrer{$i}}; - for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) { - if ($env{'form.archive_'.$dirorder{$i}->[$j]} eq 'discard') { - $orphaned{$i} = $env{'form.archive_'.$dirorder{$i}->[$j]}; - last; - } elsif (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) { - unless (defined($newseqid{$dirorder{$i}->[$j]})) { - $fullpath .= '/'.$titles{$dirorder{$i}->[$j]}; - $relpath .= '/'.$titles{$dirorder{$i}->[$j]}; - if (!-e $fullpath) { - mkdir($fullpath,0755); + } elsif ($newdest{$referrer{$i}}) { + $fullpath = $newdest{$referrer{$i}}; + for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) { + if ($env{'form.archive_'.$dirorder{$i}->[$j]} eq 'discard') { + $orphaned{$i} = $env{'form.archive_'.$dirorder{$i}->[$j]}; + last; + } elsif (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) { + unless (defined($newseqid{$dirorder{$i}->[$j]})) { + $fullpath .= '/'.$titles{$dirorder{$i}->[$j]}; + $relpath .= '/'.$titles{$dirorder{$i}->[$j]}; + if (!-e $fullpath) { + mkdir($fullpath,0755); + } + } + } else { + last; } } - } else { - last; } - } - } - if ($fullpath ne '') { - if (-e "$prefix$path") { - system("mv $prefix$path $fullpath/$title"); - } - if (-e "$fullpath/$title") { - my $showpath; - if ($relpath ne '') { - $showpath = "$relpath/$title"; - } else { - $showpath = "/$title"; + if ($fullpath ne '') { + if (-e "$prefix$path") { + system("mv $prefix$path $fullpath/$title"); + } + if (-e "$fullpath/$title") { + my $showpath; + if ($relpath ne '') { + $showpath = "$relpath/$title"; + } else { + $showpath = "/$title"; + } + $result .= '
  • '.&mt('[_1] included as a dependency',$showpath).'
  • '."\n"; + } + unless ($ishome) { + my $fetch = "$fullpath/$title"; + $fetch =~ s/^\Q$prefix$dir\E//; + $prompttofetch{$fetch} = 1; + } } - $result .= '
  • '.&mt('[_1] included as a dependency',$showpath).'
  • '."\n"; - } - unless ($ishome) { - my $fetch = "$fullpath/$title"; - $fetch =~ s/^\Q$prefix$dir\E//; - $prompttofetch{$fetch} = 1; } } + } elsif ($env{'form.archive_'.$referrer{$i}} eq 'discard') { + $warning .= &mt('[_1] is a dependency of [_2], which was discarded.', + $path,$env{'form.archive_content_'.$referrer{$i}}).'
    '; } - } elsif ($env{'form.archive_'.$referrer{$i}} eq 'discard') { - $warning .= &mt('[_1] is a dependency of [_2], which was discarded.', - $path,$env{'form.archive_content_'.$referrer{$i}}).'
    '; } } else { - $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).'
    '; + $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).'
    '; } } if (keys(%todelete)) { @@ -13915,7 +13710,7 @@ sub init_user_environment { %domdef = &Apache::lonnet::get_domain_defaults($domain); } - foreach my $tool ('aboutme','blog','webdav','portfolio') { + foreach my $tool ('aboutme','blog','portfolio') { $userenv{'availabletools.'.$tool} = &Apache::lonnet::usertools_access($username,$domain,$tool,'reload', undef,\%userenv,\%domdef,\%is_adv); @@ -13928,20 +13723,6 @@ sub init_user_environment { \%userenv,\%domdef,\%is_adv); } - $userenv{'canrequest.author'} = - &Apache::lonnet::usertools_access($username,$domain,'requestauthor', - 'reload','requestauthor', - \%userenv,\%domdef,\%is_adv); - my %reqauthor = &Apache::lonnet::get('requestauthor',['author_status','author'], - $domain,$username); - my $reqstatus = $reqauthor{'author_status'}; - if ($reqstatus eq 'approval' || $reqstatus eq 'approved') { - if (ref($reqauthor{'author'}) eq 'HASH') { - $userenv{'requestauthorqueued'} = $reqstatus.':'. - $reqauthor{'author'}{'timestamp'}; - } - } - $env{'user.environment'} = "$lonids/$cookie.id"; if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id", @@ -14056,292 +13837,6 @@ sub build_release_hashes { return; } -sub update_content_constraints { - my ($cdom,$cnum,$chome,$cid) = @_; - my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); - my ($reqdmajor,$reqdminor) = split(/\./,$curr_reqd_hash{'internal.releaserequired'}); - my %checkresponsetypes; - foreach my $key (keys(%Apache::lonnet::needsrelease)) { - my ($item,$name,$value) = split(/:/,$key); - if ($item eq 'resourcetag') { - if ($name eq 'responsetype') { - $checkresponsetypes{$value} = $Apache::lonnet::needsrelease{$key} - } - } - } - my $navmap = Apache::lonnavmaps::navmap->new(); - if (defined($navmap)) { - my %allresponses; - foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { - my %responses = $res->responseTypes(); - foreach my $key (keys(%responses)) { - next unless(exists($checkresponsetypes{$key})); - $allresponses{$key} += $responses{$key}; - } - } - foreach my $key (keys(%allresponses)) { - my ($major,$minor) = split(/\./,$checkresponsetypes{$key}); - if (($major > $reqdmajor) || ($major == $reqdmajor && $minor > $reqdminor)) { - ($reqdmajor,$reqdminor) = ($major,$minor); - } - } - undef($navmap); - } - unless (($reqdmajor eq '') && ($reqdminor eq '')) { - &Apache::lonnet::update_released_required($reqdmajor.'.'.$reqdminor,$cdom,$cnum,$chome,$cid); - } - return; -} - -sub parse_supplemental_title { - my ($title) = @_; - - my ($foldertitle,$renametitle); - if ($title =~ /&&&/) { - $title = &HTML::Entites::decode($title); - } - if ($title =~ m/^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/) { - $renametitle=$4; - my ($time,$uname,$udom) = ($1,$2,$3); - $foldertitle=&Apache::lontexconvert::msgtexconverted($4); - my $name = &plainname($uname,$udom); - $name = &HTML::Entities::encode($name,'"<>&\''); - $renametitle = &HTML::Entities::encode($renametitle,'"<>&\''); - $title=''.&Apache::lonlocal::locallocaltime($time).' '. - $name.':
    '.$foldertitle; - } - if (wantarray) { - return ($title,$foldertitle,$renametitle); - } - return $title; -} - -sub symb_to_docspath { - my ($symb) = @_; - return unless ($symb); - my ($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($symb); - if ($resurl=~/\.(sequence|page)$/) { - $mapurl=$resurl; - } elsif ($resurl eq 'adm/navmaps') { - $mapurl=$env{'course.'.$env{'request.course.id'}.'.url'}; - } - my $mapresobj; - my $navmap = Apache::lonnavmaps::navmap->new(); - if (ref($navmap)) { - $mapresobj = $navmap->getResourceByUrl($mapurl); - } - $mapurl=~s{^.*/([^/]+)\.(\w+)$}{$1}; - my $type=$2; - my $path; - if (ref($mapresobj)) { - my $pcslist = $mapresobj->map_hierarchy(); - if ($pcslist ne '') { - foreach my $pc (split(/,/,$pcslist)) { - next if ($pc <= 1); - my $res = $navmap->getByMapPc($pc); - if (ref($res)) { - my $thisurl = $res->src(); - $thisurl=~s{^.*/([^/]+)\.\w+$}{$1}; - my $thistitle = $res->title(); - $path .= '&'. - &Apache::lonhtmlcommon::entity_encode($thisurl).'&'. - &Apache::lonhtmlcommon::entity_encode($thistitle). - ':'.$res->randompick(). - ':'.$res->randomout(). - ':'.$res->encrypted(). - ':'.$res->randomorder(). - ':'.$res->is_page(); - } - } - } - $path =~ s/^\&//; - my $maptitle = $mapresobj->title(); - if ($mapurl eq 'default') { - $maptitle = 'Main Course Documents'; - } - $path .= (($path ne '')? '&' : ''). - &Apache::lonhtmlcommon::entity_encode($mapurl).'&'. - &Apache::lonhtmlcommon::entity_encode($maptitle). - ':'.$mapresobj->randompick(). - ':'.$mapresobj->randomout(). - ':'.$mapresobj->encrypted(). - ':'.$mapresobj->randomorder(). - ':'.$mapresobj->is_page(); - } else { - my $maptitle = &Apache::lonnet::gettitle($mapurl); - my $ispage = (($type eq 'page')? 1 : ''); - if ($mapurl eq 'default') { - $maptitle = 'Main Course Documents'; - } - $path = &Apache::lonhtmlcommon::entity_encode($mapurl).'&'. - &Apache::lonhtmlcommon::entity_encode($maptitle).':::::'.$ispage; - } - unless ($mapurl eq 'default') { - $path = 'default&'. - &Apache::lonhtmlcommon::entity_encode('Main Course Documents'). - ':::::&'.$path; - } - return $path; -} - -sub captcha_display { - my ($context,$lonhost) = @_; - my ($output,$error); - my ($captcha,$pubkey,$privkey) = &get_captcha_config($context,$lonhost); - if ($captcha eq 'original') { - $output = &create_captcha(); - unless ($output) { - $error = 'captcha'; - } - } elsif ($captcha eq 'recaptcha') { - $output = &create_recaptcha($pubkey); - unless ($output) { - $error = 'recaptcha'; - } - } - return ($output,$error); -} - -sub captcha_response { - my ($context,$lonhost) = @_; - my ($captcha_chk,$captcha_error); - my ($captcha,$pubkey,$privkey) = &get_captcha_config($context,$lonhost); - if ($captcha eq 'original') { - ($captcha_chk,$captcha_error) = &check_captcha(); - } elsif ($captcha eq 'recaptcha') { - $captcha_chk = &check_recaptcha($privkey); - } else { - $captcha_chk = 1; - } - return ($captcha_chk,$captcha_error); -} - -sub get_captcha_config { - my ($context,$lonhost) = @_; - my ($captcha,$pubkey,$privkey,$hashtocheck); - my $hostname = &Apache::lonnet::hostname($lonhost); - my $serverhomeID = &Apache::lonnet::get_server_homeID($hostname); - my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID); - if ($context eq 'usercreation') { - my %domconfig = &Apache::lonnet::get_dom('configuration',[$context],$serverhomedom); - if (ref($domconfig{$context}) eq 'HASH') { - $hashtocheck = $domconfig{$context}{'cancreate'}; - if (ref($hashtocheck) eq 'HASH') { - if ($hashtocheck->{'captcha'} eq 'recaptcha') { - if (ref($hashtocheck->{'recaptchakeys'}) eq 'HASH') { - $pubkey = $hashtocheck->{'recaptchakeys'}{'public'}; - $privkey = $hashtocheck->{'recaptchakeys'}{'private'}; - } - if ($privkey && $pubkey) { - $captcha = 'recaptcha'; - } else { - $captcha = 'original'; - } - } elsif ($hashtocheck->{'captcha'} ne 'notused') { - $captcha = 'original'; - } - } - } else { - $captcha = 'captcha'; - } - } elsif ($context eq 'login') { - my %domconfhash = &Apache::loncommon::get_domainconf($serverhomedom); - if ($domconfhash{$serverhomedom.'.login.captcha'} eq 'recaptcha') { - $pubkey = $domconfhash{$serverhomedom.'.login.recaptchakeys_public'}; - $privkey = $domconfhash{$serverhomedom.'.login.recaptchakeys_private'}; - if ($privkey && $pubkey) { - $captcha = 'recaptcha'; - } else { - $captcha = 'original'; - } - } elsif ($domconfhash{$serverhomedom.'.login.captcha'} eq 'original') { - $captcha = 'original'; - } - } - return ($captcha,$pubkey,$privkey); -} - -sub create_captcha { - my %captcha_params = &captcha_settings(); - my ($output,$maxtries,$tries) = ('',10,0); - while ($tries < $maxtries) { - $tries ++; - my $captcha = Authen::Captcha->new ( - output_folder => $captcha_params{'output_dir'}, - data_folder => $captcha_params{'db_dir'}, - ); - my $md5sum = $captcha->generate_code($captcha_params{'numchars'}); - - if (-e $Apache::lonnet::perlvar{'lonCaptchaDir'}.'/'.$md5sum.'.png') { - $output = ''."\n". - &mt('Type in the letters/numbers shown below').' '. - '
    '. - ''; - last; - } - } - return $output; -} - -sub captcha_settings { - my %captcha_params = ( - output_dir => $Apache::lonnet::perlvar{'lonCaptchaDir'}, - www_output_dir => "/captchaspool", - db_dir => $Apache::lonnet::perlvar{'lonCaptchaDb'}, - numchars => '5', - ); - return %captcha_params; -} - -sub check_captcha { - my ($captcha_chk,$captcha_error); - my $code = $env{'form.code'}; - my $md5sum = $env{'form.crypt'}; - my %captcha_params = &captcha_settings(); - my $captcha = Authen::Captcha->new( - output_folder => $captcha_params{'output_dir'}, - data_folder => $captcha_params{'db_dir'}, - ); - my $captcha_chk = $captcha->check_code($code,$md5sum); - my %captcha_hash = ( - 0 => 'Code not checked (file error)', - -1 => 'Failed: code expired', - -2 => 'Failed: invalid code (not in database)', - -3 => 'Failed: invalid code (code does not match crypt)', - ); - if ($captcha_chk != 1) { - $captcha_error = $captcha_hash{$captcha_chk} - } - return ($captcha_chk,$captcha_error); -} - -sub create_recaptcha { - my ($pubkey) = @_; - my $captcha = Captcha::reCAPTCHA->new; - return $captcha->get_options_setter({theme => 'white'})."\n". - $captcha->get_html($pubkey). - &mt('If either word is hard to read, [_1] will replace them.', - 'reCAPTCHA refresh'). - '

    '; -} - -sub check_recaptcha { - my ($privkey) = @_; - my $captcha_chk; - my $captcha = Captcha::reCAPTCHA->new; - my $captcha_result = - $captcha->check_answer( - $privkey, - $ENV{'REMOTE_ADDR'}, - $env{'form.recaptcha_challenge_field'}, - $env{'form.recaptcha_response_field'}, - ); - if ($captcha_result->{is_valid}) { - $captcha_chk = 1; - } - return $captcha_chk; -} - =pod =back