Diff for /loncom/interface/loncommon.pm between versions 1.925.2.3 and 1.948.2.2

version 1.925.2.3, 2009/12/08 05:00:15 version 1.948.2.2, 2010/05/18 00:44:12
Line 483  ENDAUTHORBRW Line 483  ENDAUTHORBRW
   
 sub coursebrowser_javascript {  sub coursebrowser_javascript {
     my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_;      my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_;
     my $wintitle = &mt('Course Browser');      my $wintitle = 'Course_Browser';
     if ($crstype ne '') {      if ($crstype eq 'Community') {
         $wintitle = &mt($crstype);          $wintitle = 'Community_Browser';
     }      }
     my $id_functions = &javascript_index_functions();      my $id_functions = &javascript_index_functions();
     my $output = '      my $output = '
Line 1127  sub help_open_topic { Line 1127  sub help_open_topic {
     $template.=' <a target="_top" href="'.$link.'" title="'.$title.'">'      $template.=' <a target="_top" href="'.$link.'" title="'.$title.'">'
               .'<img src="'.$helpicon.'" border="0"'                .'<img src="'.$helpicon.'" border="0"'
               .' alt="'.&mt('Help: [_1]',$topic).'"'                .' alt="'.&mt('Help: [_1]',$topic).'"'
               .' title="'.$title.'"'                 .' title="'.$title.'" style="vertical-align:middle;"' 
               .' /></a>';                .' /></a>';
     if ($text ne "") {      if ($text ne "") {
         $template.='</span>';          $template.='</span>';
Line 1719  sub create_workbook { Line 1719  sub create_workbook {
     my $workbook  = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);      my $workbook  = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
     if (! defined($workbook)) {      if (! defined($workbook)) {
         $r->log_error("Error creating excel spreadsheet $filename: $!");          $r->log_error("Error creating excel spreadsheet $filename: $!");
         $r->print('<p>'.&mt("Unable to create new Excel file.  ".          $r->print(
                             "This error has been logged.  ".              '<p class="LC_error">'
                             "Please alert your LON-CAPA administrator").             .&mt('Problems occurred in creating the new Excel file.')
                   '</p>');             .' '.&mt('This error has been logged.')
              .' '.&mt('Please alert your LON-CAPA administrator.')
              .'</p>'
           );
         return (undef);          return (undef);
     }      }
     #      #
Line 1762  sub create_text_file { Line 1765  sub create_text_file {
     $fh = Apache::File->new('>/home/httpd'.$filename);      $fh = Apache::File->new('>/home/httpd'.$filename);
     if (! defined($fh)) {      if (! defined($fh)) {
         $r->log_error("Couldn't open $filename for output $!");          $r->log_error("Couldn't open $filename for output $!");
         $r->print(&mt('Problems occurred in creating the output file. '          $r->print(
                      .'This error has been logged. '              '<p class="LC_error">'
                      .'Please alert your LON-CAPA administrator.'));             .&mt('Problems occurred in creating the output file.')
              .' '.&mt('This error has been logged.')
              .' '.&mt('Please alert your LON-CAPA administrator.')
              .'</p>'
           );
     }      }
     return ($fh,$filename)      return ($fh,$filename)
 }  }
Line 3405  sub get_previous_attempt { Line 3412  sub get_previous_attempt {
       }        }
       $prevattempts=&start_data_table().&start_data_table_header_row();        $prevattempts=&start_data_table().&start_data_table_header_row();
       $prevattempts.='<th>'.&mt('History').'</th>';        $prevattempts.='<th>'.&mt('History').'</th>';
         my %typeparts;
         my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'});
       foreach my $key (sort(keys(%lasthash))) {        foreach my $key (sort(keys(%lasthash))) {
  my ($ign,@parts) = split(/\./,$key);   my ($ign,@parts) = split(/\./,$key);
  if ($#parts > 0) {   if ($#parts > 0) {
   my $data=$parts[-1];    my $data=$parts[-1];
   pop(@parts);    pop(@parts);
   $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.'&nbsp;</th>';            if ($data eq 'type') {
                 unless ($showsurv) {
                     my $id = join(',',@parts);
                     $typeparts{$ign.'.'.$id} = $lasthash{$key};
                 }
                 delete($lasthash{$key});
             } else {
         $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.'&nbsp;</th>';
             }
  } else {   } else {
   if ($#parts == 0) {    if ($#parts == 0) {
     $prevattempts.='<th>'.$parts[0].'</th>';      $prevattempts.='<th>'.$parts[0].'</th>';
Line 3420  sub get_previous_attempt { Line 3437  sub get_previous_attempt {
  }   }
       }        }
       $prevattempts.=&end_data_table_header_row();        $prevattempts.=&end_data_table_header_row();
         my %lasthidden;
       if ($getattempt eq '') {        if ($getattempt eq '') {
  for ($version=1;$version<=$returnhash{'version'};$version++) {   for ($version=1;$version<=$returnhash{'version'};$version++) {
   $prevattempts.=&start_data_table_row().              my @hidden;
       '<td>'.&mt('Transaction [_1]',$version).'</td>';              if (%typeparts) {
     foreach my $key (sort(keys(%lasthash))) {                  foreach my $id (keys(%typeparts)) {
  my $value = &format_previous_attempt_value($key,                      if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) {
    $returnhash{$version.':'.$key});                          push(@hidden,$id);
  $prevattempts.='<td>'.$value.'&nbsp;</td>';                             $lasthidden{$id} = 1;
     }                      } elsif ($lasthidden{$id}) {
   $prevattempts.=&end_data_table_row();                          if (exists($returnhash{$version.':'.$id.'.award'})) {
                               delete($lasthidden{$id});
                           }
                       }
                   }
               }
               $prevattempts.=&start_data_table_row().
                              '<td>'.&mt('Transaction [_1]',$version).'</td>';
               if (@hidden) {
                   foreach my $key (sort(keys(%lasthash))) {
                       my $hide;
                       foreach my $id (@hidden) {
                           if ($key =~ /^\Q$id\E/) {
                               $hide = 1;
                               last;
                           }
                       }
                       if ($hide) {
                           my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/);
                           if (($data eq 'award') || ($data eq 'awarddetail')) {
                               my $value = &format_previous_attempt_value($key,
                                                $returnhash{$version.':'.$key});
                               $prevattempts.='<td>'.$value.'&nbsp;</td>';
                           } else {
                               $prevattempts.='<td>&nbsp;</td>';
                           }
                       } else {
                           if ($key =~ /\./) {
                               my $value = &format_previous_attempt_value($key,
                                                 $returnhash{$version.':'.$key});
                               $prevattempts.='<td>'.$value.'&nbsp;</td>';
                           } else {
                               $prevattempts.='<td>&nbsp;</td>';
                           }
                       }
                   }
               } else {
           foreach my $key (sort(keys(%lasthash))) {
       my $value = &format_previous_attempt_value($key,
               $returnhash{$version.':'.$key});
       $prevattempts.='<td>'.$value.'&nbsp;</td>';
           }
               }
       $prevattempts.=&end_data_table_row();
  }   }
       }        }
         my @currhidden = keys(%lasthidden);
       $prevattempts.=&start_data_table_row().'<td>'.&mt('Current').'</td>';        $prevattempts.=&start_data_table_row().'<td>'.&mt('Current').'</td>';
       foreach my $key (sort(keys(%lasthash))) {        foreach my $key (sort(keys(%lasthash))) {
  my $value = &format_previous_attempt_value($key,$lasthash{$key});            if (%typeparts) {
  if ($key =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)}                my $hidden;
  $prevattempts.='<td>'.$value.'&nbsp;</td>';                foreach my $id (@currhidden) {
                     if ($key =~ /^\Q$id\E/) {
                         $hidden = 1;
                         last;
                     }
                 }
                 if ($hidden) {
                     my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/);
                     if (($data eq 'award') || ($data eq 'awarddetail')) {
                         my $value = &format_previous_attempt_value($key,$lasthash{$key});
                         if ($key =~/$regexp$/ && (defined &$gradesub)) {
                             $value = &$gradesub($value);
                         }
                         $prevattempts.='<td>'.$value.'&nbsp;</td>';
                     } else {
                         $prevattempts.='<td>&nbsp;</td>';
                     }
                 } else {
                     my $value = &format_previous_attempt_value($key,$lasthash{$key});
                     if ($key =~/$regexp$/ && (defined &$gradesub)) {
                         $value = &$gradesub($value);
                     }
                     $prevattempts.='<td>'.$value.'&nbsp;</td>';
                 }
             } else {
         my $value = &format_previous_attempt_value($key,$lasthash{$key});
         if ($key =~/$regexp$/ && (defined &$gradesub)) {
                     $value = &$gradesub($value);
                 }
         $prevattempts.='<td>'.$value.'&nbsp;</td>';
             }
       }        }
       $prevattempts.= &end_data_table_row().&end_data_table();        $prevattempts.= &end_data_table_row().&end_data_table();
     } else {      } else {
Line 4139  sub get_domainconf { Line 4231  sub get_domainconf {
     if (defined($cached)) { return %{$result}; }      if (defined($cached)) { return %{$result}; }
   
     my %domconfig = &Apache::lonnet::get_dom('configuration',      my %domconfig = &Apache::lonnet::get_dom('configuration',
      ['login','rolecolors'],$udom);       ['login','rolecolors','autoenroll'],$udom);
     my (%designhash,%legacy);      my (%designhash,%legacy);
     if (keys(%domconfig) > 0) {      if (keys(%domconfig) > 0) {
         if (ref($domconfig{'login'}) eq 'HASH') {          if (ref($domconfig{'login'}) eq 'HASH') {
             if (keys(%{$domconfig{'login'}})) {              if (keys(%{$domconfig{'login'}})) {
                 foreach my $key (keys(%{$domconfig{'login'}})) {                  foreach my $key (keys(%{$domconfig{'login'}})) {
                     if (ref($domconfig{'login'}{$key}) eq 'HASH') {                      if (ref($domconfig{'login'}{$key}) eq 'HASH') {
                         foreach my $img (keys(%{$domconfig{'login'}{$key}})) {                          if ($key eq 'loginvia') {
                             $designhash{$udom.'.login.'.$key.'_'.$img} =                               if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') {
                                 $domconfig{'login'}{$key}{$img};                                  my @ids = &Apache::lonnet::current_machine_ids();
                                   foreach my $hostname (@ids) {
                                       if (ref($domconfig{'login'}{'loginvia'}{$hostname}) eq 'HASH') {
                                           if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) {
                                               my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'};
                                               $designhash{$udom.'.login.loginvia'} = $server;
                                               if ($domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'} eq 'custom') {
   
                                                   $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'};
                                               } else {
                                                    $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'};
                                               }
                                               if ($domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}) {
                                                   $designhash{$udom.'.login.loginvia_exempt_'.$hostname} = $domconfig{'login'}{'loginvia'}{$hostname}{'exempt'};
                                               }
                                           }
                                       }
                                   }
                               }
                           } else {
                               foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
                                   $designhash{$udom.'.login.'.$key.'_'.$img} = 
                                       $domconfig{'login'}{$key}{$img};
                               }
                         }                          }
                     } else {                      } else {
                         $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};                          $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};
Line 4175  sub get_domainconf { Line 4290  sub get_domainconf {
         } else {          } else {
             $legacy{'rolecolors'} = 1;              $legacy{'rolecolors'} = 1;
         }          }
           if (ref($domconfig{'autoenroll'}) eq 'HASH') {
               if ($domconfig{'autoenroll'}{'co-owners'}) {
                   $designhash{$udom.'.autoassign.co-owners'}=$domconfig{'autoenroll'}{'co-owners'};
               }
           }
         if (keys(%legacy) > 0) {          if (keys(%legacy) > 0) {
             my %legacyhash = &get_legacy_domconf($udom);              my %legacyhash = &get_legacy_domconf($udom);
             foreach my $item (keys(%legacyhash)) {              foreach my $item (keys(%legacyhash)) {
Line 4452  sub bodytag { Line 4572  sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,      my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,
         $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_;          $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_;
   
       my $public;
       if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))
           || ($env{'user.name'} eq '') && ($env{'user.domain'} eq '')) {
           $public = 1;
       }
     if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }      if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }
   
     $function = &get_users_function() if (!$function);      $function = &get_users_function() if (!$function);
Line 4501  sub bodytag { Line 4626  sub 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 ($public) {
  undef($role);   undef($role);
     } else {      } else {
  $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});   $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
     }      }
       
     my $titleinfo = '<h1>'.$title.'</h1>';      my $titleinfo = '<h1>'.$title.'</h1>';
     #      #
     # Extra info if you are the DC      # Extra info if you are the DC
Line 4527  sub bodytag { Line 4652  sub bodytag {
         if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') {           if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { 
             return $bodytag;               return $bodytag; 
         }           } 
         my $custommenu = &needs_gci_custom();   
   
         if ($env{'request.state'} eq 'construct') { $forcereg=1; }          if ($env{'request.state'} eq 'construct') { $forcereg=1; }
   
Line 4546  sub bodytag { Line 4670  sub bodytag {
             return $bodytag;              return $bodytag;
         }          }
   
         $bodytag .= qq|<div id="LC_nav_bar">$name $role</div>|;          unless ($env{'request.symb'} =~ m/\.page___\d+___/) {
               $bodytag .= qq|<div id="LC_nav_bar">$name $role</div>|;
           }
   
         $bodytag .= Apache::lonhtmlcommon::scripttag(          $bodytag .= Apache::lonhtmlcommon::scripttag(
             Apache::lonmenu::utilityfunctions('',$custommenu), 'start');              Apache::lonmenu::utilityfunctions(), 'start');
   
         $bodytag .= Apache::lonmenu::primary_menu();          $bodytag .= Apache::lonmenu::primary_menu();
   
Line 4559  sub bodytag { Line 4685  sub bodytag {
         $bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|;          $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 (!$public){
             if ($custommenu) {              $bodytag .= Apache::lonmenu::secondary_menu();
                 $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');
             if ($env{'request.state'} eq 'construct') {              if ($env{'request.state'} eq 'construct') {
Line 4580  sub bodytag { Line 4702  sub bodytag {
             $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');               $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); 
         }          }
   
         #SD testing  
         #$bodytag .= Apache::lonmenu::menubuttons($forcereg);  
         return $bodytag;          return $bodytag;
     }      }
   
Line 4759  sub standard_css { Line 4879  sub standard_css {
     my $table_header         = '#DDDDDD';      my $table_header         = '#DDDDDD';
     my $feedback_link_bg     = '#BBBBBB';      my $feedback_link_bg     = '#BBBBBB';
     my $lg_border_color      = '#C8C8C8';      my $lg_border_color      = '#C8C8C8';
       my $button_hover         = '#BF2317';
   
     my $border = ($env{'browser.type'} eq 'explorer' ||      my $border = ($env{'browser.type'} eq 'explorer' ||
       $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'        $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'
                                              : '0 3px 0 4px';                                               : '0 3px 0 4px';
   
   
     return <<END;      return <<END;
   
   /* needed for iframe to allow 100% height in FF */
   body, html { 
       margin: 0;
       padding: 0 0.5%;
       height: 99%; /* to avoid scrollbars */
   }
   
 body {  body {
   font-family: $sans;    font-family: $sans;
   line-height:130%;    line-height:130%;
Line 4790  form, .inline { Line 4918  form, .inline {
   vertical-align:middle;    vertical-align:middle;
 }  }
   
 /* just for tests */  
 .LC_400Box {  .LC_400Box {
   width:400px;    width:400px;
 }  }
 /* end */  
   .LC_iframecontainer {
       width: 98%;
       margin: 0;
       position: fixed;
       top: 8.5em;
       bottom: 0;
   }
   
   .LC_iframecontainer iframe{
       border: none;
       width: 100%;
       height: 100%;
   }
   
 .LC_filename {  .LC_filename {
   font-family: $mono;    font-family: $mono;
Line 4908  table#LC_title_bar { Line 5048  table#LC_title_bar {
 }  }
   
 table#LC_title_bar,  table#LC_title_bar,
 table.LC_breadcrumbs,  table.LC_breadcrumbs, /* obsolete? */
 table#LC_title_bar.LC_with_remote {  table#LC_title_bar.LC_with_remote {
   width: 100%;    width: 100%;
   border-color: $pgbg;    border-color: $pgbg;
Line 4921  table#LC_title_bar.LC_with_remote { Line 5061  table#LC_title_bar.LC_with_remote {
   margin: 0;    margin: 0;
 }  }
   
 /* #SD START (work in progress)*/  ul.LC_breadcrumb_tools_outerlist {
   
 ul.LC_bct {  
     margin: 0;      margin: 0;
     padding: 0;      padding: 0;
       position: relative;
       list-style: none;
 }  }
 ul.LC_bct ol {  ul.LC_breadcrumb_tools_outerlist li {
     display: inline;  
 }  
 ul.LC_bct ul {  
     display: inline;  
     padding: 0;  
 }  
 ul.LC_bct li {  
     list-style-type: none;  
     display: inline;      display: inline;
 }  }
   
   .LC_breadcrumb_tools_navigation {
 ul.LC_breadcrumb_tools {      padding: 0;
 }      margin: 0;
       float: left;
 li.LC_breadcrumb_tools {  
 }  
 li.LC_breadcrumb_tools img{  
     vertical-align: middle;  
 }  
   
 .LC_breadcrumb_tools_A {  
     margin: 0 0 0 1em;  
 }  
 .LC_breadcrumb_tools_B {  
     float: right;  
     margin-top: 0.4em;  
 }  }
 .LC_breadcrumb_tools_C {  .LC_breadcrumb_tools_tools {
     margin: 0 1em 0 0;      padding: 0;
       margin: 0;
     float: right;      float: right;
 }  }
 /* #SD END */  
   
 table#LC_title_bar td {  table#LC_title_bar td {
   background: $tabbg;    background: $tabbg;
Line 4991  td.LC_table_cell_checkbox { Line 5111  td.LC_table_cell_checkbox {
   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     overflow: hidden;
      height: 2.5em;  
      overflow: hidden; */  
   margin: 0;    margin: 0;
   padding: 0;    padding: 0;
 }  }
Line 5024  td.LC_table_cell_checkbox { Line 5142  td.LC_table_cell_checkbox {
   padding-left:3px;    padding-left:3px;
 }  }
   
   .LC_menubuttons_inline_text img{
     vertical-align: middle;
   }
   
   li.LC_menubuttons_inline_text img,a {
     cursor:pointer;
   }
   
 .LC_menubuttons_link {  .LC_menubuttons_link {
   text-decoration: none;    text-decoration: none;
 }  }
Line 5043  td.LC_menubuttons_text { Line 5169  td.LC_menubuttons_text {
   background: $tabbg;    background: $tabbg;
 }  }
   
 table.LC_data_table,  table.LC_data_table {
 table.LC_mail_list {  
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: separate;    border-collapse: separate;
   border-spacing: 1px;    border-spacing: 1px;
Line 5070  table.LC_nested { Line 5195  table.LC_nested {
   width: 100%;    width: 100%;
 }  }
   
   .ui-accordion,
   .ui-accordion table.LC_data_table,
   .ui-accordion table.LC_nested_outer{
     border: 0px;
     border-spacing: 0px;
     margin: 3px;
   }
   
 table.LC_data_table tr th,  table.LC_data_table tr th,
 table.LC_calendar tr th,  table.LC_calendar tr th,
 table.LC_mail_list tr th,  
 table.LC_prior_tries tr th,  table.LC_prior_tries tr th,
 table.LC_innerpickbox tr th {  table.LC_innerpickbox tr th {
   font-weight: bold;    font-weight: bold;
Line 5125  table.LC_data_table tr td.LC_leftcol_hea Line 5257  table.LC_data_table tr td.LC_leftcol_hea
   
 table.LC_data_table tr.LC_empty_row td,  table.LC_data_table tr.LC_empty_row td,
 table.LC_nested tr.LC_empty_row td {  table.LC_nested tr.LC_empty_row td {
   background-color: #FFFFFF;  
   font-weight: bold;    font-weight: bold;
   font-style: italic;    font-style: italic;
   text-align: center;    text-align: center;
   padding: 8px;    padding: 8px;
 }  }
   
   table.LC_data_table tr.LC_empty_row td {
     background-color: $sidebg;
   }
   
   table.LC_nested tr.LC_empty_row td {
     background-color: #FFFFFF;
   }
   
 table.LC_caption {  table.LC_caption {
 }  }
   
Line 5179  table.LC_nested tr td.LC_right_item { Line 5318  table.LC_nested tr td.LC_right_item {
   text-align: right;    text-align: right;
 }  }
   
   .ui-accordion table.LC_nested tr.LC_odd_row td.LC_left_item,
   .ui-accordion table.LC_nested tr.LC_even_row td.LC_left_item {
     text-align: right;
     width: 40%;
     padding-right:10px;
     vertical-align: top;
     padding: 5px;
   }
   
   .ui-accordion table.LC_nested tr.LC_odd_row td.LC_right_item,
   .ui-accordion table.LC_nested tr.LC_even_row td.LC_right_item {
     text-align: left;
     width: 60%;
     padding: 2px 4px;
   }
   
 table.LC_nested tr.LC_odd_row td {  table.LC_nested tr.LC_odd_row td {
   background-color: #EEEEEE;    background-color: #EEEEEE;
 }  }
Line 5220  table.LC_calendar tr td.LC_calendar_day_ Line 5375  table.LC_calendar tr td.LC_calendar_day_
   background-color: $data_table_highlight;    background-color: $data_table_highlight;
 }  }
   
 table.LC_mail_list tr.LC_mail_new {  table.LC_data_table tr td.LC_mail_new {
   background-color: $mail_new;    background-color: $mail_new;
 }  }
   
 table.LC_mail_list tr.LC_mail_new:hover {  table.LC_data_table tr.LC_mail_new:hover {
   background-color: $mail_new_hover;    background-color: $mail_new_hover;
 }  }
   
 table.LC_mail_list tr.LC_mail_read {  table.LC_data_table tr td.LC_mail_read {
   background-color: $mail_read;    background-color: $mail_read;
 }  }
   
 table.LC_mail_list tr.LC_mail_read:hover {  /*
   table.LC_data_table tr.LC_mail_read:hover {
   background-color: $mail_read_hover;    background-color: $mail_read_hover;
 }  }
   */
   
 table.LC_mail_list tr.LC_mail_replied {  table.LC_data_table tr td.LC_mail_replied {
   background-color: $mail_replied;    background-color: $mail_replied;
 }  }
   
 table.LC_mail_list tr.LC_mail_replied:hover {  /*
   table.LC_data_table tr.LC_mail_replied:hover {
   background-color: $mail_replied_hover;    background-color: $mail_replied_hover;
 }  }
   */
   
 table.LC_mail_list tr.LC_mail_other {  table.LC_data_table tr td.LC_mail_other {
   background-color: $mail_other;    background-color: $mail_other;
 }  }
   
 table.LC_mail_list tr.LC_mail_other:hover {  /*
   table.LC_data_table tr.LC_mail_other:hover {
   background-color: $mail_other_hover;    background-color: $mail_other_hover;
 }  }
   */
   
 table.LC_data_table tr > td.LC_browser_file,  table.LC_data_table tr > td.LC_browser_file,
 table.LC_data_table tr > td.LC_browser_file_published {  table.LC_data_table tr > td.LC_browser_file_published {
Line 5280  table.LC_data_table tr > td.LC_roles_is Line 5441  table.LC_data_table tr > td.LC_roles_is
 }  }
   
 table.LC_data_table tr > td.LC_roles_future {  table.LC_data_table tr > td.LC_roles_future {
   background: #FFFF77;    border-right: 8px solid #FFFF77;
 }  }
   
 table.LC_data_table tr > td.LC_roles_will {  table.LC_data_table tr > td.LC_roles_will {
   background: #FFAA77;    border-right: 8px solid #FFAA77;
 }  }
   
 table.LC_data_table tr > td.LC_roles_expired {  table.LC_data_table tr > td.LC_roles_expired {
   background: #FF7777;    border-right: 8px solid #FF7777;
 }  }
   
 table.LC_data_table tr > td.LC_roles_will_not {  table.LC_data_table tr > td.LC_roles_will_not {
   background: #AAFF77;    border-right: 8px solid #AAFF77;
 }  }
   
 table.LC_data_table tr > td.LC_roles_selected {  table.LC_data_table tr > td.LC_roles_selected {
   background: #11CC55;    border-right: 8px solid #11CC55;
 }  }
   
 span.LC_current_location {  span.LC_current_location {
Line 5520  table.LC_notify_front_page td { Line 5681  table.LC_notify_front_page td {
   font-size: 1.2em;    font-size: 1.2em;
 }  }
   
 .LC_topic_bar img {  
   vertical-align: bottom;  
 }  
   
 table.LC_course_group_status {  table.LC_course_group_status {
   margin: 20px;    margin: 20px;
 }  }
Line 5762  div.LC_clear_float_footer { Line 5919  div.LC_clear_float_footer {
 }  }
   
 div.LC_grade_show_user {  div.LC_grade_show_user {
   margin-top: 20px;  /*  border-left: 5px solid $sidebg; */
   border: 1px solid black;    border-top: 5px solid #000000;
     margin: 50px 0 0 0;
     padding: 15px 0 5px 10px;
 }  }
   
 div.LC_grade_user_name {  div.LC_grade_show_user_odd_row {
   background: #DDDDEE;  /*  border-left: 5px solid #000000; */
   border-bottom: 1px solid black;  
   font-weight: bold;  
   font-size: large;  
 }  }
   
 div.LC_grade_show_user_odd_row div.LC_grade_user_name {  div.LC_grade_show_user div.LC_Box {
   background: #DDEEDD;    margin-right: 50px;
 }  }
   
 div.LC_grade_show_problem,  
 div.LC_grade_submissions,  div.LC_grade_submissions,
 div.LC_grade_message_center,  div.LC_grade_message_center,
 div.LC_grade_info_links,  div.LC_grade_info_links {
 div.LC_grade_assign {  
   margin: 5px;    margin: 5px;
   width: 99%;    width: 99%;
   background: #FFFFFF;    background: #FFFFFF;
 }  }
   
 div.LC_grade_show_problem_header,  
 div.LC_grade_submissions_header,  div.LC_grade_submissions_header,
 div.LC_grade_message_center_header,  div.LC_grade_message_center_header {
 div.LC_grade_assign_header {  
   font-weight: bold;    font-weight: bold;
   font-size: large;    font-size: large;
 }  }
   
 div.LC_grade_show_problem_problem,  
 div.LC_grade_submissions_body,  div.LC_grade_submissions_body,
 div.LC_grade_message_center_body,  div.LC_grade_message_center_body {
 div.LC_grade_assign_body {  
   border: 1px solid black;    border: 1px solid black;
   width: 99%;    width: 99%;
   background: #FFFFFF;    background: #FFFFFF;
 }  }
   
 span.LC_grade_check_note {  
   font-weight: normal;  
   font-size: medium;  
   display: inline;  
   position: absolute;  
   right: 1em;  
 }  
   
 table.LC_scantron_action {  table.LC_scantron_action {
   width: 100%;    width: 100%;
 }  }
Line 5845  div.LC_edit_problem_header_title { Line 5987  div.LC_edit_problem_header_title {
 }  }
   
 table.LC_edit_problem_header_title {  table.LC_edit_problem_header_title {
   font-size: larger;  
   font-weight:  bold;  
   width: 100%;    width: 100%;
   border-color: $pgbg;  
   border-style: solid;  
   border-width: $border;  
   background: $tabbg;    background: $tabbg;
   border-collapse: collapse;  
   padding: 0;  
 }  }
   
 div.LC_edit_problem_discards {  div.LC_edit_problem_discards {
Line 5886  div.LC_createcourse { Line 6021  div.LC_createcourse {
   display:none;    display:none;
 }  }
   
 /* ---- Remove when done ----  
 # The following styles is part of the redesign of LON-CAPA and are  
 # subject to change during this project.  
 # Don't rely on their current functionality as they might be   
 # changed or removed.  
 # --------------------------*/  
   
 a:hover,  a:hover,
 ol.LC_primary_menu a:hover,  ol.LC_primary_menu a:hover,
 ol#LC_MenuBreadcrumbs a:hover,  ol#LC_MenuBreadcrumbs a:hover,
Line 5900  ol#LC_PathBreadcrumbs a:hover, Line 6028  ol#LC_PathBreadcrumbs a:hover,
 ul#LC_secondary_menu a:hover,  ul#LC_secondary_menu a:hover,
 .LC_FormSectionClearButton input:hover  .LC_FormSectionClearButton input:hover
 ul.LC_TabContent   li:hover a {  ul.LC_TabContent   li:hover a {
   color:#BF2317;    color:$button_hover;
   text-decoration:none;    text-decoration:none;
 }  }
   
Line 5967  fieldset > legend { Line 6095  fieldset > legend {
   
 #LC_nav_bar {  #LC_nav_bar {
   float: left;    float: left;
   margin: 0.2em 0 0 0;    margin: 0;
 }  }
   
 #LC_realm {  #LC_realm {
Line 5984  fieldset > legend { Line 6112  fieldset > legend {
   
 ol.LC_primary_menu {  ol.LC_primary_menu {
   float: right;    float: right;
   margin: 0.2em 0 0 0;    margin: 0;
   }
   
   span.LC_new_message{
     font-weight:bold;
     color: darkred;
 }  }
   
 ol#LC_PathBreadcrumbs {  ol#LC_PathBreadcrumbs {
Line 5999  ol.LC_primary_menu li { Line 6132  ol.LC_primary_menu li {
   
 ol.LC_primary_menu li img {  ol.LC_primary_menu li img {
   vertical-align: bottom;    vertical-align: bottom;
     height: 1.1em;
 }  }
   
 ol.LC_primary_menu a {  ol.LC_primary_menu a {
   font-size: 90%;  
   color: RGB(80, 80, 80);    color: RGB(80, 80, 80);
   text-decoration: none;    text-decoration: none;
 }  }
Line 6046  ul#LC_secondary_menu li a { Line 6179  ul#LC_secondary_menu li a {
 }  }
   
 ul.LC_TabContent {  ul.LC_TabContent {
   min-height:1.5em;    min-height:20px;
 }  }
   
 ul.LC_TabContent li {  ul.LC_TabContent li {
Line 6054  ul.LC_TabContent li { Line 6187  ul.LC_TabContent li {
   padding: 0 10px 0 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;
     border-right: solid 1px $font;
 }  }
   
 ul.LC_TabContent .right {  ul.LC_TabContent .right {
Line 6067  ul.LC_TabContent li { Line 6201  ul.LC_TabContent li {
   font-size:95%;    font-size:95%;
   font-weight:bold;    font-weight:bold;
   padding-right: 16px;    padding-right: 16px;
     min-height:20px;
   }
   
   ul.LC_TabContent li a:hover {
     color: $button_hover;
   }
   
   ul.LC_TabContent li:hover {
     color: $button_hover;
     cursor:pointer;
 }  }
   
 ul.LC_TabContent li:hover,  
 ul.LC_TabContent li.active {  ul.LC_TabContent li.active {
     color: $font;
   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 2px #FFFFFF;    border-bottom:solid 1px #FFFFFF;
   padding-right: 16px;    cursor: default;
 }  }
   
 #maincoursedoc {  #maincoursedoc {
Line 6140  ol#LC_MenuBreadcrumbs, Line 6284  ol#LC_MenuBreadcrumbs,
 ol#LC_PathBreadcrumbs {  ol#LC_PathBreadcrumbs {
   padding-left: 10px;    padding-left: 10px;
   margin: 0;    margin: 0;
   list-style-position: inside;    height: 2.5em;  /* equal to #LC_breadcrumbs line-height */
     /* SD working here   
     white-space: nowrap; */  
 }  }
   
 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;    display: inline;
   white-space: nowrap;    white-space: normal;  
     /* SD working here    
     white-space: normal; */   
 }  }
   
 ol#LC_MenuBreadcrumbs li a,  ol#LC_MenuBreadcrumbs li a,
Line 6404  ul.LC_funclist { Line 6544  ul.LC_funclist {
     padding: 0.5em 1em 0.5em 0;      padding: 0.5em 1em 0.5em 0;
 }  }
   
   ul.LC_funclist > li:first-child {
       font-weight:bold; 
       margin-left:0.8em;
   }
   
 ul.LC_funclist + ul.LC_funclist {  ul.LC_funclist + ul.LC_funclist {
     /*       /* 
        left border as a seperator if we have more than         left border as a seperator if we have more than
Line 6424  ul.LC_funclist li { Line 6569  ul.LC_funclist li {
   line-height: 150%;    line-height: 150%;
 }  }
   
 #gciheader {  .ui-accordion .LC_advanced_toggle {
   float:left;    float: right;
   width:100%;    font-size: 90%;
   background:#DAE0D2 url("/gcimenu_bg.gif") repeat-x bottom;    padding: 0px 4px
   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 10028  sub check_clone { Line 10148  sub check_clone {
     my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);      my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
     my $clonemsg;      my $clonemsg;
     my $can_clone = 0;      my $can_clone = 0;
     my $lctype = lc($args->{'type'});      my $lctype = lc($args->{'crstype'});
     if ($lctype ne 'community') {      if ($lctype ne 'community') {
         $lctype = 'course';          $lctype = 'course';
     }      }
     if ($clonehome eq 'no_host') {      if ($clonehome eq 'no_host') {
         if ($args->{'type'} eq 'Community') {          if ($args->{'crstype'} eq 'Community') {
             $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});              $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
         } else {          } else {
             $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});              $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
         }               }     
     } else {      } else {
  my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});   my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
         if ($args->{'type'} eq 'Community') {          if ($args->{'crstype'} eq 'Community') {
             if ($clonedesc{'type'} ne 'Community') {              if ($clonedesc{'type'} ne 'Community') {
                  $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});                   $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
                 return ($can_clone, $clonemsg, $cloneid, $clonehome);                  return ($can_clone, $clonemsg, $cloneid, $clonehome);
Line 10059  sub check_clone { Line 10179  sub check_clone {
                 $can_clone = 1;                  $can_clone = 1;
             } else {              } else {
                 my $ccrole = 'cc';                  my $ccrole = 'cc';
                 if ($args->{'type'} eq 'Community') {                  if ($args->{'crstype'} eq 'Community') {
                     $ccrole = 'co';                      $ccrole = 'co';
                 }                  }
         my %roleshash =          my %roleshash =
Line 10068  sub check_clone { Line 10188  sub check_clone {
                                          'userroles',['active'],[$ccrole],                                           'userroles',['active'],[$ccrole],
  [$args->{'clonedomain'}]);   [$args->{'clonedomain'}]);
         if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {          if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
     $can_clone = 1;                      $can_clone = 1;
         } else {                  } elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},$args->{'ccuname'},$args->{'ccdomain'})) {
                     if ($args->{'type'} eq 'Community') {                      $can_clone = 1;
                   } else {
                       if ($args->{'crstype'} eq 'Community') {
                         $clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});                          $clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
                     } else {                      } else {
                         $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});                          $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
Line 10129  sub construct_course { Line 10251  sub construct_course {
     # if anyone ever decides to not show this, and Utils::Course::new      # if anyone ever decides to not show this, and Utils::Course::new
     # will need to be suitably modified.      # will need to be suitably modified.
     $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;      $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
       if ($$courseid =~ /^error:/) {
           return (0,$outcome);
       }
   
 #  #
 # Check if created correctly  # Check if created correctly
 #  #
     ($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);      ($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
     my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);      my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
       if ($crsuhome eq 'no_host') {
           $outcome .= &mt('Course creation failed, unrecognized course home server.').$linefeed;
           return (0,$outcome);
       }
     $outcome .= &mt('Created on').': '.$crsuhome.$linefeed;      $outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
   
 #  #
Line 10152  sub construct_course { Line 10282  sub construct_course {
  $cenv{'url'}=$oldcenv{'url'};   $cenv{'url'}=$oldcenv{'url'};
 # Restore title  # Restore title
  $cenv{'description'}=$oldcenv{'description'};   $cenv{'description'}=$oldcenv{'description'};
   # Restore creation date, creator and creation context.
           $cenv{'internal.created'}=$oldcenv{'internal.created'};
           $cenv{'internal.creator'}=$oldcenv{'internal.creator'};
           $cenv{'internal.creationcontext'}=$oldcenv{'internal.creationcontext'};
 # Mark as cloned  # Mark as cloned
  $cenv{'clonedfrom'}=$cloneid;   $cenv{'clonedfrom'}=$cloneid;
 # Need to clone grading mode  # Need to clone grading mode
Line 10716  sub clean_symb { Line 10850  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 %courses;  
     my $cdom = 'gcitest';  
     my $role = 'cc';  
     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.925.2.3  
changed lines
  Added in v.1.948.2.2


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