[LON-CAPA-cvs] cvs: loncom(version_2_9_X) /interface lonpickcourse.pm

raeburn raeburn@source.lon-capa.org
Fri, 20 Aug 2010 20:14:03 -0000


This is a MIME encoded message

--raeburn1282335243
Content-Type: text/plain

raeburn		Fri Aug 20 20:14:03 2010 EDT

  Modified files:              (Branch: version_2_9_X)
    /loncom/interface	lonpickcourse.pm 
  Log:
  - Backport 1.94, 1.98n being filtered by (used when DC is using course creation form). .
  
  
--raeburn1282335243
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20100820201403.txt"

Index: loncom/interface/lonpickcourse.pm
diff -u loncom/interface/lonpickcourse.pm:1.93.2.1 loncom/interface/lonpickcourse.pm:1.93.2.2
--- loncom/interface/lonpickcourse.pm:1.93.2.1	Sat Jun 19 01:38:03 2010
+++ loncom/interface/lonpickcourse.pm	Fri Aug 20 20:14:03 2010
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Pick a course
 #
-# $Id: lonpickcourse.pm,v 1.93.2.1 2010/06/19 01:38:03 raeburn Exp $
+# $Id: lonpickcourse.pm,v 1.93.2.2 2010/08/20 20:14:03 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -142,8 +142,17 @@
     my $action = '/adm/pickcourse';
     my ($numtitles,$showroles,$nohost);
     if (!$onlyown) {
-        my $filterlist = ['domainfilter','descriptfilter',
-                          'instcodefilter'];
+        my $filterlist = ['domainfilter'];
+        if ($env{'user.adv'} && $env{'form.domainfilter'} &&
+            exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'})
+            && $env{'form.form'} ne 'portform') {
+            my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'form.domainfilter'});
+            if ($loncaparev ne 'unknown_cmd') {
+                push(@{$filterlist},'createdfilter');
+            }
+        }
+        push(@{$filterlist},('descriptfilter','instcodefilter'));
+
         if ($env{'form.form'} eq 'rules') {
             push(@{$filterlist},'personfilter');
             if (($env{'form.personfilter'} ne '') && ($env{'form.persondomfilter'} ne '')) {
@@ -174,8 +183,15 @@
 # ---------------------------------------------------------------- Get the data
     if ((($env{'form.gosearch'}) && ($env{'form.updater'} eq '')) || 
          $onlyown) {
+        my $domcloner;
+        if ($env{'form.form'} eq 'ccrs') {
+            if (($env{'request.role.domain'} eq $env{'form.domainfilter'}) &&
+                (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {
+                $domcloner = 1;
+            }
+        }
         my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles,
-                                      $cloneruname,$clonerudom);
+                                      $cloneruname,$clonerudom,$domcloner);
         if ($nohost) {
             $r->print ('<span class="LC_warning">'.
                        &mt('User does not exist - username: [_1], domain: [_2].',
@@ -396,8 +412,16 @@
                 $instcode = $courses{$course}{'inst_code'};
                 $ttype = $courses{$course}{'type'};
                 if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {
-                    if ($cc_cloneable{$courses{$course}{'cnum'}.':'.$courses{$course}{'domain'}}) {
-                        $canclone = 1;
+                    if ($env{'form.form'} eq 'ccrs') {
+                        if (($env{'request.role.domain'} eq $cdom) &&
+                            (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {
+                            $canclone = 1;
+                        }
+                    }
+                    unless ($canclone) {
+                        if ($cc_cloneable{$cnum.':'.$cdom}) {
+                            $canclone = 1;
+                        }
                     }
                     unless ($canclone) {
                         my $cloners = $courses{$course}{'cloners'};
@@ -531,8 +555,9 @@
     unless ($env{'form.interface'} eq 'textual') {
         $onchange = 'javascript:updateFilters(this)';
     }
-    my ($domainselectform,$sincefilterform,$ownerdomselectform,$persondomselectform,
-        $instcodeform,$typeselectform,$instcodetitle);
+    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') {
@@ -594,26 +619,18 @@
         }
     }
 
+
     # last course activity filter and selection
-    $filter->{'sincefilter'} = $env{'form.sincefilter'};
-    $filter->{'sincefilter'} =~ s/[^\d-]//g;
-    if (!$filter->{'sincefilter'}) { $filter->{'sincefilter'}=-1; }
-    $sincefilterform=&Apache::loncommon::select_form(
-        $filter->{'sincefilter'},
-        'sincefilter',
-        (      '-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']));
+    $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',
@@ -719,6 +736,11 @@
                   .$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
@@ -788,6 +810,28 @@
     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 {
     my ($cloneruname,$clonerudom,$type) = @_;
     if (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') {
@@ -840,7 +884,7 @@
 }
 
 sub search_courses {
-    my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom) = @_;
+    my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner) = @_;
     my (%courses,%showcourses,$cloner,$ccrole);
     if ($type eq 'Community') {
         $ccrole = 'co';
@@ -860,8 +904,14 @@
                 $filter->{$item}='.';
             }
         }
-        my $timefilter = 
-           ($filter->{'sincefilter'}==-1?1:time-$filter->{'sincefilter'});
+        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') {
@@ -892,7 +942,9 @@
                                           $filter->{'coursefilter'},
                                           undef,undef,$type,$regexpok,undef,undef,
                                           undef,undef,$cloner,$env{'form.cc_clone'},
-                                          $filter->{'cloneableonly'});
+                                          $filter->{'cloneableonly'},
+                                          $createdbefore,$createdafter,undef,
+                                          $domcloner);
         if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) {
             my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'},
                                                          $filter->{'persondomfilter'},
@@ -1172,10 +1224,11 @@
 
 =item *
 X<search_courses()>
-B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom)>:
+B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,
+                 $domcloner)>:
 
 
-Input: 7 -  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). Last two needed when search is for courses to clone from course request form, or course creation form (DC).   
+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).
 
 Output: 1 - %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type.
 

--raeburn1282335243--