version 1.254, 2010/07/26 21:52:15
|
version 1.259, 2010/09/02 17:06:38
|
Line 210 sub handler {
|
Line 210 sub handler {
|
my %dcroles = (); |
my %dcroles = (); |
my $numdc = &check_fordc(\%dcroles,$then); |
my $numdc = &check_fordc(\%dcroles,$then); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); |
my $loncaparev = $Apache::lonnet::perlvar{'lonVersion'}; |
my $loncaparev = $Apache::lonnet::perlvar{'lonVersion'}; |
|
|
# ================================================================== Roles Init |
# ================================================================== Roles Init |
if ($env{'form.selectrole'}) { |
if ($env{'form.selectrole'}) { |
Line 324 sub handler {
|
Line 324 sub handler {
|
if ($tstatus eq 'is') { |
if ($tstatus eq 'is') { |
$where=~s/^\///; |
$where=~s/^\///; |
my ($cdom,$cnum,$csec)=split(/\//,$where); |
my ($cdom,$cnum,$csec)=split(/\//,$where); |
|
if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) { |
|
my $home = $env{'course.'.$cdom.'_'.$cnum.'.home'}; |
|
my @ids = &Apache::lonnet::current_machine_ids(); |
|
unless ($loncaparev eq '' && $home && grep(/^\Q$home\E$/,@ids)) { |
|
my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); |
|
if ($curr_reqd_hash{'internal.releaserequired'} ne '') { |
|
my ($switchserver,$switchwarning) = |
|
&check_release_required($loncaparev,$cdom.'_'.$cnum,$trolecode,$curr_reqd_hash{'internal.releaserequired'}); |
|
if ($switchwarning ne '' || $switchserver ne '') { |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
&Apache::loncommon::no_cache($r); |
|
$r->send_http_header; |
|
my $end_page=&Apache::loncommon::end_page(); |
|
$r->print(&Apache::loncommon::start_page('Selected course unavailable on this server'). |
|
'<p class="LC_warning">'); |
|
if ($switchwarning) { |
|
$r->print($switchwarning.'<br /><a href="/adm/roles">'); |
|
if (&Apache::loncommon::show_course()) { |
|
$r->print(&mt('Display courses')); |
|
} else { |
|
$r->print(&mt('Display roles')); |
|
} |
|
$r->print('</a>'); |
|
} elsif ($switchserver) { |
|
$r->print(&mt('This course requires a newer version of LON-CAPA than is installed on this server.'). |
|
'<br />'. |
|
'<a href="/adm/switchserver?'.$switchserver.'">'. |
|
&mt('Switch Server'). |
|
'</a>'); |
|
} |
|
$r->print('</p>'.&Apache::loncommon::end_page()); |
|
return OK; |
|
} |
|
} |
|
} |
|
} |
# check for course groups |
# check for course groups |
my %coursegroups = &Apache::lonnet::get_active_groups( |
my %coursegroups = &Apache::lonnet::get_active_groups( |
$env{'user.domain'},$env{'user.name'},$cdom, $cnum); |
$env{'user.domain'},$env{'user.name'},$cdom, $cnum); |
Line 459 ENDENTERKEY
|
Line 495 ENDENTERKEY
|
if (($ferr) && ($tadv)) { |
if (($ferr) && ($tadv)) { |
&error_page($r,$ferr,$dest); |
&error_page($r,$ferr,$dest); |
} else { |
} else { |
|
if ($dest =~ m{^/adm/coursedocs\?folderpath}) { |
|
if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { |
|
my $chome = &Apache::lonnet::homeserver($cnum,$cdom); |
|
&update_content_constraints($cdom,$cnum,$chome,$cdom.'_'.$cnum); |
|
} |
|
} |
$r->internal_redirect($dest); |
$r->internal_redirect($dest); |
} |
} |
return OK; |
return OK; |
Line 688 ENDHEADER
|
Line 730 ENDHEADER
|
$r->print('<input type="hidden" name="selectrole" value="1" />'); |
$r->print('<input type="hidden" name="selectrole" value="1" />'); |
$r->print('<input type="hidden" name="newrole" value="" />'); |
$r->print('<input type="hidden" name="newrole" value="" />'); |
} |
} |
|
$r->rflush(); |
|
|
my (%roletext,%sortrole,%roleclass,%futureroles,%timezones); |
my (%roletext,%sortrole,%roleclass,%futureroles,%timezones); |
my ($countactive,$countfuture,$inrole,$possiblerole) = |
my ($countactive,$countfuture,$inrole,$possiblerole) = |
Line 803 ENDHEADER
|
Line 846 ENDHEADER
|
} elsif ($numdc > 0) { |
} elsif ($numdc > 0) { |
unless ($role =~/^error\:/) { |
unless ($role =~/^error\:/) { |
my ($roletext,$role_text_end) = &display_cc_role('user.role.'.$role); |
my ($roletext,$role_text_end) = &display_cc_role('user.role.'.$role); |
$output.= &Apache::loncommon::start_data_table_row(). |
if ($roletext) { |
$roletext. |
$output.= &Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::end_data_table_row(). |
$roletext. |
&Apache::loncommon::continue_data_table_row(). |
&Apache::loncommon::end_data_table_row(); |
$role_text_end. |
if ($role_text_end) { |
&Apache::loncommon::end_data_table_row(); |
$output .= &Apache::loncommon::continue_data_table_row(). |
|
$role_text_end. |
|
&Apache::loncommon::end_data_table_row(); |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 889 sub gather_roles {
|
Line 936 sub gather_roles {
|
&Apache::lonnet::role_status($envkey,$then,$refresh,$now,\$role,\$where, |
&Apache::lonnet::role_status($envkey,$then,$refresh,$now,\$role,\$where, |
\$trolecode,\$tstatus,\$tstart,\$tend); |
\$trolecode,\$tstatus,\$tstart,\$tend); |
next if (!defined($role) || $role eq '' || $role =~ /^gr/); |
next if (!defined($role) || $role eq '' || $role =~ /^gr/); |
my $timezone = &role_timezone($where,$timezones); |
|
$tremark=''; |
$tremark=''; |
$tpstart=' '; |
$tpstart=' '; |
$tpend=' '; |
$tpend=' '; |
if ($tstart) { |
|
$tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone); |
|
} |
|
if ($tend) { |
|
$tpend=&Apache::lonlocal::locallocaltime($tend,$timezone); |
|
} |
|
if ($env{'request.role'} eq $trolecode) { |
if ($env{'request.role'} eq $trolecode) { |
$tstatus='selected'; |
$tstatus='selected'; |
} |
} |
Line 907 sub gather_roles {
|
Line 947 sub gather_roles {
|
|| ($tstatus eq 'selected') |
|| ($tstatus eq 'selected') |
|| ($tstatus eq 'future') |
|| ($tstatus eq 'future') |
|| ($env{'form.showall'})) { |
|| ($env{'form.showall'})) { |
|
my $timezone = &role_timezone($where,$timezones); |
|
if ($tstart) { |
|
$tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone); |
|
} |
|
if ($tend) { |
|
$tpend=&Apache::lonlocal::locallocaltime($tend,$timezone); |
|
} |
if ($tstatus eq 'is') { |
if ($tstatus eq 'is') { |
$tbg='LC_roles_is'; |
$tbg='LC_roles_is'; |
$possiblerole=$trolecode; |
$possiblerole=$trolecode; |
Line 989 sub gather_roles {
|
Line 1036 sub gather_roles {
|
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
'</span>'; |
'</span>'; |
unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') { |
unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') { |
($switchserver,$switchwarning) = |
my $required = $env{'course.'.$tcourseid.'.internal.releaserequired'}; |
&check_release_required($loncaparev,$tcourseid,$trolecode); |
if ($required ne '') { |
if ($switchserver || $switchwarning) { |
($switchserver,$switchwarning) = |
$button = 0; |
&check_release_required($loncaparev,$tcourseid,$trolecode,$required); |
|
if ($switchserver || $switchwarning) { |
|
$button = 0; |
|
} |
} |
} |
} |
} |
} |
} |
Line 1009 sub gather_roles {
|
Line 1059 sub gather_roles {
|
$trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid); |
$trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid); |
my $home = $newhash{'home'}; |
my $home = $newhash{'home'}; |
unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') { |
unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') { |
($switchserver,$switchwarning) = |
my $required = $newhash{'internal.releaserequired'}; |
&check_release_required($loncaparev,$tcourseid,$trolecode); |
if ($required ne '') { |
if ($switchserver || $switchwarning) { |
($switchserver,$switchwarning) = |
$button = 0; |
&check_release_required($loncaparev,$tcourseid,$trolecode,$required); |
|
if ($switchserver || $switchwarning) { |
|
$button = 0; |
|
} |
} |
} |
} |
} |
} else { |
} else { |
Line 1058 sub role_timezone {
|
Line 1111 sub role_timezone {
|
my $cnum = $2; |
my $cnum = $2; |
if ($cdom && $cnum) { |
if ($cdom && $cnum) { |
if (!exists($timezones->{$cdom.'_'.$cnum})) { |
if (!exists($timezones->{$cdom.'_'.$cnum})) { |
my %timehash = |
my $tz; |
&Apache::lonnet::get('environment',['timezone'],$cdom,$cnum); |
if ($env{'course.'.$cdom.'_'.$cnum.'.description'}) { |
if ($timehash{'timezone'} eq '') { |
$tz = $env{'course.'.$cdom.'_'.$cnum.'.timezone'}; |
|
} else { |
|
my %timehash = |
|
&Apache::lonnet::get('environment',['timezone'],$cdom,$cnum); |
|
$tz = $timehash{'timezone'}; |
|
} |
|
if ($tz eq '') { |
if (!exists($timezones->{$cdom})) { |
if (!exists($timezones->{$cdom})) { |
my %domdefaults = |
my %domdefaults = |
&Apache::lonnet::get_domain_defaults($cdom); |
&Apache::lonnet::get_domain_defaults($cdom); |
Line 1073 sub role_timezone {
|
Line 1132 sub role_timezone {
|
$timezones->{$cdom.'_'.$cnum} = $timezones->{$cdom}; |
$timezones->{$cdom.'_'.$cnum} = $timezones->{$cdom}; |
} else { |
} else { |
$timezones->{$cdom.'_'.$cnum} = |
$timezones->{$cdom.'_'.$cnum} = |
&Apache::lonlocal::gettimezone($timehash{'timezone'}); |
&Apache::lonlocal::gettimezone($tz); |
} |
} |
} |
} |
$timezone = $timezones->{$cdom.'_'.$cnum}; |
$timezone = $timezones->{$cdom.'_'.$cnum}; |
Line 1328 sub build_roletext {
|
Line 1387 sub build_roletext {
|
} else { |
} else { |
$roletext.=('<td'.$rowspan.' class="'.$tbg.'"> </td>'); |
$roletext.=('<td'.$rowspan.' class="'.$tbg.'"> </td>'); |
} |
} |
$tremark .= $switchwarning; |
if ($switchwarning) { |
|
if ($tremark eq '') { |
|
$tremark = $switchwarning; |
|
} else { |
|
$tremark .= '<br />'.$switchwarning; |
|
} |
|
} |
} elsif ($tstatus eq 'is') { |
} elsif ($tstatus eq 'is') { |
$roletext.='<td'.$rowspan.' class="'.$tbg.'">'. |
$roletext.='<td'.$rowspan.' class="'.$tbg.'">'. |
'<input name="'.$buttonname.'" type="button" value="'. |
'<input name="'.$buttonname.'" type="button" value="'. |
Line 1510 sub check_forcc {
|
Line 1575 sub check_forcc {
|
} |
} |
|
|
sub check_release_required { |
sub check_release_required { |
my ($loncaparev,$tcourseid,$trolecode) = @_; |
my ($loncaparev,$tcourseid,$trolecode,$required) = @_; |
my ($switchserver,$warning); |
my ($switchserver,$warning); |
if ($env{'course.'.$tcourseid.'.internal.releaserequired'} ne '') { |
if ($required ne '') { |
my ($reqdmajor,$reqdminor) = ($env{'course.'.$tcourseid.'.internal.releaserequired'} =~ /^(\d+)\.(\d+)$/); |
my ($reqdmajor,$reqdminor) = ($required =~ /^(\d+)\.(\d+)$/); |
my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\d.\-]+\'?$/); |
my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/); |
if ($reqdmajor ne '' && $reqdminor ne '') { |
if ($reqdmajor ne '' && $reqdminor ne '') { |
my $otherserver; |
my $otherserver; |
if (($major eq '' && $minor eq '') || |
if (($major eq '' && $minor eq '') || |
Line 1523 sub check_release_required {
|
Line 1588 sub check_release_required {
|
my $switchlcrev = |
my $switchlcrev = |
&Apache::lonnet::get_server_loncaparev($env{'user.domain'}, |
&Apache::lonnet::get_server_loncaparev($env{'user.domain'}, |
$userdomserver); |
$userdomserver); |
my ($swmajor,$swminor) = ($switchlcrev =~ /^\'?(\d+)\.(\d+)\.[\d.\-]+\'?$/); |
my ($swmajor,$swminor) = ($switchlcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/); |
if (($swmajor eq '' && $swminor eq '') || ($reqdmajor > $swmajor) || |
if (($swmajor eq '' && $swminor eq '') || ($reqdmajor > $swmajor) || |
(($reqdmajor == $swmajor) && ($reqdminor > $swminor))) { |
(($reqdmajor == $swmajor) && ($reqdminor > $swminor))) { |
my $cdom = $env{'course.'.$tcourseid.'.domain'}; |
my $cdom = $env{'course.'.$tcourseid.'.domain'}; |
Line 1561 sub check_release_required {
|
Line 1626 sub check_release_required {
|
return ($switchserver,$warning); |
return ($switchserver,$warning); |
} |
} |
|
|
|
sub update_content_constraints { |
|
my ($cdom,$cnum,$chome,$cid) = @_; |
|
my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); |
|
my ($reqdmajor,$reqdminor) = split(/\./,$curr_reqd_hash{'internal.releaserequired'}); |
|
my %checkresponsetypes; |
|
foreach my $key (keys(%Apache::lonnet::needsrelease)) { |
|
my ($item,$name,$value) = split(/:/,$key); |
|
if ($item eq 'resourcetag') { |
|
if ($name eq 'responsetype') { |
|
$checkresponsetypes{$value} = $Apache::lonnet::needsrelease{$key} |
|
} |
|
} |
|
} |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (defined($navmap)) { |
|
my %allresponses; |
|
foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { |
|
my %responses = $res->responseTypes(); |
|
foreach my $key (keys(%responses)) { |
|
next unless(exists($checkresponsetypes{$key})); |
|
$allresponses{$key} += $responses{$key}; |
|
} |
|
} |
|
foreach my $key (keys(%allresponses)) { |
|
my ($major,$minor) = split(/\./,$checkresponsetypes{$key}); |
|
if (($major > $reqdmajor) || ($major == $reqdmajor && $minor > $reqdminor)) { |
|
($reqdmajor,$reqdminor) = ($major,$minor); |
|
} |
|
} |
|
undef($navmap); |
|
} |
|
unless (($reqdmajor eq '') && ($reqdminor eq '')) { |
|
&Apache::lonnet::update_released_required($reqdmajor.'.'.$reqdminor,$cdom,$cnum,$chome,$cid); |
|
} |
|
return; |
|
} |
|
|
sub courselink { |
sub courselink { |
my ($dcdom,$rowtype) = @_; |
my ($dcdom,$rowtype) = @_; |
my $courseform=&Apache::loncommon::selectcourse_link |
my $courseform=&Apache::loncommon::selectcourse_link |
Line 1650 sub display_cc_role {
|
Line 1752 sub display_cc_role {
|
$env{'course.'.$tcourseid.'.description'}=$twhere; |
$env{'course.'.$tcourseid.'.description'}=$twhere; |
} |
} |
my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid); |
my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid); |
$twhere.="<br />".&mt('Domain').":".$1; |
$twhere.="<br />".&mt('Domain').":".$tdom; |
($roletext,$roletext_end) = &build_roletext($trolecode,$tdom,$trest,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,''); |
($roletext,$roletext_end) = &build_roletext($trolecode,$tdom,$trest,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,''); |
} |
} |
} |
} |