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

version 1.93.2.2, 2010/08/20 20:14:03 version 1.111, 2014/03/13 14:46:46
Line 31  package Apache::lonpickcourse; Line 31  package Apache::lonpickcourse;
 use strict;  use strict;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::loncommon;  use Apache::loncommon;
   use Apache::lonhtmlcommon;
 use Apache::loncoursedata;  use Apache::loncoursedata;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonlocal;  use Apache::lonlocal;
Line 105  sub handler { Line 106  sub handler {
   
     if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) &&       if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) && 
         ($env{'form.pickedcourse'})) {          ($env{'form.pickedcourse'})) {
         $loaditem{'onload'} .= 'setRoles();setSections();';          $loaditem{'onload'} .= 'setDefaultCredits();setRoles();setSections();';
     }      }
     my $js = &js_changer();      my $js = &js_changer();
     $r->print(&Apache::loncommon::start_page($title,$js,      $r->print(&Apache::loncommon::start_page($title,$js,
Line 133  sub handler { Line 134  sub handler {
         $onlyown) {          $onlyown) {
         $r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction));          $r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction));
     }      }
     $r->print('<script type="text/javascript" language="Javascript">'.$jscript.      $r->print(&Apache::lonhtmlcommon::scripttag($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);      my ($numtitles,$showroles,$nohost,@codetitles);
     if (!$onlyown) {      if (!$onlyown) {
         my $filterlist = ['domainfilter'];          my $filterlist = ['domainfilter','sincefilter'];
           # created filter for DCs only
         if ($env{'user.adv'} && $env{'form.domainfilter'} &&          if ($env{'user.adv'} && $env{'form.domainfilter'} &&
             exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'})              exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'})
             && $env{'form.form'} ne 'portform') {              && $env{'form.form'} ne 'portform') {
Line 152  sub handler { Line 153  sub handler {
             }              }
         }          }
         push(@{$filterlist},('descriptfilter','instcodefilter'));          push(@{$filterlist},('descriptfilter','instcodefilter'));
   
         if ($env{'form.form'} eq 'rules') {          if ($env{'form.form'} eq 'rules') {
             push(@{$filterlist},'personfilter');              push(@{$filterlist},('personfilter','persondomfilter'));
               if ($env{'form.persondomfilter'} eq '') {
                   unless ($env{'form.gosearch'}) {
                       $filter->{'persondomfilter'} = $env{'request.role.domain'};
                   }
               } else {
                   $filter->{'persondomfilter'} =
                       &LONCAPA::clean_domain($env{'form.persondomfilter'});
               }
             if (($env{'form.personfilter'} ne '') && ($env{'form.persondomfilter'} ne '')) {              if (($env{'form.personfilter'} ne '') && ($env{'form.persondomfilter'} ne '')) {
                 if (&Apache::lonnet::homeserver($env{'form.personfilter'},                  if (&Apache::lonnet::homeserver($env{'form.personfilter'},
                                                  $env{'form.persondomfilter'}) eq 'no_host') {                                                   $env{'form.persondomfilter'}) eq 'no_host') {
Line 164  sub handler { Line 172  sub handler {
                 }                   } 
             }              }
         } else {          } else {
             push(@{$filterlist},'ownerfilter');              push(@{$filterlist},('ownerfilter','ownerdomfilter'));
         }          }
         # 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'} &&
Line 174  sub handler { Line 182  sub handler {
         if ($cloneruname ne '' && $clonerudom ne '') {          if ($cloneruname ne '' && $clonerudom ne '') {
             push(@{$filterlist},'cloneableonly');              push(@{$filterlist},'cloneableonly');
         }          }
           if ((ref($filterlist) eq 'ARRAY') && (ref($filter) eq 'HASH')) {
         $r->print(&build_filters($filterlist,$type,$roleelement,$multelement,              foreach my $item (@{$filterlist}) {
                                  $filter,$action,\$numtitles,undef,$cloneruname,                  $filter->{$item} = $env{'form.'.$item};
                                  $clonerudom,$typeelement));              }
           }
           if ($env{'form.form'} eq 'portform') {
               $filter->{'domainfilter'} ||= $env{'user.domain'};
           } elsif ($env{'form.form'} eq 'studentform') {
               $filter->{'domainfilter'} ||= $env{'request.role.domain'};
           }
           my $codedom;
           if ($env{'form.fixeddom'}) {
               $codedom = $env{'request.role.domain'};
           } else {
               $codedom = $filter->{'domainfilter'};
           }
           my ($clonetext,$clonewarning);
           if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {
               (my $coord_cloneable,$clonewarning) =
                   &get_coordinator_cloneable($cloneruname,$clonerudom,$type);
               if ($env{'form.form'} eq 'ccrs') {
                   $clonetext = '<input type="hidden" name="cloner" value="'.$env{'form.cloner'}.'" />'."\n";
               }
               if ($coord_cloneable) {
                   $clonetext .= '<input type="hidden" name="cc_clone" value="'.$coord_cloneable.'" />';
               }
           }
           $r->print(&Apache::loncommon::build_filters($filterlist,$type,$roleelement,$multelement,
                                                       $filter,$action,\$numtitles,undef,$cloneruname,
                                                       $clonerudom,$typeelement,\@codetitles,$codedom,
                                                       $env{'form.form'},$env{'form.fixeddom'},
                                                       $env{'form.prevphase'},$env{'form.cnameelement'},
                                                       $env{'form.cnumelement'},$env{'form.cdomelement'},
                                                       $env{'form.setroles'},$clonetext,$clonewarning));
     }      }
   
 # ---------------------------------------------------------------- Get the data  # ---------------------------------------------------------------- Get the data
Line 191  sub handler { Line 229  sub handler {
             }              }
         }          }
         my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles,          my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles,
                                       $cloneruname,$clonerudom,$domcloner);                                        $cloneruname,$clonerudom,$domcloner,\@codetitles);
         if ($nohost) {          if ($nohost) {
             $r->print ('<span class="LC_warning">'.              $r->print ('<span class="LC_warning">'.
                        &mt('User does not exist - username: [_1], domain: [_2].',                         &mt('User does not exist - username: [_1], domain: [_2].',
Line 207  sub handler { Line 245  sub handler {
 }  }
   
 sub js_changer {  sub js_changer {
     return <<"ENDJS";      return <<ENDJS;
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 function updateFilters(caller) {  function updateFilters(caller) {
     if (typeof(caller) != "undefined") {      if (typeof(caller) != "undefined") {
         document.filterpicker.updater.value = caller.name;          document.filterpicker.updater.value = caller.name;
     }      }
     document.filterpicker.submit();      document.filterpicker.submit();
 }  }
   // ]]>
 </script>  </script>
   
 ENDJS  ENDJS
   
 }  }
   
 sub processpick {  sub processpick {
Line 282  sub create_user_javascript { Line 319  sub create_user_javascript {
         my $cdom = $coursedescription{'domain'};          my $cdom = $coursedescription{'domain'};
         my $cnum = $coursedescription{'num'};          my $cnum = $coursedescription{'num'};
         my $crstype = $coursedescription{'type'};          my $crstype = $coursedescription{'type'};
           my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
           my ($showcredits,$credits);
           if (($crstype ne 'Community') &&
               (($domdefs{'officialcredits'} || $domdefs{'unofficialcredits'} || $domdefs{'textbookcredits'}))) {
               $showcredits = 1; 
               $credits = $coursedescription{'internal.defaultcredits'};
           }
         my $sec_element = 'currsec';          my $sec_element = 'currsec';
         my $grplist_element = 'groups';          my $grplist_element = 'groups';
         my ($sections,$groups) =          my ($sections,$groups) =
Line 292  sub create_user_javascript { Line 336  sub create_user_javascript {
         my $groupslist = join(',',@{$groups});          my $groupslist = join(',',@{$groups});
         $output = qq|          $output = qq|
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 function setSections() {  function setSections() {
     opener.document.$env{"form.form"}.$grplist_element.value='$groupslist';      opener.document.$env{"form.form"}.$grplist_element.value='$groupslist';
     window.opener.setSect('$seclist');      window.opener.setSect('$seclist');
Line 300  function setSections() { Line 345  function setSections() {
 function setRoles() {  function setRoles() {
     window.opener.setRole('$crstype');      window.opener.setRole('$crstype');
 }  }
   |;
           if ($showcredits) {
               $output .= qq|
   function setDefaultCredits() {
       window.opener.setCredits('$credits');
   }
   |;
           }
           $output .= qq|
   // ]]>
 </script>  </script>
 |;  |;
 ;  
     }      }
     return $output;      return $output;
 }  }
Line 325  sub display_matched_courses { Line 379  sub display_matched_courses {
             my $ccrolechk = ' ';              my $ccrolechk = ' ';
             my $menuchk = ' checked="checked" ';              my $menuchk = ' checked="checked" ';
             $r->print(              $r->print(
                 '<fieldset>'                  '<div class="LC_left_float">'
                .'<legend>'.&mt('Action').'</legend>'                 .'<fieldset>'
                .'<div class="LC_nobreak"><label>'                 .'<legend>'.&mt('Pick action').'</legend>'
                  .'<span class="LC_nobreak"><label>'
                .'<input type="radio" name="phase" value="ccrole"'.$ccrolechk.'/>'                 .'<input type="radio" name="phase" value="ccrole"'.$ccrolechk.'/>'
                .'&nbsp;');                 .'&nbsp;');
             if ($type eq 'Community') {              if ($type eq 'Community') {
Line 335  sub display_matched_courses { Line 390  sub display_matched_courses {
             } else {              } else {
                 $r->print(&mt('Enter the course with the role of [_1].',$cctitle));                  $r->print(&mt('Enter the course with the role of [_1].',$cctitle));
             }              }
             $r->print('</label></div>'              $r->print('</label></span><br />'
                .'<div class="LC_nobreak"><label>'                 .'<span class="LC_nobreak"><label>'
                .'<input type="radio" name="phase" value="menu"'.$menuchk.'/>&nbsp;');                 .'<input type="radio" name="phase" value="menu"'.$menuchk.'/>&nbsp;');
             if ($type eq 'Community') {              if ($type eq 'Community') {
                 $r->print(&mt('View or modify community settings which only a [_1] may modify.',$dctitle));                  $r->print(&mt('View or modify community settings which only a [_1] may modify.',$dctitle));
             } else {              } else {
                 $r->print(&mt('View or modify course settings which only a [_1] may modify.',$dctitle));                  $r->print(&mt('View or modify course settings which only a [_1] may modify.',$dctitle));
             }              }
             $r->print('</label></div>'              $r->print('</label></span>'
                .'</fieldset>'                 .'</fieldset></div>'
                .'<br />'                 .'<br clear="all" />'
             );              );
         }          }
     }      }
Line 364  sub display_matched_courses { Line 419  sub display_matched_courses {
     }      }
     
     if ($numcourses > 1 && $multiple) {      if ($numcourses > 1 && $multiple) {
         $r->print('<input type="button" value="check all"          $r->print('<input type="button" value="'.&mt('check all').'"
                   onclick="javascript:checkAll(document.courselist.course_id)" />                    onclick="javascript:checkAll(document.courselist.course_id)" />
                   &nbsp;&nbsp;<input type="button" value="uncheck all"                    &nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"
                   onclick="javascript:uncheckAll(document.courselist.course_id)" />                    onclick="javascript:uncheckAll(document.courselist.course_id)" />
                   <br /><br />');                    <br /><br />');
     }      }
Line 418  sub display_matched_courses { Line 473  sub display_matched_courses {
                             $canclone = 1;                              $canclone = 1;
                         }                          }
                     }                      }
                     unless ($canclone) {                      unless ($canclone) { 
                         if ($cc_cloneable{$cnum.':'.$cdom}) {                          if ($cc_cloneable{$cnum.':'.$cdom}) {
                             $canclone = 1;                              $canclone = 1;
                         }                          }
Line 439  sub display_matched_courses { Line 494  sub display_matched_courses {
                         }                          }
                     }                      }
                 }                  }
                 push(@owners,&unescape($courses{$course}{'owner'}));                  push(@owners,$courses{$course}{'owner'});
                 if (ref($courses{$course}{'co-owners'}) eq 'ARRAY') {                  if ($courses{$course}{'co-owners'} ne '') {
                     foreach my $item (@{$courses{$course}{'co-owners'}}) {                      foreach my $item (split(/,/,$courses{$course}{'co-owners'})) {
                         push(@owners,&unescape($item));                          push(@owners,$item);
                     }                      }
                 }                  }
             } else {              } else {
Line 494  sub display_matched_courses { Line 549  sub display_matched_courses {
     }      }
   
     if (!%courses) {      if (!%courses) {
         $r->print(&mt('None found'));          $r->print('<p class="LC_info">'.&mt('None found').'</p>');
     } elsif ($multiple) {      } elsif ($multiple) {
         $r->print('<input type="button" value="Submit" onClick="gochoose('."'','','')".'" />');          $r->print('<input type="button" value="'.&mt('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".
Line 541  sub multiples_tag { Line 596  sub multiples_tag {
     return ($jscript,$multelement);      return ($jscript,$multelement);
 }  }
   
 sub build_filters {  
     my ($filterlist,$type,$roleelement,$multelement,$filter,$action,  
         $numtitlesref,$caller,$cloneruname,$clonerudom,$typeelement) = @_;  
     my ($list,$formname,$fixeddom,$codedom,$jscript);  
     $codedom = $env{'request.role.domain'};  
     if (defined($env{'form.form'})) {  
         $formname = $env{'form.form'};  
     } else {  
         $formname = $caller;  
     }  
     my $onchange;  
     unless ($env{'form.interface'} eq 'textual') {  
         $onchange = 'javascript:updateFilters(this)';  
     }  
     my ($domainselectform,$sincefilterform,$createdfilterform,  
         $ownerdomselectform,$persondomselectform,$instcodeform,  
         $typeselectform,$instcodetitle);  
     foreach my $item (@{$filterlist}) {  
         $filter->{$item} = $env{'form.'.$item};  
         if ($item ne 'descriptfilter' && $item ne 'instcodefilter') {  
     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}) {  
                 $filter->{$item} = '';  
             }  
         }  
         if ($item eq 'domainfilter') {  
     my $allow_blank = 1;  
     if ($formname eq 'portform') {  
  $filter->{$item} ||= $env{'user.domain'};  
  $allow_blank=0;  
     } 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,'',$onchange);  
                 $codedom = $filter->{'domainfilter'};  
             }  
         } else {  
             $list->{$item} = &HTML::Entities::encode($filter->{$item},'<>&"');  
         }  
     }  
   
   
     # last course activity filter and selection  
     $sincefilterform = &timebased_select_form('sincefilter',$filter);  
   
     # course created filter and selection  
     if (exists($filter->{'createdfilter'})) {  
         $createdfilterform = &timebased_select_form('createdfilter',$filter);  
     }  
   
     my %lt = &Apache::lonlocal::texthash(  
                 'cac' => "$type Activity",  
                 'ccr' => "$type Created",  
                 'cde' => "$type Title",  
                 'cdo' => "$type Domain",  
                 'ins' => 'Institutional Code',  
                 'inc' => 'Institutional Categorization',  
                 'cow' => "$type Owner/Co-owner",  
                 'cop' => "$type Personnel Includes",  
                 'cog' => 'Type',  
              );  
   
     if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {  
         my $typeval = 'Course';  
         if ($type eq 'Community') {  
             $typeval = 'Community';  
         }  
         $typeselectform = '<input type="hidden" name="type" value="'.$typeval.'" />';  
     } else {  
         $typeselectform =  '<select name="type" size="1"';  
         if ($onchange) {  
             $typeselectform .= 'onchange="'.$onchange.'"';  
         }  
         $typeselectform .= '>'."\n";  
         foreach my $posstype ('Course','Community') {  
             $typeselectform.='<option value="'.$posstype.'"'.  
                 ($posstype eq $type ? ' selected="selected" ' : ''). ">".&mt($posstype)."</option>\n";  
         }  
         $typeselectform.="</select>";  
     }  
       
     my ($cloneableonlyform,$cloneabletitle);  
     if (exists($filter->{'cloneableonly'})) {  
         my $cloneableon = '';  
         my $cloneableoff = ' checked="checked"';  
         if ($filter->{'cloneableonly'}) {  
             $cloneableon = $cloneableoff;  
             $cloneableoff = '';  
         }  
         $cloneableonlyform = '<span class="LC_nobreak"><label><input type="radio" name="cloneableonly" value="1" '.$cloneableon.'/>&nbsp;'.&mt('Required').'</label>'.('&nbsp;'x3).'<label><input type="radio" name="cloneableonly" value="" '.$cloneableoff.' />&nbsp;'.&mt('No restriction').'</label></span>';  
         if ($env{'form.form'} eq 'ccrs') {  
             $cloneabletitle = &mt('Cloneable for').' '.$cloneruname.':'.$clonerudom;  
         } else {  
             $cloneabletitle = &mt('Cloneable by you');  
         }  
     }  
     my $officialjs;  
     if ($type eq 'Course') {  
         if (exists($filter->{'instcodefilter'})) {  
             if (($env{'form.fixeddom'}) || ($formname eq 'requestcrs')  
                 || ($formname eq 'modifycourse')) {  
                 $officialjs = 1;  
                 ($instcodeform,$jscript,$$numtitlesref) =   
                     &instcode_selectors($codedom,'filterpicker',$officialjs);  
                 if ($jscript) {  
                     $jscript = '<script type="text/javascript" language="Javascript">'.  
                                $jscript.'</script>'."\n";  
                 }  
             }  
             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.')';  
             }  
         }  
     }  
   
     my $output = qq|  
 <form method="post" name="filterpicker" action="$action">  
 <input type="hidden" name="form" value="$formname" />  
 |;  
     if ($formname eq 'modifycourse') {  
         $output .= '<input type="hidden" name="phase" value="courselist" />'."\n".  
                    '<input type="hidden" name="prevphase" value="'.  
                    $env{'form.prevphase'}.'" />'."\n";  
     } else {  
         my $name_input;  
         if ($env{'form.cnameelement'} ne '') {  
             $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="cdomelement" value="$env{'form.cdomelement'}" />  
 $name_input  
 $roleelement  
 $multelement  
 $typeelement  
 |;  
         if ($formname eq 'portform') {  
             $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) {   
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cac'})  
                   .$sincefilterform  
                   .&Apache::lonhtmlcommon::row_closure();  
     }  
     if ($createdfilterform) {  
         $output .= &Apache::lonhtmlcommon::row_title($lt{'ccr'})  
                   .$createdfilterform  
                   .&Apache::lonhtmlcommon::row_closure();  
     }  
     if ($domainselectform) {  
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})  
                   .$domainselectform  
                   .&Apache::lonhtmlcommon::row_closure();  
     }   
     if ($typeselectform) {  
         if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {  
             $output .= $typeselectform;  
         } else {  
             $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 ($cloneableonlyform) {  
         $output .= &Apache::lonhtmlcommon::row_title($cloneabletitle).  
                    $cloneableonlyform.&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().'<p>';  
     my ($coord_cloneable,$warning);  
     if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {  
         ($coord_cloneable,$warning) =   
             &get_coordinator_cloneable($cloneruname,$clonerudom,$type);  
         if ($env{'form.form'} eq 'ccrs') {  
             $output .= '<input type="hidden" name="cloner" value="'.$env{'form.cloner'}.'" />'."\n";  
         }  
         if ($coord_cloneable) {  
             $output .= '<input type="hidden" name="cc_clone" value="'.$coord_cloneable.'" />';  
         }  
     }  
     $output .= '<input type="hidden" name="updater" value="">'."\n".  
                '<input type="submit" name="gosearch" value="'.   
                &mt('Search').'" /></p>'."\n".'</form>'."\n".'<hr />'."\n";  
     return $jscript.$warning.$output;  
 }  
   
 sub timebased_select_form {  
     my ($item,$filter) = @_;  
     if (ref($filter) eq 'HASH') {  
         $filter->{$item} = $env{'form.'.$item};  
         $filter->{$item} =~ s/[^\d-]//g;  
         if (!$filter->{$item}) { $filter->{$item}=-1; }  
         return &Apache::loncommon::select_form(  
                             $filter->{$item},  
                             $item,  
                             (      '-1' => '',  
                                 '86400' => &mt('today'),  
                                '604800' => &mt('last week'),  
                               '2592000' => &mt('last month'),  
                               '7776000' => &mt('last three months'),  
                              '15552000' => &mt('last six months'),  
                              '31104000' => &mt('last year'),  
                     'select_form_order' =>  
                            ['-1','86400','604800','2592000','7776000',  
                             '15552000','31104000']));  
     }  
 }  
   
 sub get_coordinator_cloneable {  sub get_coordinator_cloneable {
     my ($cloneruname,$clonerudom,$type) = @_;      my ($cloneruname,$clonerudom,$type) = @_;
     if (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') {      if (($cloneruname!~/\w/) || ($clonerudom!~/\w/)) {
           my $warning = '<div class="LC_warning">'.&mt('Intended course owner not specified').
                      '</div>';
           return ('',$warning);
       } elsif (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') {
         my $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist').          my $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist').
                    '</div>';                     '</div>';
         return ('',$warning);          return ('',$warning);
Line 856  sub get_coordinator_cloneable { Line 624  sub get_coordinator_cloneable {
     }      }
 }  }
   
 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 $official = ' checked="checked" ';  
         my $unofficial = '';  
         if ($env{'form.official'} eq 'off') {  
             $unofficial = $official;  
             $official = '';  
         }  
         $output .= '<span class="LC_nobreak">'.&mt('Official course:').'&nbsp;<label>'.  
                    '<input type="radio" name="official" value="on"'.$official.' />'.  
                    &mt('Yes').'</label>'.('&nbsp;'x3).'<label>'.  
                    '<input type="radio" name="official" value="off"'.$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,$numtitles,$cloneruname,$clonerudom,$domcloner) = @_;      my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner,$codetitles) = @_;
     my (%courses,%showcourses,$cloner,$ccrole);      my (%courses,%showcourses,$cloner,$ccrole);
     if ($type eq 'Community') {      if ($type eq 'Community') {
         $ccrole = 'co';          $ccrole = 'co';
Line 892  sub search_courses { Line 633  sub search_courses {
         $ccrole = 'cc';          $ccrole = 'cc';
     }      }
     if (!$onlyown) {      if (!$onlyown) {
         $r->print(&mt('Searching ...').'<br />&nbsp;<br />');          $r->print('<div id="searching">'.&mt('Searching ...').'</div>');
         $r->rflush();          $r->rflush();
         if (($filter->{'ownerfilter'} ne '') ||          if (($filter->{'ownerfilter'} ne '') ||
             ($filter->{'ownerdomfilter'} ne '')) {              ($filter->{'ownerdomfilter'} ne '')) {
Line 905  sub search_courses { Line 646  sub search_courses {
             }              }
         }          }
         my $now = time;          my $now = time;
         my $timefilter =          my $timefilter = 
            ($filter->{'sincefilter'}==-1?1:$now-$filter->{'sincefilter'});             ($filter->{'sincefilter'}==-1?1:$now-$filter->{'sincefilter'});
         my ($createdbefore,$createdafter);          my ($createdbefore,$createdafter);
         if (($filter->{'createdfilter'} ne '') && ($filter->{'createdfilter'} !=-1)) {          if (($filter->{'createdfilter'} ne '') && ($filter->{'createdfilter'} !=-1)) {
Line 916  sub search_courses { Line 657  sub search_courses {
         if ($numtitles) {          if ($numtitles) {
             if ($env{'form.official'} eq 'on') {              if ($env{'form.official'} eq 'on') {
                 $instcodefilter =                   $instcodefilter = 
                     &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles);                      &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles,$codetitles);
                 $regexpok = 1;                  $regexpok = 1;
             } elsif ($env{'form.official'} eq 'off') {              } elsif ($env{'form.official'} eq 'off') {
                 $instcodefilter = &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles);                  $instcodefilter = &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles,$codetitles);
                 unless ($instcodefilter eq '') {                  unless ($instcodefilter eq '') {
                     $regexpok = -1;                      $regexpok = -1;
                 }                  }
Line 991  sub course_chooser { Line 732  sub course_chooser {
             $output = &mt('No rights to clone')."\n";              $output = &mt('No rights to clone')."\n";
         }          }
     } else {      } else {
         $output = '<input type="button" value="'.&mt('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 1011  sub gochoose_javascript { Line 752  sub gochoose_javascript {
                                  list  => 'courselist',                                   list  => 'courselist',
                               },                                },
                     );                      );
     my $output .= qq|      my $output = qq|
 <script type="text/javascript">  
 function gochoose(cname,cdom,cdesc) {  function gochoose(cname,cdom,cdesc) {
     var openerForm = "$env{'form.form'}";      var openerForm = "$env{'form.form'}";
     courseCount = 0;      courseCount = 0;
Line 1061  ENDSCRIPT Line 801  ENDSCRIPT
     } else {      } else {
         my ($name_code,$type_code);          my ($name_code,$type_code);
         if ($env{'form.cnameelement'} ne '') {          if ($env{'form.cnameelement'} ne '') {
             $name_code = 'opener.document.'.$env{'form.form'}.'.'.              $name_code = <<ENDNAMECODE;  
                           $env{'form.cnameelement'}.'.value=cdesc;';  var showcdesc = cdesc;
   if (cdesc.length > 25) {
       showcdesc = cdesc.substr(0,25)+' ...'; 
   }
   opener.document.$env{'form.form'}.$env{'form.cnameelement'}.value=showcdesc;
   ENDNAMECODE
         }          }
         if ($env{'form.typeelement'} ne '') {          if ($env{'form.typeelement'} ne '') {
             $type_code = 'opener.document.'.$env{'form.form'}.'.'.              $type_code = 'opener.document.'.$env{'form.form'}.'.'.
Line 1093  ENDSCRIPT Line 838  ENDSCRIPT
     $autosubmit      $autosubmit
     $lastaction      $lastaction
 }  }
 </script>  
 |;  |;
     return $output;      return &Apache::lonhtmlcommon::scripttag($output);
 }  }
   
 1;  1;
Line 1212  Output: 2 - $jscript - javascript for ch Line 956  Output: 2 - $jscript - javascript for ch
 Side Effects: None  Side Effects: None
   
 =item *  =item *
 X<build_filters()>  
 B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action,$numfiltersref,$caller,$cloneruname,$clonerudom,$typeelem)>:  
   
   
 Input: 11 - anonymous array of search criteria; course type; $roleelement ; $multelement ; anonymous hash of criteria and their values; form action; ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number); caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm), username and domain of new course owner who wants to clone, $tyepelem   
   
 Output: 1 - $output - HTML for display of search criteria, and hidden form elements.   
   
 Side Effects: None  
   
 =item *  
 X<search_courses()>  X<search_courses()>
 B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,  B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,
                  $domcloner)>:                   $domcloner,$codetitles)>:
   
   
 Input: 8 -  request object, course type, search scope: only courses in which user has active role (1), or any course (0); anonymous hash of criteria and their values; for institutional codes - number of categories; optional username of new course owner, optional domain of new course owner). Seventh and eighth needed when search is for courses to clone from course request form, or course creation form (DC). Optional "domcloner" flag (has value=1 if user has ccc priv in domain being filtered by (used when DC is using course creation form).  Input: 9 -  request object, course type, search scope: only courses in which user has active role (1), or any course (0); anonymous hash of criteria and their values; for institutional codes - number of categories; optional username of new course owner, optional domain of new course owner). Seventh and eighth needed when search is for courses to clone from course request form, or course creation form (DC). Optional "domcloner" flag (has value=1 if user has ccc priv in  
   domain being filtered by (used when DC is using course creation form). Ninth is reference to array of titles of components in institutional codes (official courses).
   
 Output: 1 - %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type.  Output: 1 - %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type.
   
Line 1288  javascript functions used when user sele Line 1022  javascript functions used when user sele
   
 =item  =item
   
 (g) Scantron Operator uploading a scantron file to a course - course number is written to visible form element in opener window. Child window closes.  (g) Bubblesheet Scanning Operator uploading a bubblesheet file to a course - course number is written to visible form element in opener window. Child window closes.
   
 =item  =item
   

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


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