Diff for /loncom/interface/loncommon.pm between versions 1.925.2.26 and 1.926

version 1.925.2.26, 2010/12/07 04:33:49 version 1.926, 2009/12/08 14:44:17
Line 1978  sub select_dom_form { Line 1978  sub select_dom_form {
             ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;              ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;
         if ($showdomdesc) {          if ($showdomdesc) {
             if ($dom ne '') {              if ($dom ne '') {
                 my $domdesc;                  my $domdesc = &Apache::lonnet::domain($dom,'description');
                 if ($name eq 'srchdomain') {  
                     if ($dom =~ /^\w+ci$/) {  
                         $domdesc = 'Faculty';  
                     } else {  
                         $domdesc = 'Students';  
                     }  
                 } else {  
                     $domdesc = &Apache::lonnet::domain($dom,'description');  
                 }  
                 if ($domdesc ne '') {                  if ($domdesc ne '') {
                     $selectdomain .= ' ('.$domdesc.')';                      $selectdomain .= ' ('.$domdesc.')';
                 }                  }
Line 2478  sub authform_internal{ Line 2469  sub authform_internal{
     }      }
     $autharg = '<input type="password" size="10" name="intarg" value="'.      $autharg = '<input type="password" size="10" name="intarg" value="'.
                $intarg.'" onchange="'.$jscall.'" />';                 $intarg.'" onchange="'.$jscall.'" />';
     my $authtext = '[_1] Internally authenticated (with initial password [_2])';      $result = &mt
     if ($in{'caller'} eq 'requestcrs') {          ('[_1] Internally authenticated (with initial password [_2])',
         $authtext = "[_1] Students' password, if none in the uploaded file: [_2]";           '<label>'.$authtype,'</label>'.$autharg);
     }  
     $result = &mt($authtext,'<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 4463  sub bodytag { Line 4452  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 4483  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 4496  sub bodytag { Line 4476  sub bodytag {
 # realm  # realm
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         if ($env{'request.role'} !~ /^cr/) {          if ($env{'request.role'} !~ /^cr/) {
             if (($custommenu) && (($role eq 'cm') || ($env{'form.context'} eq 'requestcrs'))) {              $role = &Apache::lonnet::plaintext($role,&course_type());
                 undef($role);  
             } else {  
                 $role = &Apache::lonnet::plaintext($role,&course_type());  
             }  
         }          }
         if (defined($role) && $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'};
         }          }   
         if ($env{'form.context'} eq 'requestcrs') {   $realm = $env{'course.'.$env{'request.course.id'}.'.description'};
             undef($realm);  
         } else {  
     $realm = $env{'course.'.$env{'request.course.id'}.'.description'};  
         }  
     } else {      } else {
         if (($custommenu) && ($role eq 'cm')) {          $role = &Apache::lonnet::plaintext($role);
             undef($role);  
         } else {  
             $role = &Apache::lonnet::plaintext($role);  
         }  
     }      }
   
     if (!$realm) { $realm='&nbsp;'; }      if (!$realm) { $realm='&nbsp;'; }
Line 4533  sub bodytag { Line 4501  sub bodytag {
     }       } 
   
     my $name = &plainname($env{'user.name'},$env{'user.domain'});      my $name = &plainname($env{'user.name'},$env{'user.domain'});
     if ($public) {      if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq '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'});
Line 4554  sub bodytag { Line 4522  sub bodytag {
     $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;      $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;
     &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);      &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
   
     if ($env{'environment.remote'} ne 'on') {      if ($env{'environment.remote'} eq 'off') {
         # No Remote          # No Remote
         if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') {           if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { 
             return $bodytag;               return $bodytag; 
Line 4566  sub bodytag { Line 4534  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
         #    }          #    }
   
         my $role_selector;  
         if (($custommenu) && !($env{'form.context'} eq 'requestcrs') &&   
             ($env{'request.course.id'}) &&   
             ($env{'course.'.$env{'request.course.id'}.'.domain'} =~ /^\w+citest$/)) {  
             $role_selector = &Apache::lonmenu::roles_selector(  
                         $env{'course.' . $env{'request.course.id'} . '.domain'},  
                         $env{'course.' . $env{'request.course.id'} . '.num'}  );  
             if ($role_selector) {  
                 $role_selector = '<br />'.$role_selector;  
             }  
         }  
         my $cid = $env{'request.course.id'};  
         my %cicourses;  
         my $udom = $env{'user.domain'};  
         my %allnums = &get_faculty_cnums();  
         if (($udom ne '') && (ref($allnums{$udom}) eq 'HASH')) {  
              foreach my $key (%{$allnums{$udom}}) {  
                  $cicourses{$udom.'_'.$key} = $allnums{$udom}->{$key};  
              }  
         }  
         if (($custommenu && $cid && !$cicourses{$cid}) &&   
              !($env{'form.context'} eq 'requestcrs') ||  
              ($env{'user.domain'} =~ /^\w+citest$/)) {  
             my $role = 'st';  
             if ($custommenu) {  
                 $role = 'cc';  
             }  
             my ($switcher_js,$switcher,$formname);  
             $formname = 'pickrole';  
             my %courses = &existing_gcitest_courses($role);  
             my $numcourses = keys(%courses);  
             my $reqdcount = 0;  
             if ($cid) {  
                 if ($courses{$cid}) {  
                     $reqdcount = 1;   
                 }  
             }  
             if ($numcourses > $reqdcount) {  
                 $switcher = &gcitest_switcher($role,$formname,%courses);  
                 my $current;  
                 if ($cid) {  
                     $current = $role.'./'.$env{'course.'.$cid.'.domain'}.  
                                '/'.$env{'course.'.$cid.'.num'};  
                 }  
                 $switcher_js = &gcitest_switcher_js($current,$numcourses,$formname);  
                 if ($switcher_js) {    
                     $switcher_js= <<"ENDSCRIPT";  
 <script type="text/javascript">  
 // <![CDATA[  
   
 $switcher_js  
   
 // ]]>  
 </script>  
 ENDSCRIPT  
                 }  
             }  
             if ($switcher) {  
                 $switcher = $switcher_js.$switcher;  
                 if ($role_selector) {  
                     $role_selector .= '&nbsp;&nbsp;&nbsp;'.$switcher;  
                 } else {  
                     $role_selector .= '<br />'.$switcher;  
                 }  
             }  
         }  
   
         if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {          if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
              if ($dc_info) {               if ($dc_info) {
Line 4641  ENDSCRIPT Line 4544  ENDSCRIPT
                 <em>$realm</em> $dc_info</div>|;                  <em>$realm</em> $dc_info</div>|;
             return $bodytag;              return $bodytag;
         }          }
         if ($env{'request.noversionuri'} eq '/adm/navmaps' &&  
                 $env{'environment.remotenavmap'} eq 'on') {  
             return $bodytag;  
         }  
   
         if ($cid && $cicourses{$cid} eq 'tutorial') {          $bodytag .= qq|<div id="LC_nav_bar">$name $role</div>|;
             $bodytag .= '<div class="LC_page_header">';  
         }  
    
         $bodytag .= qq|<div id="LC_nav_bar">$name $role $role_selector</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 4661  ENDSCRIPT Line 4556  ENDSCRIPT
             $dc_info = &dc_courseid_toggle($dc_info);              $dc_info = &dc_courseid_toggle($dc_info);
         }          }
         $bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|;          $bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|;
         if ($cid && $cicourses{$cid} eq 'tutorial') {  
             $bodytag .= '</div>';  
         }  
   
         #don't show menus for public users          #don't show menus for public users
         if(!$public){          if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){
             if (($custommenu) &&               $bodytag .= Apache::lonmenu::secondary_menu();
                 ($env{'request.role'} !~ m{^st\./(\w+)citest/$match_courseid})) {  
                 $bodytag .= &Apache::lonmenu::gci_secondary_menu();  
             } elsif ($env{'request.role'} ne 'cm' || &check_for_gci_dc()) {      
                 $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 4680  ENDSCRIPT Line 4567  ENDSCRIPT
                                 $args->{'bread_crumbs'});                                  $args->{'bread_crumbs'});
             } elsif ($forcereg) {               } elsif ($forcereg) { 
                 $bodytag .= &Apache::lonmenu::innerregister($forcereg);                  $bodytag .= &Apache::lonmenu::innerregister($forcereg);
             } elsif ($custommenu && $env{'request.course.id'} &&   
                      &Apache::lonnet::allowed('mdc', $env{'request.course.id'})) {  
                 if ((($env{'request.noversionuri'} eq '/adm/navmaps') &&   
                     ($env{'request.noversionuri'} ne 'on')) ||  
                     (($env{'request.noversionuri'} eq '/adm/coursedocs') &&  
                      (!($env{'form.context'} eq 'requestcrs'))) ||  
                     (($env{'request.noversionuri'} eq '/adm/createuser') &&  
                      (!($env{'form.context'} eq 'requestcrs'))) ||  
                     ($env{'request.noversionuri'} eq '/adm/whatsnew') ||  
                     ($env{'request.noversionuri'} eq '/cgi-bin/printout.pl') ||  
                     ($env{'request.noversionuri'} eq '/adm/printout') ||  
                     ($env{'request.noversionuri'} eq '/adm/statistics')) {  
   
                     my @advtools = &concept_test_manager();  
                     &Apache::lonhtmlcommon::clear_breadcrumbs();  
                     &Apache::lonhtmlcommon::add_breadcrumb_tool(  
                                       'advtools',@advtools);  
                     my $advlinks;  
                     my $legendtext = '<a class="LC_menubuttons_link" href="/adm/menu">'.&mt('Management').'</a>';  
                     &Apache::lonhtmlcommon::render_advtools(\$advlinks,$legendtext);  
                     $bodytag .= $advlinks;  
                 }  
             }              }
         }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
Line 4710  ENDSCRIPT Line 4575  ENDSCRIPT
             $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');               $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); 
         }          }
   
           #SD testing
           #$bodytag .= Apache::lonmenu::menubuttons($forcereg);
         return $bodytag;          return $bodytag;
     }      }
   
Line 4747  $bodytag Line 4614  $bodytag
 ENDBODY  ENDBODY
 }  }
   
 sub concept_test_manager {  
     my @advtools;  
     my  %items = (  
                    docs => {   
                               desc    => 'Edit Test',  
                               action  => "go('/adm/coursedocs')",  
                               tooltip => 'Assemble or modify Concept Test'  
                            },  
                    cprv => {  
                               desc => 'Enrollment/Activity',  
                               action => "go('/adm/createuser')",  
                               tooltip => 'Enrollment and student activity',  
                            },  
                    new => {   
                               desc   => "What's New?",  
                               action => "go('/adm/whatsnew')",  
                               tooltip => 'Recent events/action items in Concept Test' ,  
                            },  
                    prnt => {  
                               desc => 'Print Test',  
                               action => "go('/adm/printout');",  
                               tooltip => 'Prepare printable Concept Test',  
                            },  
                    chrt => {   
                               desc   => 'Test Statistics',  
                               action => "go('/adm/statistics');",  
                               tooltip => 'Concept Test Statistics',  
                            },  
                    rcrs => {  
                               desc   => 'Create New Test',  
                               action  => "switchpage('createtest');",  
                               tooltip => 'Create new Concept Test',  
                            },  
                  );  
     my @ordered = ('docs','cprv','new','prnt','chrt','rcrs');  
     foreach my $item (@ordered) {  
          push(@advtools,  
                   '<a title="'.$items{$item}{tooltip}.'" class="LC_menubuttons_link" href="javascript:'.  
                   $items{$item}{action}.';">'.  
                   '<img src="'.'/res/adm/pages/'.$item.'22.png" alt="'.$items{$item}{tooltip}.  
                   '" border="0" class="LC_icon" />'.  
                   '<span class="LC_menubuttons_inline_text">'.$items{$item}{desc}.'</span></a>');  
     }  
     return @advtools;  
 }  
   
 sub dc_courseid_toggle {  sub dc_courseid_toggle {
     my ($dc_info) = @_;      my ($dc_info) = @_;
     return ' <span id="dccidtext" class="LC_cusr_subheading">'.      return ' <span id="dccidtext" class="LC_cusr_subheading">'.
Line 5095  table#LC_title_bar.LC_with_remote { Line 4916  table#LC_title_bar.LC_with_remote {
   margin: 0;    margin: 0;
 }  }
   
 ul.LC_breadcrumb_tools_outerlist {  /* #SD START (work in progress)*/
   
   ul.LC_bct {
     margin: 0;      margin: 0;
     padding: 0;      padding: 0;
     position: relative;  
     list-style: none;  
 }  }
 ul.LC_breadcrumb_tools_outerlist li {  ul.LC_bct ol {
     display: inline;      display: inline;
 }  }
   ul.LC_bct ul {
 .LC_breadcrumb_tools_navigation {      display: inline;
     padding: 0;      padding: 0;
     margin: 0;  
     float: left;  
 }  }
 .LC_breadcrumb_tools_tools {  ul.LC_bct li {
     padding: 0;      list-style-type: none;
     margin: 0;      display: inline;
     float: right;  
 }  }
   
 div.LC_GCI_Menu {  
     width:900px;  
 }  
   
 div.LC_GCI_Menu:after {  ul.LC_breadcrumb_tools {
     content:'';  
     display:block;  
     clear:both;  
 }  }
   
 div.LC_GCI_Menu_left {  li.LC_breadcrumb_tools {
     float:left;  
     width:400px;  
 }  }
   li.LC_breadcrumb_tools img{
 div.LC_GCI_Menu_right {      vertical-align: middle;
     float:left;  
     width:400px;;  
 }  
   
 dl.LC_GCI_Menu {  
     width:300px;  
     float:left;  
     margin-right:2em;  
 }  }
   
 dl.LC_GCI_Menu dt {  .LC_breadcrumb_tools_A {
     font-weight: bold;      margin: 0 0 0 1em;
     font-size:0.9em;  
     margin-bottom:0.7em;  
 }  }
   .LC_breadcrumb_tools_B {
 dl.LC_GCI_Menu dt a {      float: right;
     color: $font;      margin-top: 0.4em;
 }  }
   .LC_breadcrumb_tools_C {
 dl.LC_GCI_Menu dd {      margin: 0 1em 0 0;
     font-size:0.8em;      float: right;
     margin:0 0 2em 0;  
     padding-left:4.5em;  
     line-height:1.5em;  
     background:none no-repeat left top;  
 }  }
   /* #SD END */
   
 table#LC_title_bar td {  table#LC_title_bar td {
   background: $tabbg;    background: $tabbg;
Line 5170  table#LC_menubuttons img { Line 4967  table#LC_menubuttons img {
   
 .LC_breadcrumbs_component {  .LC_breadcrumbs_component {
   float: right;    float: right;
   margin: 0.25em 1em;    margin: 0 1em;
 }  }
 .LC_breadcrumbs_component img {  .LC_breadcrumbs_component img {
   vertical-align: middle;    vertical-align: middle;
Line 5189  td.LC_table_cell_checkbox { Line 4986  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;
   overflow: hidden;       /* SD working here 
        height: 2.5em;
        overflow: hidden; */
   margin: 0;    margin: 0;
   padding: 0;    padding: 0;
   text-align: left;  
 }  }
   
 /* Preliminary fix to hide breadcrumbs inside remote control window */  /* Preliminary fix to hide breadcrumbs inside remote control window */
Line 5204  td.LC_table_cell_checkbox { Line 5002  td.LC_table_cell_checkbox {
   clear:both;    clear:both;
   background: #F8F8F8; /* $sidebg; */    background: #F8F8F8; /* $sidebg; */
   border: 1px solid $sidebg;    border: 1px solid $sidebg;
   margin: 0 0 0 0;          margin: 0 0 10px 0;      
 }  }
   
 .LC_fontsize_medium {  .LC_fontsize_medium {
Line 5717  table.LC_notify_front_page td { Line 5515  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 6162  fieldset > legend { Line 5956  fieldset > legend {
   padding: 0 5px 0 5px;    padding: 0 5px 0 5px;
 }  }
   
 div.LC_page_header {  
   background-color: $pgbg_or_bgcolor;  
   margin: 0 0 1.0em 0;  
 }  
   
 #LC_nav_bar {  #LC_nav_bar {
   float: left;    float: left;
   margin: 0.2em 0 0 0;    margin: 0.2em 0 0 0;
Line 6209  ol.LC_primary_menu a { Line 5998  ol.LC_primary_menu a {
   text-decoration: none;    text-decoration: none;
 }  }
   
 ol.LC_primary_menu a.LC_new_message {  
   font-weight:bold;  
   color: darkred;  
 }  
   
 ul#LC_secondary_menu {  ul#LC_secondary_menu {
   clear: both;    clear: both;
   color: $fontmenu;    color: $fontmenu;
Line 6347  ol#LC_MenuBreadcrumbs, Line 6131  ol#LC_MenuBreadcrumbs,
 ol#LC_PathBreadcrumbs {  ol#LC_PathBreadcrumbs {
   padding-left: 10px;    padding-left: 10px;
   margin: 0;    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: normal;    white-space: nowrap;
       /* SD working here  
       white-space: normal; */ 
 }  }
   
 ol#LC_MenuBreadcrumbs li a,  ol#LC_MenuBreadcrumbs li a,
Line 6364  ul.LC_CourseBreadcrumbs li a { Line 6151  ul.LC_CourseBreadcrumbs li a {
   font-size:90%;    font-size:90%;
 }  }
   
 ol#LC_MenuBreadcrumbs h1 {  
   display: inline;  
   font-size: 90%;  
   line-height: 2.5em;  
   margin: 0;  
   padding: 0;  
 }  
   
 ol#LC_PathBreadcrumbs li a {  ol#LC_PathBreadcrumbs li a {
   text-decoration:none;    text-decoration:none;
   font-size:100%;    font-size:100%;
Line 6577  a#LC_content_toolbar_changefolder_toggle Line 6356  a#LC_content_toolbar_changefolder_toggle
   background-image:url(/res/adm/pages/open-all-folders.gif);    background-image:url(/res/adm/pages/open-all-folders.gif);
 }  }
   
 a#LC_content_toolbar_management {  
   background-image:url(/res/adm/pages/navtomenu.png);  
 }  
   
 ul#LC_toolbar li a:hover {  ul#LC_toolbar li a:hover {
   background-position: bottom center;    background-position: bottom center;
 }  }
Line 6620  ul.LC_funclist { Line 6395  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 6645  ul.LC_funclist li { Line 6415  ul.LC_funclist li {
   line-height: 150%;    line-height: 150%;
 }  }
   
 #gciheader {  
   float:left;  
   width:100%;  
   background:#DAE0D2 url("/gcimenu_bg.gif") repeat-x bottom;  
   font-size:93%;  
   line-height:normal;  
   margin: 0.5em 0 0.5em 0;  
 }  
 #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 6970  sub start_page { Line 6709  sub start_page {
  #if bread_crumbs_component exists show it as headline else show only the breadcrumbs   #if bread_crumbs_component exists show it as headline else show only the breadcrumbs
  if(exists($args->{'bread_crumbs_component'})){   if(exists($args->{'bread_crumbs_component'})){
  $result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});   $result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});
  } elsif (exists($args->{'bread_crumbs_menulink'})) {   }else{
  $result .= &Apache::lonhtmlcommon::breadcrumbs('','',$args->{'bread_crumbs_menulink'});   $result .= &Apache::lonhtmlcommon::breadcrumbs();
                 } else {  
  $result .= &Apache::lonhtmlcommon::breadcrumbs();   
  }   }
     }      }
     return $result;      return $result;
Line 7904  sub user_picker { Line 7641  sub user_picker {
                     'whse'      => "When searching by last,first you must include at least one character in the first name.",                      'whse'      => "When searching by last,first you must include at least one character in the first name.",
                      'thfo'     => "The following need to be corrected before the search can be run:",                       'thfo'     => "The following need to be corrected before the search can be run:",
                                        );                                         );
     my $domform = &select_dom_form($currdom,'srchdomain',undef,1);      my $domform = &select_dom_form($currdom,'srchdomain',1,1);
     my $srchinsel = ' <select name="srchin">';      my $srchinsel = ' <select name="srchin">';
        
     my @srchins = ('crs','dom','alc','instd');      my @srchins = ('crs','dom','alc','instd');
   
     foreach my $option (@srchins) {      foreach my $option (@srchins) {
Line 7916  sub user_picker { Line 7653  sub user_picker {
         next if ($option eq 'alc');          next if ($option eq 'alc');
         next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs'));            next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs'));  
         next if ($option eq 'crs' && !$env{'request.course.id'});          next if ($option eq 'crs' && !$env{'request.course.id'});
         next if ($option eq 'instd');  
         if ($curr_selected{'srchin'} eq $option) {          if ($curr_selected{'srchin'} eq $option) {
             $srchinsel .= '               $srchinsel .= ' 
        <option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>';     <option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>';
         } else {          } else {
             $srchinsel .= '              $srchinsel .= '
     <option value="'.$option.'">'.$lt{$option}.'</option>';     <option value="'.$option.'">'.$lt{$option}.'</option>';
         }          }
     }      }
     $srchinsel .= "\n  </select>\n";      $srchinsel .= "\n  </select>\n";
Line 7966  sub user_picker { Line 7702  sub user_picker {
                     );                      );
                     $new_user_create = '<p class="LC_warning">'                      $new_user_create = '<p class="LC_warning">'
                                       .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")                                        .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")
                                       .'<br />'                                        .' '
                                       .&mt('Enter a valid e-mail address as the username for the new user.').' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.'                                        .&mt('Please contact the [_1]helpdesk[_2] for assistance.'
                                       ,'<a href="'.$helplink.'">','</a>')                                            ,'<a href="'.$helplink.'">','</a>')
                                       .'</p><br />';                                        .'</p><br />';
                 }                  }
             }              }
Line 10253  sub check_clone { Line 9989  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->{'crstype'});      my $lctype = lc($args->{'type'});
     if ($lctype ne 'community') {      if ($lctype ne 'community') {
         $lctype = 'course';          $lctype = 'course';
     }      }
     if ($clonehome eq 'no_host') {      if ($clonehome eq 'no_host') {
         if ($args->{'crstype'} eq 'Community') {          if ($args->{'type'} 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->{'crstype'} eq 'Community') {          if ($args->{'type'} 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 10284  sub check_clone { Line 10020  sub check_clone {
                 $can_clone = 1;                  $can_clone = 1;
             } else {              } else {
                 my $ccrole = 'cc';                  my $ccrole = 'cc';
                 if ($args->{'crstype'} eq 'Community') {                  if ($args->{'type'} eq 'Community') {
                     $ccrole = 'co';                      $ccrole = 'co';
                 }                  }
         my %roleshash =          my %roleshash =
Line 10295  sub check_clone { Line 10031  sub check_clone {
         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 {          } else {
                     if ($args->{'crstype'} eq 'Community') {                      if ($args->{'type'} 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 10634  sub construct_course { Line 10370  sub construct_course {
         $outcome .= ($fatal?$errtext:'write ok').$linefeed;          $outcome .= ($fatal?$errtext:'write ok').$linefeed;
     }      }
   
     if ($args->{'cloneroster'}) {  
         my ($numadded,$clisterror) = &Apache::lonclonecourse::copyroster($cloneid,$$courseid,$args->{'startaccess'},$args->{'endaccess'});  
         if ($clisterror) {  
             $outcome .= "\0".&mt('An error occurred when copying the student roster from the old course to the new course; the error was: [_1].',$clisterror).$linefeed;  
             if ($numadded) {  
                 $outcome .= &mt('Although [quant,_1,student] have received roles in the new course the roster does not report this. It is  ').$linefeed;  
             }   
         } else {  
             if ($numadded) {  
                 $outcome .= "\0".&mt('[quant,_1,student] copied from roster for old course to roster for new course.',$numadded).$linefeed;  
             } else {  
                 $outcome .= "\0".&mt('No students have been enrolled in the new Concept Test.').' '.&mt('This is because either (a) an error occurred, or (b) there were no students with either current access or access which ended on/after the current default end date set for access to the old course.').$linefeed;  
             }  
         }  
     }  
     return (1,$outcome);      return (1,$outcome);
 }  }
   
Line 10915  sub _add_to_env { Line 10636  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 11010  sub clean_symb { Line 10677  sub clean_symb {
     return ($symb,$enc);      return ($symb,$enc);
 }  }
   
 sub needs_gci_custom {  
     my $custommenu;  
     my $numdc = &check_for_gci_dc();  
     my $udom = $env{'user.domain'};  
     return if ($udom eq '');  
     unless ($numdc) {  
         my $then=$env{'user.login.time'};  
         my $now = time;  
         my %allnums = &get_faculty_cnums();  
         my $cnums = $allnums{$udom};  
         return unless (ref($cnums) eq 'HASH');  
         if ($env{"user.role.st./$udom/$cnums->{'review'}"}) {  
             my ($start,$end) =  
                 split('.',$env{"user.role.st./$udom/$cnums->{'review'}"});  
             if (((!$start) || ($start && $start <= $now)) &&  
                 ((!$end) || ($end > $now))) {  
                 $custommenu = 1;  
                 if ($env{"user.role.cc./$udom/$cnums->{'review'}"}) {  
                     my ($ccstart,$ccend) =  
                         split('.',$env{"user.role.cc./$udom/$cnums->{'review'}"});  
                     if (((!$start) || ($start && $start <= $now)) &&  
                             ((!$end) || ($end > $now))) {  
                         $custommenu = '';  
                     }  
                 }  
             }  
         }  
     }  
     return $custommenu;  
 }  
   
 sub ci_tabs {  
     my ($domain) = @_;  
     my %tabs = (  
                  gci  => ['review','submit','managetest','tutorial'],  
                  slci => ['review'],  
                );  
     return $tabs{$domain};  
 }  
   
 sub check_for_gci_dc {  
     my $then=$env{'user.login.time'};  
     my $numdc = 0;  
     my @doms = &Apache::lonnet::current_machine_domains();  
     foreach my $dom (@doms) {  
         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 get_faculty_cnums {  
     my %cnums = (  
          gci => {   
                     review => '9615072b469884921gcil1',  
                     submit => '1H96711d710194bfegcil1',  
                     tutorial => '5422913620b814c90gcil1',  
                 },  
          slci => {  
                     review => '4V80581c93ffc4c38gcil1',  
                  }  
     );  
     return %cnums;  
 }  
   
 sub existing_gcitest_courses {  
     my ($role) = @_;  
     my %courses;  
     my $cdom = $env{'user.domain'}.'test';  
     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;  
 }  
   
 sub gcitest_switcher {  
     my ($role,$formname,%courses) = @_;  
     my $output;  
     my %Sortby;  
     foreach my $course (sort(keys(%courses))) {  
         next unless (ref($courses{$course}) eq 'HASH');  
         my $clean_title = $courses{$course}{'description'};  
         $clean_title =~ s/\W+//g;  
         if ($clean_title eq '') {  
             $clean_title = $courses{$course}{'description'};  
         }  
         push(@{$Sortby{$clean_title}},$course);  
     }  
     my @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby));  
     my $default;  
     if (@sorted_courses > 1) {  
         if (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) {  
             $default = &mt('Switch concept test ...');  
         } else {  
             $default = &mt('Select a concept test ...');  
         }  
     } else {  
         unless (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) {  
             $default = &mt('Select concept test ...');  
         }  
     }  
     if ($default) {  
         $output = '<form name="'.$formname.'" action="/adm/roles" method="post">'.  
                   '<select name="newrole" onchange="javascript:courseswitcher();">'.  
                   '<option value="" selected="selected">'.$default.'</option>';  
         foreach my $item (@sorted_courses) {  
             foreach my $course (@{$Sortby{$item}}) {  
                 my ($cdom,$cnum) = split('_',$course);  
                 $output .= '<option value="'.$role.'./'.$cdom.'/'.$cnum.'">'.$courses{$course}{'description'}.'</option>';  
             }  
         }  
         $output .= '</select><input type="hidden" name="selectrole" value="" /></form>';  
     }  
     return $output;  
 }  
   
 sub gcitest_switcher_js {  
     my ($current,$numcourses,$formname) = @_;  
     my $output = <<"ENDJS";  
   
 function courseswitcher(caller) {  
     var numcourses = $numcourses;  
     var current = '$current';  
     var choice = document.$formname.newrole.options[document.$formname.newrole.selectedIndex].value;  
     if (choice == '') {  
         if (caller == 'icon') {  
             alert('No Concept Test selected');  
         }  
         document.$formname.selectrole.value = '';  
         return;  
     }  
     if (choice == current) {  
         if ((caller != 'icon') && (numcourses > 1)) {  
             alert('You have selected the current course.\\nPlease select a different Concept Test course');  
         }  
         document.$formname.newrole.selectedIndex = 0;  
         document.$formname.selectrole.value = '';  
         return;  
     }  
     document.$formname.selectrole.value = '1';  
     document.$formname.submit();  
     return;  
 }  
   
 ENDJS  
     return $output;  
 }  
   
 sub get_citest_map {  
     my ($cdom) = @_;  
     my %questionnaires = (  
                            gcitest  => 'default_1261144274.sequence',  
                            slcitest => 'default_1261144274.sequence',  
                          );  
     return $questionnaires{$cdom};  
 }  
   
 =pod  =pod
   
 =back  =back

Removed from v.1.925.2.26  
changed lines
  Added in v.1.926


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