version 1.158.2.6, 2020/05/22 19:57:57
|
version 1.159, 2016/04/04 01:09:48
|
Line 82 use Apache::lonlocal;
|
Line 82 use Apache::lonlocal;
|
use Apache::lonuserutils; |
use Apache::lonuserutils; |
use Apache::lonclonecourse; |
use Apache::lonclonecourse; |
use LONCAPA::batchcreatecourse; |
use LONCAPA::batchcreatecourse; |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA; |
|
|
my $registered_flush; |
|
my $registered_instcats; |
|
my $modified_dom; |
|
|
|
# ===================================================== Phase one: fill-in form |
# ===================================================== Phase one: fill-in form |
|
|
Line 95 sub print_course_creation_page {
|
Line 91 sub print_course_creation_page {
|
my $crstype = 'Community'; |
my $crstype = 'Community'; |
if ($env{'form.phase'} eq 'courseone') { |
if ($env{'form.phase'} eq 'courseone') { |
$crstype = 'Course'; |
$crstype = 'Course'; |
|
} elsif ($env{'form.phase'} eq 'placementone') { |
|
$crstype = 'Placement'; |
} |
} |
my $defdom=$env{'request.role.domain'}; |
my $defdom=$env{'request.role.domain'}; |
my %domdefaults = &Apache::lonnet::get_domain_defaults($defdom); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($defdom); |
Line 103 sub print_course_creation_page {
|
Line 101 sub print_course_creation_page {
|
foreach my $server (sort(keys(%host_servers))) { |
foreach my $server (sort(keys(%host_servers))) { |
$course_home .= qq{<option value="$server"}; |
$course_home .= qq{<option value="$server"}; |
if ($server eq $Apache::lonnet::perlvar{'lonHostID'}) { |
if ($server eq $Apache::lonnet::perlvar{'lonHostID'}) { |
$course_home .= ' selected="selected"'; |
$course_home .= " selected "; |
} |
} |
$course_home .= qq{>$server $host_servers{$server}</option>}; |
$course_home .= qq{>$server $host_servers{$server}</option>}; |
} |
} |
Line 120 sub print_course_creation_page {
|
Line 118 sub print_course_creation_page {
|
my $endtime = time+(6*30*24*60*60); # 6 months from now, approx |
my $endtime = time+(6*30*24*60*60); # 6 months from now, approx |
my $access_table = &Apache::lonuserutils::date_setting_table($starttime, |
my $access_table = &Apache::lonuserutils::date_setting_table($starttime, |
$endtime,'create_defaultdates'); |
$endtime,'create_defaultdates'); |
my $openallfrom = |
|
&Apache::lonhtmlcommon::date_setter('ccrs','openallfrom',$starttime); |
|
if ($crstype eq 'Course') { |
if ($crstype eq 'Course') { |
$enroll_table = &Apache::lonuserutils::date_setting_table($starttime, |
$enroll_table = &Apache::lonuserutils::date_setting_table($starttime, |
$endtime,'create_enrolldates'); |
$endtime,'create_enrolldates'); |
Line 136 sub print_course_creation_page {
|
Line 132 sub print_course_creation_page {
|
$krbform = &Apache::loncommon::authform_kerberos(%param); |
$krbform = &Apache::loncommon::authform_kerberos(%param); |
$intform = &Apache::loncommon::authform_internal(%param); |
$intform = &Apache::loncommon::authform_internal(%param); |
$locform = &Apache::loncommon::authform_local(%param); |
$locform = &Apache::loncommon::authform_local(%param); |
} else { |
} elsif ($crstype eq 'Community') { |
my $title_alert = &mt('A Community title is required'); |
my $title_alert = &mt('A Community title is required'); |
my $coord_alert = &mt('The username of the Coordinator is required'); |
my $coord_alert = &mt('The username of the Coordinator is required'); |
&js_escape(\$title_alert); |
&js_escape(\$title_alert); |
Line 153 function validate(formname) {
|
Line 149 function validate(formname) {
|
formname.submit(); |
formname.submit(); |
} |
} |
|; |
|; |
|
} else { |
|
my $title_alert = &mt('A Placement Test title is required'); |
|
my $coord_alert = &mt('The username of the Course Coordinator is required'); |
|
&js_escape(\$title_alert); |
|
&js_escape(\$coord_alert); |
|
$javascript_validations = qq| |
|
function validate(formname) { |
|
if (formname.title == '') { |
|
alert("$title_alert"); |
|
return; |
|
} |
|
if (formname.ccuname == '') { |
|
alert("$coord_alert"); |
|
} |
|
formname.submit(); |
|
} |
|
|; |
|
|
} |
} |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'cinf' => "Course Information", |
'cinf' => "Course Information", |
Line 191 function validate(formname) {
|
Line 205 function validate(formname) {
|
'shd' => 'Shift date parameters by number of days', |
'shd' => 'Shift date parameters by number of days', |
'assp' => "Assessment Parameters", |
'assp' => "Assessment Parameters", |
'oaas' => "Open all assessments", |
'oaas' => "Open all assessments", |
'sta' => "starting from:", |
|
'mssg' => "Messaging", |
'mssg' => "Messaging", |
'scpf' => "Set course policy feedback to Course Coordinator", |
'scpf' => "Set course policy feedback to Course Coordinator", |
'scfc' => "Set resource content feedback to Course Coordinator", |
'scfc' => "Set content feedback to Course Coordinator", |
'scof' => "Set course content feedback to Course Coordinator", |
|
'cmmn' => "Communication", |
'cmmn' => "Communication", |
'dsrd' => "Disable student resource discussion", |
'dsrd' => "Disable student resource discussion", |
'dsuc' => "Disable student use of chat rooms", |
'dsuc' => "Disable student use of chat rooms", |
Line 241 function validate(formname) {
|
Line 253 function validate(formname) {
|
$lt{'navi'} = &mt('Community Contents'); |
$lt{'navi'} = &mt('Community Contents'); |
$lt{'cid'} = &mt('Community ID'); |
$lt{'cid'} = &mt('Community ID'); |
$lt{'scpf'} = &mt('Set community policy feedback to Coordinator'); |
$lt{'scpf'} = &mt('Set community policy feedback to Coordinator'); |
$lt{'scfc'} = &mt('Set resource content feedback to Coordinator'); |
$lt{'scfc'} = &mt('Set content feedback to Coordinator'); |
$lt{'scof'} = &mt('Set community content feedback to Coordinator'); |
|
$lt{'dsrd'} = &mt('Disable member resource discussion'); |
$lt{'dsrd'} = &mt('Disable member resource discussion'); |
$lt{'dsuc'} = &mt('Disable member use of chat rooms'); |
$lt{'dsuc'} = &mt('Disable member use of chat rooms'); |
$lt{'dads'} = &mt('Default Access Dates for Members'); |
$lt{'dads'} = &mt('Default Access Dates for Members'); |
Line 253 function validate(formname) {
|
Line 264 function validate(formname) {
|
$lt{'cc'} = &mt('(will be assigned Coordinator role)'); |
$lt{'cc'} = &mt('(will be assigned Coordinator role)'); |
$lt{'cgrs'} = &mt('Community Group Settings'); |
$lt{'cgrs'} = &mt('Community Group Settings'); |
$lt{'cgrq'} = &mt('Set a quota for the total disk space available for storage of community group portfolio files'); |
$lt{'cgrq'} = &mt('Set a quota for the total disk space available for storage of community group portfolio files'); |
|
} elsif ($crstype eq 'Placement') { |
|
$lt{'cinf'} = &mt('Placement Test Information'); |
|
$lt{'ctit'} = &mt('Placement Test Title'); |
|
$lt{'chsr'} = &mt('Placement Test Home Server'); |
|
$lt{'cidn'} = &mt('Placement Test ID/Number'); |
|
$lt{'crco'} = &mt('Placement Test Content'); |
|
$lt{'cncr'} = &mt('Completely new placement test'); |
|
$lt{'cecr'} = &mt('Clone an existing placement test'); |
|
$lt{'sacr'} = &mt('Do NOT generate as standard placement test'); |
|
$lt{'stco'} = &mt('standard placement tests only'); |
|
$lt{'navi'} = &mt('Placement Test Contents'); |
|
$lt{'cid'} = &mt('Placement Test ID'); |
} |
} |
my $js = <<END; |
my $js = <<END; |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
|
|
|
var editbrowser = null; |
var editbrowser = null; |
function openbrowser(formname,elementname) { |
function openbrowser(formname,elementname) { |
var url = '/res/?'; |
var url = '/res/?'; |
Line 276 function openbrowser(formname,elementnam
|
Line 297 function openbrowser(formname,elementnam
|
editbrowser.focus(); |
editbrowser.focus(); |
} |
} |
$javascript_validations |
$javascript_validations |
|
|
// ]]> |
|
</script> |
</script> |
$coursebrowserjs |
$coursebrowserjs |
END |
END |
Line 285 END
|
Line 304 END
|
my %titles = &Apache::lonlocal::texthash( |
my %titles = &Apache::lonlocal::texthash( |
courseone => 'Create a New Course', |
courseone => 'Create a New Course', |
groupone => 'Create a New Community', |
groupone => 'Create a New Community', |
|
placementone=> 'Create a New Placement Test', |
); |
); |
my $start_page = |
my $start_page = |
&Apache::loncommon::start_page($titles{$env{'form.phase'}},$js); |
&Apache::loncommon::start_page($titles{$env{'form.phase'}},$js); |
Line 296 END
|
Line 316 END
|
'Create_Courses'); |
'Create_Courses'); |
$r->print($start_page.$crumbs); |
$r->print($start_page.$crumbs); |
|
|
$r->print('<form action="/adm/createcourse" method="post" name="ccrs"><div class="LC_createcourse">' |
$r->print('<form action="/adm/createcourse" method="post" name="ccrs" action=""><div class="LC_createcourse">' |
.&Apache::lonhtmlcommon::start_pick_box() |
.&Apache::lonhtmlcommon::start_pick_box() |
|
|
.&Apache::lonhtmlcommon::row_headline() |
.&Apache::lonhtmlcommon::row_headline() |
Line 363 END
|
Line 383 END
|
.'<span class="LC_nobreak">' |
.'<span class="LC_nobreak">' |
.'<input type="radio" name="uniquecode" value="1" />'.&mt('Yes').(' 'x2) |
.'<input type="radio" name="uniquecode" value="1" />'.&mt('Yes').(' 'x2) |
.'<input type="radio" name="uniquecode" value="0" checked="checked" />'.&mt('No') |
.'<input type="radio" name="uniquecode" value="0" checked="checked" />'.&mt('No') |
.'</span> |
|
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
); |
); |
|
} |
|
my $blankchk; |
|
if ($crstype eq 'Placement') { |
|
$blankchk = ' checked="checked"'; |
} |
} |
# Table: New Course / Clone Course |
# Table: New Course / Clone Course |
$r->print(&Apache::lonhtmlcommon::row_headline() |
$r->print(&Apache::lonhtmlcommon::row_headline() |
Line 391 END
|
Line 414 END
|
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_title($lt{'fres'}) |
.&Apache::lonhtmlcommon::row_title($lt{'fres'}) |
.'<label>' |
.'<label>' |
.'<input type="radio" name="firstres" value="blank" />'.$lt{'blnk'} |
.'<input type="radio" name="firstres" value="blank"'.$blankchk.' />'.$lt{'blnk'} |
.'</label>' |
.'</label>'); |
.' '); |
|
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
$r->print('<label>' |
$r->print(' <label>' |
.'<input type="radio" name="firstres" value="nav" checked="checked" />'.$lt{'navi'} |
.'<input type="radio" name="firstres" value="nav" checked="checked" />'.$lt{'navi'} |
.'</label>'); |
.'</label>'); |
} else { |
} elsif ($crstype eq 'Course') { |
$r->print('<label>' |
$r->print(' <label>' |
.'<input type="radio" name="firstres" value="syl" checked="checked" />'.$lt{'sllb'} |
.'<input type="radio" name="firstres" value="syl" checked="checked" />'.$lt{'sllb'} |
.'</label>' |
.'</label>' |
.' ' |
.' ' |
Line 411 END
|
Line 433 END
|
.&Apache::lonhtmlcommon::row_closure(1) |
.&Apache::lonhtmlcommon::row_closure(1) |
.&Apache::lonhtmlcommon::end_pick_box() |
.&Apache::lonhtmlcommon::end_pick_box() |
|
|
.'</td><td> </td>' |
.'<td> </td>' |
|
|
# Clone Course: |
# Clone Course: |
.'<td>' |
.'<td>' |
Line 461 END
|
Line 483 END
|
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
|
|
.&Apache::lonhtmlcommon::row_title($lt{'oaas'}) |
.&Apache::lonhtmlcommon::row_title($lt{'oaas'}) |
.'<span class="LC_nobreak">' |
.'<input type="checkbox" name="openall" />' |
.'<label><input type="radio" name="openall" value="0" checked="checked" />'.$lt{'no'}.'</label>'.(' 'x2) |
|
.'<label><input type="radio" name="openall" value="1" />'.$lt{'yes'}.'</label>'.', ' |
|
.$lt{'sta'}.' '.$openallfrom.'</span>' |
|
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
|
|
.&Apache::lonhtmlcommon::row_headline() |
.&Apache::lonhtmlcommon::row_headline() |
Line 479 END
|
Line 498 END
|
.'<input type="checkbox" name="setcontent" checked="checked" />' |
.'<input type="checkbox" name="setcontent" checked="checked" />' |
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
|
|
.&Apache::lonhtmlcommon::row_title($lt{'scof'}) |
|
.'<input type="checkbox" name="setcomment" checked="checked" />' |
|
.&Apache::lonhtmlcommon::row_closure() |
|
|
|
.&Apache::lonhtmlcommon::row_headline() |
.&Apache::lonhtmlcommon::row_headline() |
.'<h3>'.$lt{'cmmn'}.'</h3>' |
.'<h3>'.$lt{'cmmn'}.'</h3>' |
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
Line 578 END
|
Line 593 END
|
<p> |
<p> |
<input type="hidden" name="prevphase" value="courseone" /> |
<input type="hidden" name="prevphase" value="courseone" /> |
<input type="hidden" name="phase" value="coursetwo" /> |
<input type="hidden" name="phase" value="coursetwo" /> |
<input type="button" onclick="verify_message(this.form)" value="'.$lt{'opco'}.'" /> |
<input type="button" onclick="verify_message(this.form)" value="'.$lt{'opco'}.'" />' |
</p>' |
|
); |
); |
} elsif ($crstype eq 'Community') { |
} elsif ($crstype eq 'Community') { |
$r->print(' |
$r->print(' |
Line 589 END
|
Line 603 END
|
<input type="submit" value="'.$lt{'opcm'}.'" /> |
<input type="submit" value="'.$lt{'opcm'}.'" /> |
</p>' |
</p>' |
); |
); |
|
} elsif ($crstype eq 'Placement') { |
|
$r->print(' |
|
<p> |
|
<input type="hidden" name="prevphase" value="placementone" /> |
|
<input type="hidden" name="phase" value="placementtwo" /> |
|
<input type="submit" value="'.$lt{'opcm'}.'" /> |
|
</p>' |
|
); |
} |
} |
$r->print('</form>'. |
$r->print('</form>'. |
$end_page); |
$end_page); |
Line 601 sub create_course {
|
Line 623 sub create_course {
|
my $ccuname =&LONCAPA::clean_username($env{'form.ccuname'}); |
my $ccuname =&LONCAPA::clean_username($env{'form.ccuname'}); |
my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); |
my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); |
my $crstype = 'Community'; |
my $crstype = 'Community'; |
my ($enrollstart,$enrollend,$startaccess,$endaccess,$openallfrom); |
my ($enrollstart,$enrollend,$startaccess,$endaccess); |
my %domdefaults = |
my %domdefaults = |
&Apache::lonnet::get_domain_defaults($env{'request.role.domain'}); |
&Apache::lonnet::get_domain_defaults($env{'request.role.domain'}); |
|
|
Line 609 sub create_course {
|
Line 631 sub create_course {
|
$crstype='Course'; |
$crstype='Course'; |
$enrollstart=&Apache::lonhtmlcommon::get_date_from_form('startenroll'); |
$enrollstart=&Apache::lonhtmlcommon::get_date_from_form('startenroll'); |
$enrollend=&Apache::lonhtmlcommon::get_date_from_form('endenroll'); |
$enrollend=&Apache::lonhtmlcommon::get_date_from_form('endenroll'); |
|
} elsif ($env{'form.phase'} eq 'placementtwo') { |
|
$crstype='Placement'; |
} |
} |
$startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess'); |
$startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess'); |
$endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess'); |
$endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess'); |
$openallfrom = &Apache::lonhtmlcommon::get_date_from_form('openallfrom'); |
|
|
|
my $autharg; |
my $autharg; |
my $authtype; |
my $authtype; |
Line 671 sub create_course {
|
Line 694 sub create_course {
|
endaccess => $endaccess, |
endaccess => $endaccess, |
setpolicy => $env{'form.setpolicy'}, |
setpolicy => $env{'form.setpolicy'}, |
setcontent => $env{'form.setcontent'}, |
setcontent => $env{'form.setcontent'}, |
setcomment => $env{'form.setcomment'}, |
|
reshome => $env{'form.reshome'}, |
reshome => $env{'form.reshome'}, |
setkeys => $env{'form.setkeys'}, |
setkeys => $env{'form.setkeys'}, |
keyauth => $env{'form.keyauth'}, |
keyauth => $env{'form.keyauth'}, |
disresdis => $env{'form.disresdis'}, |
disresdis => $env{'form.disresdis'}, |
disablechat => $env{'form.disablechat'}, |
disablechat => $env{'form.disablechat'}, |
openall => $env{'form.openall'}, |
openall => $env{'form.openall'}, |
openallfrom => $openallfrom, |
|
firstres => $env{'form.firstres'} |
firstres => $env{'form.firstres'} |
}; |
}; |
|
|
Line 749 sub create_course {
|
Line 770 sub create_course {
|
'<p>'.&mt('Course identifier to share with students: [_1]',$code).'</p>' |
'<p>'.&mt('Course identifier to share with students: [_1]',$code).'</p>' |
); |
); |
} |
} |
if ($env{'form.crscode'} ne '') { |
# Flush the course logs so reverse user roles immediately updated |
&Apache::lonnet::devalidate_cache_new('instcats',$crsudom); |
$r->register_cleanup(\&Apache::lonnet::flushcourselogs); |
} |
|
®ister_cleanups($r,$crsudom,$env{'form.crscode'}); |
|
$r->print('<p>'.&mt('Roles will be active at next login').'.</p>'); |
$r->print('<p>'.&mt('Roles will be active at next login').'.</p>'); |
} |
} |
$r->print('<p><a href="/adm/createcourse?phase='.lc($crstype).'one">'. |
$r->print('<p><a href="/adm/createcourse?phase='.lc($crstype).'one">'. |
Line 761 sub create_course {
|
Line 780 sub create_course {
|
} |
} |
|
|
sub print_intro_page { |
sub print_intro_page { |
my ($r,$show_all_choices,$cancreate,$permission) = @_; |
my ($r,$show_all_choices,$cancreate) = @_; |
my $start_page = |
my $start_page = |
&Apache::loncommon::start_page('Create a New Course or Community'); |
&Apache::loncommon::start_page('Create a New Course, Community or Placement Test'); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Options','Create_Course',undef,'Create_Courses'); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Options','Create_Course',undef,'Create_Courses'); |
my $end_page = |
my $end_page = |
&Apache::loncommon::end_page(); |
&Apache::loncommon::end_page(); |
my $helplink=&Apache::loncommon::help_open_topic('Create_Course_Community',&mt('Help on Creating Courses and Communities')); |
my $helplink=&Apache::loncommon::help_open_topic('Create_Course_Community',&mt('Help on Creating Courses and Communities')); |
|
|
# Create menu |
# Create menu |
my $approve = 'Display requests awaiting approval'; |
|
if ($permission->{'create'}) { |
|
$approve = 'Approve or reject requests'; |
|
} |
|
my @menu; |
my @menu; |
@menu = |
@menu = |
({ categorytitle => 'Course/Community Creation', |
({ categorytitle => 'Course/Community Creation', |
Line 781 sub print_intro_page {
|
Line 796 sub print_intro_page {
|
{ |
{ |
linktext => 'Create a single course', |
linktext => 'Create a single course', |
url => '/adm/createcourse?phase=courseone', |
url => '/adm/createcourse?phase=courseone', |
permission => $permission->{'create'}, |
permission => 1, |
#help => '', |
#help => '', |
icon => 'crsnew.png', |
icon => 'crsnew.png', |
linktitle => 'Create a new course by completing an online form.' |
linktitle => 'Create a new course by completing an online form.' |
Line 789 sub print_intro_page {
|
Line 804 sub print_intro_page {
|
{ |
{ |
linktext => 'Create a single community', |
linktext => 'Create a single community', |
url => '/adm/createcourse?phase=groupone', |
url => '/adm/createcourse?phase=groupone', |
permission => $permission->{'create'} && $cancreate->{'Community'}, |
permission => $cancreate->{'Community'}, |
#help => '', |
#help => '', |
icon => 'crsnew.png', |
icon => 'crsnew.png', |
linktitle => 'Create a new collaborative community by completing an online form.' |
linktitle => 'Create a new collaborative community by completing an online form.' |
}, |
}, |
{ |
{ |
linktext => 'Create courses/communities by uploading an attributes file', |
linktext => 'Create a single placement test', |
|
url => '/adm/createcourse?phase=placementone', |
|
permission => $cancreate->{'Placement'}, |
|
#help => '', |
|
icon => 'crsnew.png', |
|
linktitle => 'Create a new placement test by completing an online form.' |
|
}, |
|
{ |
|
linktext => 'Create courses/communities/placement tests by uploading an attributes file', |
url => '/adm/createcourse?phase=batchone', |
url => '/adm/createcourse?phase=batchone', |
permission => $permission->{'create'}, |
permission => 1, |
help => 'Batch_Creation', |
help => 'Batch_Creation', |
icon => 'uplcrs.png', |
icon => 'uplcrs.png', |
linktitle => 'Upload an attributes file containing specifications for one or more courses or communities in XML format.' |
linktitle => 'Upload an attributes file containing specifications for one or more courses, communities or placement tests in XML format.' |
}, |
}, |
] |
] |
}, |
}, |
{ categorytitle => 'Course/Community Requests', |
{ categorytitle => 'Course/Community Requests', |
items => [ |
items => [ |
{ |
{ |
linktext => $approve, |
linktext => 'Approve or reject requests', |
url => '/adm/createcourse?phase=requestdisplay', |
url => '/adm/createcourse?phase=requestdisplay', |
permission => $show_all_choices, |
permission => $show_all_choices, |
#help => '', |
#help => '', |
icon => 'rcrs.png', |
icon => 'rcrs.png', |
linktitle => 'Display course and community creation requests submitted by authorized users, held pending approval by a Domain Coordinator.' |
linktitle => 'Display course, community creation and placement test requests submitted by authorized users, held pending approval by a Domain Coordinator.' |
}, |
}, |
{ |
{ |
linktext => 'View pending official course requests', |
linktext => 'View pending official course requests', |
Line 833 sub print_intro_page {
|
Line 856 sub print_intro_page {
|
permission => $show_all_choices, |
permission => $show_all_choices, |
#help => '', |
#help => '', |
icon => 'document-properties.png', |
icon => 'document-properties.png', |
linktitle => 'Display information about when, how and by whom courses and communities were created in this domain.' |
linktitle => 'Display information about when, how and by whom courses, communities and placement tests were created in this domain.' |
}, |
}, |
] |
] |
}, |
}, |
Line 850 sub print_intro_page {
|
Line 873 sub print_intro_page {
|
sub upload_batchfile { |
sub upload_batchfile { |
my $r = shift; |
my $r = shift; |
my $start_page = |
my $start_page = |
&Apache::loncommon::start_page('Create a New Course or Community'); |
&Apache::loncommon::start_page('Create a New Course, Community, or Placement Test'); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Upload Course/Community Attributes File','Create_Course',undef,'Create_Courses'); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Upload Course/Community/Placement Test Attributes File','Create_Course',undef,'Create_Courses'); |
my $end_page = |
my $end_page = |
&Apache::loncommon::end_page(); |
&Apache::loncommon::end_page(); |
$r->print($start_page.$crumbs); |
$r->print($start_page.$crumbs); |
$r->print('<h3>'.&mt('Upload a courses or communities attributes file').'</h3>'); |
$r->print('<h3>'.&mt('Upload a courses, communities or placement tests attributes file').'</h3>'); |
$r->print('<form name="batchcreate" method="post" '. |
$r->print('<form name="batchcreate" method="post" '. |
'enctype="multipart/form-data" action="/adm/createcourse">'. |
'enctype="multipart/form-data" action="/adm/createcourse">'. |
'<input type="file" name="coursecreatorxml" />'. |
'<input type="file" name="coursecreatorxml" />'. |
'<input type="hidden" name="phase" value="batchtwo" /><br /><br />'. |
'<input type="hidden" name="phase" value="batchtwo" /><br /><br />'. |
'<input type="submit" name="batchsubmit" '. |
'<input type="submit" name="batchsubmit" '. |
'value="'.&mt('Create Courses/Communities').'" /></form>'); |
'value="'.&mt('Create Courses/Communities/Placement Tests').'" /></form>'); |
$r->print($end_page); |
$r->print($end_page); |
return; |
return; |
} |
} |
|
|
sub process_batchfile { |
sub process_batchfile { |
my $r = shift; |
my $r = shift; |
|
my $start_page = |
|
&Apache::loncommon::start_page('Create a New Course, Community or Placement Test'); |
|
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses'); |
|
my $end_page = |
|
&Apache::loncommon::end_page(); |
my $defdom=$env{'request.role.domain'}; |
my $defdom=$env{'request.role.domain'}; |
my $uname = $env{'user.name'}; |
my $batchfilepath=&Apache::lonnet::userfileupload('coursecreatorxml',undef, |
my $udom = $env{'user.domain'}; |
'batchupload',undef,undef, |
my $dir = &LONCAPA::tempdir().'addcourse'; |
undef,undef,$defdom); |
my ($result,$logmsg,$keysmsg,$codesref,$instcodesref); |
my ($batchdir,$filename) = ($batchfilepath =~ m-^(.+)/pending/([^/]+)$-); |
if (($defdom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/) && ($udom =~/^$match_domain$/)) { |
my ($result,$logmsg); |
my $batchfilepath=&Apache::lonnet::userfileupload('coursecreatorxml',undef, |
if (-e "$batchfilepath") { |
'batchupload',undef,undef, |
open(FILE,"<$batchfilepath"); |
undef,undef,$defdom); |
my @buffer = <FILE>; |
if ($batchfilepath =~ m{^(\Q$dir/$defdom/web/$uname\E_\Q$udom\E)/pending/([^/]+)$}) { |
close(FILE); |
my ($batchdir,$filename) = ($1,$2); |
if ((defined($filename)) && (defined($batchdir))) { |
if (-e "$batchfilepath") { |
my @requests = ($filename); |
if (open(FILE,"<",$batchfilepath)) { |
my %courseids = (); |
my @buffer = <FILE>; |
($result,$logmsg) = &LONCAPA::batchcreatecourse::create_courses( |
|
\@requests,\%courseids,'web',$defdom, |
|
$env{'user.name'},$env{'user.domain'}); |
|
if ($result) { |
|
if (!-e "$batchdir/processed") { |
|
mkdir("$batchdir/processed", 0755); |
|
open(FILE,">$batchdir/processed/$filename"); |
|
print FILE @buffer; |
close(FILE); |
close(FILE); |
if ((defined($filename)) && (defined($batchdir))) { |
if (-e "$batchdir/processed/$filename") { |
my @requests = ($filename); |
unlink("$batchdir/pending/$filename"); |
my %courseids = (); |
|
($result,$logmsg,$keysmsg,$codesref,$instcodesref) = |
|
&LONCAPA::batchcreatecourse::create_courses( |
|
\@requests,\%courseids,'web',$defdom, |
|
$uname,$udom); |
|
if (keys(%courseids) > 0) { |
|
if (!-e "$batchdir/processed") { |
|
mkdir("$batchdir/processed", 0755); |
|
} |
|
if (-d "$batchdir/processed") { |
|
if (open(FILE,">","$batchdir/processed/$filename")) { |
|
print FILE @buffer; |
|
close(FILE); |
|
} |
|
} |
|
if (-e "$batchdir/processed/$filename") { |
|
unlink("$batchdir/pending/$filename"); |
|
} |
|
my $updatecats; |
|
if ((ref($instcodesref) eq 'HASH') && (keys(%{$instcodesref}) > 0)) { |
|
&Apache::lonnet::devalidate_cache_new('instcats',$defdom); |
|
$updatecats = 1; |
|
} |
|
®ister_cleanups($r,$defdom,$updatecats); |
|
|
|
} |
|
} |
} |
} else { |
|
$result = '<p class="LC_error">'.&mt('Could not open attributes file.').'<br />'.&mt('No courses created.').'</p>'; |
|
} |
} |
} else { |
|
$result = '<p class="LC_error">'.&mt('No uploaded attributes file found.').'<br />'.&mt('No courses created.').'</p>'; |
|
} |
} |
} else { |
|
$result = '<p class="LC_error">'.&mt('Invalid path to attributes file.').'<br />'.&mt('No courses created.').'</p>'; |
|
} |
} |
} else { |
|
$result = '<p class="LC_error">'.&mt("Your username, domain, and/or your current role's domain are missing or contain invalid characters."). |
|
'<br />'.&mt('No courses created.').'</p>'; |
|
} |
} |
$r->print(&Apache::loncommon::start_page('Create a New Course, Community or Placement Test'). |
$r->print($start_page.$crumbs.$logmsg.$result.'<br /><a href="/adm/createcourse">'. |
&Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses'). |
&mt('Creation options menu').'</a>'.$end_page); |
$logmsg.$result.'<br /><a href="/adm/createcourse">'. |
|
&mt('Creation options menu').'</a>'. |
|
&Apache::loncommon::end_page()); |
|
} |
} |
|
|
sub courserequestbrowser_javascript { |
sub courserequestbrowser_javascript { |
Line 1013 sub print_creation_logs {
|
Line 1011 sub print_creation_logs {
|
$crstype = '.'; |
$crstype = '.'; |
} elsif ($curr{'type'} eq 'community') { |
} elsif ($curr{'type'} eq 'community') { |
$crstype = 'Community'; |
$crstype = 'Community'; |
|
} elsif ($curr{'type'} eq 'placement') { |
|
$crstype = 'Placement'; |
} |
} |
|
|
my ($instcodefilter,$regexpok); |
my ($instcodefilter,$regexpok); |
Line 1103 sub print_creation_logs {
|
Line 1103 sub print_creation_logs {
|
my $showtype; |
my $showtype; |
if ($courses{$cid}{type} eq 'Community') { |
if ($courses{$cid}{type} eq 'Community') { |
$showtype = &mt('community'); |
$showtype = &mt('community'); |
|
} elsif ($courses{$cid}{type} eq 'Placement') { |
|
$showtype = &mt('placement test'); |
} else { |
} else { |
my $instcode = $courses{$cid}{inst_code}; |
my $instcode = $courses{$cid}{inst_code}; |
if ($instcode ne '') { |
if ($instcode ne '') { |
Line 1303 ENDJS
|
Line 1305 ENDJS
|
|
|
} |
} |
|
|
sub get_permission { |
|
my ($dom) = @_; |
|
my ($allowed,%permission); |
|
if (&Apache::lonnet::allowed('ccc',$dom)) { |
|
$allowed = 1; |
|
%permission = ( |
|
create => 1, |
|
); |
|
} elsif (&Apache::lonnet::allowed('dcc',$dom)) { |
|
$allowed = 1; |
|
} |
|
return ($allowed,\%permission); |
|
} |
|
|
|
sub register_cleanups { |
|
my ($r,$cdom,$updatecats) = @_; |
|
# Flush the course logs so reverse user roles immediately updated |
|
unless ($registered_flush) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\&Apache::lonnet::flushcourselogs,@{$handlers}]); |
|
$registered_flush=1; |
|
} |
|
# Update cache of self-cataloging courses on institution's server(s). |
|
if ($updatecats) { |
|
if (&Apache::lonnet::shared_institution($cdom)) { |
|
unless ($registered_instcats) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\&devalidate_remote_instcats,@{$handlers}]); |
|
$registered_instcats=1; |
|
$modified_dom = $cdom; |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub devalidate_remote_instcats { |
|
if ($modified_dom ne '') { |
|
my %servers = &Apache::lonnet::internet_dom_servers($modified_dom); |
|
my %thismachine; |
|
map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); |
|
if (keys(%servers)) { |
|
foreach my $server (keys(%servers)) { |
|
next if ($thismachine{$server}); |
|
&Apache::lonnet::remote_devalidate_cache($server,['instcats:'.$modified_dom]); |
|
} |
|
} |
|
$modified_dom = ''; |
|
} |
|
return; |
|
} |
|
|
|
# ===================================================================== Handler |
# ===================================================================== Handler |
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
Line 1365 sub handler {
|
Line 1315 sub handler {
|
return OK; |
return OK; |
} |
} |
|
|
$registered_flush = 0; |
my $show_all_choices = 0; |
$registered_instcats = 0; |
my $primary_rev = &Apache::lonnet::get_server_loncaparev($env{'request.role.domain'}); |
$modified_dom = ''; |
my %cancreate = ( |
|
Community => 0, |
my ($allowed,$permission) = &get_permission($env{'request.role.domain'}); |
Placement => 0, |
if ($allowed) { |
); |
my $show_all_choices = 0; |
|
my $primary_rev = &Apache::lonnet::get_server_loncaparev($env{'request.role.domain'}); |
if (($primary_rev ne 'refused') && ($primary_rev ne 'error') && |
my %cancreate = ( |
($primary_rev ne 'unknown_cmd') && ($primary_rev ne 'no_such_host')) { |
Community => 0, |
$show_all_choices = 1; |
); |
my ($primary_major,$primary_minor) = split(/\./,$primary_rev); |
if (($primary_rev ne 'refused') && ($primary_rev ne 'error') && |
foreach my $key (keys(%cancreate)) { |
($primary_rev ne 'unknown_cmd') && ($primary_rev ne 'no_such_host')) { |
my ($needsmajor,$needsminor) = |
$show_all_choices = 1; |
split(/\./,$Apache::lonnet::needsrelease{'course:crstype:'.$key}); |
my ($primary_major,$primary_minor) = split(/\./,$primary_rev); |
unless (($needsmajor > $primary_major) || |
foreach my $key (keys(%cancreate)) { |
(($needsmajor == $primary_major) && ($needsminor > $primary_minor))) { |
my ($needsmajor,$needsminor) = |
$cancreate{$key} = 1; |
split(/\./,$Apache::lonnet::needsrelease{'course:crstype:'.$key}); |
|
unless (($needsmajor > $primary_major) || |
|
(($needsmajor == $primary_major) && ($needsminor > $primary_minor))) { |
|
$cancreate{$key} = 1; |
|
} |
|
} |
} |
} |
} |
|
} |
|
print STDERR "cacreate Community $cancreate{'Community'} cancreate Placement $cancreate{'Placement'}\n"; |
|
|
|
if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
Line 1400 sub handler {
|
Line 1348 sub handler {
|
({href=>"/adm/createcourse", |
({href=>"/adm/createcourse", |
text=>"Creation Options", |
text=>"Creation Options", |
faq=>79,bug=>'Dom Coord Interface',}); |
faq=>79,bug=>'Dom Coord Interface',}); |
if (($permission->{'create'}) && |
if (($env{'form.phase'} eq 'coursetwo') || |
(($env{'form.phase'} eq 'coursetwo') || |
(($env{'form.phase'} eq 'grouptwo') && |
(($env{'form.phase'} eq 'grouptwo') && |
($cancreate{'Community'})) || |
($cancreate{'Community'})))) { |
(($env{'form.phase'} eq 'placementtwo') && |
|
($cancreate{'Placement'}))) { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", |
({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", |
text=>&mt('[_1] Creation Settings',), |
text=>&mt('[_1] Creation Settings',), |
Line 1413 sub handler {
|
Line 1362 sub handler {
|
text=>"Creation Outcome", |
text=>"Creation Outcome", |
faq=>9,bug=>'Dom Coord Interface',}); |
faq=>9,bug=>'Dom Coord Interface',}); |
&create_course($r); |
&create_course($r); |
} elsif (($permission->{'create'}) && |
} elsif (($env{'form.phase'} eq 'courseone') || |
(($env{'form.phase'} eq 'courseone') || |
(($env{'form.phase'} eq 'groupone') && |
(($env{'form.phase'} eq 'groupone') && |
($cancreate{'Community'})) || |
($cancreate{'Community'})))) { |
(($env{'form.phase'} eq 'placementone') && |
|
($cancreate{'Placement'}))) { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/createcourse?phase=$env{'form.phase'}", |
({href=>"/adm/createcourse?phase=$env{'form.phase'}", |
text=>&mt('[_1] Creation Settings',), |
text=>&mt('[_1] Creation Settings',), |
faq=>9,bug=>'Dom Coord Interface',}); |
faq=>9,bug=>'Dom Coord Interface',}); |
&print_course_creation_page($r); |
&print_course_creation_page($r); |
} elsif (($permission->{'create'}) && |
} elsif ($env{'form.phase'} eq 'batchone') { |
($env{'form.phase'} eq 'batchone')) { |
|
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/createcourse?phase=$env{'form.phase'}", |
({href=>"/adm/createcourse?phase=$env{'form.phase'}", |
text=>"Upload Description File", |
text=>"Upload Description File", |
faq=>9,bug=>'Dom Coord Interface',}); |
faq=>9,bug=>'Dom Coord Interface',}); |
&upload_batchfile($r); |
&upload_batchfile($r); |
} elsif (($permission->{'create'}) && |
} elsif ($env{'form.phase'} eq 'batchtwo') { |
($env{'form.phase'} eq 'batchtwo')) { |
|
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", |
({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", |
text=>"Upload Description File", |
text=>"Upload Description File", |
Line 1448 sub handler {
|
Line 1396 sub handler {
|
my $js = &courserequestbrowser_javascript(); |
my $js = &courserequestbrowser_javascript(); |
my $start_page=&Apache::loncommon::start_page('Display Requests',$js); |
my $start_page=&Apache::loncommon::start_page('Display Requests',$js); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Requests','Course_Requests',undef,'Course_Requests'); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Requests','Course_Requests',undef,'Course_Requests'); |
my $context = 'domain'; |
|
unless ($permission->{'create'}) { |
|
$context = 'helpdesk'; |
|
} |
|
$r->print($start_page.$crumbs."\n".'<div>'. |
$r->print($start_page.$crumbs."\n".'<div>'. |
&Apache::loncoursequeueadmin::display_queued_requests( |
&Apache::loncoursequeueadmin::display_queued_requests( |
$context,$env{'request.role.domain'}).'</div>'. |
'domain',$env{'request.role.domain'}).'</div>'. |
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
} elsif (($permission->{'create'}) && |
} elsif (($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) { |
($env{'form.phase'} eq 'requestchange') && ($show_all_choices)) { |
|
if ($env{'form.queue'} eq 'pending') { |
if ($env{'form.queue'} eq 'pending') { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/createcourse?phase=pendingdisplay", |
({href=>"/adm/createcourse?phase=pendingdisplay", |
Line 1487 sub handler {
|
Line 1430 sub handler {
|
my $js = &courserequestbrowser_javascript(); |
my $js = &courserequestbrowser_javascript(); |
my $start_page=&Apache::loncommon::start_page('Display Pending Queue',$js); |
my $start_page=&Apache::loncommon::start_page('Display Pending Queue',$js); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Pending Queue','Course_Requests',undef,'Course_Requests'); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Display Pending Queue','Course_Requests',undef,'Course_Requests'); |
my $context = 'pending'; |
|
unless ($permission->{'create'}) { |
|
$context = 'displaypending'; |
|
} |
|
$r->print($start_page.$crumbs."\n".'<div>'. |
$r->print($start_page.$crumbs."\n".'<div>'. |
&Apache::loncoursequeueadmin::display_queued_requests( |
&Apache::loncoursequeueadmin::display_queued_requests( |
$context,$env{'request.role.domain'}).'</div>'. |
'pending',$env{'request.role.domain'}).'</div>'. |
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
} elsif (($permission->{'create'}) && |
} elsif (($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) { |
($env{'form.phase'} eq 'requestvalidation') && ($show_all_choices)) { |
|
my $js = &courserequestbrowser_javascript(); |
my $js = &courserequestbrowser_javascript(); |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/createcourse?phase=pendingdisplay", |
({href=>"/adm/createcourse?phase=pendingdisplay", |
Line 1523 sub handler {
|
Line 1461 sub handler {
|
&print_creation_logs($r); |
&print_creation_logs($r); |
$r->print('</div>'.&Apache::loncommon::end_page()); |
$r->print('</div>'.&Apache::loncommon::end_page()); |
} else { |
} else { |
&print_intro_page($r,$show_all_choices,\%cancreate,$permission); |
&print_intro_page($r,$show_all_choices,\%cancreate); |
} |
} |
} else { |
} else { |
$env{'user.error.msg'}= |
$env{'user.error.msg'}= |