--- loncom/interface/lonpickcourse.pm 2014/03/11 21:42:18 1.110 +++ loncom/interface/lonpickcourse.pm 2014/03/13 14:46:46 1.111 @@ -1,7 +1,7 @@ # The LearningOnline Network # Pick a course # -# $Id: lonpickcourse.pm,v 1.110 2014/03/11 21:42:18 raeburn Exp $ +# $Id: lonpickcourse.pm,v 1.111 2014/03/13 14:46:46 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -142,7 +142,7 @@ sub handler { my $action = '/adm/pickcourse'; my ($numtitles,$showroles,$nohost,@codetitles); if (!$onlyown) { - my $filterlist = ['domainfilter']; + my $filterlist = ['domainfilter','sincefilter']; # created filter for DCs only if ($env{'user.adv'} && $env{'form.domainfilter'} && exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'}) @@ -154,7 +154,15 @@ sub handler { } push(@{$filterlist},('descriptfilter','instcodefilter')); 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 (&Apache::lonnet::homeserver($env{'form.personfilter'}, $env{'form.persondomfilter'}) eq 'no_host') { @@ -164,7 +172,7 @@ sub handler { } } } else { - push(@{$filterlist},'ownerfilter'); + push(@{$filterlist},('ownerfilter','ownerdomfilter')); } # course ID filter for DCs only if ($env{'user.adv'} && $env{'form.domainfilter'} && @@ -174,10 +182,40 @@ sub handler { if ($cloneruname ne '' && $clonerudom ne '') { push(@{$filterlist},'cloneableonly'); } - - $r->print(&build_filters($filterlist,$type,$roleelement,$multelement, - $filter,$action,\$numtitles,undef,$cloneruname, - $clonerudom,$typeelement,\@codetitles)); + if ((ref($filterlist) eq 'ARRAY') && (ref($filter) eq 'HASH')) { + foreach my $item (@{$filterlist}) { + $filter->{$item} = $env{'form.'.$item}; + } + } + 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 = ''."\n"; + } + if ($coord_cloneable) { + $clonetext .= ''; + } + } + $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 @@ -558,294 +596,6 @@ sub multiples_tag { return ($jscript,$multelement); } -sub build_filters { - my ($filterlist,$type,$roleelement,$multelement,$filter,$action, - $numtitlesref,$caller,$cloneruname,$clonerudom,$typeelement,$codetitlesref) = @_; - 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 = '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 = ''. - &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 = ''; - } else { - $typeselectform = '"; - } - - my ($cloneableonlyform,$cloneabletitle); - if (exists($filter->{'cloneableonly'})) { - my $cloneableon = ''; - my $cloneableoff = ' checked="checked"'; - if ($filter->{'cloneableonly'}) { - $cloneableon = $cloneableoff; - $cloneableoff = ''; - } - $cloneableonlyform = ''.(' 'x3).''; - 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) = - &Apache::courseclassifier::instcode_selectors($codedom,'filterpicker', - $officialjs,$codetitlesref); - if ($jscript) { - $jscript = ''."\n"; - } - } - if ($instcodeform eq '') { - $instcodeform = - ''; - $instcodetitle = $lt{'ins'}; - } else { - $instcodetitle = $lt{'inc'}; - } - if ($env{'form.fixeddom'}) { - $instcodetitle .= '
('.$codedom.')'; - } - } - } - - my $output = qq| -
- -|; - if ($formname eq 'modifycourse') { - $output .= ''."\n". - ''."\n"; - } else { - my $name_input; - if ($env{'form.cnameelement'} ne '') { - $name_input = ''; - } - $output .= qq| - - -$name_input -$roleelement -$multelement -$typeelement -|; - if ($formname eq 'portform') { - $output .= ''."\n"; - } - } - if ($env{'form.fixeddom'}) { - $output .= ''."\n"; - } - $output .= "
\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'}). - '
'.&mt('Username').'
'. - '
'.&mt('Domain').'
'. - $ownerdomselectform.'
'. - &Apache::lonhtmlcommon::row_closure(); - } - if (exists($filter->{'personfilter'})) { - $output .= &Apache::lonhtmlcommon::row_title($lt{'cop'}). - '
'.&mt('Username').'
'. - '
'.&mt('Domain').'
'. - $persondomselectform.'
'. - &Apache::lonhtmlcommon::row_closure(); - } - if (exists($filter->{'coursefilter'})) { - $output .= &Apache::lonhtmlcommon::row_title(&mt('LON-CAPA course ID')) - .'' - .&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'}) - .'' - .&Apache::lonhtmlcommon::row_closure(1); - } - $output .= &Apache::lonhtmlcommon::end_pick_box().'

'; - 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 .= ''."\n"; - } - if ($coord_cloneable) { - $output .= ''; - } - } - $output .= ''."\n". - '

'."\n".'
'."\n".'
'."\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 { my ($cloneruname,$clonerudom,$type) = @_; if (($cloneruname!~/\w/) || ($clonerudom!~/\w/)) { @@ -1205,17 +955,6 @@ Output: 2 - $jscript - javascript for ch Side Effects: None -=item * -X -B: - - -Input: 12 - 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, $typeelem; reference to array of titles of components in institutional codes (official courses). - -Output: 1 - $output - HTML for display of search criteria, and hidden form elements. - -Side Effects: None - =item * X B