Diff for /loncom/interface/loncommon.pm between versions 1.1181 and 1.1182

version 1.1181, 2014/03/13 14:46:46 version 1.1182, 2014/03/17 02:45:25
Line 69  use Apache::lontexconvert(); Line 69  use Apache::lontexconvert();
 use Apache::lonclonecourse();  use Apache::lonclonecourse();
 use Apache::lonuserutils();  use Apache::lonuserutils();
 use Apache::lonuserstate();  use Apache::lonuserstate();
   use Apache::courseclassifier();
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use DateTime::TimeZone;  use DateTime::TimeZone;
 use DateTime::Locale::Catalog;  use DateTime::Locale::Catalog;
Line 14701  sub clean_symb { Line 14702  sub clean_symb {
 =item * &build_filters()  =item * &build_filters()
   
 Create markup for a table used to set filters to use when selecting  Create markup for a table used to set filters to use when selecting
 courses in a domain.  Used by lonpickcourse.pm and lonmodifycourse.pm  courses in a domain.  Used by lonpickcourse.pm, lonmodifycourse.pm
   and quotacheck.pl
   
   
 Inputs:  Inputs:
   
Line 14720  action - form action Line 14723  action - form action
   
 numfiltersref - ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number)  numfiltersref - ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number)
   
 caller - caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm  caller - caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm)
   
 cloneruname - username of owner of new course who wants to clone  cloneruname - username of owner of new course who wants to clone
   
Line 14750  clonetext - hidden form elements contain Line 14753  clonetext - hidden form elements contain
   
 clonewarning - warning message about missing information for intended course owner when DC creates a course  clonewarning - warning message about missing information for intended course owner when DC creates a course
   
   
 Returns: $output - HTML for display of search criteria, and hidden form elements.  Returns: $output - HTML for display of search criteria, and hidden form elements.
   
   
 Side Effects: None  Side Effects: None
   
 =cut  =cut
Line 14764  sub build_filters { Line 14769  sub build_filters {
         $codetitlesref,$codedom,$formname,$fixeddom,$prevphase,          $codetitlesref,$codedom,$formname,$fixeddom,$prevphase,
         $cnameelement,$cnumelement,$cdomelement,$setroles,          $cnameelement,$cnumelement,$cdomelement,$setroles,
         $clonetext,$clonewarning) = @_;          $clonetext,$clonewarning) = @_;
     my ($list,$fixeddom,$jscript);      my ($list,$jscript);
     my $onchange = 'javascript:updateFilters(this)';      my $onchange = 'javascript:updateFilters(this)';
     my ($domainselectform,$sincefilterform,$createdfilterform,      my ($domainselectform,$sincefilterform,$createdfilterform,
         $ownerdomselectform,$persondomselectform,$instcodeform,          $ownerdomselectform,$persondomselectform,$instcodeform,
Line 14876  sub build_filters { Line 14881  sub build_filters {
     my $officialjs;      my $officialjs;
     if ($crstype eq 'Course') {      if ($crstype eq 'Course') {
         if (exists($filter->{'instcodefilter'})) {          if (exists($filter->{'instcodefilter'})) {
             if (($fixeddom) || ($formname eq 'requestcrs')  #            if (($fixeddom) || ($formname eq 'requestcrs') ||
                 || ($formname eq 'modifycourse')) {  #                ($formname eq 'modifycourse') || ($formname eq 'filterpicker')) {
               if ($codedom) { 
                 $officialjs = 1;                  $officialjs = 1;
                 ($instcodeform,$jscript,$$numtitlesref) =                  ($instcodeform,$jscript,$$numtitlesref) =
                     &Apache::courseclassifier::instcode_selectors($codedom,'filterpicker',                      &Apache::courseclassifier::instcode_selectors($codedom,'filterpicker',
                                                                   $officialjs,$codetitlesref);                                                                    $officialjs,$codetitlesref);
                 if ($jscript) {                  if ($jscript) {
                     $jscript = '<script type="text/javascript" language="Javascript">'.                      $jscript = '<script type="text/javascript">'."\n".
                                $jscript.'</script>'."\n";                                 '// <![CDATA['."\n".
                                  $jscript."\n".
                                  '// ]]>'."\n".
                                  '</script>'."\n";
                 }                  }
             }              }
             if ($instcodeform eq '') {              if ($instcodeform eq '') {
Line 14908  sub build_filters { Line 14917  sub build_filters {
         $output .= '<input type="hidden" name="phase" value="courselist" />'."\n".          $output .= '<input type="hidden" name="phase" value="courselist" />'."\n".
                    '<input type="hidden" name="prevphase" value="'.                     '<input type="hidden" name="prevphase" value="'.
                    $prevphase.'" />'."\n";                     $prevphase.'" />'."\n";
     } else {      } elsif ($formname ne 'quotacheck') {
         my $name_input;          my $name_input;
         if ($cnameelement ne '') {          if ($cnameelement ne '') {
             $name_input = '<input type="hidden" name="cnameelement" value="'.              $name_input = '<input type="hidden" name="cnameelement" value="'.
                           $cnameelement.'" />';                            $cnameelement.'" />';
         }          }
         $output .= qq|          $output .= qq|
 <input type="hidden" name="cnumelement" value="$cnumelement.'" />  <input type="hidden" name="cnumelement" value="$cnumelement" />
 <input type="hidden" name="cdomelement" value="$cdomelement.'" />  <input type="hidden" name="cdomelement" value="$cdomelement" />
 $name_input  $name_input
 $roleelement  $roleelement
 $multelement  $multelement
Line 15002  $typeelement Line 15011  $typeelement
   
 =item * &timebased_select_form()  =item * &timebased_select_form()
   
 Create markup for an option response item used to select a time-based  Create markup for a dropdown list used to select a time-based
 filter e.g., Course Activity, Course Created, when searching for courses  filter e.g., Course Activity, Course Created, when searching for courses
 or communities  or communities
   
Line 15073  ENDJS Line 15082  ENDJS
   
 =pod  =pod
   
   =item * &search_courses()
   
   Process selected filters form course search form and pass to lonnet::courseiddump
   to retrieve a hash for which keys are courseIDs which match the selected filters.
   
   Inputs:
   
   dom - domain being searched 
   
   type - course type ('Course' or 'Community' or '.' if any).
   
   filter - anonymous hash of criteria and their values
   
   numtitles - for institutional codes - number of categories
   
   cloneruname - optional username of new course owner
   
   clonerudom - optional domain of new course owner
   
   domcloner - Optional "domcloner" flag; has value=1 if user has ccc priv in domain being filtered by, 
               (used when DC is using course creation form)
   
   codetitles - reference to array of titles of components in institutional codes (official courses).
   
   
   Returns: %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type.
   
   
   Side Effects: None
   
   =cut
   
   
   sub search_courses {
       my ($dom,$type,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner,$codetitles) = @_;
       my (%courses,%showcourses,$cloner);
       if (($filter->{'ownerfilter'} ne '') ||
           ($filter->{'ownerdomfilter'} ne '')) {
           $filter->{'combownerfilter'} = $filter->{'ownerfilter'}.':'.
                                          $filter->{'ownerdomfilter'};
       }
       foreach my $item ('descriptfilter','coursefilter','combownerfilter') {
           if (!$filter->{$item}) {
               $filter->{$item}='.';
           }
       }
       my $now = time;
       my $timefilter =
          ($filter->{'sincefilter'}==-1?1:$now-$filter->{'sincefilter'});
       my ($createdbefore,$createdafter);
       if (($filter->{'createdfilter'} ne '') && ($filter->{'createdfilter'} !=-1)) {
           $createdbefore = $now;
           $createdafter = $now-$filter->{'createdfilter'};
       }
       my ($instcodefilter,$regexpok);
       if ($numtitles) {
           if ($env{'form.official'} eq 'on') {
               $instcodefilter =
                   &Apache::courseclassifier::instcode_search_str($dom,$numtitles,$codetitles);
               $regexpok = 1;
           } elsif ($env{'form.official'} eq 'off') {
               $instcodefilter = &Apache::courseclassifier::instcode_search_str($dom,$numtitles,$codetitles);
               unless ($instcodefilter eq '') {
                   $regexpok = -1;
               }
           }
       } else {
           $instcodefilter = $filter->{'instcodefilter'};
       }
       if ($instcodefilter eq '') { $instcodefilter = '.'; }
       if ($type eq '') { $type = '.'; }
   
       if (($clonerudom ne '') && ($cloneruname ne '')) {
           $cloner = $cloneruname.':'.$clonerudom;
       }
       %courses = &Apache::lonnet::courseiddump($dom,
                                                $filter->{'descriptfilter'},
                                                $timefilter,
                                                $instcodefilter,
                                                $filter->{'combownerfilter'},
                                                $filter->{'coursefilter'},
                                                undef,undef,$type,$regexpok,undef,undef,
                                                undef,undef,$cloner,$env{'form.cc_clone'},
                                                $filter->{'cloneableonly'},
                                                $createdbefore,$createdafter,undef,
                                                $domcloner);
       if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) {
           my $ccrole;
           if ($type eq 'Community') {
               $ccrole = 'co';
           } else {
               $ccrole = 'cc';
           }
           my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'},
                                                        $filter->{'persondomfilter'},
                                                        'userroles',undef,
                                                        [$ccrole,'in','ad','ep','ta','cr'],
                                                        $dom);
           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;
       }
       return %courses;
   }
   
   
   =pod
   
 =back  =back
   
 =cut  =cut

Removed from v.1.1181  
changed lines
  Added in v.1.1182


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