Diff for /loncom/interface/loncommon.pm between versions 1.692.4.14 and 1.697

version 1.692.4.14, 2009/08/15 12:34:12 version 1.697, 2008/11/28 18:18:39
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) {      function getFormIdByName(formname) {
     for (var i=0;i<document.forms[formid].elements.length;i++) {          for (var i=0;i<document.forms.length;i++) {
         if (document.forms[formid].elements[i].name == item) {              if (document.forms[i].name == formname) {
             return i;                  return i;
         }  
     }  
     return -1;  
 }  
   
 function getDomainFromSelectbox(formname,udom) {  
     var userdom;  
     var formid = getFormIdByName(formname);  
     if (formid > -1) {  
         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 {      function getIndexByName(formid,item) {
     my $id_functions = &javascript_index_functions();          for (var i=0;i<document.forms[formid].elements.length;i++) {
     return <<"ENDUSERBRW";              if (document.forms[formid].elements[i].name == item) {
                   return i;
 function openuserbrowser(formname,uname,udom,ulast,ufirst,uemail,hideudom,crsdom) {  
     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;  
     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) {  
     var formid = getFormIdByName(formname);  
     if (formid > -1) {  
         var domid = getIndexByName(formid,udom);  
         var hidedomid = getIndexByName(formid,origdom);  
         if (hidedomid > -1) {  
             var fixeddom = document.forms[formid].elements[hidedomid].value;  
             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 690  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 709  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) = @_;  
     return '<a href="javascript:openuserbrowser('."'$form','$unameelem','$domelem',".  
            "'$lastelem','$firstelem','$emailelem','$hdomelem','$coursedom'".  
            ');">'.$linktext.'</a>';  
 }  
   
 sub check_uncheck_jscript {  sub check_uncheck_jscript {
     my $jscript = <<"ENDSCRT";      my $jscript = <<"ENDSCRT";
 function checkAll(field) {  function checkAll(field) {
Line 815  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 916  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 963  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 1054  sub help_open_topic { Line 932  sub help_open_topic {
     # 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.='</span></td></tr></table>' };
         $template.='</span></td></tr></table>';  
     }  
     return $template;      return $template;
   
 }  }
Line 1067  sub help_open_topic { Line 943  sub help_open_topic {
 # This is a quicky function for Latex cheatsheet editing, since it   # This is a quicky function for Latex cheatsheet editing, since it 
 # appears in at least four places  # appears in at least four places
 sub helpLatexCheatsheet {  sub helpLatexCheatsheet {
     my ($topic,$text,$not_author) = @_;      my $other = shift;
     my $out;  
     my $addOther = '';      my $addOther = '';
     if ($topic) {      if ($other) {
  $addOther = &Apache::loncommon::help_open_topic($topic,$text,   $addOther = Apache::loncommon::help_open_topic($other, shift,
        undef, undef, 600) .         undef, undef, 600) .
    '</td><td>';     '</td><td>';
     }      }
     $out = '<table><tr><td>'.      return '<table><tr><td>'.
            $addOther .   $addOther .
            &Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),   &Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),
                                                undef,undef,600).      undef,undef,600)
            '</td><td>'.   .'</td><td>'.
            &Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),   &Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),
                                                undef,undef,600).      undef,undef,600)
            '</td>';   .'</td><td>'.
     unless ($not_author) {   &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),
         $out .= '<td>'.                                      undef,undef,600)
                 &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),   .'</td></tr></table>';
                                                     undef,undef,600).  
                 '</td>';  
     }  
     $out .= '</tr></table>';  
     return $out;  
 }  }
   
 sub general_help {  sub general_help {
Line 1117  sub update_help_link { Line 987  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 1196  sub help_menu_js { Line 1064  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 1222  function writeHelp(caller) { Line 1090  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 1491  sub resize_textarea_js { Line 1359  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 1530  function resize_textarea(textarea_id,bot Line 1397  function resize_textarea(textarea_id,bot
     }      }
     textarea.style.height=new_height+'px';      textarea.style.height=new_height+'px';
 }  }
 // ]]>  
 </script>  </script>
 RESIZE  RESIZE
   
Line 1763  sub multiple_select_form { Line 1629  sub multiple_select_form {
             $size = scalar(keys(%$hash));              $size = scalar(keys(%$hash));
         }          }
     }      }
     $output.="\n".'<select name="'.$name.'" size="'.$size.'" multiple="multiple">';      $output.="\n<select name='$name' size='$size' multiple='1'>";
     my @order;      my @order;
     if (ref($order) eq 'ARRAY')  {      if (ref($order) eq 'ARRAY')  {
         @order = @{$order};          @order = @{$order};
Line 1820  sub select_form { Line 1686  sub select_form {
 sub display_filter {  sub display_filter {
     if (!$env{'form.show'}) { $env{'form.show'}=10; }      if (!$env{'form.show'}) { $env{'form.show'}=10; }
     if (!$env{'form.displayfilter'}) { $env{'form.displayfilter'}='currentfolder'; }      if (!$env{'form.displayfilter'}) { $env{'form.displayfilter'}='currentfolder'; }
     return '<span class="LC_nobreak"><label>'.&mt('Records [_1]',      return '<nobr><label>'.&mt('Records [_1]',
        &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,         &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,
    (&mt('all'),10,20,50,100,1000,10000))).     (&mt('all'),10,20,50,100,1000,10000))).
    '</label></span> <span class="LC_nobreak">'.     '</label></nobr> <nobr>'.
            &mt('Filter [_1]',             &mt('Filter [_1]',
    &select_form($env{'form.displayfilter'},     &select_form($env{'form.displayfilter'},
  'displayfilter',   'displayfilter',
  ('currentfolder' => 'Current folder/page',   ('currentfolder' => 'Current folder/page',
  'containing' => 'Containing phrase',   'containing' => 'Containing phrase',
  'none' => 'None'))).   'none' => 'None'))).
  '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>';   '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></nobr>';
 }  }
   
 sub gradeleveldescription {  sub gradeleveldescription {
Line 1874  sub select_level_form { Line 1740  sub select_level_form {
   
 =pod  =pod
   
 =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)  =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc)
   
 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 1883  See loncreateuser.pm for an example invo Line 1749  See loncreateuser.pm for an example invo
 If the $includeempty flag is set, it also includes an empty choice ("no domain  If the $includeempty flag is set, it also includes an empty choice ("no domain
 selected");  selected");
   
 If the $showdomdesc flag is set, the domain name is followed by the domain description.  If the $showdomdesc flag is set, the domain name is followed by the domain description. 
   
 The optional $onchange argument specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.  
   
 =cut  =cut
   
 #-------------------------------------------  #-------------------------------------------
 sub select_dom_form {  sub select_dom_form {
     my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;      my ($defdom,$name,$includeempty,$showdomdesc) = @_;
     if ($onchange) {  
         $onchange = ' onchange="'.$onchange.'"';  
     }  
     my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());      my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     if ($includeempty) { @domains=('',@domains); }      if ($includeempty) { @domains=('',@domains); }
     my $selectdomain = "<select name=\"$name\" size=\"1\"$onchange>\n";      my $selectdomain = "<select name=\"$name\" size=\"1\">\n";
     foreach my $dom (@domains) {      foreach my $dom (@domains) {
         $selectdomain.="<option value=\"$dom\" ".          $selectdomain.="<option value=\"$dom\" ".
             ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;              ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;
Line 1953  sub home_server_form_item { Line 1814  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 2248  sub authform_kerberos { Line 2109  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 2263  sub authform_kerberos { Line 2124  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 2287  sub authform_kerberos { Line 2148  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 2296  sub authform_kerberos { Line 2157  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 2357  sub authform_internal{ Line 2218  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 2373  sub authform_internal{ Line 2234  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 2382  sub authform_internal{ Line 2243  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 2397  sub authform_internal{ Line 2258  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 2412  sub authform_local{ Line 2273  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 2428  sub authform_local{ Line 2289  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 2437  sub authform_local{ Line 2298  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 2466  sub authform_filesystem{ Line 2327  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 2479  sub authform_filesystem{ Line 2340  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 2488  sub authform_filesystem{ Line 2349  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 2856  sub flush_email_cache { Line 2717  sub flush_email_cache {
     &Apache::lonnet::devalidate_cache_new('emailscache',$id);      &Apache::lonnet::devalidate_cache_new('emailscache',$id);
 }  }
   
 # -------------------------------------------------------------------- getlangs  
   
 =pod  
   
 =item * &getlangs($uname,$udom)  
   
 Gets a user's language preference and returns it as a hash with key:  
 language.  
   
 =cut  
   
   
 sub getlangs {  
     my ($uname,$udom) = @_;  
     if (!$udom)  { $udom =$env{'user.domain'}; }  
     if (!$uname) { $uname=$env{'user.name'};   }  
     my $id=$uname.':'.$udom;  
     my ($langs,$cached)=&Apache::lonnet::is_cached_new('userlangs',$id);  
     if ($cached) {  
         return %{$langs};  
     } else {  
         my %loadlangs=&Apache::lonnet::get('environment',['languages'],  
                                            $udom,$uname);  
         &Apache::lonnet::do_cache_new('userlangs',$id,\%loadlangs);  
         return %loadlangs;  
     }  
 }  
   
 sub flush_langs_cache {  
     my ($uname,$udom)=@_;  
     if (!$udom)  { $udom =$env{'user.domain'}; }  
     if (!$uname) { $uname=$env{'user.name'};   }  
     return if ($udom eq 'public' && $uname eq 'public');  
     my $id=$uname.':'.$udom;  
     &Apache::lonnet::devalidate_cache_new('userlangs',$id);  
 }  
   
 # ------------------------------------------------------------------ Screenname  # ------------------------------------------------------------------ Screenname
   
 =pod  =pod
Line 2911  sub screenname { Line 2735  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 2956  sub aboutmewrapper { Line 2761  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
Line 2991  sub track_student_link { Line 2796  sub track_student_link {
  &help_open_topic('View_recent_activity');   &help_open_topic('View_recent_activity');
 }  }
   
 sub slot_reservations_link {  
     my ($linktext,$sname,$sdom,$target) = @_;  
     my $link ="/adm/slotrequest?command=showresv&amp;origin=aboutme";  
     my $title = 'View slot reservation history';  
     if (defined($sname) && $sname !~ /^\s*$/ &&  
         defined($sdom)  && $sdom  !~ /^\s*$/) {  
         $link .= "&amp;uname=$sname&amp;udom=$sdom";  
         $title .= ' of this student';  
     }  
     if (defined($target) && $target !~ /^\s*$/) {  
         $target = qq{target="$target"};  
     } else {  
         $target = '';  
     }  
     $title = &mt($title);  
     $linktext = &mt($linktext);  
     return qq{<a href="$link" title="$title" $target>$linktext</a>};  
 # FIXME uncomment when help item created: &help_open_topic('Slot_Reservation_History');  
   
 }  
   
 # ===================================================== Display a student photo  # ===================================================== Display a student photo
   
   
Line 3249  sub languages { Line 3033  sub languages {
     return $preferred_possibilities[0];      return $preferred_possibilities[0];
 }  }
   
 sub user_lang {  
     my ($touname,$toudom,$fromcid) = @_;  
     my @userlangs;  
     if (($fromcid ne '') && ($env{'course.'.$fromcid.'.languages'} ne '')) {  
         @userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/,  
                     $env{'course.'.$fromcid.'.languages'}));  
     } else {  
         my %langhash = &getlangs($touname,$toudom);  
         if ($langhash{'languages'} ne '') {  
             @userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'});  
         } else {  
             my %domdefs = &Apache::lonnet::get_domain_defaults($toudom);  
             if ($domdefs{'lang_def'} ne '') {  
                 @userlangs = ($domdefs{'lang_def'});  
             }  
         }  
     }  
     my @languages=&Apache::lonlocal::get_genlanguages(@userlangs);  
     my $user_lh = Apache::localize->get_handle(@languages);  
     return $user_lh;  
 }  
   
 ###############################################################  ###############################################################
 ##               Student Answer Attempts                     ##  ##               Student Answer Attempts                     ##
 ###############################################################  ###############################################################
Line 3409  sub relative_to_absolute { Line 3171  sub relative_to_absolute {
     }      }
     $thisdir=~s-/[^/]*$--;      $thisdir=~s-/[^/]*$--;
     foreach my $link (@rlinks) {      foreach my $link (@rlinks) {
  unless (($link=~/^https?\:\/\//i) ||   unless (($link=~/^http:\/\//i) ||
  ($link=~/^\//) ||   ($link=~/^\//) ||
  ($link=~/^javascript:/i) ||   ($link=~/^javascript:/i) ||
  ($link=~/^mailto:/i) ||   ($link=~/^mailto:/i) ||
Line 3986  sub blocking_status { Line 3748  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 4118  sub get_domainconf { Line 3880  sub get_domainconf {
         if (ref($domconfig{'login'}) eq 'HASH') {          if (ref($domconfig{'login'}) eq 'HASH') {
             if (keys(%{$domconfig{'login'}})) {              if (keys(%{$domconfig{'login'}})) {
                 foreach my $key (keys(%{$domconfig{'login'}})) {                  foreach my $key (keys(%{$domconfig{'login'}})) {
                     if (ref($domconfig{'login'}{$key}) eq 'HASH') {                      $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};
                         foreach my $img (keys(%{$domconfig{'login'}{$key}})) {  
                             $designhash{$udom.'.login.'.$key.'_'.$img} =  
                                 $domconfig{'login'}{$key}{$img};  
                         }  
                     } else {  
                         $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};  
                     }  
                 }                  }
             } else {              } else {
                 $legacy{'login'} = 1;                  $legacy{'login'} = 1;
Line 4347  sub bodytag { Line 4102  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 4635  sub standard_css { Line 4390  sub standard_css {
     my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';      my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';
     my $mono                 = 'monospace';      my $mono                 = 'monospace';
     my $data_table_head      = $tabbg;      my $data_table_head      = $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 4649  sub standard_css { Line 4404  sub standard_css {
     my $mail_other_hover     = '#669999';      my $mail_other_hover     = '#669999';
     my $table_header         = '#DDDDDD';      my $table_header         = '#DDDDDD';
     my $feedback_link_bg     = '#BBBBBB';      my $feedback_link_bg     = '#BBBBBB';
     my $lg_border_color      = '#C8C8C8';  
   
     my $border = ($env{'browser.type'} eq 'explorer' ||      my $border = ($env{'browser.type'} eq 'explorer' ||
   $env{'browser.type'} eq 'safari'     ) ? '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 }  h1, h2, h3, th { font-family: $sans }
 a:focus { color: red; background: yellow }   a:focus { color: red; background: yellow } 
   
 hr {  
   clear: both;  
   color: $tabbg;  
   background-color: $tabbg;  
   height: 3px;  
   border: none;  
 }  
   
 table.thinborder,  table.thinborder,
   
 table.thinborder tr th {  table.thinborder tr th {
Line 4697  form, .inline { display: inline; } Line 4442  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 {
   color: #999999;    color: #999;
 }  }
   
 table.LC_pastsubmission {  table.LC_pastsubmission {
Line 4737  table#LC_top_nav, table#LC_menubuttons,t Line 4473  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 4750  table#LC_title_bar.LC_with_remote { Line 4486  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 {
Line 4759  table.LC_docs_path { Line 4495  table.LC_docs_path {
   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 4780  span.LC_title_bar_title { Line 4516  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_mainmenu {
   width: 100%;    width: 100%;
   border: 0;    border: 0px;
   border-spacing: 1px;    border-spacing: 1px;
   padding: 0 1px;    padding: 0px 1px;
   margin: 0;    margin: 0px;
   border-collapse: separate;    border-collapse: separate;
 }  }
 table#LC_menubuttons img, table#LC_menubuttons_mainmenu img {  table#LC_menubuttons img, table#LC_menubuttons_mainmenu img {
   border: none;    border: 0px;
 }  }
 table#LC_top_nav td {  table#LC_top_nav td {
   background: $tabbg;    background: $tabbg;
   border: none;    border: 0px;
   font-size: small;    font-size: small;
 }  }
 table#LC_top_nav td a, div#LC_top_nav a {  table#LC_top_nav td a, div#LC_top_nav a {
Line 4814  table#LC_top_nav td.LC_top_nav_logo { Line 4550  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 4855  table#LC_mainmenu td.LC_mainmenu_column Line 4591  table#LC_mainmenu td.LC_mainmenu_column
 .LC_menubuttons_link {  .LC_menubuttons_link {
   text-decoration: none;    text-decoration: none;
 }  }
 /*2008--9-5: new menu style sheet.Changed category*/  #2008--9-5: new menu style sheet.Changed category
 .LC_menubuttons_category {  .LC_menubuttons_category {
   color: $font;    color: $font;
   background: $pgbg;    background: $pgbg;
Line 4883  td.LC_menubuttons_img { Line 4619  td.LC_menubuttons_img {
   font-weight: bold;    font-weight: bold;
 }  }
   
   .LC_rolesmenu_is {
     font-family: $sans;
   }
   
   .LC_rolesmenu_selected {
     font-family: $sans;
   }
   
   .LC_rolesmenu_future {
     font-family: $sans;
   }
   
   
   .LC_rolesmenu_will {
     font-family: $sans;
   }
   
   .LC_rolesmenu_will_not {
     font-family: $sans;
   }
   
   .LC_rolesmenu_expired {
     font-family: $sans;
   }
   
   .LC_rolesinfo {
     font-family: $sans;
   }
   
 .LC_dropadd_labeltext {  .LC_dropadd_labeltext {
   font-family: $sans;    font-family: $sans;
   text-align: right;    text-align: right;
Line 4897  td.LC_menubuttons_img { Line 4662  td.LC_menubuttons_img {
   font-size: smaller;    font-size: smaller;
 }  }
   
 .LC_mail_functions {  
     font-weight: bold;  
 }  
   
 table.LC_aboutme_port {  table.LC_aboutme_port {
   border: 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 4918  table.LC_data_table, table.LC_mail_list Line 4679  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: smaller;
 }  }
 table.LC_innerpickbox tr th,  
 table.LC_innerpickbox tr td {  
   vertical-align: top;  
 }  
 table.LC_data_table tr.LC_info_row > td {  
   background-color: #CCCCCC;  
   font-weight: bold;  
   text-align: left;  
 }  
 table.LC_data_table tr.LC_odd_row > td,   table.LC_data_table tr.LC_odd_row > td, 
 table.LC_pick_box tr > td.LC_odd_row,  
 table.LC_aboutme_port tr td {  table.LC_aboutme_port tr td {
   background-color: $data_table_light;    background-color: $data_table_light;
   padding: 2px;    padding: 2px;
 }  }
 table.LC_data_table tr.LC_even_row > td,  table.LC_data_table tr.LC_even_row > td,
 table.LC_pick_box tr > td.LC_even_row,  
 table.LC_aboutme_port tr.LC_even_row td {  table.LC_aboutme_port tr.LC_even_row td {
   background-color: $data_table_dark;    background-color: $data_table_dark;
   padding: 2px;  
 }  }
 table.LC_data_table tr.LC_data_table_highlight td {  table.LC_data_table tr.LC_data_table_highlight td {
   background-color: $data_table_darker;    background-color: $data_table_darker;
Line 4988  table.LC_nested_outer tr td.LC_subheader Line 4735  table.LC_nested_outer tr td.LC_subheader
   text-align: right;    text-align: right;
 }  }
 table.LC_nested tr.LC_info_row td {  table.LC_nested tr.LC_info_row td {
   background-color: #CCCCCC;    background-color: #CCC;
   font-weight: bold;    font-weight: bold;
   font-size: small;    font-size: small;
   text-align: center;    text-align: center;
Line 4998  table.LC_nested_outer tr th.LC_left_item Line 4745  table.LC_nested_outer tr th.LC_left_item
   text-align: left;    text-align: left;
 }  }
 table.LC_nested td {  table.LC_nested td {
   background-color: #FFFFFF;    background-color: #FFF;
   font-size: small;    font-size: small;
 }  }
 table.LC_nested_outer tr th.LC_right_item,  table.LC_nested_outer tr th.LC_right_item,
Line 5009  table.LC_nested tr td.LC_right_item { Line 4756  table.LC_nested tr td.LC_right_item {
 }  }
   
 table.LC_nested tr.LC_odd_row td {  table.LC_nested tr.LC_odd_row td {
   background-color: #EEEEEE;    background-color: #EEE;
 }  }
   
 table.LC_createuser {  table.LC_createuser {
Line 5020  table.LC_createuser tr.LC_section_row td Line 4767  table.LC_createuser tr.LC_section_row td
 }  }
   
 table.LC_createuser tr.LC_info_row td  {  table.LC_createuser tr.LC_info_row td  {
   background-color: #CCCCCC;    background-color: #CCC;
   font-weight: bold;    font-weight: bold;
   text-align: center;    text-align: center;
 }  }
Line 5072  table.LC_mail_list tr.LC_mail_even { Line 4819  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_portfolio_actions {  
   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 {  table#LC_cstr_controls {
   width: 100%;    width: 100%;
   border-collapse: collapse;    border-collapse: collapse;
Line 5108  table#LC_cstr_controls tr th { Line 4837  table#LC_cstr_controls tr th {
   font-size: smaller;    font-size: smaller;
 }  }
   
 table#LC_browser {  table.LC_data_table tr > td.LC_browser_file,
    table.LC_data_table tr > td.LC_browser_file_published {
 }  
 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;
 }  }
   
 table.LC_data_table tr > td.LC_roles_is {  
 /*  background: #77FF77; */  
 }  
 table.LC_data_table tr > td.LC_roles_future {  
   background: #FFFF77;  
 }  
 table.LC_data_table tr > td.LC_roles_will {  
   background: #FFAA77;  
 }  
 table.LC_data_table tr > td.LC_roles_expired {  
   background: #FF7777;  
 }  
 table.LC_data_table tr > td.LC_roles_will_not {  
   background: #AAFF77;  
 }  
 table.LC_data_table tr > td.LC_roles_selected {  
   background: #11CC55;  
 }  
   
 span.LC_current_location {  span.LC_current_location {
   font-size: x-large;    font-size: x-large;
   background: $pgbg;    background: $pgbg;
Line 5200  table.LC_parm_overview_restrictions th { Line 4901  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 5213  table#LC_helpmenu_links { Line 4914  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 5252  table.LC_pick_box { Line 4953  table.LC_pick_box {
   border-spacing: 1px;    border-spacing: 1px;
 }  }
 table.LC_pick_box td.LC_pick_box_title {  table.LC_pick_box td.LC_pick_box_title {
   background: $sidebg;    background: $tabbg;
   font-weight: bold;    font-weight: bold;
   text-align: right;    text-align: right;
   vertical-align: top;  
   width: 184px;    width: 184px;
   padding: 8px;    padding: 8px;
 }  }
 table.LC_pick_box td.LC_selfenroll_pick_box_title {  table.LC_pick_box td.LC_selfenroll_pick_box_title {
   background: $sidebg;    background: $tabbg;
   font-weight: bold;    font-weight: bold;
   text-align: right;    text-align: right;
   width: 350px;    width: 350px;
Line 5276  table.LC_pick_box td.LC_pick_box_select Line 4976  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 5318  table.LC_helpform_receipt td.LC_oddrow_v Line 5018  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 5351  table.LC_group_priv_box td.LC_groups_fun Line 5051  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 5372  table.LC_notify_front_page td { Line 5072  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 5489  span.LC_cusr_subheading { Line 5188  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 5205  table.LC_docs_documents td.LC_docs_docum
 }  }
   
 .LC_docs_entry_move {  .LC_docs_entry_move {
   border: none;    border: 0px;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
Line 5562  table.LC_sty_end { Line 5261  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 5701  table.LC_edit_problem_header_title { Line 5400  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 5717  hr.LC_edit_problem_divide { Line 5416  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 5742  table#LC_mainmenu td.LC_mainmenu_col_fie Line 5441  table#LC_mainmenu td.LC_mainmenu_col_fie
   font-weight: bold;    font-weight: bold;
 }  }
 fieldset#LC_mainmenu_fieldset {  fieldset#LC_mainmenu_fieldset {
   margin:0 10px 10px 0;    margin:0px 10px 10px 0px;
   
   }
   /* ---- 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.
   # --------------------------*/
   
   
   body {
    font-family: Tahoma, Arial,Helvetica,sans-serif;
    font-size: 0.85em;
    line-height: 130%;
    color: RGB(45, 45, 45);
   }
   
   a:link,a:visited {
    /*color: RGB(0, 118, 127);*/
    /*text-decoration: underline;*/
   }
   
   a:hover{
    text-decoration:none;
   }
   /*a:hover,
   UL.smallMenu A:hover,
   UL.MenuBreadcrumbs A:hover,
   UL#TabMainMenuContent A:hover{
    color: rgb(200, 10, 50);
   }*/
   
   h1 { 
    padding:5px 10px 5px 20px;
    line-height:130%;
   }
   h2,h4,h6 {
    /*color: RGB(0, 118, 127);*/
   }
   h2,h3,h4,h5,h6
   {
   margin:5px 0px 5px 0px;
   line-height:130%;
   }
   
   .right {
    text-align: right;
   }
   
   .center {
    text-align: center;
   }
   
   .left {
    text-align: left;
   }
   
   
   .HeadRight {
    text-align: right;
    float: right;
    margin: 0px;
    padding: 0px;
    right:0;
           position:absolute;
   }
   
   img {
   /* border: 0px; */
   }
   
   .personalBgColor {
    background: RGB(237, 239, 0) url(images/headHighlight.png) repeat-y left top;
   }
   
   p {
    padding: 10px;
   }
   DL,UL,Div,Fieldset {
    /*margin: 10px;*/
    overflow:hidden;
   }
   OL.smallMenu {
    margin: 0px 0px 0px 0px;
   }
   
   OL.smallMenu li {
    display: inline;
    padding: 5px 5px 0px 10px;
    vertical-align: top;
   }
   
   OL.smallMenu li img {
    vertical-align: bottom;
 }  }
   
 div.LC_createcourse {  OL.smallMenu A {
     margin: 10px 10px 10px 10px;   font-size: 90%;
    color: RGB(80, 80, 80);
    text-decoration: none;
   }
   
   OL#TabMainMenuContent {
   
    margin: 0px 0px 10px 0px;
    padding: 0px;
   }
   
   OL#TabMainMenuContent LI {
    display: inline;
    vertical-align: bottom;
    border-bottom: solid 1px RGB(175, 175, 175);
    border-right: solid 1px RGB(175, 175, 175);
    padding: 5px 15px 5px 15px;
    margin-right:4px;
    line-height: 140%;
    font-weight: bold;
    overflow:hidden;
    background: RGB(211, 206, 205) URL(images/TabMenuBG.png) repeat-x left top;
   }
   
   OL#TabMainMenuContent LI A {
    color: RGB(47, 47, 47);
    text-decoration: none;
   }
   
   OL#TabMainMenuContent DIV.columnSection {
    margin-bottom: 0px;
   }
   
   OL#MenuBreadcrumbs {
    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: RGB(211, 206, 205) URL(images/TabMenuBG.png) repeat-x left
    top;
   }
   
   OL#MenuBreadcrumbs li {
    background: url(images/pfeil_white.png) no-repeat left center;
    display: inline;
    padding: 0px 0px 0px 10px;
    vertical-align: bottom;
    overflow:hidden;
   }
   
   OL#MenuBreadcrumbs LI A {
    text-decoration: none;
    font-size:90%;
   }
   
   h4.hcell {
    padding: 3px 10px 3px 10px;
    margin: 0px;
    background: RGB(0, 118, 127);
    color: white;
    border: outset 1px;
   }
   
   DIV.DivContentBoxSpecial
   {
    border: solid 1px RGB(100, 100, 100);
   }
   
   FIELDSET
   {
    /*width:78%;*/
   }
   DIV.DivContentBox,
   DIV.DivContentBoxSpecial {
    width: 80%;
    margin:10px;
   }
   
   FIELDSET legend,DL DT {
    font-weight: bold;
    font-size: 110%;
    /*padding-left: 0px;*/
   /* margin-left: 0px;*/
   }
   
   DIV.DivImportant {
    background: url(images/important.png) no-repeat center top;
    padding: 100px 10px 10px 10px;
    width: 200px;
    border: double 4px RGB(200, 200, 200);
   }
   
   
   
   DL.ListStyleClean DT {
    padding-right: 5px;
    display: table-header-group;
   }
   
   DL.ListStyleClean DD {
    display: table-row;
   }
   
   .ListStyleClean,
   .ListStyleSimple,
   .ListStyleNormal,
   .ListStyleNormal_Border,
   .ListStyleSpecial
    {
    /*display:block; */
    width: 400px;
    list-style-position: inside;
    list-style-type: none;
    overflow: hidden;
    padding: 0px;
   }
   
   .ListStyleClean li,
   .ListStyleSimple li,
   .ListStyleSimple DD,
   .ListStyleNormal li,
   .ListStyleNormal DD,
   .ListStyleSpecial li,
   .ListStyleSpecial DD
    {
    margin: 0px;
    padding: 5px 5px 5px 10px;
    clear: both;
    /*display:block;*/
   }
   
   .ListStyleClean LI,
   .ListStyleClean DD {
    padding-top: 0px;
    padding-bottom: 0px;
   }
   
   .ListStyleSimple DD,
   .ListStyleSimple LI{
    border-bottom: solid 1px RGB(150, 150, 150);
   }
   
   .ListStyleSpecial LI,
   .ListStyleSpecial DD {
    list-style-type: none;
    background-color: RGB(220, 220, 220);
    margin-bottom: 4px;
   }
   
   table.SimpleTable *{
    padding:10px;
    }
   
   table.SimpleTable td {
    vertical-align:top;
    border:solid 1px RGB(210,210,210);
   }
   table.SimpleTable thead{
    background:rgb(210,210,210);
 }  }
   
   DIV.columnSection {
    display: block;
    clear: both;
    overflow: hidden;
    margin:0px;
   }
   
   DIV.columnSection>* {
    float: left;
    margin: 10px 20px 10px 0px;
    overflow:hidden;
   }
   
   DIV.columnSection>FIELDSET,
   DIV.columnSection>DIV.DivContentBox,
   DIV.columnSection>DIV.DivContentBoxSpecial
    {
    width: 480px;
   
   }
   
   .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:60%;
   }
   
   .LC_loginpage_loginInfo {
    margin-top:20px;
    margin-left:20px;
    float:left;
    width:30%;
    border:1px solid #CCCCCC;
    padding:10px;
   }
   
   .LC_loginpage_space {
    clear:both;
    margin-bottom:20px;
    border-bottom: 1px solid #CCCCCC;
   }
   
   .LC_loginpage_fieldset{
    border: 1px solid #CCCCCC;
    margin: 0 auto;
   }
   
   .LC_loginpage_legend{
    padding: 2px;
    margin: 0px;
    font-size:14px;
    font-weight:bold;
   }
   
   
   
 END  END
 }  }
   
Line 5877  sub xml_begin { Line 5896  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 6019  sub start_page { Line 6037  sub start_page {
     if ($args->{'html_encode'}) {      if ($args->{'html_encode'}) {
  $result = &html_encode($result);   $result = &html_encode($result);
     }      }
     #Breadcrumbs  
     if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {  
         &Apache::lonhtmlcommon::clear_breadcrumbs();  
         #if any br links exists, add them to the breadcrumbs  
         if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') {  
             foreach my $crumb (@{$args->{'bread_crumbs'}}){  
                 &Apache::lonhtmlcommon::add_breadcrumb($crumb);  
             }  
         }  
   
         #if bread_crumbs_component exists show it as headline else show only the breadcrumbs  
         if (exists($args->{'bread_crumbs_component'})){  
             $result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});  
         } else {  
             $result .= &Apache::lonhtmlcommon::breadcrumbs();  
         }  
     }  
     return $result;      return $result;
 }  }
   
   
 =pod  =pod
   
 =item * &head()  =item * &head()
Line 6269  sub get_users_function { Line 6271  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 6280  sub get_users_function { Line 6282  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 6826  sub default_quota { Line 6797  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 ($quotahash{'quotas'}{$item} ne '') {
                     if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') {                      if ($defquota eq '') {
                         if ($defquota eq '') {                          $defquota = $quotahash{'quotas'}{$item};
                             $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};                          $settingstatus = $item;
                             $settingstatus = $item;                      } elsif ($quotahash{'quotas'}{$item} > $defquota) {
                         } elsif ($quotahash{'quotas'}{'defaultquota'}{$item} > $defquota) {                          $defquota = $quotahash{'quotas'}{$item};
                             $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};                          $settingstatus = $item;
                             $settingstatus = $item;  
                         }  
                     }  
                 } else {  
                     if ($quotahash{'quotas'}{$item} ne '') {  
                         if ($defquota eq '') {  
                             $defquota = $quotahash{'quotas'}{$item};  
                             $settingstatus = $item;  
                         } elsif ($quotahash{'quotas'}{$item} > $defquota) {  
                             $defquota = $quotahash{'quotas'}{$item};  
                             $settingstatus = $item;  
                         }  
                     }                      }
                 }                  }
             }              }
         }          }
         if ($defquota eq '') {          if ($defquota eq '') {
             if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {              $defquota = $quotahash{'quotas'}{'default'};
                 $defquota = $quotahash{'quotas'}{'defaultquota'}{'default'};  
             } else {  
                 $defquota = $quotahash{'quotas'}{'default'};  
             }  
             $settingstatus = 'default';              $settingstatus = 'default';
         }          }
     } else {      } else {
Line 6962  sub user_picker { Line 6917  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 7006  sub user_picker { Line 6960  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 7050  ENDSCRIPT Line 7002  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 7119  function validateEntry(callingForm) { Line 7070  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 7293  sub personal_data_fieldtitles { Line 7247  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 7363  sub get_institutional_codes { Line 7316  sub get_institutional_codes {
   
 =pod  =pod
   
 =head1 Slot Helpers  
   
 =over 4  
   
 =item * sorted_slots()  
   
 Sorts an array of slot names in order of slot start time (earliest first).  
   
 Inputs:  
   
 =over 4  
   
 slotsarr  - Reference to array of unsorted slot names.  
   
 slots     - Reference to hash of hash, where outer hash keys are slot names.  
   
 =back  
   
 Returns:  
   
 =over 4  
   
 sorted   - An array of slot names sorted by the start time of the slot.  
   
 =back  
   
 =back  
   
 =cut  
   
   
 sub sorted_slots {  
     my ($slotsarr,$slots) = @_;  
     my @sorted;  
     if ((ref($slotsarr) eq 'ARRAY') && (ref($slots) eq 'HASH')) {  
         @sorted =  
             sort {  
                      if (ref($slots->{$a}) && ref($slots->{$b})) {  
                          return $slots->{$a}{'starttime'} <=> $slots->{$b}{'starttime'}  
                      }  
                      if (ref($slots->{$a})) { return -1;}  
                      if (ref($slots->{$b})) { return 1;}  
                      return 0;  
                  } @{$slotsarr};  
     }  
     return @sorted;  
 }  
   
 =pod  
   
 =back  =back
   
 =head1 HTTP Helpers  =head1 HTTP Helpers
Line 7965  sub upfile_select_html { Line 7868  sub upfile_select_html {
 #                 xml   => &mt('HTML/XML'),  #                 xml   => &mt('HTML/XML'),
                  );                   );
     my $Str = '<input type="file" name="upfile" size="50" />'.      my $Str = '<input type="file" name="upfile" size="50" />'.
         '<br />'.&mt('Type').': <select name="upfiletype">';          '<br />Type: <select name="upfiletype">';
     foreach my $type (sort(keys(%Types))) {      foreach my $type (sort(keys(%Types))) {
         $Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n";          $Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n";
     }      }
Line 8011  sub csv_print_samples { Line 7914  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 8056  sub csv_print_select_table { Line 7958  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 8710  sub restore_settings { Line 8612  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 8738  sub build_recipient_list { Line 8638  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 9287  sub check_clone { Line 9183  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 9316  sub check_clone { Line 9211  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 9354  sub construct_course { Line 9249  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 9399  sub construct_course { Line 9292  sub construct_course {
                    'policy.email',                     'policy.email',
                    'comment.email',                     'comment.email',
                    'pch.users.denied',                     'pch.users.denied',
                    'plc.users.denied',                     'plc.users.denied'],
                    'hidefromcat',  
                    'categories'],  
                    $$crsudom,$$crsunum);                     $$crsudom,$$crsunum);
     }      }
   
Line 9664  sub course_type { Line 9555  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 9729  sub escape_url { Line 9620  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 9875  sub init_user_environment { Line 9750  sub init_user_environment {
     }      }
  }   }
   
         foreach my $tool ('aboutme','blog','portfolio') {  
             $userenv{'availabletools.'.$tool} =  
                 &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');  
         }  
   
         foreach my $crstype ('official','unofficial','community') {  
             $userenv{'canrequest.'.$crstype} =  
                 &Apache::lonnet::usertools_access($username,$domain,$crstype,  
                                                   'reload','requestcourses');  
         }  
   
  $env{'user.environment'} = "$lonids/$cookie.id";   $env{'user.environment'} = "$lonids/$cookie.id";
   
  if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",   if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",
Line 9924  sub _add_to_env { Line 9788  sub _add_to_env {
 # --- Get the symbolic name of a problem and the url  # --- Get the symbolic name of a problem and the url
 sub get_symb {  sub get_symb {
     my ($request,$silent) = @_;      my ($request,$silent) = @_;
     (my $url=$env{'form.url'}) =~ s-^https?\://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;      (my $url=$env{'form.url'}) =~ s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
     my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url)));      my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url)));
     if ($symb eq '') {      if ($symb eq '') {
         if (!$silent) {          if (!$silent) {
Line 9951  sub get_annotation { Line 9815  sub get_annotation {
 }  }
   
 sub clean_symb {  sub clean_symb {
     my ($symb,$delete_enc) = @_;      my ($symb) = @_;
   
     &Apache::lonenc::check_decrypt(\$symb);      &Apache::lonenc::check_decrypt(\$symb);
     my $enc = $env{'request.enc'};      my $enc = $env{'request.enc'};
     if ($delete_enc) {      delete($env{'request.enc'});
         delete($env{'request.enc'});  
     }  
   
     return ($symb,$enc);      return ($symb,$enc);
 }  }

Removed from v.1.692.4.14  
changed lines
  Added in v.1.697


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