Diff for /loncom/interface/loncommon.pm between versions 1.796 and 1.876

version 1.796, 2009/04/25 20:22:07 version 1.876, 2009/08/04 19:53:42
Line 407  sub studentbrowser_javascript { Line 407  sub studentbrowser_javascript {
           ) { 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,courseadvonly) {
         var url = '/adm/pickstudent?';          var url = '/adm/pickstudent?';
Line 429  sub studentbrowser_javascript { Line 430  sub studentbrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');          stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();          stdeditbrowser.focus();
     }      }
   // ]]>
 </script>  </script>
 ENDSTDBRW  ENDSTDBRW
 }  }
Line 461  sub selectstudent_link { Line 463  sub selectstudent_link {
 sub authorbrowser_javascript {  sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";      return <<"ENDAUTHORBRW";
 <script type="text/javascript" language="JavaScript">  <script type="text/javascript" language="JavaScript">
   // <![CDATA[
 var stdeditbrowser;  var stdeditbrowser;
   
 function openauthorbrowser(formname,udom) {  function openauthorbrowser(formname,udom) {
Line 473  function openauthorbrowser(formname,udom Line 476  function openauthorbrowser(formname,udom
     stdeditbrowser.focus();      stdeditbrowser.focus();
 }  }
   
   // ]]>
 </script>  </script>
 ENDAUTHORBRW  ENDAUTHORBRW
 }  }
   
 sub coursebrowser_javascript {  sub coursebrowser_javascript {
     my ($domainfilter,$sec_element,$formname)=@_;      my ($domainfilter,$sec_element,$formname)=@_;
     my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role');      my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Community - for which you wish to add/modify a user role');
    my $output = '      my $id_functions = &javascript_index_functions();
       my $output = '
 <script type="text/javascript" language="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 = '';          var domainfilter = getDomainFromSelectbox(formname,udom);
         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 517  sub coursebrowser_javascript { Line 512  sub coursebrowser_javascript {
             else {              else {
                 if (formname == 'portform') {                  if (formname == 'portform') {
                     url += '&setroles='+extra_element;                      url += '&setroles='+extra_element;
                   } else {
                       if (formname == 'rules') {
                           url += '&fixeddom='+extra_element; 
                       }
                 }                  }
             }                   }     
         }          }
           if (formname == 'ccrs') {
               var ownername = document.forms[formid].ccuname.value;
               var ownerdom =  document.forms[formid].ccdomain.options[document.forms[formid].ccdomain.selectedIndex].value;
               url += '&cloner='+ownername+':'+ownerdom;
           }
         if (multflag !=null && multflag != '') {          if (multflag !=null && multflag != '') {
             url += '&multiple='+multflag;              url += '&multiple='+multflag;
         }          }
         if (crstype == 'Course/Group') {          if (crstype == 'Course/Community') {
             if (formname == 'cu') {              if (formname == 'cu') {
                 crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value;                   crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
                 if (crstype == "") {                  if (crstype == "") {
Line 541  sub coursebrowser_javascript { Line 545  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;
   }
   
     function getFormIdByName(formname) {  sub javascript_index_functions {
         for (var i=0;i<document.forms.length;i++) {      return <<"ENDJS";
             if (document.forms[i].name == formname) {  
                 return i;  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;   
     }      }
       return -1;
   }
   
     function getIndexByName(formid,item) {  function getDomainFromSelectbox(formname,udom) {
         for (var i=0;i<document.forms[formid].elements.length;i++) {      var userdom;
             if (document.forms[formid].elements[i].name == item) {      var formid = getFormIdByName(formname);
                 return i;      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;  
     }      }
 ENDSTDBRW      return userdom;
     if ($sec_element ne '') {  }
         $output .= &setsec_javascript($sec_element,$formname);  
   ENDJS
   
   }
   
   sub userbrowser_javascript {
       my $id_functions = &javascript_index_functions();
       return <<"ENDUSERBRW";
   
   function openuserbrowser(formname,uname,udom,ulast,ufirst,uemail,hideudom) {
       var url = '/adm/pickuser?';
       var userdom = getDomainFromSelectbox(formname,udom);
       if (userdom != null) {
          if (userdom != '') {
              url += 'srchdom='+userdom+'&';
          }
     }      }
     $output .= '      url += 'form=' + formname + '&unameelement='+uname+
 </script>';                                  '&udomelement='+udom+
     return $output;                                  '&ulastelement='+ulast+
                                   '&ufirstelement='+ufirst+
                                   '&uemailelement='+uemail+
                                   '&hideudomelement='+hideudom;
       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;
   }
   
   $id_functions
   ENDUSERBRW
 }  }
   
 sub setsec_javascript {  sub setsec_javascript {
Line 610  function setSect(sectionlist) { Line 693  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');
      if ($selecttype eq 'Community') {
          $linktext = &mt('Select Community'); 
      }
    return '<span class="LC_nobreak">'     return '<span class="LC_nobreak">'
          ."<a href='"           ."<a href='"
          .'javascript:opencrsbrowser("'.$form.'","'.$unameele           .'javascript:opencrsbrowser("'.$form.'","'.$unameele
          .'","'.$udomele.'","'.$desc.'","'.$extra_element           .'","'.$udomele.'","'.$desc.'","'.$extra_element
          .'","'.$multflag.'","'.$selecttype.'");'           .'","'.$multflag.'","'.$selecttype.'");'
          ."'>".&mt('Select Course').'</a>'           ."'>".$linktext.'</a>'
          .'</span>';           .'</span>';
 }  }
   
Line 625  sub selectauthor_link { Line 712  sub selectauthor_link {
           &mt('Select Author').'</a>';            &mt('Select Author').'</a>';
 }  }
   
   sub selectuser_link {
       my ($form,$unameelem,$domelem,$lastelem,$firstelem,$emailelem,$hdomelem,$linktext) = @_;
       return '<a href="javascript:openuserbrowser('."'$form','$unameelem','$domelem',".
              "'$lastelem','$firstelem','$emailelem','$hdomelem'".');">'.$linktext.'</a>';
   }
   
 sub check_uncheck_jscript {  sub check_uncheck_jscript {
     my $jscript = <<"ENDSCRT";      my $jscript = <<"ENDSCRT";
 function checkAll(field) {  function checkAll(field) {
Line 825  sub linked_select_forms { Line 918  sub linked_select_forms {
     # 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" language="JavaScript">'."\n";
       $result.="// <![CDATA[\n";
     $result.="var select2data = new Object();\n";      $result.="var select2data = new Object();\n";
     $" = '","';      $" = '","';
     my $debug = '';      my $debug = '';
Line 870  function select1_changed() { Line 964  function select1_changed() {
         }          }
     }      }
 }  }
   // ]]>
 </script>  </script>
 END  END
     # output the initial values for the selection lists      # output the initial values for the selection lists
Line 931  sub help_open_topic { Line 1026  sub help_open_topic {
     my ($topic, $text, $stayOnPage, $width, $height) = @_;      my ($topic, $text, $stayOnPage, $width, $height) = @_;
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     if ($env{'browser.interface'} eq 'textual') {  
  $stayOnPage=1;  
     }  
     $width = 350 if (not defined $width);      $width = 350 if (not defined $width);
     $height = 400 if (not defined $height);      $height = 400 if (not defined $height);
     my $filename = $topic;      my $filename = $topic;
Line 1026  sub update_help_link { Line 1118  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 1039  sub help_open_menu { Line 1133  sub help_open_menu {
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     # only use pop-up help (stayOnPage == 0)      # only use pop-up help (stayOnPage == 0)
     # if environment.remote is on (using remote control UI)      # if environment.remote is on (using remote control UI)
     if ($env{'browser.interface'} eq 'textual' ||      if ($env{'environment.remote'} eq 'off' ) {
     $env{'environment.remote'} eq 'off' ) {  
         $stayOnPage=1;          $stayOnPage=1;
     }      }
     my $output;      my $output;
Line 1064  sub top_nav_help { Line 1157  sub top_nav_help {
     my ($text) = @_;      my ($text) = @_;
     $text = &mt($text);      $text = &mt($text);
     my $stay_on_page =       my $stay_on_page = 
  ($env{'browser.interface'}  eq 'textual' ||   ($env{'environment.remote'} eq 'off' );
  $env{'environment.remote'} eq 'off' );  
     my $link = ($stay_on_page) ? "javascript:helpMenu('display')"      my $link = ($stay_on_page) ? "javascript:helpMenu('display')"
                      : "javascript:helpMenu('open')";                       : "javascript:helpMenu('open')";
     my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);      my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);
Line 1082  sub help_menu_js { Line 1174  sub help_menu_js {
     my ($text) = @_;      my ($text) = @_;
   
     my $stayOnPage =       my $stayOnPage = 
  ($env{'browser.interface'}  eq 'textual' ||   ($env{'environment.remote'} eq 'off' );
  $env{'environment.remote'} eq 'off' );  
   
     my $width = 620;      my $width = 620;
     my $height = 600;      my $height = 600;
Line 1142  sub help_open_bug { Line 1233  sub help_open_bug {
     unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; }      unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; }
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     if ($env{'browser.interface'} eq 'textual' ||      if ($env{'environment.remote'} eq 'off' ) {
  $env{'environment.remote'} eq 'off' ) {  
  $stayOnPage=1;   $stayOnPage=1;
     }      }
     $width = 600 if (not defined $width);      $width = 600 if (not defined $width);
Line 1187  sub help_open_faq { Line 1277  sub help_open_faq {
     unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; }      unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; }
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     if ($env{'browser.interface'} eq 'textual' ||      if ($env{'environment.remote'} eq 'off' ) {
  $env{'environment.remote'} eq 'off' ) {  
  $stayOnPage=1;   $stayOnPage=1;
     }      }
     $width = 350 if (not defined $width);      $width = 350 if (not defined $width);
Line 1398  sub resize_textarea_js { Line 1487  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 1436  function resize_textarea(textarea_id,bot Line 1526  function resize_textarea(textarea_id,bot
     }      }
     textarea.style.height=new_height+'px';      textarea.style.height=new_height+'px';
 }  }
   // ]]>
 </script>  </script>
 RESIZE  RESIZE
   
Line 1779  sub select_level_form { Line 1870  sub select_level_form {
   
 =pod  =pod
   
 =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit)  =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)
   
 Returns a string containing a <select name='$name' size='1'> form to   Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.    allow a user to select the domain to preform an operation in.  
Line 1790  selected"); Line 1881  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.
   
 If the $autosubmit flag is set, the form containing the domain selector will be auto-submitted by an onchange action.    The optional $onchange argumnet 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,$autosubmit) = @_;      my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;
     my $onchange;      if ($onchange) {
     if ($autosubmit) {          $onchange = ' onchange="'.$onchange.'"';
         $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 1859  sub home_server_form_item { Line 1949  sub home_server_form_item {
     if ($numlib > 1) {      if ($numlib > 1) {
         $result .= '<select name="'.$name.'" />'."\n";          $result .= '<select name="'.$name.'" />'."\n";
         if ($default) {          if ($default) {
             $result .= '<option value="default" selected>'.&mt('default').              $result .= '<option value="default" selected="selected">'.&mt('default').
                        '</option>'."\n";                         '</option>'."\n";
         }          }
         foreach my $hostid (sort(keys(%servers))) {          foreach my $hostid (sort(keys(%servers))) {
Line 2303  sub authform_internal{ Line 2393  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 2818  sub screenname { Line 2908  sub 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
   
 sub messagewrapper {  sub messagewrapper {
Line 2828  sub messagewrapper { Line 2938  sub messagewrapper {
  '&amp;subject='.&escape($subject).'&amp;text='.&escape($text).'" '.   '&amp;subject='.&escape($subject).'&amp;text='.&escape($text).'" '.
         'title="'.&mt('Send message').'">'.$link.'</a>';          'title="'.&mt('Send message').'">'.$link.'</a>';
 }  }
   
 # --------------------------------------------------------------- Notes Wrapper  # --------------------------------------------------------------- Notes Wrapper
   
 sub noteswrapper {  sub noteswrapper {
Line 2835  sub noteswrapper { Line 2946  sub noteswrapper {
     return       return 
 "<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";  "<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";
 }  }
   
 # ------------------------------------------------------------- Aboutme Wrapper  # ------------------------------------------------------------- Aboutme Wrapper
   
 sub aboutmewrapper {  sub aboutmewrapper {
Line 2848  sub aboutmewrapper { Line 2960  sub aboutmewrapper {
   
 # ------------------------------------------------------------ Syllabus Wrapper  # ------------------------------------------------------------ Syllabus Wrapper
   
   
 sub syllabuswrapper {  sub syllabuswrapper {
     my ($linktext,$coursedir,$domain)=@_;      my ($linktext,$coursedir,$domain)=@_;
     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) = @_;      my ($linktext,$sname,$sdom,$target,$start) = @_;
     my $link ="/adm/trackstudent?";      my $link ="/adm/trackstudent?";
Line 3735  sub blockcheck { Line 3848  sub blockcheck {
                  ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E}));                   ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E}));
         next if ($no_userblock);          next if ($no_userblock);
   
         # Retrieve blocking times and identity of blocker for course          # Retrieve blocking times and identity of locker for course
         # of specified user, unless user has 'evb' privilege.          # of specified user, unless user has 'evb' privilege.
                   
         my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum);          my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum);
Line 3800  sub parse_block_record { Line 3913  sub parse_block_record {
     return ($setuname,$setudom,$title,$blocks);      return ($setuname,$setudom,$title,$blocks);
 }  }
   
 sub build_block_table {  
     my ($startblock,$endblock,$setters) = @_;  
     my %lt = &Apache::lonlocal::texthash(  
         'cacb' => 'Currently active communication blocks',  
         'cour' => 'Course',  
         'dura' => 'Duration',  
         'blse' => 'Block set by'  
     );  
     my $output;  
     $output = '<br />'.$lt{'cacb'}.':<br />';  
     $output .= &start_data_table();  
     $output .= '  
 <tr>  
  <th>'.$lt{'cour'}.'</th>  
  <th>'.$lt{'dura'}.'</th>  
  <th>'.$lt{'blse'}.'</th>  
 </tr>  
 ';  
     foreach my $course (keys(%{$setters})) {  
         my %courseinfo=&Apache::lonnet::coursedescription($course);  
         for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {  
             my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};  
             my $fullname = &plainname($uname,$udom);  
             if (defined($env{'user.name'}) && defined($env{'user.domain'})  
                 && $env{'user.name'} ne 'public'   
                 && $env{'user.domain'} ne 'public') {  
                 $fullname = &aboutmewrapper($fullname,$uname,$udom);  
             }  
             my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};  
             $openblock = &Apache::lonlocal::locallocaltime($openblock);  
             $closeblock= &Apache::lonlocal::locallocaltime($closeblock);  
             $output .= &Apache::loncommon::start_data_table_row().  
                        '<td>'.$courseinfo{'description'}.'</td>'.  
                        '<td>'.$openblock.' to '.$closeblock.'</td>'.  
                        '<td>'.$fullname.'</td>'.  
                         &Apache::loncommon::end_data_table_row();  
         }  
     }  
     $output .= &end_data_table();  
 }  
   
 sub blocking_status {  sub blocking_status {
     my ($activity,$uname,$udom) = @_;    my $blocked;
     my %setters;    my ($activity,$uname,$udom) = @_;
     my ($blocked,$output,$ownitem,$is_course);    my %setters;
     my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);    my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
     if ($startblock && $endblock) {    if ($startblock && $endblock) {
         $blocked = 1;      $blocked = 1;
         if (wantarray) {    }
             my $category;    if(!wantarray) {
             if ($activity eq 'boards') {      return $blocked;
                 $category = 'Discussion posts in this course';    }
             } elsif ($activity eq 'blogs') {    my $output;
                 $category = 'Blogs';    my $querystring;
             } elsif ($activity eq 'port') {    $querystring = "?activity=$activity";
                 if (defined($uname) && defined($udom)) {  
                     if ($uname eq $env{'user.name'} &&        $output .= <<"END_MYBLOCK";
                         $udom eq $env{'user.domain'}) {  <script type="text/javascript">
                         $ownitem = 1;  // <![CDATA[
                     }      function openWindow(url, wdwName, w, h, toolbar,scrollbar) {
                 }          var options = "width=" + w + ",height=" + h + ",";
                 $is_course = &Apache::lonnet::is_course($udom,$uname);          options += "resizable=yes,scrollbars="+scrollbar+",status=no,";
                 if ($ownitem) {           options += "menubar=no,toolbar="+toolbar+",location=no,directories=no";
                     $category = 'Your portfolio files';            var newWin = window.open(url, wdwName, options);
                 } elsif ($is_course) {          newWin.focus();
                     my $coursedesc;  
                     foreach my $course (keys(%setters)) {  
                         my %courseinfo =  
                              &Apache::lonnet::coursedescription($course);  
                         $coursedesc = $courseinfo{'description'};  
                     }  
                     $category = "Group portfolio in the course '$coursedesc'";  
                 } else {  
                     $category = 'Portfolio files belonging to ';  
                     if ($env{'user.name'} eq 'public' &&   
                         $env{'user.domain'} eq 'public') {  
                         $category .= &plainname($uname,$udom);  
                     } else {  
                         $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);    
                     }  
                 }  
             } elsif ($activity eq 'groups') {  
                 $category = 'Groups in this course';  
             }  
             my $showstart = &Apache::lonlocal::locallocaltime($startblock);  
             my $showend = &Apache::lonlocal::locallocaltime($endblock);  
             $output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />';  
             if (!($activity eq 'port' && !($ownitem) && !($is_course))) {   
                 $output .= &build_block_table($startblock,$endblock,\%setters);  
             }  
         }  
     }  
     if (wantarray) {  
         return ($blocked,$output);  
     } else {  
         return $blocked;  
     }      }
   
   // ]]>
   </script>
   END_MYBLOCK
     my $popupUrl = "/adm/blockingstatus/$querystring";
     $output .= <<"END_BLOCK";
   <div class='LC_comblock'>
     <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring'
     title='Communication Blocked'>
     <img class='LC_noBorder LC_middle' title='Communication Blocked' src='/res/adm/pages/comblock.png' alt='Communication Blocked'/></a>
     <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring' 
     title='Communication Blocked'>Communication Blocked</a>
   </div>
   
   END_BLOCK
   
     return ($blocked, $output);
 }  }
   
 ###############################################  ###############################################
Line 4125  Returns: value of designparamter $which Line 4183  Returns: value of designparamter $which
 ##############################################  ##############################################
 sub designparm {  sub designparm {
     my ($which,$domain)=@_;      my ($which,$domain)=@_;
     if ($env{'browser.blackwhite'} eq 'on') {  
  if ($which=~/\.(font|alink|vlink|link|textcol)$/) {  
     return '#000000';  
  }  
  if ($which=~/\.(pgbg|sidebg|bgcol)$/) {  
     return '#FFFFFF';  
  }  
  if ($which=~/\.tabbg$/) {  
     return '#CCCCCC';  
  }  
     }  
     if (exists($env{'environment.color.'.$which})) {      if (exists($env{'environment.color.'.$which})) {
  return $env{'environment.color.'.$which};          return $env{'environment.color.'.$which};
     }      }
     $domain=&determinedomain($domain);      $domain=&determinedomain($domain);
     my %domdesign = &get_domainconf($domain);      my %domdesign = &get_domainconf($domain);
     my $output;      my $output;
     if ($domdesign{$domain.'.'.$which} ne '') {      if ($domdesign{$domain.'.'.$which} ne '') {
  $output = $domdesign{$domain.'.'.$which};          $output = $domdesign{$domain.'.'.$which};
     } else {      } else {
         $output = $defaultdesign{$which};          $output = $defaultdesign{$which};
     }      }
     if (($which =~ /^(student|coordinator|author|admin)\.img$/) ||      if (($which =~ /^(student|coordinator|author|admin)\.img$/) ||
         ($which =~ /login\.(img|logo|domlogo|login)/)) {          ($which =~ /login\.(img|logo|domlogo|login)/)) {
         if ($output =~ m{^/(adm|res)/}) {          if ($output =~ m{^/(adm|res)/}) {
     if ($output =~ m{^/res/}) {              if ($output =~ m{^/res/}) {
  my $local_name = &Apache::lonnet::filelocation('',$output);                  my $local_name = &Apache::lonnet::filelocation('',$output);
  &Apache::lonnet::repcopy($local_name);                  &Apache::lonnet::repcopy($local_name);
     }              }
             $output = &lonhttpdurl($output);              $output = &lonhttpdurl($output);
         }          }
     }      }
     return $output;      return $output;
 }  }
   
   ##############################################
   =pod
   
   =item * &authorspace()
   
   Inputs: ./.
   
   Returns: Path to the Construction Space of the current user's
            accessed author space
            The author space will be that of the current user
            when accessing the own author space
            and that of the co-author/assistent co-author
            when accessing the co-author's/assistent co-author's
            space
   
   =cut
   
   sub authorspace {
       my $caname = '';
       if ($env{'request.role'} =~ /^ca|^aa/) {
           (undef,$caname) =
               ($env{'request.role'}=~/($match_domain)\/($match_username)$/);
       } else {
           $caname = $env{'user.name'};
       }
       return '/priv/'.$caname.'/';
   }
   
   ##############################################
   =pod
   
   =item * &head_subbox()
   
   Inputs: $content (contains HTML code with page functions, etc.)
   
   Returns: HTML div with $content
            To be included in page header
   
   =cut
   
   sub head_subbox {
       my ($content)=@_;
       my $output =
           '<div id="LC_head_subbox">'
          .$content
          .'</div>'
   }
   
   ##############################################
   =pod
   
   =item * &CSTR_pageheader()
   
   Inputs: ./.
   
   Returns: HTML div with CSTR path and recent box
            To be included on Construction Space pages
   
   =cut
   
   sub CSTR_pageheader {
       # this is for resources; directories have customtitle, and crumbs
               # and select recent are created in lonpubdir.pm  
       my ($uname,$thisdisfn)=
           ($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);
       my $formaction='/priv/'.$uname.'/'.$thisdisfn;
       $formaction=~s/\/+/\//g;
   
       my $parentpath = '';
       my $lastitem = '';
       if ($thisdisfn =~ m-(.+/)([^/]*)$-) {
           $parentpath = $1;
           $lastitem = $2;
       } else {
           $lastitem = $thisdisfn;
       }
       return
            '<div>'
           .&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it?
           .'<b>'.&mt('Construction Space:').'</b> '
           .'<form name="dirs" method="post" action="'.$formaction
           .'" target="_top"><tt><b>' #FIXME lonpubdir: target="_parent"
           .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."$lastitem</b></tt><br />"
           #FIXME lonpubdir: &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."</b></tt><br />"
           .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
           .'</form>'
           .&Apache::lonmenu::constspaceform()
           .'</div>';
   }
   
 ###############################################  ###############################################
 ###############################################  ###############################################
   
Line 4192  Inputs: Line 4329  Inputs:
 =item * $forcereg, if page should register as content page (relevant for   =item * $forcereg, if page should register as content page (relevant for 
             text interface only)              text interface only)
   
 =item * $customtitle, alternate text to use instead of $title  =item * $no_nav_bar, if true, keep the 'what is this' info but remove the
                       in the title box that appears, this text                       navigational links
                       is not auto translated like the $title is  
   
 =item * $notopbar, if true, keep the 'what is this' info but remove the  
                    navigational links  
   
 =item * $bgcolor, used to override the bgcolor on a webpage to a specific value  =item * $bgcolor, used to override the bgcolor on a webpage to a specific value
   
 =item * $notitle, if true keep the nav controls, but remove the title bar  
   
 =item * $no_inline_link, if true and in remote mode, don't show the   =item * $no_inline_link, if true and in remote mode, don't show the 
          'Switch To Inline Menu' link           'Switch To Inline Menu' link
   
Line 4222  other decorations will be returned. Line 4353  other decorations will be returned.
 =cut  =cut
   
 sub bodytag {  sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle,      my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,
  $notopbar,$bgcolor,$notitle,$no_inline_link,$args)=@_;          $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_;
   
     if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }      if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }
   
Line 4232  sub bodytag { Line 4363  sub bodytag {
     my $font =   &designparm($function.'.font',$domain);      my $font =   &designparm($function.'.font',$domain);
     my $pgbg   = $bgcolor || &designparm($function.'.pgbg',$domain);      my $pgbg   = $bgcolor || &designparm($function.'.pgbg',$domain);
   
     my %design = ( 'style'   => 'margin-top: 0px',      my %design = ( 'style'   => 'margin-top: 0',
    'bgcolor' => $pgbg,     'bgcolor' => $pgbg,
    'text'    => $font,     'text'    => $font,
                    'alink'   => &designparm($function.'.alink',$domain),                     'alink'   => &designparm($function.'.alink',$domain),
Line 4268  sub bodytag { Line 4399  sub bodytag {
   
     if ($bodyonly) {      if ($bodyonly) {
         return $bodytag;          return $bodytag;
     } elsif ($env{'browser.interface'} eq 'textual') {      } 
 # Accessibility  
             
  $bodytag.=&Apache::lonmenu::menubuttons($forcereg,$forcereg);  
  if (!$notitle) {  
     $bodytag.='<h1>LON-CAPA: '.$title.'</h1>';  
  }  
  return $bodytag;  
     }  
   
     my $name = &plainname($env{'user.name'},$env{'user.domain'});      my $name = &plainname($env{'user.name'},$env{'user.domain'});
     if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {      if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
Line 4285  sub bodytag { Line 4408  sub bodytag {
  $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});   $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
     }      }
           
     my $roleinfo=(<<ENDROLE);  
 <td class="LC_title_bar_who">  
 <div class="LC_title_bar_name">  
     $name  
     &nbsp;  
 </div>  
 <div class="LC_title_bar_role">  
 $role&nbsp;  
 </div>  
 <div class="LC_title_bar_realm">  
 $realm&nbsp;  
 </div>  
 </td>  
 ENDROLE  
   
     my $titleinfo = '<h1>'.$title.'</h1>';      my $titleinfo = '<h1>'.$title.'</h1>';
     if ($customtitle) {  
         $titleinfo = $customtitle;  
     }  
     #      #
     # Extra info if you are the DC      # Extra info if you are the DC
     my $dc_info = '';      my $dc_info = '';
Line 4316  ENDROLE Line 4421  ENDROLE
         $dc_info = '('.$dc_info.')';          $dc_info = '('.$dc_info.')';
     }      }
   
     if (($env{'environment.remote'} eq 'off') || ($args->{'suppress_header_logos'})) {      $role = "($role)" if $role;
       &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
   
       if ($env{'environment.remote'} eq 'off') {
         # No Remote          # No Remote
  if ($env{'request.state'} eq 'construct') {   if ($env{'request.state'} eq 'construct') {
     $forcereg=1;      $forcereg=1;
  }   }
   
  if (!$customtitle && $env{'request.state'} eq 'construct') {  #    if ($env{'request.state'} eq 'construct') {
     # this is for resources; directories have customtitle, and crumbs  #        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
             # and select recent are created in lonpubdir.pm    #    }
     my ($uname,$thisdisfn)=  
  ($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);          my $titletable = '<table id="LC_title_bar">'
     my $formaction='/priv/'.$uname.'/'.$thisdisfn;                          ."<tr><td> $titleinfo $dc_info</td>"
     $formaction=~s/\/+/\//g;                          .'</tr></table>';
   
     my $parentpath = '';   if ($no_nav_bar) {
     my $lastitem = '';  
     if ($thisdisfn =~ m-(.+/)([^/]*)$-) {  
  $parentpath = $1;  
  $lastitem = $2;  
     } else {  
  $lastitem = $thisdisfn;  
     }  
     $titleinfo =   
  &Apache::loncommon::help_open_menu('','',3,'Authoring')  
  .'<b>'.&mt('Construction Space').'</b>:&nbsp;'  
  .'<form name="dirs" method="post" action="'.$formaction  
  .'" target="_top"><tt><b>'  
  .&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()')  
  .'</form>'  
  .&Apache::lonmenu::constspaceform();  
         }  
   
         my $titletable;  
  if (!$notitle) {  
     $titletable =  
  '<table id="LC_title_bar">'.  
                          "<tr><td> $titleinfo $dc_info</td>".$roleinfo.  
  '</tr></table>';  
  }  
  if ($notopbar) {  
     $bodytag .= $titletable;      $bodytag .= $titletable;
  } else {   } else {
           $bodytag .= qq|<div id="LC_nav_bar">$name $role<br />
               <em>$realm</em> $dc_info</div>| unless $env{'form.inhibitmenu'};
   
     if ($env{'request.state'} eq 'construct') {      if ($env{'request.state'} eq 'construct') {
                 $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg,                  $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$titletable);
   $titletable);  
             } else {              } else {
                 $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg).                  $bodytag .= &Apache::lonmenu::menubuttons($forcereg).$titletable;
     $titletable;  
             }              }
         }          }
         return $bodytag;          return $bodytag;
Line 4382  ENDROLE Line 4465  ENDROLE
   
     # Explicit link to get inline menu      # Explicit link to get inline menu
     my $menu= ($no_inline_link?''      my $menu= ($no_inline_link?''
        :'<br /><a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a>');         :'<a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a>');
       $bodytag .= qq|<div id="LC_nav_bar">$name $role
               <em>$realm</em> $dc_info </div>
               <ol class="LC_smallMenu LC_right">
                   <li>$menu</li>
               </ol>| unless $env{'form.inhibitmenu'};
     #      #
     if ($notitle) {  
  return $bodytag;  
     }  
     return(<<ENDBODY);      return(<<ENDBODY);
 $bodytag  $bodytag
 <table id="LC_title_bar" class="LC_with_remote">  <table id="LC_title_bar" class="LC_with_remote">
Line 4394  $bodytag Line 4479  $bodytag
     <td>$messages&nbsp;</td>      <td>$messages&nbsp;</td>
 </tr>  </tr>
 <tr><td>$titleinfo $dc_info $menu</td>  <tr><td>$titleinfo $dc_info $menu</td>
 $roleinfo  
 </tr>  </tr>
 </table>  </table>
 ENDBODY  ENDBODY
Line 4439  sub make_attr_string { Line 4523  sub make_attr_string {
  $attr_ref->{'style'}=$style.'; font-size: x-large;';   $attr_ref->{'style'}=$style.'; font-size: x-large;';
     }      }
   
     if ($env{'browser.blackwhite'} eq 'on') {  
  delete($attr_ref->{'font'});  
  delete($attr_ref->{'link'});  
  delete($attr_ref->{'alink'});  
  delete($attr_ref->{'vlink'});  
  delete($attr_ref->{'bgcolor'});  
  delete($attr_ref->{'background'});  
     }  
   
     my $attr_string;      my $attr_string;
     foreach my $attr (keys(%$attr_ref)) {      foreach my $attr (keys(%$attr_ref)) {
  $attr_string .= " $attr=\"".$attr_ref->{$attr}.'" ';   $attr_string .= " $attr=\"".$attr_ref->{$attr}.'" ';
Line 4508  sub standard_css { Line 4583  sub standard_css {
     my $img    = &designparm($function.'.img',   $domain);      my $img    = &designparm($function.'.img',   $domain);
     my $tabbg  = &designparm($function.'.tabbg', $domain);      my $tabbg  = &designparm($function.'.tabbg', $domain);
     my $font   = &designparm($function.'.font',  $domain);      my $font   = &designparm($function.'.font',  $domain);
       my $fontmenu = &designparm($function.'.fontmenu', $domain);
 #second colour for later usage  #second colour for later usage
     my $sidebg = &designparm($function.'.sidebg',$domain);      my $sidebg = &designparm($function.'.sidebg',$domain);
     my $pgbg_or_bgcolor =      my $pgbg_or_bgcolor =
Line 4524  sub standard_css { Line 4600  sub standard_css {
   
     my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';      my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';
     my $mono                 = 'monospace';      my $mono                 = 'monospace';
     my $data_table_head      = $tabbg;      my $data_table_head      = $sidebg;
     my $data_table_light     = '#EEEEEE';      my $data_table_light     = '#FAFAFA';
     my $data_table_dark      = '#DDDDDD';      my $data_table_dark      = '#F0F0F0';
     my $data_table_darker    = '#CCCCCC';      my $data_table_darker    = '#CCCCCC';
     my $data_table_highlight = '#FFFF00';      my $data_table_highlight = '#FFFF00';
     my $mail_new             = '#FFBB77';      my $mail_new             = '#FFBB77';
Line 4542  sub standard_css { Line 4618  sub standard_css {
     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'     ) ? '0px 2px 0px 2px'    $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'
                                                  : '0px 3px 0px 4px';                                                   : '0 3px 0 4px';
   
   
     return <<END;      return <<END;
Line 4563  a:focus { Line 4639  a:focus {
   background: yellow     background: yellow 
 }  }
   
 table.thinborder,  hr {
 table.thinborder tr th {    clear: both;
   border-style: solid;    color: $tabbg;
   border-width: 1px;    background-color: $tabbg;
   border-color: $lg_border_color;    height: 3px;
   background: $tabbg;    border: none;
 }  
   
 table.thinborder tr td {  
   border-style: solid;  
   border-width: 1px;  
   border-color: $lg_border_color;  
 }  }
   
 form, .inline {   form, .inline { 
Line 4622  form, .inline { Line 4692  form, .inline {
   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;
 }  }
   
 .LC_icon {  div.LC_confirm_box .LC_error img,
   border: none;  div.LC_confirm_box .LC_success img {
   vertical-align: middle;    vertical-align: middle;
 }  }
   
 .LC_indexer_icon {  .LC_icon {
   border: 0px;    border: none;
   height: 22px;    vertical-align: middle;
 }  }
   
 .LC_docs_spacer {  .LC_docs_spacer {
Line 4654  form, .inline { Line 4727  form, .inline {
   
 .LC_disc_action_links_bar {  .LC_disc_action_links_bar {
    background: $tabbg;     background: $tabbg;
    font-family: $sans;     border: none;
    border: 0px;  
    margin: 4px;     margin: 4px;
 }  }
   
Line 4691  table#LC_nav_location { Line 4763  table#LC_nav_location {
   background: $pgbg;    background: $pgbg;
   border: 2px;    border: 2px;
   border-collapse: separate;    border-collapse: separate;
   padding: 0px;    padding: 0;
   }
   
   table#LC_title_bar a {
     color: $fontmenu;
   }
   
   table#LC_title_bar {
     clear: both;
     display: none;
 }  }
   
 table#LC_title_bar,  table#LC_title_bar,
Line 4702  table#LC_title_bar.LC_with_remote { Line 4783  table#LC_title_bar.LC_with_remote {
   border-style: solid;    border-style: solid;
   border-width: $border;    border-width: $border;
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    color: $fontmenu;
   border-collapse: collapse;  
   padding: 0px;  
 }  
   
 table.LC_docs_path {  
   width: 100%;  
   border: 0;  
   background: $pgbg;  
   font-family: $sans;  
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0px;    padding: 0;
     margin: 0;
 }  }
   
 table#LC_title_bar td {  table#LC_title_bar td {
   background: $tabbg;    background: $tabbg;
 }  }
   
 table#LC_title_bar .LC_title_bar_who {  
   background: $tabbg;  
   color: $font;  
   font: small $sans;  
   text-align: right;  
   margin: 0px;  
 }  
   
 table#LC_title_bar .LC_title_bar_name {  
   margin: 0px;  
 }  
   
 table#LC_title_bar .LC_title_bar_role {  
   margin: 0px;  
 }  
   
 table#LC_title_bar .LC_title_bar_realm {  
   margin: 0px;  
 }  
   
 span.LC_metadata {  
   font-family: $sans;  
 }  
   
 table#LC_menubuttons img{  table#LC_menubuttons img{
   border: 0px;    border: none;
 }  }
   
 table#LC_top_nav td {  table#LC_top_nav td {
   background: $tabbg;    background: $tabbg;
   border: 0px;    border: none;
   font-size: small;    font-size: small;
   vertical-align:top;    vertical-align:top;
   padding:2px 5px 2px 5px;    padding:2px 5px 2px 5px;
Line 4759  table#LC_top_nav td { Line 4808  table#LC_top_nav td {
 table#LC_top_nav td a,  table#LC_top_nav td a,
 div#LC_top_nav a {  div#LC_top_nav a {
   color: $font;    color: $font;
   font-family: $sans;  
 }  }
   
 table#LC_top_nav td.LC_top_nav_logo {  table#LC_top_nav td.LC_top_nav_logo {
Line 4770  table#LC_top_nav td.LC_top_nav_logo { Line 4818  table#LC_top_nav td.LC_top_nav_logo {
 }  }
   
 table#LC_top_nav td.LC_top_nav_logo img {  table#LC_top_nav td.LC_top_nav_logo img {
   border: 0px;    border: none;
   vertical-align: bottom;    vertical-align: bottom;
 }  }
   
Line 4784  table#LC_top_nav td.LC_top_nav_login { Line 4832  table#LC_top_nav td.LC_top_nav_login {
   text-align: center;    text-align: center;
 }  }
   
 table.LC_breadcrumbs td,  .LC_breadcrumbs_component {
 table.LC_docs_path td  {      float: right;
   background: $tabbg;      margin: 0 1em;
   color: $font;  
   font-family: $sans;  
   font-size: smaller;  
 }  }
   .LC_breadcrumbs_component img {
 table.LC_breadcrumbs td.LC_breadcrumbs_component,      vertical-align: middle;
 table.LC_docs_path td.LC_docs_path_component {  
   background: $tabbg;  
   color: $font;  
   font-family: $sans;  
   font-size: larger;  
   text-align: right;  
 }  }
   
 td.LC_table_cell_checkbox {  td.LC_table_cell_checkbox {
Line 4813  table#LC_mainmenu td.LC_mainmenu_column Line 4852  table#LC_mainmenu td.LC_mainmenu_column
  font-size: 70%;   font-size: 70%;
 }  }
   
   #LC_breadcrumbs {
    clear:both;
    background: $sidebg;
    border-bottom: 1px solid $lg_border_color;
    line-height: 32px; 
    margin: 0;
    padding: 0;
   }
   
   /* Preliminary fix to hide breadcrumbs inside remote control window */
   #LC_remote #LC_breadcrumbs {
       display:none;
   }
   
   #LC_head_subbox {
    clear:both;
    background: #F8F8F8; /* $sidebg; */
    border-bottom: 1px solid $lg_border_color;
    margin: 0 0 10px 0;
    padding: 5px;
   }
   
 .LC_fontsize_medium {  .LC_fontsize_medium {
  font-size: 85%;   font-size: 85%;
 }  }
Line 4823  table#LC_mainmenu td.LC_mainmenu_column Line 4884  table#LC_mainmenu td.LC_mainmenu_column
   
 .LC_menubuttons_inline_text {  .LC_menubuttons_inline_text {
   color: $font;    color: $font;
   font-family: $sans;  
   font-size: 90%;    font-size: 90%;
   padding-left:3px;    padding-left:3px;
 }  }
Line 4835  table#LC_mainmenu td.LC_mainmenu_column Line 4895  table#LC_mainmenu td.LC_mainmenu_column
 .LC_menubuttons_category {  .LC_menubuttons_category {
   color: $font;    color: $font;
   background: $pgbg;    background: $pgbg;
   font-family: $sans;  
   font-size: larger;    font-size: larger;
   font-weight: bold;    font-weight: bold;
 }  }
Line 4845  td.LC_menubuttons_text { Line 4904  td.LC_menubuttons_text {
 }  }
   
 .LC_current_location {  .LC_current_location {
   font-family: $sans;  
   background: $tabbg;    background: $tabbg;
 }  }
   
 .LC_new_mail {  .LC_new_mail {
   font-family: $sans;  
   background: $tabbg;    background: $tabbg;
   font-weight: bold;    font-weight: bold;
 }  }
   
 .LC_dropadd_labeltext {  
   font-family: $sans;  
   text-align: right;  
 }  
   
 .LC_preferences_labeltext {  
   font-family: $sans;  
   text-align: right;  
 }  
   
 .LC_roleslog_note {  .LC_roleslog_note {
   font-size: small;    font-size: small;
 }  }
   
 .LC_mail_functions {  
     font-weight: bold;  
 }  
   
 table.LC_aboutme_port {  
   border: 0px;  
   border-collapse: collapse;  
   border-spacing: 0px;  
 }  
   
 table.LC_data_table,  table.LC_data_table,
 table.LC_mail_list {  table.LC_mail_list {
   border: 1px solid #000000;    border: 1px solid #000000;
Line 4894  table.LC_mail_list { Line 4931  table.LC_mail_list {
 table.LC_nested_outer {  table.LC_nested_outer {
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0px;    border-spacing: 0;
   width: 100%;    width: 100%;
 }  }
   
 table.LC_nested {  table.LC_nested {
   border: 0px;    border: none;
   border-collapse: collapse;    border-collapse: collapse;
   border-spacing: 0px;    border-spacing: 0;
   width: 100%;    width: 100%;
 }  }
   
Line 4911  table.LC_mail_list tr th, Line 4948  table.LC_mail_list tr th,
 table.LC_prior_tries tr th {  table.LC_prior_tries tr th {
   font-weight: bold;    font-weight: bold;
   background-color: $data_table_head;    background-color: $data_table_head;
     color:$fontmenu;
   font-size:90%;    font-size:90%;
 }  }
   
Line 4921  table.LC_data_table tr.LC_info_row > td Line 4959  table.LC_data_table tr.LC_info_row > td
 }  }
   
 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_pick_box tr > td.LC_odd_row {
 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_pick_box tr > td.LC_even_row {
 table.LC_aboutme_port tr.LC_even_row td {  
   background-color: $data_table_dark;    background-color: $data_table_dark;
   padding: 2px;    padding: 2px;
 }  }
Line 4958  table.LC_nested tr.LC_empty_row td { Line 4994  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;
     color:$fontmenu;
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: small;    font-size: small;
   border-bottom: 1px solid #000000;    border-bottom: 1px solid #000000;
Line 5126  span.LC_current_location { Line 5163  span.LC_current_location {
   
 span.LC_parm_menu_item {  span.LC_parm_menu_item {
   font-size: larger;    font-size: larger;
   font-family: $sans;  
 }  }
   
 span.LC_parm_scope_all {  span.LC_parm_scope_all {
Line 5174  table.LC_parm_overview_restrictions th { Line 5210  table.LC_parm_overview_restrictions th {
 }  }
   
 table#LC_helpmenu {  table#LC_helpmenu {
   border: 0px;    border: none;
   height: 55px;    height: 55px;
   border-spacing: 0px;    border-spacing: 0;
 }  }
   
 table#LC_helpmenu fieldset legend {  table#LC_helpmenu fieldset legend {
   font-size: larger;    font-size: larger;
   font-weight: bold;  
 }  }
   
 table#LC_helpmenu_links {  table#LC_helpmenu_links {
   width: 100%;    width: 100%;
   border: 1px solid black;    border: 1px solid black;
   background: $pgbg;    background: $pgbg;
   padding: 0px;    padding: 0;
   border-spacing: 1px;    border-spacing: 1px;
 }  }
   
Line 5234  table.LC_pick_box { Line 5269  table.LC_pick_box {
 }  }
   
 table.LC_pick_box td.LC_pick_box_title {  table.LC_pick_box td.LC_pick_box_title {
   background: $tabbg;    background: $sidebg;
   font-weight: bold;    font-weight: bold;
   text-align: right;    text-align: right;
   vertical-align: top;    vertical-align: top;
Line 5242  table.LC_pick_box td.LC_pick_box_title { Line 5277  table.LC_pick_box td.LC_pick_box_title {
   padding: 8px;    padding: 8px;
 }  }
   
 table.LC_pick_box td.LC_selfenroll_pick_box_title {  
   background: $tabbg;  
   font-weight: bold;  
   text-align: right;  
   width: 350px;  
   padding: 8px;  
 }  
   
 table.LC_pick_box td.LC_pick_box_value {  table.LC_pick_box td.LC_pick_box_value {
   text-align: left;    text-align: left;
   padding: 8px;    padding: 8px;
Line 5261  table.LC_pick_box td.LC_pick_box_select Line 5288  table.LC_pick_box td.LC_pick_box_select
 }  }
   
 table.LC_pick_box td.LC_pick_box_separator {  table.LC_pick_box td.LC_pick_box_separator {
   padding: 0px;    padding: 0;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
Line 5311  table.LC_helpform_receipt td.LC_oddrow_v Line 5338  table.LC_helpform_receipt td.LC_oddrow_v
 }  }
   
 table.LC_helpform_receipt td.LC_pick_box_separator {  table.LC_helpform_receipt td.LC_pick_box_separator {
   padding: 0px;    padding: 0;
   height: 1px;    height: 1px;
   background: black;    background: black;
 }  }
Line 5351  table.LC_group_priv_box td.LC_groups_fun Line 5378  table.LC_group_priv_box td.LC_groups_fun
   
 table.LC_group_priv td {  table.LC_group_priv td {
   text-align: left;    text-align: left;
   padding: 0px;    padding: 0;
 }  }
   
 table.LC_notify_front_page {  table.LC_notify_front_page {
Line 5369  table.LC_notify_front_page td { Line 5396  table.LC_notify_front_page td {
 }  }
   
 .LC_topic_bar {  .LC_topic_bar {
   font-family: $sans;  
   font-weight: bold;    font-weight: bold;
   width: 100%;    width: 100%;
   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 {
Line 5395  table.LC_status_selector td { Line 5422  table.LC_status_selector td {
   padding: 4px;    padding: 4px;
 }  }
   
 table.LC_descriptive_input td.LC_description {  
   vertical-align: top;  
   text-align: right;  
   font-weight: bold;  
 }  
   
 div.LC_feedback_link {  div.LC_feedback_link {
   clear: both;    clear: both;
   background: white;    background: $sidebg;
   width: 100%;    width: 100%;
     padding-bottom: 10px;
     border: 1px $tabbg solid;
     height: 22px;
     line-height: 22px;
     padding-top: 5px;
   }
   
   div.LC_feedback_link img {
     height: 22px;
     vertical-align:middle;
   }
   
   div.LC_feedback_link a{
     text-decoration: none;
   }
   
   div.LC_comblock {
     display:inline; 
     color:$font;
     font-size:90%;
   }
   
   div.LC_feedback_link div.LC_comblock {
     padding-left:5px;
   }
   
   div.LC_feedback_link div.LC_comblock a {
     color:$font;
 }  }
   
 span.LC_feedback_link {  span.LC_feedback_link {
   background: $feedback_link_bg;    /* background: $feedback_link_bg; */
   font-size: larger;    font-size: larger;
 }  }
   
 span.LC_message_link {  span.LC_message_link {
   background: $feedback_link_bg;    /* background: $feedback_link_bg; */
   font-size: larger;    font-size: larger;
   position: absolute;    position: absolute;
   right: 1em;    right: 1em;
Line 5431  table.LC_prior_tries td { Line 5480  table.LC_prior_tries td {
   
 .LC_answer_correct {  .LC_answer_correct {
   background: lightgreen;    background: lightgreen;
   font-family: $sans;  
   color: darkgreen;    color: darkgreen;
   padding: 6px;    padding: 6px;
 }  }
   
 .LC_answer_charged_try {  .LC_answer_charged_try {
   background: lightred;    background: #FFAAAA;
   font-family: $sans;  
   color: darkred;    color: darkred;
   padding: 6px;    padding: 6px;
 }  }
Line 5447  table.LC_prior_tries td { Line 5494  table.LC_prior_tries td {
 .LC_answer_no_grade,  .LC_answer_no_grade,
 .LC_answer_late {  .LC_answer_late {
   background: lightyellow;    background: lightyellow;
   font-family: $sans;  
   color: black;    color: black;
   padding: 6px;    padding: 6px;
 }  }
   
 .LC_answer_previous {  .LC_answer_previous {
   background: lightblue;    background: lightblue;
   font-family: $sans;  
   color: darkblue;    color: darkblue;
   padding: 6px;    padding: 6px;
 }  }
   
 .LC_answer_no_message {  .LC_answer_no_message {
   background: #FFFFFF;    background: #FFFFFF;
   font-family: $sans;  
   color: black;    color: black;
   padding: 6px;    padding: 6px;
 }  }
   
 .LC_answer_unknown {  .LC_answer_unknown {
   background: orange;    background: orange;
   font-family: $sans;  
   color: black;    color: black;
   padding: 6px;    padding: 6px;
 }  }
Line 5503  table.LC_prior_match tr td { Line 5546  table.LC_prior_match tr td {
   border: 1px solid #000000;    border: 1px solid #000000;
 }  }
   
 td.LC_nobreak,  .LC_nobreak {
 span.LC_nobreak {  
   white-space: nowrap;    white-space: nowrap;
 }  }
   
Line 5519  span.LC_cusr_subheading { Line 5561  span.LC_cusr_subheading {
   
 table.LC_docs_documents {  table.LC_docs_documents {
   background: #BBBBBB;    background: #BBBBBB;
   border-width: 0px;    border-width: 0;
   border-collapse: collapse;    border-collapse: collapse;
 }  }
   
Line 5528  table.LC_docs_documents td.LC_docs_docum Line 5570  table.LC_docs_documents td.LC_docs_docum
   padding: 4px;    padding: 4px;
 }  }
   
 .LC_docs_entry_move {  div.LC_docs_entry_move {
   border: 0px;    border: 1px solid #BBBBBB;
   border-collapse: collapse;  
 }  
   
 .LC_docs_entry_move td {  
   border: 2px solid #BBBBBB;  
   background: #DDDDDD;    background: #DDDDDD;
     width: 22px;
     padding: 1px;
     margin: 0;
 }  }
   
 .LC_docs_editor td.LC_docs_entry_commands {  table.LC_data_table tr > td.LC_docs_entry_commands,
   table.LC_data_table tr > td.LC_docs_entry_parameter {
   background: #DDDDDD;    background: #DDDDDD;
   font-size: x-small;    font-size: x-small;
 }  }
   
   .LC_docs_entry_parameter {
     white-space: nowrap;
   }
   
 .LC_docs_copy {  .LC_docs_copy {
   color: #000099;    color: #000099;
 }  }
Line 5564  table.LC_docs_documents td.LC_docs_docum Line 5609  table.LC_docs_documents td.LC_docs_docum
   font-size: x-small;    font-size: x-small;
 }  }
   
 .LC_docs_editor td.LC_docs_entry_title,  
 .LC_docs_editor td.LC_docs_entry_icon {  
   background: #FFFFBB;  
 }  
   
 .LC_docs_editor td.LC_docs_entry_parameter {  
   background: #BBBBFF;  
   font-size: x-small;  
   white-space: nowrap;  
 }  
   
 table.LC_docs_adddocs td,  table.LC_docs_adddocs td,
 table.LC_docs_adddocs th {  table.LC_docs_adddocs th {
   border: 1px solid #BBBBBB;    border: 1px solid #BBBBBB;
Line 5591  table.LC_sty_end { Line 5625  table.LC_sty_end {
 }  }
   
 table.LC_double_column {  table.LC_double_column {
   border-width: 0px;    border-width: 0;
   border-collapse: collapse;    border-collapse: collapse;
   width: 100%;    width: 100%;
   padding: 2px;    padding: 2px;
Line 5611  table.LC_double_column tr td.LC_right_co Line 5645  table.LC_double_column tr td.LC_right_co
   vertical-align: top;    vertical-align: top;
 }  }
   
 span.LC_role_level {  
   font-weight: bold;  
 }  
   
 div.LC_left_float {  div.LC_left_float {
   float: left;    float: left;
   padding-right: 5%;    padding-right: 5%;
Line 5706  div.LC_edit_problem_editxml_header div { Line 5736  div.LC_edit_problem_editxml_header div {
   margin-top: 5px;    margin-top: 5px;
 }  }
   
 div.LC_edit_problem_header_edit_row {  
   background: $tabbg;  
   padding: 3px;  
   margin-bottom: 5px;  
 }  
   
 div.LC_edit_problem_header_title {  div.LC_edit_problem_header_title {
   font-weight: bold;    font-weight: bold;
   font-size: larger;    font-size: larger;
Line 5728  table.LC_edit_problem_header_title { Line 5752  table.LC_edit_problem_header_title {
   border-width: $border;    border-width: $border;
   background: $tabbg;    background: $tabbg;
   border-collapse: collapse;    border-collapse: collapse;
   padding: 0px    padding: 0;
 }  }
   
 div.LC_edit_problem_discards {  div.LC_edit_problem_discards {
Line 5741  div.LC_edit_problem_saves { Line 5765  div.LC_edit_problem_saves {
   padding-bottom: 5px;    padding-bottom: 5px;
 }  }
   
 hr.LC_edit_problem_divide {  
   clear: both;  
   color: $tabbg;  
   background-color: $tabbg;  
   height: 3px;  
   border: 0px;  
 }  
   
 img.stift{  img.stift{
   border-width:0;    border-width: 0;
   vertical-align:middle;    vertical-align: middle;
 }  }
   
 table#LC_mainmenu{  table#LC_mainmenu{
Line 5767  table#LC_mainmenu td.LC_mainmenu_col_fie Line 5783  table#LC_mainmenu td.LC_mainmenu_col_fie
 .LC_mainmenu_fieldset_category {  .LC_mainmenu_fieldset_category {
   color: $font;    color: $font;
   background: $pgbg;    background: $pgbg;
   font-family: $sans;  
   font-size: small;    font-size: small;
   font-weight: bold;    font-weight: bold;
 }  }
Line 5795  ul.LC_TabContent   li:hover a { Line 5810  ul.LC_TabContent   li:hover a {
 }  }
   
 h1 {  h1 {
  padding:5px 10px 5px 20px;   padding: 0;
  line-height:130%;   line-height:130%;
 }  }
   
 h2,h3,h4,h5,h6 {  h2,h3,h4,h5,h6 {
  margin:5px 0px 5px 0px;   margin: 5px 0 5px 0;
  padding:0px;   padding: 0;
  line-height:130%;   line-height:130%;
 }  }
   
 .LC_hcell {  .LC_hcell {
         padding:3px 15px 3px 15px;          padding:3px 15px 3px 15px;
         margin:0px;          margin: 0;
  background-color:$tabbg;   background-color:$tabbg;
    color:$fontmenu;
  border-bottom:solid 1px $lg_border_color;   border-bottom:solid 1px $lg_border_color;
 }  }
   
 .LC_noBorder {  .LC_Box > .LC_hcell {
         border:0px;      margin: 0 -10px 10px -10px;
 }  }
   
   .LC_noBorder {
 /* Main Header with discription of Person, Course, etc. */          border: 0;
   }
   
 .LC_Right {  .LC_Right {
         float: right;          float: right;
         margin: 0px;          margin: 0;
         padding: 0px;          padding: 0;
 }  }
   
 .LC_FormSectionClearButton input {  .LC_FormSectionClearButton input {
         background-color:transparent;          background-color:transparent;
         border:0px;          border: none;
         cursor:pointer;          cursor:pointer;
         text-decoration:underline;          text-decoration:underline;
 }  }
Line 5843  h2,h3,h4,h5,h6 { Line 5860  h2,h3,h4,h5,h6 {
 }  }
   
 dl,ul,div,fieldset {  dl,ul,div,fieldset {
  margin: 10px 10px 10px 0px;   margin: 10px 10px 10px 0;
  overflow:hidden;  /* overflow: hidden; */
   }
   
   fieldset > legend {
       font-weight: bold;
       padding: 0 5px 0 5px;
   }
   
   #LC_nav_bar {
       float: left;
       margin: 0.2em 0 0 0;
   }
   
   #LC_nav_bar em{
       font-weight: bold;
       font-style: normal;
   }
   
   ol.LC_smallMenu {
       float: right;
       margin: 0.2em 0 0 0;
 }  }
   
 ol.LC_smallMenu, ol#LC_PathBreadcrumbs {  ol#LC_PathBreadcrumbs {
  margin: 0px;   margin: 0;
 }  }
   
 ol.LC_smallMenu li {  ol.LC_smallMenu li {
  display: inline;   display: inline;
  padding: 5px 5px 0px 10px;   padding: 5px 5px 0 10px;
  vertical-align: top;   vertical-align: top;
 }  }
   
Line 5867  ol.LC_smallMenu a { Line 5904  ol.LC_smallMenu a {
  text-decoration: none;   text-decoration: none;
 }  }
   
 ol#LC_TabMainMenuContent,   ul#LC_TabMainMenuContent {
 ul.LC_TabContent ,      clear: both;
 ul.LC_TabContentBigger {      color: $fontmenu;
       background: $tabbg;
       list-style: none;
       padding: 0;
       margin: 0;
       width: 100%;
   }
   
   ul#LC_TabMainMenuContent li {
       font-weight: bold;
       line-height: 1.8em;
       padding: 0 0.8em; 
       border-right: 1px solid black;
       display: inline;
       vertical-align: middle;
   }
   
   ul.LC_TabContent {
  display:block;   display:block;
    background: $sidebg;
    border-bottom: solid 1px $lg_border_color;
  list-style:none;   list-style:none;
  margin: 0px;   margin: 0 -10px;
  padding: 0px;   padding: 0;
 }  }
   
 ol#LC_TabMainMenuContent li,  
 ul.LC_TabContent li,  ul.LC_TabContent li,
 ul.LC_TabContentBigger li {  ul.LC_TabContentBigger li {
  display: inline;  
  border-right: solid 1px $lg_border_color;  
  float:left;   float:left;
  line-height:140%;  
  white-space:nowrap;  
 }  }
   
 ol#LC_TabMainMenuContent li {  ul#LC_TabMainMenuContent li a {
  vertical-align: bottom;      color: $fontmenu;
  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;   text-decoration: none;
 }  }
   
 ul.LC_TabContent {  ul.LC_TabContent {
  min-height:1.6em;   min-height:1.5em;
 }  }
   
 ul.LC_TabContent li {  ul.LC_TabContent li {
  vertical-align:middle;   vertical-align:middle;
  padding:0px 10px 0px 10px;   padding: 0 10px 0 10px;
  background-color:$tabbg;   background-color:$tabbg;
  border-bottom:solid 1px $lg_border_color;   border-bottom:solid 1px $lg_border_color;
 }  }
   
   ul.LC_TabContent .right {
    float:right;
   }
   
 ul.LC_TabContent li a, ul.LC_TabContent li {  ul.LC_TabContent li a, ul.LC_TabContent li {
  color:rgb(47,47,47);   color:rgb(47,47,47);
  text-decoration:none;   text-decoration:none;
Line 5922  ul.LC_TabContent li a, ul.LC_TabContent Line 5967  ul.LC_TabContent li a, ul.LC_TabContent
   
 ul.LC_TabContent li:hover, ul.LC_TabContent li.active {  ul.LC_TabContent li:hover, ul.LC_TabContent li.active {
         background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center;          background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center;
  border-bottom:solid 1px #FFFFFF;   border-bottom:solid 2px #FFFFFF;
  padding-right: 16px;   padding-right: 16px;
 }  }
   
 ul.LC_TabContentBigger li {  #maincoursedoc {
  vertical-align:bottom;   clear:both;
  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 {
 ul.LC_TabContentBigger li.active {          display:block;
  background:url(/adm/lonIcons/lightGreyBG.png) repeat-x right bottom;          list-style:none;
           padding: 0;
   }
   
   ul.LC_TabContentBigger li {
           vertical-align:bottom;
           height: 30px;
           font-size:110%;
           font-weight:bold;
           color: #737373;
 }  }
   
 ul.LC_TabContentBigger li,   
 ul.LC_TabContentBigger li a {  ul.LC_TabContentBigger li a {
  font-size:110%;          background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat;
  font-weight:bold;   height: 30px;
    line-height: 30px;
    text-align: center;
    display: block;
    text-decoration: none;
 }  }
   
 ol#LC_MenuBreadcrumbs,   ul.LC_TabContentBigger li:hover a, 
 ol#LC_PathBreadcrumbs,   ul.LC_TabContentBigger li.active a {
    background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat;
    color:$font;
    text-decoration: underline;
   }
   
   
   ul.LC_TabContentBigger li b {
    background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom;
    display: block;
    float: left;
    padding: 0 30px;
   }
   
   ul.LC_TabContentBigger li:hover b,
   ul.LC_TabContentBigger li.active b {
           background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;
           color:$font;
    border-bottom: 1px solid #FFFFFF;
   }
   
   
 ul.LC_CourseBreadcrumbs {  ul.LC_CourseBreadcrumbs {
  border-top: solid 1px RGB(255, 255, 255);    background: $sidebg;
  height: 20px;    line-height: 32px;
  line-height: 20px;    padding-left: 10px;
  vertical-align: bottom;    margin: 0 0 10px 0;
  margin: 0px 0px 30px 0px;    list-style-position: inside;
   
   }
   
   ol#LC_MenuBreadcrumbs, 
   ol#LC_PathBreadcrumbs {
  padding-left: 10px;   padding-left: 10px;
    margin: 0;
  list-style-position: inside;   list-style-position: inside;
  background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;  
 }  }
   
 ol#LC_MenuBreadcrumbs li,   ol#LC_MenuBreadcrumbs li, 
 ol#LC_PathBreadcrumbs li,   ol#LC_PathBreadcrumbs li, 
 ul.LC_CourseBreadcrumbs li {  ul.LC_CourseBreadcrumbs li {
 /*      display: inline;
  background: url(/adm/lonIcons/arrow_white.png) no-repeat left center;      white-space: nowrap;
 */  
  display: inline;  
  padding: 0px 0px 0px 10px;  
 /* vertical-align: bottom; */  
  overflow:hidden;  
 }  }
   
 ol#LC_MenuBreadcrumbs li a, ul.LC_CourseBreadcrumbs li a {  ol#LC_MenuBreadcrumbs li a,
   ul.LC_CourseBreadcrumbs li a {
  text-decoration: none;   text-decoration: none;
  font-size:90%;   font-size:90%;
 }  }
Line 5982  ol#LC_PathBreadcrumbs li a { Line 6057  ol#LC_PathBreadcrumbs li a {
  font-weight:bold;   font-weight:bold;
 }  }
   
 .LC_BoxPadding {  .LC_Box {
  padding: 10px;      border: solid 1px $lg_border_color;
 }      padding: 0 10px 10px 10px;
   
 .LC_ContentBoxSpecial {  
  border: solid 1px $lg_border_color;  
 }  
   
 .LC_ContentBoxSpecialContactInfo {  
  border: solid 1px $lg_border_color;  
  max-width:25%;  
  min-width:25%;  
 }  }
   
 .LC_AboutMe_Image {  .LC_AboutMe_Image {
Line 6023  dl.LC_ListStyleClean dd { Line 6089  dl.LC_ListStyleClean dd {
  list-style-position: inside;   list-style-position: inside;
  list-style-type: none;   list-style-type: none;
  overflow: hidden;   overflow: hidden;
  padding: 0px;   padding: 0;
 }  }
   
 .LC_ListStyleSimple li,  .LC_ListStyleSimple li,
Line 6032  dl.LC_ListStyleClean dd { Line 6098  dl.LC_ListStyleClean dd {
 .LC_ListStyleNormal dd,  .LC_ListStyleNormal dd,
 .LC_ListStyleSpecial li,  .LC_ListStyleSpecial li,
 .LC_ListStyleSpecial dd {  .LC_ListStyleSpecial dd {
  margin: 0px;   margin: 0;
  padding: 5px 5px 5px 10px;   padding: 5px 5px 5px 10px;
  clear: both;   clear: both;
 }  }
   
 .LC_ListStyleClean li,  .LC_ListStyleClean li,
 .LC_ListStyleClean dd {  .LC_ListStyleClean dd {
  padding-top: 0px;   padding-top: 0;
  padding-bottom: 0px;   padding-bottom: 0;
 }  }
   
 .LC_ListStyleSimple dd,  .LC_ListStyleSimple dd,
Line 6061  table.LC_SimpleTable { Line 6127  table.LC_SimpleTable {
 }  }
   
 table.LC_SimpleTable tr {  table.LC_SimpleTable tr {
  padding:0px;   padding: 0;
  border:solid 1px $lg_border_color;   border:solid 1px $lg_border_color;
 }  }
   
Line 6073  div.LC_columnSection { Line 6139  div.LC_columnSection {
  display: block;   display: block;
  clear: both;   clear: both;
  overflow: hidden;   overflow: hidden;
  margin:0px;   margin: 0;
 }  }
   
 div.LC_columnSection>* {  div.LC_columnSection>* {
  float: left;   float: left;
  margin: 10px 20px 10px 0px;   margin: 10px 20px 10px 0;
  overflow:hidden;   overflow:hidden;
 }  }
   
 .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 {  .LC_loginpage_container {
  text-align:left;   text-align:left;
  margin : 0 auto;   margin : 0 auto;
Line 6122  div.LC_columnSection > .ContentBoxSpecia Line 6168  div.LC_columnSection > .ContentBoxSpecia
 }  }
   
 .LC_loginpage_loginContainer h2 {  .LC_loginpage_loginContainer h2 {
  margin-top:0;   margin-top: 0;
  display:block;   display:block;
  background:$bgcol;   background:$bgcol;
  color:$textcol;   color:$textcol;
Line 6156  table em { Line 6202  table em {
 table.LC_tableBrowseRes,  table.LC_tableBrowseRes,
 table.LC_tableOfContent {  table.LC_tableOfContent {
         border:none;          border:none;
  border-spacing: 1;   border-spacing: 1px;
  padding: 3px;   padding: 3px;
  background-color: #FFFFFF;   background-color: #FFFFFF;
  font-size: 90%;   font-size: 90%;
Line 6221  ul#LC_toolbar li a:hover { Line 6267  ul#LC_toolbar li a:hover {
 }  }
   
 ul#LC_toolbar {  ul#LC_toolbar {
  padding:0;   padding: 0;
  margin: 2px;   margin: 2px;
  list-style:none;   list-style:none;
  position:relative;   position:relative;
Line 6230  ul#LC_toolbar { Line 6276  ul#LC_toolbar {
   
 ul#LC_toolbar li {  ul#LC_toolbar li {
  border:1px solid white;   border:1px solid white;
  padding:0;   padding: 0;
  margin: 0;   margin: 0;
         float: left;          float: left;
  display:inline;   display:inline;
Line 6240  ul#LC_toolbar li { Line 6286  ul#LC_toolbar li {
   
 a.LC_toolbarItem {  a.LC_toolbarItem {
  display:block;   display:block;
  padding:0;   padding: 0;
  margin:0;   margin: 0;
  height: 32px;   height: 32px;
  width: 32px;   width: 32px;
  color:white;   color:white;
  border:0 none;   border: none;
  background-repeat:no-repeat;   background-repeat:no-repeat;
  background-color:transparent;   background-color:transparent;
 }  }
   
 ul.LC_functionslist li {  ul.LC_funclist li {
   float: left;    float: left;
   white-space: nowrap;    white-space: nowrap;
   height: 35px; /* at least as high as heighest list item */    height: 35px; /* at least as high as heighest list item */
   margin: 0px 15px 15px 10px;    margin: 0 15px 15px 10px;
 }  }
   
   
Line 6385  sub xml_begin { Line 6431  sub xml_begin {
             .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" '               .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' 
     .'xmlns="http://www.w3.org/1999/xhtml">';      .'xmlns="http://www.w3.org/1999/xhtml">';
     } else {      } else {
  $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>';   $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
              .'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
     }      }
     return $output;      return $output;
 }  }
Line 6447  $args - additional optional args support Line 6494  $args - additional optional args support
   
              only_body      -> is true will set &bodytag() onlybodytag               only_body      -> is true will set &bodytag() onlybodytag
                                     arg on                                      arg on
              no_nav_bar     -> is true will set &bodytag() notopbar arg on               no_nav_bar     -> is true will set &bodytag() no_nav_bar arg on
              add_entries    -> additional attributes to add to the  <body>               add_entries    -> additional attributes to add to the  <body>
              domain         -> force to color decorate a page for a                domain         -> force to color decorate a page for a 
                                     specific domain                                      specific domain
Line 6461  $args - additional optional args support Line 6508  $args - additional optional args support
                                     a html attribute                                      a html attribute
              force_register -> if is true will turn on the &bodytag()               force_register -> if is true will turn on the &bodytag()
                                     $forcereg arg                                      $forcereg arg
              body_title     -> alternate text to use instead of $title  
                                     in the title box that appears, this text  
                                     is not auto translated like the $title is  
              frameset       -> if true will start with a <frameset>               frameset       -> if true will start with a <frameset>
                                     rather than <body>                                      rather than <body>
              no_title       -> if true the title bar won't be shown  
              skip_phases    -> hash ref of                skip_phases    -> hash ref of 
                                     head -> skip the <html><head> generation                                      head -> skip the <html><head> generation
                                     body -> skip all <body> generation                                      body -> skip all <body> generation
Line 6476  $args - additional optional args support Line 6519  $args - additional optional args support
              inherit_jsmath -> when creating popup window in a page,               inherit_jsmath -> when creating popup window in a page,
                                     should it have jsmath forced on by the                                      should it have jsmath forced on by the
                                     current page                                      current page
                bread_crumbs ->             Array containing breadcrumbs
                bread_crumbs_components ->  if exists show it as headline else show only the breadcrumbs
   
 =back  =back
   
Line 6508  sub start_page { Line 6553  sub start_page {
     my $attr_string = &make_attr_string($args->{'force_register'},      my $attr_string = &make_attr_string($args->{'force_register'},
  $args->{'add_entries'});   $args->{'add_entries'});
     $result .= "\n<frameset $attr_string>\n";      $result .= "\n<frameset $attr_string>\n";
  } else {          } else {
     $result .=              $result .=
  &bodytag($title,                   &bodytag($title, 
  $args->{'function'},       $args->{'add_entries'},                           $args->{'function'},       $args->{'add_entries'},
  $args->{'only_body'},      $args->{'domain'},                           $args->{'only_body'},      $args->{'domain'},
  $args->{'force_register'}, $args->{'body_title'},                           $args->{'force_register'}, $args->{'no_nav_bar'},
  $args->{'no_nav_bar'},     $args->{'bgcolor'},                           $args->{'bgcolor'},        $args->{'no_inline_link'},
  $args->{'no_title'},       $args->{'no_inline_link'},                           $args);
  $args);          }
  }  
     }      }
   
     if ($args->{'js_ready'}) {      if ($args->{'js_ready'}) {
Line 6527  sub start_page { Line 6571  sub start_page {
  $result = &html_encode($result);   $result = &html_encode($result);
     }      }
   
  #Breadcrumbs      # Preparation for new and consistent functionlist at top of screen
       # if ($args->{'functionlist'}) {
       #            $result .= &build_functionlist();
       #}
   
       # Don't add anything more if only_body wanted
       return $result if $args->{'only_body'};
   
       #Breadcrumbs
     if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {      if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
  &Apache::lonhtmlcommon::clear_breadcrumbs();   &Apache::lonhtmlcommon::clear_breadcrumbs();
  #if any br links exists, add them to the breadcrumbs   #if any br links exists, add them to the breadcrumbs
Line 6771  Returns either 'student','coordinator',' Line 6823  Returns either 'student','coordinator','
   
 ###############################################  ###############################################
 sub get_users_function {  sub get_users_function {
     my $function = 'student';      my $function = 'norole';
       if ($env{'request.role'}=~/^(st)/) {
           $function='student';
       }
     if ($env{'request.role'}=~/^(cc|in|ta|ep)/) {      if ($env{'request.role'}=~/^(cc|in|ta|ep)/) {
         $function='coordinator';          $function='coordinator';
     }      }
     if ($env{'request.role'}=~/^(su|dc|ad|li)/) {      if ($env{'request.role'}=~/^(su|dc|ad|li)/) {
         $function='admin';          $function='admin';
     }      }
     if (($env{'request.role'}=~/^(au|ca)/) ||      if (($env{'request.role'}=~/^(au|ca|aa)/) ||
         ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {          ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
         $function='author';          $function='author';
     }      }
Line 6789  sub get_users_function { Line 6844  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 7485  sub user_picker { Line 7572  sub user_picker {
                 if ($cancreate) {                  if ($cancreate) {
                     $new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>';                      $new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>';
                 } else {                  } else {
                     my $helplink = ' href="javascript:helpMenu('."'display'".')"';                      my $helplink = 'javascript:helpMenu('."'display'".')';
                     my %usertypetext = (                      my %usertypetext = (
                         official   => 'institutional',                          official   => 'institutional',
                         unofficial => 'non-institutional',                          unofficial => 'non-institutional',
                     );                      );
                     $new_user_create = '<br /><span class="LC_warning">'.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.").' '.&mt('Contact the <a[_1]>helpdesk</a> for assistance.',$helplink).'</span><br /><br />';                      $new_user_create = '<p class="LC_warning">'
                                         .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")
                                         .' '
                                         .&mt('Please contact the [_1]helpdesk[_2] for assistance.'
                                             ,'<a href="'.$helplink.'">','</a>')
                                         .'</p><br />';
                 }                  }
             }              }
         }          }
Line 7527  ENDSCRIPT Line 7619  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 7595  function validateEntry(callingForm) { Line 7688  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 8489  sub csv_print_samples { Line 8579  sub csv_print_samples {
     $r->print(&mt('Samples').'<br />'.&start_data_table().      $r->print(&mt('Samples').'<br />'.&start_data_table().
               &start_data_table_header_row());                &start_data_table_header_row());
     foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {       foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) { 
         $r->print('<th>'.&mt('Column&nbsp;[_1]',($sample+1)).'</th>'); }          $r->print('<th>'.&mt('Column [_1]',($sample+1)).'</th>'); }
     $r->print(&end_data_table_header_row());      $r->print(&end_data_table_header_row());
     foreach my $hash (@$samples) {      foreach my $hash (@$samples) {
  $r->print(&start_data_table_row());   $r->print(&start_data_table_row());
Line 8533  sub csv_print_select_table { Line 8623  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 10138  sub group_term { Line 10228  sub group_term {
     my $crstype = &course_type();      my $crstype = &course_type();
     my %names = (      my %names = (
                   'Course' => 'group',                    'Course' => 'group',
                   'Group' => 'team',                    'Community' => 'group',
                 );                  );
     return $names{$crstype};      return $names{$crstype};
 }  }
Line 10202  sub escape_url { Line 10292  sub escape_url {
     return join('/',@urlslices).'/'.$lastitem;      return join('/',@urlslices).'/'.$lastitem;
 }  }
   
 # -------------------------------------------------------- Initliaze user login  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;
   }
   
   # -------------------------------------------------------- Initialize user login
 sub init_user_environment {  sub init_user_environment {
     my ($r, $username, $domain, $authhost, $form, $args) = @_;      my ($r, $username, $domain, $authhost, $form, $args) = @_;
     my $lonids=$Apache::lonnet::perlvar{'lonIDsDir'};      my $lonids=$Apache::lonnet::perlvar{'lonIDsDir'};
Line 10256  sub init_user_environment { Line 10362  sub init_user_environment {
     my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,      my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,
         $clientunicode,$clientos) = &decode_user_agent($r);          $clientunicode,$clientos) = &decode_user_agent($r);
   
 # -------------------------------------- Any accessibility options to remember?  
     if (($form->{'interface'}) && ($form->{'remember'} eq 'true')) {  
  foreach my $option ('imagesuppress','appletsuppress',  
     'embedsuppress','fontenhance','blackwhite') {  
     if ($form->{$option} eq 'true') {  
  &Apache::lonnet::put('environment',{$option => 'on'},  
      $domain,$username);  
     } else {  
  &Apache::lonnet::del('environment',[$option],  
      $domain,$username);  
     }  
  }  
     }  
 # ------------------------------------------------------------- Get environment  # ------------------------------------------------------------- Get environment
   
     my %userenv = &Apache::lonnet::dump('environment',$domain,$username);      my %userenv = &Apache::lonnet::dump('environment',$domain,$username);
Line 10286  sub init_user_environment { Line 10379  sub init_user_environment {
     if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }      if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }
   
 # --------------- Do not trust query string to be put directly into environment  # --------------- Do not trust query string to be put directly into environment
     foreach my $option ('imagesuppress','appletsuppress',      foreach my $option ('interface','localpath','localres') {
  'embedsuppress','fontenhance','blackwhite',          $form->{$option}=~s/[\n\r\=]//gs;
  'interface','localpath','localres') {  
  $form->{$option}=~s/[\n\r\=]//gs;  
     }      }
 # --------------------------------------------------------- Write first profile  # --------------------------------------------------------- Write first profile
   
Line 10323  sub init_user_environment { Line 10414  sub init_user_environment {
     $form->{'interface'}=~s/\W//gs;      $form->{'interface'}=~s/\W//gs;
     $initial_env{"browser.interface"} = $form->{'interface'};      $initial_env{"browser.interface"} = $form->{'interface'};
     $env{'browser.interface'}=$form->{'interface'};      $env{'browser.interface'}=$form->{'interface'};
     foreach my $option ('imagesuppress','appletsuppress',  
  'embedsuppress','fontenhance','blackwhite') {  
  if (($form->{$option} eq 'true') ||  
     ($userenv{$option} eq 'on')) {  
     $initial_env{"browser.$option"} = "on";  
  }  
     }  
  }   }
   
         foreach my $tool ('aboutme','blog','portfolio') {          foreach my $tool ('aboutme','blog','portfolio') {
Line 10337  sub init_user_environment { Line 10421  sub init_user_environment {
                 &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');                  &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
         }          }
   
         foreach my $crstype ('official','unofficial') {          foreach my $crstype ('official','unofficial','community') {
             $userenv{'canrequest.'.$crstype} =              $userenv{'canrequest.'.$crstype} =
                 &Apache::lonnet::usertools_access($username,$domain,$crstype,                  &Apache::lonnet::usertools_access($username,$domain,$crstype,
                                                   'reload','requestcourses');                                                    'reload','requestcourses');

Removed from v.1.796  
changed lines
  Added in v.1.876


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