Diff for /loncom/interface/loncommon.pm between versions 1.374 and 1.380

version 1.374, 2006/05/17 23:25:56 version 1.380, 2006/06/08 14:29:21
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 717  sub help_open_menu { Line 730  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;color=$color&amp;function=$function&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;color=$color&amp;function=$function&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 816  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 2813  sub bodytag { Line 2826  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 2878  ENDROLE Line 2899  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 3112  form, .inline { display: inline; } Line 3134  form, .inline { display: inline; }
   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, table#LC_nav_location {
   width: 100%;    width: 100%;
   background: $pgbg;    background: $pgbg;
   border: 0px;    border: 0px;
   border-spacing: 2px 1px;    border-spacing: 2px 2px;
   padding: 0px;    padding: 0px;
   margin: 0px;    margin: 0px;
   border-collapse: separate;    border-collapse: separate;
Line 3124  table#LC_top_nav, table#LC_menubuttons, Line 3146  table#LC_top_nav, table#LC_menubuttons,
 table#LC_title_bar {  table#LC_title_bar {
   width: 100%;    width: 100%;
   border: 0;    border: 0;
   border-spacing: 0px 1px;    border-spacing: 0px 0px;
     padding: 0px 2px 0px 2px;
     background: $pgbg;
     font-family: $sans;
     border-collapse: separate;
   }
   table#LC_breadcrumbs {
     width: 100%;
     border: 0;
     border-spacing: 0px;
   padding: 0px 2px 0px 2px;    padding: 0px 2px 0px 2px;
   background: $pgbg;    background: $pgbg;
   font-family: $sans;    font-family: $sans;
Line 3709  specific user. Roles can be active, prev Line 3740  specific user. Roles can be active, prev
   
 Inputs:   Inputs: 
 user's domain, user's username, course's domain,  user's domain, user's username, course's domain,
 course's number, optional section/group.  course's number, optional section ID.
   
 Outputs:  Outputs:
 role status: active, previous or future.   role status: active, previous or future. 
Line 3815  sub get_sections { Line 3846  sub get_sections {
 }  }
   
 ###############################################  ###############################################
                                                                                     
 =pod  
                                                                                     
 =item coursegroups  
   
 Retrieve information about groups in a course,  
   
 Input:  
 1. Optional course domain  
 2. Optional course number  
 3. Optional group name  
   
 Course domain and number will be taken from user's  
 environment if not supplied. Optional group name will'  
 be passed to lonnet::get_coursegroups() as a regexp to  
 use in the call to the dump function.  
   
 Output  
 Returns hash of groups in the course (subject to the  
 optional group name filter). In the hash, the keys are  
 group names, and their corresponding values  
 are scalars containing group information in XML. This  
 can be sent to &get_group_settings() to be parsed.  
   
 Side effects:  
 None.  
 =cut   
   
 ###############################################  
   
 sub coursegroups {  
     my ($cdom,$cnum,$group) = @_;  
     if (!defined($cdom) || !defined($cnum)) {  
         my $cid =  $env{'request.course.id'};  
   
  return if (!defined($cid));  
   
         $cdom = $env{'course.'.$cid.'.domain'};  
         $cnum = $env{'course.'.$cid.'.num'};  
     }  
     my %curr_groups = &Apache::lonnet::get_coursegroups($cdom,$cnum,$group);  
     my ($tmp) = keys(%curr_groups);  
     if ($tmp=~/^(con_lost|no_such_host|error: [^2] )/) {  
  undef(%curr_groups);  
  &logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'.$cdom);  
     } elsif ($tmp=~/^error: 2 /) {  
  undef(%curr_groups);  
     }  
     return %curr_groups;  
 }  
   
 ###############################################  
   
 =pod  
   
 =item get_group_settings  
   
 Uses TokeParser to extract group information from the  
 XML used to describe course groups.  
   
 Input:  
 Scalar containing XML  - as retrieved from &coursegroups().  
   
 Output:  
 Hash containing group information as key=values for (a), and  
 hash of hashes for (b)  
   
 Keys (in two categories):  
 (a) groupname, creator, creation, modified, startdate,enddate.  
 Corresponding values are name of the group, creator of the group  
 (username:domain), UNIX time for date group was created, and  
 settings were last modified, and default start and end access  
 times for group members.  
   
 (b) functions returned in hash of hashes.  
 Outer hash key is functions.  
 Inner hash keys are chat,discussion,email,files,homepage,roster.  
 Corresponding values are either on or off, depending on  
 whether this type of functionality is available for the group.  
   
 =cut  
                                                                                    
 ###############################################  
   
 sub get_group_settings {  
     my ($groupinfo)=@_;  
     my $parser=HTML::TokeParser->new(\$groupinfo);  
     my $token;  
     my $tool = '';  
     my $role = '';  
     my %content=();  
     while ($token=$parser->get_token) {  
         if ($token->[0] eq 'S')  {  
             my $entry=$token->[1];  
             if ($entry eq 'functions' || $entry eq 'autosec') {  
                 %{$content{$entry}} = ();  
                 $tool = $entry;  
             } elsif ($entry eq 'role') {  
                 if ($tool eq 'autosec') {  
                     $role = $token->[2]{id};  
                     @{$content{$tool}{$role}} = ();  
                 }  
             } else {  
                 my $value=$parser->get_text('/'.$entry);  
                 if ($entry eq 'name') {  
                     if ($tool eq 'functions') {  
                         my $function = $token->[2]{id};  
                         $content{$tool}{$function} = $value;  
                     }  
                 } elsif ($entry eq 'groupname') {  
                     $content{$entry}=&unescape($value);  
                 } elsif (($entry eq 'roles') || ($entry eq 'types') ||  
                          ($entry eq 'sectionpick') || ($entry eq 'defpriv')) {  
                     push(@{$content{$entry}},$value);  
                 } elsif ($entry eq 'section') {  
                     if ($tool eq 'autosec'  && $role ne '') {  
                         push(@{$content{$tool}{$role}},$value);  
                     }  
                 } else {  
                     $content{$entry}=$value;  
                 }  
             }  
         } elsif ($token->[0] eq 'E') {  
             if ($token->[1] eq 'functions' || $token->[1] eq 'autosec') {  
                 $tool = '';  
             } elsif ($token->[1] eq 'role') {  
                 $role = '';  
             }  
   
         }  
     }  
     return %content;  
 }  
   
 sub check_group_access {  
     my ($group) = @_;  
     my $access = 1;  
     my $now = time;  
     my ($start,$end) = split(/\./,$env{'user.role.gr/'.$env{'request.course,id'}.'/'.$group});  
     if (($end!=0) && ($end<$now)) { $access = 0; }  
     if (($start!=0) && ($start>$now)) { $access=0; }  
     return $access;  
 }  
   
 ###############################################  
   
 =pod  =pod
                                                                                                                                                                   
Line 5107  sub restore_course_settings { Line 4993  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 icon {  sub icon {
     my ($file)=@_;      my ($file)=@_;

Removed from v.1.374  
changed lines
  Added in v.1.380


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