File:  [LON-CAPA] / loncom / interface / lonpickcourse.pm
Revision 1.27: download - view: text, annotated - select for diffs
Thu Apr 7 06:56:23 2005 UTC (19 years, 2 months ago) by albertel
Branches: MAIN
CVS tags: HEAD
- ENV -> env

# The LearningOnline Network
# Pick a course
#
# $Id: lonpickcourse.pm,v 1.27 2005/04/07 06:56:23 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#

package Apache::lonpickcourse;

use strict;
use Apache::Constants qw(:common);
use Apache::loncommon;
use Apache::loncoursedata;
use Apache::lonnet;
use Apache::lonlocal;

sub handler {
    my $r = shift;
    &Apache::loncommon::content_type($r,'text/html');
    $r->send_http_header;
    return OK if $r->header_only;

# ------------------------------------------------------------ Print the screen
    my $html=&Apache::lonxml::xmlbegin();
    $r->print(<<ENDDOCUMENT);
$html
<head>
<title>The LearningOnline Network with CAPA</title>
</head>
ENDDOCUMENT
# Get parameters from query string
    &Apache::loncommon::get_unprocessed_cgi
        ($ENV{'QUERY_STRING'},['domainfilter','descriptfilter',
			       'sincefilter','form','cnumelement',
			       'cdomelement','cnameelement','roleelement',
                               'pickedcourse','instcodefilter','ownerfilter']);
# domain filter and selection
    my $domainfilter=$env{'form.domainfilter'};
    $domainfilter=~s/\W//g;
    unless ($domainfilter) { $domainfilter=''; }
    my $domainselectform=&Apache::loncommon::select_dom_form($domainfilter,
                                                          'domainfilter',1);
# description filter
    my $descriptfilter=$env{'form.descriptfilter'};
    unless ($descriptfilter) { $descriptfilter=''; }
    my $listdescript=&HTML::Entities::encode($descriptfilter,'<>&"');
# institutional code filter
    my $instcodefilter=$env{'form.instcodefilter'};
    unless ($instcodefilter) { $instcodefilter=''; }
    my $listinstcode=&HTML::Entities::encode($instcodefilter,'<>&"');
# course owner filter
    my $ownerfilter=$env{'form.ownerfilter'};
    unless ($ownerfilter) { $ownerfilter=''; }
    my $listowner=&HTML::Entities::encode($ownerfilter,'<>&"');
# last course activity filter and selection
    my $sincefilter=$env{'form.sincefilter'};
    $sincefilter=~s/[^\d-]//g;
    unless ($sincefilter) { $sincefilter=-1; }
    my $sincefilterform=&Apache::loncommon::select_form($sincefilter,
       'sincefilter',('-1'=>'',
                      '86400' => 'today',
                      '604800' => 'last week',
                      '2592000' => 'last month',
                      '7776000' => 'last three months',
                      '15552000' => 'last six months',
                      '31104000' => 'last year',
                      'select_form_order' =>
                      ['-1','86400','604800','2592000','7776000',
		      '15552000','31104000']));
# if called from loncreateuser, report sections, then close
    my ($loaditem,$seclist);
    my $num_sections = 0;
    if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) {
        $loaditem = 'onLoad="setSections()"';
        my ($cdom,$cnum) = split/_/,$env{'form.pickedcourse'};
        my %sections_count = ();
        $num_sections = &Apache::loncommon::get_sections($cdom,$cnum,\%sections_count);
        my @sections = ();
        if ($num_sections > 0) {
            @sections = (sort {$a <=> $b} keys %sections_count);
            $seclist = join('","',@sections);
        }
    }
    $r->print(&Apache::loncommon::bodytag("Selecting a Course",undef,$loaditem));
    my %lt=&Apache::lonlocal::texthash(
				       'cac' => 'Course Activity',
				       'cde' => 'Course Description',
				       'cdo' => 'Course Domain',
                                       'cin' => 'Course Institutional Code',
                                       'cow' => "Course Owner's usename");
    my ($name_code,$name_input);
    if (defined($env{'form.cnameelement'}) && $env{'form.cnameelement'} ne '') {
	$name_code = "opener.document.$env{'form.form'}.$env{'form.cnameelement'}.value=cdesc;";
	$name_input ='<input type="hidden" name="cnameelement" value="'.
	    $env{'form.cnameelement'}.'" />';
    }
    my $submitopener = '';
    my $autosubmit = '';
    my $roleelement = '';
    my $lastaction = 'self.close()';
    if ($env{'form.form'} eq 'cu') {
        $lastaction = 'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
                      'document.courselist.submit();';
    }
    my $roledom = $env{'form.roleelement'};
    if ($roledom) {
        $roleelement = '<input type="hidden" name="roleelement" value="'.$roledom.'" />';
        $submitopener = &Apache::lonroles::processpick($roledom);
        $autosubmit = 'process_pick("'.$roledom.'")';
    }
    $r->print(<<ENDSCRIPT);
<script>
function gochoose(cname,cdom,cdesc) {
    $name_code
    var openerForm = "$env{'form.form'}";
    opener.document.$env{'form.form'}.$env{'form.cnumelement'}.value=cname;
    if (openerForm == 'cu' || openerForm == 'rolechoice') {
         opener.document.$env{'form.form'}.$env{'form.cdomelement'}.value=cdom;
    }
    else {
        var slct=opener.document.$env{'form.form'}.$env{'form.cdomelement'};
        var i;
        for (i=0;i<slct.length;i++) {
            if (slct.options[i].value==cdom) { slct.selectedIndex=i; }
        }
    }
    $autosubmit
    $lastaction
}

function setSections() {
    var numSections = $num_sections
    var sectionsArray = new Array("$seclist")
    opener.document.$env{"form.form"}.currsec.length = 0
    if (numSections == 0) {
        opener.document.$env{"form.form"}.currsec.multiple=false
        opener.document.$env{"form.form"}.currsec.size=1;
        opener.document.$env{"form.form"}.currsec.options[0] = new Option('No existing sections','',false,false)
    }
    else {
        if (numSections == 1) {
            opener.document.$env{"form.form"}.currsec.multiple=false;
            opener.document.$env{"form.form"}.currsec.size=1;
            opener.document.$env{"form.form"}.currsec.options[0] = new Option('Select','',true,true);
            opener.document.$env{"form.form"}.currsec.options[1] = new Option('No section','',false,false) 
            opener.document.$env{"form.form"}.currsec.options[2] = new Option(sectionsArray[0],sectionsArray[0],false,false);
        }
        else {
            for (var i=0; i<numSections; i++) {
                opener.document.$env{"form.form"}.currsec.options[i] = new Option(sectionsArray[i],sectionsArray[i],false,false)
            }
            opener.document.$env{"form.form"}.currsec.multiple=true
            if (numSections < 3) {
                opener.document.$env{"form.form"}.currsec.size=numSections;
            }
            else {
                opener.document.$env{"form.form"}.currsec.size=3;
            }
            opener.document.$env{"form.form"}.currsec.options[0].selected = false
        }
    }
    self.close()
}
</script>
$submitopener
<form method="post">
<input type="hidden" name="cnumelement" value="$env{'form.cnumelement'}" />
<input type="hidden" name="cdomelement" value="$env{'form.cdomelement'}" />
$name_input
<input type="hidden" name="form" value="$env{'form.form'}" />
$roleelement
$lt{'cac'}: $sincefilterform
<br />
$lt{'cdo'}: $domainselectform
<br />
$lt{'cin'}:
<input type="text" name="instcodefilter" size="10" value="$listinstcode" />
<br />
$lt{'cow'}:
<input type="text" name="ownerfilter" size="10" value="$listowner" />
<br />
$lt{'cde'}:
<input type="text" name="descriptfilter" size="40" value="$listdescript" />
<p><input type="submit" name="gosearch" value="Search" /></p>
</form>
<hr />
ENDSCRIPT
# ---------------------------------------------------------------- Get the data
    if ($env{'form.gosearch'}) {
        $r->print(&mt('Searching').' ...<br />&nbsp;<br />');
        $r->rflush();
	unless ($descriptfilter) { $descriptfilter='.'; }
        unless ($instcodefilter) { $instcodefilter='.'; }
        unless ($ownerfilter) { $ownerfilter='.'; }
        my $timefilter=($sincefilter==-1?1:time-$sincefilter);
	my %courses=
	    &Apache::lonnet::courseiddump
	    ($domainfilter,$descriptfilter,$timefilter,$instcodefilter,$ownerfilter);
	$r->print('<form name="courselist">');
	my %by_descrip;
	foreach my $course (keys %courses) {
            my $descr;
            if ($courses{$course} =~ m/^([^:]*):/) {
                $descr = &Apache::lonnet::unescape($1);
            } else {
                $descr = &Apache::lonnet::unescape($courses{$course});
            }
            my $description = lc($descr);
            push (@{$by_descrip{$description}}, $course);
	}
	foreach my $description (sort(keys(%by_descrip))) {
            foreach my $course (@{$by_descrip{$description}}) {
	        my $cleandesc=&HTML::Entities::encode($description,'<>&"');
	        $cleandesc=~s/'/\\'/g;
	        my ($cdom,$cnum)=split(/\_/,$course);
                my ($descr,$instcode,$owner) = split/:/,$courses{$course};
	        $r->print('<input type="button" value="Select" onClick="gochoose('.
		      "'".$cnum."','".$cdom."','".$cleandesc."')".'" /> '.$description.' ('.
		      ($Apache::lonnet::domaindescription{$cdom}?
                       $Apache::lonnet::domaindescription{$cdom}:$cdom).")");
                unless ($instcode eq '') {
                    $r->print(" - ".&Apache::lonnet::unescape($instcode));
                }
                unless ($owner eq '') {
                    $r->print(", owner - ".&Apache::lonnet::unescape($owner));
                }
                $r->print("<br />\n");
            }
	}
	if (!%courses) { $r->print(&mt('None found')); }
        $r->print('<input type="hidden" name="form" value="'.$env{'form.form'}.'" />'."\n".
                   '<input type="hidden" name="pickedcourse" value="" />'."\n".
                   '<input type="hidden" name="cnumelement" value="'.$env{'form.cnumelement'}.'" />'."\n".
                   '<input type="hidden" name="cdomelement" value="'.$env{'form.cdomelement'}.'" />'."\n".
                   '</form>');
    }
    $r->print('</body></html>');
    return OK;
}

1;
__END__

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.