[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lon-capa-cvs
Subject:    [LON-CAPA-cvs] cvs: loncom /interface loncommon.pm lonmodifycourse.pm lonpickcourse.pm
From:       raeburn <raeburn () source ! lon-capa ! org>
Date:       2014-03-17 2:45:26
Message-ID: cvsraeburn1395024326 () cvsserver
[Download RAW message or body]

This is a MIME encoded message


raeburn		Mon Mar 17 02:45:26 2014 EDT

  Modified files:              
    /loncom/interface	loncommon.pm lonpickcourse.pm lonmodifycourse.pm 
  Log:
  - &search_courses() and &js_changer() moved from lonpickcourse.pm to 
    loncommon.pm to facilitate reuse.
  
  
["raeburn-20140317024526.txt" (text/plain)]

Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1181 loncom/interface/loncommon.pm:1.1182
--- loncom/interface/loncommon.pm:1.1181	Thu Mar 13 14:46:46 2014
+++ loncom/interface/loncommon.pm	Mon Mar 17 02:45:25 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1181 2014/03/13 14:46:46 raeburn Exp $
+# $Id: loncommon.pm,v 1.1182 2014/03/17 02:45:25 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -69,6 +69,7 @@
 use Apache::lonclonecourse();
 use Apache::lonuserutils();
 use Apache::lonuserstate();
+use Apache::courseclassifier();
 use LONCAPA qw(:DEFAULT :match);
 use DateTime::TimeZone;
 use DateTime::Locale::Catalog;
@@ -14701,7 +14702,9 @@
 =item * &build_filters()
 
 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:
 
@@ -14720,7 +14723,7 @@
 
 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
 
@@ -14750,8 +14753,10 @@
 
 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.
 
+
 Side Effects: None
 
 =cut
@@ -14764,7 +14769,7 @@
         $codetitlesref,$codedom,$formname,$fixeddom,$prevphase,
         $cnameelement,$cnumelement,$cdomelement,$setroles,
         $clonetext,$clonewarning) = @_;
-    my ($list,$fixeddom,$jscript);
+    my ($list,$jscript);
     my $onchange = 'javascript:updateFilters(this)';
     my ($domainselectform,$sincefilterform,$createdfilterform,
         $ownerdomselectform,$persondomselectform,$instcodeform,
@@ -14876,15 +14881,19 @@
     my $officialjs;
     if ($crstype eq 'Course') {
         if (exists($filter->{'instcodefilter'})) {
-            if (($fixeddom) || ($formname eq 'requestcrs')
-                || ($formname eq 'modifycourse')) {
+#            if (($fixeddom) || ($formname eq 'requestcrs') ||
+#                ($formname eq 'modifycourse') || ($formname eq 'filterpicker')) {
+            if ($codedom) { 
                 $officialjs = 1;
                 ($instcodeform,$jscript,$$numtitlesref) =
                     \
                &Apache::courseclassifier::instcode_selectors($codedom,'filterpicker',
                
                                                                   \
$officialjs,$codetitlesref);  if ($jscript) {
-                    $jscript = '<script type="text/javascript" \
                language="Javascript">'.
-                               $jscript.'</script>'."\n";
+                    $jscript = '<script type="text/javascript">'."\n".
+                               '// <![CDATA['."\n".
+                               $jscript."\n".
+                               '// ]]>'."\n".
+                               '</script>'."\n";
                 }
             }
             if ($instcodeform eq '') {
@@ -14908,15 +14917,15 @@
         $output .= '<input type="hidden" name="phase" value="courselist" />'."\n".
                    '<input type="hidden" name="prevphase" value="'.
                    $prevphase.'" />'."\n";
-    } else {
+    } elsif ($formname ne 'quotacheck') {
         my $name_input;
         if ($cnameelement ne '') {
             $name_input = '<input type="hidden" name="cnameelement" value="'.
                           $cnameelement.'" />';
         }
         $output .= qq|
-<input type="hidden" name="cnumelement" value="$cnumelement.'" />
-<input type="hidden" name="cdomelement" value="$cdomelement.'" />
+<input type="hidden" name="cnumelement" value="$cnumelement" />
+<input type="hidden" name="cdomelement" value="$cdomelement" />
 $name_input
 $roleelement
 $multelement
@@ -15002,7 +15011,7 @@
 
 =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
 or communities
 
@@ -15073,6 +15082,128 @@
 
 =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
 
 =cut
Index: loncom/interface/lonpickcourse.pm
diff -u loncom/interface/lonpickcourse.pm:1.111 \
                loncom/interface/lonpickcourse.pm:1.112
--- loncom/interface/lonpickcourse.pm:1.111	Thu Mar 13 14:46:46 2014
+++ loncom/interface/lonpickcourse.pm	Mon Mar 17 02:45:25 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Pick a course
 #
-# $Id: lonpickcourse.pm,v 1.111 2014/03/13 14:46:46 raeburn Exp $
+# $Id: lonpickcourse.pm,v 1.112 2014/03/17 02:45:25 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -36,7 +36,6 @@
 use Apache::lonnet;
 use Apache::lonlocal;
 use Apache::longroup;
-use Apache::courseclassifier;
 use LONCAPA qw(:DEFAULT :match);
 
 sub handler {
@@ -108,7 +107,7 @@
         ($env{'form.pickedcourse'})) {
         $loaditem{'onload'} .= 'setDefaultCredits();setRoles();setSections();';
     }
-    my $js = &js_changer();
+    my $js = &Apache::loncommon::js_changer();
     $r->print(&Apache::loncommon::start_page($title,$js,
 					     {'add_entries' => \%loaditem,
 					      'no_nav_bar'  => 1, }));
@@ -141,7 +140,7 @@
     my $filter = {};
     my $action = '/adm/pickcourse';
     my ($numtitles,$showroles,$nohost,@codetitles);
-    if (!$onlyown) {
+    unless ($onlyown) {
         my $filterlist = ['domainfilter','sincefilter'];
         # created filter for DCs only
         if ($env{'user.adv'} && $env{'form.domainfilter'} &&
@@ -228,8 +227,21 @@
                 $domcloner = 1;
             }
         }
-        my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles,
-                                      \
$cloneruname,$clonerudom,$domcloner,\@codetitles); +        my %courses;
+        if (!$onlyown) {
+            $r->print('<div id="searching">'.&mt('Searching ...').'</div>');
+            $r->rflush();
+            my $srchdom = $filter->{'domainfilter'};
+            %courses = \
&Apache::loncommon::search_courses($srchdom,$type,$filter,$numtitles, +               \
$cloneruname,$clonerudom,$domcloner, +                                                \
\@codetitles,$env{'form.cc_clone'}); +        } else {
+            $r->print('<br />');
+            my %coursehash = &Apache::loncommon::findallcourses();
+            foreach my $cid (sort(keys(%coursehash))) {
+                $courses{$cid}{'description'} = $env{'course.'.$cid.'.description'};
+            }
+        }
         if ($nohost) {
             $r->print ('<span class="LC_warning">'.
                        &mt('User does not exist - username: [_1], domain: [_2].',
@@ -244,22 +256,6 @@
     return OK;
 }
 
-sub js_changer {
-    return <<ENDJS;
-<script type="text/javascript">
-// <![CDATA[
-function updateFilters(caller) {
-    if (typeof(caller) != "undefined") {
-        document.filterpicker.updater.value = caller.name;
-    }
-    document.filterpicker.submit();
-}
-// ]]>
-</script>
-
-ENDJS
-}
-
 sub processpick {
     my $openerform = 'rolechoice';
     if ($env{'form.form'} eq 'studentform') {
@@ -624,102 +620,6 @@
     }
 }
 
-sub search_courses {
-    my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner,$codetitles) \
                = @_;
-    my (%courses,%showcourses,$cloner,$ccrole);
-    if ($type eq 'Community') {
-        $ccrole = 'co';
-    } else {
-        $ccrole = 'cc';
-    }
-    if (!$onlyown) {
-        $r->print('<div id="searching">'.&mt('Searching ...').'</div>');
-        $r->rflush();
-        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($filter->{'domainfilter'},$numtitles,$codetitles);
                
-                $regexpok = 1;
-            } elsif ($env{'form.official'} eq 'off') {
-                $instcodefilter = \
&Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$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($filter->{'domainfilter'},
-                                          $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 %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'},
-                                                         \
                $filter->{'persondomfilter'},
-                                                         'userroles',undef,
-                                                         \
                [$ccrole,'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 {
-        $r->print('<br />');
-        my %coursehash = &Apache::loncommon::findallcourses(); 
-        foreach my $cid (sort(keys(%coursehash))) {
-            $courses{$cid}{'description'} = $env{'course.'.$cid.'.description'};
-        }
-    }
-    return %courses;
-}
-
 sub course_chooser {
     my ($multiple,$cdom,$cnum,$cleandesc,$canclone) = @_;
     my $output; 
@@ -955,19 +855,6 @@
 
 Side Effects: None
 
-=item *
-X<search_courses()>
-B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,
-                 $domcloner,$codetitles)>:
-
-
-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.
-
-Side Effects: None
-
 
 =item *
 X<course_chooser()>
Index: loncom/interface/lonmodifycourse.pm
diff -u loncom/interface/lonmodifycourse.pm:1.69 \
                loncom/interface/lonmodifycourse.pm:1.70
--- loncom/interface/lonmodifycourse.pm:1.69	Thu Mar 13 14:46:46 2014
+++ loncom/interface/lonmodifycourse.pm	Mon Mar 17 02:45:25 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # handler for DC-only modifiable course settings
 #
-# $Id: lonmodifycourse.pm,v 1.69 2014/03/13 14:46:46 raeburn Exp $
+# $Id: lonmodifycourse.pm,v 1.70 2014/03/17 02:45:25 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -153,7 +153,7 @@
         $type = 'Course';
     }
     &print_header($r,$type);
-    my ($filterlist,$filter) = &get_filters();
+    my ($filterlist,$filter) = &get_filters($dom);
     my ($numtitles,$cctitle,$dctitle,@codetitles);
     my $ccrole = 'cc';
     if ($type eq 'Community') {
@@ -161,7 +161,7 @@
     }
     $cctitle = &Apache::lonnet::plaintext($ccrole,$type);
     $dctitle = &Apache::lonnet::plaintext('dc');
-    $r->print(&Apache::lonpickcourse::js_changer());
+    $r->print(&Apache::loncommon::js_changer());
     if ($type eq 'Community') {
         $r->print('<h3>'.&mt('Search for a community in the [_1] \
domain',$domdesc).'</h3>');  } else {
@@ -169,7 +169,7 @@
     }
     $r->print(&Apache::loncommon::build_filters($filterlist,$type,undef,undef,$filter,$action,
                
                                                 \
                \$numtitles,'modifycourse',undef,undef,undef,
-                                                \
\@codetitles,$filter->{'domainfilter'})); +                                           \
\@codetitles,$dom));  if ($type eq 'Community') {
         $r->print(&mt('Actions available after searching for a community:').'<ul>'.
                   '<li>'.&mt('Enter the community with the role of \
[_1]',$cctitle).'</li>'."\n". @@ -197,27 +197,24 @@
     my $action = '/adm/modifycourse';
     my $dctitle = &Apache::lonnet::plaintext('dc');
     my ($numtitles,@codetitles);
-    $r->print(&Apache::lonpickcourse::js_changer());
+    $r->print(&Apache::loncommon::js_changer());
     $r->print(&mt('Revise your search criteria for this domain').' \
                ('.$domdesc.').<br />');
     $r->print(&Apache::loncommon::build_filters($filterlist,$type,undef,undef,$filter,$action,
                
                                                 \
                \$numtitles,'modifycourse',undef,undef,undef,
-                                                \
                \@codetitles,$filter->{'domainfilter'},
-                                                $env{'form.form'}));
-    if (ref($filter) eq 'HASH') {
-        $filter->{'domainfilter'} = $dom;
-    }
-    my %courses = &Apache::lonpickcourse::search_courses($r,$type,0,$filter,$numtitles,
                
-                                                         \
undef,undef,undef,\@codetitles); +                                                \
\@codetitles,$dom,$env{'form.form'})); +    my %courses = \
&Apache::loncommon::search_courses($dom,$type,$filter,$numtitles, +                   \
                undef,undef,undef,\@codetitles);
     &Apache::lonpickcourse::display_matched_courses($r,$type,0,$action,undef,undef,undef,
  %courses);
     return;
 }
 
 sub get_filters {
+    my ($dom) = @_;
     my @filterlist = ('descriptfilter','instcodefilter','ownerfilter',
                       'ownerdomfilter','coursefilter','sincefilter');
     # created filter
-    my $loncaparev = \
&Apache::lonnet::get_server_loncaparev($env{'form.domainfilter'}); +    my \
$loncaparev = &Apache::lonnet::get_server_loncaparev($dom);  if ($loncaparev ne \
'unknown_cmd') {  push(@filterlist,'createdfilter');
     }



_______________________________________________
LON-CAPA-cvs mailing list
LON-CAPA-cvs@mail.lon-capa.org
http://mail.lon-capa.org/mailman/listinfo/lon-capa-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic