Diff for /loncom/interface/loncommon.pm between versions 1.948.2.14 and 1.958

version 1.948.2.14, 2010/12/19 22:34:42 version 1.958, 2010/03/18 11:41:01
Line 900  sub select_language { Line 900  sub select_language {
             $langchoices{$code} = &plainlanguagedescription($id);              $langchoices{$code} = &plainlanguagedescription($id);
         }          }
     }      }
     return &select_form($selected,$name,\%langchoices);      return &select_form($selected,$name,%langchoices);
 }  }
   
 =pod  =pod
Line 1072  END Line 1072  END
   
 =pod  =pod
   
 =item * &help_open_topic($topic,$text,$stayOnPage,$width,$height,$imgid)  =item * &help_open_topic($topic,$text,$stayOnPage,$width,$height)
   
 Returns a string corresponding to an HTML link to the given help  Returns a string corresponding to an HTML link to the given help
 $topic, where $topic corresponds to the name of a .tex file in  $topic, where $topic corresponds to the name of a .tex file in
Line 1095  be useful for certain help topics with b Line 1095  be useful for certain help topics with b
 =cut  =cut
   
 sub help_open_topic {  sub help_open_topic {
     my ($topic, $text, $stayOnPage, $width, $height, $imgid) = @_;      my ($topic, $text, $stayOnPage, $width, $height) = @_;
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     $width = 350 if (not defined $width);      $width = 350 if (not defined $width);
Line 1124  sub help_open_topic { Line 1124  sub help_open_topic {
     # (Always) Add the graphic      # (Always) Add the graphic
     my $title = &mt('Online Help');      my $title = &mt('Online Help');
     my $helpicon=&lonhttpdurl("/adm/help/help.png");      my $helpicon=&lonhttpdurl("/adm/help/help.png");
     if ($imgid ne '') {  
         $imgid = ' id="'.$imgid.'"';  
     }  
     $template.=' <a target="_top" href="'.$link.'" title="'.$title.'">'      $template.=' <a target="_top" href="'.$link.'" title="'.$title.'">'
               .'<img src="'.$helpicon.'" border="0"'                .'<img src="'.$helpicon.'" border="0"'
               .' alt="'.&mt('Help: [_1]',$topic).'"'                .' alt="'.&mt('Help: [_1]',$topic).'"'
               .' title="'.$title.'" style="vertical-align:middle;"'.$imgid                .' title="'.$title.'" style="vertical-align:middle;"' 
               .' /></a>';                .' /></a>';
     if ($text ne "") {      if ($text ne "") {
         $template.='</span>';          $template.='</span>';
     }      }
     return $template;      return $template;
Line 1205  ENDOUTPUT Line 1202  ENDOUTPUT
 sub help_open_menu {  sub help_open_menu {
     my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text)       my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) 
  = @_;       = @_;    
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 1;
     # only use pop-up help (stayOnPage == 0)  
     # if environment.remote is on (using remote control UI)  
     if ($env{'environment.remote'} eq 'off' ) {  
         $stayOnPage=1;  
     }  
     my $output;      my $output;
     if ($component_help) {      if ($component_help) {
  if (!$text) {   if (!$text) {
Line 1231  sub help_open_menu { Line 1223  sub help_open_menu {
 sub top_nav_help {  sub top_nav_help {
     my ($text) = @_;      my ($text) = @_;
     $text = &mt($text);      $text = &mt($text);
     my $stay_on_page =       my $stay_on_page = 1;
  ($env{'environment.remote'} eq 'off' );  
     my $link = ($stay_on_page) ? "javascript:helpMenu('display')"      my $link = ($stay_on_page) ? "javascript:helpMenu('display')"
                      : "javascript:helpMenu('open')";                       : "javascript:helpMenu('open')";
     my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);      my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);
Line 1247  END Line 1239  END
   
 sub help_menu_js {  sub help_menu_js {
     my ($text) = @_;      my ($text) = @_;
       my $stayOnPage = 1;
     my $stayOnPage =   
  ($env{'environment.remote'} eq 'off' );  
   
     my $width = 620;      my $width = 620;
     my $height = 600;      my $height = 600;
     my $helptopic=&general_help();      my $helptopic=&general_help();
Line 1307  sub help_open_bug { Line 1296  sub help_open_bug {
     unless ($env{'user.adv'}) { return ''; }      unless ($env{'user.adv'}) { return ''; }
     unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; }      unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; }
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);  
     if ($env{'environment.remote'} eq 'off' ) {  
  $stayOnPage=1;   $stayOnPage=1;
     }  
     $width = 600 if (not defined $width);      $width = 600 if (not defined $width);
     $height = 600 if (not defined $height);      $height = 600 if (not defined $height);
   
Line 1351  sub help_open_faq { Line 1337  sub help_open_faq {
     unless ($env{'user.adv'}) { return ''; }      unless ($env{'user.adv'}) { return ''; }
     unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; }      unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; }
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);  
     if ($env{'environment.remote'} eq 'off' ) {  
  $stayOnPage=1;   $stayOnPage=1;
     }  
     $width = 350 if (not defined $width);      $width = 350 if (not defined $width);
     $height = 400 if (not defined $height);      $height = 400 if (not defined $height);
   
Line 1803  sub domain_select { Line 1786  sub domain_select {
  return &multiple_select_form($name,$value,4,\%domains);   return &multiple_select_form($name,$value,4,\%domains);
     } else {      } else {
  $domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];   $domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];
  return &select_form($name,$value,\%domains);   return &select_form($name,$value,%domains);
     }      }
 }  }
   
Line 1865  sub multiple_select_form { Line 1848  sub multiple_select_form {
   
 =pod  =pod
   
 =item * &select_form($defdom,$name,$hashref,$onchange)  =item * &select_form($defdom,$name,%hash)
   
 Returns a string containing a <select name='$name' size='1'> form to   Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select options from a ref to a hash containing:  allow a user to select options from a hash option_name => displayed text.  
 option_name => displayed text. An optional $onchange can include  
 a javascript onchange item, e.g., onchange="this.form.submit();"  
   
 See lonrights.pm for an example invocation and use.  See lonrights.pm for an example invocation and use.
   
 =cut  =cut
   
 #-------------------------------------------  #-------------------------------------------
 sub select_form {  sub select_form {
     my ($def,$name,$hashref,$onchange) = @_;      my ($def,$name,%hash) = @_;
     return unless (ref($hashref) eq 'HASH');      my $selectform = "<select name=\"$name\" size=\"1\">\n";
     if ($onchange) {  
         $onchange = ' onchange="'.$onchange.'"';  
     }  
     my $selectform = "<select name=\"$name\" size=\"1\"$onchange>\n";  
     my @keys;      my @keys;
     if (exists($hashref->{'select_form_order'})) {      if (exists($hash{'select_form_order'})) {
         @keys=@{$hashref->{'select_form_order'}};   @keys=@{$hash{'select_form_order'}};
     } else {      } else {
         @keys=sort(keys(%{$hashref}));   @keys=sort(keys(%hash));
     }      }
     foreach my $key (@keys) {      foreach my $key (@keys) {
         $selectform.=          $selectform.=
     '<option value="'.&HTML::Entities::encode($key,'"<>&').'" '.      '<option value="'.&HTML::Entities::encode($key,'"<>&').'" '.
             ($key eq $def ? 'selected="selected" ' : '').              ($key eq $def ? 'selected="selected" ' : '').
                 ">".$hashref->{$key}."</option>\n";                  ">".$hash{$key}."</option>\n";
     }      }
     $selectform.="</select>";      $selectform.="</select>";
     return $selectform;      return $selectform;
Line 1912  sub display_filter { Line 1888  sub display_filter {
            &mt('Filter [_1]',             &mt('Filter [_1]',
    &select_form($env{'form.displayfilter'},     &select_form($env{'form.displayfilter'},
  'displayfilter',   'displayfilter',
  {'currentfolder' => 'Current folder/page',   ('currentfolder' => 'Current folder/page',
  'containing' => 'Containing phrase',   'containing' => 'Containing phrase',
  'none' => 'None'})).   'none' => 'None'))).
  '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>';   '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>';
 }  }
   
Line 2284  function changed_text(choice,currentform Line 2260  function changed_text(choice,currentform
 }  }
   
 function set_auth_radio_buttons(newvalue,currentform) {  function set_auth_radio_buttons(newvalue,currentform) {
     var numauthchoices = currentform.login.length;  
     if (typeof numauthchoices  == "undefined") {  
         return;  
     }  
     var i=0;      var i=0;
     while (i < numauthchoices) {) {      while (i < currentform.login.length) {
         if (currentform.login[i].value == newvalue) { break; }          if (currentform.login[i].value == newvalue) { break; }
         i++;          i++;
     }      }
     if (i == numauthchoices) {      if (i == currentform.login.length) {
         return;          return;
     }      }
     current.radiovalue = newvalue;      current.radiovalue = newvalue;
Line 3261  sub filecategoryselect { Line 3233  sub filecategoryselect {
     my ($name,$value)=@_;      my ($name,$value)=@_;
     return &select_form($value,$name,      return &select_form($value,$name,
  '' => &mt('Any category'),   '' => &mt('Any category'),
  {'' => &mt('Any category'), map { $_,$_ } sort(keys(%category_extensions))});   map { $_,$_ } sort(keys(%category_extensions)));
 }  }
   
 =pod  =pod
Line 3426  sub get_previous_attempt { Line 3398  sub get_previous_attempt {
       }        }
       $prevattempts=&start_data_table().&start_data_table_header_row();        $prevattempts=&start_data_table().&start_data_table_header_row();
       $prevattempts.='<th>'.&mt('History').'</th>';        $prevattempts.='<th>'.&mt('History').'</th>';
       my (%typeparts,%lasthidden);        my %typeparts;
       my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'});        my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'});
       foreach my $key (sort(keys(%lasthash))) {        foreach my $key (sort(keys(%lasthash))) {
  my ($ign,@parts) = split(/\./,$key);   my ($ign,@parts) = split(/\./,$key);
Line 3437  sub get_previous_attempt { Line 3409  sub get_previous_attempt {
               unless ($showsurv) {                unless ($showsurv) {
                   my $id = join(',',@parts);                    my $id = join(',',@parts);
                   $typeparts{$ign.'.'.$id} = $lasthash{$key};                    $typeparts{$ign.'.'.$id} = $lasthash{$key};
                   if (($lasthash{$key} eq 'anonsurvey') || ($lasthash{$key} eq 'anonsurveycred')) {  
                       $lasthidden{$ign.'.'.$id} = 1;  
                   }  
               }                }
               delete($lasthash{$key});                delete($lasthash{$key});
           } else {            } else {
Line 3454  sub get_previous_attempt { Line 3423  sub get_previous_attempt {
  }   }
       }        }
       $prevattempts.=&end_data_table_header_row();        $prevattempts.=&end_data_table_header_row();
         my %lasthidden;
       if ($getattempt eq '') {        if ($getattempt eq '') {
  for ($version=1;$version<=$returnhash{'version'};$version++) {   for ($version=1;$version<=$returnhash{'version'};$version++) {
             my @hidden;              my @hidden;
Line 3461  sub get_previous_attempt { Line 3431  sub get_previous_attempt {
                 foreach my $id (keys(%typeparts)) {                  foreach my $id (keys(%typeparts)) {
                     if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) {                      if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) {
                         push(@hidden,$id);                          push(@hidden,$id);
                           $lasthidden{$id} = 1;
                       } elsif ($lasthidden{$id}) {
                           if (exists($returnhash{$version.':'.$id.'.award'})) {
                               delete($lasthidden{$id});
                           }
                     }                      }
                 }                  }
             }              }
Line 3562  sub format_previous_attempt_value { Line 3537  sub format_previous_attempt_value {
  $value = &Apache::lonlocal::locallocaltime($value);   $value = &Apache::lonlocal::locallocaltime($value);
     } elsif (ref($value) eq 'ARRAY') {      } elsif (ref($value) eq 'ARRAY') {
  $value = '('.join(', ', @{ $value }).')';   $value = '('.join(', ', @{ $value }).')';
     } elsif ($key =~ /answerstring$/) {  
         my %answers = &Apache::lonnet::str2hash($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;  
             }  
             my $tag_internal_answer_name = 'INTERNAL';  
             if ($anskeys[0] eq $tag_internal_answer_name) {  
                 $value = $answer;  
             } else {  
                 $value = $anskeys[0].'='.$answer;  
             }  
         } else {  
             foreach my $ans (@anskeys) {  
                 my $answer = $answers{$ans};  
                 if ($answer =~ m{\Q\0\E}) {  
                     $answer =~ s{\Q\0\E}{, }g;  
                 }  
                 $value .=  $ans.'='.$answer.'<br />';;  
             }  
         }  
     } else {      } else {
  $value = &unescape($value);   $value = &unescape($value);
     }      }
Line 3735  sub submlink { Line 3687  sub submlink {
     }      }
     if (!$symb) { $symb=&Apache::lonnet::symbread(); }      if (!$symb) { $symb=&Apache::lonnet::symbread(); }
     $symb=&escape($symb);      $symb=&escape($symb);
     if ($target) { $target=" target=\"$target\""; }      if ($target) { $target="target=\"$target\""; }
     return      return '<a href="/adm/grades?&command=submission&'.
         '<a href="/adm/grades?command=submission'.   'symb='.$symb.'&student='.$uname.
         '&amp;symb='.$symb.   '&userdom='.$udom.'" '.$target.'>'.$text.'</a>';
         '&amp;student='.$uname.  
         '&amp;userdom='.$udom.'"'.  
         $target.'>'.$text.'</a>';  
 }  }
 ##############################################  ##############################################
   
Line 3863  sub findallcourses { Line 3812  sub findallcourses {
         $udom = $env{'user.domain'};          $udom = $env{'user.domain'};
     }      }
     if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {      if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
         my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1});          my %roleshash = &Apache::lonnet::dump('roles',$udom,$uname);
         my %roleshash = &Apache::lonnet::dump('roles',$udom,$uname,'.',undef,  
                                               $extra);  
         if (!%roles) {          if (!%roles) {
             %roles = (              %roles = (
                        cc => 1,                         cc => 1,
Line 4589  Inputs: Line 4536  Inputs:
   
 =item * $bgcolor, used to override the bgcolor on a webpage to a specific value  =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   #SD
          'Switch To Inline Menu' link  #RC =item * $no_inline_link, if true and in remote mode, don't show the 
   #RC          'Switch To Inline Menu' link
   #RC 
 =item * $args, optional argument valid values are  =item * $args, optional argument valid values are
             no_auto_mt_title -> prevents &mt()ing the title arg              no_auto_mt_title -> prevents &mt()ing the title arg
             inherit_jsmath -> when creating popup window in a page,              inherit_jsmath -> when creating popup window in a page,
Line 4670  sub bodytag { Line 4618  sub bodytag {
     } else {      } else {
  $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});   $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
     }      }
       
     my $titleinfo = '<h1>'.$title.'</h1>';      my $titleinfo = '<h1>'.$title.'</h1>';
     #      #
     # Extra info if you are the DC      # Extra info if you are the DC
Line 4686  sub bodytag { Line 4634  sub bodytag {
     $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;      $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;
     &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);      &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
   
     if ($env{'environment.remote'} eq 'off') {  
         # No Remote          # No Remote
         if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') {           if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { 
             return $bodytag;               return $bodytag; 
Line 4742  sub bodytag { Line 4689  sub bodytag {
         }          }
   
         return $bodytag;          return $bodytag;
     }  
   
 #  
 # Top frame rendering, Remote is up  
 #  
   
     my $imgsrc = $img;  
     if ($img =~ /^\/adm/) {  
         $imgsrc = &lonhttpdurl($img);  
     }  
     my $upperleft='<img src="'.$imgsrc.'" alt="'.$function.'" />';  
   
     # Explicit link to get inline menu  
     my $menu= ($no_inline_link?''  
        :'<a href="/adm/remote?action=collapse" target="_top">'.&mt('Switch to Inline Menu Mode').'</a>');  
   
     if ($dc_info) {  
         $dc_info = qq|<span class="LC_cusr_subheading">($dc_info)</span>|;  
     }  
   
     $bodytag .= qq|<div id="LC_nav_bar">$name $role</div>  
             <ol class="LC_primary_menu LC_right">  
                 <li>$menu</li>  
             </ol><div id="LC_realm"> $realm $dc_info</div>| unless $env{'form.inhibitmenu'};  
     return(<<ENDBODY);  
 $bodytag  
 <table id="LC_title_bar" class="LC_with_remote">  
 <tr><td>$upperleft</td>  
     <td>$messages&nbsp;</td>  
 </tr>  
 <tr><td>$titleinfo $dc_info $menu</td>  
 </tr>  
 </table>  
 ENDBODY  
 }  }
   
 sub dc_courseid_toggle {  sub dc_courseid_toggle {
     my ($dc_info) = @_;      my ($dc_info) = @_;
     return ' <span id="dccidtext" class="LC_cusr_subheading LC_nobreak">'.      return ' <span id="dccidtext" class="LC_cusr_subheading">'.
            '<a href="javascript:showCourseID();">'.             '<a href="javascript:showCourseID();">'.
            &mt('(More ...)').'</a></span>'.             &mt('(More ...)').'</a></span>'.
            '<div id="dccid" class="LC_dccid">'.$dc_info.'</div>';             '<div id="dccid" class="LC_dccid">'.$dc_info.'</div>';
Line 4807  sub make_attr_string { Line 4720  sub make_attr_string {
  delete($attr_ref->{$key});   delete($attr_ref->{$key});
     }      }
  }   }
  $attr_ref->{'onload'}  =   $attr_ref->{'onload'}  = $on_load;
     &Apache::lonmenu::loadevents().  $on_load;   $attr_ref->{'onunload'}= $on_unload;
  $attr_ref->{'onunload'}=  
     &Apache::lonmenu::unloadevents().$on_unload;  
     }  
   
 # Accessibility font enhance  
     if ($env{'browser.fontenhance'} eq 'on') {  
  my $style;  
  foreach my $key (keys(%{$attr_ref})) {  
     if (lc($key) eq 'style') {  
  $style.=$attr_ref->{$key}.';';  
  delete($attr_ref->{$key});  
     }  
  }  
  $attr_ref->{'style'}=$style.'; font-size: x-large;';  
     }      }
   
     my $attr_string;      my $attr_string;
Line 4896  sub standard_css { Line 4795  sub standard_css {
     my $vlink  = &designparm($function.'.vlink', $domain);      my $vlink  = &designparm($function.'.vlink', $domain);
     my $link   = &designparm($function.'.link',  $domain);      my $link   = &designparm($function.'.link',  $domain);
   
       my $loginbg = &designparm('login.sidebg',$domain);
       my $bgcol = &designparm('login.bgcol',$domain);
       my $textcol = &designparm('login.textcol',$domain);
   
     my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';      my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';
     my $mono                 = 'monospace';      my $mono                 = 'monospace';
     my $data_table_head      = $sidebg;      my $data_table_head      = $sidebg;
Line 4920  sub standard_css { Line 4823  sub standard_css {
       $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'        $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'
                                              : '0 3px 0 4px';                                               : '0 3px 0 4px';
   
   
     return <<END;      return <<END;
   
 /* needed for iframe to allow 100% height in FF */  /* needed for iframe to allow 100% height in FF */
Line 4936  body { Line 4840  body {
   color:$font;    color:$font;
 }  }
   
 a:focus,  a:focus {
 a:focus img {  
   color: red;    color: red;
   background: yellow;    background: yellow;
 }  }
Line 5152  td.LC_table_cell_checkbox { Line 5055  td.LC_table_cell_checkbox {
   padding: 0;    padding: 0;
 }  }
   
 /* Preliminary fix to hide breadcrumbs inside remote control window */  
 #LC_remote #LC_breadcrumbs {  
   display:none;  
 }  
   
 #LC_head_subbox {  #LC_head_subbox {
   clear:both;    clear:both;
   background: #F8F8F8; /* $sidebg; */    background: #F8F8F8; /* $sidebg; */
   border: 1px solid $sidebg;    border: 1px solid $sidebg;
   margin: 0 0 10px 0;          margin: 0 0 10px 0;      
   padding: 3px;  
 }  }
   
 .LC_fontsize_medium {  .LC_fontsize_medium {
Line 5529  span.LC_parm_symb { Line 5426  span.LC_parm_symb {
   color: #AAAAAA;    color: #AAAAAA;
 }  }
   
 ul.LC_parm_parmlist li {  
   display: inline-block;  
   padding: 0.3em 0.8em;  
   vertical-align: top;  
   width: 150px;  
   border-top:1px solid $lg_border_color;  
 }  
   
 td.LC_parm_overview_level_menu,  td.LC_parm_overview_level_menu,
 td.LC_parm_overview_map_menu,  td.LC_parm_overview_map_menu,
 td.LC_parm_overview_parm_selectors,  td.LC_parm_overview_parm_selectors,
Line 6140  fieldset > legend { Line 6029  fieldset > legend {
   
 #LC_nav_bar {  #LC_nav_bar {
   float: left;    float: left;
   margin: 0 0 2px 0;    margin: 0;
 }  }
   
 #LC_realm {  #LC_realm {
Line 6155  fieldset > legend { Line 6044  fieldset > legend {
   font-style: normal;    font-style: normal;
 }  }
   
 /* Preliminary fix to hide nav_bar inside bookmarks window */  
 #LC_bookmarks #LC_nav_bar {  
   display:none;  
 }  
   
 ol.LC_primary_menu {  ol.LC_primary_menu {
   float: right;    float: right;
   margin: 0;    margin: 0;
 }  }
   
 span.LC_new_message{  
   font-weight:bold;  
   color: darkred;  
 }  
   
 ol#LC_PathBreadcrumbs {  ol#LC_PathBreadcrumbs {
   margin: 0;    margin: 0;
 }  }
Line 6190  ol.LC_primary_menu a { Line 6069  ol.LC_primary_menu a {
   text-decoration: none;    text-decoration: none;
 }  }
   
 ol.LC_docs_parameters {  ol.LC_primary_menu a.LC_new_message {
   margin-left: 0;    font-weight:bold;
   padding: 0;    color: darkred;
   list-style: none;  
 }  
   
 ol.LC_docs_parameters li {  
   margin: 0;  
   padding-right: 20px;  
   display: inline;  
 }  
   
 ol.LC_docs_parameters li:before {  
   content: "\\002022 \\0020";  
 }  
   
 li.LC_docs_parameters_title {  
   font-weight: bold;  
 }  
   
 ol.LC_docs_parameters li.LC_docs_parameters_title:before {  
   content: "";  
 }  }
   
 ul#LC_secondary_menu {  ul#LC_secondary_menu {
Line 6258  ul.LC_TabContent { Line 6118  ul.LC_TabContent {
   
 ul.LC_TabContent li {  ul.LC_TabContent li {
   vertical-align:middle;    vertical-align:middle;
   padding: 0 16px 0 10px;    padding: 0 10px 0 10px;
   background-color:$tabbg;    background-color:$tabbg;
   border-bottom:solid 1px $lg_border_color;    border-bottom:solid 1px $lg_border_color;
   border-right: solid 1px $font;    border-right: solid 1px $font;
Line 6274  ul.LC_TabContent li { Line 6134  ul.LC_TabContent li {
   text-decoration:none;    text-decoration:none;
   font-size:95%;    font-size:95%;
   font-weight:bold;    font-weight:bold;
     padding-right: 16px;
   min-height:20px;    min-height:20px;
 }  }
   
 ul.LC_TabContent li a:hover,  ul.LC_TabContent li a:hover {
 ul.LC_TabContent li a:focus {  
   color: $button_hover;    color: $button_hover;
   background:none;  
   outline:none;  
 }  }
   
 ul.LC_TabContent li:hover {  ul.LC_TabContent li:hover {
Line 6296  ul.LC_TabContent li.active { Line 6154  ul.LC_TabContent li.active {
   cursor: default;    cursor: default;
 }  }
   
 ul.LC_TabContent li.active a {  
   color:$font;  
   background:#FFFFFF;  
   outline: none;  
 }  
 #maincoursedoc {  #maincoursedoc {
   clear:both;    clear:both;
 }  }
Line 6331  ul.LC_TabContentBigger li a { Line 6184  ul.LC_TabContentBigger li a {
   text-align: center;    text-align: center;
   display: block;    display: block;
   text-decoration: none;    text-decoration: none;
   outline: none;    outline: none;  
 }  }
   
 ul.LC_TabContentBigger li.active a {  ul.LC_TabContentBigger li.active a {
Line 6358  ul.LC_TabContentBigger li.active b { Line 6211  ul.LC_TabContentBigger li.active b {
   cursor:default;    cursor:default;
 }  }
   
   
 ul.LC_CourseBreadcrumbs {  ul.LC_CourseBreadcrumbs {
   background: $sidebg;    background: $sidebg;
   line-height: 32px;    line-height: 32px;
Line 6387  ul.LC_CourseBreadcrumbs li a { Line 6241  ul.LC_CourseBreadcrumbs li a {
   font-size:90%;    font-size:90%;
 }  }
   
 ol#LC_MenuBreadcrumbs h1 {  
   display: inline;  
   font-size: 90%;  
   line-height: 2.5em;  
   margin: 0;  
   padding: 0;  
 }  
   
 ol#LC_PathBreadcrumbs li a {  ol#LC_PathBreadcrumbs li a {
   text-decoration:none;    text-decoration:none;
   font-size:100%;    font-size:100%;
Line 6491  div.LC_columnSection>* { Line 6337  div.LC_columnSection>* {
   overflow:hidden;    overflow:hidden;
 }  }
   
   .LC_loginpage_container {
     text-align:left;
     margin : 0 auto;
     width:90%;
     padding: 10px;
     height: auto;
     background-color:#FFFFFF;
     border:1px solid #CCCCCC;
   }
   
   
   .LC_loginpage_loginContainer {
     float:left;
     width: 182px;
     padding: 2px;
     border:1px solid #CCCCCC;
     background-color:$loginbg;
   }
   
   .LC_loginpage_loginContainer h2 {
     margin-top: 0;
     display:block;
     background:$bgcol;
     color:$textcol;
     padding-left:5px;
   }
   
   .LC_loginpage_loginInfo {
     float:left;
     width:182px;
     border:1px solid #CCCCCC;
     padding:2px;
   }
   
   .LC_loginpage_space {
     clear: both;
     margin-bottom: 20px;
     border-bottom: 1px solid #CCCCCC;
   }
   
   .LC_loginpage_floatLeft {
     float: left;
     width: 200px;
     margin: 0;
   }
   
 table em {  table em {
   font-weight: bold;    font-weight: bold;
   font-style: normal;    font-style: normal;
Line 6526  a#LC_content_toolbar_firsthomework { Line 6418  a#LC_content_toolbar_firsthomework {
   background-image:url(/res/adm/pages/open-first-problem.gif);    background-image:url(/res/adm/pages/open-first-problem.gif);
 }  }
   
 a#LC_content_toolbar_launchnav {  
   background-image:url(/res/adm/pages/start-navigation.gif);  
 }  
   
 a#LC_content_toolbar_closenav {  
   background-image:url(/res/adm/pages/close-navigation.gif);  
 }  
   
 a#LC_content_toolbar_everything {  a#LC_content_toolbar_everything {
   background-image:url(/res/adm/pages/show-all.gif);    background-image:url(/res/adm/pages/show-all.gif);
 }  }
Line 6676  sub headtag { Line 6560  sub headtag {
  $result .= &Apache::lonhtmlcommon::htmlareaheaders();   $result .= &Apache::lonhtmlcommon::htmlareaheaders();
     }      }
     if ($args->{'force_register'}) {      if ($args->{'force_register'}) {
  $result .= &Apache::lonmenu::registerurl(1);   $result .= &Apache::lonmenu::registerurl();
     }      }
     if (!$args->{'no_nav_bar'}       if (!$args->{'no_nav_bar'} 
  && !$args->{'only_body'}   && !$args->{'only_body'}
Line 6737  Inputs: none Line 6621  Inputs: none
 sub xml_begin {  sub xml_begin {
     my $output='';      my $output='';
   
       if ($env{'internal.start_page'}==1) {
    &Apache::lonhtmlcommon::init_htmlareafields();
       }
   
     if ($env{'browser.mathml'}) {      if ($env{'browser.mathml'}) {
  $output='<?xml version="1.0"?>'   $output='<?xml version="1.0"?>'
             #.'<?xml-stylesheet type="text/css" href="/adm/MathML/mathml.css"?>'."\n"              #.'<?xml-stylesheet type="text/css" href="/adm/MathML/mathml.css"?>'."\n"
Line 6829  $args - additional optional args support Line 6717  $args - additional optional args support
              skip_phases    -> hash ref of                skip_phases    -> hash ref of 
                                     head -> skip the <html><head> generation                                      head -> skip the <html><head> generation
                                     body -> skip all <body> generation                                      body -> skip all <body> generation
              no_inline_link -> if true and in remote mode, don't show the   #RC             no_inline_link -> if true and in remote mode, don't show the 
                                     'Switch To Inline Menu' link  #RC                                    'Switch To Inline Menu' link
              no_auto_mt_title -> prevent &mt()ing the title arg               no_auto_mt_title -> prevent &mt()ing the title arg
              inherit_jsmath -> when creating popup window in a page,               inherit_jsmath -> when creating popup window in a page,
                                     should it have jsmath forced on by the                                      should it have jsmath forced on by the
                                     current page                                      current page
              bread_crumbs ->             Array containing breadcrumbs               bread_crumbs ->             Array containing breadcrumbs
              bread_crumbs_component ->  if exists show it as headline else show only the breadcrumbs               bread_crumbs_components ->  if exists show it as headline else show only the breadcrumbs
   
 =back  =back
   
Line 6896  sub start_page { Line 6784  sub start_page {
     return $result if $args->{'only_body'};      return $result if $args->{'only_body'};
   
     #Breadcrumbs for Construction Space provided by &bodytag.       #Breadcrumbs for Construction Space provided by &bodytag. 
     if (($env{'environment.remote'} eq 'off') && ($env{'request.state'} eq 'construct')) {      if (
           $env{'request.state'} eq 'construct') {
         return $result;          return $result;
     }      }
     
Line 7031  sub simple_error_page { Line 6920  sub simple_error_page {
   
 {  {
     my @row_count;      my @row_count;
   
     sub start_data_table_count {  
         unshift(@row_count, 0);  
         return;  
     }  
   
     sub end_data_table_count {  
         shift(@row_count);  
         return;  
     }  
   
     sub start_data_table {      sub start_data_table {
  my ($add_class) = @_;   my ($add_class) = @_;
  my $css_class = (join(' ','LC_data_table',$add_class));   my $css_class = (join(' ','LC_data_table',$add_class));
         &start_data_table_count();   unshift(@row_count,0);
  return '<table class="'.$css_class.'">'."\n";   return '<table class="'.$css_class.'">'."\n";
     }      }
   
     sub end_data_table {      sub end_data_table {
         &end_data_table_count();   shift(@row_count);
  return '</table>'."\n";;   return '</table>'."\n";;
     }      }
   
Line 7229  role status: active, previous or future. Line 7107  role status: active, previous or future.
   
 sub check_user_status {  sub check_user_status {
     my ($udom,$uname,$cdom,$crs,$role,$sec) = @_;      my ($udom,$uname,$cdom,$crs,$role,$sec) = @_;
     my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1});      my %userinfo = &Apache::lonnet::dump('roles',$udom,$uname);
     my %userinfo = &Apache::lonnet::dump('roles',$udom,$uname,'.',undef,$extra);  
     my @uroles = keys %userinfo;      my @uroles = keys %userinfo;
     my $srchstr;      my $srchstr;
     my $active_chk = 'none';      my $active_chk = 'none';
Line 8269  sub get_institutional_codes { Line 8146  sub get_institutional_codes {
     return;      return;
 }  }
   
 sub get_standard_codeitems {  
     return ('Year','Semester','Department','Number','Section');  
 }  
   
 =pod  =pod
   
 =head1 Slot Helpers  =head1 Slot Helpers
Line 8464  sub get_env_multiple { Line 8337  sub get_env_multiple {
   
 sub ask_for_embedded_content {  sub ask_for_embedded_content {
     my ($actionurl,$state,$allfiles,$codebase,$args)=@_;      my ($actionurl,$state,$allfiles,$codebase,$args)=@_;
     my (%subdependencies,%dependencies,%newfiles);      my $upload_output = '
      <form name="upload_embedded" action="'.$actionurl.'"
                     method="post" enctype="multipart/form-data">';
       $upload_output .= $state;
       $upload_output .= '<b>Upload embedded files</b>:<br />'.&start_data_table();
   
     my $num = 0;      my $num = 0;
     my $upload_output;      foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%{$allfiles})) {
     foreach my $embed_file (keys(%{$allfiles})) {  
         unless ($embed_file =~ m{^\w+://} || $embed_file =~ m{^/}) {  
             my ($relpath,$fname);  
             if ($embed_file =~ m{/}) {  
                 my ($path,$fname) = ($embed_file =~ m{^(.+)/([^/]*)$});  
                 $subdependencies{$path}{$fname} = 1;  
             } else {  
                 $dependencies{$embed_file} = 1;  
             }  
         }  
     }  
     my ($url,$udom,$uname,$getpropath);  
     if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {  
         my $current_path='/';  
         if ($env{'form.currentpath'}) {  
             $current_path = $env{'form.currentpath'};  
         }  
         if ($actionurl eq '/adm/coursegrp_portfolio') {  
             $udom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
             $uname = $env{'course.'.$env{'request.course.id'}.'.num'};  
             $url = '/userfiles/groups/'.$env{'form.group'}.'/portfolio';  
         } else {  
             $udom = $env{'user.domain'};  
             $uname = $env{'user.name'};  
             $url = '/userfiles/portfolio';  
         }  
         $url .= $current_path;  
         $getpropath = 1;  
     } elsif ($actionurl eq '/adm/upload') {  
         ($uname,my $rest) = ($args->{'current_path'} =~ m{/priv/($match_username)/?(.*)$});  
         $url = '/home/'.$uname.'/public_html';  
         if ($rest ne '') {  
             $url .= '/'.$rest;  
         }  
     }  
     foreach my $path (keys(%subdependencies)) {  
         my %currsubfile;  
         if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {  
             my @subdir_list = &Apache::lonnet::dirlist($url.$path,$udom,$uname,$getpropath);  
             foreach my $line (@subdir_list) {  
                 my ($file_name,$rest) = split(/\&/,$line,2);  
                 $currsubfile{$file_name} = 1;  
             }  
         } elsif ($actionurl eq '/adm/upload') {  
             if (opendir(my $dir,$url.'/'.$path)) {  
                 my @subdir_list = grep(!/^\./,readdir($dir));  
                 map {$currsubfile{$_} = 1;} @subdir_list;  
             }  
         }  
         foreach my $file (keys(%{$subdependencies{$path}})) {  
             unless ($currsubfile{$file}) {  
                  $newfiles{$path.'/'.$file} = 1;  
             }  
         }  
     }  
     my (@dir_list,%currfile);  
     if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {  
         my @dir_list = &Apache::lonnet::dirlist($url,$udom,$uname,$getpropath);  
         foreach my $line (@dir_list) {  
             my ($file_name,$rest) = split(/\&/,$line,2);  
             $currfile{$file_name} = 1;  
         }  
     } elsif ($actionurl eq '/adm/upload') {  
         if (opendir(my $dir,$url)) {  
             @dir_list = grep(!/^\./,readdir($dir));  
             map {$currfile{$_} = 1;} @dir_list;  
         }  
     }  
     foreach my $file (keys(%dependencies)) {  
         unless ($currfile{$file}) {  
             $newfiles{$file} = 1;  
         }  
     }  
     foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%newfiles)) {  
         $upload_output .= &start_data_table_row().          $upload_output .= &start_data_table_row().
             '<td>'.$embed_file.'</td><td>';              '<td>'.$embed_file.'</td><td>';
         if ($args->{'ignore_remote_references'}          if ($args->{'ignore_remote_references'}
Line 8567  sub ask_for_embedded_content { Line 8371  sub ask_for_embedded_content {
                     &escape($$codebase{$embed_file}).'" />';                      &escape($$codebase{$embed_file}).'" />';
             }              }
         }          }
         $upload_output .= '</td>'.&Apache::loncommon::end_data_table_row()."\n";          $upload_output .= '</td>'.&Apache::loncommon::end_data_table_row();
         $num++;          $num++;
     }      }
     if ($num) {      $upload_output .= &Apache::loncommon::end_data_table().'<br />
         $upload_output = '<form name="upload_embedded" action="'.$actionurl.'"'.     <input type ="hidden" name="number_embedded_items" value="'.$num.'" />
                          ' method="post" enctype="multipart/form-data">'."\n".     <input type ="submit" value="'.&mt('Upload Listed Files').'" />
                          $state.     '.&mt('(only files for which a location has been provided will be uploaded)').'
                          '<b>Upload embedded files</b>:<br />'.&start_data_table().     </form>';
                          $upload_output.  
                          &Apache::loncommon::end_data_table().'<br />'."\n".  
                          '<input type ="hidden" name="number_embedded_items" value="'.$num.'" />'."\n".  
                          '<input type ="submit" value="'.&mt('Upload Listed Files').'" />'."\n".  
                          &mt('(only files for which a location has been provided will be uploaded)')."\n".  
                          '</form>';  
     }  
     return $upload_output;      return $upload_output;
 }  }
   
Line 8617  sub upload_embedded { Line 8414  sub upload_embedded {
                                               $dir_root,$port_path,$disk_quota,                                                $dir_root,$port_path,$disk_quota,
                                               $current_disk_usage,$uname,$udom);                                                $current_disk_usage,$uname,$udom);
             if ($state eq 'will_exceed_quota'              if ($state eq 'will_exceed_quota'
                 || $state eq 'file_locked') {                  || $state eq 'file_locked'
                   || $state eq 'file_exists' ) {
                 $output .= $msg;                  $output .= $msg;
                 next;                  next;
             }              }
Line 8644  sub upload_embedded { Line 8442  sub upload_embedded {
   
         $env{'form.embedded_item_'.$i.'.filename'}=$fname;          $env{'form.embedded_item_'.$i.'.filename'}=$fname;
         if ($context eq 'portfolio') {          if ($context eq 'portfolio') {
             my $result;              my $result=
             if ($state eq 'existingfile') {                  &Apache::lonnet::userfileupload('embedded_item_'.$i,'',
                 $result=                                                  $dirpath.$path);
                     &Apache::lonnet::userfileupload('embedded_item_'.$i,'existingfile',              if ($result !~ m|^/uploaded/|) {
                                                     $dirpath.$path,);                  $output .= '<span class="LC_error">'
                         .&mt('An error occurred ([_1]) while trying to upload [_2] for embedded element [_3].'
                              ,$result,$orig_uploaded_filename,$env{'form.embedded_orig_'.$i})
                         .'</span><br />';
                   next;
             } else {              } else {
                 $result=                  $output .= '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.
                     &Apache::lonnet::userfileupload('embedded_item_'.$i,'',                             $path.$fname.'</span>').'</p>';     
                                                     $dirpath.$path);  
                 if ($result !~ m|^/uploaded/|) {  
                     $output .= '<span class="LC_error">'  
                                .&mt('An error occurred ([_1]) while trying to upload [_2] for embedded element [_3].'  
                                ,$result,$orig_uploaded_filename,$env{'form.embedded_orig_'.$i})  
                                .'</span><br />';  
                     next;  
                 } else {  
                     $output .= '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.  
                                $path.$fname.'</span>').'</p>';       
                 }  
             }              }
         } else {          } else {
 # Save the file  # Save the file
Line 8728  sub check_for_existing { Line 8519  sub check_for_existing {
 sub check_for_upload {  sub check_for_upload {
     my ($path,$fname,$group,$element,$portfolio_root,$port_path,      my ($path,$fname,$group,$element,$portfolio_root,$port_path,
         $disk_quota,$current_disk_usage,$uname,$udom) = @_;          $disk_quota,$current_disk_usage,$uname,$udom) = @_;
     my $filesize = length($env{'form.'.$element});      my $filesize = (length($env{'form.'.$element})) / 1000; #express in k (1024?)
     if (!$filesize) {  
         my $msg = '<span class="LC_error">'.  
                   &mt('Unable to upload [_1]. (size = [_2] bytes)',  
                       '<span class="LC_filename">'.$fname.'</span>',  
                       $filesize).'<br />'.  
                   &mt('Either the file you uploaded was empty, or your web browser was unable to read its contents.').'<br />';  
                   '</span>';  
         return ('zero_bytes',$msg);  
     }  
     $filesize =  $filesize/1000; #express in k (1024?)  
     my $getpropath = 1;      my $getpropath = 1;
     my @dir_list = &Apache::lonnet::dirlist($portfolio_root.$path,$udom,$uname,      my @dir_list = &Apache::lonnet::dirlist($portfolio_root.$path,$udom,$uname,
                                             $getpropath);                                              $getpropath);
     my $found_file = 0;      my $found_file = 0;
     my $locked_file = 0;      my $locked_file = 0;
     foreach my $line (@dir_list) {      foreach my $line (@dir_list) {
         my ($file_name,$rest)=split(/\&/,$line,2);          my ($file_name)=split(/\&/,$line,2);
         if ($file_name eq $fname){          if ($file_name eq $fname){
             $file_name = $path.$file_name;              $file_name = $path.$file_name;
             if ($group ne '') {              if ($group ne '') {
Line 8754  sub check_for_upload { Line 8535  sub check_for_upload {
             $found_file = 1;              $found_file = 1;
             if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {              if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
                 $locked_file = 1;                  $locked_file = 1;
             } else {  
                 my @info = split(/\&/,$rest);  
                 my $currsize = $info[6]/1000;  
                 if ($currsize < $filesize) {  
                     my $extra = $filesize - $currsize;  
                     if (($current_disk_usage + $extra) > $disk_quota) {  
                         my $msg = '<span class="LC_error">'.  
                                   &mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded if existing (smaller) file with same name (size = [_3] kilobytes) is replaced.',  
                                       '<span class="LC_filename">'.$fname.'</span>',$filesize,$currsize).'</span>'.  
                                   '<br />'.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] kilobytes.',  
                                                $disk_quota,$current_disk_usage);  
                         return ('will_exceed_quota',$msg);  
                     }  
                 }  
             }              }
         }          }
     }      }
Line 8785  sub check_for_upload { Line 8552  sub check_for_upload {
             return ('file_locked',$msg);              return ('file_locked',$msg);
         } else {          } else {
             my $msg = '<span class="LC_error">';              my $msg = '<span class="LC_error">';
             $msg .= &mt(' A file by that name: [_1] was found in [_2].','<span class="LC_filename">'.$fname.'</span>',$port_path.$env{'form.currentpath'});              $msg .= &mt('Unable to upload [_1]. A file by that name was found in [_2].','<span class="LC_filename">'.$fname.'</span>',$port_path.$env{'form.currentpath'});
             $msg .= '</span>';              $msg .= '</span>';
             return ('existingfile',$msg);              $msg .= '<br />';
               $msg .= &mt('To upload, rename or delete existing [_1] in [_2].','<span class="LC_filename">'.$fname.'</span>', $port_path.$env{'form.currentpath'});
               return ('file_exists',$msg);
         }          }
     }      }
 }  }
Line 10697  sub construct_course { Line 10466  sub construct_course {
     $title=&mt('Syllabus');      $title=&mt('Syllabus');
             $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';              $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';
         } else {          } else {
             $title=&mt('Table of Contents');              $title=&mt('Navigate Contents');
             $url='/adm/navmaps';              $url='/adm/navmaps';
         }          }
   
Line 10714  sub construct_course { Line 10483  sub construct_course {
 ############################################################  ############################################################
 ############################################################  ############################################################
   
   #SD
   # only Community and Course, or anything else?
 sub course_type {  sub course_type {
     my ($cid) = @_;      my ($cid) = @_;
     if (!defined($cid)) {      if (!defined($cid)) {
Line 10879  sub init_user_environment { Line 10650  sub init_user_environment {
     my %userenv = &Apache::lonnet::dump('environment',$domain,$username);      my %userenv = &Apache::lonnet::dump('environment',$domain,$username);
     my ($tmp) = keys(%userenv);      my ($tmp) = keys(%userenv);
     if ($tmp !~ /^(con_lost|error|no_such_host)/i) {      if ($tmp !~ /^(con_lost|error|no_such_host)/i) {
  # default remote control to off  
  if ($userenv{'remote'} ne 'on') { $userenv{'remote'} = 'off'; }  
     } else {      } else {
  undef(%userenv);   undef(%userenv);
     }      }
     if (($userenv{'interface'}) && (!$form->{'interface'})) {      if (($userenv{'interface'}) && (!$form->{'interface'})) {
  $form->{'interface'}=$userenv{'interface'};   $form->{'interface'}=$userenv{'interface'};
     }      }
     $env{'environment.remote'}=$userenv{'remote'};  
     if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }      if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }
   
 # --------------- Do not trust query string to be put directly into environment  # --------------- Do not trust query string to be put directly into environment
Line 10919  sub init_user_environment { Line 10687  sub init_user_environment {
     $initial_env{"browser.localres"}   = $form->{'localres'};      $initial_env{"browser.localres"}   = $form->{'localres'};
         }          }
   
  if ($public) {  
     $initial_env{"environment.remote"} = "off";  
  }  
  if ($form->{'interface'}) {   if ($form->{'interface'}) {
     $form->{'interface'}=~s/\W//gs;      $form->{'interface'}=~s/\W//gs;
     $initial_env{"browser.interface"} = $form->{'interface'};      $initial_env{"browser.interface"} = $form->{'interface'};
     $env{'browser.interface'}=$form->{'interface'};      $env{'browser.interface'}=$form->{'interface'};
  }   }
         my %is_adv = ( is_adv => $env{'user.adv'} );  
         my %domdef = &Apache::lonnet::get_domain_defaults($domain);  
   
         foreach my $tool ('aboutme','blog','portfolio') {          foreach my $tool ('aboutme','blog','portfolio') {
             $userenv{'availabletools.'.$tool} =               $userenv{'availabletools.'.$tool} = 
                 &Apache::lonnet::usertools_access($username,$domain,$tool,'reload',                  &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
                                                   undef,\%userenv,\%domdef,\%is_adv);  
         }          }
   
         foreach my $crstype ('official','unofficial','community') {          foreach my $crstype ('official','unofficial','community') {
             $userenv{'canrequest.'.$crstype} =              $userenv{'canrequest.'.$crstype} =
                 &Apache::lonnet::usertools_access($username,$domain,$crstype,                  &Apache::lonnet::usertools_access($username,$domain,$crstype,
                                                   'reload','requestcourses',                                                    'reload','requestcourses');
                                                   \%userenv,\%domdef,\%is_adv);  
         }          }
   
  $env{'user.environment'} = "$lonids/$cookie.id";   $env{'user.environment'} = "$lonids/$cookie.id";

Removed from v.1.948.2.14  
changed lines
  Added in v.1.958


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>