Diff for /loncom/interface/loncommon.pm between versions 1.375 and 1.417

version 1.375, 2006/05/18 01:08:50 version 1.417, 2006/07/03 03:54:29
Line 386  sub selectstudent_link { Line 386  sub selectstudent_link {
   
 sub coursebrowser_javascript {  sub coursebrowser_javascript {
     my ($domainfilter)=@_;      my ($domainfilter)=@_;
       my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role');
    return (<<ENDSTDBRW);     return (<<ENDSTDBRW);
 <script type="text/javascript" language="Javascript" >  <script type="text/javascript" language="Javascript" >
     var stdeditbrowser;      var stdeditbrowser;
     function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag) {      function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
         var url = '/adm/pickcourse?';          var url = '/adm/pickcourse?';
         var filter;          var filter;
         if (filter != null) {          if (filter != null) {
Line 415  sub coursebrowser_javascript { Line 416  sub coursebrowser_javascript {
         if (multflag !=null && multflag != '') {          if (multflag !=null && multflag != '') {
             url += '&multiple='+multflag;              url += '&multiple='+multflag;
         }          }
           if (crstype == 'Course/Group') {
               if (formname == 'cu') {
                   crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
                   if (crstype == "") {
                       alert("$crs_or_grp_alert");
                       return;
                   }
               }
           }
           if (crstype !=null && crstype != '') {
               url += '&type='+crstype;
           }
         var title = 'Course_Browser';          var title = 'Course_Browser';
         var options = 'scrollbars=1,resizable=1,menubar=0';          var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';          options += ',width=700,height=600';
Line 426  ENDSTDBRW Line 439  ENDSTDBRW
 }  }
   
 sub selectcourse_link {  sub selectcourse_link {
    my ($form,$unameele,$udomele,$desc,$extra_element,$multflag)=@_;     my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
     return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.      return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.
         '","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'");'."'>".&mt('Select Course')."</a>";          '","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select [_1]',$selecttype)."</a>";
 }  }
   
 sub check_uncheck_jscript {  sub check_uncheck_jscript {
Line 694  sub helpLatexCheatsheet { Line 707  sub helpLatexCheatsheet {
 }  }
   
 sub help_open_menu {  sub help_open_menu {
     my ($color,$topic,$component_help,$function,$faq,$bug,$stayOnPage,$width,$height,$text) = @_;      my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) = @_;
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
     if ($env{'browser.interface'} eq 'textual' ||      if ($env{'browser.interface'} eq 'textual' ||
Line 708  sub help_open_menu { Line 721  sub help_open_menu {
     my $origurl = $ENV{'REQUEST_URI'};      my $origurl = $ENV{'REQUEST_URI'};
     $origurl=~s|^/~|/priv/|;      $origurl=~s|^/~|/priv/|;
     my $timestamp = time;      my $timestamp = time;
     foreach my $datum (\$color,\$function,\$topic,\$component_help,\$faq,      foreach my $datum (\$topic,\$component_help,\$faq,\$bug,\$origurl) {
        \$bug,\$origurl) {  
         $$datum = &escape($$datum);          $$datum = &escape($$datum);
     }      }
     if (!$stayOnPage) {      if (!$stayOnPage) {
Line 717  sub help_open_menu { Line 729  sub help_open_menu {
     } else {      } else {
         $link = "javascript:helpMenu('display')";          $link = "javascript:helpMenu('display')";
     }      }
     my $banner_link = "/adm/helpmenu?page=banner&color=$color&function=$function&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp&stayonpage=$stayOnPage";      my $banner_link = "/adm/helpmenu?page=banner&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp&amp;stayonpage=$stayOnPage";
     my $details_link = "/adm/helpmenu?page=body&color=$color&function=$function&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp";      my $details_link = "/adm/helpmenu?page=body&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp";
     my $template;      my $template;
     if ($text ne "") {      if ($text ne "") {
  $template .=    $template .= 
Line 803  sub help_open_bug { Line 815  sub help_open_bug {
     $topic=~s/\W+/\+/g;      $topic=~s/\W+/\+/g;
     my $link='';      my $link='';
     my $template='';      my $template='';
     my $url=$Apache::lonnet::perlvar{'BugzillaHost'}.'enter_bug.cgi?product=LON-CAPA&bug_file_loc='.      my $url=$Apache::lonnet::perlvar{'BugzillaHost'}.'enter_bug.cgi?product=LON-CAPA&amp;bug_file_loc='.
  &escape($ENV{'REQUEST_URI'}).'&component='.$topic;   &escape($ENV{'REQUEST_URI'}).'&amp;component='.$topic;
     if (!$stayOnPage)      if (!$stayOnPage)
     {      {
  $link = "javascript:void(open('$url', 'Bugzilla', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))";   $link = "javascript:void(open('$url', 'Bugzilla', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))";
Line 2712  Returns: value of designparamter $which Line 2724  Returns: value of designparamter $which
   
 =cut  =cut
   
   
 ##############################################  ##############################################
 sub designparm {  sub designparm {
     my ($which,$domain)=@_;      my ($which,$domain)=@_;
Line 2726  sub designparm { Line 2739  sub designparm {
     return '#CCCCCC';      return '#CCCCCC';
  }   }
     }      }
     if ($env{'environment.color.'.$which}) {      if (exists($env{'environment.color.'.$which})) {
  return $env{'environment.color.'.$which};   return $env{'environment.color.'.$which};
     }      }
     $domain=&determinedomain($domain);      $domain=&determinedomain($domain);
     if ($designhash{$domain.'.'.$which}) {      if (exists($designhash{$domain.'.'.$which})) {
  return $designhash{$domain.'.'.$which};   return $designhash{$domain.'.'.$which};
     } else {      } else {
         return $designhash{'default.'.$which};          return $designhash{'default.'.$which};
Line 2783  Inputs: Line 2796  Inputs:
 =item * $no_inline_link, if true and in remote mode, don't show the   =item * $no_inline_link, if true and in remote mode, don't show the 
          'Switch To Inline Menu' link           'Switch To Inline Menu' link
   
   
 =back  =back
   
 Returns: A uniform header for LON-CAPA web pages.    Returns: A uniform header for LON-CAPA web pages.  
Line 2813  sub bodytag { Line 2825  sub bodytag {
     @$addentries{keys(%design)} = @design{keys(%design)};      @$addentries{keys(%design)} = @design{keys(%design)};
   
  # role and realm   # role and realm
     my ($role,$realm) =      my ($role,$realm) = split(/\./,$env{'request.role'},2);
  &Apache::lonnet::plaintext((split(/\./,$env{'request.role'}))[0]);      if ($role  eq 'ca') {
           my ($rdom,$rname) = ($realm =~ m-^/(\w+)/(\w+)$-);
           $realm = &plainname($rname,$rdom).':'.$rdom;
       } 
 # realm  # realm
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
           if ($env{'request.role'} !~ /^cr/) {
               $role = &Apache::lonnet::plaintext($role,&course_type());
           }
  $realm = $env{'course.'.$env{'request.course.id'}.'.description'};   $realm = $env{'course.'.$env{'request.course.id'}.'.description'};
       } else {
           $role = &Apache::lonnet::plaintext($role);
     }      }
     if (!$realm) { $realm='&nbsp;'; }      if (!$realm) { $realm='&nbsp;'; }
 # Set messages  # Set messages
Line 2846  sub bodytag { Line 2866  sub bodytag {
  return $bodytag;   return $bodytag;
     }      }
   
       my $name = &plainname($env{'user.name'},$env{'user.domain'});
           
     my $roleinfo=(<<ENDROLE);      my $roleinfo=(<<ENDROLE);
 <td class="LC_title_bar_who">  <td class="LC_title_bar_who">
 <div class="LC_title_bar_name">  <div class="LC_title_bar_name">
     $env{'environment.firstname'}      $name
     $env{'environment.middlename'}  
     $env{'environment.lastname'}  
     $env{'environment.generation'}  
     &nbsp;      &nbsp;
 </div>  </div>
 <div class="LC_title_bar_role">  <div class="LC_title_bar_role">
Line 2878  ENDROLE Line 2895  ENDROLE
                                  '.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 = '('.$dc_info.')';          $dc_info = '('.$dc_info.')';
     }      }
   
Line 2904  ENDROLE Line 2922  ENDROLE
  $lastitem = $thisdisfn;   $lastitem = $thisdisfn;
     }      }
     $titleinfo =       $titleinfo = 
  &Apache::loncommon::help_open_menu('','','','',3,'Authoring').   &Apache::loncommon::help_open_menu('','',3,'Authoring').
  '<b>Construction Space</b>:&nbsp;'.    '<b>Construction Space</b>:&nbsp;'. 
  '<form name="dirs" method="post" action="'.$formaction   '<form name="dirs" method="post" action="'.$formaction
  .'" target="_top"><tt><b>'   .'" target="_top"><tt><b>'
Line 3076  sub standard_css { Line 3094  sub standard_css {
     my $tabbg  = &designparm($function.'.tabbg', $domain);      my $tabbg  = &designparm($function.'.tabbg', $domain);
     my $font   = &designparm($function.'.font',  $domain);      my $font   = &designparm($function.'.font',  $domain);
     my $sidebg = &designparm($function.'.sidebg',$domain);      my $sidebg = &designparm($function.'.sidebg',$domain);
     my $pgbg   = $bgcolor ||      my $pgbg_or_bgcolor =
            $bgcolor ||
          &designparm($function.'.pgbg',  $domain);           &designparm($function.'.pgbg',  $domain);
       my $pgbg   = &designparm($function.'.pgbg',  $domain);
     my $alink  = &designparm($function.'.alink', $domain);      my $alink  = &designparm($function.'.alink', $domain);
     my $vlink  = &designparm($function.'.vlink', $domain);      my $vlink  = &designparm($function.'.vlink', $domain);
     my $link   = &designparm($function.'.link',  $domain);      my $link   = &designparm($function.'.link',  $domain);
   
     my $sans                 = 'Arial,Helvetica,sans-serif';      my $sans                 = 'Arial,Helvetica,sans-serif';
       my $mono                 = 'monospace';
     my $data_table_head      = $tabbg;      my $data_table_head      = $tabbg;
     my $data_table_light     = '#EEEEEE';      my $data_table_light     = '#EEEEEE';
     my $data_table_dark      = '#DDD';      my $data_table_dark      = '#DDD';
Line 3095  sub standard_css { Line 3116  sub standard_css {
     my $mail_replied_hover   = '#888855';      my $mail_replied_hover   = '#888855';
     my $mail_other           = '#99BBBB';      my $mail_other           = '#99BBBB';
     my $mail_other_hover     = '#669999';      my $mail_other_hover     = '#669999';
       my $table_header         = '#DDDDDD';
   
       my $border = ($env{'browser.type'} eq 'explorer') ? '0px 2px 0px 2px'
                                                 : '0px 3px 0px 4px';
     return <<END;      return <<END;
 h1, h2, h3, th { font-family: $sans }  h1, h2, h3, th { font-family: $sans }
 a:focus { color: red; background: yellow }   a:focus { color: red; background: yellow } 
Line 3103  table.thinborder { border-collapse: coll Line 3127  table.thinborder { border-collapse: coll
 table.thinborder tr th, table.thinborder tr td { border-style: solid; border-width: 1px}  table.thinborder tr th, table.thinborder tr td { border-style: solid; border-width: 1px}
 form, .inline { display: inline; }  form, .inline { display: inline; }
 .center { text-align: center; }  .center { text-align: center; }
 .filename {font-family: monospace;}  .LC_filename {font-family: $mono;}
 .LC_error {  .LC_error {
   color: red;    color: red;
   font-size: larger;    font-size: larger;
 }  }
   .LC_warning {
     color: red;
   }
 .LC_success {  .LC_success {
   color: green;    color: green;
 }  }
   
 table#LC_top_nav, table#LC_menubuttons, table#LC_nav_location, table#LC_breadcrumbs {  table#LC_top_nav, table#LC_menubuttons {
   width: 100%;    width: 100%;
   background: $pgbg;    background: $pgbg;
   border: 0px;    border: 2px;
   border-spacing: 2px 1px;  
   padding: 0px;  
   margin: 0px;  
   border-collapse: separate;    border-collapse: separate;
     padding: 0px;
 }  }
 table#LC_title_bar {  
   table#LC_title_bar, table.LC_breadcrumbs, table#LC_nav_location,
   table#LC_title_bar.LC_with_remote {
   width: 100%;    width: 100%;
   border: 0;    border-color: $pgbg;
   border-spacing: 0px 1px;    border-style: solid;
   padding: 0px 2px 0px 2px;    border-width: $border;
   
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    font-family: $sans;
   border-collapse: separate;    border-collapse: collapse;
     padding: 0px;
 }  }
 table#LC_title_bar.LC_with_remote {  
   table.LC_docs_path {
   width: 100%;    width: 100%;
   border: 0;    border: 0;
   border-spacing: 0;  
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    font-family: $sans;
   border-collapse: collapse;    border-collapse: collapse;
     padding: 0px;
 }  }
   
 table#LC_title_bar td {  table#LC_title_bar td {
   padding: 3px;  
   background: $tabbg;    background: $tabbg;
 }  }
 table#LC_title_bar td.LC_title_bar_who {  table#LC_title_bar td.LC_title_bar_who {
Line 3149  table#LC_title_bar td.LC_title_bar_who { Line 3179  table#LC_title_bar td.LC_title_bar_who {
   text-align: right;    text-align: right;
 }  }
 span.LC_title_bar_title {  span.LC_title_bar_title {
   font: bold xx-large $sans;    font: bold x-large $sans;
 }  }
 table#LC_title_bar td.LC_title_bar_domain_logo {  table#LC_title_bar td.LC_title_bar_domain_logo {
   background: $sidebg;    background: $sidebg;
Line 3174  table#LC_menubuttons img, table#LC_menub Line 3204  table#LC_menubuttons img, table#LC_menub
 }  }
 table#LC_top_nav td {  table#LC_top_nav td {
   background: $tabbg;    background: $tabbg;
     border: 0px;
     font-size: small;
 }  }
 table#LC_top_nav td a, div#LC_top_nav a {  table#LC_top_nav td a, div#LC_top_nav a {
   color: $font;    color: $font;
Line 3182  table#LC_top_nav td a, div#LC_top_nav a Line 3214  table#LC_top_nav td a, div#LC_top_nav a
 table#LC_top_nav td.LC_top_nav_logo {  table#LC_top_nav td.LC_top_nav_logo {
   background: $tabbg;    background: $tabbg;
   text-align: right;    text-align: right;
     white-space: nowrap;
     font-weight: bold;
   }
   table#LC_top_nav td.LC_top_nav_logo img {
     margin-left: 0.2em;
     vertical-align: bottom;
 }  }
 table#LC_breadcrumbs td {  table.LC_breadcrumbs td, table.LC_docs_path td  {
   background: $tabbg;    background: $tabbg;
   color: $font;    color: $font;
   font-family: $sans;    font-family: $sans;
   font-size: smaller;    font-size: smaller;
 }  }
 table#LC_breadcrumbs td.LC_breadcrumb_component {  table.LC_breadcrumbs td.LC_breadcrumbs_component,
   table.LC_docs_path td.LC_docs_path_component {
   background: $tabbg;    background: $tabbg;
   color: $font;    color: $font;
   font-family: $sans;    font-family: $sans;
   font-size: larger;    font-size: larger;
   text-align: right;    text-align: right;
 }  }
   td.LC_table_cell_checkbox {
     text-align: center;
   }
   
 .LC_menubuttons_inline_text {  .LC_menubuttons_inline_text {
   color: $font;    color: $font;
   font-family: $sans;    font-family: $sans;
Line 3220  td.LC_menubuttons_img { Line 3263  td.LC_menubuttons_img {
   
 table.LC_data_table, table.LC_mail_list {  table.LC_data_table, table.LC_mail_list {
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: seperate;    border-collapse: separate;
 }  }
 table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th {  table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th {
   font-weight: bold;    font-weight: bold;
Line 3278  table.LC_mail_list tr.LC_mail_other { Line 3321  table.LC_mail_list tr.LC_mail_other {
 table.LC_mail_list tr.LC_mail_other:hover {  table.LC_mail_list tr.LC_mail_other:hover {
   background-color: $mail_other_hover;    background-color: $mail_other_hover;
 }  }
   
   table#LC_portfolio_actions {
     width: auto;
     background: $pgbg;
     border: 0px;
     border-spacing: 2px 2px;
     padding: 0px;
     margin: 0px;
     border-collapse: separate;
   }
   table#LC_portfolio_actions td.LC_label {
     background: $tabbg;
     text-align: right;
   }
   table#LC_portfolio_actions td.LC_value {
     background: $tabbg;
   }
   
   table#LC_cstr_controls {
     width: 100%;
     border-collapse: collapse;
   }
   table#LC_cstr_controls tr td {
     border: 4px solid $pgbg;
     padding: 4px;
     text-align: center;
     background: $tabbg;
   }
   table#LC_cstr_controls tr th {
     border: 4px solid $pgbg;
     background: $table_header;
     text-align: center;
     font-family: $sans;
     font-size: smaller;
   }
   
   table#LC_browser {
    
   }
   table#LC_browser tr th {
     background: $table_header;
   }
   table#LC_browser tr td {
     padding: 2px;
   }
   table#LC_browser tr.LC_browser_file,
   table#LC_browser tr.LC_browser_file_published {
     background: #CCFF88;
   }
   table#LC_browser tr.LC_browser_file_locked,
   table#LC_browser tr.LC_browser_file_unpublished {
     background: #FFAA99;
   }
   table#LC_browser tr.LC_browser_file_obsolete {
     background: #AAAAAA;
   }
   table#LC_browser tr.LC_browser_file_modified {
     background: #FFFF77;
   }
   table#LC_browser tr.LC_browser_folder {
     background: #CCCCFF;
   }
   span.LC_current_location {
     font-size: x-large;
     background: $pgbg;
   }
   
   span.LC_parm_menu_item {
     font-size: larger;
     font-family: $sans;
   }
   span.LC_parm_scope_all {
     color: red;
   }
   span.LC_parm_scope_folder {
     color: green;
   }
   span.LC_parm_scope_resource {
     color: orange;
   }
   span.LC_parm_part {
     color: blue;
   }
   span.LC_parm_folder, span.LC_parm_symb {
     font-size: x-small;
     font-family: $mono;
     color: #AAAAAA;
   }
   
   td.LC_parm_overview_level_menu, td.LC_parm_overview_map_menu,
   td.LC_parm_overview_parm_selectors, td.LC_parm_overview_parm_restrictions {
     border: 1px solid black;
     border-collapse: collapse;
   }
   table.LC_parm_overview_restrictions td {
     border-width: 1px 4px 1px 4px;
     border-style: solid;
     border-color: $pgbg;
     text-align: center;
   }
   table.LC_parm_overview_restrictions th {
     background: $tabbg;
     border-width: 1px 4px 1px 4px;
     border-style: solid;
     border-color: $pgbg;
   }
   table#LC_helpmenu {
     border: 0px;
     height: 55px;
     border-spacing: 0px;
   }
   
   table#LC_helpmenu fieldset legend {
     font-size: larger;
     font-weight: bold;
   }
   table#LC_helpmenu_links {
     width: 100%;
     border: 1px solid black;
     background: $pgbg;
     padding: 0px;
     border-spacing: 1px;
   }
   table#LC_helpmenu_links tr td {
     padding: 1px;
     background: $tabbg;
     text-align: center;
     font-weight: bold;
   }
   
   table#LC_helpmenu_links a:link, table#LC_helpmenu_links a:visited,
   table#LC_helpmenu_links a:active {
     text-decoration: none;
     color: $font;
   }
   table#LC_helpmenu_links a:hover {
     text-decoration: underline;
     color: $vlink;
   }
   
   .LC_chrt_popup_exists {
     border: 1px solid #339933;
     margin: -1px;
   }
   .LC_chrt_popup_up {
     border: 1px solid yellow;
     margin: -1px;
   }
   .LC_chrt_popup {
     border: 1px solid #8888FF;
     background: #CCCCFF;
   }
   
 END  END
 }  }
   
Line 3294  Inputs: $title - optional title for the Line 3490  Inputs: $title - optional title for the
         $args - optional arguments          $args - optional arguments
             force_register - if is true call registerurl so the remote is               force_register - if is true call registerurl so the remote is 
                              informed                               informed
             redirect       -> array ref of seconds before redirect occurs              redirect       -> array ref of
                                     url to redirect to                                     1- seconds before redirect occurs
                                      2- url to redirect to
                                      3- whether the side effect should occur
                            (side effect of setting                              (side effect of setting 
                                $env{'internal.head.redirect'} to the url                                  $env{'internal.head.redirect'} to the url 
                                redirected too)                                 redirected too)
Line 3314  sub headtag { Line 3512  sub headtag {
     my $function = $args->{'function'} || &get_users_function();      my $function = $args->{'function'} || &get_users_function();
     my $domain   = $args->{'domain'}   || &determinedomain();      my $domain   = $args->{'domain'}   || &determinedomain();
     my $bgcolor  = $args->{'bgcolor'}  || &designparm($function.'.pgbg',$domain);      my $bgcolor  = $args->{'bgcolor'}  || &designparm($function.'.pgbg',$domain);
     my $url = join(':',$env{'user.name'},$env{'user.domain'},      my $url = join(':',$env{'user.name'},$env{'user.domain'},time(),
    $env{'environment.color.timestamp'},     #$env{'environment.color.timestamp'},
    $function,$domain,$bgcolor);     $function,$domain,$bgcolor);
   
     $url = '/adm/css/'.&escape($url).'.css';      $url = '/adm/css/'.&escape($url).'.css';
   
     my $result =      my $result =
  '<head>'.   '<head>'.
  '<link rel="stylesheet" type="text/css" href="'.$url.'" />'.  
  &font_settings().   &font_settings().
  &Apache::lonhtmlcommon::htmlareaheaders();   &Apache::lonhtmlcommon::htmlareaheaders();
   
Line 3331  sub headtag { Line 3528  sub headtag {
     }      }
   
     if (ref($args->{'redirect'})) {      if (ref($args->{'redirect'})) {
  my ($time,$url) = @{$args->{'redirect'}};   my ($time,$url,$inhibit_continue) = @{$args->{'redirect'}};
  $url = &Apache::lonenc::check_encrypt($url);   $url = &Apache::lonenc::check_encrypt($url);
  $env{'internal.head.redirect'} = $url;   if (!$inhibit_continue) {
       $env{'internal.head.redirect'} = $url;
    }
  $result.=<<ADDMETA   $result.=<<ADDMETA
 <meta http-equiv="pragma" content="no-cache" />  <meta http-equiv="pragma" content="no-cache" />
 <meta http-equiv="Refresh" content="$time; url=$url" />  <meta http-equiv="Refresh" content="$time; url=$url" />
Line 3343  ADDMETA Line 3542  ADDMETA
  $title = 'The LearningOnline Network with CAPA';   $title = 'The LearningOnline Network with CAPA';
     }      }
           
     $result .= '<title> LON-CAPA '.&mt($title).'</title>'.$head_extra;      $result .= '<title> LON-CAPA '.&mt($title).'</title>'
    .'<link rel="stylesheet" type="text/css" href="'.$url.'" />'
    .$head_extra;
     return $result;      return $result;
 }  }
   
Line 3435  Returns a uniform complete <head>..</hea Line 3636  Returns a uniform complete <head>..</hea
   
 Inputs: $title - optional title for the page  Inputs: $title - optional title for the page
         $head_extra - optional extra HTML to put inside the <head>          $head_extra - optional extra HTML to put inside the <head>
   
 =back  =back
   
 =cut  =cut
Line 3548  Inputs:         $args - additional optio Line 3750  Inputs:         $args - additional optio
                                  a html attribute                                   a html attribute
                  frameset     -> if true will start with a <frameset>                   frameset     -> if true will start with a <frameset>
                                  rather than <body>                                   rather than <body>
 =back  
   
 =cut  =cut
   
Line 3643  sub simple_error_page { Line 3844  sub simple_error_page {
     my $row_count;      my $row_count;
     sub start_data_table {      sub start_data_table {
  undef($row_count);   undef($row_count);
  return '<table class="LC_data_table">';   return '<table class="LC_data_table">'."\n";
     }      }
   
     sub end_data_table {      sub end_data_table {
  undef($row_count);   undef($row_count);
  return '</table>';   return '</table>'."\n";;
     }      }
   
     sub start_data_table_row {      sub start_data_table_row {
  $row_count++;   $row_count++;
  return  '<tr '.(($row_count % 2)?'':'class="LC_even_row"').'>';   return  '<tr '.(($row_count % 2)?'':'class="LC_even_row"').'>'."\n";;
     }      }
   
     sub end_data_table_row {      sub end_data_table_row {
  return '</tr>';   return '</tr>'."\n";;
     }      }
   
     sub start_data_table_header_row {      sub start_data_table_header_row {
  return  '<tr class="LC_header_row">';   return  '<tr class="LC_header_row">'."\n";;
     }      }
   
     sub end_data_table_header_row {      sub end_data_table_header_row {
  return '</tr>';   return '</tr>'."\n";;
     }      }
 }  }
   
Line 3673  sub simple_error_page { Line 3874  sub simple_error_page {
   
 =pod  =pod
   
 =over 4  =item * &get_users_function()
   
 =item get_users_function  
   
 Used by &bodytag to determine the current users primary role.  Used by &bodytag to determine the current users primary role.
 Returns either 'student','coordinator','admin', or 'author'.  Returns either 'student','coordinator','admin', or 'author'.
Line 3702  sub get_users_function { Line 3901  sub get_users_function {
   
 =pod  =pod
   
 =item check_user_status  =item * &check_user_status
   
 Determines current status of supplied role for a  Determines current status of supplied role for a
 specific user. Roles can be active, previous or future.  specific user. Roles can be active, previous or future.
Line 3717  role status: active, previous or future. Line 3916  role status: active, previous or future.
 =cut  =cut
   
 sub check_user_status {  sub check_user_status {
     my ($udom,$uname,$cdom,$crs,$role,$secgrp) = @_;      my ($udom,$uname,$cdom,$crs,$role,$sec) = @_;
     my %userinfo = &Apache::lonnet::dump('roles',$udom,$uname);      my %userinfo = &Apache::lonnet::dump('roles',$udom,$uname);
     my @uroles = keys %userinfo;      my @uroles = keys %userinfo;
     my $srchstr;      my $srchstr;
     my $active_chk = 'none';      my $active_chk = 'none';
       my $now = time;
     if (@uroles > 0) {      if (@uroles > 0) {
         if (($role eq 'cc') || ($secgrp eq '') || (!defined($secgrp))) {          if (($role eq 'cc') || ($sec eq '') || (!defined($sec))) {
             $srchstr = '/'.$cdom.'/'.$crs.'_'.$role;              $srchstr = '/'.$cdom.'/'.$crs.'_'.$role;
         } else {          } else {
             $srchstr = '/'.$cdom.'/'.$crs.'/'.$secgrp.'_'.$role;         }              $srchstr = '/'.$cdom.'/'.$crs.'/'.$sec.'_'.$role;
         if (grep/^$srchstr$/,@uroles) {          }
           if (grep/^\Q$srchstr\E$/,@uroles) {
             my $role_end = 0;              my $role_end = 0;
             my $role_start = 0;              my $role_start = 0;
             $active_chk = 'active';              $active_chk = 'active';
             if ($userinfo{$srchstr} =~ m/^($role)_(\d+)/) {              if ($userinfo{$srchstr} =~ m/^\Q$role\E_(\d+)/) {
                 $role_end = $2;                  $role_end = $1;
                 if ($userinfo{$srchstr} =~ m/^($role)_($role_end)_(\d+)$/) {                  if ($userinfo{$srchstr} =~ m/^\Q$role\E_\Q$role_end\E_(\d+)$/) {
                     $role_start = $3;                      $role_start = $1;
                 }                  }
             }              }
             if ($role_start > 0) {              if ($role_start > 0) {
                 if (time < $role_start) {                  if ($now < $role_start) {
                     $active_chk = 'future';                      $active_chk = 'future';
                 }                  }
             }              }
             if ($role_end > 0) {              if ($role_end > 0) {
                 if (time > $role_end) {                  if ($now > $role_end) {
                     $active_chk = 'previous';                      $active_chk = 'previous';
                 }                  }
             }              }
Line 3756  sub check_user_status { Line 3957  sub check_user_status {
   
 =pod  =pod
   
 =item get_sections  =item * &get_sections()
   
 Determines all the sections for a course including  Determines all the sections for a course including
 sections with students and sections containing other roles.  sections with students and sections containing other roles.
Line 3817  sub get_sections { Line 4018  sub get_sections {
 ###############################################  ###############################################
   
 =pod  =pod
                                                                                   
 =item get_course_users  =item * &get_course_users()
                                                                                   
 Retrieves usernames:domains for users in the specified course  Retrieves usernames:domains for users in the specified course
 with specific role(s), and access status.   with specific role(s), and access status. 
   
Line 3842  Entries for end, start, section and stat Line 4043  Entries for end, start, section and stat
 of the possibility of multiple values for non-student roles.  of the possibility of multiple values for non-student roles.
   
 =cut  =cut
                                                                                   
 ###############################################  ###############################################
                                                                                   
 sub get_course_users {  sub get_course_users {
     my ($cdom,$cnum,$types,$roles,$sections,$users,$userdata) = @_;      my ($cdom,$cnum,$types,$roles,$sections,$users,$userdata) = @_;
     my %idx = ();      my %idx = ();
Line 3863  sub get_course_users { Line 4064  sub get_course_users {
         my $now = time;          my $now = time;
         foreach my $student (keys(%{$classlist})) {          foreach my $student (keys(%{$classlist})) {
             my $match = 0;              my $match = 0;
               my $secmatch = 0;
             if ((ref($sections) eq 'ARRAY') && (@{$sections} > 0)) {              if ((ref($sections) eq 'ARRAY') && (@{$sections} > 0)) {
  unless(grep(/^\Q$$classlist{$student}[$idx{section}]\E$/,                  if (grep/^all$/,@{$sections}) {
                       $secmatch = 1;
                   } elsif ($$classlist{$student}[$idx{section}] eq '') {
                       if (grep/^none$/,@{$sections}) {
                           $secmatch = 1;
                       }
                   } else {  
       if (grep(/^\Q$$classlist{$student}[$idx{section}]\E$/,
     @{$sections})) {      @{$sections})) {
     next;          $secmatch = 1;
                       }
  }   }
                   if (!$secmatch) {
                       next;
                   }
             }               } 
             if (defined($$types{'active'})) {              if (defined($$types{'active'})) {
                 if ($$classlist{$student}[$idx{status}] eq 'Active') {                  if ($$classlist{$student}[$idx{status}] eq 'Active') {
Line 3887  sub get_course_users { Line 4100  sub get_course_users {
                     $match = 1;                      $match = 1;
                 }                  }
             }              }
             if ($match && defined($userdata)) {              if ($match && ref($userdata) eq 'HASH') {
                 $$userdata{$student} = $$classlist{$student};                  $$userdata{$student} = $$classlist{$student};
             }              }
         }          }
     }      }
     if ((@{$roles} > 0) && (@{$roles} ne "st")) {      if ((@{$roles} > 1) || ((@{$roles} == 1) && ($$roles[0] ne "st"))) {
         my @coursepersonnel = &Apache::lonnet::getkeys('nohist_userroles',$cdom,$cnum);          my @coursepersonnel = &Apache::lonnet::getkeys('nohist_userroles',$cdom,$cnum);
         foreach my $person (@coursepersonnel) {          foreach my $person (@coursepersonnel) {
             my $match = 0;              my $match = 0;
             my ($role,$user) = ($person =~ /^([^:]*):([^:]+:[^:]+)/);              my $secmatch = 0;
               my ($role,$user,$usec) = ($person =~ /^([^:]*):([^:]+:[^:]+):([^:]*)/);
             $user =~ s/:$//;              $user =~ s/:$//;
             if (($role) && (grep(/^\Q$role\E$/,@{$roles}))) {              if (($role) && (grep(/^\Q$role\E$/,@{$roles}))) {
                 my ($uname,$udom,$usec) = split(/:/,$user);                  my ($uname,$udom) = split(/:/,$user);
                 if ($usec ne '' && (ref($sections) eq 'ARRAY') &&                   if ((ref($sections) eq 'ARRAY') && (@{$sections} > 0)) {
     @{$sections} > 0) {                      if (grep/^all$/,@{$sections}) {
     unless(grep(/^\Q$usec\E$/,@{$sections})) {                          $secmatch = 1;
  next;                      } elsif ($usec eq '') {
     }                          if (grep/^none$/,@{$sections}) {
                               $secmatch = 1;
                           }
                       } else {
                           if (grep(/^\Q$usec\E$/,@{$sections})) {
                               $secmatch = 1;
                           }
                       }
                       if (!$secmatch) {
                           next;
                       }
                 }                  }
                 if ($uname ne '' && $udom ne '') {                  if ($uname ne '' && $udom ne '') {
                     my $status = &check_user_status($udom,$uname,$cdom,$cnum,$role);                      my $status = &check_user_status($udom,$uname,$cdom,$cnum,$role,
                                                       $usec);
                     foreach my $type (keys(%{$types})) {                       foreach my $type (keys(%{$types})) { 
                         if ($status eq $type) {                          if ($status eq $type) {
                             @{$$users{$role}{$user}} = $type;                              @{$$users{$role}{$user}} = $type;
                             $match = 1;                              $match = 1;
                         }                          }
                     }                      }
                     if ($match && defined($userdata) &&                      if (($match) && (ref($userdata) eq 'HASH') &&
                         !exists($$userdata{$uname.':'.$udom})) {                          (!exists($$userdata{$uname.':'.$udom}))) {
  &get_user_info($udom,$uname,\%idx,$userdata);   &get_user_info($udom,$uname,\%idx,$userdata);
                     }                      }
                 }                  }
Line 3947  sub get_user_info { Line 4172  sub get_user_info {
     return;      return;
 }  }
   
   sub get_secgrprole_info {
       my ($cdom,$cnum,$needroles,$type)  = @_;
       my %sections_count = &get_sections($cdom,$cnum);
       my @sections =  (sort {$a <=> $b} keys(%sections_count));
       my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
       my @groups = sort(keys(%curr_groups));
       my $allroles = [];
       my $rolehash;
       my $accesshash = {
                        active => 'Currently has access',
                        future => 'Will have future access',
                        previous => 'Previously had access',
                     };
       if ($needroles) {
           $rolehash = {'all' => 'all'};
           my %user_roles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
    if (&Apache::lonnet::error(%user_roles)) {
       undef(%user_roles);
    }
           foreach my $item (keys(%user_roles)) {
               my ($role)=split(/\:/,$item,2);
               if ($role eq 'cr') { next; }
               if ($role =~ /^cr/) {
                   $$rolehash{$role} = (split('/',$role))[3];
               } else {
                   $$rolehash{$role} = &Apache::lonnet::plaintext($role,$type);
               }
           }
           foreach my $key (sort(keys(%{$rolehash}))) {
               push(@{$allroles},$key);
           }
           push (@{$allroles},'st');
           $$rolehash{'st'} = &Apache::lonnet::plaintext('st',$type);
       }
       return (\@sections,\@groups,$allroles,$rolehash,$accesshash);
   }
   
 =pod  =pod
   
 =item * get_unprocessed_cgi($query,$possible_names)  =item * get_unprocessed_cgi($query,$possible_names)
Line 4962  sub restore_course_settings { Line 5224  sub restore_course_settings {
 ############################################################  ############################################################
 ############################################################  ############################################################
   
 sub propath {  sub course_type {
     my ($udom,$uname)=@_;      my ($cid) = @_;
     $udom=~s/\W//g;      if (!defined($cid)) {
     $uname=~s/\W//g;          $cid = $env{'request.course.id'};
     my $subdir=$uname.'__';      }
     $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/;      if (defined($env{'course.'.$cid.'.type'})) {
     my $proname="$Apache::lonnet::perlvar{'lonUsersDir'}/$udom/$subdir/$uname";          return $env{'course.'.$cid.'.type'};
     return $proname;      } else {
 }           return 'Course';
       }
   }
   
   sub group_term {
       my $crstype = &course_type();
       my %names = (
                     'Course' => 'group',
                     'Group' => 'team',
                   );
       return $names{$crstype};
   }
   
 sub icon {  sub icon {
     my ($file)=@_;      my ($file)=@_;

Removed from v.1.375  
changed lines
  Added in v.1.417


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