Diff for /loncom/interface/lonpickcourse.pm between versions 1.55 and 1.82

version 1.55, 2006/11/09 22:18:28 version 1.82, 2009/05/14 09:58:31
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 lib '/home/httpd/lib/perl/';  use Apache::courseclassifier;
 use LONCAPA;  use LONCAPA;
   
 sub handler {  sub handler {
Line 50  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);
   
     # Get course type - Course or Non-standard course.      # Get course type - Course or Non-standard Course.
     $type = $env{'form.type'};      $type = $env{'form.type'};
     if (!defined($env{'form.type'})) {      if (!defined($env{'form.type'})) {
         $type = 'Course';          $type = 'Course';
     }      }
     $title = &mt('Selecting a [_1]',$type);      $title = 'Selecting a '.$type;
   
     # Setup for multiple course selections, if flag for multiples set.      # Setup for multiple course selections, if flag for multiples set.
     $multiple = $env{'form.multiple'};      $multiple = $env{'form.multiple'};
     if ($multiple) {      if ($multiple) {
         ($jscript,$multelement) = &multiples_tag();          ($jscript,$multelement) = &multiples_tag();
         $title = &mt('Selecting [_1](s)',lc($type));          $title = 'Selecting '.$type.'(s)';
     }      }
   
     # if called when a DC is selecting a course       # if called when a DC is selecting a course 
     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.'")';
     }      }
   
     my $onlyown = 0;      my $onlyown = 0;
     # if called to assign course-based portfolio access control      # if called to assign course-based portfolio access control
     if ((($env{'form.form'} eq 'portform') && ($env{'user.adv'}))) {      if ((($env{'form.form'} eq 'portform') && (!$env{'user.adv'}))) {
         $onlyown = 1;          $onlyown = 1;
     }      }
   
     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 93  sub handler { Line 97  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 102  sub handler { Line 107  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,$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,%list);      my $filter = {};
       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,\%list));                                   $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,%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 236  function setSections() {
 }  }
   
 sub display_matched_courses {  sub display_matched_courses {
     my ($r,$type,$multiple,%courses) = @_;      my ($r,$type,$multiple,$action,$showroles,%courses) = @_;
     my $action = '/adm/pickcourse';  
     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 ($courses{$course} =~ m/^([^:]*):/i) {          if (ref($courses{$course}) eq 'HASH') {
               $descr = $courses{$course}{'description'};
           } elsif ($courses{$course} =~ m/^([^:]*):/i) {
             $descr = &unescape($1);              $descr = &unescape($1);
         } else {          } else {
             $descr = &unescape($courses{$course});              $descr = &unescape($courses{$course});
Line 184  sub display_matched_courses { Line 281  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 191  sub display_matched_courses { Line 289  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);
             my ($descr,$instcode,$owner,$ttype) = split/:/,$courses{$course};              my ($descr,$instcode,$ttype,@owners);
             $r->print(&course_chooser($multiple,$cdom,$cnum,$cleandesc));              if (ref($courses{$course}) eq 'HASH') {
             $r->print($description.'('.                  $descr = $courses{$course}{'description'};
                       ($Apache::lonnet::domaindescription{$cdom}?                  $instcode =  $courses{$course}{'inst_code'};
                        $Apache::lonnet::domaindescription{$cdom}:$cdom).")");                  $ttype =  $courses{$course}{'type'};
             unless ($instcode eq '') {                  push(@owners,&unescape($courses{$course}{'owner'}));
                 $r->print(" - ".&unescape($instcode));                  if (ref($courses{$course}{'co-owners'}) eq 'ARRAY') {
                       foreach my $item (@{$courses{$course}{'co-owners'}}) {
                           push(@owners,&unescape($item));
                       }
                   }
               } else {
                   my $singleowner; 
                   ($descr,$instcode,$singleowner,$ttype)=split(/:/,$courses{$course});
                   push(@owners,&unescape($singleowner));
               }
               my $ownerstr = join(', ',@owners);
               $r->print('<td>'.&course_chooser($multiple,$cdom,$cnum,$cleandesc).'</td>');
               $r->print('<td>'.$description.'</td>');
               $r->print('<td>');
               $r->print(&Apache::lonnet::domain($cdom,'description')?
                         $cdom.' ('.&Apache::lonnet::domain($cdom,'description').')':$cdom);
               $r->print('</td>');
               $r->print('<td>');
               if ($instcode ne '') {
                   $r->print(&unescape($instcode));
               } else {
                   $r->print('&nbsp;');
             }              }
             unless ($owner eq '') {              $r->print('</td>');
                 $r->print(", owner - ".&unescape($owner));              $r->print('<td>'.$ownerstr.'</td>');
               $r->print('<td>');
               if ($ttype ne '') {
                   $r->print(&mt(&unescape($ttype)));
               } else {
                   $r->print('&nbsp;');
             }              }
             unless ($ttype eq '') {              $r->print('</td>');
                 $r->print('('.&unescape($ttype).')');              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) {
         $r->print('<input type="button" value="Submit" onClick="gochoose('."'','','',1)".'" />');          $r->print('<input type="button" value="Submit" onClick="gochoose('."'','','')".'" />');
     }      }
     $r->print('<input type="hidden" name="form" value="'.$env{'form.form'}.'" />'.      $r->print('<input type="hidden" name="form" value="'.$env{'form.form'}.'" />'.
               "\n".'<input type="hidden" name="pickedcourse" value="" />'."\n".                "\n".'<input type="hidden" name="pickedcourse" value="" />'."\n".
               '<input type="hidden" name="cnumelement" value="'.$env{'form.cnumelement'}.'" />'."\n".  
               '<input type="hidden" name="cdomelement" value="'.$env{'form.cdomelement'}.'" />'."\n".  
               '<input type="hidden" name="type" value="'.$type.'" />'."\n");                '<input type="hidden" name="type" value="'.$type.'" />'."\n");
     if ((exists($env{'form.roleelement'})) && ($env{'form.form'} eq 'rolechoice')) {      if ((exists($env{'form.roleelement'})) && ($env{'form.form'} eq 'rolechoice')) {
         $r->print('<input type="hidden" name="roleelement" value="'.          $r->print('<input type="hidden" name="roleelement" value="'.
Line 233  sub display_matched_courses { Line 394  sub display_matched_courses {
         $r->print('<input type="hidden" name="cdom" value="" />');          $r->print('<input type="hidden" name="cdom" value="" />');
         $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') {
           $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','pickedcourse','type','form','numtitles','state']));
       } else {
           $r->print('<input type="hidden" name="cnumelement" value="'.
                     $env{'form.cnumelement'}.'" />'."\n".  
                     '<input type="hidden" name="cdomelement" value="'.
                     $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 246  sub multiples_tag { Line 421  sub multiples_tag {
 }  }
   
 sub build_filters {  sub build_filters {
     my ($filterlist,$type,$roleelement,$multelement,$filter) = @_;      my ($filterlist,$type,$roleelement,$multelement,$filter,$action,
           $numtitlesref,$caller) = @_;
     my $list;      my $list;
     my ($domainselectform,$sincefilterform,$ownerdomselectform,      my $formname;
         $instcodeform,$typeselectform);      my ($fixeddom,$codedom,$jscript);
       if (defined($env{'form.form'})) {
           $formname = $env{'form.form'};
       } else {
           $formname = $caller;
       }
       my ($domainselectform,$sincefilterform,$ownerdomselectform,$persondomselectform,
           $instcodeform,$typeselectform,$instcodetitle);
     foreach my $item (@{$filterlist}) {      foreach my $item (@{$filterlist}) {
         $filter->{$item} = $env{'form.'.$item};          $filter->{$item} = $env{'form.'.$item};
         if ($item ne 'descriptfilter' && $item ne 'instcodefilter') {          if ($item ne 'descriptfilter' && $item ne 'instcodefilter') {
             $filter->{$item} =~ s/\W//g;      if ($item eq 'domainfilter') {
    $filter->{$item} = &LONCAPA::clean_domain($filter->{$item});
       } elsif ($item eq 'coursefilter') {
    $filter->{$item} = &LONCAPA::clean_courseid($filter->{$item});
       } elsif ($item eq 'ownerfilter') {
    $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 {
    $filter->{$item} =~ s/\W//g;
       }
             if (!$filter->{$item}) {              if (!$filter->{$item}) {
                 $filter->{$item} = '';                  $filter->{$item} = '';
             }              }
         }          }
         if ($item eq 'domainfilter') {          if ($item eq 'domainfilter') {
             $domainselectform =      my $allow_blank = 1;
      &Apache::loncommon::select_dom_form($filter->{$item},'domainfilter',1);      if ($formname eq 'portform') {
         } elsif ($item eq 'ownerdomfilter') {   $filter->{$item} ||= $env{'user.domain'};
             $ownerdomselectform =   $allow_blank=0;
      &Apache::loncommon::select_dom_form($filter->{$item},'ownerdomfilter',1);      } elsif ($formname eq 'studentform') {
                   $filter->{$item} ||= $env{'request.role.domain'};
                   $allow_blank=0;
               }
               if ($env{'form.fixeddom'}) {
                   $domainselectform = '<input type="hidden" name="domainfilter"'.
                                       'value="'.$env{'request.role.domain'}.'" />'.
                                       &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 286  sub build_filters { Line 511  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"';      $typeselectform =  '<select name="type" size="1">'."\n";
     $typeselectform .= ">\n";      my $officialjs;
     if ($type eq 'Course') {      if ($type eq 'Course') {
         $instcodeform = $lt{'cin'}.': <input type="text" name="instcodefilter"          if ($env{'form.fixeddom'}) {
  size="10" value="'.$list->{'instcodefilter'}.'" /><br />';              $officialjs = 1;
               ($instcodeform,$jscript,$$numtitlesref) = 
                   &instcode_selectors($codedom,'filterpicker',$officialjs);
           }
           if ($instcodeform eq '') {
               $instcodeform = 
                   '<input type="text" name="instcodefilter" size="10" value="'.
                   $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 $name_input;      my $output = qq|
     if ($env{'form.cnameelement'} ne '') {  <form method="post" name="filterpicker" action="$action">
         $name_input ='<input type="hidden" name="cnameelement" value="'.  <input type="hidden" name="form" value="$formname" />
                      $env{'form.cnameelement'}.'" />';  |;
     }      if ($formname eq 'modifycourse') {
     my $courseidtag;          $output .= '<input type="hidden" name="phase" value="courselist" />'."\n".
     if (exists($filter->{'coursefilter'})) {                     '<input type="hidden" name="prevphase" value="'.
         $courseidtag=&mt('LON-CAPA course ID').                     $env{'form.prevphase'}.'" />'."\n";
                      '<input type="text" name="coursefilter" size="25" value="'.                     $list->{'coursefilter'}.'" /><br />';      } else {
     }          my $name_input;
     my $output = <<"END";          if ($env{'form.cnameelement'} ne '') {
 <form method="post" name="filterpicker" action="/adm/pickcourse">              $name_input = '<input type="hidden" name="cnameelement" value="'.
                             $env{'form.cnameelement'}.'" />';
           }
           $output .= qq|
 <input type="hidden" name="cnumelement" value="$env{'form.cnumelement'}" />  <input type="hidden" name="cnumelement" value="$env{'form.cnumelement'}" />
 <input type="hidden" name="cdomelement" value="$env{'form.cdomelement'}" />  <input type="hidden" name="cdomelement" value="$env{'form.cdomelement'}" />
 $name_input  $name_input
 <input type="hidden" name="form" value="$env{'form.form'}" />  
 $roleelement  $roleelement
 $multelement  $multelement
 $lt{'cac'}: $sincefilterform  |;
 <br />          if ($formname eq 'portform') {
 $lt{'cdo'}: $domainselectform              $output .= '<input type="hidden" name="setroles" value="'.$env{'form.setroles'}.'" />'."\n";
 <br />          }
 $lt{'cog'}: $typeselectform      }
 <br />      if ($env{'form.fixeddom'}) { 
 $instcodeform          $output .= '<input type="hidden" name="fixeddom" value="'.$env{'form.fixeddom'}.'" />'."\n";
 $lt{'cow'}:      }
 <input type="text" name="ownerfilter" size="10" value="$list->{'ownerfilter'}" />      $output .= "<br />\n".&Apache::lonhtmlcommon::start_pick_box();
 <br />      if ($sincefilterform) { 
 $lt{'cod'}: $ownerdomselectform          $output .= &Apache::lonhtmlcommon::row_title($lt{'cac'})
 <br />                    .$sincefilterform
 $courseidtag                    .&Apache::lonhtmlcommon::row_closure();
 $lt{'cde'}:      }
 <input type="text" name="descriptfilter" size="40" value="$list->{'descriptfilter'}" />      if ($domainselectform) {
 <p><input type="submit" name="gosearch" value="Search" /></p>          $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})
 </form>                    .$domainselectform
 <hr />                    .&Apache::lonhtmlcommon::row_closure();
 END      } 
     return $output;       if ($typeselectform) {
           $output .= &Apache::lonhtmlcommon::row_title($lt{'cog'})
                     .$typeselectform
                     .&Apache::lonhtmlcommon::row_closure();
       }
       if ($instcodeform) {
           $output .= &Apache::lonhtmlcommon::row_title($instcodetitle)
                     .$instcodeform
                     .&Apache::lonhtmlcommon::row_closure();
       }
       if (exists($filter->{'ownerfilter'})) {
           $output .= &Apache::lonhtmlcommon::row_title($lt{'cow'}).
                      '<table><tr><td>'.&mt('Username').'<br />'.
                      '<input type="text" name="ownerfilter" size="20" value="'.
                      $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'})) {
           $output .= &Apache::lonhtmlcommon::row_title(&mt('LON-CAPA course ID'))
                     .'<input type="text" name="coursefilter" size="25" value="'
                     .$list->{'coursefilter'}.'" />'
                     .&Apache::lonhtmlcommon::row_closure();
       }
       if (exists($filter->{'descriptfilter'})) {
           $output .= &Apache::lonhtmlcommon::row_title($lt{'cde'})
                     .'<input type="text" name="descriptfilter" size="40" value="'
                     .$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,$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();
         if (($filter->{'ownerfilter'} ne '') ||          if (($filter->{'ownerfilter'} ne '') ||
             ($filter->{'ownerdomfilter'} ne '')) {              ($filter->{'ownerdomfilter'} ne '')) {
             $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 />');
         foreach my $cid (sort(&Apache::loncommon::findallcourses())) {          my %coursehash = &Apache::loncommon::findallcourses(); 
             $courses{$cid} = $env{'course.'.$cid.'.description'};          foreach my $cid (sort(keys(%coursehash))) {
               $courses{$cid}{'description'} = $env{'course.'.$cid.'.description'};
         }          }
     }      }
     return %courses;      return %courses;
Line 389  sub course_chooser { Line 739  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;
 }  }
   
 sub gochoose_javascript {  sub gochoose_javascript {
     my ($type,$autosubmit,$lastaction) = @_;      my ($type,$multiple,$autosubmit,$lastaction) = @_;
     my %elements = (      my %elements = (
                      'Course' => {                       'Course' => {
                                  name  => 'coursepick',                                   name  => 'coursepick',
                                  total => 'coursetotal',                                   total => 'coursetotal',
                                  list  => 'courselist',                                   list  => 'courselist',
                                  },                                   },
                      'Non-standard course' => {                       'Non-standard Course' => {
                                  name  => 'grouppick',                                   name  => 'grouppick',
                                  total => 'grouptotal',                                   total => 'grouptotal',
                                  list  => 'grouplist',                                   list  => 'grouplist',
                               },                                },
                     );                      );
     my $name_code;      my $output .= qq|
     if ($env{'form.cnameelement'} ne '') {  
         $name_code = 'opener.document.'.$env{'form.form'}.'.'.  
                       $env{'form.cnameelement'}.'.value=cdesc;';  
     }  
     my $output .= <<"ENDSCRIPT";  
 <script type="text/javascript">  <script type="text/javascript">
 function gochoose(cname,cdom,cdesc,multiple,caller) {  function gochoose(cname,cdom,cdesc) {
     var openerForm = "$env{'form.form'}";      var openerForm = "$env{'form.form'}";
     courseCount = 0;      courseCount = 0;
     var courses = '';      var courses = '';
     if (multiple) {  |;
         if (typeof(document.courselist.course_id.length) == 'undefined') {      if ($multiple) {
             // only 1 course checkbox was created          $output .= <<"ENDSCRIPT";
             if (document.courselist.course_id.checked) {      courseCount = 0;
                 courses = courses + document.courselist.course_id.value + "&&";      var courses = '';
       if (typeof(document.courselist.course_id.length) == 'undefined') {
           // only 1 course checkbox was created
           if (document.courselist.course_id.checked) {
               courses = courses + document.courselist.course_id.value + "&&";
               courseCount ++;
           }
       } else {
           for (var j=0; j<document.courselist.course_id.length; j++) {
               if (document.courselist.course_id[j].checked) {
                   courses = courses + document.courselist.course_id[j].value + "&&";
                 courseCount ++;                  courseCount ++;
             }              }
           }
       }
       opener.document.$env{'form.form'}.$elements{$type}{'total'}.value = courseCount;
       if (typeof(opener.document.$env{'form.form'}.$elements{$type}{'name'}.length) ==
           'undefined') {
           if (opener.document.$env{'form.form'}.$elements{$type}{'name'}.value == 'specific') {
               opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = true;
         } else {          } else {
             for (var j=0; j<document.courselist.course_id.length; j++) {              opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = false;
                 if (document.courselist.course_id[j].checked) {  
                     courses = courses + document.courselist.course_id[j].value + "&&";  
                     courseCount ++;  
                 }  
             }  
         }          }
         opener.document.$env{'form.form'}.$elements{$type}{'total'}.value = courseCount;      } else {
         if (typeof(opener.document.$env{'form.form'}.$elements{$type}{'name'}.length) ==          for (var j=0; j<opener.document.$env{'form.form'}.$elements{$type}{'name'}.length; j++) {
             'undefined') {              if (opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].value == 'specific') {
             if (opener.document.$env{'form.form'}.$elements{$type}{'name'}.value == 'specific') {                  opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].checked = true;
                 opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = true;  
             } else {              } else {
                 opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = false;                  opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].checked = false;
             }              }
         } else {  
             for (var j=0; j<opener.document.$env{'form.form'}.$elements{$type}{'name'}.length; j++) {  
                 if (opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].value == 'specific') {  
                     opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].checked = true;  
                 } else {  
                     opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].checked = false;  
                 }  
             }  
         }  
         if (courseCount > 0) {  
             courses = courses.substr(0,courses.length-2);  
             opener.document.$env{'form.form'}.$elements{$type}{'list'}.value = courses;  
         }          }
       }
       if (courseCount > 0) {
           courses = courses.substr(0,courses.length-2);
           opener.document.$env{'form.form'}.$elements{$type}{'list'}.value = courses;
       }
   ENDSCRIPT
     } else {      } else {
           my $name_code;
           if ($env{'form.cnameelement'} ne '') {
               $name_code = 'opener.document.'.$env{'form.form'}.'.'.
                             $env{'form.cnameelement'}.'.value=cdesc;';
           }
           $output .= qq|
         $name_code          $name_code
         opener.document.$env{'form.form'}.$env{'form.cnumelement'}.value=cname;          opener.document.$env{'form.form'}.$env{'form.cnumelement'}.value=cname;
         var slct=opener.document.$env{'form.form'}.$env{'form.cdomelement'};          var slct=opener.document.$env{'form.form'}.$env{'form.cdomelement'};
Line 469  function gochoose(cname,cdom,cdesc,multi Line 825  function gochoose(cname,cdom,cdesc,multi
                 if (slct.options[i].value==cdom) { slct.selectedIndex=i; }                  if (slct.options[i].value==cdom) { slct.selectedIndex=i; }
             }              }
         }          }
   |;
     }      }
       $output .= qq|
     if (openerForm == 'portform') {      if (openerForm == 'portform') {
         document.courselist.cnum.value = cname;          document.courselist.cnum.value = cname;
         document.courselist.cdom.value = cdom;          document.courselist.cdom.value = cdom;
Line 478  function gochoose(cname,cdom,cdesc,multi Line 836  function gochoose(cname,cdom,cdesc,multi
     $lastaction      $lastaction
 }  }
 </script>  </script>
 ENDSCRIPT  |;
     return $output;      return $output;
 }  }
   
Line 512  Course Activity - how recently was cours Line 870  Course Activity - how recently was cours
 Course Domain - the domain of the course  Course Domain - the domain of the course
   
 =item *  =item *
 Course Type - Course or Non-standard course  Course Type - Course or Non-standard Course
   
 =item *  =item *
 Course Institutional Code - the institutional identifier assigned to the course  Course Institutional Code - the institutional identifier assigned to the course
Line 524  Course Owner's Username - the username o Line 882  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 565  Following selection, and/or submission, Line 923  Following selection, and/or submission,
 X<create_user_javascript()>  X<create_user_javascript()>
 B<create_user_javascript($type)>:  B<create_user_javascript($type)>:
   
 Input: 1 - $type  - the course type - Course or Non-standard course  Input: 1 - $type  - the course type - Course or Non-standard Course
   
 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 
   
Line 576  javascript code for reporting selected s Line 934  javascript code for reporting selected s
   
 =item *  =item *
 X<display_matched_courses()>  X<display_matched_courses()>
 B<display_matched_courses($r,$type,$multiple,%courses)>:  B<display_matched_courses($r,$type,$multiple,$action,$showroles,%courses)>:
   
 Input: 4 - request object, course type, multiple (0 or 1), 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 597  Side Effects: None Line 955  Side Effects: None
   
 =item *  =item *
 X<build_filters()>  X<build_filters()>
 B<build_filters($filterlist,$type,$roleelement,$multelement,$filter)>:  B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action,$numfiltersref,$caller)>:
   
   
 Input: 5 - anonymous array of search criteria; course type; $roleelement ; $multelement ; anonymous hash of criteria and their values.  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); caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm).
   
 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 608  Side Effects: None Line 966  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 631  Side Effects: None Line 989  Side Effects: None
   
 =item *  =item *
 X<gochoose_javascript()>  X<gochoose_javascript()>
 B<gochoose_javascript($type,$autosubmit,$lastaction)>:  B<gochoose_javascript($type,$multiple,$autosubmit,$lastaction)>:
   
 Input: 3 - course type; 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.55  
changed lines
  Added in v.1.82


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