Diff for /loncom/interface/lonpickcourse.pm between versions 1.65 and 1.79

version 1.65, 2007/10/06 04:32:49 version 1.79, 2009/05/04 13:24:12
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 72  sub handler { Line 73  sub handler {
     my $roledom = $env{'form.roleelement'};      my $roledom = $env{'form.roleelement'};
     if ($roledom) {      if ($roledom) {
         $roleelement = '<input type="hidden" name="roleelement" value="'.$roledom.'" />';          $roleelement = '<input type="hidden" name="roleelement" value="'.$roledom.'" />';
         $submitopener = &Apache::lonroles::processpick();          $submitopener = &processpick();
         $autosubmit = 'process_pick("'.$roledom.'")';          $autosubmit = 'process_pick("'.$roledom.'")';
     }      }
   
Line 83  sub handler { Line 84  sub handler {
     }      }
   
     my %loaditem;      my %loaditem;
     if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) {      if ($env{'form.numtitles'}) {
         $loaditem{'onload'} ="setSections()";          $loaditem{'onload'} = 'setElements(); ';
       }
   
       if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) && 
           ($env{'form.pickedcourse'})) {
               $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 92  sub handler { Line 98  sub handler {
   
     if ($env{'form.form'} eq 'portform') {      if ($env{'form.form'} eq 'portform') {
         $lastaction = 'document.courselist.submit()';          $lastaction = 'document.courselist.submit()';
     } elsif ($env{'form.form'} eq 'cu') {      } elsif ($env{'form.form'} eq 'cu' || ($env{'form.form'} eq 'studentform' &&
           !$multiple)) {
         $lastaction =           $lastaction = 
              'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".               'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
              'document.courselist.submit();';               'document.courselist.submit();';
Line 101  sub handler { Line 108  sub handler {
     }      }
   
     # if called to assign a role in a course to a user via CUSR      # if called to assign a role in a course to a user via CUSR
     if ($env{'form.form'} eq 'cu') {      if ($env{'form.form'} eq 'cu' || $env{'form.form'} eq 'studentform') {
         $r->print(&create_user_javascript($type));           $r->print(&create_user_javascript($type));
     }      }
   
     # print javascript functions for choosing a course       # print javascript functions for choosing a course 
     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;
 }  }
   
   sub processpick {
       my $openerform = 'rolechoice';
       if ($env{'form.form'} eq 'studentform') {
           $openerform = $env{'form.form'};
       }
       my $process_pick = <<"ENDONE";
   <script type="text/javascript">
   function process_pick(dom) {
       var pickedCourse=opener.document.$openerform.$env{'form.cnumelement'}.value;
       var pickedDomain=opener.document.$openerform.$env{'form.cdomelement'}.value;
       var okDomain = 0;
   ENDONE
       if ($openerform eq 'rolechoice') {
           $process_pick .= <<"ENDTWO";
       if (pickedDomain == dom) {
           if (pickedCourse != '') {
               var courseTarget = "cc./"+pickedDomain+"/"+pickedCourse
               opener.document.title='Role selected. Please stand by.';
               opener.status='Role selected. Please stand by.';
               opener.document.rolechoice.newrole.value=courseTarget
               opener.document.rolechoice.submit();
           }
       } 
       else {
           alert("You may only use this screen to select courses in the current domain: "+dom+"\\nPlease return to the roles page window and click the 'Select Course' link for domain: "+pickedDomain+",\\n if you are a Domain Coordinator in that domain, and wish to become a Course Coordinator in a course in the domain");
       }
   ENDTWO
       } else {
           $process_pick .= <<"ENDTHREE";
       if (pickedDomain != dom) {
           alert("You may only use this screen to select courses in the current domain: "+dom+"\\nPlease return to the roles page window and click the 'Select Course' link for domain: "+pickedDomain+",\\n if you are a Domain Coordinator in that domain, and wish to become a Course Coordinator in a course in the domain");
           return;
       }
   ENDTHREE
       }
       $process_pick .= "
   }
   
   </script>
   ";
       return $process_pick;
   }
   
 sub create_user_javascript {  sub create_user_javascript {
     my ($type) = @_;      my ($type) = @_;
     my $output;      my $output;
Line 166  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';
     }      }
       my $numcourses = keys(%courses);
     $r->print('<form name="courselist" method="post" action="'.$action.'">');      $r->print('<form name="courselist" method="post" action="'.$action.'">');
       if ($env{'form.form'} eq 'modifycourse') {
           if ($numcourses > 0) {
               my $cctitle = &Apache::lonnet::plaintext('cc',$type);
               my $dctitle = &Apache::lonnet::plaintext('dc');
               my $ccrolechk = ' checked="checked" ';
               my $menuchk = ' ';
               if ($env{'form.prevphase'} ne '') {
                    $ccrolechk = ' ';
                    $menuchk = ' checked="checked" ';
               }
               $r->print(
                   '<fieldset>'
                  .'<legend>'.&mt('Action').'</legend>'
                  .'<div class="LC_nobreak"><label>'
                  .'<input type="radio" name="phase" value="ccrole"'.$ccrolechk.'/>'
                  .'&nbsp;'.&mt('Enter the course with the role of [_1].',$cctitle)
                  .'</label></div>'
                  .'<div class="LC_nobreak"><label>'
                  .'<input type="radio" name="phase" value="menu"'.$menuchk.'/>&nbsp;'
                  .&mt('View or modify course settings which only a [_1] may modify.',$dctitle)
                  .'</label></div>'
                  .'</fieldset>'
                  .'<br />'
               );
           }
       }
     my %by_descrip;      my %by_descrip;
     my $numcourses = keys(%courses);  
     foreach my $course (keys(%courses)) {      foreach my $course (keys(%courses)) {
         my $descr;          my $descr;
         if (ref($courses{$course}) eq 'HASH') {          if (ref($courses{$course}) eq 'HASH') {
Line 185  sub display_matched_courses { Line 282  sub display_matched_courses {
         my $description = $descr;          my $description = $descr;
         push (@{$by_descrip{$description}}, $course);          push (@{$by_descrip{$description}}, $course);
     }      }
    
     if ($numcourses > 1 && $multiple) {      if ($numcourses > 1 && $multiple) {
         $r->print('<input type="button" value="check all"          $r->print('<input type="button" value="check all"
                   onclick="javascript:checkAll(document.courselist.course_id)" />                    onclick="javascript:checkAll(document.courselist.course_id)" />
Line 192  sub display_matched_courses { Line 290  sub display_matched_courses {
                   onclick="javascript:uncheckAll(document.courselist.course_id)" />                    onclick="javascript:uncheckAll(document.courselist.course_id)" />
                   <br /><br />');                    <br /><br />');
     }      }
   
       if (%courses) {
           $r->print(&Apache::loncommon::start_data_table());
           $r->print(&Apache::loncommon::start_data_table_header_row());
           $r->print('<th>'.&mt('Select').'</th>'
                    .'<th>'.&mt('Course Title').'</th>'
                    .'<th>'.&mt('Domain').'</th>'
                    .'<th>'.&mt('Course Code').'</th>'
                    .'<th>'.&mt('Owner/Co-owner(s)').'</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());
       }
     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());
             my $cleandesc=&HTML::Entities::encode($description,'<>&"');              my $cleandesc=&HTML::Entities::encode($description,'<>&"');
             $cleandesc=~s/'/\\'/g;              $cleandesc=~s/'/\\'/g;
             my ($cdom,$cnum)=split(/\_/,$course);              my ($cdom,$cnum)=split(/\_/,$course);
Line 213  sub display_matched_courses { Line 330  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 $owner = join(', ',@owners);              my $ownerstr = join(', ',@owners);
             $r->print(&course_chooser($multiple,$cdom,$cnum,$cleandesc));              $r->print('<td>'.&course_chooser($multiple,$cdom,$cnum,$cleandesc).'</td>');
             $r->print($description.'('.              $r->print('<td>'.$description.'</td>');
                       (&Apache::lonnet::domain($cdom,'description')?              $r->print('<td>');
                        &Apache::lonnet::domain($cdom,'description'):$cdom).")");              $r->print(&Apache::lonnet::domain($cdom,'description')?
                         $cdom.' ('.&Apache::lonnet::domain($cdom,'description').')':$cdom);
               $r->print('</td>');
               $r->print('<td>');
             if ($instcode ne '') {              if ($instcode ne '') {
                 $r->print(" - ".&unescape($instcode));                  $r->print(&unescape($instcode));
             }              } else {
             if (@owners > 1) {                  $r->print('&nbsp;');
                 $r->print(', '.&mt('owners').' - ',join(', ',@owners));   
             } elsif (@owners == 1) {  
                 $r->print(', '.&mt('owner').' - '.$owner);  
             }              }
               $r->print('</td>');
               $r->print('<td>'.$ownerstr.'</td>');
               $r->print('<td>');
             if ($ttype ne '') {              if ($ttype ne '') {
                 $r->print('('.&unescape($ttype).')');                  $r->print(&mt(&unescape($ttype)));
               } else {
                   $r->print('&nbsp;');
               }
               $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("<br />\n");              $r->print(&Apache::loncommon::end_data_table_row());
               # $r->print("<br />\n");
         }          }
     }      }
       if (%courses) {
           $r->print(&Apache::loncommon::end_data_table());
       }
   
     if (!%courses) {      if (!%courses) {
         $r->print(&mt('None found'));          $r->print(&mt('None found'));
     } elsif ($multiple) {      } elsif ($multiple) {
Line 251  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('<input type="hidden" name="phase" value="menu" />'."\n");          $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','pickedcourse','type','form','numtitles','state']));
         $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','pickedcourse','type','form']));  
     } 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 272  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 303  sub build_filters { Line 471  sub build_filters {
     if ($formname eq 'portform') {      if ($formname eq 'portform') {
  $filter->{$item} ||= $env{'user.domain'};   $filter->{$item} ||= $env{'user.domain'};
  $allow_blank=0;   $allow_blank=0;
     }      } elsif ($formname eq 'studentform') {
             $domainselectform =                  $filter->{$item} ||= $env{'request.role.domain'};
  &Apache::loncommon::select_dom_form($filter->{$item},                  $allow_blank=0;
     'domainfilter',              }
     $allow_blank);              if ($env{'form.fixeddom'}) {
         } elsif ($item eq 'ownerdomfilter') {                  $domainselectform = '<input type="hidden" name="domainfilter"'.
             $ownerdomselectform =                                      'value="'.$env{'request.role.domain'}.'" />'.
      &Apache::loncommon::select_dom_form($filter->{$item},'ownerdomfilter',1);                                      &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'};
               }
         } else {          } else {
             $list->{$item} = &HTML::Entities::encode($filter->{$item},'<>&"');              $list->{$item} = &HTML::Entities::encode($filter->{$item},'<>&"');
         }          }
Line 333  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";
     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.'"'.
             ($posstype eq $type ? 'selected="selected" ' : ''). ">$posstype</option>\n";              ($posstype eq $type ? ' selected="selected" ' : ''). ">".&mt($posstype)."</option>\n";
     }      }
     $typeselectform.="</select>";      $typeselectform.="</select>";
     my $output = qq|      my $output = qq|
Line 358  sub build_filters { Line 552  sub build_filters {
 <input type="hidden" name="form" value="$formname" />  <input type="hidden" name="form" value="$formname" />
 |;  |;
     if ($formname eq 'modifycourse') {      if ($formname eq 'modifycourse') {
         $output .= '<input type="hidden" name="phase" value="courselist" />';          $output .= '<input type="hidden" name="phase" value="courselist" />'."\n".
     } else {                          '<input type="hidden" name="prevphase" value="'.
                      $env{'form.prevphase'}.'" />'."\n";
       } else {
         my $name_input;          my $name_input;
         if ($env{'form.cnameelement'} ne '') {          if ($env{'form.cnameelement'} ne '') {
             $name_input = '<input type="hidden" name="cnameelement" value="'.              $name_input = '<input type="hidden" name="cnameelement" value="'.
Line 373  $roleelement Line 569  $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) {      if ($typeselectform) {
         $output .= $lt{'cog'}.': '.$typeselectform.'<br />'."\n";          $output .= &Apache::lonhtmlcommon::row_title($lt{'cog'})
                     .$typeselectform
                     .&Apache::lonhtmlcommon::row_closure();
     }      }
     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="'. 
                  &mt('Search').'" /></p>'."\n".'</form>'."\n".'<hr />'."\n";
       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";
    
     }      }
     $output .= qq|      return ($output,$jscript,$numtitles);
 <p><input type="submit" name="gosearch" value="Search" /></p>  
 </form>  
 <hr />  
 |;  
     return $output;   
 }  }
   
 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();
         if (($filter->{'ownerfilter'} ne '') ||          if (($filter->{'ownerfilter'} ne '') ||
             ($filter->{'ownerdomfilter'} ne '')) {              ($filter->{'ownerdomfilter'} ne '')) {
Line 432  sub search_courses { Line 666  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);
           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 456  sub course_chooser { Line 723  sub course_chooser {
     if ($multiple) {      if ($multiple) {
         $output = '<label><input type="checkbox" name="course_id" value="'.$cdom.'_'.$cnum.'" />'."\n";          $output = '<label><input type="checkbox" name="course_id" value="'.$cdom.'_'.$cnum.'" />'."\n";
     } else {      } else {
         $output = '<input type="button" value="Select" onClick="gochoose('.          $output = '<input type="button" value="'.&mt('Select').'" onClick="gochoose('.
                   "'".$cnum."','".$cdom."','".$cleandesc."')".'" />'."\n";                    "'".$cnum."','".$cdom."','".$cleandesc."')".'" />'."\n";
     }      }
     return $output;      return $output;
Line 599  Course Owner's Username - the username o Line 866  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 651  javascript code for reporting selected s Line 918  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 672  Side Effects: None Line 939  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 683  Side Effects: None Line 950  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.
   
Line 708  Side Effects: None Line 975  Side Effects: None
 X<gochoose_javascript()>  X<gochoose_javascript()>
 B<gochoose_javascript($type,$multiple,$autosubmit,$lastaction)>:  B<gochoose_javascript($type,$multiple,$autosubmit,$lastaction)>:
   
 Input: 4 - course type; single (0) or multiple courses (1); in context of DC selecting a CC role in a course: javascript code from Apache::lonroles::processpick(); final action to take after user chooses course(s):  either close window, or submit form for display of next page etc.  Input: 4 - course type; single (0) or multiple courses (1); in context of DC selecting a CC role in a course: javascript code from &processpick(); final action to take after user chooses course(s):  either close window, or submit form for display of next page etc.
   
 Output: 1  $output - javascript wrapped in E<lt>scriptE<gt>E<lt>/scriptE<gt> tags  Output: 1  $output - javascript wrapped in E<lt>scriptE<gt>E<lt>/scriptE<gt> tags
   

Removed from v.1.65  
changed lines
  Added in v.1.79


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.