Diff for /loncom/interface/loncommon.pm between versions 1.692.4.17 and 1.748

version 1.692.4.17, 2009/09/07 13:13:58 version 1.748, 2009/02/14 12:20:10
Line 271  BEGIN { Line 271  BEGIN {
         }          }
     }      }
     &Apache::lonnet::logthis(      &Apache::lonnet::logthis(
               "<font color=yellow>INFO: Read file types</font>");               "<span style='color:yellow;'>INFO: Read file types</span>");
     $readit=1;      $readit=1;
     }  # end of unless($readit)       }  # end of unless($readit) 
           
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,courseadvonly) {      function openstdbrowser(formname,uname,udom,roleflag,ignorefilter) {
         var url = '/adm/pickstudent?';          var url = '/adm/pickstudent?';
         var filter;          var filter;
  if (!ignorefilter) {   if (!ignorefilter) {
Line 423  sub studentbrowser_javascript { Line 422  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,$courseadvonly)=@_;     my ($form,$unameele,$udomele)=@_;
    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 '';
        }         }
        if ($courseadvonly)  {         return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.
            $callargs .= ",'',1,1";          '","'.$udomele.'");'."'>".&mt('Select User')."</a>";
        }  
        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)/) {
        $callargs .= ",1";         return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.
        return '<span class="LC_nobreak">'.          '","'.$udomele.'",1);'."'>".&mt('Select User')."</a>";
               '<a href="javascript:openstdbrowser('.$callargs.');">'.  
               &mt('Select User').'</a></span>';  
    }     }
    return '';     return '';
 }  }
Line 463  sub selectstudent_link { Line 453  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 475  function openauthorbrowser(formname,udom Line 464  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 Community - 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 Group - for which you wish to add/modify a user role');
     my $id_functions = &javascript_index_functions();     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) {
         var url = '/adm/pickcourse?';          var url = '/adm/pickcourse?';
         var domainfilter = getDomainFromSelectbox(formname,udom);          var domainfilter = '';
           var formid = getFormIdByName(formname);
           if (formid > -1) {
               var domid = getIndexByName(formid,udom);
               if (domid > -1) {
                   if (document.forms[formid].elements[domid].type == 'select-one') {
                       domainfilter=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;
                   }
                   if (document.forms[formid].elements[domid].type == 'hidden') {
                       domainfilter=document.forms[formid].elements[domid].value;
                   }
               }
           }
         if (domainfilter != null) {          if (domainfilter != null) {
            if (domainfilter != '') {             if (domainfilter != '') {
                url += 'domainfilter='+domainfilter+'&';                 url += 'domainfilter='+domainfilter+'&';
Line 514  sub coursebrowser_javascript { Line 512  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/Community') {          if (crstype == 'Course/Group') {
             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 540  sub coursebrowser_javascript { Line 533  sub coursebrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');          stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();          stdeditbrowser.focus();
     }      }
 $id_functions  
 ENDSTDBRW  
     if ($sec_element ne '') {  
         $output .= &setsec_javascript($sec_element,$formname);  
     }  
     $output .= '  
 // ]]>  
 </script>';  
     return $output;  
 }  
   
 sub javascript_index_functions {  
     return <<"ENDJS";  
   
 function getFormIdByName(formname) {  
     for (var i=0;i<document.forms.length;i++) {  
         if (document.forms[i].name == formname) {  
             return i;  
         }  
     }  
     return -1;  
 }  
   
 function getIndexByName(formid,item) {  
     for (var i=0;i<document.forms[formid].elements.length;i++) {  
         if (document.forms[formid].elements[i].name == item) {  
             return i;  
         }  
     }  
     return -1;  
 }  
   
 function getDomainFromSelectbox(formname,udom) {      function getFormIdByName(formname) {
     var userdom;          for (var i=0;i<document.forms.length;i++) {
     var formid = getFormIdByName(formname);              if (document.forms[i].name == formname) {
     if (formid > -1) {                  return i;
         var domid = getIndexByName(formid,udom);  
         if (domid > -1) {  
             if (document.forms[formid].elements[domid].type == 'select-one') {  
                 userdom=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;  
             }  
             if (document.forms[formid].elements[domid].type == 'hidden') {  
                 userdom=document.forms[formid].elements[domid].value;  
             }              }
         }          }
           return -1; 
     }      }
     return userdom;  
 }  
   
 ENDJS  
   
 }  
   
 sub userbrowser_javascript {  
     my $id_functions = &javascript_index_functions();  
     return <<"ENDUSERBRW";  
   
 function openuserbrowser(formname,uname,udom,ulast,ufirst,uemail,hideudom,crsdom,caller) {  
     var url = '/adm/pickuser?';  
     var userdom = getDomainFromSelectbox(formname,udom);  
     if (userdom != null) {  
        if (userdom != '') {  
            url += 'srchdom='+userdom+'&';  
        }  
     }  
     url += 'form=' + formname + '&unameelement='+uname+  
                                 '&udomelement='+udom+  
                                 '&ulastelement='+ulast+  
                                 '&ufirstelement='+ufirst+  
                                 '&uemailelement='+uemail+  
                                 '&hideudomelement='+hideudom+  
                                 '&coursedom='+crsdom;  
     if ((caller != null) && (caller != undefined)) {  
         url += '&caller='+caller;  
     }  
     var title = 'User_Browser';  
     var options = 'scrollbars=1,resizable=1,menubar=0';  
     options += ',width=700,height=600';  
     var stdeditbrowser = open(url,title,options,'1');  
     stdeditbrowser.focus();  
 }  
   
 function fix_domain (formname,udom,origdom,uname) {      function getIndexByName(formid,item) {
     var formid = getFormIdByName(formname);          for (var i=0;i<document.forms[formid].elements.length;i++) {
     if (formid > -1) {              if (document.forms[formid].elements[i].name == item) {
         var unameid = getIndexByName(formid,uname);                  return i;
         var domid = getIndexByName(formid,udom);  
         var hidedomid = getIndexByName(formid,origdom);  
         if (hidedomid > -1) {  
             var fixeddom = document.forms[formid].elements[hidedomid].value;  
             var unameval = document.forms[formid].elements[unameid].value;  
             if ((fixeddom != '') && (fixeddom != undefined) && (fixeddom != null) && (unameval != '') && (unameval != undefined) && (unameval != null)) {  
                 if (domid > -1) {  
                     var slct = document.forms[formid].elements[domid];  
                     if (slct.type == 'select-one') {  
                         var i;  
                         for (i=0;i<slct.length;i++) {  
                             if (slct.options[i].value==fixeddom) { slct.selectedIndex=i; }  
                         }  
                     }  
                     if (slct.type == 'hidden') {  
                         slct.value = fixeddom;  
                     }  
                 }  
             }              }
         }          }
           return -1;
     }      }
     return;  ENDSTDBRW
 }      if ($sec_element ne '') {
           $output .= &setsec_javascript($sec_element,$formname);
 $id_functions      }
 ENDUSERBRW      $output .= '
   </script>';
       return $output;
 }  }
   
   
 sub setsec_javascript {  sub setsec_javascript {
     my ($sec_element,$formname) = @_;      my ($sec_element,$formname) = @_;
     my $setsections = qq|      my $setsections = qq|
Line 697  function setSect(sectionlist) { Line 602  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)=@_;
    my $linktext = &mt('Select Course');     return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.
    if ($selecttype eq 'Community') {          '","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select Course')."</a>";
        $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 716  sub selectauthor_link { Line 612  sub selectauthor_link {
           &mt('Select Author').'</a>';            &mt('Select Author').'</a>';
 }  }
   
 sub selectuser_link {  
     my ($form,$unameelem,$domelem,$lastelem,$firstelem,$emailelem,$hdomelem,  
         $coursedom,$linktext,$caller) = @_;  
     return '<a href="javascript:openuserbrowser('."'$form','$unameelem','$domelem',".  
            "'$lastelem','$firstelem','$emailelem','$hdomelem','$coursedom','$caller'".  
            ');">'.$linktext.'</a>';  
 }  
   
 sub check_uncheck_jscript {  sub check_uncheck_jscript {
     my $jscript = <<"ENDSCRT";      my $jscript = <<"ENDSCRT";
 function checkAll(field) {  function checkAll(field) {
Line 822  sub select_datelocale { Line 710  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 923  sub linked_select_forms { Line 796  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" language="JavaScript">'."\n";      $result.="<script type=\"text/javascript\">\n";
     $result.="// <![CDATA[\n";  
     $result.="var select2data = new Object();\n";      $result.="var select2data = new Object();\n";
     $" = '","';      $" = '","';
     my $debug = '';      my $debug = '';
Line 970  function select1_changed() { Line 842  function select1_changed() {
         }          }
     }      }
 }  }
 // ]]>  
 </script>  </script>
 END  END
     # output the initial values for the selection lists      # output the initial values for the selection lists
Line 1055  sub help_open_topic { Line 926  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'><span class=\"LC_nobreak\"><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";              "<td bgcolor='#5555FF'><a target=\"_top\" href=\"$link\"><span style=\"color:#FFFFFF;font-size:10pt;\">$text</span></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 .= '<a target="_top" href="'.$link.'" title="'.$title.'">'.      $template .= <<"ENDTEMPLATE";
                  '<img src="'.$helpicon.'" border="0" alt="'.&mt('Help: [_1]',$topic).   <a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a>
                  '" title="'.$title.'" /></a>';  ENDTEMPLATE
     if ($text ne '') {      if ($text ne '') { $template.='</td></tr></table>' };
         $template.='</span></td></tr></table>';  
     }  
     return $template;      return $template;
   
 }  }
Line 1079  sub helpLatexCheatsheet { Line 948  sub helpLatexCheatsheet {
     my $addOther = '';      my $addOther = '';
     if ($topic) {      if ($topic) {
  $addOther = &Apache::loncommon::help_open_topic($topic,$text,   $addOther = &Apache::loncommon::help_open_topic($topic,$text,
        undef, undef, 600) .         undef, undef, 600).
    '</td><td>';     '</td><td>';
     }      }
     $out = '<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>';
     unless ($not_author) {      unless ($not_author) {
         $out .= '<td>'.          $out .= '<td>'.
                 &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),          &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),
                                                     undef,undef,600).                                              undef,undef,600).
                 '</td>';          '</td>';
     }      }
     $out .= '</tr></table>';      $out .= '</tr></table>';
     return $out;      return $out;
Line 1124  sub update_help_link { Line 993  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 1203  sub help_menu_js { Line 1070  sub help_menu_js {
   
     my $template .= <<"ENDTEMPLATE";      my $template .= <<"ENDTEMPLATE";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
 // <!-- BEGIN LON-CAPA Internal  // <!-- BEGIN LON-CAPA Internal
   // <![CDATA[
 var banner_link = '';  var banner_link = '';
 function helpMenu(target) {  function helpMenu(target) {
     var caller = this;      var caller = this;
Line 1229  function writeHelp(caller) { Line 1096  function writeHelp(caller) {
     caller.document.close()      caller.document.close()
     caller.focus()      caller.focus()
 }  }
 // END LON-CAPA Internal -->  
 // ]]>  // ]]>
   // END LON-CAPA Internal -->
 </script>  </script>
 ENDTEMPLATE  ENDTEMPLATE
     return $template;      return $template;
Line 1267  sub help_open_bug { Line 1134  sub help_open_bug {
     {      {
  $template .=    $template .= 
   "<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#FF5555'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#FF5555'><a target=\"_top\" href=\"$link\"><span style=\"color:#FFFFFF;font-size:10pt;\">$text</span></a>";
     }      }
   
     # Add the graphic      # Add the graphic
Line 1312  sub help_open_faq { Line 1179  sub help_open_faq {
     {      {
  $template .=    $template .= 
   "<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#448844'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#448844'><a target=\"_top\" href=\"$link\"><span style=\"color:#FFFFFF; font-size:10pt;\">$text</span></a>";
     }      }
   
     # Add the graphic      # Add the graphic
Line 1498  sub resize_textarea_js { Line 1365  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 1537  function resize_textarea(textarea_id,bot Line 1403  function resize_textarea(textarea_id,bot
     }      }
     textarea.style.height=new_height+'px';      textarea.style.height=new_height+'px';
 }  }
 // ]]>  
 </script>  </script>
 RESIZE  RESIZE
   
Line 1881  sub select_level_form { Line 1746  sub select_level_form {
   
 =pod  =pod
   
 =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)  =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit)
   
 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 1892  selected"); Line 1757  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.  If the $autosubmit flag is set, the form containing the domain selector will be auto-submitted by an onchange action.  
   
 =cut  =cut
   
 #-------------------------------------------  #-------------------------------------------
 sub select_dom_form {  sub select_dom_form {
     my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;      my ($defdom,$name,$includeempty,$showdomdesc,$autosubmit) = @_;
     if ($onchange) {      my $onchange;
         $onchange = ' onchange="'.$onchange.'"';      if ($autosubmit) {
           $onchange = ' onchange="this.form.submit()"';
     }      }
     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); }
Line 1960  sub home_server_form_item { Line 1826  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="selected">'.&mt('default').              $result .= '<option value="default" selected>'.&mt('default').
                        '</option>'."\n";                         '</option>'."\n";
         }          }
         foreach my $hostid (sort(keys(%servers))) {          foreach my $hostid (sort(keys(%servers))) {
Line 2255  sub authform_kerberos { Line 2121  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="checked"';         $check5 = ' checked="on"';
     } else {      } else {
        $check4 = ' checked="checked"';         $check4 = ' checked="on"';
     }      }
     $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="checked"';              $krbcheck = ' checked="on"';
             if (defined($in{'mode'})) {              if (defined($in{'mode'})) {
                 if ($in{'mode'} eq 'modifyuser') {                  if ($in{'mode'} eq 'modifyuser') {
                     $krbcheck = '';                      $krbcheck = '';
Line 2270  sub authform_kerberos { Line 2136  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="checked"';                      $check5 = ' checked="on"';
                     $check4 = '';                      $check4 = '';
                 } else {                  } else {
                     $check4 = ' checked="checked"';                      $check4 = ' checked="on"';
                     $check5 = '';                      $check5 = '';
                 }                  }
             }              }
Line 2294  sub authform_kerberos { Line 2160  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 2303  sub authform_kerberos { Line 2169  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 2364  sub authform_internal{ Line 2230  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="checked" ';                  $intcheck = 'checked="on" ';
                 if (defined($in{'mode'})) {                  if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {                      if ($in{'mode'} eq 'modifyuser') {
                         $intcheck = '';                          $intcheck = '';
Line 2380  sub authform_internal{ Line 2246  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 2389  sub authform_internal{ Line 2255  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 2404  sub authform_internal{ Line 2270  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 2419  sub authform_local{ Line 2285  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="checked" ';                  $loccheck = 'checked="on" ';
                 if (defined($in{'mode'})) {                  if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {                      if ($in{'mode'} eq 'modifyuser') {
                         $loccheck = '';                          $loccheck = '';
Line 2435  sub authform_local{ Line 2301  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 2444  sub authform_local{ Line 2310  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 2473  sub authform_filesystem{ Line 2339  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="checked" ';                  $fsyscheck = 'checked="on" ';
                 if (defined($in{'mode'})) {                  if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {                      if ($in{'mode'} eq 'modifyuser') {
                         $fsyscheck = '';                          $fsyscheck = '';
Line 2486  sub authform_filesystem{ Line 2352  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 2495  sub authform_filesystem{ Line 2361  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 2918  sub screenname { Line 2784  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 2963  sub aboutmewrapper { Line 2810  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 information page").'">'.$link.'</a>';   ($target?' target="$target"':'').' title="'.&mt("View this user's personal page").'">'.$link.'</a>';
 }  }
   
 # ------------------------------------------------------------ Syllabus Wrapper  # ------------------------------------------------------------ Syllabus Wrapper
   
   
 sub syllabuswrapper {  sub syllabuswrapper {
     my ($linktext,$coursedir,$domain,$fontcolor)=@_;      my ($linktext,$coursedir,$domain)=@_;
     if ($fontcolor) {   
         $linktext='<font color="'.$fontcolor.'">'.$linktext.'</font>';   
     }  
     return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>};      return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>};
 }  }
   
 sub track_student_link {  sub track_student_link {
     my ($linktext,$sname,$sdom,$target,$start,$only_body) = @_;      my ($linktext,$sname,$sdom,$target,$start) = @_;
     my $link ="/adm/trackstudent?";      my $link ="/adm/trackstudent?";
     my $title = 'View recent activity';      my $title = 'View recent activity';
     if (defined($sname) && $sname !~ /^\s*$/ &&      if (defined($sname) && $sname !~ /^\s*$/ &&
Line 2992  sub track_student_link { Line 2836  sub track_student_link {
         $target = '';          $target = '';
     }      }
     if ($start) { $link.='&amp;start='.$start; }      if ($start) { $link.='&amp;start='.$start; }
     if ($only_body) { $link .= '&amp;only_body=1'; }  
     $title = &mt($title);      $title = &mt($title);
     $linktext = &mt($linktext);      $linktext = &mt($linktext);
     return qq{<a href="$link" title="$title" $target>$linktext</a>}.      return qq{<a href="$link" title="$title" $target>$linktext</a>}.
  &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 3279  sub user_lang { Line 3101  sub user_lang {
     return $user_lh;      return $user_lh;
 }  }
   
   
 ###############################################################  ###############################################################
 ##               Student Answer Attempts                     ##  ##               Student Answer Attempts                     ##
 ###############################################################  ###############################################################
Line 3994  sub blocking_status { Line 3817  sub blocking_status {
                              &Apache::lonnet::coursedescription($course);                               &Apache::lonnet::coursedescription($course);
                         $coursedesc = $courseinfo{'description'};                          $coursedesc = $courseinfo{'description'};
                     }                      }
                     $category = "Group portfolio files in the course '$coursedesc'";                      $category = "Group 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 4128  sub get_domainconf { Line 3951  sub get_domainconf {
                 foreach my $key (keys(%{$domconfig{'login'}})) {                  foreach my $key (keys(%{$domconfig{'login'}})) {
                     if (ref($domconfig{'login'}{$key}) eq 'HASH') {                      if (ref($domconfig{'login'}{$key}) eq 'HASH') {
                         foreach my $img (keys(%{$domconfig{'login'}{$key}})) {                          foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
                             $designhash{$udom.'.login.'.$key.'_'.$img} =                              $designhash{$udom.'.login.'.$key.'_'.$img} = 
                                 $domconfig{'login'}{$key}{$img};                                  $domconfig{'login'}{$key}{$img};
                         }                          }
                     } else {                      } else {
Line 4355  sub bodytag { Line 4178  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: 0',      my %design = ( 'style'   => 'margin-top: 0px',
    'bgcolor' => $pgbg,     'bgcolor' => $pgbg,
    'text'    => $font,     'text'    => $font,
                    'alink'   => &designparm($function.'.alink',$domain),                     'alink'   => &designparm($function.'.alink',$domain),
Line 4466  ENDROLE Line 4289  ENDROLE
  .'<b>'.&mt('Construction Space').'</b>:&nbsp;'   .'<b>'.&mt('Construction Space').'</b>:&nbsp;'
  .'<form name="dirs" method="post" action="'.$formaction   .'<form name="dirs" method="post" action="'.$formaction
  .'" target="_top"><tt><b>'   .'" target="_top"><tt><b>'
  .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."<font size=\"+1\">$lastitem</font></b></tt><br />"   .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."<span class=\"LC_fontsize_big\">$lastitem</span></b></tt><br />"
  .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')   .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
  .'</form>'   .'</form>'
  .&Apache::lonmenu::constspaceform();   .&Apache::lonmenu::constspaceform();
Line 4640  sub standard_css { Line 4463  sub standard_css {
     my $vlink  = &designparm($function.'.vlink', $domain);      my $vlink  = &designparm($function.'.vlink', $domain);
     my $link   = &designparm($function.'.link',  $domain);      my $link   = &designparm($function.'.link',  $domain);
   
       my $loginbg = &designparm('login.sidebg',$domain);
       my $bgcol = &designparm('login.bgcol',$domain);
       my $textcol = &designparm('login.textcol',$domain);
   
     my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';      my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';
     my $mono                 = 'monospace';      my $mono                 = 'monospace';
     my $data_table_head      = $tabbg;      my $data_table_head      = $tabbg;
     my $data_table_light     = '#FAFAFA';      my $data_table_light     = '#EEEEEE';
     my $data_table_dark      = '#F0F0F0';      my $data_table_dark      = '#DDDDDD';
     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 4657  sub standard_css { Line 4484  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 $lg_border_color     = '#C8C8C8';
   
     my $border = ($env{'browser.type'} eq 'explorer' ||      my $border = ($env{'browser.type'} eq 'explorer' ||
   $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'    $env{'browser.type'} eq 'safari'     ) ? '0px 2px 0px 2px'
                                                  : '0 3px 0 4px';                                                   : '0px 3px 0px 4px';
   
   
     return <<END;      return <<END;
 h1, h2, h3, th { font-family: $sans }  body{
 a:focus { color: red; background: yellow }        font-family: $sans;
        line-height:130%;
 hr {       font-size:0.83em;
   clear: both;       color:$font;
   color: $tabbg;    }
   background-color: $tabbg;  a:link, a:visited { font-size:100%; }
   height: 3px;  
   border: none;  
 }  
   
   a:focus { color: red; background: yellow } 
 table.thinborder,  table.thinborder,
   
 table.thinborder tr th {  table.thinborder tr th {
   border-style: solid;    border-style: solid;
   border-width: 1px;    border-width: 1px;
     border-color: $lg_border_color;
   background: $tabbg;    background: $tabbg;
 }  }
 table.thinborder tr td {  table.thinborder tr td {
   border-style: solid;    border-style: solid;
   border-width: 1px    border-width: 1px;
     border-color: $lg_border_color;
 }  }
   
 form, .inline { display: inline; }  form, .inline { display: inline; }
 .center { text-align: center; }  
   .LC_center { text-align: center; }
   .LC_left { text-align:left; }
   .LC_right {text-align:right;}
   .LC_middle {vertical-align:middle;}
   .LC_top {vertical-align:top;}
   .LC_bottom {vertical-align:bottom;}
   
   /* just for tests */
   .LC_300Box { width:300px; }
   .LC_200Box {width:200px; }
   .LC_500Box {width:500px; }
   .LC_600Box {width:600px; }
   .LC_800Box {width:800px;}
   /* end */
   
 .LC_filename {font-family: $mono; white-space:pre;}  .LC_filename {font-family: $mono; white-space:pre;}
 .LC_error {  .LC_error {
   color: red;    color: red;
Line 4705  form, .inline { display: inline; } Line 4546  form, .inline { display: inline; }
 .LC_diff_added {  .LC_diff_added {
   color: green;    color: green;
 }  }
   .LC_unknown {
 div.LC_confirm_box {    color: yellow;
   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: none;    border: 0px;
 }  }
 .LC_indexer_icon {  .LC_indexer_icon {
   border: 0;    border: 0px;
   height: 22px;    height: 22px;
 }  }
 .LC_docs_spacer {  .LC_docs_spacer {
   width: 25px;    width: 25px;
   height: 1px;    height: 1px;
   border: none;    border: 0px;
 }  }
   
 .LC_internal_info {  .LC_internal_info {
Line 4745  table#LC_top_nav, table#LC_menubuttons,t Line 4577  table#LC_top_nav, table#LC_menubuttons,t
   background: $pgbg;    background: $pgbg;
   border: 2px;    border: 2px;
   border-collapse: separate;    border-collapse: separate;
   padding: 0;    padding: 0px;
 }  }
   
 table#LC_title_bar, table.LC_breadcrumbs,   table#LC_title_bar, table.LC_breadcrumbs, 
Line 4758  table#LC_title_bar.LC_with_remote { Line 4590  table#LC_title_bar.LC_with_remote {
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    font-family: $sans;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0;    padding: 0px;
 }  }
   
 table.LC_docs_path {  table.LC_docs_path {
   width: 100%;    width: 100%;
   border: 0;    border: 0;
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    font-family: $sans;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0;    padding: 0px;
 }  }
   
 table#LC_title_bar td {  table#LC_title_bar td {
Line 4788  span.LC_title_bar_title { Line 4619  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: 0;    padding: 0px;
 }  }
 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: 0;    padding: 0px;
 }  }
   
 table#LC_menubuttons_mainmenu {  table#LC_menubuttons img{
   width: 100%;    border: 0px;
   border: 0;  
   border-spacing: 1px;  
   padding: 0 1px;  
   margin: 0;  
   border-collapse: separate;  
 }  
 table#LC_menubuttons img, table#LC_menubuttons_mainmenu img {  
   border: none;  
 }  }
 table#LC_top_nav td {  table#LC_top_nav td {
   background: $tabbg;    background: $tabbg;
   border: none;    border: 0px;
   font-size: small;    font-size: small;
     vertical-align:top;
     padding:2px 5px 2px 5px;
 }  }
 table#LC_top_nav td a, div#LC_top_nav a {  table#LC_top_nav td a, div#LC_top_nav a {
   color: $font;    color: $font;
Line 4822  table#LC_top_nav td.LC_top_nav_logo { Line 4647  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: none;    border: 0px;
   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 4854  table#LC_mainmenu td.LC_mainmenu_column Line 4679  table#LC_mainmenu td.LC_mainmenu_column
     vertical-align: top;      vertical-align: top;
 }  }
   
   .LC_fontsize_small
   {
    font-size: 70%;
   }
   
   .LC_fontsize_medium
   {
    font-size: 85%;
   }
   
   .LC_fontsize_large
   {
    font-size: 120%;
   }
   
   .LC_fontcolor_red
   {
    color: #FF0000;
   }
   
 .LC_menubuttons_inline_text {  .LC_menubuttons_inline_text {
   color: $font;    color: $font;
   font-family: $sans;    font-family: $sans;
   font-size: smaller;    font-size: 90%;
     padding-left:3px;
 }  }
   
 .LC_menubuttons_link {  .LC_menubuttons_link {
Line 4873  table#LC_mainmenu td.LC_mainmenu_column Line 4719  table#LC_mainmenu td.LC_mainmenu_column
 }  }
   
 td.LC_menubuttons_text {  td.LC_menubuttons_text {
   width: 90%;    color: $font;
   color: $font;  
   font-family: $sans;  
 }  }
   
 td.LC_menubuttons_img {  
 }  
   
 .LC_current_location {  .LC_current_location {
   font-family: $sans;    font-family: $sans;
Line 4891  td.LC_menubuttons_img { Line 4734  td.LC_menubuttons_img {
   font-weight: bold;    font-weight: bold;
 }  }
   
   
 .LC_dropadd_labeltext {  .LC_dropadd_labeltext {
   font-family: $sans;    font-family: $sans;
   text-align: right;    text-align: right;
Line 4902  td.LC_menubuttons_img { Line 4746  td.LC_menubuttons_img {
 }  }
   
 .LC_roleslog_note {  .LC_roleslog_note {
   font-size: smaller;    font-size: small;
 }  }
   
 .LC_mail_functions {  .LC_mail_functions {
Line 4910  td.LC_menubuttons_img { Line 4754  td.LC_menubuttons_img {
 }  }
   
 table.LC_aboutme_port {  table.LC_aboutme_port {
   border: none;    border: 0px;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0;    border-spacing: 0px;
 }  }
 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 4926  table.LC_data_table, table.LC_mail_list Line 4770  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: 0;    border-spacing: 0px;
   width: 100%;    width: 100%;
 }  }
 table.LC_innerpickbox,  
 table.LC_nested {  table.LC_nested {
   border: none;    border: 0px;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0;    border-spacing: 0px;
   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,
 table.LC_prior_tries tr th,  table.LC_prior_tries tr th {
 table.LC_innerpickbox tr th {  
   font-weight: bold;    font-weight: bold;
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: smaller;    font-size:90%;
 }  
 table.LC_innerpickbox tr th,  
 table.LC_innerpickbox tr td {  
   vertical-align: top;  
 }  }
 table.LC_data_table tr.LC_info_row > td {  table.LC_data_table tr.LC_info_row > td {
   background-color: #CCCCCC;    background-color: #CCCCCC;
Line 4985  table.LC_nested tr.LC_empty_row td { Line 4823  table.LC_nested tr.LC_empty_row td {
 table.LC_nested_outer tr th {  table.LC_nested_outer tr th {
   font-weight: bold;    font-weight: bold;
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: smaller;    font-size: small;
   border-bottom: 1px solid #000000;    border-bottom: 1px solid #000000;
 }  }
 table.LC_nested_outer tr td.LC_subheader {  table.LC_nested_outer tr td.LC_subheader {
Line 5024  table.LC_createuser { Line 4862  table.LC_createuser {
 }  }
   
 table.LC_createuser tr.LC_section_row td {  table.LC_createuser tr.LC_section_row td {
   font-size: smaller;    font-size: small;
 }  }
   
 table.LC_createuser tr.LC_info_row td  {  table.LC_createuser tr.LC_info_row td  {
Line 5080  table.LC_mail_list tr.LC_mail_even { Line 4918  table.LC_mail_list tr.LC_mail_even {
 table.LC_mail_list tr.LC_mail_odd {  table.LC_mail_list tr.LC_mail_odd {
 }  }
   
   table.LC_data_table tr > td.LC_browser_file,
 table#LC_portfolio_actions {  table.LC_data_table tr > td.LC_browser_file_published {
   width: auto;  
   background: $pgbg;  
   border: none;  
   border-spacing: 2px 2px;  
   padding: 0;  
   margin: 0;  
   border-collapse: separate;  
 }  
 table#LC_portfolio_actions td.LC_label {  
   background: $tabbg;  
   text-align: right;  
 }  
 table#LC_portfolio_actions td.LC_value {  
   background: $tabbg;  
 }  
   
 table#LC_cstr_controls {  
   width: 100%;  
   border-collapse: collapse;  
 }  
 table#LC_cstr_controls tr td {  
   border: 4px solid $pgbg;  
   padding: 4px;  
   text-align: center;  
   background: $tabbg;  
 }  
 table#LC_cstr_controls tr th {  
   border: 4px solid $pgbg;  
   background: $table_header;  
   text-align: center;  
   font-family: $sans;  
   font-size: smaller;  
 }  
   
 table#LC_browser {  
    
 }  
 table#LC_browser tr th {  
   background: $table_header;  
 }  
 table#LC_browser tr td {  
   padding: 2px;  
 }  
 table#LC_browser tr.LC_browser_file,  
 table#LC_browser tr.LC_browser_file_published {  
   background: #CCFF88;    background: #CCFF88;
 }  }
 table#LC_browser tr.LC_browser_file_locked,  table.LC_data_table tr > td.LC_browser_file_locked,
 table#LC_browser tr.LC_browser_file_unpublished {  table.LC_data_table tr > td.LC_browser_file_unpublished {
   background: #FFAA99;    background: #FFAA99;
 }  }
 table#LC_browser tr.LC_browser_file_obsolete {  table.LC_data_table tr > td.LC_browser_file_obsolete {
   background: #AAAAAA;    background: #AAAAAA;
 }  }
 table#LC_browser tr.LC_browser_file_modified,  table.LC_data_table tr > td.LC_browser_file_modified,
 table#LC_browser tr.LC_browser_file_metamodified {  table.LC_data_table tr > td.LC_browser_file_metamodified {
   background: #FFFF77;    background: #FFFF77;
 }  }
 table#LC_browser tr.LC_browser_folder {  table.LC_data_table tr.LC_browser_folder > td {
   background: #CCCCFF;    background: #CCCCFF;
 }  }
   
Line 5164  table.LC_data_table tr > td.LC_roles_sel Line 4957  table.LC_data_table tr > td.LC_roles_sel
 }  }
   
 span.LC_current_location {  span.LC_current_location {
   font-size: x-large;    font-size:larger;
   background: $pgbg;    background: $pgbg;
 }  }
   
Line 5208  table.LC_parm_overview_restrictions th { Line 5001  table.LC_parm_overview_restrictions th {
   border-color: $pgbg;    border-color: $pgbg;
 }  }
 table#LC_helpmenu {  table#LC_helpmenu {
   border: none;    border: 0px;
   height: 55px;    height: 55px;
   border-spacing: 0;    border-spacing: 0px;
 }  }
   
 table#LC_helpmenu fieldset legend {  table#LC_helpmenu fieldset legend {
Line 5221  table#LC_helpmenu_links { Line 5014  table#LC_helpmenu_links {
   width: 100%;    width: 100%;
   border: 1px solid black;    border: 1px solid black;
   background: $pgbg;    background: $pgbg;
   padding: 0;    padding: 0px;
   border-spacing: 1px;    border-spacing: 1px;
 }  }
 table#LC_helpmenu_links tr td {  table#LC_helpmenu_links tr td {
Line 5284  table.LC_pick_box td.LC_pick_box_select Line 5077  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: 0;    padding: 0px;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
Line 5326  table.LC_helpform_receipt td.LC_oddrow_v Line 5119  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: 0;    padding: 0px;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
Line 5359  table.LC_group_priv_box td.LC_groups_fun Line 5152  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: 0;    padding: 0px;
 }  }
   
 table.LC_notify_front_page {  table.LC_notify_front_page {
Line 5380  table.LC_notify_front_page td { Line 5173  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 5497  span.LC_cusr_subheading { Line 5289  span.LC_cusr_subheading {
   
 table.LC_docs_documents {  table.LC_docs_documents {
   background: #BBBBBB;    background: #BBBBBB;
   border-width: 0;    border-width: 0px;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
Line 5506  table.LC_docs_documents td.LC_docs_docum Line 5298  table.LC_docs_documents td.LC_docs_docum
   padding: 4px;    padding: 4px;
 }  }
   
 .LC_docs_course_commands div {  
   float: left;  
   border: 4px solid #AAAAAA;  
   padding: 4px;  
   background: #DDDDCC;  
 }  
   
 .LC_docs_entry_move {  .LC_docs_entry_move {
   border: none;    border: 0px;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
Line 5570  table.LC_sty_end { Line 5355  table.LC_sty_end {
 }  }
   
 table.LC_double_column {  table.LC_double_column {
   border-width: 0;    border-width: 0px;
   border-collapse: collapse;    border-collapse: collapse;
   width: 100%;    width: 100%;
   padding: 2px;    padding: 2px;
Line 5610  div.LC_clear_float_footer { Line 5395  div.LC_clear_float_footer {
 }  }
   
   
 div.LC_grade_select_mode {  
   font-family: $sans;  
 }  
 div.LC_grade_select_mode div div {  
   margin: 5px;  
 }  
 div.LC_grade_select_mode_selector {  
   margin: 5px;  
   float: left;  
 }  
 div.LC_grade_select_mode_selector_header {  
   font: bold medium $sans;  
 }  
 div.LC_grade_select_mode_type {  
   clear: left;  
 }  
   
 div.LC_grade_show_user {  div.LC_grade_show_user {
   margin-top: 20px;    margin-top: 20px;
   border: 1px solid black;    border: 1px solid black;
Line 5634  div.LC_grade_show_user { Line 5402  div.LC_grade_show_user {
 div.LC_grade_user_name {  div.LC_grade_user_name {
   background: #DDDDEE;    background: #DDDDEE;
   border-bottom: 1px solid black;    border-bottom: 1px solid black;
   font: bold large $sans;    font-weight: bold;
     font-size: large;
 }  }
 div.LC_grade_show_user_odd_row div.LC_grade_user_name {  div.LC_grade_show_user_odd_row div.LC_grade_user_name {
   background: #DDEEDD;    background: #DDEEDD;
Line 5653  div.LC_grade_show_problem_header, Line 5422  div.LC_grade_show_problem_header,
 div.LC_grade_submissions_header,  div.LC_grade_submissions_header,
 div.LC_grade_message_center_header,  div.LC_grade_message_center_header,
 div.LC_grade_assign_header {  div.LC_grade_assign_header {
   font: bold large $sans;    font-weight: bold;
     font-size: large;
 }  }
 div.LC_grade_show_problem_problem,  div.LC_grade_show_problem_problem,
 div.LC_grade_submissions_body,  div.LC_grade_submissions_body,
Line 5664  div.LC_grade_assign_body { Line 5434  div.LC_grade_assign_body {
   background: #FFFFFF;    background: #FFFFFF;
 }  }
 span.LC_grade_check_note {  span.LC_grade_check_note {
   font: normal medium $sans;    font-weight: normal;
     font-size: medium;
   display: inline;    display: inline;
   position: absolute;    position: absolute;
   right: 1em;    right: 1em;
Line 5674  table.LC_scantron_action { Line 5445  table.LC_scantron_action {
   width: 100%;    width: 100%;
 }  }
 table.LC_scantron_action tr th {  table.LC_scantron_action tr th {
   font: normal bold $sans;    font-weight:bold;
     font-style:normal;
 }  }
   .LC_edit_problem_header, 
 div.LC_edit_problem_header,   
 div.LC_edit_problem_footer {  div.LC_edit_problem_footer {
   font: normal medium $sans;    font-weight: normal;
     font-size:  medium;
   margin: 2px;    margin: 2px;
 }  }
 div.LC_edit_problem_header,  div.LC_edit_problem_header,
Line 5696  div.LC_edit_problem_header_edit_row { Line 5468  div.LC_edit_problem_header_edit_row {
   margin-bottom: 5px;    margin-bottom: 5px;
 }  }
 div.LC_edit_problem_header_title {  div.LC_edit_problem_header_title {
   font: larger bold $sans;    font-weight: bold;
     font-size: larger;
   background: $tabbg;    background: $tabbg;
   padding: 3px;    padding: 3px;
 }  }
 table.LC_edit_problem_header_title {  table.LC_edit_problem_header_title {
   font: larger bold $sans;    font-size: larger;
     font-weight:  bold;
   width: 100%;    width: 100%;
   border-color: $pgbg;    border-color: $pgbg;
   border-style: solid;    border-style: solid;
Line 5709  table.LC_edit_problem_header_title { Line 5483  table.LC_edit_problem_header_title {
   
   background: $tabbg;    background: $tabbg;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0;    padding: 0px
 }  }
   
 div.LC_edit_problem_discards {  div.LC_edit_problem_discards {
Line 5725  hr.LC_edit_problem_divide { Line 5499  hr.LC_edit_problem_divide {
   color: $tabbg;    color: $tabbg;
   background-color: $tabbg;    background-color: $tabbg;
   height: 3px;    height: 3px;
   border: none;    border: 0px;
 }  }
 img.stift{  img.stift{
   border-width:0;    border-width:0;
Line 5749  table#LC_mainmenu td.LC_mainmenu_col_fie Line 5523  table#LC_mainmenu td.LC_mainmenu_col_fie
   font-size: small;    font-size: small;
   font-weight: bold;    font-weight: bold;
 }  }
 fieldset#LC_mainmenu_fieldset {  
   margin:0 10px 10px 0;  
   
 }  
   
 div.LC_createcourse {  div.LC_createcourse {
     margin: 10px 10px 10px 10px;      margin: 10px 10px 10px 10px;
 }  }
   
   /* ---- Remove when done ----
   # The following styles is part of the redesign of LON-CAPA and are
   # subject to change during this project.
   # Don't rely on their current functionality as they might be 
   # changed or removed.
   # --------------------------*/
   
   a:hover,
   ol.LC_smallMenu a:hover,
   ol#LC_MenuBreadcrumbs a:hover,
   ol#LC_PathBreadcrumbs a:hover,
   ul#LC_TabMainMenuContent a:hover,
   .LC_FormSectionClearButton input:hover
   ul.LC_TabContent   li:hover a{
    color:#BF2317;
           text-decoration:none;
   }
   
   h1 { 
    padding:5px 10px 5px 20px;
    line-height:130%;
   }
   
   h2,h3,h4,h5,h6
   {
    margin:5px 0px 5px 0px;
    padding:0px;
    line-height:130%;
   }
   .LC_hcell{
           padding:3px 15px 3px 15px;
           margin:0px;
    background-color:$tabbg;
    border-bottom:solid 1px $lg_border_color;       
   }
   .LC_noBorder {
           border:0px;
   }
   
   .LC_bgLightGrey{
    background:URL(/adm/lonIcons/lightGreyBG.png) repeat-x left bottom;
   }
   
   
   /* Main Header with discription of Person, Course, etc. */
   .LC_HeadRight {
    text-align: right;
    float: right;
    margin: 0px;
    padding: 0px;
           right:0;
           position:absolute;
           overflow:hidden;
   }
   
   p, .LC_ContentBox {
    padding: 10px;
   
   }
   .LC_FormSectionClearButton input {
           background-color:transparent;        
           border:0px;
           cursor:pointer;
           text-decoration:underline;
   }
   
   
   dl,ul,div,fieldset {
    margin: 10px 10px 10px 0px;
    overflow:hidden;
   }
   ol.LC_smallMenu, ol#LC_PathBreadcrumbs {
    margin: 0px;
   }
   
   ol.LC_smallMenu li {
    display: inline;
    padding: 5px 5px 0px 10px;
    vertical-align: top;
   }
   
   ol.LC_smallMenu li img {
    vertical-align: bottom;
   }
   
   ol.LC_smallMenu a {
    font-size: 90%;
    color: RGB(80, 80, 80);
    text-decoration: none;
   }
   ol#LC_TabMainMenueContent, ul.LC_TabContent ,
   ul.LC_TabContentBigger {
    display:block;
    list-style:none;
    margin: 0px;
    padding: 0px;
   }
   
   ol#LC_TabMainMenuContent li, ul.LC_TabContent li,
   ul.LC_TabContentBigger li{
    display: inline;
    border-right: solid 1px $lg_border_color;
    float:left;
    line-height:140%;
    white-space:nowrap;
   }
   ol#LC_TabMainMenuContent li{
    vertical-align: bottom;
    border-bottom: solid 1px RGB(175, 175, 175);
    padding: 5px 10px 5px 10px;
    margin-right:5px;
    margin-bottom:3px;
    font-weight: bold;
    background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
   }
   
   ol#LC_TabMainMenuContent li a{
    color: RGB(47, 47, 47);
    text-decoration: none;
   }
   ul.LC_TabContent {
    min-height:1.6em;
   }
   ul.LC_TabContent li{
    vertical-align:middle;
    padding:0px 10px 0px 10px;
    background-color:$tabbg;
    border-bottom:solid 1px $lg_border_color;
   }
   ul.LC_TabContent li a, ul.LC_TabContent li{ 
    color:rgb(47,47,47);
    text-decoration:none;
    font-size:95%;
    font-weight:bold;
   }
   ul.LC_TabContent li:hover, ul.LC_TabContent li.active{
    background-color:#FFFFFF;
    border-bottom:solid 1px #FFFFFF;
   }
   ul.LC_TabContentBigger li{
    vertical-align:bottom;
    border-top:solid 1px $lg_border_color;
    border-left:solid 1px $lg_border_color;
    padding:5px 10px 5px 10px;
    margin-left:2px;
    background:url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
   }
   ul.LC_TabContentBigger li:hover, ul.LC_TabContentBigger li.active{
    background:url(/adm/lonIcons/lightGreyBG.png) repeat-x right bottom;
   }
   ul.LC_TabContentBigger li, ul.LC_TabContentBigger li a{
    font-size:110%;
    font-weight:bold;
   }
   #LC_CourseDocuments, #LC_SupplementalCourseDocuments
   {
    margin:0px;
   }
   
   .LC_hideThis
   {
    display:none;
    visibility:hidden;
   }
   
   ol#LC_MenuBreadcrumbs, ol#LC_PathBreadcrumbs {
    border-top: solid 1px RGB(255, 255, 255);
    height: 20px;
    line-height: 20px;
    vertical-align: bottom;
    margin: 0px 0px 30px 0px;
    padding-left: 10px;
    list-style-position: inside;
    background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
   }
   
   ol#LC_MenuBreadcrumbs li, ol#LC_PathBreadcrumbs li {
   /*
    background: url(/adm/lonIcons/arrow_white.png) no-repeat left center;
   */
    display: inline;
    padding: 0px 0px 0px 10px;
    vertical-align: bottom;
    overflow:hidden;
   }
   
   ol#LC_MenuBreadcrumbs li a {
    text-decoration: none;
    font-size:90%;
   }
   ol#LC_PathBreadcrumbs li a{
    text-decoration:none;
    font-size:100%;
    font-weight:bold;
   }
   .LC_ContentBoxSpecial
   {
    border: solid 1px $lg_border_color;
    max-width:70%;
    min-width:70%;
   }
   .LC_ContentBoxSpecialContactInfo
   {
    border: solid 1px $lg_border_color;
    max-width:25%;
    min-width:25%;
   }
   .LC_AboutMe_Image
   {
    float:left;
    margin-right:10px;
   }
   .LC_Clear_AboutMe_Image
   {
    clear:left;
   }
   dl.LC_ListStyleClean dt {
    padding-right: 5px;
    display: table-header-group;
   }
   
   dl.LC_ListStyleClean dd {
    display: table-row;
   }
   
   .LC_ListStyleClean,
   .LC_ListStyleSimple,
   .LC_ListStyleNormal,
   .LC_ListStyleNormal_Border,
   .LC_ListStyleSpecial
    {
    /*display:block; */
    list-style-position: inside;
    list-style-type: none;
    overflow: hidden;
    padding: 0px;
   }
   
   .LC_ListStyleSimple li,
   .LC_ListStyleSimple dd,
   .LC_ListStyleNormal li,
   .LC_ListStyleNormal dd,
   .LC_ListStyleSpecial li,
   .LC_ListStyleSpecial dd
    {
    margin: 0px;
    padding: 5px 5px 5px 10px;
    clear: both;
   }
   
   .LC_ListStyleClean li,
   .LC_ListStyleClean dd {
    padding-top: 0px;
    padding-bottom: 0px;
   }
   
   .LC_ListStyleSimple dd,
   .LC_ListStyleSimple li{
    border-bottom: solid 1px $lg_border_color;
   }
   
   .LC_ListStyleSpecial li,
   .LC_ListStyleSpecial dd {
    list-style-type: none;
    background-color: RGB(220, 220, 220);
    margin-bottom: 4px;
   }
   
   table.LC_SimpleTable {
    margin:5px;
    border:solid 1px $lg_border_color;
    }
   
   table.LC_SimpleTable tr {
    padding:0px;
    border:solid 1px $lg_border_color;
   }
   table.LC_SimpleTable thead{
    background:rgb(220,220,220);
   }
   
   div.LC_columnSection {
    display: block;
    clear: both;
    overflow: hidden;
    margin:0px;
   }
   
   div.LC_columnSection>* {
    float: left;
    margin: 10px 20px 10px 0px;
    overflow:hidden;
   }
   div.LC_columnSection > .LC_ContentBox,
   div.LC_columnSection > .LC_ContentBoxSpecial
    {
    width: 400px;
   }
   
   .ContentBoxSpecialTemplate
   {
           border: solid 1px $lg_border_color;
   }
   .ContentBoxTemplate {
           padding:10px;
   }
   
   div.LC_columnSection > .ContentBoxTemplate,
   div.LC_columnSection > .ContentBoxSpecialTemplate
           {
           width: 600px;
   
   }
   
   .clear{
    clear: both;
    line-height: 0px;
    font-size: 0px;
    height: 0px;
   }
   
   .LC_loginpage_container {
    text-align:left;
    margin : 0 auto;
    width:65%;
    padding: 10px;
    height: auto;
    background-color:#FFFFFF;
    border:1px solid #CCCCCC;
   }
   
   
   .LC_loginpage_loginContainer {
    float:left;
    width: 182px;
    border:1px solid #CCCCCC;
    background-color:$loginbg;
   }
   
   .LC_loginpage_loginContainer h2{
    margin-top:0;
    display:block;
    background:$bgcol;
    color:$textcol;
    padding-left:5px;
   }
   .LC_loginpage_loginInfo {
    margin-left:20px;
    float:left;
    width:30%;
    border:1px solid #CCCCCC;
    padding:10px;
   }
   
   .LC_loginpage_loginDomain {
    margin-right:20px;
    width:20%;
    float:left;
    padding:10px;
   }
   
   .LC_loginpage_space {
    clear:both;
    margin-bottom:20px;
    border-bottom: 1px solid #CCCCCC;
   }
   
   table em{
    font-weight:bold;
    font-style:normal;
   }
   
 END  END
 }  }
   
Line 5885  sub xml_begin { Line 6027  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">'.   $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>';
             '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';  
     }      }
     return $output;      return $output;
 }  }
Line 6022  sub start_page { Line 6163  sub start_page {
     }      }
   
     if ($args->{'js_ready'}) {      if ($args->{'js_ready'}) {
  $result = &js_ready($result);   $result = &js_ready($result);
     }      }
     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'})) {      if (exists($args->{'bread_crumbs'})) {
         &Apache::lonhtmlcommon::clear_breadcrumbs();          &Apache::lonhtmlcommon::clear_breadcrumbs();
         #if any br links exists, add them to the breadcrumbs          if (ref($args->{'bread_crumbs'}) eq 'ARRAY') {         
         if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') {  
             foreach my $crumb (@{$args->{'bread_crumbs'}}){              foreach my $crumb (@{$args->{'bread_crumbs'}}){
                 &Apache::lonhtmlcommon::add_breadcrumb($crumb);                  &Apache::lonhtmlcommon::add_breadcrumb($crumb);
             }              }
         }          }
           $result .= &Apache::lonhtmlcommon::breadcrumbs();
         #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 6189  sub simple_error_page { Line 6325  sub simple_error_page {
     }      }
   
     sub start_data_table_empty_row {      sub start_data_table_empty_row {
  $row_count[0]++;  # $row_count[0]++;
  return  '<tr class="LC_empty_row" >'."\n";;   return  '<tr class="LC_empty_row" >'."\n";;
     }      }
   
Line 6277  sub get_users_function { Line 6413  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|aa)/) ||      if (($env{'request.role'}=~/^(au|ca)/) ||
         ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {          ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
         $function='author';          $function='author';
     }      }
Line 6288  sub get_users_function { Line 6424  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 6822  If the user's status includes multiple t Line 6927  If the user's status includes multiple t
 the largest default quota which applies to the user determines the  the largest default quota which applies to the user determines the
 default quota returned.  default quota returned.
   
 =back  
   
 =cut  =cut
   
 ###############################################  ###############################################
Line 6836  sub default_quota { Line 6939  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 = map { &unescape($_); } split(/:/,$inststatus);              my @statuses = split(/:/,$inststatus);
             foreach my $item (@statuses) {              foreach my $item (@statuses) {
                 if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {                  if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
                     if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') {                      if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') {
Line 6972  sub user_picker { Line 7075  sub user_picker {
         #       loncreateuser::print_user_query_page()          #       loncreateuser::print_user_query_page()
         #       has been completed.          #       has been completed.
         next if ($option eq 'alc');          next if ($option eq 'alc');
         next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs'));  
         next if ($option eq 'crs' && !$env{'request.course.id'});          next if ($option eq 'crs' && !$env{'request.course.id'});
         if ($curr_selected{'srchin'} eq $option) {          if ($curr_selected{'srchin'} eq $option) {
             $srchinsel .= '               $srchinsel .= ' 
Line 7016  sub user_picker { Line 7118  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 = 'javascript:helpMenu('."'display'".')';                      my $helplink = ' href="javascript:helpMenu('."'display'".')"';
                     my %usertypetext = (                      my %usertypetext = (
                         official   => 'institutional',                          official   => 'institutional',
                         unofficial => 'non-institutional',                          unofficial => 'non-institutional',
                     );                      );
                     $new_user_create = '<p class="LC_warning">'.                      $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 />';
                                        &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 7060  ENDSCRIPT Line 7160  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 7129  function validateEntry(callingForm) { Line 7228  function validateEntry(callingForm) {
   
 $newuserscript  $newuserscript
   
 // ]]>  
 </script>  </script>
   
 $new_user_create  $new_user_create
   
   <table>
    <tr>
     <td>$lt{'doma'}:</td>
     <td>$domform</td>
     </td>
    </tr>
    <tr>
     <td>$lt{'usr'}:</td>
     <td>$srchbysel
         $srchtypesel 
         <input type="text" size="15" name="srchterm" value="$srchterm" />
         $srchinsel 
     </td>
    </tr>
   </table>
   <br />
 END_BLOCK  END_BLOCK
   
     $output .= &Apache::lonhtmlcommon::start_pick_box().  
                &Apache::lonhtmlcommon::row_title($lt{'doma'}).  
                $domform.  
                &Apache::lonhtmlcommon::row_closure().  
                &Apache::lonhtmlcommon::row_title($lt{'usr'}).  
                $srchbysel.  
                $srchtypesel.  
                '<input type="text" size="15" name="srchterm" value="'.$srchterm.'" />'.  
                $srchinsel.  
                &Apache::lonhtmlcommon::row_closure(1).  
                &Apache::lonhtmlcommon::end_pick_box().  
                '<br />';  
     return $output;      return $output;
 }  }
   
Line 7303  sub personal_data_fieldtitles { Line 7405  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 7373  sub get_institutional_codes { Line 7474  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  =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  
   
 =head1 HTTP Helpers  =head1 HTTP Helpers
   
 =over 4  =over 4
Line 7712  sub upload_embedded { Line 7765  sub upload_embedded {
                                    '&nbsp;<a href="'.$url.'">'.                                     '&nbsp;<a href="'.$url.'">'.
                                    $orig_uploaded_filename.'</a><br />';                                     $orig_uploaded_filename.'</a><br />';
                     } else {                      } else {
                         $output .= '<font size="+2">'.                          $output .= '<span class=\"LC_fontsize_large\">'.
                                    &mt('View embedded file: [_1]','<a href="'.$url.'">'.                                     &mt('View embedded file: [_1]','<a href="'.$url.'">'.
                                    $orig_uploaded_filename.'</a>').'</font><br />';                                     $orig_uploaded_filename.'</a>').'</span><br />';
                     }                      }
                 }                  }
                 close($fh);                  close($fh);
Line 8019  sub csv_print_samples { Line 8072  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 [_1]',($sample+1)).'</th>');          $r->print('<th>'.&mt('Column&nbsp;[_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 8064  sub csv_print_select_table { Line 8116  sub csv_print_select_table {
  my ($value,$display,$defaultcol)=@{ $array_ref };   my ($value,$display,$defaultcol)=@{ $array_ref };
  $r->print(&start_data_table_row().'<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.');">');
  $r->print('<option value="none"></option>');   $r->print('<option value="none"></option>');
  foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {   foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {
Line 8718  sub restore_settings { Line 8770  sub restore_settings {
   
 =item * &build_recipient_list()  =item * &build_recipient_list()
   
 Build recipient lists for five types of e-mail:  Build recipient lists for three types of e-mail:
 (a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors  (a) Error Reports, (b) Package Updates, (c) Help requests, generated by
 (d) Help requests, (e) Course requests needing approval,  generated by  lonerrorhandler.pm, CHECKRPMS and lonsupportreq.pm respectively.
 lonerrorhandler.pm, CHECKRPMS, loncron, lonsupportreq.pm and  
 loncoursequeueadmin.pm respectively.  
   
 Inputs:  Inputs:
 defmail (scalar - email address of default recipient),   defmail (scalar - email address of default recipient), 
Line 8746  sub build_recipient_list { Line 8796  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 (exists($domconfig{'contacts'}{$mailing})) {          if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') {
             if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') {              my @contacts = ('adminemail','supportemail');
                 my @contacts = ('adminemail','supportemail');              foreach my $item (@contacts) {
                 foreach my $item (@contacts) {                  if ($domconfig{'contacts'}{$mailing}{$item}) {
                     if ($domconfig{'contacts'}{$mailing}{$item}) {                      my $addr = $domconfig{'contacts'}{$item}; 
                         my $addr = $domconfig{'contacts'}{$item};                      if (!grep(/^\Q$addr\E$/,@recipients)) {
                         if (!grep(/^\Q$addr\E$/,@recipients)) {                          push(@recipients,$addr);
                             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 9295  sub check_clone { Line 9341  sub check_clone {
         $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});               $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});     
     } else {      } else {
  my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});   my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
         if (($env{'request.role.domain'} eq $args->{'clonedomain'}) &&    if ($env{'request.role.domain'} eq $args->{'clonedomain'}) {
             (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {      $can_clone = 1;
      $can_clone = 1;  
  } else {   } else {
     my %clonehash = &Apache::lonnet::get('environment',['cloners'],      my %clonehash = &Apache::lonnet::get('environment',['cloners'],
  $args->{'clonedomain'},$args->{'clonecourse'});   $args->{'clonedomain'},$args->{'clonecourse'});
Line 9324  sub check_clone { Line 9369  sub check_clone {
 }  }
   
 sub construct_course {  sub construct_course {
     my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context,$cnum,$category) = @_;      my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_;
     my $outcome;      my $outcome;
     my $linefeed =  '<br />'."\n";      my $linefeed =  '<br />'."\n";
     if ($context eq 'auto') {      if ($context eq 'auto') {
Line 9362  sub construct_course { Line 9407  sub construct_course {
                                              $args->{'crscode'},                                               $args->{'crscode'},
                                              $args->{'ccuname'}.':'.                                               $args->{'ccuname'}.':'.
                                              $args->{'ccdomain'},                                               $args->{'ccdomain'},
                                              $args->{'crstype'},                                               $args->{'crstype'});
                                              $cnum,$context,$category);  
   
   
     # Note: The testing routines depend on this being output; see       # Note: The testing routines depend on this being output; see 
     # Utils::Course. This needs to at least be output as a comment      # Utils::Course. This needs to at least be output as a comment
Line 9672  sub course_type { Line 9715  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',
                   'Community' => 'group',                    'Group' => 'team',
                 );                  );
     return $names{$crstype};      return $names{$crstype};
 }  }
Line 9737  sub escape_url { Line 9780  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 9884  sub init_user_environment { Line 9911  sub init_user_environment {
  }   }
   
         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');
         }          }
   
         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 9906  sub init_user_environment { Line 9927  sub init_user_environment {
     }      }
     untie(%disk_env);      untie(%disk_env);
  } else {   } else {
     &Apache::lonnet::logthis("<font color=\"blue\">WARNING: ".      &Apache::lonnet::logthis("<span style=\"color:blue;\">WARNING: ".
    'Could not create environment storage in lonauth: '.$!.'</font>');     'Could not create environment storage in lonauth: '.$!.'</span>');
     return 'error: '.$!;      return 'error: '.$!;
  }   }
     }      }

Removed from v.1.692.4.17  
changed lines
  Added in v.1.748


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