Diff for /loncom/interface/lonpickcourse.pm between versions 1.77 and 1.78

version 1.77, 2009/03/16 16:05:40 version 1.78, 2009/05/01 01:38:20
Line 35  use Apache::loncoursedata; Line 35  use Apache::loncoursedata;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::longroup;  use Apache::longroup;
   use Apache::courseclassifier;
 use LONCAPA;  use LONCAPA;
   
 sub handler {  sub handler {
Line 49  sub handler { Line 50  sub handler {
     &Apache::loncommon::get_unprocessed_cgi      &Apache::loncommon::get_unprocessed_cgi
         ($ENV{'QUERY_STRING'},['domainfilter','form','cnumelement',          ($ENV{'QUERY_STRING'},['domainfilter','form','cnumelement',
        'cdomelement','cnameelement','roleelement',         'cdomelement','cnameelement','roleelement',
                                'multiple','type','setroles']);                                 'multiple','type','setroles','fixeddom']);
   
     my ($type,$title,$jscript,$multelement,$multiple,$roleelement,      my ($type,$title,$jscript,$multelement,$multiple,$roleelement,
         $lastaction,$autosubmit,$submitopener);          $lastaction,$autosubmit,$submitopener);
Line 83  sub handler { Line 84  sub handler {
     }      }
   
     my %loaditem;      my %loaditem;
       if ($env{'form.numtitles'}) {
           $loaditem{'onload'} = 'setElements(); ';
       }
   
     if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) &&       if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) && 
         ($env{'form.pickedcourse'})) {          ($env{'form.pickedcourse'})) {
         $loaditem{'onload'} ="setSections()";              $loaditem{'onload'} .= 'setSections()';
     }      }
     $r->print(&Apache::loncommon::start_page($title,undef,      $r->print(&Apache::loncommon::start_page($title,undef,
      {'add_entries' => \%loaditem,       {'add_entries' => \%loaditem,
Line 117  sub handler { Line 122  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;
     if (!$onlyown) {      if (!$onlyown) {
         my $filterlist = ['domainfilter','descriptfilter',          my $filterlist = ['domainfilter','descriptfilter',
                           'instcodefilter','ownerfilter',                            'instcodefilter','ownerfilter',
Line 127  sub handler { Line 133  sub handler {
             push(@{$filterlist},'coursefilter');              push(@{$filterlist},'coursefilter');
         }          }
         $r->print(&build_filters($filterlist,$type,$roleelement,$multelement,          $r->print(&build_filters($filterlist,$type,$roleelement,$multelement,
                                  $filter,$action));                                   $filter,$action,\$numtitles));
     }      }
   
 # ---------------------------------------------------------------- Get the data  # ---------------------------------------------------------------- Get the data
     if ($env{'form.gosearch'} || $onlyown) {      if ($env{'form.gosearch'} || $onlyown) {
         my %courses = &search_courses($r,$type,$onlyown,$filter);          my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles);
         &display_matched_courses($r,$type,$multiple,$action,%courses);          &display_matched_courses($r,$type,$multiple,$action,%courses);
     }      }
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
Line 348  sub display_matched_courses { Line 354  sub display_matched_courses {
         $r->print('<input type="hidden" name="setroles" value="'.$env{'form.setroles'}.'" />');          $r->print('<input type="hidden" name="setroles" value="'.$env{'form.setroles'}.'" />');
         $r->print('<input type="hidden" name="action" value="rolepicker" />');          $r->print('<input type="hidden" name="action" value="rolepicker" />');
     } elsif ($env{'form.form'} eq 'modifycourse') {      } elsif ($env{'form.form'} eq 'modifycourse') {
         $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','pickedcourse','type','form']));          $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','pickedcourse','type','form','numtitles','state']));
     } else {      } else {
         $r->print('<input type="hidden" name="cnumelement" value="'.          $r->print('<input type="hidden" name="cnumelement" value="'.
                   $env{'form.cnumelement'}.'" />'."\n".                      $env{'form.cnumelement'}.'" />'."\n".  
                   '<input type="hidden" name="cdomelement" value="'.                    '<input type="hidden" name="cdomelement" value="'.
                   $env{'form.cdomelement'}.'" />'."\n");                    $env{'form.cdomelement'}.'" />'."\n");
     }      }
       if ((exists($env{'form.fixeddom'})) && ($env{'form.form'} eq 'rules')) {
           $r->print('<input type="hidden" name="fixeddom" value="'.
                     $env{'form.fixeddom'}.'" />');
       }
       if ($env{'form.numtitles'}) {
           $r->print('<input type="hidden" name="numtitles" value="'.
                     $env{'form.numtitles'}.'" />');
       }
     $r->print("</form>\n");      $r->print("</form>\n");
     return;      return;
 }  }
   
   
 sub multiples_tag {  sub multiples_tag {
     my $jscript = &Apache::loncommon::check_uncheck_jscript();      my $jscript = &Apache::loncommon::check_uncheck_jscript();
     my $multelement = '<input type="hidden" name="multiple" value="1" />';      my $multelement = '<input type="hidden" name="multiple" value="1" />';
Line 368  sub multiples_tag { Line 381  sub multiples_tag {
   
 sub build_filters {  sub build_filters {
     my ($filterlist,$type,$roleelement,$multelement,$filter,$action,      my ($filterlist,$type,$roleelement,$multelement,$filter,$action,
         $caller) = @_;          $numtitlesref) = @_;
     my $list;      my $list;
     my $formname;      my $formname;
       my ($fixeddom,$codedom,$jscript);
     if (defined($env{'form.form'})) {      if (defined($env{'form.form'})) {
          $formname = $env{'form.form'};           $formname = $env{'form.form'};
     } else {  
          $formname = $caller;  
     }      }
     my ($domainselectform,$sincefilterform,$ownerdomselectform,      my ($domainselectform,$sincefilterform,$ownerdomselectform,
         $instcodeform,$typeselectform);          $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 403  sub build_filters { Line 415  sub build_filters {
                 $filter->{$item} ||= $env{'request.role.domain'};                  $filter->{$item} ||= $env{'request.role.domain'};
                 $allow_blank=0;                  $allow_blank=0;
             }              }
             $domainselectform =              if ($env{'form.fixeddom'}) {
  &Apache::loncommon::select_dom_form($filter->{$item},                  $domainselectform = '<input type="hidden" name="domainfilter"'.
     'domainfilter',                                      'value="'.$env{'request.role.domain'}.'" />'.
     $allow_blank);                                      &Apache::lonnet::domain($env{'request.role.domain'},
                                                               'description');
                   $codedom = $env{'request.role.domain'};
               } else {    
                   $domainselectform =
       &Apache::loncommon::select_dom_form($filter->{$item},
               'domainfilter',
           $allow_blank);
                   $codedom = $filter->{'domainfilter'};
               }
         } elsif ($item eq 'ownerdomfilter') {          } elsif ($item eq 'ownerdomfilter') {
             $ownerdomselectform =              $ownerdomselectform =
      &Apache::loncommon::select_dom_form($filter->{$item},'ownerdomfilter',1);       &Apache::loncommon::select_dom_form($filter->{$item},'ownerdomfilter',1);
Line 435  sub build_filters { Line 456  sub build_filters {
               'cac' => &mt("$type Activity"),                'cac' => &mt("$type Activity"),
               'cde' => &mt("$type Title"),                'cde' => &mt("$type Title"),
               'cdo' => &mt("$type Domain"),                'cdo' => &mt("$type Domain"),
               'cin' => &mt('Course Institutional Code'),                'ins' => &mt('Institutional Code'),
                 'inc' => &mt('Institutional Categorization'),
               'cow' => &mt("$type Owner's Username"),                'cow' => &mt("$type Owner's Username"),
               'cod' => &mt("$type Owner's Domain"),                'cod' => &mt("$type Owner's Domain"),
               'cog' => &mt('Course Type')                'cog' => &mt('Course Type')
Line 443  sub build_filters { Line 465  sub build_filters {
   
     $typeselectform =  '<select name="type" size="1">'."\n";      $typeselectform =  '<select name="type" size="1">'."\n";
     if ($type eq 'Course') {      if ($type eq 'Course') {
         $instcodeform =           if ($env{'form.fixeddom'}) {
               ($instcodeform,$jscript,$$numtitlesref) = 
                   &instcode_selectors($codedom,'filterpicker');
           }
           if ($instcodeform eq '') {
               $instcodeform = 
                 '<input type="text" name="instcodefilter" size="10" value="'.                  '<input type="text" name="instcodefilter" size="10" value="'.
                 $list->{'instcodefilter'}.'" />';                  $list->{'instcodefilter'}.'" />';
               $instcodetitle = $lt{'ins'};
           } else {
               $instcodetitle = $lt{'inc'};
           }
           if ($env{'form.fixeddom'}) {
               $instcodetitle .= '<br />('.$codedom.')';
           }
           if ($jscript ne '') {
               $jscript = '<script type="text/javascript" language="Javascript">'.$jscript.
                          '</script>'."\n";
           }
     }      }
     foreach my $posstype ('Course','Non-standard Course') {      foreach my $posstype ('Course','Non-standard Course') {
         $typeselectform.='<option value="'.$posstype.'"'.          $typeselectform.='<option value="'.$posstype.'"'.
Line 474  $roleelement Line 512  $roleelement
 $multelement  $multelement
 |;  |;
         if ($formname eq 'portform') {          if ($formname eq 'portform') {
             $output .= '<input type="hidden" name="setroles" value="'.$env{'form.setroles'}.'" />';              $output .= '<input type="hidden" name="setroles" value="'.$env{'form.setroles'}.'" />'."\n";
         }          }
     }      }
       if ($env{'form.fixeddom'}) { 
           $output .= '<input type="hidden" name="fixeddom" value="'.$env{'form.fixeddom'}.'" />'."\n";
       }
     $output .= "<br />\n".&Apache::lonhtmlcommon::start_pick_box();      $output .= "<br />\n".&Apache::lonhtmlcommon::start_pick_box();
     if ($sincefilterform) {       if ($sincefilterform) { 
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cac'})          $output .= &Apache::lonhtmlcommon::row_title($lt{'cac'})
Line 488  $multelement Line 528  $multelement
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})          $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})
                   .$domainselectform                    .$domainselectform
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
     }      } 
     if ($typeselectform) {      if ($typeselectform) {
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cog'})          $output .= &Apache::lonhtmlcommon::row_title($lt{'cog'})
                   .$typeselectform                    .$typeselectform
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
     }      }
     if ($instcodeform) {      if ($instcodeform) {
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cin'})          $output .= &Apache::lonhtmlcommon::row_title($instcodetitle)
                   .$instcodeform                    .$instcodeform
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
     }      }
Line 523  $multelement Line 563  $multelement
     $output .= &Apache::lonhtmlcommon::end_pick_box();      $output .= &Apache::lonhtmlcommon::end_pick_box();
     $output .= '<p><input type="submit" name="gosearch" value="'.       $output .= '<p><input type="submit" name="gosearch" value="'. 
                &mt('Search').'" /></p>'."\n".'</form>'."\n".'<hr />'."\n";                 &mt('Search').'" /></p>'."\n".'</form>'."\n".'<hr />'."\n";
     return $output;       return $jscript.$output;
   }
   
   sub instcode_selectors {
       my ($codedom,$formname) = @_;
       my ($output,@codetitles,%cat_titles,%cat_order,%cat_items);
       my ($jscript,$totcodes,$numtitles,$lasttitle) =
           &Apache::courseclassifier::instcode_selectors_data($codedom,$formname,
                              \%cat_items,\@codetitles,\%cat_titles,\%cat_order);
       if ($numtitles > 0) {
           $output = &Apache::courseclassifier::build_instcode_selectors($numtitles,
                     $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order)."\n".
                     '<input type="hidden" name="numtitles" value="'.$numtitles.'" />'."\n".
                     '<input type="hidden" name="state" value="listing" />'."\n";
    
       }
       return ($output,$jscript,$numtitles);
 }  }
   
 sub search_courses {  sub search_courses {
     my ($r,$type,$onlyown,$filter) = @_;      my ($r,$type,$onlyown,$filter,$numtitles) = @_;
     my %courses;      my %courses;
     if (!$onlyown) {      if (!$onlyown) {
         $r->print(&mt('Searching ...').'<br />&nbsp;<br />');          $r->print(&mt('Searching ...').'<br />&nbsp;<br />');
Line 546  sub search_courses { Line 602  sub search_courses {
         if ($type eq '') { $type = '.'; }          if ($type eq '') { $type = '.'; }
         my $timefilter =           my $timefilter = 
            ($filter->{'sincefilter'}==-1?1:time-$filter->{'sincefilter'});             ($filter->{'sincefilter'}==-1?1:time-$filter->{'sincefilter'});
           my ($instcodefilter,$regexpok);
           if ($numtitles) {
               $instcodefilter = 
                   &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},
                                                                  $numtitles);
               $regexpok = 1;
           } else {
               $instcodefilter = $filter->{'instcodefilter'};
           }
         %courses =           %courses = 
             &Apache::lonnet::courseiddump($filter->{'domainfilter'},              &Apache::lonnet::courseiddump($filter->{'domainfilter'},
                                           $filter->{'descriptfilter'},                                            $filter->{'descriptfilter'},
                                           $timefilter,                                            $timefilter,
                                           $filter->{'instcodefilter'},                                            $instcodefilter,
                                           $filter->{'combownerfilter'},                                            $filter->{'combownerfilter'},
                                           $filter->{'coursefilter'},                                            $filter->{'coursefilter'},
                                           undef,undef,$type);                                            undef,undef,$type,$regexpok);
     } else {      } else {
         $r->print('<br />');          $r->print('<br />');
         my %coursehash = &Apache::loncommon::findallcourses();           my %coursehash = &Apache::loncommon::findallcourses(); 
Line 786  Side Effects: None Line 851  Side Effects: None
   
 =item *  =item *
 X<build_filters()>  X<build_filters()>
 B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action)>:  B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action,$numfiltersref)>:
   
   
 Input: 6 - anonymous array of search criteria; course type; $roleelement ; $multelement ; anonymous hash of criteria and their values; form action.  Input: 7 - 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).  
   
 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 797  Side Effects: None Line 862  Side Effects: None
   
 =item *  =item *
 X<search_courses()>  X<search_courses()>
 B<search_courses($r,$type,$onlyown,$filter)>:  B<search_courses($r,$type,$onlyown,$filter,$numtitles)>:
   
   
 Input: 5 -  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.  Input: 5 -  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).  
   
 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.
   

Removed from v.1.77  
changed lines
  Added in v.1.78


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