Diff for /loncom/interface/loncommon.pm between versions 1.948.2.16 and 1.967

version 1.948.2.16, 2010/12/24 17:30:35 version 1.967, 2010/05/06 16:16:02
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);
  if ($#parts > 0) {   if ($#parts > 0) {
   my $data=$parts[-1];    my $data=$parts[-1];
           next if ($data eq 'foilorder');  
   pop(@parts);    pop(@parts);
           if ($data eq 'type') {            if ($data eq 'type') {
               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 3455  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 3462  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 3469  sub get_previous_attempt { Line 3443  sub get_previous_attempt {
                            '<td>'.&mt('Transaction [_1]',$version).'</td>';                             '<td>'.&mt('Transaction [_1]',$version).'</td>';
             if (@hidden) {              if (@hidden) {
                 foreach my $key (sort(keys(%lasthash))) {                  foreach my $key (sort(keys(%lasthash))) {
                     next if ($key =~ /\.foilorder$/);  
                     my $hide;                      my $hide;
                     foreach my $id (@hidden) {                      foreach my $id (@hidden) {
                         if ($key =~ /^\Q$id\E/) {                          if ($key =~ /^\Q$id\E/) {
Line 3498  sub get_previous_attempt { Line 3471  sub get_previous_attempt {
                 }                  }
             } else {              } else {
         foreach my $key (sort(keys(%lasthash))) {          foreach my $key (sort(keys(%lasthash))) {
                     next if ($key =~ /\.foilorder$/);  
     my $value = &format_previous_attempt_value($key,      my $value = &format_previous_attempt_value($key,
             $returnhash{$version.':'.$key});              $returnhash{$version.':'.$key});
     $prevattempts.='<td>'.$value.'&nbsp;</td>';      $prevattempts.='<td>'.$value.'&nbsp;</td>';
Line 3510  sub get_previous_attempt { Line 3482  sub get_previous_attempt {
       my @currhidden = keys(%lasthidden);        my @currhidden = keys(%lasthidden);
       $prevattempts.=&start_data_table_row().'<td>'.&mt('Current').'</td>';        $prevattempts.=&start_data_table_row().'<td>'.&mt('Current').'</td>';
       foreach my $key (sort(keys(%lasthash))) {        foreach my $key (sort(keys(%lasthash))) {
           next if ($key =~ /\.foilorder$/);  
           if (%typeparts) {            if (%typeparts) {
               my $hidden;                my $hidden;
               foreach my $id (@currhidden) {                foreach my $id (@currhidden) {
Line 3566  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 3867  sub findallcourses { Line 3815  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 4593  Inputs: Line 4539  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   
          'Switch To Inline Menu' link  
   
 =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 4613  other decorations will be returned. Line 4556  other decorations will be returned.
   
 sub bodytag {  sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,      my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,
         $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_;          $no_nav_bar,$bgcolor,$args)=@_;
   
     my $public;      my $public;
     if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))      if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))
Line 4655  sub bodytag { Line 4598  sub bodytag {
     }      }
   
     if (!$realm) { $realm='&nbsp;'; }      if (!$realm) { $realm='&nbsp;'; }
 # Set messages  
     my $messages=&domainlogo($domain);  
   
     my $extra_body_attr = &make_attr_string($forcereg,\%design);      my $extra_body_attr = &make_attr_string($forcereg,\%design);
   
Line 4674  sub bodytag { Line 4615  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 4690  sub bodytag { Line 4631  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  
         if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') {           if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { 
             return $bodytag;               return $bodytag; 
         }           } 
Line 4733  sub bodytag { Line 4672  sub bodytag {
             $bodytag .= Apache::lonmenu::serverform();              $bodytag .= Apache::lonmenu::serverform();
             $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');              $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
             if ($env{'request.state'} eq 'construct') {              if ($env{'request.state'} eq 'construct') {
                 $bodytag .= &Apache::lonmenu::innerregister($forcereg,'',                  $bodytag .= &Apache::lonmenu::innerregister($forcereg,
                                 $args->{'bread_crumbs'});                                  $args->{'bread_crumbs'});
             } elsif ($forcereg) {               } elsif ($forcereg) { 
                 $bodytag .= &Apache::lonmenu::innerregister($forcereg);                  $bodytag .= &Apache::lonmenu::innerregister($forcereg);
Line 4746  sub bodytag { Line 4685  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 4811  sub make_attr_string { Line 4716  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 4924  sub standard_css { Line 4815  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 5156  td.LC_table_cell_checkbox { Line 5048  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; */
Line 5533  span.LC_parm_symb { Line 5420  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 6169  ol.LC_primary_menu { Line 6048  ol.LC_primary_menu {
   margin: 0;    margin: 0;
 }  }
   
 span.LC_new_message{  
   font-weight:bold;  
   color: darkred;  
 }  
   
 ol#LC_PathBreadcrumbs {  ol#LC_PathBreadcrumbs {
   margin: 0;    margin: 0;
 }  }
Line 6194  ol.LC_primary_menu a { Line 6068  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 6335  ul.LC_TabContentBigger li a { Line 6190  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 6362  ul.LC_TabContentBigger li.active b { Line 6217  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 6391  ul.LC_CourseBreadcrumbs li a { Line 6247  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 6530  a#LC_content_toolbar_firsthomework { Line 6378  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 6679  sub headtag { Line 6519  sub headtag {
     if (!$args->{'frameset'}) {      if (!$args->{'frameset'}) {
  $result .= &Apache::lonhtmlcommon::htmlareaheaders();   $result .= &Apache::lonhtmlcommon::htmlareaheaders();
     }      }
     if ($args->{'force_register'}) {      if ($args->{'force_register'} && $env{'request.noversionuri'} !~ m{^/res/adm/pages/}) {
  $result .= &Apache::lonmenu::registerurl(1);          $result .= Apache::lonxml::display_title();
     }      }
     if (!$args->{'no_nav_bar'}       if (!$args->{'no_nav_bar'} 
  && !$args->{'only_body'}   && !$args->{'only_body'}
Line 6706  ADDMETA Line 6546  ADDMETA
     $result .= '<title> LON-CAPA '.$title.'</title>'      $result .= '<title> LON-CAPA '.$title.'</title>'
  .'<link rel="stylesheet" type="text/css" href="'.$url.'" />'   .'<link rel="stylesheet" type="text/css" href="'.$url.'" />'
  .$head_extra;   .$head_extra;
     return $result;      return $result.'</head>';
 }  }
   
 =pod  =pod
Line 6741  Inputs: none Line 6581  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 6759  sub xml_begin { Line 6603  sub xml_begin {
   
 =pod  =pod
   
 =item * &endheadtag()  
   
 Returns a uniform </head> for LON-CAPA web pages.  
   
 Inputs: none  
   
 =cut  
   
 sub endheadtag {  
     return '</head>';  
 }  
   
 =pod  
   
 =item * &head()  
   
 Returns a uniform complete <head>..</head> section for LON-CAPA web pages.  
   
 Inputs:  
   
 =over 4  
   
 $title - optional title for the page  
   
 $head_extra - optional extra HTML to put inside the <head>  
   
 =back  
   
 =cut  
   
 sub head {  
     my ($title,$head_extra,$args) = @_;  
     return &headtag($title,$head_extra,$args).&endheadtag();  
 }  
   
 =pod  
   
 =item * &start_page()  =item * &start_page()
   
 Returns a complete <html> .. <body> section for LON-CAPA web pages.  Returns a complete <html> .. <body> section for LON-CAPA web pages.
Line 6833  $args - additional optional args support Line 6640  $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   
                                     '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 6851  $args - additional optional args support Line 6656  $args - additional optional args support
 sub start_page {  sub start_page {
     my ($title,$head_extra,$args) = @_;      my ($title,$head_extra,$args) = @_;
     #&Apache::lonnet::logthis("start_page ".join(':',caller(0)));      #&Apache::lonnet::logthis("start_page ".join(':',caller(0)));
   #SD
   #I don't see why we copy certain elements of %$args to %head_args
   #head args is passed to headtag() and this routine only reads those
   #keys that are needed. There doesn't happen any writes or any processing
   #of other keys.
   #proposal: just pass $args to headtag instead of \%head_args and delete 
   #marked lines
   #<- MARK
     my %head_args;      my %head_args;
     foreach my $arg ('redirect','force_register','domain','function',      foreach my $arg ('redirect','force_register','domain','function',
      'bgcolor','frameset','no_nav_bar','only_body',       'bgcolor','frameset','no_nav_bar','only_body',
Line 6859  sub start_page { Line 6672  sub start_page {
     $head_args{$arg} = $args->{$arg};      $head_args{$arg} = $args->{$arg};
  }   }
     }      }
   #MARK ->
   
     $env{'internal.start_page'}++;      $env{'internal.start_page'}++;
     my $result;      my $result;
   
     if (! exists($args->{'skip_phases'}{'head'}) ) {      if (! exists($args->{'skip_phases'}{'head'}) ) {
  $result.=          $result .= 
     &xml_begin().                    &xml_begin() . &headtag($title,$head_extra,\%head_args);
     &headtag($title,$head_extra,\%head_args).&endheadtag();  #replace prev line by
   #                 &xml_begin() . &headtag($title, $head_extra, $args);
     }      }
           
     if (! exists($args->{'skip_phases'}{'body'}) ) {      if (! exists($args->{'skip_phases'}{'body'}) ) {
Line 6879  sub start_page { Line 6695  sub start_page {
                          $args->{'function'},       $args->{'add_entries'},                           $args->{'function'},       $args->{'add_entries'},
                          $args->{'only_body'},      $args->{'domain'},                           $args->{'only_body'},      $args->{'domain'},
                          $args->{'force_register'}, $args->{'no_nav_bar'},                           $args->{'force_register'}, $args->{'no_nav_bar'},
                          $args->{'bgcolor'},        $args->{'no_inline_link'},                           $args->{'bgcolor'},        $args);
                          $args);  
         }          }
     }      }
   
Line 6896  sub start_page { Line 6711  sub start_page {
     #            $result .= &build_functionlist();      #            $result .= &build_functionlist();
     #}      #}
   
     # Don't add anything more if only_body wanted      # Don't add anything more if only_body wanted or in const space
     return $result if $args->{'only_body'};      return $result if    $args->{'only_body'} 
                         || $env{'request.state'} eq 'construct';
   
     #Breadcrumbs for Construction Space provided by &bodytag.   
     if (($env{'environment.remote'} eq 'off') && ($env{'request.state'} eq 'construct')) {  
         return $result;  
     }  
    
     #Breadcrumbs      #Breadcrumbs
     if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {      if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
  &Apache::lonhtmlcommon::clear_breadcrumbs();   &Apache::lonhtmlcommon::clear_breadcrumbs();
Line 6924  sub start_page { Line 6735  sub start_page {
     return $result;      return $result;
 }  }
   
   
 =pod  
   
 =item * &head()  
   
 Returns a complete </body></html> section for LON-CAPA web pages.  
   
 Inputs:         $args - additional optional args supported are:  
                  js_ready     -> return a string ready for being used in   
                                  a javascript writeln  
                  html_encode  -> return a string ready for being used in   
                                  a html attribute  
                  frameset     -> if true will start with a <frameset>  
                                  rather than <body>  
                  dicsussion   -> if true will get discussion from  
                                   lonxml::xmlend  
                                  (you can pass the target and parser arguments  
                                   through optional 'target' and 'parser' args  
                                   to this routine)  
   
 =cut  
   
 sub end_page {  sub end_page {
     my ($args) = @_;      my ($args) = @_;
     $env{'internal.end_page'}++;      $env{'internal.end_page'}++;
Line 7049  sub simple_error_page { Line 6838  sub simple_error_page {
     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();   &start_data_table_count();
  return '<table class="'.$css_class.'">'."\n";   return '<table class="'.$css_class.'">'."\n";
     }      }
   
     sub end_data_table {      sub end_data_table {
         &end_data_table_count();   &end_data_table_count();
  return '</table>'."\n";;   return '</table>'."\n";;
     }      }
   
Line 7233  role status: active, previous or future. Line 7022  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 8273  sub get_institutional_codes { Line 8061  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 8468  sub get_env_multiple { Line 8252  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 8571  sub ask_for_embedded_content { Line 8286  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 8621  sub upload_embedded { Line 8329  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 8648  sub upload_embedded { Line 8357  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 8732  sub check_for_existing { Line 8434  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 8758  sub check_for_upload { Line 8450  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 8789  sub check_for_upload { Line 8467  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 10718  sub construct_course { Line 10398  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 10883  sub init_user_environment { Line 10565  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 10923  sub init_user_environment { Line 10602  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";
Line 11023  sub clean_symb { Line 10695  sub clean_symb {
     return ($symb,$enc);      return ($symb,$enc);
 }  }
   
 sub build_release_hashes {  
     my ($checkparms,$checkresponsetypes,$checkcrstypes,$anonsurvey,$randomizetry) = @_;  
     return unless((ref($checkparms) eq 'HASH') && (ref($checkresponsetypes) eq 'HASH') &&  
                   (ref($checkcrstypes) eq 'HASH') && (ref($anonsurvey) eq 'HASH') &&  
                   (ref($randomizetry) eq 'HASH'));  
     foreach my $key (keys(%Apache::lonnet::needsrelease)) {  
         my ($item,$name,$value) = split(/:/,$key);  
         if ($item eq 'parameter') {  
             if (ref($checkparms->{$name}) eq 'ARRAY') {  
                 unless(grep(/^\Q$name\E$/,@{$checkparms->{$name}})) {  
                     push(@{$checkparms->{$name}},$value);  
                 }  
             } else {  
                 push(@{$checkparms->{$name}},$value);  
             }  
         } elsif ($item eq 'resourcetag') {  
             if ($name eq 'responsetype') {  
                 $checkresponsetypes->{$value} = $Apache::lonnet::needsrelease{$key}  
             }  
         } elsif ($item eq 'course') {  
             if ($name eq 'crstype') {  
                 $checkcrstypes->{$value} = $Apache::lonnet::needsrelease{$key};  
             }  
         }  
     }  
     ($anonsurvey->{major},$anonsurvey->{minor}) = split(/\./,$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'});  
     ($randomizetry->{major},$randomizetry->{minor}) = split(/\./,$Apache::lonnet::needsrelease{'parameter:type:randomizetry'});  
     return;  
 }  
   
 =pod  =pod
   
 =back  =back

Removed from v.1.948.2.16  
changed lines
  Added in v.1.967


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