version 1.483, 2006/12/01 21:52:29
|
version 1.500, 2007/01/15 18:04:12
|
Line 59 use Apache::lonnet;
|
Line 59 use Apache::lonnet;
|
use GDBM_File; |
use GDBM_File; |
use POSIX qw(strftime mktime); |
use POSIX qw(strftime mktime); |
use Apache::lonmenu(); |
use Apache::lonmenu(); |
|
use Apache::lonenc(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use HTML::Entities; |
use HTML::Entities; |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
Line 515 function setSect(sectionlist) {
|
Line 516 function setSect(sectionlist) {
|
|
|
sub selectcourse_link { |
sub selectcourse_link { |
my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_; |
my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_; |
return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele. |
return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele. |
'","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select [_1]',$selecttype)."</a>"; |
'","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select Course')."</a>"; |
} |
} |
|
|
sub check_uncheck_jscript { |
sub check_uncheck_jscript { |
Line 2690 sub get_student_answers {
|
Line 2691 sub get_student_answers {
|
} |
} |
$moreenv{'grade_target'}='answer'; |
$moreenv{'grade_target'}='answer'; |
%moreenv=(%form,%moreenv); |
%moreenv=(%form,%moreenv); |
my $userview=&Apache::lonnet::ssi('/res/'.$feedurl,%moreenv); |
$feedurl = &Apache::lonnet::clutter($feedurl); |
|
&Apache::lonenc::check_encrypt(\$feedurl); |
|
my $userview=&Apache::lonnet::ssi($feedurl,%moreenv); |
return $userview; |
return $userview; |
} |
} |
|
|
Line 2850 sub findallcourses {
|
Line 2853 sub findallcourses {
|
$cnum = $cnumpart; |
$cnum = $cnumpart; |
($sec,$role) = split(/_/,$secpart); |
($sec,$role) = split(/_/,$secpart); |
$realsec = $sec; |
$realsec = $sec; |
} |
} |
$courses{$cdom.'_'.$cnum}{$sec} = $trole.'/'.$cdom.'/'.$cnum.'/'.$realsec; |
$courses{$cdom.'_'.$cnum}{$sec} = $trole.'/'.$cdom.'/'.$cnum.'/'.$realsec; |
} |
} |
} else { |
} else { |
Line 2885 sub findallcourses {
|
Line 2888 sub findallcourses {
|
|
|
sub blockcheck { |
sub blockcheck { |
my ($setters,$activity,$uname,$udom) = @_; |
my ($setters,$activity,$uname,$udom) = @_; |
# Retrieve active course roles - course coordinator, instructor, exam proctor, ta, student or custom role. |
|
|
if (!defined($udom)) { |
|
$udom = $env{'user.domain'}; |
|
} |
|
if (!defined($uname)) { |
|
$uname = $env{'user.name'}; |
|
} |
|
|
|
my ($startblock,$endblock); |
|
|
|
# If uname and udom are for a course, check for blocks in the course. |
|
|
|
if (&Apache::lonnet::is_course($udom,$uname)) { |
|
my %records = &Apache::lonnet::dump('comm_block',$udom,$uname); |
|
($startblock,$endblock)=&get_blocks($setters,$activity,$udom,$uname); |
|
return ($startblock,$endblock); |
|
} |
|
|
my %live_courses = &findallcourses(undef,$uname,$udom); |
my %live_courses = &findallcourses(undef,$uname,$udom); |
|
|
# Retrieve blocking times and identity of blocker for active courses |
# If uname is for a user, and activity is course-specific, i.e., |
# of specified user, unless user has 'evb' privilege. |
# boards, chat or groups, check for blocking in current course only. |
|
|
my $startblock = 0; |
if (($activity eq 'boards' || $activity eq 'chat' || |
my $endblock = 0; |
$activity eq 'groups') && ($env{'request.course.id'})) { |
|
foreach my $key (keys(%live_courses)) { |
|
if ($key ne $env{'request.course.id'}) { |
|
delete($live_courses{$key}); |
|
} |
|
} |
|
} |
|
|
|
my $otheruser = 0; |
|
my %own_courses; |
|
if ((($uname ne $env{'user.name'})) || ($udom ne $env{'user.domain'})) { |
|
# Resource belongs to user other than current user. |
|
$otheruser = 1; |
|
# Gather courses for current user |
|
%own_courses = |
|
&findallcourses(undef,$env{'user.name'},$env{'user.domain'}); |
|
} |
|
|
|
# Gather active course roles - course coordinator, instructor, |
|
# exam proctor, ta, student, or custom role. |
|
|
foreach my $course (keys(%live_courses)) { |
foreach my $course (keys(%live_courses)) { |
my ($cdom,$cnum); |
my ($cdom,$cnum); |
Line 2901 sub blockcheck {
|
Line 2939 sub blockcheck {
|
$cdom = $env{'course.'.$course.'.domain'}; |
$cdom = $env{'course.'.$course.'.domain'}; |
$cnum = $env{'course.'.$course.'.num'}; |
$cnum = $env{'course.'.$course.'.num'}; |
} else { |
} else { |
($cdom,$cnum) = split(/_/,$course); |
($cdom,$cnum) = split(/_/,$course); |
} |
} |
my $no_ownblock = 0; |
my $no_ownblock = 0; |
my $no_userblock = 0; |
my $no_userblock = 0; |
|
if ($otheruser) { |
|
# Check if current user has 'evb' priv for this |
|
if (defined($own_courses{$course})) { |
|
foreach my $sec (keys(%{$own_courses{$course}})) { |
|
my $checkrole = 'cm./'.$cdom.'/'.$cnum; |
|
if ($sec ne 'none') { |
|
$checkrole .= '/'.$sec; |
|
} |
|
if (&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) { |
|
$no_ownblock = 1; |
|
last; |
|
} |
|
} |
|
} |
|
# if they have 'evb' priv and are currently not playing student |
|
next if (($no_ownblock) && |
|
($env{'request.role'} !~ m{^st\./$cdom/$cnum})); |
|
} |
foreach my $sec (keys(%{$live_courses{$course}})) { |
foreach my $sec (keys(%{$live_courses{$course}})) { |
my $checkrole = 'cm./'.$cdom.'/'.$cnum; |
my $checkrole = 'cm./'.$cdom.'/'.$cnum; |
if ($sec ne 'none') { |
if ($sec ne 'none') { |
$checkrole .= '/'.$sec; |
$checkrole .= '/'.$sec; |
} |
} |
if ((defined($uname) && ($uname ne $env{'user.name'})) || |
# Resource belongs to user other than current user. |
(defined($udom) && ($udom ne $env{'user.domain'}))) { |
# Assemble privs for that user, and check for 'evb' priv. |
|
if ($otheruser) { |
|
# Resource belongs to user other than current user. |
|
# Assemble privs for that user, and check for 'evb' priv. |
my ($trole,$tdom,$tnum,$tsec); |
my ($trole,$tdom,$tnum,$tsec); |
my $entry = $live_courses{$course}{$sec}; |
my $entry = $live_courses{$course}{$sec}; |
if ($entry =~ /^cr/) { |
if ($entry =~ /^cr/) { |
Line 2943 sub blockcheck {
|
Line 3002 sub blockcheck {
|
} |
} |
} |
} |
} else { |
} else { |
|
# Resource belongs to current user |
|
# Check for 'evb' priv via lonnet::allowed(). |
if (&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) { |
if (&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) { |
$no_ownblock = 1; |
$no_ownblock = 1; |
last; |
last; |
Line 2951 sub blockcheck {
|
Line 3012 sub blockcheck {
|
} |
} |
# if they have the evb priv and are currently not playing student |
# if they have the evb priv and are currently not playing student |
next if (($no_ownblock) && |
next if (($no_ownblock) && |
($env{'request.role'} !~ m{^st\./$cdom/$cnum})); |
($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E})); |
next if ($no_userblock); |
next if ($no_userblock); |
|
|
$setters->{$course} = {}; |
# Retrieve blocking times and identity of blocker for course |
$setters->{$course}{'staff'} = []; |
# of specified user, unless user has 'evb' privilege. |
$setters->{$course}{'times'} = []; |
|
my %records = &Apache::lonnet::dump('comm_block',$cdom,$cnum); |
($startblock,$endblock)=&get_blocks($setters,$activity,$cdom,$cnum); |
foreach my $record (keys(%records)) { |
} |
my ($start,$end) = ($record =~ m/^(\d+)____(\d+)$/); |
return ($startblock,$endblock); |
if ($start <= time && $end >= time) { |
} |
my ($staff_name,$staff_dom,$title,$blocks) = |
|
&parse_block_record($records{$record}); |
sub get_blocks { |
if ($blocks->{$activity} eq 'on') { |
my ($setters,$activity,$cdom,$cnum) = @_; |
push(@{$$setters{$course}{'staff'}}, [$staff_name,$staff_dom]); push(@{$$setters{$course}{'times'}}, [$start,$end]); |
my $startblock = 0; |
if ( ($startblock == 0) || ($startblock > $1) ) { |
my $endblock = 0; |
$startblock = $1; |
my $course = $cdom.'_'.$cnum; |
} |
$setters->{$course} = {}; |
if ( ($endblock == 0) || ($endblock < $2) ) { |
$setters->{$course}{'staff'} = []; |
$endblock = $2; |
$setters->{$course}{'times'} = []; |
} |
my %records = &Apache::lonnet::dump('comm_block',$cdom,$cnum); |
|
foreach my $record (keys(%records)) { |
|
my ($start,$end) = ($record =~ m/^(\d+)____(\d+)$/); |
|
if ($start <= time && $end >= time) { |
|
my ($staff_name,$staff_dom,$title,$blocks) = |
|
&parse_block_record($records{$record}); |
|
if ($blocks->{$activity} eq 'on') { |
|
push(@{$$setters{$course}{'staff'}},[$staff_name,$staff_dom]); |
|
push(@{$$setters{$course}{'times'}}, [$start,$end]); |
|
if ( ($startblock == 0) || ($startblock > $start) ) { |
|
$startblock = $start; |
|
} |
|
if ( ($endblock == 0) || ($endblock < $end) ) { |
|
$endblock = $end; |
} |
} |
} |
} |
} |
} |
Line 3020 sub build_block_table {
|
Line 3094 sub build_block_table {
|
my %courseinfo=&Apache::lonnet::coursedescription($course); |
my %courseinfo=&Apache::lonnet::coursedescription($course); |
for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) { |
for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) { |
my ($uname,$udom) = @{$$setters{$course}{staff}[$i]}; |
my ($uname,$udom) = @{$$setters{$course}{staff}[$i]}; |
my $fullname = &aboutmewrapper(&plainname($uname,$udom),$uname,$udom); |
my $fullname = &plainname($uname,$udom); |
|
if (defined($env{'user.name'}) && defined($env{'user.domain'}) |
|
&& $env{'user.name'} ne 'public' |
|
&& $env{'user.domain'} ne 'public') { |
|
$fullname = &aboutmewrapper($fullname,$uname,$udom); |
|
} |
my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]}; |
my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]}; |
$openblock = &Apache::lonlocal::locallocaltime($openblock); |
$openblock = &Apache::lonlocal::locallocaltime($openblock); |
$closeblock= &Apache::lonlocal::locallocaltime($closeblock); |
$closeblock= &Apache::lonlocal::locallocaltime($closeblock); |
$output .= &Apache::loncommon::start_data_table_row(). |
$output .= &Apache::loncommon::start_data_table_row(). |
'<td>'.$courseinfo{'description'}.'</td>'. |
'<td>'.$courseinfo{'description'}.'</td>'. |
'<td>'.$openblock.' to '.$closeblock.'</td>'. |
'<td>'.$openblock.' to '.$closeblock.'</td>'. |
'<td>'.$fullname.'.</td>'. |
'<td>'.$fullname.'</td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
} |
} |
} |
} |
$output .= &end_data_table(); |
$output .= &end_data_table(); |
} |
} |
|
|
|
sub blocking_status { |
|
my ($activity,$uname,$udom) = @_; |
|
my %setters; |
|
my ($blocked,$output,$ownitem,$is_course); |
|
my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom); |
|
if ($startblock && $endblock) { |
|
$blocked = 1; |
|
if (wantarray) { |
|
my $category; |
|
if ($activity eq 'boards') { |
|
$category = 'Discussion posts in this course'; |
|
} elsif ($activity eq 'blogs') { |
|
$category = 'Blogs'; |
|
} elsif ($activity eq 'port') { |
|
if (defined($uname) && defined($udom)) { |
|
if ($uname eq $env{'user.name'} && |
|
$udom eq $env{'user.domain'}) { |
|
$ownitem = 1; |
|
} |
|
} |
|
$is_course = &Apache::lonnet::is_course($udom,$uname); |
|
if ($ownitem) { |
|
$category = 'Your portfolio files'; |
|
} elsif ($is_course) { |
|
my $coursedesc; |
|
foreach my $course (keys(%setters)) { |
|
my %courseinfo = |
|
&Apache::lonnet::coursedescription($course); |
|
$coursedesc = $courseinfo{'description'}; |
|
} |
|
$category = "Group files in the course '$coursedesc'"; |
|
} else { |
|
$category = 'Portfolio files belonging to '; |
|
if ($env{'user.name'} eq 'public' && |
|
$env{'user.domain'} eq 'public') { |
|
$category .= &plainname($uname,$udom); |
|
} else { |
|
$category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom); |
|
} |
|
} |
|
} elsif ($activity eq 'groups') { |
|
$category = 'Groups in this course'; |
|
} |
|
my $showstart = &Apache::lonlocal::locallocaltime($startblock); |
|
my $showend = &Apache::lonlocal::locallocaltime($endblock); |
|
$output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />'; |
|
if (!($activity eq 'port' && !($ownitem) && !($is_course))) { |
|
$output .= &build_block_table($startblock,$endblock,\%setters); |
|
} |
|
} |
|
} |
|
if (wantarray) { |
|
return ($blocked,$output); |
|
} else { |
|
return $blocked; |
|
} |
|
} |
|
|
############################################### |
############################################### |
|
|
=pod |
=pod |
Line 3207 sub bodytag {
|
Line 3344 sub bodytag {
|
my ($role,$realm) = split(/\./,$env{'request.role'},2); |
my ($role,$realm) = split(/\./,$env{'request.role'},2); |
if ($role eq 'ca') { |
if ($role eq 'ca') { |
my ($rdom,$rname) = ($realm =~ m{^/($match_domain)/($match_username)$}); |
my ($rdom,$rname) = ($realm =~ m{^/($match_domain)/($match_username)$}); |
$realm = &plainname($rname,$rdom).':'.$rdom; |
$realm = &plainname($rname,$rdom); |
} |
} |
# realm |
# realm |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
Line 3503 sub standard_css {
|
Line 3640 sub standard_css {
|
my $mail_other = '#99BBBB'; |
my $mail_other = '#99BBBB'; |
my $mail_other_hover = '#669999'; |
my $mail_other_hover = '#669999'; |
my $table_header = '#DDDDDD'; |
my $table_header = '#DDDDDD'; |
|
my $feedback_link_bg = '#BBBBBB'; |
|
|
my $border = ($env{'browser.type'} eq 'explorer') ? '0px 2px 0px 2px' |
my $border = ($env{'browser.type'} eq 'explorer') ? '0px 2px 0px 2px' |
: '0px 3px 0px 4px'; |
: '0px 3px 0px 4px'; |
Line 3790 table.LC_mail_list tr.LC_mail_other {
|
Line 3928 table.LC_mail_list tr.LC_mail_other {
|
table.LC_mail_list tr.LC_mail_other:hover { |
table.LC_mail_list tr.LC_mail_other:hover { |
background-color: $mail_other_hover; |
background-color: $mail_other_hover; |
} |
} |
|
table.LC_mail_list tr.LC_mail_even { |
|
} |
|
table.LC_mail_list tr.LC_mail_odd { |
|
} |
|
|
|
|
table#LC_portfolio_actions { |
table#LC_portfolio_actions { |
width: auto; |
width: auto; |
Line 4034 table.LC_descriptive_input td.LC_descrip
|
Line 4177 table.LC_descriptive_input td.LC_descrip
|
text-align: right; |
text-align: right; |
font-weight: bold; |
font-weight: bold; |
} |
} |
|
table.LC_feedback_link { |
|
background: $feedback_link_bg; |
|
} |
|
span.LC_feedback_link { |
|
background: $feedback_link_bg; |
|
font-size: larger; |
|
} |
|
|
END |
END |
} |
} |
Line 4326 Inputs: $args - additional optio
|
Line 4476 Inputs: $args - additional optio
|
a html attribute |
a html attribute |
frameset -> if true will start with a <frameset> |
frameset -> if true will start with a <frameset> |
rather than <body> |
rather than <body> |
|
dicsussion -> if true will get discussion from |
|
lonxml::xmlend |
|
(you can pass the target and parser arguments |
|
through optional 'target' and 'parser' args |
|
to this routine) |
|
|
=cut |
=cut |
|
|
Line 5225 sub record_sep {
|
Line 5380 sub record_sep {
|
} |
} |
} else { |
} else { |
my @allfields; |
my @allfields; |
&Apache::lonnet::logthis("file type is ".$env{'form.upfiletype'}); |
|
if ($env{'form.upfiletype'} eq 'semisv') { |
if ($env{'form.upfiletype'} eq 'semisv') { |
@allfields=split(/;/,$record); |
@allfields=split(/;/,$record); |
} else { |
} else { |
Line 5923 Returns: both routines return nothing
|
Line 6077 Returns: both routines return nothing
|
####################################################### |
####################################################### |
####################################################### |
####################################################### |
sub store_course_settings { |
sub store_course_settings { |
|
return &store_settings($env{'request.course.id'},@_); |
|
} |
|
|
|
sub store_settings { |
# save to the environment |
# save to the environment |
# appenv the same items, just to be safe |
# appenv the same items, just to be safe |
my $courseid = $env{'request.course.id'}; |
|
my $udom = $env{'user.domain'}; |
my $udom = $env{'user.domain'}; |
my $uname = $env{'user.name'}; |
my $uname = $env{'user.name'}; |
my ($prefix,$Settings) = @_; |
my ($context,$prefix,$Settings) = @_; |
my %SaveHash; |
my %SaveHash; |
my %AppHash; |
my %AppHash; |
while (my ($setting,$type) = each(%$Settings)) { |
while (my ($setting,$type) = each(%$Settings)) { |
my $basename = join('.','internal',$courseid,$prefix,$setting); |
my $basename = join('.','internal',$context,$prefix,$setting); |
my $envname = 'environment.'.$basename; |
my $envname = 'environment.'.$basename; |
if (exists($env{'form.'.$setting})) { |
if (exists($env{'form.'.$setting})) { |
# Save this value away |
# Save this value away |
Line 5972 sub store_course_settings {
|
Line 6129 sub store_course_settings {
|
} |
} |
|
|
sub restore_course_settings { |
sub restore_course_settings { |
my $courseid = $env{'request.course.id'}; |
return &restore_settings($env{'request.course.id'},@_); |
my ($prefix,$Settings) = @_; |
} |
|
|
|
sub restore_settings { |
|
my ($context,$prefix,$Settings) = @_; |
while (my ($setting,$type) = each(%$Settings)) { |
while (my ($setting,$type) = each(%$Settings)) { |
next if (exists($env{'form.'.$setting})); |
next if (exists($env{'form.'.$setting})); |
my $envname = 'environment.internal.'.$courseid.'.'.$prefix. |
my $envname = 'environment.internal.'.$context.'.'.$prefix. |
'.'.$setting; |
'.'.$setting; |
if (exists($env{$envname})) { |
if (exists($env{$envname})) { |
if ($type eq 'scalar') { |
if ($type eq 'scalar') { |
Line 6290 sub construct_course {
|
Line 6450 sub construct_course {
|
# if specified, key authority is not course, but user |
# if specified, key authority is not course, but user |
# only active if keyaccess is yes |
# only active if keyaccess is yes |
if ($args->{'keyauth'}) { |
if ($args->{'keyauth'}) { |
$args->{'keyauth'}=~s/[^\w\@]//g; |
my ($user,$domain) = split(':',$args->{'keyauth'}); |
if ($args->{'keyauth'}) { |
$user = &LONCAPA::clean_username($user); |
$cenv{'keyauth'}=$args->{'keyauth'}; |
$domain = &LONCAPA::clean_username($domain); |
|
if ($user ne '' && $domain ne '') { |
|
$cenv{'keyauth'}=$user.':'.$domain; |
} |
} |
} |
} |
|
|