# The LearningOnline Network # Request a course # # $Id: lonrequestcourse.pm,v 1.19 2009/08/20 21:15:37 raeburn 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/ # ### =head1 NAME Apache::lonrequestcourse.pm =head1 SYNOPSIS Allows users to request creation of new courses. This is part of the LearningOnline Network with CAPA project described at http://www.lon-capa.org. =head1 SUBROUTINES =over =item handler() =item header() =item form_elements() =item onload_action() =item check_can_request() =item course_types() =item print_main_menu() =item request_administration() =item print_request_form() =item print_enrollment_menu() =item inst_section_selector() =item date_setting_table() =item print_personnel_menu() =item print_request_status() =item print_request_logs() =item print_review() =item dates_from_form() =item courseinfo_form() =item clone_form() =item clone_text() =item coursecode_form() =item get_course_dom() =item display_navbuttons() =item print_request_outcome() =item get_processtype() =item check_autolimit() =item build_batchcreatehash() =item retrieve_settings() =item get_request_settings() =back =cut package Apache::lonrequestcourse; use strict; use Apache::Constants qw(:common :http); use Apache::lonnet; use Apache::loncommon; use Apache::lonlocal; use Apache::loncoursequeueadmin; use LONCAPA qw(:DEFAULT :match); sub handler { my ($r) = @_; if ($r->header_only) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK; } &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; &Apache::lonhtmlcommon::clear_breadcrumbs(); my $dom = &get_course_dom(); my $action = $env{'form.action'}; my $state = $env{'form.state'}; my %stored; my $jscript; if ((defined($state)) && (defined($action))) { if (($action eq 'view') && ($state eq 'details')) { if ((defined($env{'form.showdom'})) && (defined($env{'form.cnum'}))) { my $result = &retrieve_settings($env{'form.showdom'},$env{'form.cnum'}); } } my %elements = &form_elements($dom); my $elementsref = {}; if (ref($elements{$action}) eq 'HASH') { if (ref($elements{$action}{$state}) eq 'HASH') { $elementsref = $elements{$action}{$state}; } } if (($state eq 'courseinfo') && ($env{'form.clonedom'} eq '')) { $env{'form.clonedom'} = $dom; } $jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored); } if ($state eq 'personnel') { $jscript .= "\n".&Apache::loncommon::userbrowser_javascript(); } my $loaditems = &onload_action($action,$state); my %states; $states{'view'} = ['pick_request','details','cancel','removal']; $states{'log'} = ['filter','display']; $states{'new'} = ['courseinfo','enrollment','personnel','review','process']; if (($action eq 'new') && ($env{'form.crstype'} eq 'official')) { unless ($env{'form.state'} eq 'crstype') { unshift (@{$states{'new'}},'codepick'); } } foreach my $key (keys(%states)) { if (ref($states{$key}) eq 'ARRAY') { unshift (@{$states{$key}},'crstype'); } } my %trail = ( crstype => 'Course Request Action', codepick => 'Category', courseinfo => 'Description', enrollment => 'Access Dates', personnel => 'Personnel', review => 'Review', process => 'Result', pick_request => 'Display Summary', details => 'Request Details', cancel => 'Cancel Request', removal => 'Outcome', ); if (($env{'form.crstype'} eq 'official') && (&Apache::lonnet::auto_run('',$dom))) { $trail{'enrollment'} = 'Enrollment'; } my $page = 0; my $crumb; if (defined($action)) { my $done = 0; my $i=0; if (ref($states{$action}) eq 'ARRAY') { while ($i<@{$states{$action}} && !$done) { if ($states{$action}[$i] eq $state) { $page = $i; $done = 1; } $i++; } } for (my $i=0; $i<@{$states{$action}}; $i++) { if ($state eq $states{$action}[$i]) { &Apache::lonhtmlcommon::add_breadcrumb( {text=>"$trail{$state}"}); $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests'); last; } else { if (($state eq 'process') && ($i > 0)) { &Apache::lonhtmlcommon::add_breadcrumb( {href=>"javascript:backPage(document.requestcrs,'$states{$action}[0]')", text=>"$trail{$states{$action}[$i]}"}); } else { &Apache::lonhtmlcommon::add_breadcrumb( {href=>"javascript:backPage(document.requestcrs,'$states{$action}[$i]')", text=>"$trail{$states{$action}[$i]}"}); } } } } else { &Apache::lonhtmlcommon::add_breadcrumb( {text=>'Pick Action'}); $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests'); } my %can_request; my $canreq = &check_can_request($dom,\%can_request); if ($action eq 'new') { if ($canreq) { if ($state eq 'crstype') { &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems, $crumb); } else { &request_administration($r,$action,$state,$page,\%states,$dom,$jscript, $loaditems,$crumb); } } else { $r->print(&header('Course Requests').$crumb. '