Diff for /loncom/interface/loncommon.pm between versions 1.913 and 1.925.2.10

version 1.913, 2009/11/10 13:58:55 version 1.925.2.10, 2010/01/18 15:44:35
Line 1877  sub select_form { Line 1877  sub select_form {
         $selectform.=          $selectform.=
     '<option value="'.&HTML::Entities::encode($key,'"<>&').'" '.      '<option value="'.&HTML::Entities::encode($key,'"<>&').'" '.
             ($key eq $def ? 'selected="selected" ' : '').              ($key eq $def ? 'selected="selected" ' : '').
                 ">".&mt($hash{$key})."</option>\n";                  ">".$hash{$key}."</option>\n";
     }      }
     $selectform.="</select>";      $selectform.="</select>";
     return $selectform;      return $selectform;
Line 4367  sub CSTR_pageheader { Line 4367  sub CSTR_pageheader {
     } else {      } else {
         $lastitem = $thisdisfn;          $lastitem = $thisdisfn;
     }      }
     return  
       my $output =
          '<div>'           '<div>'
         .&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it?          .&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it?
         .'<b>'.&mt('Construction Space:').'</b> '          .'<b>'.&mt('Construction Space:').'</b> '
         .'<form name="dirs" method="post" action="'.$formaction          .'<form name="dirs" method="post" action="'.$formaction
         .'" target="_top"><tt><b>' #FIXME lonpubdir: target="_parent"          .'" target="_top">' #FIXME lonpubdir: target="_parent"
         .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."$lastitem</b></tt><br />"          .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv',undef,undef);
   
       if ($lastitem) {
           $output .=
                '<span class="LC_filename">'
               .$lastitem
               .'</span>';
       }
       $output .=
            '<br />'
         #FIXME lonpubdir: &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."</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()')          .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
         .'</form>'          .'</form>'
         .&Apache::lonmenu::constspaceform()          .&Apache::lonmenu::constspaceform()
         .'</div>';          .'</div>';
   
       return $output;
 }  }
   
 ###############################################  ###############################################
Line 4455  sub bodytag { Line 4467  sub bodytag {
    'link'    => &designparm($function.'.link',$domain),);     'link'    => &designparm($function.'.link',$domain),);
     @design{keys(%$addentries)} = @$addentries{keys(%$addentries)};       @design{keys(%$addentries)} = @$addentries{keys(%$addentries)}; 
   
       my $custommenu;
       if ($env{'environment.remote'} eq 'off') {
           $custommenu = &needs_gci_custom();
       }
  # role and realm   # role and realm
     my ($role,$realm) = split(/\./,$env{'request.role'},2);      my ($role,$realm) = split(/\./,$env{'request.role'},2);
     if ($role  eq 'ca') {      if ($role  eq 'ca') {
Line 4464  sub bodytag { Line 4480  sub bodytag {
 # realm  # realm
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         if ($env{'request.role'} !~ /^cr/) {          if ($env{'request.role'} !~ /^cr/) {
             $role = &Apache::lonnet::plaintext($role,&course_type());              if (($custommenu) && ($role eq 'cm')) {
                   undef($role);
               } else {
                   $role = &Apache::lonnet::plaintext($role,&course_type());
               }
         }          }
         if ($env{'request.course.sec'}) {          if ($env{'request.course.sec'}) {
             $role .= ('&nbsp;'x2).'-&nbsp;'.&mt('section:').'&nbsp;'.$env{'request.course.sec'};              $role .= ('&nbsp;'x2).'-&nbsp;'.&mt('section:').'&nbsp;'.$env{'request.course.sec'};
         }             }   
  $realm = $env{'course.'.$env{'request.course.id'}.'.description'};   $realm = $env{'course.'.$env{'request.course.id'}.'.description'};
     } else {      } else {
         $role = &Apache::lonnet::plaintext($role);          if (($custommenu) && ($role eq 'cm')) {
               undef($role);
           } else {
               $role = &Apache::lonnet::plaintext($role);
           }
     }      }
   
     if (!$realm) { $realm='&nbsp;'; }      if (!$realm) { $realm='&nbsp;'; }
Line 4503  sub bodytag { Line 4527  sub bodytag {
                         $env{'course.'.$env{'request.course.id'}.                          $env{'course.'.$env{'request.course.id'}.
                                  '.domain'}.'/'})) {                                   '.domain'}.'/'})) {
         my $cid = $env{'request.course.id'};          my $cid = $env{'request.course.id'};
         $dc_info.= $cid.' '.$env{'course.'.$cid.'.internal.coursecode'};          $dc_info = $cid.' '.$env{'course.'.$cid.'.internal.coursecode'};
         $dc_info =~ s/\s+$//;          $dc_info =~ s/\s+$//;
         $dc_info = '('.$dc_info.')';  
     }      }
   
     $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;      $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;
Line 4513  sub bodytag { Line 4536  sub bodytag {
   
     if ($env{'environment.remote'} eq 'off') {      if ($env{'environment.remote'} eq 'off') {
         # No Remote          # No Remote
         if ($no_nav_bar) { return $bodytag; }           if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { 
               return $bodytag; 
           } 
   
         if ($env{'request.state'} eq 'construct') { $forcereg=1; }          if ($env{'request.state'} eq 'construct') { $forcereg=1; }
   
Line 4521  sub bodytag { Line 4546  sub bodytag {
         #        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls          #        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
         #    }          #    }
   
         $bodytag .= qq|<div id="LC_nav_bar">$name $role<br />          my $role_selector;
             <em>$realm</em> $dc_info</div>| unless $env{'form.inhibitmenu'};          if (($custommenu) && ($env{'request.course.id'}) && 
               ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gcitest') &&
         if (   $env{'form.inhibitmenu'} eq 'yes'               ($env{'request.role'} !~ m{^st\./gcitest/$match_courseid})) {
             || $ENV{'REQUEST_URI'} eq '/adm/logout'              $role_selector = &Apache::lonmenu::roles_selector(
             || $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {                          $env{'course.' . $env{'request.course.id'} . '.domain'},
                           $env{'course.' . $env{'request.course.id'} . '.num'}  );
               if ($role_selector) {
                   $role_selector = '<br />'.$role_selector;
               }
           }
   
           if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
                if ($dc_info) {
                    $dc_info = qq|<span class="LC_cusr_subheading">$dc_info</span>|;
                }
                $bodytag .= qq|<div id="LC_nav_bar">$name $role<br />
                   <em>$realm</em> $dc_info</div>|;
             return $bodytag;              return $bodytag;
         }          }
   
           $bodytag .= qq|<div id="LC_nav_bar">$name $role $role_selector</div>|;
   
         $bodytag .= Apache::lonhtmlcommon::scripttag(          $bodytag .= Apache::lonhtmlcommon::scripttag(
             Apache::lonmenu::utilityfunctions(), 'start');              Apache::lonmenu::utilityfunctions('',$custommenu), 'start');
   
         $bodytag .= Apache::lonmenu::primary_menu();          $bodytag .= Apache::lonmenu::primary_menu();
   
           if ($dc_info) {
               $dc_info = &dc_courseid_toggle($dc_info);
           }
           $bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|;
   
         #don't show menus for public users          #don't show menus for public users
         if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){          if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){
             $bodytag .= Apache::lonmenu::secondary_menu();              if (($custommenu) && 
                   ($env{'request.role'} !~ m{^st\./gcitest/$match_courseid})) {
                   $bodytag .= &Apache::lonmenu::gci_secondary_menu();
               } else { 
                   $bodytag .= Apache::lonmenu::secondary_menu();
               }
             $bodytag .= Apache::lonmenu::serverform();              $bodytag .= Apache::lonmenu::serverform();
             $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');               $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
             $bodytag .= Apache::lonmenu::innerregister($forcereg) if $forcereg;              if ($env{'request.state'} eq 'construct') {
                   $bodytag .= &Apache::lonmenu::innerregister($forcereg,'',
                                   $args->{'bread_crumbs'});
               } elsif ($forcereg) { 
                   $bodytag .= &Apache::lonmenu::innerregister($forcereg);
               }
         }else{          }else{
             # this is to seperate menu from content when there's no secondary              # this is to seperate menu from content when there's no secondary
             # menu. Especially needed for public accessible ressources.              # menu. Especially needed for public accessible ressources.
Line 4567  sub bodytag { Line 4620  sub bodytag {
     # Explicit link to get inline menu      # Explicit link to get inline menu
     my $menu= ($no_inline_link?''      my $menu= ($no_inline_link?''
        :'<a href="/adm/remote?action=collapse" target="_top">'.&mt('Switch to Inline Menu Mode').'</a>');         :'<a href="/adm/remote?action=collapse" target="_top">'.&mt('Switch to Inline Menu Mode').'</a>');
     $bodytag .= qq|<div id="LC_nav_bar">$name $role  
             <em>$realm</em> $dc_info </div>      if ($dc_info) {
           $dc_info = qq|<span class="LC_cusr_subheading">($dc_info)</span>|;
       }
   
       $bodytag .= qq|<div id="LC_nav_bar">$name $role</div>
             <ol class="LC_primary_menu LC_right">              <ol class="LC_primary_menu LC_right">
                 <li>$menu</li>                  <li>$menu</li>
             </ol>| unless $env{'form.inhibitmenu'};              </ol><div id="LC_realm"> $realm $dc_info</div>| unless $env{'form.inhibitmenu'};
     #  
     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 4585  $bodytag Line 4641  $bodytag
 ENDBODY  ENDBODY
 }  }
   
   sub dc_courseid_toggle {
       my ($dc_info) = @_;
       return ' <span id="dccidtext" class="LC_cusr_subheading">'.
              '<a href="javascript:showCourseID();">'.
              &mt('(More ...)').'</a></span>'.
              '<div id="dccid" class="LC_dccid">'.$dc_info.'</div>';
   }
   
 sub make_attr_string {  sub make_attr_string {
     my ($register,$attr_ref) = @_;      my ($register,$attr_ref) = @_;
   
Line 4731  body { Line 4795  body {
   color:$font;    color:$font;
 }  }
   
 a:link,  
 a:visited {  
   font-size:100%;  
 }  
   
 a:focus {  a:focus {
   color: red;    color: red;
   background: yellow;    background: yellow;
Line 4762  form, .inline { Line 4821  form, .inline {
 .LC_filename {  .LC_filename {
   font-family: $mono;    font-family: $mono;
   white-space:pre;    white-space:pre;
     font-size: 120%;
 }  }
   
 .LC_fileicon {  .LC_fileicon {
Line 4852  table.LC_pastsubmission { Line 4912  table.LC_pastsubmission {
   margin: 2px;    margin: 2px;
 }  }
   
 table#LC_top_nav,  table#LC_menubuttons {
 table#LC_menubuttons,  
 table#LC_nav_location {  
   width: 100%;    width: 100%;
   background: $pgbg;    background: $pgbg;
   border: 2px;    border: 2px;
Line 4934  table#LC_menubuttons img { Line 4992  table#LC_menubuttons img {
   border: none;    border: none;
 }  }
   
 table#LC_top_nav td {  
   background: $tabbg;  
   border: none;  
   font-size: small;  
   vertical-align:top;  
   padding:2px 5px 2px 5px;  
 }  
   
 table#LC_top_nav td a,  
 div#LC_top_nav a {  
   color: $font;  
 }  
   
 table#LC_top_nav td.LC_top_nav_logo {  
   background: $tabbg;  
   text-align: left;  
   white-space: nowrap;  
   width: 31px;  
 }  
   
 table#LC_top_nav td.LC_top_nav_logo img {  
   border: none;  
   vertical-align: bottom;  
 }  
   
 table#LC_top_nav td.LC_top_nav_exit,  
 table#LC_top_nav td.LC_top_nav_help {  
   width: 2.0em;  
 }  
   
 table#LC_top_nav td.LC_top_nav_login {  
   width: 4.0em;  
   text-align: center;  
 }  
   
 .LC_breadcrumbs_component {  .LC_breadcrumbs_component {
   float: right;    float: right;
   margin: 0 1em;    margin: 0 1em;
Line 4981  td.LC_table_cell_checkbox { Line 5004  td.LC_table_cell_checkbox {
   text-align: center;    text-align: center;
 }  }
   
 table#LC_mainmenu td.LC_mainmenu_column {  
   vertical-align: top;  
 }  
   
 .LC_fontsize_small {  .LC_fontsize_small {
   font-size: 70%;    font-size: 70%;
 }  }
Line 4994  table#LC_mainmenu td.LC_mainmenu_column Line 5013  table#LC_mainmenu td.LC_mainmenu_column
   background: $sidebg;    background: $sidebg;
   border-bottom: 1px solid $lg_border_color;    border-bottom: 1px solid $lg_border_color;
   line-height: 2.5em;    line-height: 2.5em;
  /* SD working here       /* SD working here 
  height: 2.5em;       height: 2.5em;
  overflow: hidden; */       overflow: hidden; */
   margin: 0;    margin: 0;
   padding: 0;    padding: 0;
 }  }
Line 5009  table#LC_mainmenu td.LC_mainmenu_column Line 5028  table#LC_mainmenu td.LC_mainmenu_column
 #LC_head_subbox {  #LC_head_subbox {
   clear:both;    clear:both;
   background: #F8F8F8; /* $sidebg; */    background: #F8F8F8; /* $sidebg; */
   border-bottom: 1px solid $lg_border_color;    border: 1px solid $sidebg;
   margin: 0 0 10px 0;    margin: 0 0 10px 0;      
   padding: 5px;  
 }  }
   
 .LC_fontsize_medium {  .LC_fontsize_medium {
Line 5047  td.LC_menubuttons_text { Line 5065  td.LC_menubuttons_text {
   background: $tabbg;    background: $tabbg;
 }  }
   
 .LC_new_mail {  
   background: $tabbg;  
   font-weight: bold;  
 }  
   
 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 5208  table.LC_createuser tr.LC_info_row td  { Line 5221  table.LC_createuser tr.LC_info_row td  {
 table.LC_calendar {  table.LC_calendar {
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: collapse;    border-collapse: collapse;
     width: 98%;
 }  }
   
 table.LC_calendar_pickdate {  table.LC_calendar_pickdate {
Line 5217  table.LC_calendar_pickdate { Line 5231  table.LC_calendar_pickdate {
 table.LC_calendar tr td {  table.LC_calendar tr td {
   border: 1px solid #000000;    border: 1px solid #000000;
   vertical-align: top;    vertical-align: top;
     width: 14%;
 }  }
   
 table.LC_calendar tr td.LC_calendar_day_empty {  table.LC_calendar tr td.LC_calendar_day_empty {
Line 5235  table.LC_mail_list tr.LC_mail_new:hover Line 5250  table.LC_mail_list tr.LC_mail_new:hover
   background-color: $mail_new_hover;    background-color: $mail_new_hover;
 }  }
   
 table.LC_mail_list tr.LC_mail_even {  
 }  
   
 table.LC_mail_list tr.LC_mail_odd {  
 }  
   
 table.LC_mail_list tr.LC_mail_read {  table.LC_mail_list tr.LC_mail_read {
   background-color: $mail_read;    background-color: $mail_read;
 }  }
Line 5520  table.LC_notify_front_page td { Line 5529  table.LC_notify_front_page td {
   
 .LC_topic_bar {  .LC_topic_bar {
   font-weight: bold;    font-weight: bold;
   width: 100%;  
   background: $tabbg;    background: $tabbg;
   vertical-align: middle;    margin: 1em 0em 1em 2em;
   margin: 2ex 0ex 2ex 0ex;  
   padding: 3px;    padding: 3px;
     font-size: 1.2em;
 }  }
   
 .LC_topic_bar span {  .LC_topic_bar span {
     left: 0.5em;
     position: absolute;
   vertical-align: middle;    vertical-align: middle;
     font-size: 1.2em;
 }  }
   
 .LC_topic_bar img {  .LC_topic_bar img {
Line 5644  span.LC_prior_string, Line 5655  span.LC_prior_string,
 span.LC_prior_custom,  span.LC_prior_custom,
 span.LC_prior_reaction,  span.LC_prior_reaction,
 span.LC_prior_math {  span.LC_prior_math {
   font-family: monospace;    font-family: $mono;
   white-space: pre;    white-space: pre;
 }  }
   
 span.LC_prior_string {  span.LC_prior_string {
   font-family: monospace;    font-family: $mono;
   white-space: pre;    white-space: pre;
 }  }
   
Line 5682  span.LC_cusr_subheading { Line 5693  span.LC_cusr_subheading {
   font-size: 85%;    font-size: 85%;
 }  }
   
 table.LC_docs_documents {  
   background: #BBBBBB;  
   border-width: 0;  
   border-collapse: collapse;  
 }  
   
 table.LC_docs_documents td.LC_docs_document {  
   border: 2px solid black;  
   padding: 4px;  
 }  
   
 div.LC_docs_entry_move {  div.LC_docs_entry_move {
   border: 1px solid #BBBBBB;    border: 1px solid #BBBBBB;
   background: #DDDDDD;    background: #DDDDDD;
Line 5893  img.stift { Line 5893  img.stift {
   vertical-align: middle;    vertical-align: middle;
 }  }
   
 table#LC_mainmenu {  table td.LC_mainmenu_col_fieldset {
   margin-top:10px;  
   width:80%;  
 }  
   
 table#LC_mainmenu td.LC_mainmenu_col_fieldset {  
   vertical-align: top;    vertical-align: top;
   width: 45%;  
 }  
   
 .LC_mainmenu_fieldset_category {  
   color: $font;  
   background: $pgbg;  
   font-size: small;  
   font-weight: bold;  
 }  }
   
 div.LC_createcourse {  div.LC_createcourse {
   margin: 10px 10px 10px 10px;    margin: 10px 10px 10px 10px;
 }  }
   
   .LC_dccid {
     margin: 0.2em 0 0 0;
     padding: 0;
     font-size: 90%;
     display:none;
   }
   
 /* ---- Remove when done ----  /* ---- Remove when done ----
 # The following styles is part of the redesign of LON-CAPA and are  # The following styles is part of the redesign of LON-CAPA and are
 # subject to change during this project.  # subject to change during this project.
Line 5963  h6 { Line 5957  h6 {
   border: 0;    border: 0;
 }  }
   
 .LC_Right {  
   float: right;  
   margin: 0;  
   padding: 0;  
 }  
   
 .LC_FormSectionClearButton input {  .LC_FormSectionClearButton input {
   background-color:transparent;    background-color:transparent;
   border: none;    border: none;
Line 6004  fieldset > legend { Line 5992  fieldset > legend {
   margin: 0.2em 0 0 0;    margin: 0.2em 0 0 0;
 }  }
   
   #LC_realm {
     margin: 0.2em 0 0 0;
     padding: 0;
     font-weight: bold;
     text-align: center;
   }
   
 #LC_nav_bar em {  #LC_nav_bar em {
   font-weight: bold;    font-weight: bold;
   font-style: normal;    font-style: normal;
Line 6168  ol#LC_PathBreadcrumbs { Line 6163  ol#LC_PathBreadcrumbs {
   padding-left: 10px;    padding-left: 10px;
   margin: 0;    margin: 0;
   list-style-position: inside;    list-style-position: inside;
     /* SD working here      /* SD working here 
     white-space: nowrap; */      white-space: nowrap; */
 }  }
   
Line 6177  ol#LC_PathBreadcrumbs li, Line 6172  ol#LC_PathBreadcrumbs li,
 ul.LC_CourseBreadcrumbs li {  ul.LC_CourseBreadcrumbs li {
   display: inline;    display: inline;
   white-space: nowrap;    white-space: nowrap;
     /* SD working here      /* SD working here  
     white-space: normal; */      white-space: normal; */ 
 }  }
   
 ol#LC_MenuBreadcrumbs li a,  ol#LC_MenuBreadcrumbs li a,
Line 6219  dl.LC_ListStyleClean dd { Line 6214  dl.LC_ListStyleClean dd {
 .LC_ListStyleClean,  .LC_ListStyleClean,
 .LC_ListStyleSimple,  .LC_ListStyleSimple,
 .LC_ListStyleNormal,  .LC_ListStyleNormal,
 .LC_ListStyle_Border,  
 .LC_ListStyleSpecial {  .LC_ListStyleSpecial {
   /* display:block; */    /* display:block; */
   list-style-position: inside;    list-style-position: inside;
Line 6354  table.LC_tableOfContent a { Line 6348  table.LC_tableOfContent a {
   text-decoration: none;    text-decoration: none;
 }  }
   
 table.LC_tableBrowseRes tr.LC_trOdd,  
 table.LC_tableOfContent tr.LC_trOdd {  
   background-color: #EEEEEE;  
 }  
   
 table.LC_tableOfContent img {  table.LC_tableOfContent img {
   border: none;    border: none;
   height: 1.3em;    height: 1.3em;
Line 6432  a.LC_toolbarItem { Line 6421  a.LC_toolbarItem {
   background-color:transparent;    background-color:transparent;
 }  }
   
   ul.LC_funclist {
       margin: 0;
       padding: 0.5em 1em 0.5em 0;
   }
   
   ul.LC_funclist + ul.LC_funclist {
       /* 
          left border as a seperator if we have more than
          one list 
       */
       border-left: 1px solid $sidebg;
       /* 
          this hides the left border behind the border of the 
          outer box if element is wrapped to the next 'line' 
       */
       margin-left: -1px;
   }
   
 ul.LC_funclist li {  ul.LC_funclist li {
   float: left;    display: inline;
   white-space: nowrap;    white-space: nowrap;
   height: 35px; /* at least as high as heighest list item */    margin: 0 0 0 25px;
   margin: 0 15px 15px 10px;    line-height: 150%;
 }  }
   
   #gciheader {
     float:left;
     width:100%;
     background:#DAE0D2 url("/gcimenu_bg.gif") repeat-x bottom;
     font-size:93%;
     line-height:normal;
   }
   #gciheader ul {
     margin:0;
     padding:10px 10px 0;
     list-style:none;
   }
   #gciheader li {
     float:left;
     background:url("/gcimenu_left.gif") no-repeat left top;
     margin:0;
     padding:0 0 0 9px;
   }
   #gciheader a {
     display:block;
     background:url("/gcimenu_right.gif") no-repeat right top;
     padding:5px 15px 4px 6px;
   }
   #gciheader #current {
     background-image:url("/gcimenu_left_on.gif");
   }
   #gciheader #current a {
     background-image:url("/gcimenu_right_on.gif");
     padding-bottom:5px;
   }
   
 END  END
 }  }
Line 6715  sub start_page { Line 6752  sub start_page {
     # Don't add anything more if only_body wanted      # Don't add anything more if only_body wanted
     return $result if $args->{'only_body'};      return $result if $args->{'only_body'};
   
       #Breadcrumbs for Construction Space provided by &bodytag. 
       if (($env{'environment.remote'} eq 'off') && ($env{'request.state'} eq 'construct')) {
           return $result;
       }
    
     #Breadcrumbs      #Breadcrumbs
     if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {      if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
  &Apache::lonhtmlcommon::clear_breadcrumbs();   &Apache::lonhtmlcommon::clear_breadcrumbs();
Line 9593  sub extract_categories { Line 9635  sub extract_categories {
                 my $trailstr;                  my $trailstr;
                 if ($name eq 'instcode') {                  if ($name eq 'instcode') {
                     $trailstr = &mt('Official courses (with institutional codes)');                      $trailstr = &mt('Official courses (with institutional codes)');
                   } elsif ($name eq 'communities') {
                       $trailstr = &mt('Communities');
                 } else {                  } else {
                     $trailstr = $name;                      $trailstr = $name;
                 }                  }
Line 9705  cathash - reference to hash of categorie Line 9749  cathash - reference to hash of categorie
   
 currcat - scalar with an & separated list of categories assigned to a course.   currcat - scalar with an & separated list of categories assigned to a course. 
   
   type    - scalar contains course type (Course or Community).
   
 Returns: $output (markup to be displayed)   Returns: $output (markup to be displayed) 
   
 =cut  =cut
   
 sub assign_categories_table {  sub assign_categories_table {
     my ($cathash,$currcat) = @_;      my ($cathash,$currcat,$type) = @_;
     my $output;      my $output;
     if (ref($cathash) eq 'HASH') {      if (ref($cathash) eq 'HASH') {
         my (@cats,@trails,%allitems,%idx,@jsarray,@path,$maxdepth);          my (@cats,@trails,%allitems,%idx,@jsarray,@path,$maxdepth);
Line 9719  sub assign_categories_table { Line 9765  sub assign_categories_table {
         if (@cats > 0) {          if (@cats > 0) {
             my $itemcount = 0;              my $itemcount = 0;
             if (ref($cats[0]) eq 'ARRAY') {              if (ref($cats[0]) eq 'ARRAY') {
                 $output = &Apache::loncommon::start_data_table();  
                 my @currcategories;                  my @currcategories;
                 if ($currcat ne '') {                  if ($currcat ne '') {
                     @currcategories = split('&',$currcat);                      @currcategories = split('&',$currcat);
                 }                  }
                   my $table;
                 for (my $i=0; $i<@{$cats[0]}; $i++) {                  for (my $i=0; $i<@{$cats[0]}; $i++) {
                     my $parent = $cats[0][$i];                      my $parent = $cats[0][$i];
                     my $css_class = $itemcount%2?' class="LC_odd_row"':'';  
                     next if ($parent eq 'instcode');                      next if ($parent eq 'instcode');
                       if ($type eq 'Community') {
                           next unless ($parent eq 'communities');
                       } else {
                           next if ($parent eq 'communities');
                       }
                       my $css_class = $itemcount%2?' class="LC_odd_row"':'';
                     my $item = &escape($parent).'::0';                      my $item = &escape($parent).'::0';
                     my $checked = '';                      my $checked = '';
                     if (@currcategories > 0) {                      if (@currcategories > 0) {
Line 9735  sub assign_categories_table { Line 9786  sub assign_categories_table {
                             $checked = ' checked="checked"';                              $checked = ' checked="checked"';
                         }                          }
                     }                      }
                     $output .= '<tr '.$css_class.'><td><span class="LC_nobreak">'.                      my $parent_title = $parent;
                                '<input type="checkbox" name="usecategory" value="'.                      if ($parent eq 'communities') {
                                $item.'"'.$checked.' />'.$parent.'</span>'.                          $parent_title = &mt('Communities');
                                '<input type="hidden" name="catname" value="'.$parent.'" /></td>';                      }
                       $table .= '<tr '.$css_class.'><td><span class="LC_nobreak">'.
                                 '<input type="checkbox" name="usecategory" value="'.
                                 $item.'"'.$checked.' />'.$parent_title.'</span>'.
                                 '<input type="hidden" name="catname" value="'.$parent.'" /></td>';
                     my $depth = 1;                      my $depth = 1;
                     push(@path,$parent);                      push(@path,$parent);
                     $output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);                      $table .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
                     pop(@path);                      pop(@path);
                     $output .= '</tr><tr><td colspan="'.$maxdepth.'" class="LC_row_separator"></td></tr>';                      $table .= '</tr><tr><td colspan="'.$maxdepth.'" class="LC_row_separator"></td></tr>';
                     $itemcount ++;                      $itemcount ++;
                 }                  }
                 $output .= &Apache::loncommon::end_data_table();                  if ($itemcount) {
                       $output = &Apache::loncommon::start_data_table().
                                 $table.
                                 &Apache::loncommon::end_data_table();
                   }
             }              }
         }          }
     }      }
Line 10638  sub _add_to_env { Line 10697  sub _add_to_env {
     }      }
 }  }
   
   sub new_roles_update {
       my $rolecount = 0;
       foreach my $envkey (keys(%env)) {
           next unless ($envkey =~ /^user\.role\./);
           $rolecount ++;
       }
       my $newrolecount = 0;
       if (!$rolecount) {
           my %userenv;
           foreach my $crstype ('official','unofficial','community') {
               $userenv{'canrequest.'.$crstype} =
                   &Apache::lonnet::usertools_access($env{'user.name'},
                   $env{'user.domain'},$crstype,'reload','requestcourses');
           }
           my $then=$env{'user.login.time'};
           my $refresh=time;
           my (%userroles,%allroles,%allgroups,@newroles);
           my %roleshash =
               &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',['active','future','previous'],undef,undef,1);
           foreach my $item (keys(%roleshash)) {
               my ($uname,$udom,$role,$section) = split(':',$item);
               my $where = '/'.$udom.'/'.$uname;
               my ($tstart,$tend) = split(':',$roleshash{$item});
               if ($section ne '') {
                   $where .= '/'.$section;
               }
               my $spec = $role.'.'.$where;
               &Apache::lonnet::set_arearole($role,$where,$tstart,$tend,
                                             $env{'user.domain'},$env{'user.name'});
               $userroles{'user.role.'.$spec} = $tstart.'.'.$tend;
               $newrolecount ++;
               unless (grep(/^\Q$role\E$/,@newroles)) {
                   push(@newroles,$role);
               }
               my $status =
                   &Apache::lonnet::curr_role_status($tstart,$tend,$refresh,$then);
               if ($status eq 'active') {
                   &Apache::lonnet::gather_roleprivs(\%allroles,\%allgroups,\%userroles,
                                                     $where,$role,$tstart,$tend);
               }
           }
           if (@newroles) {
               my ($author,$adv) = &Apache::lonnet::set_userprivs(\%userroles,\%allroles,
                                                                  \%allgroups);
               &Apache::lonnet::appenv(\%userroles,[@newroles,'cm']);
               $userenv{'user.adv'} = $adv;
               $userenv{'user.author'} = $author;
               $userenv{'user.refresh.time'} = $refresh;
           }
           &Apache::lonnet::appenv(\%userenv);
       }
       return $newrolecount;
   }
   
 # --- Get the symbolic name of a problem and the url  # --- Get the symbolic name of a problem and the url
 sub get_symb {  sub get_symb {
     my ($request,$silent) = @_;      my ($request,$silent) = @_;
Line 10679  sub clean_symb { Line 10792  sub clean_symb {
     return ($symb,$enc);      return ($symb,$enc);
 }  }
   
   sub needs_gci_custom {
       my $custommenu;
       my $numdc = &check_for_gci_dc();
       unless ($numdc) {
           my $then=$env{'user.login.time'};
           my $now = time;
           my %cnums = (
                           review => '9615072b469884921gcil1',
                           submit => '1H96711d710194bfegcil1',
                       );
           if ($env{'user.role.st./gci/'.$cnums{'review'}}) {
               my ($start,$end) =
                   split('.',$env{'user.role.st./gci/'.$cnums{'review'}});
               if (((!$start) || ($start && $start <= $now)) &&
                   ((!$end) || ($end > $now))) {
                   $custommenu = 1;
                   if ($env{'user.role.cc./gci/'.$cnums{'review'}}) {
                       my ($ccstart,$ccend) =
                           split('.',$env{'user.role.cc./gci/'.$cnums{'review'}});
                       if (((!$start) || ($start && $start <= $now)) &&
                               ((!$end) || ($end > $now))) {
                           $custommenu = '';
                       }
                   }
               }
           }
       }
       return $custommenu;
   }
   
   sub check_for_gci_dc {
       my $then=$env{'user.login.time'};
       my $numdc = 0;
       foreach my $dom ('gci','gcitest') {
           if ($env{'user.role.dc./'.$dom.'/'}) {
               my $livedc = 1;
               my ($tstart,$tend)=split(/\./,$env{'user.role.dc./'.$dom.'/'});
               if ($tstart && $tstart>$then) { $livedc = 0; }
               if ($tend   && $tend  <$then) { $livedc = 0; }
               if ($livedc) {
                   $numdc++;
               }
           }
       }
       return $numdc;
   }
   
   sub existing_gcitest_courses {
       my ($role) = @_;
       my %courses;
       my $cdom = 'gcitest';
       my $now = time;
       foreach my $envkey (keys(%env)) {
           my $cnum;
           if ($envkey =~ m{^user\.role\.\Q$role\E\./\Q$cdom\E/($match_courseid)$}) {
               $cnum = $1;
           } else {
               next;
           }
           my ($tstart,$tend) = split('.',$env{$envkey});
           if (((!$tstart) || ($tstart < $now)) && ((!$tend) || ($tend > $now))) {
               my $descr = $env{'course.'.$cdom.'_'.$cnum.'.description'};
               if ($descr ne '') {
                   $courses{$cdom.'_'.$cnum}{'description'} = $descr;
               }
           }
       }
       return %courses;
   }
   
 =pod  =pod
   
 =back  =back

Removed from v.1.913  
changed lines
  Added in v.1.925.2.10


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