File:  [LON-CAPA] / loncom / interface / lonpickcourse.pm
Revision 1.19: download - view: text, annotated - select for diffs
Tue Nov 23 18:03:04 2004 UTC (19 years, 7 months ago) by raeburn
Branches: MAIN
CVS tags: HEAD
DC can now add user roles to courses without needing an role in the target course.  Choice of sections can be made from existing sections, or new sections can be added.  Still need to add contextual help, and javascript to alert/prohibit > 1 section for a student role.

    1: # The LearningOnline Network
    2: # Pick a course
    3: #
    4: # $Id: lonpickcourse.pm,v 1.19 2004/11/23 18:03:04 raeburn Exp $
    5: #
    6: # Copyright Michigan State University Board of Trustees
    7: #
    8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
    9: #
   10: # LON-CAPA is free software; you can redistribute it and/or modify
   11: # it under the terms of the GNU General Public License as published by
   12: # the Free Software Foundation; either version 2 of the License, or
   13: # (at your option) any later version.
   14: #
   15: # LON-CAPA is distributed in the hope that it will be useful,
   16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   18: # GNU General Public License for more details.
   19: #
   20: # You should have received a copy of the GNU General Public License
   21: # along with LON-CAPA; if not, write to the Free Software
   22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   23: #
   24: # /home/httpd/html/adm/gpl.txt
   25: #
   26: # http://www.lon-capa.org/
   27: #
   28: 
   29: package Apache::lonpickcourse;
   30: 
   31: use strict;
   32: use Apache::Constants qw(:common);
   33: use Apache::loncommon;
   34: use Apache::loncoursedata;
   35: use Apache::lonnet;
   36: use Apache::lonlocal;
   37: 
   38: sub handler {
   39:     my $r = shift;
   40:     &Apache::loncommon::content_type($r,'text/html');
   41:     $r->send_http_header;
   42:     return OK if $r->header_only;
   43: 
   44: # ------------------------------------------------------------ Print the screen
   45:     $r->print(<<ENDDOCUMENT);
   46: <html>
   47: <head>
   48: <title>The LearningOnline Network with CAPA</title>
   49: </head>
   50: ENDDOCUMENT
   51: # Get parameters from query string
   52:     &Apache::loncommon::get_unprocessed_cgi
   53:         ($ENV{'QUERY_STRING'},['domainfilter','descriptfilter',
   54: 			       'sincefilter','form','cnumelement',
   55: 			       'cdomelement','cnameelement','roleelement',
   56:                                'pickedcourse']);
   57: # domain filter and selection
   58:     my $domainfilter=$ENV{'form.domainfilter'};
   59:     $domainfilter=~s/\W//g;
   60:     unless ($domainfilter) { $domainfilter=''; }
   61:     my $domainselectform=&Apache::loncommon::select_dom_form($domainfilter,
   62:                                                           'domainfilter',1);
   63: # description filter
   64:     my $descriptfilter=$ENV{'form.descriptfilter'};
   65:     unless ($descriptfilter) { $descriptfilter=''; }
   66:     my $listdescript=&HTML::Entities::encode($descriptfilter,'<>&"');
   67: # last course activity filter and selection
   68:     my $sincefilter=$ENV{'form.sincefilter'};
   69:     $sincefilter=~s/[^\d-]//g;
   70:     unless ($sincefilter) { $sincefilter=-1; }
   71:     my $sincefilterform=&Apache::loncommon::select_form($sincefilter,
   72:        'sincefilter',('-1'=>'',
   73:                       '86400' => 'today',
   74:                       '604800' => 'last week',
   75:                       '2592000' => 'last month',
   76:                       '7776000' => 'last three months',
   77:                       '15552000' => 'last six months',
   78:                       '31104000' => 'last year',
   79:                       'select_form_order' =>
   80:                       ['-1','86400','604800','2592000','7776000',
   81: 		      '15552000','31104000']));
   82: # if called from loncreateuser, report sections, then close
   83:     my ($loaditem,$seclist);
   84:     my $num_sections = 0;
   85:     my @sections = ();
   86:     if ($ENV{'form.form'} eq 'cu' && $ENV{'form.pickedcourse'}) {
   87:         $loaditem = 'onLoad="setSections()"';
   88:         my ($cdom,$cnum) = split/_/,$ENV{'form.pickedcourse'};
   89:         my %sections_count = ();
   90:         $num_sections = &Apache::loncommon::get_sections($cdom,$cnum,\%sections_count);
   91:         my @sections = ();
   92:         if ($num_sections > 0) {
   93:             @sections = (sort {$a <=> $b} keys %sections_count);
   94:             $seclist = join('","',@sections);
   95:         }
   96:     }
   97:     $r->print(&Apache::loncommon::bodytag("Selecting a Course",undef,$loaditem));
   98:     my %lt=&Apache::lonlocal::texthash(
   99: 				       'cac' => 'Course Activity',
  100: 				       'cde' => 'Course Description',
  101: 				       'cdo' => 'Course Domain');
  102:     my ($name_code,$name_input);
  103:     if (defined($ENV{'form.cnameelement'}) && $ENV{'form.cnameelement'} ne '') {
  104: 	$name_code = "opener.document.$ENV{'form.form'}.$ENV{'form.cnameelement'}.value=cdesc;";
  105: 	$name_input ='<input type="hidden" name="cnameelement" value="'.
  106: 	    $ENV{'form.cnameelement'}.'" />';
  107:     }
  108:     my $submitopener = '';
  109:     my $autosubmit = '';
  110:     my $roleelement = '';
  111:     my $lastaction = 'self.close()';
  112:     if ($ENV{'form.form'} eq 'cu') {
  113:         $lastaction = 'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
  114:                       'document.courselist.submit();';
  115:     }
  116:     my $roledom = $ENV{'form.roleelement'};
  117:     if ($roledom) {
  118:         $roleelement = '<input type="hidden" name="roleelement" value="'.$roledom.'" />';
  119:         $submitopener = &Apache::lonroles::processpick($roledom);
  120:         $autosubmit = 'process_pick("'.$roledom.'")';
  121:     }
  122:     $r->print(<<ENDSCRIPT);
  123: <script>
  124: function gochoose(cname,cdom,cdesc) {
  125:     $name_code
  126:     var openerForm = "$ENV{'form.form'}";
  127:     opener.document.$ENV{'form.form'}.$ENV{'form.cnumelement'}.value=cname;
  128:     if (openerForm == 'cu' || openerForm == 'rolechoice') {
  129:          opener.document.$ENV{'form.form'}.$ENV{'form.cdomelement'}.value=cdom;
  130:     }
  131:     else {
  132:         var slct=opener.document.$ENV{'form.form'}.$ENV{'form.cdomelement'};
  133:         var i;
  134:         for (i=0;i<slct.length;i++) {
  135:             if (slct.options[i].value==cdom) { slct.selectedIndex=i; }
  136:         }
  137:     }
  138:     $autosubmit
  139:     $lastaction
  140: }
  141: 
  142: function setSections() {
  143:     var numSections = $num_sections
  144:     var sectionsArray = new Array("$seclist")
  145:     opener.document.$ENV{"form.form"}.currsec.length = 0
  146:     if (numSections == 0) {
  147:         opener.document.$ENV{"form.form"}.currsec.options[0] = new Option('No existing sections','-1',false,false)
  148:     }
  149:     else {
  150:         for (var i=0; i<numSections; i++) {
  151:             opener.document.$ENV{"form.form"}.currsec.options[i] = new Option(sectionsArray[i],sectionsArray[i],false,false)
  152:         }
  153:         opener.document.$ENV{"form.form"}.currsec.multiple=true
  154:         if (numSections < 3) {
  155:             opener.document.$ENV{"form.form"}.currsec.size=numSections;
  156:         }
  157:         else {
  158:             opener.document.$ENV{"form.form"}.currsec.size=3;
  159:         }
  160:         opener.document.$ENV{"form.form"}.currsec.options[0].selected = false
  161:     }
  162:     self.close()
  163: }
  164: </script>
  165: $submitopener
  166: <form method="post">
  167: <input type="hidden" name="cnumelement" value="$ENV{'form.cnumelement'}" />
  168: <input type="hidden" name="cdomelement" value="$ENV{'form.cdomelement'}" />
  169: $name_input
  170: <input type="hidden" name="form" value="$ENV{'form.form'}" />
  171: $roleelement
  172: $lt{'cac'}: $sincefilterform
  173: <br />
  174: $lt{'cdo'}: $domainselectform
  175: <br />
  176: $lt{'cde'}:
  177: <input type="text" name="descriptfilter" size="40" value="$listdescript" />
  178: <p><input type="submit" name="gosearch" value="Search" /></p>
  179: </form>
  180: <hr />
  181: ENDSCRIPT
  182: # ---------------------------------------------------------------- Get the data
  183:     if ($ENV{'form.gosearch'}) {
  184:         $r->print(&mt('Searching').' ...<br />&nbsp;<br />');
  185:         $r->rflush();
  186: 	unless ($descriptfilter) { $descriptfilter='.'; }
  187:         my $timefilter=($sincefilter==-1?1:time-$sincefilter);
  188: 	my %courses=
  189: 	    &Apache::lonnet::courseiddump
  190: 	    ($domainfilter,$descriptfilter,$timefilter);
  191: 	$r->print('<form name="courselist">');
  192: 	my %by_descrip;
  193: 	foreach my $course (keys %courses) {
  194:             my $descr;
  195:             if ($courses{$course} =~ m/^([^:]*):/) {
  196:                 $descr = &Apache::lonnet::unescape($1);
  197:             } else {
  198:                 $descr = &Apache::lonnet::unescape($courses{$course});
  199:             }
  200:             $by_descrip{lc($descr)}=$course;
  201: 	}
  202: 	foreach my $description (sort(keys(%by_descrip))) {
  203: 	    my $course=$by_descrip{$description};
  204: 	    my $cleandesc=&HTML::Entities::encode($description,'<>&"');
  205: 	    $cleandesc=~s/'/\\'/g;
  206: 	    my ($cdom,$cnum)=split(/\_/,$course);
  207: 	    $r->print('<input type="button" value="Select" onClick="gochoose('.
  208: 		  "'".$cnum."','".$cdom."','".$cleandesc."')".'" /> '.$description.' ('.
  209: 		  ($Apache::lonnet::domaindescription{$cdom}?
  210:                    $Apache::lonnet::domaindescription{$cdom}:$cdom).
  211:                  ")<br />\n");
  212: 	}
  213: 	if (!%courses) { $r->print(&mt('None found')); }
  214:         $r->print('<input type="hidden" name="form" value="'.$ENV{'form.form'}.'" />'."\n".
  215:                    '<input type="hidden" name="pickedcourse" value="" />'."\n".
  216:                    '<input type="hidden" name="cnumelement" value="'.$ENV{'form.cnumelement'}.'" />'."\n".
  217:                    '<input type="hidden" name="cdomelement" value="'.$ENV{'form.cdomelement'}.'" />'."\n".
  218:                    '</form>');
  219:     }
  220:     $r->print('</body></html>');
  221:     return OK;
  222: }
  223: 
  224: 1;
  225: __END__

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