Diff for /loncom/interface/lonpickcourse.pm between versions 1.73.2.2 and 1.80

version 1.73.2.2, 2008/07/01 05:26:04 version 1.80, 2009/05/05 05:30:00
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 111  sub handler { Line 116  sub handler {
     if ($env{'form.gosearch'} || $onlyown) {      if ($env{'form.gosearch'} || $onlyown) {
         $r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction));          $r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction));
     }      }
     $r->print('<script type="text/javascript">'.$jscript.'</script>');      $r->print('<script type="text/javascript" language="Javascript">'.$jscript.
                 '</script>');
     $r->print($submitopener);      $r->print($submitopener);
   
 # ------------------------------------------ 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);
     if (!$onlyown) {      if (!$onlyown) {
         my $filterlist = ['domainfilter','descriptfilter',          my $filterlist = ['domainfilter','descriptfilter',
                           'instcodefilter','ownerfilter',                            'instcodefilter'];
                           'ownerdomfilter'];          if ($env{'form.form'} eq 'rules') {
               push(@{$filterlist},'personfilter');
               if (($env{'form.personfilter'} ne '') && ($env{'form.persondomfilter'} ne '')) {
                   if (&Apache::lonnet::homeserver($env{'form.personfilter'},
                                                    $env{'form.persondomfilter'}) eq 'no_host') {
                       $nohost = 1;
                   } else {
                       $showroles = 1;
                   } 
               }
           } else {
               push(@{$filterlist},'ownerfilter');
           }
         # course ID filter for DCs only          # course ID 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'}.'/'})) {
             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);          if ($nohost) {
               $r->print ('<span class="LC_warning">'.
                          &mt('User does not exist - username: [_1], domain: [_2].',
                              '<b>'.$filter->{'personfilter'}.'</b>',
                              '<b>'.$filter->{'persondomfilter'}.'</b>').'</span>');
           } else {
               &display_matched_courses($r,$type,$multiple,$action,$showroles,%courses);
           }
     }      }
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;
Line 211  function setSections() { Line 237  function setSections() {
 }  }
   
 sub display_matched_courses {  sub display_matched_courses {
     my ($r,$type,$multiple,$action,%courses) = @_;      my ($r,$type,$multiple,$action,$showroles,%courses) = @_;
     if ($env{'form.form'} eq 'portform') {      if ($env{'form.form'} eq 'portform') {
         $action = '/adm/portfolio';          $action = '/adm/portfolio';
     }      }
Line 228  sub display_matched_courses { Line 254  sub display_matched_courses {
                  $menuchk = ' checked="checked" ';                   $menuchk = ' checked="checked" ';
             }              }
             $r->print(              $r->print(
                 '<table class="LC_pick_box">'.                  '<fieldset>'
                 '<tr class="LC_pick_box_row">'.                 .'<legend>'.&mt('Action').'</legend>'
                 '<td class="LC_pick_box_title" rowspan="2">'.&mt('Action').'</td>'.                 .'<div class="LC_nobreak"><label>'
                 '<td class="LC_evenrow_value">'.                 .'<input type="radio" name="phase" value="ccrole"'.$ccrolechk.'/>'
                 '<span class="LC_nobreak"><label>'.                 .'&nbsp;'.&mt('Enter the course with the role of [_1].',$cctitle)
                 '<input type="radio" name="phase" value="ccrole"'.$ccrolechk.'/>'.                 .'</label></div>'
                 '&nbsp;'.&mt('Enter the course with the role of [_1].',$cctitle).                 .'<div class="LC_nobreak"><label>'
                 '</label>'.('&nbsp;'x3).'</span>'.                 .'<input type="radio" name="phase" value="menu"'.$menuchk.'/>&nbsp;'
                 '</td></tr>'.                 .&mt('View or modify course settings which only a [_1] may modify.',$dctitle)
                 '<tr class="LC_pick_box_row">'.                 .'</label></div>'
                 '<td class="LC_oddrow_value">'.                 .'</fieldset>'
                 '<span class="LC_nobreak"><label>'.                 .'<br />'
                 '<input type="radio" name="phase" value="menu"'.$menuchk.'/>&nbsp;'.              );
                 &mt('View or modify course settings which only a [_1] may modify.',$dctitle).  
                 '</label></span>'.  
                 '</td></tr></table>'.  
                 '<br />');  
         }          }
     }      }
     my %by_descrip;      my %by_descrip;
Line 273  sub display_matched_courses { Line 295  sub display_matched_courses {
         $r->print(&Apache::loncommon::start_data_table());          $r->print(&Apache::loncommon::start_data_table());
         $r->print(&Apache::loncommon::start_data_table_header_row());          $r->print(&Apache::loncommon::start_data_table_header_row());
         $r->print('<th>'.&mt('Select').'</th>'          $r->print('<th>'.&mt('Select').'</th>'
                  .'<th>'.&mt('Course Description').'</th>'                   .'<th>'.&mt('Course Title').'</th>'
                  .'<th>'.&mt('Domain').'</th>'                   .'<th>'.&mt('Domain').'</th>'
                  .'<th>'.&mt('Course Code').'</th>'                   .'<th>'.&mt('Course Code').'</th>'
                  .'<th>'.&mt('Owner/Co-owner(s)').'</th>'                   .'<th>'.&mt('Owner/Co-owner(s)').'</th>'
 #                 .'<th>'.&mt('Type').'</th>'                   .'<th>'.&mt('Type').'</th>'
                  );                   );
           if ($showroles) {
               $r->print('<th>'.&mt("Role(s) for [_1]",
                   &Apache::loncommon::plainname($env{'form.personfilter'},
                                                 $env{'form.persondomfilter'},'firstname')).'</th>');
           }
         $r->print(&Apache::loncommon::end_data_table_header_row());          $r->print(&Apache::loncommon::end_data_table_header_row());
     }      }
     foreach my $description (sort { lc($a) cmp lc($b) } (keys(%by_descrip))) {      foreach my $description (sort { lc($a) cmp lc($b) } (keys(%by_descrip))) {
Line 318  sub display_matched_courses { Line 345  sub display_matched_courses {
             }              }
             $r->print('</td>');              $r->print('</td>');
             $r->print('<td>'.$ownerstr.'</td>');              $r->print('<td>'.$ownerstr.'</td>');
 #            $r->print('<td>');              $r->print('<td>');
 #            if ($ttype ne '') {              if ($ttype ne '') {
 #                $r->print(&mt(&unescape($ttype)));                  $r->print(&mt(&unescape($ttype)));
 #            } else {              } else {
 #                $r->print('&nbsp;');                  $r->print('&nbsp;');
 #            }              }
 #            $r->print('</td>');              $r->print('</td>');
               if ($showroles) {
                   $r->print('<td>');
                   my $rolestr;
                   if (ref($courses{$course}{'roles'}) eq 'ARRAY') {
                       my @roles = sort(@{$courses{$course}{'roles'}});
                       foreach my $role (@roles) {
                           if ($role =~ /^cr/) {
                               my (undef,$crdom,$crname,$crtitle) = split('/',$role);
                               $rolestr .= $crtitle.', ';
                           } else {
                               $rolestr .= &Apache::lonnet::plaintext($role,$ttype).', ';
                           }
                       }
                       $rolestr =~ s/\, $//;
                   }
                   $r->print($rolestr.'</td>');
               }
             if ($multiple) { $r->print("</label>\n"); }              if ($multiple) { $r->print("</label>\n"); }
             $r->print(&Apache::loncommon::end_data_table_row());              $r->print(&Apache::loncommon::end_data_table_row());
             # $r->print("<br />\n");              # $r->print("<br />\n");
Line 352  sub display_matched_courses { Line 396  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 372  sub multiples_tag { Line 423  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,$persondomselectform,
         $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') {
     if ($item eq 'domainfilter' || $item eq 'ownerdomfilter') {      if ($item eq 'domainfilter') {
  $filter->{$item} = &LONCAPA::clean_domain($filter->{$item});   $filter->{$item} = &LONCAPA::clean_domain($filter->{$item});
     } elsif ($item eq 'coursefilter') {      } elsif ($item eq 'coursefilter') {
  $filter->{$item} = &LONCAPA::clean_courseid($filter->{$item});   $filter->{$item} = &LONCAPA::clean_courseid($filter->{$item});
     } elsif ($item eq 'ownerfilter') {      } elsif ($item eq 'ownerfilter') {
  $filter->{$item} = &LONCAPA::clean_username($filter->{$item});   $filter->{$item} = &LONCAPA::clean_username($filter->{$item});
                   $filter->{'ownerdomfilter'} = 
                       &LONCAPA::clean_domain($env{'form.ownerdomfilter'});
                   $ownerdomselectform =
                       &Apache::loncommon::select_dom_form($filter->{'ownerdomfilter'},
                                                           'ownerdomfilter',1);
               } elsif ($item eq 'personfilter') {
                   $filter->{$item} = &LONCAPA::clean_username($filter->{$item});
                   if ($env{'form.persondomfilter'} eq '') {
                       unless ($env{'form.gosearch'}) {
                           $filter->{'persondomfilter'} = $env{'request.role.domain'};
                       }
                   } else {
                       $filter->{'persondomfilter'} =
                           &LONCAPA::clean_domain($env{'form.persondomfilter'});
                   }
                   $persondomselectform =
                       &Apache::loncommon::select_dom_form($filter->{'persondomfilter'},
                                                           'persondomfilter',1);
     } else {      } else {
  $filter->{$item} =~ s/\W//g;   $filter->{$item} =~ s/\W//g;
     }      }
Line 407  sub build_filters { Line 475  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'},
         } elsif ($item eq 'ownerdomfilter') {                                                              'description');
             $ownerdomselectform =                  $codedom = $env{'request.role.domain'};
      &Apache::loncommon::select_dom_form($filter->{$item},'ownerdomfilter',1);              } else {
                   $domainselectform =
       &Apache::loncommon::select_dom_form($filter->{$item},
               'domainfilter',
           $allow_blank);
                   $codedom = $filter->{'domainfilter'};
               }
         } else {          } else {
             $list->{$item} = &HTML::Entities::encode($filter->{$item},'<>&"');              $list->{$item} = &HTML::Entities::encode($filter->{$item},'<>&"');
         }          }
Line 436  sub build_filters { Line 510  sub build_filters {
                       '15552000','31104000']));                        '15552000','31104000']));
   
     my %lt = (      my %lt = (
               'cac' => &mt('[_1] Activity',$type),                'cac' => &mt("$type Activity"),
               'cde' => &mt('[_1] Description',$type),                'cde' => &mt("$type Title"),
               'cdo' => &mt('[_1] Domain',$type),                'cdo' => &mt("$type Domain"),
               'cin' => &mt('Course Institutional Code'),                'ins' => &mt('Institutional Code'),
               'cow' => &mt("[_1] Owner's Username",$type),                'inc' => &mt('Institutional Categorization'),
               'cod' => &mt("[_1] Owner's Domain", $type),                'cow' => &mt("$type Owner/Co-owner"),
                 'cop' => &mt("$type Personnel Includes"),
               'cog' => &mt('Course Type')                'cog' => &mt('Course Type')
              );               );
   
     $typeselectform =  '<select name="type" size="1">'."\n";      $typeselectform =  '<select name="type" size="1">'."\n";
       my $officialjs;
     if ($type eq 'Course') {      if ($type eq 'Course') {
         $instcodeform =           if ($env{'form.fixeddom'}) {
               $officialjs = 1;
               ($instcodeform,$jscript,$$numtitlesref) = 
                   &instcode_selectors($codedom,'filterpicker',$officialjs);
           }
           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 478  $roleelement Line 571  $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();
     if ($sincefilterform) {       if ($sincefilterform) { 
         $output .= $lt{'cac'}.': '.$sincefilterform.'<br />'."\n";          $output .= &Apache::lonhtmlcommon::row_title($lt{'cac'})
                     .$sincefilterform
                     .&Apache::lonhtmlcommon::row_closure();
     }      }
     if ($domainselectform) {      if ($domainselectform) {
         $output .= $lt{'cdo'}.': '.$domainselectform.'<br />'."\n";          $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})
                     .$domainselectform
                     .&Apache::lonhtmlcommon::row_closure();
       } 
       if ($typeselectform) {
           $output .= &Apache::lonhtmlcommon::row_title($lt{'cog'})
                     .$typeselectform
                     .&Apache::lonhtmlcommon::row_closure();
     }      }
 #    if ($typeselectform) {  
 #        $output .= $lt{'cog'}.': '.$typeselectform.'<br />'."\n";  
 #    }  
     if ($instcodeform) {      if ($instcodeform) {
         $output .= $lt{'cin'}.': '.$instcodeform.'<br />'."\n";          $output .= &Apache::lonhtmlcommon::row_title($instcodetitle)
                     .$instcodeform
                     .&Apache::lonhtmlcommon::row_closure();
     }      }
     if (exists($filter->{'ownerfilter'})) {      if (exists($filter->{'ownerfilter'})) {
         $output .= $lt{'cow'}.': '.          $output .= &Apache::lonhtmlcommon::row_title($lt{'cow'}).
                    '<input type="text" name="ownerfilter" size="10" value="'.                     '<table><tr><td>'.&mt('Username').'<br />'.
                    $list->{'ownerfilter'}.'" /><br />'."\n".                     '<input type="text" name="ownerfilter" size="20" value="'.
                    $lt{'cod'}.': '.$ownerdomselectform.'<br />'."\n";                     $list->{'ownerfilter'}.'" /></td><td>'.&mt('Domain').'<br />'.
                      $ownerdomselectform.'</td></tr></table>'.
                      &Apache::lonhtmlcommon::row_closure();
       }
       if (exists($filter->{'personfilter'})) {
           $output .= &Apache::lonhtmlcommon::row_title($lt{'cop'}).
                      '<table><tr><td>'.&mt('Username').'<br />'.
                      '<input type="text" name="personfilter" size="20" value="'.
                      $list->{'personfilter'}.'" /></td><td>'.&mt('Domain').'<br />'.
                      $persondomselectform.'</td></tr></table>'.
                      &Apache::lonhtmlcommon::row_closure();
     }      }
     if (exists($filter->{'coursefilter'})) {      if (exists($filter->{'coursefilter'})) {
         $output .= &mt('LON-CAPA course ID').': '.          $output .= &Apache::lonhtmlcommon::row_title(&mt('LON-CAPA course ID'))
                    '<input type="text" name="coursefilter" size="25" value="'.                    .'<input type="text" name="coursefilter" size="25" value="'
                     $list->{'coursefilter'}.'" /><br />';                    .$list->{'coursefilter'}.'" />'
                     .&Apache::lonhtmlcommon::row_closure();
     }      }
     if (exists($filter->{'descriptfilter'})) {      if (exists($filter->{'descriptfilter'})) {
         $output .=$lt{'cde'}.': '.          $output .= &Apache::lonhtmlcommon::row_title($lt{'cde'})
                   '<input type="text" name="descriptfilter" size="40" value="'.                    .'<input type="text" name="descriptfilter" size="40" value="'
                   $list->{'descriptfilter'}.'" />'."\n";                    .$list->{'descriptfilter'}.'" />'
                     .&Apache::lonhtmlcommon::row_closure(1);
     }      }
       $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,$officialjs) = @_;
       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,$officialjs);
       if ($numtitles > 0) {
           my $unofficial = ' checked="checked" ';
           my $official = '';
           if ($env{'form.official'}) {
               $official = $unofficial;
               $unofficial = '';
           }
           $output .= '<span class="LC_nobreak">'.&mt('Official course:').'&nbsp;<label>'.
                      '<input type="radio" name="official" value="1"'.$official.' />'.
                      &mt('Yes').'</label>'.('&nbsp;'x3).'<label>'.
                      '<input type="radio" name="official" value="0"'.$unofficial.
                      ' onclick="toggleOfficial();" />'.&mt('No').'</label></span><br />'.
                      &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,%showcourses);
     if (!$onlyown) {      if (!$onlyown) {
         $r->print(&mt('Searching ...').'<br />&nbsp;<br />');          $r->print(&mt('Searching ...').'<br />&nbsp;<br />');
         $r->rflush();          $r->rflush();
Line 525  sub search_courses { Line 670  sub search_courses {
             $filter->{'combownerfilter'} = $filter->{'ownerfilter'}.':'.              $filter->{'combownerfilter'} = $filter->{'ownerfilter'}.':'.
                                            $filter->{'ownerdomfilter'};                                             $filter->{'ownerdomfilter'};
         }          }
         foreach my $item ('descriptfilter','instcodefilter','coursefilter',          foreach my $item ('descriptfilter','coursefilter','combownerfilter') {
                           'combownerfilter') {  
             if (!$filter->{$item}) {              if (!$filter->{$item}) {
                 $filter->{$item}='.';                  $filter->{$item}='.';
             }              }
         }          }
         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) {
               if ($env{'form.official'}) {
                   $instcodefilter = 
                       &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},
                                                                      $numtitles);
                   $regexpok = 1;
               }
           } else {
               $instcodefilter = $filter->{'instcodefilter'};
           }
           if ($instcodefilter eq '') { $instcodefilter = '.'; }
           if ($type eq '') { $type = '.'; }
         %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);
           if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) {
               my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'},
                                                            $filter->{'persondomfilter'},
                                                            'userroles',undef,
                                                            ['cc','in','ad','ep','ta','cr'],
                                                            $filter->{'domainfilter'});
               foreach my $role (keys(%rolehash)) {
                   my ($cnum,$cdom,$courserole) = split(':',$role);
                   my $cid = $cdom.'_'.$cnum;
                   if (exists($courses{$cid})) {
                       if (ref($courses{$cid}) eq 'HASH') {
                           if (ref($courses{$cid}{roles}) eq 'ARRAY') {
                               if (!grep(/^\Q$courserole\E$/,@{$courses{$cid}{roles}})) { 
                                   push (@{$courses{$cid}{roles}},$courserole);
                               }
                           } else {
                               $courses{$cid}{roles} = [$courserole];
                           }
                           $showcourses{$cid} = $courses{$cid};
                       }
                   }
               }
               %courses = %showcourses;
           }
     } else {      } else {
         $r->print('<br />');          $r->print('<br />');
         my %coursehash = &Apache::loncommon::findallcourses();           my %coursehash = &Apache::loncommon::findallcourses(); 
Line 701  Course Owner's Username - the username o Line 881  Course Owner's Username - the username o
 Course Owner's Domain - the domain of the owner of the course  Course Owner's Domain - the domain of the owner of the course
   
 =item *   =item * 
 Course Description - text which appears in the Course Description (or title), as set in the Course Parameters.  Course Title - text which appears in the Course Title, as set in the Course Parameters.
   
 =item *  =item *
 Course ID - the internal course number (course ID part after initial 'domain_') used by LON-CAPA (this criterion is only displayed to Domain Coordinators selecting a course in the same domain as their DC role).  Course ID - the internal course number (course ID part after initial 'domain_') used by LON-CAPA (this criterion is only displayed to Domain Coordinators selecting a course in the same domain as their DC role).
Line 753  javascript code for reporting selected s Line 933  javascript code for reporting selected s
   
 =item *  =item *
 X<display_matched_courses()>  X<display_matched_courses()>
 B<display_matched_courses($r,$type,$multiple,$action,%courses)>:  B<display_matched_courses($r,$type,$multiple,$action,$showroles,%courses)>:
   
 Input: 5 - request object, course type, multiple (0 or 1), form action; hash of courses.  Input: 7 - request object, course type, multiple (0 or 1), form action, whether to show roles (for course personnel filter), hash of courses.
   
 Output: 0  Output: 0
   
Line 774  Side Effects: None Line 954  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 785  Side Effects: None Line 965  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.73.2.2  
changed lines
  Added in v.1.80


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