--- loncom/interface/loncommon.pm 2010/12/30 21:49:15 1.992 +++ loncom/interface/loncommon.pm 2011/07/04 09:24:58 1.1014 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.992 2010/12/30 21:49:15 raeburn Exp $ +# $Id: loncommon.pm,v 1.1014 2011/07/04 09:24:58 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -409,7 +409,7 @@ sub studentbrowser_javascript { <script type="text/javascript" language="Javascript"> // <![CDATA[ var stdeditbrowser; - function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) { + function openstdbrowser(formname,uname,udom,clicker,roleflag,ignorefilter,courseadvonly) { var url = '/adm/pickstudent?'; var filter; if (!ignorefilter) { @@ -421,7 +421,8 @@ sub studentbrowser_javascript { } } url += 'form=' + formname + '&unameelement='+uname+ - '&udomelement='+udom; + '&udomelement='+udom+ + '&clicker='+clicker; if (roleflag) { url+="&roles=1"; } if (courseadvonly) { url+="&courseadvonly=1"; } var title = 'Student_Browser'; @@ -435,15 +436,37 @@ sub studentbrowser_javascript { ENDSTDBRW } +sub resourcebrowser_javascript { + unless ($env{'request.course.id'}) { return ''; } + return (<<'ENDRESBRW'); +<script type="text/javascript" language="Javascript"> +// <![CDATA[ + var reseditbrowser; + function openresbrowser(formname,reslink) { + var url = '/adm/pickresource?form='+formname+'&reslink='+reslink; + var title = 'Resource_Browser'; + var options = 'scrollbars=1,resizable=1,menubar=0'; + options += ',width=700,height=500'; + reseditbrowser = open(url,title,options,'1'); + reseditbrowser.focus(); + } +// ]]> +</script> +ENDRESBRW +} + sub selectstudent_link { - my ($form,$unameele,$udomele,$courseadvonly)=@_; - my $callargs = "'".$form."','".$unameele."','".$udomele."'"; + my ($form,$unameele,$udomele,$courseadvonly,$clickerid)=@_; + my $callargs = "'".&Apache::lonhtmlcommon::entity_encode($form)."','". + &Apache::lonhtmlcommon::entity_encode($unameele)."','". + &Apache::lonhtmlcommon::entity_encode($udomele)."'"; if ($env{'request.course.id'}) { if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'}) && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}. '/'.$env{'request.course.sec'})) { return ''; } + $callargs.=",'".&Apache::lonhtmlcommon::entity_encode($clickerid)."'"; if ($courseadvonly) { $callargs .= ",'',1,1"; } @@ -452,7 +475,7 @@ sub selectstudent_link { &mt('Select User').'</a></span>'; } if ($env{'request.role'}=~/^(au|dc|su)/) { - $callargs .= ",1"; + $callargs .= ",'',1"; return '<span class="LC_nobreak">'. '<a href="javascript:openstdbrowser('.$callargs.');">'. &mt('Select User').'</a></span>'; @@ -460,6 +483,19 @@ sub selectstudent_link { return ''; } +sub selectresource_link { + my ($form,$reslink,$arg)=@_; + + my $callargs = "'".&Apache::lonhtmlcommon::entity_encode($form)."','". + &Apache::lonhtmlcommon::entity_encode($reslink)."'"; + unless ($env{'request.course.id'}) { return $arg; } + return '<span class="LC_nobreak">'. + '<a href="javascript:openresbrowser('.$callargs.');">'. + $arg.'</a></span>'; +} + + + sub authorbrowser_javascript { return <<"ENDAUTHORBRW"; <script type="text/javascript" language="JavaScript"> @@ -1722,7 +1758,7 @@ sub create_workbook { return (undef); } # - $workbook->set_tempdir('/home/httpd/perl/tmp'); + $workbook->set_tempdir(LONCAPA::tempdir()); # my $format = &Apache::loncommon::define_excel_formats($workbook); return ($workbook,$filename,$format); @@ -3423,6 +3459,7 @@ sub get_previous_attempt { my $data=$parts[-1]; next if ($data eq 'foilorder'); pop(@parts); + $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.' </th>'; if ($data eq 'type') { unless ($showsurv) { my $id = join(',',@parts); @@ -3431,10 +3468,7 @@ sub get_previous_attempt { $lasthidden{$ign.'.'.$id} = 1; } } - delete($lasthash{$key}); - } else { - $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.' </th>'; - } + } } else { if ($#parts == 0) { $prevattempts.='<th>'.$parts[0].'</th>'; @@ -3551,7 +3585,7 @@ sub get_previous_attempt { sub format_previous_attempt_value { my ($key,$value) = @_; - if ($key =~ /timestamp/) { + if (($key =~ /timestamp/) || ($key=~/duedate/)) { $value = &Apache::lonlocal::locallocaltime($value); } elsif (ref($value) eq 'ARRAY') { $value = '('.join(', ', @{ $value }).')'; @@ -3560,8 +3594,8 @@ sub format_previous_attempt_value { my @anskeys = sort(keys(%answers)); if (@anskeys == 1) { my $answer = $answers{$anskeys[0]}; - if ($answer =~ m{\Q\0\E}) { - $answer =~ s{\Q\0\E}{, }g; + if ($answer =~ m{\0}) { + $answer =~ s{\0}{,}g; } my $tag_internal_answer_name = 'INTERNAL'; if ($anskeys[0] eq $tag_internal_answer_name) { @@ -3572,8 +3606,8 @@ sub format_previous_attempt_value { } else { foreach my $ans (@anskeys) { my $answer = $answers{$ans}; - if ($answer =~ m{\Q\0\E}) { - $answer =~ s{\Q\0\E}{, }g; + if ($answer =~ m{\0}) { + $answer =~ s{\0}{,}g; } $value .= $ans.'='.$answer.'<br />';; } @@ -4272,8 +4306,7 @@ sub get_domainconf { if (ref($domconfig{'login'}{$key}) eq 'HASH') { if ($key eq 'loginvia') { if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') { - my @ids = &Apache::lonnet::current_machine_ids(); - foreach my $hostname (@ids) { + foreach my $hostname (keys(%{$domconfig{'login'}{'loginvia'}})) { if (ref($domconfig{'login'}{'loginvia'}{$hostname}) eq 'HASH') { if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) { my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'}; @@ -4282,7 +4315,7 @@ sub get_domainconf { $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'}; } else { - $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'}; + $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'}; } if ($domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}) { $designhash{$udom.'.login.loginvia_exempt_'.$hostname} = $domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}; @@ -4486,7 +4519,7 @@ Returns: HTML div with $content sub head_subbox { my ($content)=@_; my $output = - '<div id="LC_head_subbox">' + '<div class="LC_head_subbox">' .$content .'</div>' } @@ -4925,6 +4958,10 @@ form, .inline { text-decoration:none; } +.LC_setting { + text-decoration:underline; +} + .LC_error { color: red; font-size: larger; @@ -5089,14 +5126,16 @@ td.LC_table_cell_checkbox { overflow: hidden; margin: 0; padding: 0; + text-align: left; } -#LC_head_subbox { +.LC_head_subbox { clear:both; background: #F8F8F8; /* $sidebg; */ border: 1px solid $sidebg; margin: 0 0 10px 0; padding: 3px; + text-align: left; } .LC_fontsize_medium { @@ -5119,6 +5158,7 @@ td.LC_table_cell_checkbox { li.LC_menubuttons_inline_text img,a { cursor:pointer; + text-decoration: none; } .LC_menubuttons_link { @@ -5166,14 +5206,6 @@ table.LC_nested { width: 100%; } -.ui-accordion, -.ui-accordion table.LC_data_table, -.ui-accordion table.LC_nested_outer{ - border: 0px; - border-spacing: 0px; - margin: 3px; -} - table.LC_data_table tr th, table.LC_calendar tr th, table.LC_prior_tries tr th, @@ -5289,22 +5321,6 @@ table.LC_nested tr td.LC_right_item { text-align: right; } -.ui-accordion table.LC_nested tr.LC_odd_row td.LC_left_item, -.ui-accordion table.LC_nested tr.LC_even_row td.LC_left_item { - text-align: right; - width: 40%; - padding-right:10px; - vertical-align: top; - padding: 5px; -} - -.ui-accordion table.LC_nested tr.LC_odd_row td.LC_right_item, -.ui-accordion table.LC_nested tr.LC_even_row td.LC_right_item { - text-align: left; - width: 60%; - padding: 2px 4px; -} - table.LC_nested tr.LC_odd_row td { background-color: #EEEEEE; } @@ -6064,6 +6080,7 @@ fieldset > legend { #LC_nav_bar { float: left; + background-color: $pgbg_or_bgcolor; margin: 0 0 2px 0; } @@ -6072,6 +6089,7 @@ fieldset > legend { padding: 0; font-weight: bold; text-align: center; + background-color: $pgbg_or_bgcolor; } #LC_nav_bar em { @@ -6082,6 +6100,7 @@ fieldset > legend { ol.LC_primary_menu { float: right; margin: 0; + background-color: $pgbg_or_bgcolor; } ol#LC_PathBreadcrumbs { @@ -6141,6 +6160,7 @@ ul#LC_secondary_menu { padding: 0; margin: 0; width: 100%; + text-align: left; } ul#LC_secondary_menu li { @@ -6274,7 +6294,6 @@ ul.LC_TabContentBigger li.active b { background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat; color:$font; border: 0; - cursor:default; } @@ -6530,12 +6549,6 @@ ul.LC_funclist li { line-height: 150%; } -.ui-accordion .LC_advanced_toggle { - float: right; - font-size: 90%; - padding: 0px 4px -} - .LC_hidden { display: none; } @@ -6877,6 +6890,19 @@ sub validate_page { } } + +sub start_scrollbox { + my ($outerwidth,$width,$height)=@_; + unless ($outerwidth) { $outerwidth='520px'; } + unless ($width) { $width='500px'; } + unless ($height) { $height='200px'; } + return "<table style='width: $outerwidth; border: 1px solid black;'><tr><td style='width: $width;' bgcolor='#FFFFFF'><div style='overflow:auto; width:$width; height: $height;'>"; +} + +sub end_scrollbox { + return '</td></tr></table>'; +} + sub simple_error_page { my ($r,$title,$msg) = @_; my $page = @@ -7676,7 +7702,7 @@ sub get_secgrprole_info { } sub user_picker { - my ($dom,$srch,$forcenewuser,$caller,$cancreate,$usertype) = @_; + my ($dom,$srch,$forcenewuser,$caller,$cancreate,$usertype,$context) = @_; my $currdom = $dom; my %curr_selected = ( srchin => 'dom', @@ -7767,10 +7793,15 @@ sub user_picker { $srchtypesel .= "\n </select>\n"; my ($newuserscript,$new_user_create); - + my $context_dom = $env{'request.role.domain'}; + if ($context eq 'requestcrs') { + if ($env{'form.coursedom'} ne '') { + $context_dom = $env{'form.coursedom'}; + } + } if ($forcenewuser) { if (ref($srch) eq 'HASH') { - if ($srch->{'srchby'} eq 'uname' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchin'} eq 'dom' && $srch->{'srchdomain'} eq $env{'request.role.domain'}) { + if ($srch->{'srchby'} eq 'uname' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchin'} eq 'dom' && $srch->{'srchdomain'} eq $context_dom) { if ($cancreate) { $new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>'; } else { @@ -7809,7 +7840,7 @@ function setSearch(createnew,callingForm } } for (var i=0; i<callingForm.srchdomain.length; i++) { - if (callingForm.srchdomain.options[i].value == '$env{'request.role.domain'}') { + if (callingForm.srchdomain.options[i].value == '$context_dom') { callingForm.srchdomain.selectedIndex = i; } } @@ -8869,7 +8900,7 @@ sub modify_html_refs { if ($allfiles{$ref}) { my $newname = $orig; my ($attrib_regexp,$codebase); - my $attrib_regexp = &unescape($env{'form.embedded_attrib_'.$i}); + $attrib_regexp = &unescape($env{'form.embedded_attrib_'.$i}); if ($attrib_regexp =~ /:/) { $attrib_regexp =~ s/\:/|/g; } @@ -8878,7 +8909,7 @@ sub modify_html_refs { $count += $numchg; } if ($env{'form.embedded_codebase_'.$i} ne '') { - my $codebase = &unescape($env{'form.embedded_codebase_'.$i}); + $codebase = &unescape($env{'form.embedded_codebase_'.$i}); my $numchg = ($content =~ s/(codebase\s*=\s*["']?)\Q$codebase\E(["']?)/$1.$2/i); #' stupid emacs $codebasecount ++; } @@ -8947,7 +8978,7 @@ sub check_for_upload { &mt('Unable to upload [_1]. (size = [_2] bytes)', '<span class="LC_filename">'.$fname.'</span>', $filesize).'<br />'. - &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').'<br />'; + &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').'<br />'. '</span>'; return ('zero_bytes',$msg); }