Diff for /loncom/interface/loncommon.pm between versions 1.688 and 1.692.4.7

version 1.688, 2008/09/29 22:53:20 version 1.692.4.7, 2009/08/14 07:49:01
Line 406  sub studentbrowser_javascript { Line 406  sub studentbrowser_javascript {
          || ($env{'request.role'}=~/^(au|dc|su)/)           || ($env{'request.role'}=~/^(au|dc|su)/)
           ) { return ''; }              ) { return ''; }  
    return (<<'ENDSTDBRW');     return (<<'ENDSTDBRW');
 <script type="text/javascript" language="Javascript" >  <script type="text/javascript" language="Javascript">
   // <![CDATA[
     var stdeditbrowser;      var stdeditbrowser;
     function openstdbrowser(formname,uname,udom,roleflag,ignorefilter) {      function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) {
         var url = '/adm/pickstudent?';          var url = '/adm/pickstudent?';
         var filter;          var filter;
  if (!ignorefilter) {   if (!ignorefilter) {
Line 422  sub studentbrowser_javascript { Line 423  sub studentbrowser_javascript {
         url += 'form=' + formname + '&unameelement='+uname+          url += 'form=' + formname + '&unameelement='+uname+
                                     '&udomelement='+udom;                                      '&udomelement='+udom;
  if (roleflag) { url+="&roles=1"; }   if (roleflag) { url+="&roles=1"; }
           if (courseadvonly) { url+="&courseadvonly=1"; }
         var title = 'Student_Browser';          var title = 'Student_Browser';
         var options = 'scrollbars=1,resizable=1,menubar=0';          var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';          options += ',width=700,height=600';
         stdeditbrowser = open(url,title,options,'1');          stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();          stdeditbrowser.focus();
     }      }
   // ]]>
 </script>  </script>
 ENDSTDBRW  ENDSTDBRW
 }  }
   
 sub selectstudent_link {  sub selectstudent_link {
    my ($form,$unameele,$udomele)=@_;     my ($form,$unameele,$udomele,$courseadvonly)=@_;
      my $callargs = "'".$form."','".$unameele."','".$udomele."'";
    if ($env{'request.course.id'}) {       if ($env{'request.course.id'}) {  
        if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'})         if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'})
    && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}.     && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}.
  '/'.$env{'request.course.sec'})) {   '/'.$env{'request.course.sec'})) {
    return '';     return '';
        }         }
        return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.         if ($courseadvonly)  {
         '","'.$udomele.'");'."'>".&mt('Select User')."</a>";             $callargs .= ",'',1,1";
          }
          return '<span class="LC_nobreak">'.
                 '<a href="javascript:openstdbrowser('.$callargs.');">'.
                 &mt('Select User').'</a></span>';
    }     }
    if ($env{'request.role'}=~/^(au|dc|su)/) {     if ($env{'request.role'}=~/^(au|dc|su)/) {
        return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.         $callargs .= ",1";
         '","'.$udomele.'",1);'."'>".&mt('Select User')."</a>";         return '<span class="LC_nobreak">'.
                 '<a href="javascript:openstdbrowser('.$callargs.');">'.
                 &mt('Select User').'</a></span>';
    }     }
    return '';     return '';
 }  }
Line 453  sub selectstudent_link { Line 463  sub selectstudent_link {
 sub authorbrowser_javascript {  sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";      return <<"ENDAUTHORBRW";
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 var stdeditbrowser;  var stdeditbrowser;
   
 function openauthorbrowser(formname,udom) {  function openauthorbrowser(formname,udom) {
Line 464  function openauthorbrowser(formname,udom Line 475  function openauthorbrowser(formname,udom
     stdeditbrowser = open(url,title,options,'1');      stdeditbrowser = open(url,title,options,'1');
     stdeditbrowser.focus();      stdeditbrowser.focus();
 }  }
   // ]]>
 </script>  </script>
 ENDAUTHORBRW  ENDAUTHORBRW
 }  }
   
 sub coursebrowser_javascript {  sub coursebrowser_javascript {
     my ($domainfilter,$sec_element,$formname)=@_;      my ($domainfilter,$sec_element,$formname)=@_;
     my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role');      my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Community - for which you wish to add/modify a user role');
    my $output = '     my $output = '
 <script type="text/javascript">  <script type="text/javascript" language="JavaScript">
   // <![CDATA[
     var stdeditbrowser;'."\n";      var stdeditbrowser;'."\n";
    $output .= <<"ENDSTDBRW";     $output .= <<"ENDSTDBRW";
     function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {      function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
Line 512  sub coursebrowser_javascript { Line 524  sub coursebrowser_javascript {
                 }                  }
             }                   }     
         }          }
           if (formname == 'ccrs') {
               var ownername = document.forms[formid].ccuname.value;
               var ownerdom =  document.forms[formid].ccdomain.options[document.forms[formid].ccdomain.selectedIndex].value;
               url += '&cloner='+ownername+':'+ownerdom;
           }
         if (multflag !=null && multflag != '') {          if (multflag !=null && multflag != '') {
             url += '&multiple='+multflag;              url += '&multiple='+multflag;
         }          }
         if (crstype == 'Course/Group') {          if (crstype == 'Course/Community') {
             if (formname == 'cu') {              if (formname == 'cu') {
                 crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value;                   crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
                 if (crstype == "") {                  if (crstype == "") {
Line 556  ENDSTDBRW Line 573  ENDSTDBRW
         $output .= &setsec_javascript($sec_element,$formname);          $output .= &setsec_javascript($sec_element,$formname);
     }      }
     $output .= '      $output .= '
   // ]]>
 </script>';  </script>';
     return $output;      return $output;
 }  }
Line 602  function setSect(sectionlist) { Line 620  function setSect(sectionlist) {
   
 sub selectcourse_link {  sub selectcourse_link {
    my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;     my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
    return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.     my $linktext = &mt('Select Course');
         '","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select Course')."</a>";     if ($selecttype eq 'Community') {
          $linktext = &mt('Select Community');
      }
      return '<span class="LC_nobreak">'
            ."<a href='"
            .'javascript:opencrsbrowser("'.$form.'","'.$unameele
            .'","'.$udomele.'","'.$desc.'","'.$extra_element
            .'","'.$multflag.'","'.$selecttype.'");'
            ."'>".$linktext.'</a>'
            .'</span>';
 }  }
   
 sub selectauthor_link {  sub selectauthor_link {
Line 677  sub select_datelocale { Line 704  sub select_datelocale {
             if ($id ne '') {              if ($id ne '') {
                 my $en_terr = $locale->{'en_territory'};                  my $en_terr = $locale->{'en_territory'};
                 my $native_terr = $locale->{'native_territory'};                  my $native_terr = $locale->{'native_territory'};
                 my @languages = &preferred_languages();                  my @languages = &Apache::lonlocal::preferred_languages();
                 if (grep(/^en$/,@languages) || !@languages) {                  if (grep(/^en$/,@languages) || !@languages) {
                     if ($en_terr ne '') {                      if ($en_terr ne '') {
                         $locale_names{$id} = '('.$en_terr.')';                          $locale_names{$id} = '('.$en_terr.')';
Line 710  sub select_datelocale { Line 737  sub select_datelocale {
     return $output;      return $output;
 }  }
   
   sub select_language {
       my ($name,$selected,$includeempty) = @_;
       my %langchoices;
       if ($includeempty) {
           %langchoices = ('' => 'No language preference');
       }
       foreach my $id (&languageids()) {
           my $code = &supportedlanguagecode($id);
           if ($code) {
               $langchoices{$code} = &plainlanguagedescription($id);
           }
       }
       return &select_form($selected,$name,%langchoices);
   }
   
 =pod  =pod
   
 =item * &linked_select_forms(...)  =item * &linked_select_forms(...)
Line 796  sub linked_select_forms { Line 838  sub linked_select_forms {
     my $first = "document.$formname.$firstselectname";      my $first = "document.$formname.$firstselectname";
     # output the javascript to do the changing      # output the javascript to do the changing
     my $result = '';      my $result = '';
     $result.="<script type=\"text/javascript\">\n";      $result.='<script type="text/javascript" language="JavaScript">'."\n";
       $result.="// <![CDATA[\n";
     $result.="var select2data = new Object();\n";      $result.="var select2data = new Object();\n";
     $" = '","';      $" = '","';
     my $debug = '';      my $debug = '';
Line 842  function select1_changed() { Line 885  function select1_changed() {
         }          }
     }      }
 }  }
   // ]]>
 </script>  </script>
 END  END
     # output the initial values for the selection lists      # output the initial values for the selection lists
Line 926  sub help_open_topic { Line 970  sub help_open_topic {
     if ($text ne "") {      if ($text ne "") {
  $template .=    $template .= 
             "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".              "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".
             "<td bgcolor='#5555FF'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";              "<td bgcolor='#5555FF'><span class=\"LC_nobreak\"><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
   
     # Add the graphic      # 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");
     $template .= <<"ENDTEMPLATE";      $template .= '<a target="_top" href="'.$link.'" title="'.$title.'">'.
  <a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a>                   '<img src="'.$helpicon.'" border="0" alt="'.&mt('Help: [_1]',$topic).
 ENDTEMPLATE                   '" title="'.$title.'" /></a>';
     if ($text ne '') { $template.='</td></tr></table>' };      if ($text ne '') {
           $template.='</span></td></tr></table>';
       }
     return $template;      return $template;
   
 }  }
Line 943  ENDTEMPLATE Line 989  ENDTEMPLATE
 # This is a quicky function for Latex cheatsheet editing, since it   # This is a quicky function for Latex cheatsheet editing, since it 
 # appears in at least four places  # appears in at least four places
 sub helpLatexCheatsheet {  sub helpLatexCheatsheet {
     my $other = shift;      my ($topic,$text,$not_author) = @_;
       my $out;
     my $addOther = '';      my $addOther = '';
     if ($other) {      if ($topic) {
  $addOther = Apache::loncommon::help_open_topic($other, shift,   $addOther = &Apache::loncommon::help_open_topic($topic,$text,
        undef, undef, 600) .         undef, undef, 600) .
    '</td><td>';     '</td><td>';
     }      }
     return '<table><tr><td>'.      $out = '<table><tr><td>'.
  $addOther .             $addOther .
  &Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),             &Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),
     undef,undef,600)                                                 undef,undef,600).
  .'</td><td>'.             '</td><td>'.
  &Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),             &Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),
     undef,undef,600)                                                 undef,undef,600).
  .'</td><td>'.             '</td>';
  &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),      unless ($not_author) {
                                     undef,undef,600)          $out .= '<td>'.
  .'</td></tr></table>';                  &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),
                                                       undef,undef,600).
                   '</td>';
       }
       $out .= '</tr></table>';
       return $out;
 }  }
   
 sub general_help {  sub general_help {
Line 987  sub update_help_link { Line 1039  sub update_help_link {
     my $banner_link = "/adm/helpmenu?page=banner&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp&amp;stayonpage=$stayOnPage";      my $banner_link = "/adm/helpmenu?page=banner&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp&amp;stayonpage=$stayOnPage";
     my $output .= <<"ENDOUTPUT";      my $output .= <<"ENDOUTPUT";
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 banner_link = '$banner_link';  banner_link = '$banner_link';
   // ]]>
 </script>  </script>
 ENDOUTPUT  ENDOUTPUT
     return $output;      return $output;
Line 1359  sub resize_textarea_js { Line 1413  sub resize_textarea_js {
     my $geometry = &viewport_geometry_js();      my $geometry = &viewport_geometry_js();
     return <<"RESIZE";      return <<"RESIZE";
     <script type="text/javascript">      <script type="text/javascript">
   // <![CDATA[
 $geometry  $geometry
   
 function getX(element) {  function getX(element) {
Line 1397  function resize_textarea(textarea_id,bot Line 1452  function resize_textarea(textarea_id,bot
     }      }
     textarea.style.height=new_height+'px';      textarea.style.height=new_height+'px';
 }  }
   // ]]>
 </script>  </script>
 RESIZE  RESIZE
   
Line 1629  sub multiple_select_form { Line 1685  sub multiple_select_form {
             $size = scalar(keys(%$hash));              $size = scalar(keys(%$hash));
         }          }
     }      }
     $output.="\n<select name='$name' size='$size' multiple='1'>";      $output.="\n".'<select name="'.$name.'" size="'.$size.'" multiple="multiple">';
     my @order;      my @order;
     if (ref($order) eq 'ARRAY')  {      if (ref($order) eq 'ARRAY')  {
         @order = @{$order};          @order = @{$order};
Line 1686  sub select_form { Line 1742  sub select_form {
 sub display_filter {  sub display_filter {
     if (!$env{'form.show'}) { $env{'form.show'}=10; }      if (!$env{'form.show'}) { $env{'form.show'}=10; }
     if (!$env{'form.displayfilter'}) { $env{'form.displayfilter'}='currentfolder'; }      if (!$env{'form.displayfilter'}) { $env{'form.displayfilter'}='currentfolder'; }
     return '<nobr><label>'.&mt('Records [_1]',      return '<span class="LC_nobreak"><label>'.&mt('Records [_1]',
        &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,         &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,
    (&mt('all'),10,20,50,100,1000,10000))).     (&mt('all'),10,20,50,100,1000,10000))).
    '</label></nobr> <nobr>'.     '</label></span> <span class="LC_nobreak">'.
            &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'}).'" /></nobr>';   '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>';
 }  }
   
 sub gradeleveldescription {  sub gradeleveldescription {
Line 1740  sub select_level_form { Line 1796  sub select_level_form {
   
 =pod  =pod
   
 =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc)  =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)
   
 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 the domain to preform an operation in.    allow a user to select the domain to preform an operation in.  
Line 1749  See loncreateuser.pm for an example invo Line 1805  See loncreateuser.pm for an example invo
 If the $includeempty flag is set, it also includes an empty choice ("no domain  If the $includeempty flag is set, it also includes an empty choice ("no domain
 selected");  selected");
   
 If the $showdomdesc flag is set, the domain name is followed by the domain description.   If the $showdomdesc flag is set, the domain name is followed by the domain description.
   
   The optional $onchange argument specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.
   
 =cut  =cut
   
 #-------------------------------------------  #-------------------------------------------
 sub select_dom_form {  sub select_dom_form {
     my ($defdom,$name,$includeempty,$showdomdesc) = @_;      my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;
       if ($onchange) {
           $onchange = ' onchange="'.$onchange.'"';
       }
     my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());      my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     if ($includeempty) { @domains=('',@domains); }      if ($includeempty) { @domains=('',@domains); }
     my $selectdomain = "<select name=\"$name\" size=\"1\">\n";      my $selectdomain = "<select name=\"$name\" size=\"1\"$onchange>\n";
     foreach my $dom (@domains) {      foreach my $dom (@domains) {
         $selectdomain.="<option value=\"$dom\" ".          $selectdomain.="<option value=\"$dom\" ".
             ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;              ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;
Line 1814  sub home_server_form_item { Line 1875  sub home_server_form_item {
     if ($numlib > 1) {      if ($numlib > 1) {
         $result .= '<select name="'.$name.'" />'."\n";          $result .= '<select name="'.$name.'" />'."\n";
         if ($default) {          if ($default) {
             $result .= '<option value="default" selected>'.&mt('default').              $result .= '<option value="default" selected="selected">'.&mt('default').
                        '</option>'."\n";                         '</option>'."\n";
         }          }
         foreach my $hostid (sort(keys(%servers))) {          foreach my $hostid (sort(keys(%servers))) {
Line 2109  sub authform_kerberos { Line 2170  sub authform_kerberos {
         $autharg,$jscall);          $autharg,$jscall);
     my ($authnum,%can_assign) =  &get_assignable_auth($in{'domain'});      my ($authnum,%can_assign) =  &get_assignable_auth($in{'domain'});
     if ($in{'kerb_def_auth'} eq 'krb5') {      if ($in{'kerb_def_auth'} eq 'krb5') {
        $check5 = ' checked="on"';         $check5 = ' checked="checked"';
     } else {      } else {
        $check4 = ' checked="on"';         $check4 = ' checked="checked"';
     }      }
     $krbarg = $in{'kerb_def_dom'};      $krbarg = $in{'kerb_def_dom'};
     if (defined($in{'curr_authtype'})) {      if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'krb') {          if ($in{'curr_authtype'} eq 'krb') {
             $krbcheck = ' checked="on"';              $krbcheck = ' checked="checked"';
             if (defined($in{'mode'})) {              if (defined($in{'mode'})) {
                 if ($in{'mode'} eq 'modifyuser') {                  if ($in{'mode'} eq 'modifyuser') {
                     $krbcheck = '';                      $krbcheck = '';
Line 2124  sub authform_kerberos { Line 2185  sub authform_kerberos {
             }              }
             if (defined($in{'curr_kerb_ver'})) {              if (defined($in{'curr_kerb_ver'})) {
                 if ($in{'curr_krb_ver'} eq '5') {                  if ($in{'curr_krb_ver'} eq '5') {
                     $check5 = ' checked="on"';                      $check5 = ' checked="checked"';
                     $check4 = '';                      $check4 = '';
                 } else {                  } else {
                     $check4 = ' checked="on"';                      $check4 = ' checked="checked"';
                     $check5 = '';                      $check5 = '';
                 }                  }
             }              }
Line 2148  sub authform_kerberos { Line 2209  sub authform_kerberos {
         }          }
     } else {      } else {
         if ($authnum == 1) {          if ($authnum == 1) {
             $authtype = '<input type="hidden" name="login" value="krb">';              $authtype = '<input type="hidden" name="login" value="krb" />';
         }          }
     }      }
     if (!$can_assign{'krb4'} && !$can_assign{'krb5'}) {      if (!$can_assign{'krb4'} && !$can_assign{'krb5'}) {
Line 2157  sub authform_kerberos { Line 2218  sub authform_kerberos {
         if (defined($in{'mode'})) {          if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {              if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {                  if ($authnum == 1) {
                     $authtype = '<input type="hidden" name="login" value="krb">';                      $authtype = '<input type="hidden" name="login" value="krb" />';
                 }                  }
             }              }
         }          }
Line 2218  sub authform_internal{ Line 2279  sub authform_internal{
     if (defined($in{'curr_authtype'})) {      if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'int') {          if ($in{'curr_authtype'} eq 'int') {
             if ($can_assign{'int'}) {              if ($can_assign{'int'}) {
                 $intcheck = 'checked="on" ';                  $intcheck = 'checked="checked" ';
                 if (defined($in{'mode'})) {                  if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {                      if ($in{'mode'} eq 'modifyuser') {
                         $intcheck = '';                          $intcheck = '';
Line 2234  sub authform_internal{ Line 2295  sub authform_internal{
         }          }
     } else {      } else {
         if ($authnum == 1) {          if ($authnum == 1) {
             $authtype = '<input type="hidden" name="login" value="int">';              $authtype = '<input type="hidden" name="login" value="int" />';
         }          }
     }      }
     if (!$can_assign{'int'}) {      if (!$can_assign{'int'}) {
Line 2243  sub authform_internal{ Line 2304  sub authform_internal{
         if (defined($in{'mode'})) {          if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {              if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {                  if ($authnum == 1) {
                     $authtype = '<input type="hidden" name="login" value="int">';                      $authtype = '<input type="hidden" name="login" value="int" />';
                 }                  }
             }              }
         }          }
Line 2258  sub authform_internal{ Line 2319  sub authform_internal{
     $result = &mt      $result = &mt
         ('[_1] Internally authenticated (with initial password [_2])',          ('[_1] Internally authenticated (with initial password [_2])',
          '<label>'.$authtype,'</label>'.$autharg);           '<label>'.$authtype,'</label>'.$autharg);
     $result.="<label><input type=\"checkbox\" name=\"visible\" onClick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';      $result.="<label><input type=\"checkbox\" name=\"visible\" onclick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';
     return $result;      return $result;
 }  }
   
Line 2273  sub authform_local{ Line 2334  sub authform_local{
     if (defined($in{'curr_authtype'})) {      if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'loc') {          if ($in{'curr_authtype'} eq 'loc') {
             if ($can_assign{'loc'}) {              if ($can_assign{'loc'}) {
                 $loccheck = 'checked="on" ';                  $loccheck = 'checked="checked" ';
                 if (defined($in{'mode'})) {                  if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {                      if ($in{'mode'} eq 'modifyuser') {
                         $loccheck = '';                          $loccheck = '';
Line 2289  sub authform_local{ Line 2350  sub authform_local{
         }          }
     } else {      } else {
         if ($authnum == 1) {          if ($authnum == 1) {
             $authtype = '<input type="hidden" name="login" value="loc">';              $authtype = '<input type="hidden" name="login" value="loc" />';
         }          }
     }      }
     if (!$can_assign{'loc'}) {      if (!$can_assign{'loc'}) {
Line 2298  sub authform_local{ Line 2359  sub authform_local{
         if (defined($in{'mode'})) {          if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {              if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {                  if ($authnum == 1) {
                     $authtype = '<input type="hidden" name="login" value="loc">';                      $authtype = '<input type="hidden" name="login" value="loc" />';
                 }                  }
             }              }
         }          }
Line 2327  sub authform_filesystem{ Line 2388  sub authform_filesystem{
     if (defined($in{'curr_authtype'})) {      if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'fsys') {          if ($in{'curr_authtype'} eq 'fsys') {
             if ($can_assign{'fsys'}) {              if ($can_assign{'fsys'}) {
                 $fsyscheck = 'checked="on" ';                  $fsyscheck = 'checked="checked" ';
                 if (defined($in{'mode'})) {                  if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {                      if ($in{'mode'} eq 'modifyuser') {
                         $fsyscheck = '';                          $fsyscheck = '';
Line 2340  sub authform_filesystem{ Line 2401  sub authform_filesystem{
         }          }
     } else {      } else {
         if ($authnum == 1) {          if ($authnum == 1) {
             $authtype = '<input type="hidden" name="login" value="fsys">';              $authtype = '<input type="hidden" name="login" value="fsys" />';
         }          }
     }      }
     if (!$can_assign{'fsys'}) {      if (!$can_assign{'fsys'}) {
Line 2349  sub authform_filesystem{ Line 2410  sub authform_filesystem{
         if (defined($in{'mode'})) {          if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {              if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {                  if ($authnum == 1) {
                     $authtype = '<input type="hidden" name="login" value="fsys">';                      $authtype = '<input type="hidden" name="login" value="fsys" />';
                 }                  }
             }              }
         }          }
Line 2717  sub flush_email_cache { Line 2778  sub flush_email_cache {
     &Apache::lonnet::devalidate_cache_new('emailscache',$id);      &Apache::lonnet::devalidate_cache_new('emailscache',$id);
 }  }
   
   # -------------------------------------------------------------------- getlangs
   
   =pod
   
   =item * &getlangs($uname,$udom)
   
   Gets a user's language preference and returns it as a hash with key:
   language.
   
   =cut
   
   
   sub getlangs {
       my ($uname,$udom) = @_;
       if (!$udom)  { $udom =$env{'user.domain'}; }
       if (!$uname) { $uname=$env{'user.name'};   }
       my $id=$uname.':'.$udom;
       my ($langs,$cached)=&Apache::lonnet::is_cached_new('userlangs',$id);
       if ($cached) {
           return %{$langs};
       } else {
           my %loadlangs=&Apache::lonnet::get('environment',['languages'],
                                              $udom,$uname);
           &Apache::lonnet::do_cache_new('userlangs',$id,\%loadlangs);
           return %loadlangs;
       }
   }
   
   sub flush_langs_cache {
       my ($uname,$udom)=@_;
       if (!$udom)  { $udom =$env{'user.domain'}; }
       if (!$uname) { $uname=$env{'user.name'};   }
       return if ($udom eq 'public' && $uname eq 'public');
       my $id=$uname.':'.$udom;
       &Apache::lonnet::devalidate_cache_new('userlangs',$id);
   }
   
 # ------------------------------------------------------------------ Screenname  # ------------------------------------------------------------------ Screenname
   
 =pod  =pod
Line 2735  sub screenname { Line 2833  sub screenname {
     return $names{'screenname'};      return $names{'screenname'};
 }  }
   
   # ------------------------------------------------------------- Confirm Wrapper
   =pod
   
   =item confirmwrapper
   
   Wrap messages about completion of operation in box
   
   =cut
   
   sub confirmwrapper {
       my ($message)=@_;
       if ($message) {
           return "\n".'<div class="LC_confirm_box">'."\n"
                  .$message."\n"
                  .'</div>'."\n";
       } else {
           return $message;
       }
   }
   
 # ------------------------------------------------------------- Message Wrapper  # ------------------------------------------------------------- Message Wrapper
   
Line 2761  sub aboutmewrapper { Line 2878  sub aboutmewrapper {
         return;          return;
     }      }
     return '<a href="/adm/'.$domain.'/'.$username.'/aboutme"'.      return '<a href="/adm/'.$domain.'/'.$username.'/aboutme"'.
  ($target?' target="$target"':'').' title="'.&mt("View this user's personal page").'">'.$link.'</a>';   ($target?' target="$target"':'').' title="'.&mt("View this user's personal information page").'">'.$link.'</a>';
 }  }
   
 # ------------------------------------------------------------ Syllabus Wrapper  # ------------------------------------------------------------ Syllabus Wrapper
Line 2796  sub track_student_link { Line 2913  sub track_student_link {
  &help_open_topic('View_recent_activity');   &help_open_topic('View_recent_activity');
 }  }
   
   sub slot_reservations_link {
       my ($linktext,$sname,$sdom,$target) = @_;
       my $link ="/adm/slotrequest?command=showresv&amp;origin=aboutme";
       my $title = 'View slot reservation history';
       if (defined($sname) && $sname !~ /^\s*$/ &&
           defined($sdom)  && $sdom  !~ /^\s*$/) {
           $link .= "&amp;uname=$sname&amp;udom=$sdom";
           $title .= ' of this student';
       }
       if (defined($target) && $target !~ /^\s*$/) {
           $target = qq{target="$target"};
       } else {
           $target = '';
       }
       $title = &mt($title);
       $linktext = &mt($linktext);
       return qq{<a href="$link" title="$title" $target>$linktext</a>};
   # FIXME uncomment when help item created: &help_open_topic('Slot_Reservation_History');
   
   }
   
 # ===================================================== Display a student photo  # ===================================================== Display a student photo
   
   
Line 2998  sub fileextensions { Line 3136  sub fileextensions {
   
 sub display_languages {  sub display_languages {
     my %languages=();      my %languages=();
     foreach my $lang (&preferred_languages()) {      foreach my $lang (&Apache::lonlocal::preferred_languages()) {
  $languages{$lang}=1;   $languages{$lang}=1;
     }      }
     &get_unprocessed_cgi($ENV{'QUERY_STRING'},['displaylanguage']);      &get_unprocessed_cgi($ENV{'QUERY_STRING'},['displaylanguage']);
Line 3010  sub display_languages { Line 3148  sub display_languages {
     return %languages;      return %languages;
 }  }
   
 sub preferred_languages {  
     my @languages=();  
     if (($env{'request.role.adv'}) && ($env{'form.languages'})) {  
         @languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$env{'form.languages'}));  
     }  
     if ($env{'course.'.$env{'request.course.id'}.'.languages'}) {  
  @languages=(@languages,split(/\s*(\,|\;|\:)\s*/,  
          $env{'course.'.$env{'request.course.id'}.'.languages'}));  
     }  
   
     if ($env{'environment.languages'}) {  
  @languages=(@languages,  
     split(/\s*(\,|\;|\:)\s*/,$env{'environment.languages'}));  
     }  
     my $browser=$ENV{'HTTP_ACCEPT_LANGUAGE'};  
     if ($browser) {  
  my @browser =   
     map { (split(/\s*;\s*/,$_))[0] } (split(/\s*,\s*/,$browser));  
  push(@languages,@browser);  
     }  
   
     foreach my $domtype ($env{'user.domain'},$env{'request.role.domain'},  
                          $Apache::lonnet::perlvar{'lonDefDomain'}) {  
         if ($domtype ne '') {  
             my %domdefs = &Apache::lonnet::get_domain_defaults($domtype);  
             if ($domdefs{'lang_def'} ne '') {  
                 push(@languages,$domdefs{'lang_def'});  
             }  
         }  
     }  
     return &get_genlanguages(@languages);  
 }  
   
 sub get_genlanguages {  
     my (@languages) = @_;  
 # turn "en-ca" into "en-ca,en"  
     my @genlanguages;  
     foreach my $lang (@languages) {  
         unless ($lang=~/\w/) { next; }  
         push(@genlanguages,$lang);  
         if ($lang=~/(\-|\_)/) {  
             push(@genlanguages,(split(/(\-|\_)/,$lang))[0]);  
         }  
     }  
     #uniqueify the languages list  
     my %count;  
     @genlanguages = map { $count{$_}++ == 0 ? $_ : () } @genlanguages;  
     return @genlanguages;  
 }  
   
 sub languages {  sub languages {
     my ($possible_langs) = @_;      my ($possible_langs) = @_;
     my @preferred_langs = &preferred_languages();      my @preferred_langs = &Apache::lonlocal::preferred_languages();
     if (!ref($possible_langs)) {      if (!ref($possible_langs)) {
  if( wantarray ) {   if( wantarray ) {
     return @preferred_langs;      return @preferred_langs;
Line 3083  sub languages { Line 3171  sub languages {
     return $preferred_possibilities[0];      return $preferred_possibilities[0];
 }  }
   
   sub user_lang {
       my ($touname,$toudom,$fromcid) = @_;
       my @userlangs;
       if (($fromcid ne '') && ($env{'course.'.$fromcid.'.languages'} ne '')) {
           @userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/,
                       $env{'course.'.$fromcid.'.languages'}));
       } else {
           my %langhash = &getlangs($touname,$toudom);
           if ($langhash{'languages'} ne '') {
               @userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'});
           } else {
               my %domdefs = &Apache::lonnet::get_domain_defaults($toudom);
               if ($domdefs{'lang_def'} ne '') {
                   @userlangs = ($domdefs{'lang_def'});
               }
           }
       }
       my @languages=&Apache::lonlocal::get_genlanguages(@userlangs);
       my $user_lh = Apache::localize->get_handle(@languages);
       return $user_lh;
   }
   
 ###############################################################  ###############################################################
 ##               Student Answer Attempts                     ##  ##               Student Answer Attempts                     ##
 ###############################################################  ###############################################################
Line 3221  sub relative_to_absolute { Line 3331  sub relative_to_absolute {
     }      }
     $thisdir=~s-/[^/]*$--;      $thisdir=~s-/[^/]*$--;
     foreach my $link (@rlinks) {      foreach my $link (@rlinks) {
  unless (($link=~/^http:\/\//i) ||   unless (($link=~/^https?\:\/\//i) ||
  ($link=~/^\//) ||   ($link=~/^\//) ||
  ($link=~/^javascript:/i) ||   ($link=~/^javascript:/i) ||
  ($link=~/^mailto:/i) ||   ($link=~/^mailto:/i) ||
Line 3798  sub blocking_status { Line 3908  sub blocking_status {
                              &Apache::lonnet::coursedescription($course);                               &Apache::lonnet::coursedescription($course);
                         $coursedesc = $courseinfo{'description'};                          $coursedesc = $courseinfo{'description'};
                     }                      }
                     $category = "Group files in the course '$coursedesc'";                      $category = "Group portfolio files in the course '$coursedesc'";
                 } else {                  } else {
                     $category = 'Portfolio files belonging to ';                      $category = 'Portfolio files belonging to ';
                     if ($env{'user.name'} eq 'public' &&                       if ($env{'user.name'} eq 'public' && 
Line 3930  sub get_domainconf { Line 4040  sub get_domainconf {
         if (ref($domconfig{'login'}) eq 'HASH') {          if (ref($domconfig{'login'}) eq 'HASH') {
             if (keys(%{$domconfig{'login'}})) {              if (keys(%{$domconfig{'login'}})) {
                 foreach my $key (keys(%{$domconfig{'login'}})) {                  foreach my $key (keys(%{$domconfig{'login'}})) {
                     $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};                      if (ref($domconfig{'login'}{$key}) eq 'HASH') {
                           foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
                               $designhash{$udom.'.login.'.$key.'_'.$img} =
                                   $domconfig{'login'}{$key}{$img};
                           }
                       } else {
                           $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};
                       }
                 }                  }
             } else {              } else {
                 $legacy{'login'} = 1;                  $legacy{'login'} = 1;
Line 4152  sub bodytag { Line 4269  sub bodytag {
     my $font =   &designparm($function.'.font',$domain);      my $font =   &designparm($function.'.font',$domain);
     my $pgbg   = $bgcolor || &designparm($function.'.pgbg',$domain);      my $pgbg   = $bgcolor || &designparm($function.'.pgbg',$domain);
   
     my %design = ( 'style'   => 'margin-top: 0px',      my %design = ( 'style'   => 'margin-top: 0',
    'bgcolor' => $pgbg,     'bgcolor' => $pgbg,
    'text'    => $font,     'text'    => $font,
                    'alink'   => &designparm($function.'.alink',$domain),                     'alink'   => &designparm($function.'.alink',$domain),
Line 4439  sub standard_css { Line 4556  sub standard_css {
   
     my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';      my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';
     my $mono                 = 'monospace';      my $mono                 = 'monospace';
     my $data_table_head      = $tabbg;      my $data_table_head      = $sidebg;
     my $data_table_light     = '#EEEEEE';      my $data_table_light     = '#FAFAFA';
     my $data_table_dark      = '#DDDDDD';      my $data_table_dark      = '#F0F0F0';
     my $data_table_darker    = '#CCCCCC';      my $data_table_darker    = '#CCCCCC';
     my $data_table_highlight = '#FFFF00';      my $data_table_highlight = '#FFFF00';
     my $mail_new             = '#FFBB77';      my $mail_new             = '#FFBB77';
Line 4454  sub standard_css { Line 4571  sub standard_css {
     my $mail_other_hover     = '#669999';      my $mail_other_hover     = '#669999';
     my $table_header         = '#DDDDDD';      my $table_header         = '#DDDDDD';
     my $feedback_link_bg     = '#BBBBBB';      my $feedback_link_bg     = '#BBBBBB';
       my $lg_border_color      = '#C8C8C8';
   
     my $border = ($env{'browser.type'} eq 'explorer' ||      my $border = ($env{'browser.type'} eq 'explorer' ||
   $env{'browser.type'} eq 'safari'     ) ? '0px 2px 0px 2px'    $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'
                                                  : '0px 3px 0px 4px';                                                   : '0 3px 0 4px';
   
   
     return <<END;      return <<END;
 h1, h2, h3, th { font-family: $sans }  h1, h2, h3, th { font-family: $sans }
 a:focus { color: red; background: yellow }   a:focus { color: red; background: yellow } 
   
   hr {
     clear: both;
     color: $tabbg;
     background-color: $tabbg;
     height: 3px;
     border: none;
   }
   
 table.thinborder,  table.thinborder,
   
 table.thinborder tr th {  table.thinborder tr th {
Line 4492  form, .inline { display: inline; } Line 4619  form, .inline { display: inline; }
 .LC_diff_added {  .LC_diff_added {
   color: green;    color: green;
 }  }
 .LC_unknown {  
   color: yellow;  div.LC_confirm_box {
     background-color: #FAFAFA;
     border: 1px solid $lg_border_color;
     margin-right: 0;
     padding: 5px;
   }
   
   div.LC_confirm_box .LC_error img,
   div.LC_confirm_box .LC_success img {
     vertical-align: middle;
 }  }
   
 .LC_icon {  .LC_icon {
   border: 0px;    border: none;
 }  }
 .LC_indexer_icon {  .LC_indexer_icon {
   border: 0px;    border: 0;
   height: 22px;    height: 22px;
 }  }
 .LC_docs_spacer {  .LC_docs_spacer {
   width: 25px;    width: 25px;
   height: 1px;    height: 1px;
   border: 0px;    border: none;
 }  }
   
 .LC_internal_info {  .LC_internal_info {
   color: #999;    color: #999999;
 }  }
   
 table.LC_pastsubmission {  table.LC_pastsubmission {
Line 4523  table#LC_top_nav, table#LC_menubuttons,t Line 4659  table#LC_top_nav, table#LC_menubuttons,t
   background: $pgbg;    background: $pgbg;
   border: 2px;    border: 2px;
   border-collapse: separate;    border-collapse: separate;
   padding: 0px;    padding: 0;
 }  }
   
 table#LC_title_bar, table.LC_breadcrumbs,   table#LC_title_bar, table.LC_breadcrumbs, 
Line 4536  table#LC_title_bar.LC_with_remote { Line 4672  table#LC_title_bar.LC_with_remote {
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    font-family: $sans;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0px;    padding: 0;
 }  }
   
 table.LC_docs_path {  table.LC_docs_path {
Line 4545  table.LC_docs_path { Line 4681  table.LC_docs_path {
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    font-family: $sans;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0px;    padding: 0;
 }  }
   
 table#LC_title_bar td {  table#LC_title_bar td {
Line 4566  span.LC_title_bar_title { Line 4702  span.LC_title_bar_title {
 table#LC_title_bar td.LC_title_bar_domain_logo {  table#LC_title_bar td.LC_title_bar_domain_logo {
   background: $sidebg;    background: $sidebg;
   text-align: right;    text-align: right;
   padding: 0px;    padding: 0;
 }  }
 table#LC_title_bar td.LC_title_bar_role_logo {  table#LC_title_bar td.LC_title_bar_role_logo {
   background: $sidebg;    background: $sidebg;
   padding: 0px;    padding: 0;
 }  }
   
 table#LC_menubuttons_mainmenu {  table#LC_menubuttons_mainmenu {
   width: 100%;    width: 100%;
   border: 0px;    border: 0;
   border-spacing: 1px;    border-spacing: 1px;
   padding: 0px 1px;    padding: 0 1px;
   margin: 0px;    margin: 0;
   border-collapse: separate;    border-collapse: separate;
 }  }
 table#LC_menubuttons img, table#LC_menubuttons_mainmenu img {  table#LC_menubuttons img, table#LC_menubuttons_mainmenu img {
   border: 0px;    border: none;
 }  }
 table#LC_top_nav td {  table#LC_top_nav td {
   background: $tabbg;    background: $tabbg;
   border: 0px;    border: none;
   font-size: small;    font-size: small;
 }  }
 table#LC_top_nav td a, div#LC_top_nav a {  table#LC_top_nav td a, div#LC_top_nav a {
Line 4600  table#LC_top_nav td.LC_top_nav_logo { Line 4736  table#LC_top_nav td.LC_top_nav_logo {
   width: 31px;    width: 31px;
 }  }
 table#LC_top_nav td.LC_top_nav_logo img {  table#LC_top_nav td.LC_top_nav_logo img {
   border: 0px;    border: none;
   vertical-align: bottom;    vertical-align: bottom;
 }  }
 table#LC_top_nav td.LC_top_nav_exit,  table#LC_top_nav td.LC_top_nav_exit,
Line 4641  table#LC_mainmenu td.LC_mainmenu_column Line 4777  table#LC_mainmenu td.LC_mainmenu_column
 .LC_menubuttons_link {  .LC_menubuttons_link {
   text-decoration: none;    text-decoration: none;
 }  }
 #2008--9-5: new menu style sheet.Changed category  /*2008--9-5: new menu style sheet.Changed category*/
 .LC_menubuttons_category {  .LC_menubuttons_category {
   color: $font;    color: $font;
   background: $pgbg;    background: $pgbg;
Line 4669  td.LC_menubuttons_img { Line 4805  td.LC_menubuttons_img {
   font-weight: bold;    font-weight: bold;
 }  }
   
 .LC_rolesmenu_is {  
   font-family: $sans;  
 }  
   
 .LC_rolesmenu_selected {  
   font-family: $sans;  
 }  
   
 .LC_rolesmenu_future {  
   font-family: $sans;  
 }  
   
   
 .LC_rolesmenu_will {  
   font-family: $sans;  
 }  
   
 .LC_rolesmenu_will_not {  
   font-family: $sans;  
 }  
   
 .LC_rolesmenu_expired {  
   font-family: $sans;  
 }  
   
 .LC_rolesinfo {  
   font-family: $sans;  
 }  
   
 .LC_dropadd_labeltext {  .LC_dropadd_labeltext {
   font-family: $sans;    font-family: $sans;
   text-align: right;    text-align: right;
Line 4712  td.LC_menubuttons_img { Line 4819  td.LC_menubuttons_img {
   font-size: smaller;    font-size: smaller;
 }  }
   
   .LC_mail_functions {
       font-weight: bold;
   }
   
 table.LC_aboutme_port {  table.LC_aboutme_port {
   border: 0px;    border: none;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0px;    border-spacing: 0;
 }  }
 table.LC_data_table, table.LC_mail_list {  table.LC_data_table, table.LC_mail_list {
   border: 1px solid #000000;    border: 1px solid #000000;
Line 4729  table.LC_data_table, table.LC_mail_list Line 4840  table.LC_data_table, table.LC_mail_list
 table.LC_nested_outer {  table.LC_nested_outer {
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0px;    border-spacing: 0;
   width: 100%;    width: 100%;
 }  }
 table.LC_nested {  table.LC_nested {
   border: 0px;    border: none;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0px;    border-spacing: 0;
   width: 100%;    width: 100%;
 }  }
 table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th,  table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th,
Line 4744  table.LC_prior_tries tr th { Line 4855  table.LC_prior_tries tr th {
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: smaller;    font-size: smaller;
 }  }
   table.LC_data_table tr.LC_info_row > td {
     background-color: #CCCCCC;
     font-weight: bold;
     text-align: left;
   }
 table.LC_data_table tr.LC_odd_row > td,   table.LC_data_table tr.LC_odd_row > td, 
   table.LC_pick_box tr > td.LC_odd_row,
 table.LC_aboutme_port tr td {  table.LC_aboutme_port tr td {
   background-color: $data_table_light;    background-color: $data_table_light;
   padding: 2px;    padding: 2px;
 }  }
 table.LC_data_table tr.LC_even_row > td,  table.LC_data_table tr.LC_even_row > td,
   table.LC_pick_box tr > td.LC_even_row,
 table.LC_aboutme_port tr.LC_even_row td {  table.LC_aboutme_port tr.LC_even_row td {
   background-color: $data_table_dark;    background-color: $data_table_dark;
     padding: 2px;
 }  }
 table.LC_data_table tr.LC_data_table_highlight td {  table.LC_data_table tr.LC_data_table_highlight td {
   background-color: $data_table_darker;    background-color: $data_table_darker;
Line 4785  table.LC_nested_outer tr td.LC_subheader Line 4904  table.LC_nested_outer tr td.LC_subheader
   text-align: right;    text-align: right;
 }  }
 table.LC_nested tr.LC_info_row td {  table.LC_nested tr.LC_info_row td {
   background-color: #CCC;    background-color: #CCCCCC;
   font-weight: bold;    font-weight: bold;
   font-size: small;    font-size: small;
   text-align: center;    text-align: center;
Line 4795  table.LC_nested_outer tr th.LC_left_item Line 4914  table.LC_nested_outer tr th.LC_left_item
   text-align: left;    text-align: left;
 }  }
 table.LC_nested td {  table.LC_nested td {
   background-color: #FFF;    background-color: #FFFFFF;
   font-size: small;    font-size: small;
 }  }
 table.LC_nested_outer tr th.LC_right_item,  table.LC_nested_outer tr th.LC_right_item,
Line 4806  table.LC_nested tr td.LC_right_item { Line 4925  table.LC_nested tr td.LC_right_item {
 }  }
   
 table.LC_nested tr.LC_odd_row td {  table.LC_nested tr.LC_odd_row td {
   background-color: #EEE;    background-color: #EEEEEE;
 }  }
   
 table.LC_createuser {  table.LC_createuser {
Line 4817  table.LC_createuser tr.LC_section_row td Line 4936  table.LC_createuser tr.LC_section_row td
 }  }
   
 table.LC_createuser tr.LC_info_row td  {  table.LC_createuser tr.LC_info_row td  {
   background-color: #CCC;    background-color: #CCCCCC;
   font-weight: bold;    font-weight: bold;
   text-align: center;    text-align: center;
 }  }
Line 4873  table.LC_mail_list tr.LC_mail_odd { Line 4992  table.LC_mail_list tr.LC_mail_odd {
 table#LC_portfolio_actions {  table#LC_portfolio_actions {
   width: auto;    width: auto;
   background: $pgbg;    background: $pgbg;
   border: 0px;    border: none;
   border-spacing: 2px 2px;    border-spacing: 2px 2px;
   padding: 0px;    padding: 0;
   margin: 0px;    margin: 0;
   border-collapse: separate;    border-collapse: separate;
 }  }
 table#LC_portfolio_actions td.LC_label {  table#LC_portfolio_actions td.LC_label {
Line 4932  table#LC_browser tr.LC_browser_file_meta Line 5051  table#LC_browser tr.LC_browser_file_meta
 table#LC_browser tr.LC_browser_folder {  table#LC_browser tr.LC_browser_folder {
   background: #CCCCFF;    background: #CCCCFF;
 }  }
   
   table.LC_data_table tr > td.LC_roles_is {
   /*  background: #77FF77; */
   }
   table.LC_data_table tr > td.LC_roles_future {
     background: #FFFF77;
   }
   table.LC_data_table tr > td.LC_roles_will {
     background: #FFAA77;
   }
   table.LC_data_table tr > td.LC_roles_expired {
     background: #FF7777;
   }
   table.LC_data_table tr > td.LC_roles_will_not {
     background: #AAFF77;
   }
   table.LC_data_table tr > td.LC_roles_selected {
     background: #11CC55;
   }
   
 span.LC_current_location {  span.LC_current_location {
   font-size: x-large;    font-size: x-large;
   background: $pgbg;    background: $pgbg;
Line 4977  table.LC_parm_overview_restrictions th { Line 5116  table.LC_parm_overview_restrictions th {
   border-color: $pgbg;    border-color: $pgbg;
 }  }
 table#LC_helpmenu {  table#LC_helpmenu {
   border: 0px;    border: none;
   height: 55px;    height: 55px;
   border-spacing: 0px;    border-spacing: 0;
 }  }
   
 table#LC_helpmenu fieldset legend {  table#LC_helpmenu fieldset legend {
Line 4990  table#LC_helpmenu_links { Line 5129  table#LC_helpmenu_links {
   width: 100%;    width: 100%;
   border: 1px solid black;    border: 1px solid black;
   background: $pgbg;    background: $pgbg;
   padding: 0px;    padding: 0;
   border-spacing: 1px;    border-spacing: 1px;
 }  }
 table#LC_helpmenu_links tr td {  table#LC_helpmenu_links tr td {
Line 5029  table.LC_pick_box { Line 5168  table.LC_pick_box {
   border-spacing: 1px;    border-spacing: 1px;
 }  }
 table.LC_pick_box td.LC_pick_box_title {  table.LC_pick_box td.LC_pick_box_title {
   background: $tabbg;    background: $sidebg;
   font-weight: bold;    font-weight: bold;
   text-align: right;    text-align: right;
     vertical-align: top;
   width: 184px;    width: 184px;
   padding: 8px;    padding: 8px;
 }  }
 table.LC_pick_box td.LC_selfenroll_pick_box_title {  table.LC_pick_box td.LC_selfenroll_pick_box_title {
   background: $tabbg;    background: $sidebg;
   font-weight: bold;    font-weight: bold;
   text-align: right;    text-align: right;
   width: 350px;    width: 350px;
Line 5052  table.LC_pick_box td.LC_pick_box_select Line 5192  table.LC_pick_box td.LC_pick_box_select
   padding: 8px;    padding: 8px;
 }  }
 table.LC_pick_box td.LC_pick_box_separator {  table.LC_pick_box td.LC_pick_box_separator {
   padding: 0px;    padding: 0;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
Line 5094  table.LC_helpform_receipt td.LC_oddrow_v Line 5234  table.LC_helpform_receipt td.LC_oddrow_v
   background-color: $data_table_light;    background-color: $data_table_light;
 }  }
 table.LC_helpform_receipt td.LC_pick_box_separator {  table.LC_helpform_receipt td.LC_pick_box_separator {
   padding: 0px;    padding: 0;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
Line 5127  table.LC_group_priv_box td.LC_groups_fun Line 5267  table.LC_group_priv_box td.LC_groups_fun
 }  }
 table.LC_group_priv td {  table.LC_group_priv td {
   text-align: left;    text-align: left;
   padding: 0px;    padding: 0;
 }  }
   
 table.LC_notify_front_page {  table.LC_notify_front_page {
Line 5148  table.LC_notify_front_page td { Line 5288  table.LC_notify_front_page td {
   background: $tabbg;    background: $tabbg;
   vertical-align: middle;    vertical-align: middle;
   margin: 2ex 0ex 2ex 0ex;    margin: 2ex 0ex 2ex 0ex;
     padding: 3px;
 }  }
 .LC_topic_bar span {  .LC_topic_bar span {
   vertical-align: middle;    vertical-align: middle;
Line 5264  span.LC_cusr_subheading { Line 5405  span.LC_cusr_subheading {
   
 table.LC_docs_documents {  table.LC_docs_documents {
   background: #BBBBBB;    background: #BBBBBB;
   border-width: 0px;    border-width: 0;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
Line 5281  table.LC_docs_documents td.LC_docs_docum Line 5422  table.LC_docs_documents td.LC_docs_docum
 }  }
   
 .LC_docs_entry_move {  .LC_docs_entry_move {
   border: 0px;    border: none;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
Line 5337  table.LC_sty_end { Line 5478  table.LC_sty_end {
 }  }
   
 table.LC_double_column {  table.LC_double_column {
   border-width: 0px;    border-width: 0;
   border-collapse: collapse;    border-collapse: collapse;
   width: 100%;    width: 100%;
   padding: 2px;    padding: 2px;
Line 5476  table.LC_edit_problem_header_title { Line 5617  table.LC_edit_problem_header_title {
   
   background: $tabbg;    background: $tabbg;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0px    padding: 0;
 }  }
   
 div.LC_edit_problem_discards {  div.LC_edit_problem_discards {
Line 5492  hr.LC_edit_problem_divide { Line 5633  hr.LC_edit_problem_divide {
   color: $tabbg;    color: $tabbg;
   background-color: $tabbg;    background-color: $tabbg;
   height: 3px;    height: 3px;
   border: 0px;    border: none;
 }  }
 img.stift{  img.stift{
   border-width:0;    border-width:0;
Line 5517  table#LC_mainmenu td.LC_mainmenu_col_fie Line 5658  table#LC_mainmenu td.LC_mainmenu_col_fie
   font-weight: bold;    font-weight: bold;
 }  }
 fieldset#LC_mainmenu_fieldset {  fieldset#LC_mainmenu_fieldset {
   margin:0px 10px 10px 0px;    margin:0 10px 10px 0;
   
 }  }
   
   div.LC_createcourse {
       margin: 10px 10px 10px 10px;
   }
   
 END  END
 }  }
   
Line 5647  sub xml_begin { Line 5793  sub xml_begin {
             .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" '               .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' 
     .'xmlns="http://www.w3.org/1999/xhtml">';      .'xmlns="http://www.w3.org/1999/xhtml">';
     } else {      } else {
  $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>';   $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'.
               '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
     }      }
     return $output;      return $output;
 }  }
Line 5788  sub start_page { Line 5935  sub start_page {
     if ($args->{'html_encode'}) {      if ($args->{'html_encode'}) {
  $result = &html_encode($result);   $result = &html_encode($result);
     }      }
       #Breadcrumbs
       if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
           &Apache::lonhtmlcommon::clear_breadcrumbs();
           #if any br links exists, add them to the breadcrumbs
           if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') {
               foreach my $crumb (@{$args->{'bread_crumbs'}}){
                   &Apache::lonhtmlcommon::add_breadcrumb($crumb);
               }
           }
   
           #if bread_crumbs_component exists show it as headline else show only the breadcrumbs
           if (exists($args->{'bread_crumbs_component'})){
               $result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});
           } else {
               $result .= &Apache::lonhtmlcommon::breadcrumbs();
           }
       }
     return $result;      return $result;
 }  }
   
   
 =pod  =pod
   
 =item * &head()  =item * &head()
Line 6022  sub get_users_function { Line 6185  sub get_users_function {
     if ($env{'request.role'}=~/^(su|dc|ad|li)/) {      if ($env{'request.role'}=~/^(su|dc|ad|li)/) {
         $function='admin';          $function='admin';
     }      }
     if (($env{'request.role'}=~/^(au|ca)/) ||      if (($env{'request.role'}=~/^(au|ca|aa)/) ||
         ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {          ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
         $function='author';          $function='author';
     }      }
Line 6033  sub get_users_function { Line 6196  sub get_users_function {
   
 =pod  =pod
   
   =item * &show_course()
   
   Used by lonmenu.pm and lonroles.pm to determine whether to use the word
   'Courses' or 'Roles' in inline navigation and on screen displaying user's roles.
   Inputs:
   None
   
   Outputs:
   Scalar: 1 if 'Course' to be used, 0 otherwise.
   
   =cut
   
   ###############################################
   sub show_course {
       my $course = !$env{'user.adv'};
       if (!$env{'user.adv'}) {
           foreach my $env (keys(%env)) {
               next if ($env !~ m/^user\.priv\./);
               if ($env !~ m/^user\.priv\.(?:st|cm)/) {
                   $course = 0;
                   last;
               }
           }
       }
       return $course;
   }
   
   ###############################################
   
   =pod
   
 =item * &check_user_status()  =item * &check_user_status()
   
 Determines current status of supplied role for a  Determines current status of supplied role for a
Line 6548  sub default_quota { Line 6742  sub default_quota {
                                             ['quotas'],$udom);                                              ['quotas'],$udom);
     if (ref($quotahash{'quotas'}) eq 'HASH') {      if (ref($quotahash{'quotas'}) eq 'HASH') {
         if ($inststatus ne '') {          if ($inststatus ne '') {
             my @statuses = split(/:/,$inststatus);              my @statuses = map { &unescape($_); } split(/:/,$inststatus);
             foreach my $item (@statuses) {              foreach my $item (@statuses) {
                 if ($quotahash{'quotas'}{$item} ne '') {                  if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
                     if ($defquota eq '') {                      if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') {
                         $defquota = $quotahash{'quotas'}{$item};                          if ($defquota eq '') {
                         $settingstatus = $item;                              $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};
                     } elsif ($quotahash{'quotas'}{$item} > $defquota) {                              $settingstatus = $item;
                         $defquota = $quotahash{'quotas'}{$item};                          } elsif ($quotahash{'quotas'}{'defaultquota'}{$item} > $defquota) {
                         $settingstatus = $item;                              $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};
                               $settingstatus = $item;
                           }
                       }
                   } else {
                       if ($quotahash{'quotas'}{$item} ne '') {
                           if ($defquota eq '') {
                               $defquota = $quotahash{'quotas'}{$item};
                               $settingstatus = $item;
                           } elsif ($quotahash{'quotas'}{$item} > $defquota) {
                               $defquota = $quotahash{'quotas'}{$item};
                               $settingstatus = $item;
                           }
                     }                      }
                 }                  }
             }              }
         }          }
         if ($defquota eq '') {          if ($defquota eq '') {
             $defquota = $quotahash{'quotas'}{'default'};              if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
                   $defquota = $quotahash{'quotas'}{'defaultquota'}{'default'};
               } else {
                   $defquota = $quotahash{'quotas'}{'default'};
               }
             $settingstatus = 'default';              $settingstatus = 'default';
         }          }
     } else {      } else {
Line 6711  sub user_picker { Line 6921  sub user_picker {
                 if ($cancreate) {                  if ($cancreate) {
                     $new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>';                      $new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>';
                 } else {                  } else {
                     my $helplink = ' href="javascript:helpMenu('."'display'".')"';                      my $helplink = 'javascript:helpMenu('."'display'".')';
                     my %usertypetext = (                      my %usertypetext = (
                         official   => 'institutional',                          official   => 'institutional',
                         unofficial => 'non-institutional',                          unofficial => 'non-institutional',
                     );                      );
                     $new_user_create = '<br /><span class="LC_warning">'.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.").' '.&mt('Contact the <a[_1]>helpdesk</a> for assistance.',$helplink).'</span><br /><br />';                      $new_user_create = '<p class="LC_warning">'.
                                          &mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.").' '.
                                          &mt('Please contact the [_1]helpdesk[_2] for assistance.','<a href="'.$helplink.'">','</a>').'</p><br />';
                 }                  }
             }              }
         }          }
Line 6753  ENDSCRIPT Line 6965  ENDSCRIPT
   
     my $output = <<"END_BLOCK";      my $output = <<"END_BLOCK";
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 function validateEntry(callingForm) {  function validateEntry(callingForm) {
   
     var checkok = 1;      var checkok = 1;
Line 6821  function validateEntry(callingForm) { Line 7034  function validateEntry(callingForm) {
   
 $newuserscript  $newuserscript
   
   // ]]>
 </script>  </script>
   
 $new_user_create  $new_user_create
Line 6998  sub personal_data_fieldtitles { Line 7212  sub personal_data_fieldtitles {
                         middlename => 'Middle Name',                          middlename => 'Middle Name',
                         generation => 'Generation',                          generation => 'Generation',
                         gen => 'Generation',                          gen => 'Generation',
                           inststatus => 'Affiliation',
                    );                     );
     return %fieldtitles;      return %fieldtitles;
 }  }
Line 7067  sub get_institutional_codes { Line 7282  sub get_institutional_codes {
   
 =pod  =pod
   
   =head1 Slot Helpers
   
   =over 4
   
   =item * sorted_slots()
   
   Sorts an array of slot names in order of slot start time (earliest first).
   
   Inputs:
   
   =over 4
   
   slotsarr  - Reference to array of unsorted slot names.
   
   slots     - Reference to hash of hash, where outer hash keys are slot names.
   
   =back
   
   Returns:
   
   =over 4
   
   sorted   - An array of slot names sorted by the start time of the slot.
   
   =back
   
   =back
   
   =cut
   
   
   sub sorted_slots {
       my ($slotsarr,$slots) = @_;
       my @sorted;
       if ((ref($slotsarr) eq 'ARRAY') && (ref($slots) eq 'HASH')) {
           @sorted =
               sort {
                        if (ref($slots->{$a}) && ref($slots->{$b})) {
                            return $slots->{$a}{'starttime'} <=> $slots->{$b}{'starttime'}
                        }
                        if (ref($slots->{$a})) { return -1;}
                        if (ref($slots->{$b})) { return 1;}
                        return 0;
                    } @{$slotsarr};
       }
       return @sorted;
   }
   
   =pod
   
 =back  =back
   
 =head1 HTTP Helpers  =head1 HTTP Helpers
Line 7619  sub upfile_select_html { Line 7884  sub upfile_select_html {
 #                 xml   => &mt('HTML/XML'),  #                 xml   => &mt('HTML/XML'),
                  );                   );
     my $Str = '<input type="file" name="upfile" size="50" />'.      my $Str = '<input type="file" name="upfile" size="50" />'.
         '<br />Type: <select name="upfiletype">';          '<br />'.&mt('Type').': <select name="upfiletype">';
     foreach my $type (sort(keys(%Types))) {      foreach my $type (sort(keys(%Types))) {
         $Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n";          $Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n";
     }      }
Line 7665  sub csv_print_samples { Line 7930  sub csv_print_samples {
     $r->print(&mt('Samples').'<br />'.&start_data_table().      $r->print(&mt('Samples').'<br />'.&start_data_table().
               &start_data_table_header_row());                &start_data_table_header_row());
     foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {       foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) { 
         $r->print('<th>'.&mt('Column&nbsp;[_1]',($sample+1)).'</th>'); }          $r->print('<th>'.&mt('Column [_1]',($sample+1)).'</th>');
       }
     $r->print(&end_data_table_header_row());      $r->print(&end_data_table_header_row());
     foreach my $hash (@$samples) {      foreach my $hash (@$samples) {
  $r->print(&start_data_table_row());   $r->print(&start_data_table_row());
Line 7707  sub csv_print_select_table { Line 7973  sub csv_print_select_table {
               &end_data_table_header_row()."\n");                &end_data_table_header_row()."\n");
     foreach my $array_ref (@$d) {      foreach my $array_ref (@$d) {
  my ($value,$display,$defaultcol)=@{ $array_ref };   my ($value,$display,$defaultcol)=@{ $array_ref };
  $r->print(&start_data_table_row().'<tr><td>'.$display.'</td>');   $r->print(&start_data_table_row().'<td>'.$display.'</td>');
   
  $r->print('<td><select name=f'.$i.   $r->print('<td><select name=f'.$i.
   ' onchange="javascript:flip(this.form,'.$i.');">');    ' onchange="javascript:flip(this.form,'.$i.');">');
Line 8363  sub restore_settings { Line 8629  sub restore_settings {
   
 =item * &build_recipient_list()  =item * &build_recipient_list()
   
 Build recipient lists for three types of e-mail:  Build recipient lists for four types of e-mail:
 (a) Error Reports, (b) Package Updates, (c) Help requests, generated by  (a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors
 lonerrorhandler.pm, CHECKRPMS and lonsupportreq.pm respectively.  (d) Help requests, generated by
   lonerrorhandler.pm, CHECKRPMS, loncron, and lonsupportreq.pm respectively.
   
 Inputs:  Inputs:
 defmail (scalar - email address of default recipient),   defmail (scalar - email address of default recipient), 
Line 8389  sub build_recipient_list { Line 8656  sub build_recipient_list {
     my %domconfig =      my %domconfig =
          &Apache::lonnet::get_dom('configuration',['contacts'],$defdom);           &Apache::lonnet::get_dom('configuration',['contacts'],$defdom);
     if (ref($domconfig{'contacts'}) eq 'HASH') {      if (ref($domconfig{'contacts'}) eq 'HASH') {
         if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') {          if (exists($domconfig{'contacts'}{$mailing})) {
             my @contacts = ('adminemail','supportemail');              if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') {
             foreach my $item (@contacts) {                  my @contacts = ('adminemail','supportemail');
                 if ($domconfig{'contacts'}{$mailing}{$item}) {                  foreach my $item (@contacts) {
                     my $addr = $domconfig{'contacts'}{$item};                       if ($domconfig{'contacts'}{$mailing}{$item}) {
                     if (!grep(/^\Q$addr\E$/,@recipients)) {                          my $addr = $domconfig{'contacts'}{$item};
                         push(@recipients,$addr);                          if (!grep(/^\Q$addr\E$/,@recipients)) {
                               push(@recipients,$addr);
                           }
                     }                      }
                       $otheremails = $domconfig{'contacts'}{$mailing}{'others'};
                 }                  }
                 $otheremails = $domconfig{'contacts'}{$mailing}{'others'};  
             }              }
           } elsif ($origmail ne '') {
               push(@recipients,$origmail);
         }          }
     } elsif ($origmail ne '') {      } elsif ($origmail ne '') {
         push(@recipients,$origmail);          push(@recipients,$origmail);
Line 9043  sub construct_course { Line 9314  sub construct_course {
                    'policy.email',                     'policy.email',
                    'comment.email',                     'comment.email',
                    'pch.users.denied',                     'pch.users.denied',
                    'plc.users.denied'],                     'plc.users.denied',
                      'hidefromcat',
                      'categories'],
                    $$crsudom,$$crsunum);                     $$crsudom,$$crsunum);
     }      }
   
Line 9271  sub construct_course { Line 9544  sub construct_course {
         $outcome .= ($fatal?$errtext:'read ok').' - ';          $outcome .= ($fatal?$errtext:'read ok').' - ';
         my $title; my $url;          my $title; my $url;
         if ($args->{'firstres'} eq 'syl') {          if ($args->{'firstres'} eq 'syl') {
     $title='Syllabus';      $title=&mt('Syllabus');
             $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';              $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';
         } else {          } else {
             $title='Navigate Contents';              $title=&mt('Navigate Contents');
             $url='/adm/navmaps';              $url='/adm/navmaps';
         }          }
   
Line 9306  sub course_type { Line 9579  sub course_type {
 sub group_term {  sub group_term {
     my $crstype = &course_type();      my $crstype = &course_type();
     my %names = (      my %names = (
                   'Course' => 'group',                    'Course'    => 'group',
                   'Group' => 'team',                    'Community' => 'group',
                 );                  );
     return $names{$crstype};      return $names{$crstype};
 }  }
Line 9328  sub icon { Line 9601  sub icon {
     return &lonhttpdurl($iconname);      return &lonhttpdurl($iconname);
 }   } 
   
 sub lonhttpd_port {  
     my $lonhttpd_port=$Apache::lonnet::perlvar{'lonhttpdPort'};  
     if (!defined($lonhttpd_port)) { $lonhttpd_port='8080'; }  
     # IE doesn't like a secure page getting images from a non-secure  
     # port (when logging we haven't parsed the browser type so default  
     # back to secure  
     if ((!exists($env{'browser.type'}) || $env{'browser.type'} eq 'explorer')  
  && $ENV{'SERVER_PORT'} == 443) {  
  return 443;  
     }  
     return $lonhttpd_port;  
   
 }  
   
 sub lonhttpdurl {  sub lonhttpdurl {
   #
   # Had been used for "small fry" static images on separate port 8080.
   # Modify here if lightweight http functionality desired again.
   # Currently eliminated due to increasing firewall issues.
   #
     my ($url)=@_;      my ($url)=@_;
       return $url;
     my $lonhttpd_port = &lonhttpd_port();  
     if ($lonhttpd_port == 443) {  
  return 'https://'.$ENV{'SERVER_NAME'}.$url;  
     }  
     return 'http://'.$ENV{'SERVER_NAME'}.':'.$lonhttpd_port.$url;  
 }  }
   
 sub connection_aborted {  sub connection_aborted {
Line 9385  sub escape_url { Line 9644  sub escape_url {
     return join('/',@urlslices).'/'.$lastitem;      return join('/',@urlslices).'/'.$lastitem;
 }  }
   
   sub compare_arrays {
       my ($arrayref1,$arrayref2) = @_;
       my (@difference,%count);
       @difference = ();
       %count = ();
       if ((ref($arrayref1) eq 'ARRAY') && (ref($arrayref2) eq 'ARRAY')) {
           foreach my $element (@{$arrayref1}, @{$arrayref2}) { $count{$element}++; }
           foreach my $element (keys(%count)) {
               if ($count{$element} == 1) {
                   push(@difference,$element);
               }
           }
       }
       return @difference;
   }
   
 # -------------------------------------------------------- Initliaze user login  # -------------------------------------------------------- Initliaze user login
 sub init_user_environment {  sub init_user_environment {
     my ($r, $username, $domain, $authhost, $form, $args) = @_;      my ($r, $username, $domain, $authhost, $form, $args) = @_;
Line 9515  sub init_user_environment { Line 9790  sub init_user_environment {
     }      }
  }   }
   
           foreach my $tool ('aboutme','blog','portfolio') {
               $userenv{'availabletools.'.$tool} =
                   &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
           }
   
           foreach my $crstype ('official','unofficial','community') {
               $userenv{'canrequest.'.$crstype} =
                   &Apache::lonnet::usertools_access($username,$domain,$crstype,
                                                     'reload','requestcourses');
           }
   
  $env{'user.environment'} = "$lonids/$cookie.id";   $env{'user.environment'} = "$lonids/$cookie.id";
   
  if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",   if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",
Line 9553  sub _add_to_env { Line 9839  sub _add_to_env {
 # --- Get the symbolic name of a problem and the url  # --- Get the symbolic name of a problem and the url
 sub get_symb {  sub get_symb {
     my ($request,$silent) = @_;      my ($request,$silent) = @_;
     (my $url=$env{'form.url'}) =~ s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;      (my $url=$env{'form.url'}) =~ s-^https?\://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
     my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url)));      my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url)));
     if ($symb eq '') {      if ($symb eq '') {
         if (!$silent) {          if (!$silent) {
Line 9580  sub get_annotation { Line 9866  sub get_annotation {
 }  }
   
 sub clean_symb {  sub clean_symb {
     my ($symb) = @_;      my ($symb,$delete_enc) = @_;
   
     &Apache::lonenc::check_decrypt(\$symb);      &Apache::lonenc::check_decrypt(\$symb);
     my $enc = $env{'request.enc'};      my $enc = $env{'request.enc'};
     delete($env{'request.enc'});      if ($delete_enc) {
           delete($env{'request.enc'});
       }
   
     return ($symb,$enc);      return ($symb,$enc);
 }  }

Removed from v.1.688  
changed lines
  Added in v.1.692.4.7


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