Diff for /loncom/interface/lonpickcourse.pm between versions 1.91 and 1.94

version 1.91, 2009/12/02 18:33:27 version 1.94, 2010/03/16 05:11:40
Line 79  sub handler { Line 79  sub handler {
         $typeelement = '<input type="hidden" name="typeelement" value="'.$env{'form.typeelement'}.'" />';          $typeelement = '<input type="hidden" name="typeelement" value="'.$env{'form.typeelement'}.'" />';
     }      }
   
     # if called when a DC is creating a course      # if called when a DC is creating a course for another user.
     if ($env{'form.form'} eq 'ccrs') {      if ($env{'form.form'} eq 'ccrs') {
         ($cloneruname,$clonerudom) = ($env{'form.cloner'} =~ /^($match_username):($match_domain)$/);          ($cloneruname,$clonerudom) = ($env{'form.cloner'} =~ /^($match_username):($match_domain)$/);
     }      }
Line 142  sub handler { Line 142  sub handler {
     my $action = '/adm/pickcourse';      my $action = '/adm/pickcourse';
     my ($numtitles,$showroles,$nohost);      my ($numtitles,$showroles,$nohost);
     if (!$onlyown) {      if (!$onlyown) {
         my $filterlist = ['domainfilter','descriptfilter',          my $filterlist = ['domainfilter'];
                           'instcodefilter'];          # created filter for DCs only
           if ($env{'user.adv'} && $env{'form.domainfilter'} &&
               exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'})) {
               my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'form.domainfilter'});
               if ($loncaparev ne 'unknown_cmd') {
                   push(@{$filterlist},'createdfilter');
               }
           }
           push(@{$filterlist},('descriptfilter','instcodefilter'));
         if ($env{'form.form'} eq 'rules') {          if ($env{'form.form'} eq 'rules') {
             push(@{$filterlist},'personfilter');              push(@{$filterlist},'personfilter');
             if (($env{'form.personfilter'} ne '') && ($env{'form.persondomfilter'} ne '')) {              if (($env{'form.personfilter'} ne '') && ($env{'form.persondomfilter'} ne '')) {
Line 306  sub display_matched_courses { Line 314  sub display_matched_courses {
             }              }
             my $cctitle = &Apache::lonnet::plaintext($ccrole,$type);              my $cctitle = &Apache::lonnet::plaintext($ccrole,$type);
             my $dctitle = &Apache::lonnet::plaintext('dc');              my $dctitle = &Apache::lonnet::plaintext('dc');
             my $ccrolechk = ' checked="checked" ';              my $ccrolechk = ' ';
             my $menuchk = ' ';              my $menuchk = ' checked="checked" ';
             if ($env{'form.prevphase'} ne '') {  
                  $ccrolechk = ' ';  
                  $menuchk = ' checked="checked" ';  
             }  
             $r->print(              $r->print(
                 '<fieldset>'                  '<fieldset>'
                .'<legend>'.&mt('Action').'</legend>'                 .'<legend>'.&mt('Action').'</legend>'
Line 380  sub display_matched_courses { Line 384  sub display_matched_courses {
         }          }
         $r->print(&Apache::loncommon::end_data_table_header_row());          $r->print(&Apache::loncommon::end_data_table_header_row());
     }      }
       my %cc_cloneable;
       if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {
           my ($coord_cloneable,$warning) =
               &get_coordinator_cloneable($cloneruname,$clonerudom,$type);
           if ($coord_cloneable) {
               map {$cc_cloneable{$_} = 1;} split('&',$coord_cloneable);
           }
       }
     foreach my $description (sort { lc($a) cmp lc($b) } (keys(%by_descrip))) {      foreach my $description (sort { lc($a) cmp lc($b) } (keys(%by_descrip))) {
         foreach my $course (@{$by_descrip{$description}}) {          foreach my $course (@{$by_descrip{$description}}) {
             $r->print(&Apache::loncommon::start_data_table_row());              $r->print(&Apache::loncommon::start_data_table_row());
Line 392  sub display_matched_courses { Line 404  sub display_matched_courses {
                 $instcode = $courses{$course}{'inst_code'};                  $instcode = $courses{$course}{'inst_code'};
                 $ttype = $courses{$course}{'type'};                  $ttype = $courses{$course}{'type'};
                 if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {                  if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {
                     my $cloners = $courses{$course}{'cloners'};                      if ($cc_cloneable{$courses{$course}{'cnum'}.':'.$courses{$course}{'domain'}}) {
                     if ($cloners ne '') {                           $canclone = 1;
                         my @cloneable = split(',',$cloners);                      }
                         if (grep(/^\*$/,@cloneable)) {                      unless ($canclone) {
                             $canclone = 1;                          my $cloners = $courses{$course}{'cloners'};
                         }                          if ($cloners ne '') { 
                         if (grep(/^\*:\Q$env{'form.clonerudom'}\E$/,@cloneable)) {                              my @cloneable = split(',',$cloners);
                             $canclone = 1;                              if (grep(/^\*$/,@cloneable)) {
                         }                                  $canclone = 1;
                         if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) {                              }
                             $canclone = 1;                              if (grep(/^\*:\Q$env{'form.clonerudom'}\E$/,@cloneable)) {
                                   $canclone = 1;
                               }
                               if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) {
                                   $canclone = 1;
                               }
                         }                          }
                     }                      }
                 }                  }
Line 417  sub display_matched_courses { Line 434  sub display_matched_courses {
                 ($descr,$instcode,$singleowner,$ttype)=split(/:/,$courses{$course});                  ($descr,$instcode,$singleowner,$ttype)=split(/:/,$courses{$course});
                 push(@owners,&unescape($singleowner));                  push(@owners,&unescape($singleowner));
             }              }
             my $ownerstr = join(', ',@owners);              my $ownerstr = join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } @owners);
             $r->print('<td>'.&course_chooser($multiple,$cdom,$cnum,$cleandesc,$canclone).'</td>');              $r->print('<td>'.&course_chooser($multiple,$cdom,$cnum,$cleandesc,$canclone).'</td>');
             $r->print('<td>'.$description.'</td>');              $r->print('<td>'.$description.'</td>');
             $r->print('<td>');              $r->print('<td>');
Line 522  sub build_filters { Line 539  sub build_filters {
     unless ($env{'form.interface'} eq 'textual') {      unless ($env{'form.interface'} eq 'textual') {
         $onchange = 'javascript:updateFilters(this)';          $onchange = 'javascript:updateFilters(this)';
     }      }
     my ($domainselectform,$sincefilterform,$ownerdomselectform,$persondomselectform,      my ($domainselectform,$sincefilterform,$createdfilterform,
         $instcodeform,$typeselectform,$instcodetitle);          $ownerdomselectform,$persondomselectform,$instcodeform,
           $typeselectform,$instcodetitle);
     foreach my $item (@{$filterlist}) {      foreach my $item (@{$filterlist}) {
         $filter->{$item} = $env{'form.'.$item};          $filter->{$item} = $env{'form.'.$item};
         if ($item ne 'descriptfilter' && $item ne 'instcodefilter') {          if ($item ne 'descriptfilter' && $item ne 'instcodefilter') {
Line 586  sub build_filters { Line 604  sub build_filters {
     }      }
   
     # last course activity filter and selection      # last course activity filter and selection
     $filter->{'sincefilter'} = $env{'form.sincefilter'};      $sincefilterform = &timebased_select_form('sincefilter',$filter);
     $filter->{'sincefilter'} =~ s/[^\d-]//g;  
     if (!$filter->{'sincefilter'}) { $filter->{'sincefilter'}=-1; }      # course created filter and selection
     $sincefilterform=&Apache::loncommon::select_form(      if (exists($filter->{'createdfilter'})) {
         $filter->{'sincefilter'},          $createdfilterform = &timebased_select_form('createdfilter',$filter);
         'sincefilter',      }
         (      '-1' => '',  
             '86400' => &mt('today'),  
            '604800' => &mt('last week'),  
           '2592000' => &mt('last month'),  
           '7776000' => &mt('last three months'),  
          '15552000' => &mt('last six months'),  
          '31104000' => &mt('last year'),  
          'select_form_order' =>  
             ['-1','86400','604800','2592000','7776000',  
              '15552000','31104000']));  
   
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                 'cac' => "$type Activity",                  'cac' => "$type Activity",
                   'ccr' => "$type Created", 
                 'cde' => "$type Title",                  'cde' => "$type Title",
                 'cdo' => "$type Domain",                  'cdo' => "$type Domain",
                 'ins' => 'Institutional Code',                  'ins' => 'Institutional Code',
Line 710  $typeelement Line 719  $typeelement
                   .$sincefilterform                    .$sincefilterform
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
     }      }
       if ($createdfilterform) {
           $output .= &Apache::lonhtmlcommon::row_title($lt{'ccr'})
                     .$createdfilterform
                     .&Apache::lonhtmlcommon::row_closure();
       }
     if ($domainselectform) {      if ($domainselectform) {
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})          $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})
                   .$domainselectform                    .$domainselectform
Line 762  $typeelement Line 776  $typeelement
                   .&Apache::lonhtmlcommon::row_closure(1);                    .&Apache::lonhtmlcommon::row_closure(1);
     }      }
     $output .= &Apache::lonhtmlcommon::end_pick_box().'<p>';      $output .= &Apache::lonhtmlcommon::end_pick_box().'<p>';
     my $warning;      my ($coord_cloneable,$warning);
     if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {      if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {
         my $cloneruhome=&Apache::lonnet::homeserver($cloneruname,$clonerudom);          ($coord_cloneable,$warning) = 
         my $cc_clone;              &get_coordinator_cloneable($cloneruname,$clonerudom,$type);
         if ($cloneruhome eq 'no_host') {          if ($env{'form.form'} eq 'ccrs') {
             $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist').              $output .= '<input type="hidden" name="cloner" value="'.$env{'form.cloner'}.'" />'."\n";
                        '</div>';  
         } else {  
             my $ccrole;  
             if ($type eq 'Community') {  
                 $ccrole = 'co';  
             } elsif ($type eq 'Course') {  
                 $ccrole = 'cc';  
             }  
             if ($env{'form.form'} eq 'ccrs') {  
                 $output .= '<input type="hidden" name="cloner" value="'.$env{'form.cloner'}.'" />'."\n";  
             }  
             my %ccroles = &Apache::lonnet::get_my_roles($cloneruname,$clonerudom,  
                                                         'userroles',['active'], [$ccrole]);  
             foreach my $key (sort(keys(%ccroles))) {  
                 my ($cnum,$cdom,$role) = split(':',$key);  
                 $cc_clone .= $cdom.':'.$cnum.'&';  
             }  
             $cc_clone =~ s/\&$//;  
         }          }
         if ($cc_clone ne '') {          if ($coord_cloneable) {
             $output .= '<input type="hidden" name="cc_clone" value="'.$cc_clone.'" />';              $output .= '<input type="hidden" name="cc_clone" value="'.$coord_cloneable.'" />';
         }          }
     }      }
     $output .= '<input type="hidden" name="updater" value="">'."\n".      $output .= '<input type="hidden" name="updater" value="">'."\n".
Line 797  $typeelement Line 793  $typeelement
     return $jscript.$warning.$output;      return $jscript.$warning.$output;
 }  }
   
   sub timebased_select_form {
       my ($item,$filter) = @_;
       if (ref($filter) eq 'HASH') {
           $filter->{$item} = $env{'form.'.$item};
           $filter->{$item} =~ s/[^\d-]//g;
           if (!$filter->{$item}) { $filter->{$item}=-1; }
           return &Apache::loncommon::select_form( 
                               $filter->{$item},
                               $item,
                               (      '-1' => '',
                                   '86400' => &mt('today'),
                                  '604800' => &mt('last week'),
                                 '2592000' => &mt('last month'),
                                 '7776000' => &mt('last three months'),
                                '15552000' => &mt('last six months'),
                                '31104000' => &mt('last year'),
                       'select_form_order' =>
                              ['-1','86400','604800','2592000','7776000',
                               '15552000','31104000']));
       }
   }
   
   sub get_coordinator_cloneable {
       my ($cloneruname,$clonerudom,$type) = @_;
       if (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') {
           my $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist').
                      '</div>';
           return ('',$warning);
       } else {
           my ($cc_clone,$ccrole);
           if ($type eq 'Community') {
               $ccrole = 'co';
           } elsif ($type eq 'Course') {
               $ccrole = 'cc';
           }
           my %ccroles = &Apache::lonnet::get_my_roles($cloneruname,$clonerudom,
                                                       'userroles',['active'], [$ccrole]);
           foreach my $key (sort(keys(%ccroles))) {
               my ($cnum,$cdom,$role) = split(':',$key);
               $cc_clone .= $cdom.':'.$cnum.'&';
           }
           $cc_clone =~ s/\&$//;
           return ($cc_clone);
       }
   }
   
 sub instcode_selectors {  sub instcode_selectors {
     my ($codedom,$formname,$officialjs) = @_;      my ($codedom,$formname,$officialjs) = @_;
     my ($output,@codetitles,%cat_titles,%cat_order,%cat_items);      my ($output,@codetitles,%cat_titles,%cat_order,%cat_items);
Line 845  sub search_courses { Line 887  sub search_courses {
                 $filter->{$item}='.';                  $filter->{$item}='.';
             }              }
         }          }
           my $now = time;
         my $timefilter =           my $timefilter = 
            ($filter->{'sincefilter'}==-1?1:time-$filter->{'sincefilter'});             ($filter->{'sincefilter'}==-1?1:$now-$filter->{'sincefilter'});
           my ($createdbefore,$createdafter);
           if (($filter->{'createdfilter'} ne '') && ($filter->{'createdfilter'} !=-1)) {
               $createdbefore = $now;
               $createdafter = $now-$filter->{'createdfilter'};
           }
         my ($instcodefilter,$regexpok);          my ($instcodefilter,$regexpok);
         if ($numtitles) {          if ($numtitles) {
             if ($env{'form.official'} eq 'on') {              if ($env{'form.official'} eq 'on') {
Line 877  sub search_courses { Line 925  sub search_courses {
                                           $filter->{'coursefilter'},                                            $filter->{'coursefilter'},
                                           undef,undef,$type,$regexpok,undef,undef,                                            undef,undef,$type,$regexpok,undef,undef,
                                           undef,undef,$cloner,$env{'form.cc_clone'},                                            undef,undef,$cloner,$env{'form.cc_clone'},
                                           $filter->{'cloneableonly'});                                            $filter->{'cloneableonly'},
                                             $createdbefore,$createdafter);
         if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) {          if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) {
             my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'},              my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'},
                                                          $filter->{'persondomfilter'},                                                           $filter->{'persondomfilter'},

Removed from v.1.91  
changed lines
  Added in v.1.94


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