Diff for /loncom/interface/lonpickcourse.pm between versions 1.93.2.2 and 1.102

version 1.93.2.2, 2010/08/20 20:14:03 version 1.102, 2011/05/27 14:39:53
Line 140  sub handler { Line 140  sub handler {
 # ------------------------------------------ Display of filters to limit search  # ------------------------------------------ Display of filters to limit search
     my $filter = {};      my $filter = {};
     my $action = '/adm/pickcourse';      my $action = '/adm/pickcourse';
     my ($numtitles,$showroles,$nohost);      my ($numtitles,$showroles,$nohost,@codetitles);
     if (!$onlyown) {      if (!$onlyown) {
         my $filterlist = ['domainfilter'];          my $filterlist = ['domainfilter'];
           # created filter for DCs only
         if ($env{'user.adv'} && $env{'form.domainfilter'} &&          if ($env{'user.adv'} && $env{'form.domainfilter'} &&
             exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'})              exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'})
             && $env{'form.form'} ne 'portform') {              && $env{'form.form'} ne 'portform') {
Line 152  sub handler { Line 153  sub handler {
             }              }
         }          }
         push(@{$filterlist},('descriptfilter','instcodefilter'));          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 177  sub handler { Line 177  sub handler {
   
         $r->print(&build_filters($filterlist,$type,$roleelement,$multelement,          $r->print(&build_filters($filterlist,$type,$roleelement,$multelement,
                                  $filter,$action,\$numtitles,undef,$cloneruname,                                   $filter,$action,\$numtitles,undef,$cloneruname,
                                  $clonerudom,$typeelement));                                   $clonerudom,$typeelement,\@codetitles));
     }      }
   
 # ---------------------------------------------------------------- Get the data  # ---------------------------------------------------------------- Get the data
Line 191  sub handler { Line 191  sub handler {
             }              }
         }          }
         my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles,          my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles,
                                       $cloneruname,$clonerudom,$domcloner);                                        $cloneruname,$clonerudom,$domcloner,\@codetitles);
         if ($nohost) {          if ($nohost) {
             $r->print ('<span class="LC_warning">'.              $r->print ('<span class="LC_warning">'.
                        &mt('User does not exist - username: [_1], domain: [_2].',                         &mt('User does not exist - username: [_1], domain: [_2].',
Line 418  sub display_matched_courses { Line 418  sub display_matched_courses {
                             $canclone = 1;                              $canclone = 1;
                         }                          }
                     }                      }
                     unless ($canclone) {                      unless ($canclone) { 
                         if ($cc_cloneable{$cnum.':'.$cdom}) {                          if ($cc_cloneable{$cnum.':'.$cdom}) {
                             $canclone = 1;                              $canclone = 1;
                         }                          }
Line 439  sub display_matched_courses { Line 439  sub display_matched_courses {
                         }                          }
                     }                      }
                 }                  }
                 push(@owners,&unescape($courses{$course}{'owner'}));                  push(@owners,$courses{$course}{'owner'});
                 if (ref($courses{$course}{'co-owners'}) eq 'ARRAY') {                  if ($courses{$course}{'co-owners'} ne '') {
                     foreach my $item (@{$courses{$course}{'co-owners'}}) {                      foreach my $item (split(/,/,$courses{$course}{'co-owners'})) {
                         push(@owners,&unescape($item));                          push(@owners,$item);
                     }                      }
                 }                  }
             } else {              } else {
Line 543  sub multiples_tag { Line 543  sub multiples_tag {
   
 sub build_filters {  sub build_filters {
     my ($filterlist,$type,$roleelement,$multelement,$filter,$action,      my ($filterlist,$type,$roleelement,$multelement,$filter,$action,
         $numtitlesref,$caller,$cloneruname,$clonerudom,$typeelement) = @_;          $numtitlesref,$caller,$cloneruname,$clonerudom,$typeelement,$codetitlesref) = @_;
     my ($list,$formname,$fixeddom,$codedom,$jscript);      my ($list,$formname,$fixeddom,$codedom,$jscript);
     $codedom = $env{'request.role.domain'};      $codedom = $env{'request.role.domain'};
     if (defined($env{'form.form'})) {      if (defined($env{'form.form'})) {
Line 551  sub build_filters { Line 551  sub build_filters {
     } else {      } else {
         $formname = $caller;          $formname = $caller;
     }      }
     my $onchange;      my $onchange = 'javascript:updateFilters(this)';
     unless ($env{'form.interface'} eq 'textual') {  
         $onchange = 'javascript:updateFilters(this)';  
     }  
     my ($domainselectform,$sincefilterform,$createdfilterform,      my ($domainselectform,$sincefilterform,$createdfilterform,
         $ownerdomselectform,$persondomselectform,$instcodeform,          $ownerdomselectform,$persondomselectform,$instcodeform,
         $typeselectform,$instcodetitle);          $typeselectform,$instcodetitle);
Line 619  sub build_filters { Line 616  sub build_filters {
         }          }
     }      }
   
   
     # last course activity filter and selection      # last course activity filter and selection
     $sincefilterform = &timebased_select_form('sincefilter',$filter);      $sincefilterform = &timebased_select_form('sincefilter',$filter);
   
Line 630  sub build_filters { Line 626  sub build_filters {
   
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                 'cac' => "$type Activity",                  'cac' => "$type Activity",
                 'ccr' => "$type Created",                  'ccr' => "$type Created", 
                 'cde' => "$type Title",                  'cde' => "$type Title",
                 'cdo' => "$type Domain",                  'cdo' => "$type Domain",
                 'ins' => 'Institutional Code',                  'ins' => 'Institutional Code',
Line 681  sub build_filters { Line 677  sub build_filters {
                 || ($formname eq 'modifycourse')) {                  || ($formname eq 'modifycourse')) {
                 $officialjs = 1;                  $officialjs = 1;
                 ($instcodeform,$jscript,$$numtitlesref) =                   ($instcodeform,$jscript,$$numtitlesref) = 
                     &instcode_selectors($codedom,'filterpicker',$officialjs);                      &instcode_selectors($codedom,'filterpicker',$officialjs,$codetitlesref);
                 if ($jscript) {                  if ($jscript) {
                     $jscript = '<script type="text/javascript" language="Javascript">'.                      $jscript = '<script type="text/javascript" language="Javascript">'.
                                $jscript.'</script>'."\n";                                 $jscript.'</script>'."\n";
Line 816  sub timebased_select_form { Line 812  sub timebased_select_form {
         $filter->{$item} = $env{'form.'.$item};          $filter->{$item} = $env{'form.'.$item};
         $filter->{$item} =~ s/[^\d-]//g;          $filter->{$item} =~ s/[^\d-]//g;
         if (!$filter->{$item}) { $filter->{$item}=-1; }          if (!$filter->{$item}) { $filter->{$item}=-1; }
         return &Apache::loncommon::select_form(          return &Apache::loncommon::select_form( 
                             $filter->{$item},                              $filter->{$item},
                             $item,                              $item,
                             (      '-1' => '',                              {      '-1' => '',
                                 '86400' => &mt('today'),                                  '86400' => &mt('today'),
                                '604800' => &mt('last week'),                                 '604800' => &mt('last week'),
                               '2592000' => &mt('last month'),                                '2592000' => &mt('last month'),
Line 828  sub timebased_select_form { Line 824  sub timebased_select_form {
                              '31104000' => &mt('last year'),                               '31104000' => &mt('last year'),
                     'select_form_order' =>                      'select_form_order' =>
                            ['-1','86400','604800','2592000','7776000',                             ['-1','86400','604800','2592000','7776000',
                             '15552000','31104000']));                              '15552000','31104000']});
     }      }
 }  }
   
 sub get_coordinator_cloneable {  sub get_coordinator_cloneable {
     my ($cloneruname,$clonerudom,$type) = @_;      my ($cloneruname,$clonerudom,$type) = @_;
     if (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') {      if (($cloneruname!~/\w/) || ($clonerudom!~/\w/)) {
           my $warning = '<div class="LC_warning">'.&mt('Intended course owner not specified').
                      '</div>';
           return ('',$warning);
       } elsif (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') {
         my $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist').          my $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist').
                    '</div>';                     '</div>';
         return ('',$warning);          return ('',$warning);
Line 857  sub get_coordinator_cloneable { Line 857  sub get_coordinator_cloneable {
 }  }
   
 sub instcode_selectors {  sub instcode_selectors {
     my ($codedom,$formname,$officialjs) = @_;      my ($codedom,$formname,$officialjs,$codetitles) = @_;
     my ($output,@codetitles,%cat_titles,%cat_order,%cat_items);      my ($output,%cat_titles,%cat_order,%cat_items);
     my ($jscript,$totcodes,$numtitles,$lasttitle) =      my ($jscript,$totcodes,$numtitles,$lasttitle) =
         &Apache::courseclassifier::instcode_selectors_data($codedom,$formname,          &Apache::courseclassifier::instcode_selectors_data($codedom,$formname,
                            \%cat_items,\@codetitles,\%cat_titles,\%cat_order,$officialjs);                             \%cat_items,$codetitles,\%cat_titles,\%cat_order,$officialjs);
     if ($numtitles > 0) {      if ($numtitles > 0) {
         my $official = ' checked="checked" ';          my $official = ' checked="checked" ';
         my $unofficial = '';          my $unofficial = '';
Line 875  sub instcode_selectors { Line 875  sub instcode_selectors {
                    '<input type="radio" name="official" value="off"'.$unofficial.                     '<input type="radio" name="official" value="off"'.$unofficial.
                    ' onclick="toggleOfficial();" />'.&mt('No').'</label></span><br />'.                     ' onclick="toggleOfficial();" />'.&mt('No').'</label></span><br />'.
                    &Apache::courseclassifier::build_instcode_selectors($numtitles,                     &Apache::courseclassifier::build_instcode_selectors($numtitles,
                    $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order)."\n".                     $lasttitle,\%cat_items,$codetitles,\%cat_titles,\%cat_order)."\n".
                    '<input type="hidden" name="numtitles" value="'.$numtitles.'" />'."\n".                     '<input type="hidden" name="numtitles" value="'.$numtitles.'" />'."\n".
                    '<input type="hidden" name="state" value="listing" />'."\n";                     '<input type="hidden" name="state" value="listing" />'."\n";
     
Line 884  sub instcode_selectors { Line 884  sub instcode_selectors {
 }  }
   
 sub search_courses {  sub search_courses {
     my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner) = @_;      my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner,$codetitles) = @_;
     my (%courses,%showcourses,$cloner,$ccrole);      my (%courses,%showcourses,$cloner,$ccrole);
     if ($type eq 'Community') {      if ($type eq 'Community') {
         $ccrole = 'co';          $ccrole = 'co';
Line 905  sub search_courses { Line 905  sub search_courses {
             }              }
         }          }
         my $now = time;          my $now = time;
         my $timefilter =          my $timefilter = 
            ($filter->{'sincefilter'}==-1?1:$now-$filter->{'sincefilter'});             ($filter->{'sincefilter'}==-1?1:$now-$filter->{'sincefilter'});
         my ($createdbefore,$createdafter);          my ($createdbefore,$createdafter);
         if (($filter->{'createdfilter'} ne '') && ($filter->{'createdfilter'} !=-1)) {          if (($filter->{'createdfilter'} ne '') && ($filter->{'createdfilter'} !=-1)) {
Line 916  sub search_courses { Line 916  sub search_courses {
         if ($numtitles) {          if ($numtitles) {
             if ($env{'form.official'} eq 'on') {              if ($env{'form.official'} eq 'on') {
                 $instcodefilter =                   $instcodefilter = 
                     &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles);                      &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles,$codetitles);
                 $regexpok = 1;                  $regexpok = 1;
             } elsif ($env{'form.official'} eq 'off') {              } elsif ($env{'form.official'} eq 'off') {
                 $instcodefilter = &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles);                  $instcodefilter = &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles,$codetitles);
                 unless ($instcodefilter eq '') {                  unless ($instcodefilter eq '') {
                     $regexpok = -1;                      $regexpok = -1;
                 }                  }
Line 1213  Side Effects: None Line 1213  Side Effects: None
   
 =item *  =item *
 X<build_filters()>  X<build_filters()>
 B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action,$numfiltersref,$caller,$cloneruname,$clonerudom,$typeelem)>:  B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action,$numfiltersref,$caller,$cloneruname,$clonerudom,$typeelem,$codetitlesref>:
   
   
 Input: 11 - anonymous array of search criteria; course type; $roleelement ; $multelement ; anonymous hash of criteria and their values; form action; ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number); caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm), username and domain of new course owner who wants to clone, $tyepelem   Input: 12 - anonymous array of search criteria; course type; $roleelement ; $multelement ; anonymous hash of criteria and their values; form action; ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number); caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm); username and domain of new course owner who wants to clone, $typeelem; reference to array of titles of components in institutional codes (official courses). 
   
 Output: 1 - $output - HTML for display of search criteria, and hidden form elements.   Output: 1 - $output - HTML for display of search criteria, and hidden form elements. 
   
Line 1225  Side Effects: None Line 1225  Side Effects: None
 =item *  =item *
 X<search_courses()>  X<search_courses()>
 B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,  B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,
                  $domcloner)>:                   $domcloner,$codetitles)>:
   
   
 Input: 8 -  request object, course type, search scope: only courses in which user has active role (1), or any course (0); anonymous hash of criteria and their values; for institutional codes - number of categories; optional username of new course owner, optional domain of new course owner). Seventh and eighth needed when search is for courses to clone from course request form, or course creation form (DC). Optional "domcloner" flag (has value=1 if user has ccc priv in domain being filtered by (used when DC is using course creation form).  Input: 9 -  request object, course type, search scope: only courses in which user has active role (1), or any course (0); anonymous hash of criteria and their values; for institutional codes - number of categories; optional username of new course owner, optional domain of new course owner). Seventh and eighth needed when search is for courses to clone from course request form, or course creation form (DC). Optional "domcloner" flag (has value=1 if user has ccc priv in  
   domain being filtered by (used when DC is using course creation form). Ninth is reference to array of titles of components in institutional codes (official courses).
   
 Output: 1 - %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type.  Output: 1 - %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type.
   
Line 1288  javascript functions used when user sele Line 1289  javascript functions used when user sele
   
 =item  =item
   
 (g) Scantron Operator uploading a scantron file to a course - course number is written to visible form element in opener window. Child window closes.  (g) Bubblesheet Scanning Operator uploading a bubblesheet file to a course - course number is written to visible form element in opener window. Child window closes.
   
 =item  =item
   

Removed from v.1.93.2.2  
changed lines
  Added in v.1.102


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