version 1.471, 2006/11/20 21:00:47
|
version 1.480, 2006/12/01 00:26:07
|
Line 65 use Apache::lonhtmlcommon();
|
Line 65 use Apache::lonhtmlcommon();
|
use Apache::loncoursedata(); |
use Apache::loncoursedata(); |
use Apache::lontexconvert(); |
use Apache::lontexconvert(); |
use Apache::lonclonecourse(); |
use Apache::lonclonecourse(); |
use LONCAPA; |
use LONCAPA qw(:DEFAULT :match); |
|
|
my $readit; |
my $readit; |
|
|
Line 157 BEGIN {
|
Line 157 BEGIN {
|
opendir(DIR,$designdir); |
opendir(DIR,$designdir); |
while ($filename=readdir(DIR)) { |
while ($filename=readdir(DIR)) { |
if ($filename!~/\.tab$/) { next; } |
if ($filename!~/\.tab$/) { next; } |
my ($domain)=($filename=~/^(\w+)\./); |
my ($domain)=($filename=~/^($match_domain)\./); |
{ |
{ |
my $designfile = $designdir.'/'.$filename; |
my $designfile = $designdir.'/'.$filename; |
if ( open (my $fh,"<$designfile") ) { |
if ( open (my $fh,"<$designfile") ) { |
Line 1377 sub select_form {
|
Line 1377 sub select_form {
|
return $selectform; |
return $selectform; |
} |
} |
|
|
|
# For display filters |
|
|
|
sub display_filter { |
|
if (!$env{'form.show'}) { $env{'form.show'}=10; } |
|
if (!$env{'form.displayfilter'}) { $env{'form.displayfilter'}='currentfolder'; } |
|
return '<nobr><label>'.&mt('Records [_1]', |
|
&Apache::lonmeta::selectbox('show',$env{'form.show'},undef, |
|
(&mt('all'),10,20,50,100,1000,10000))). |
|
'</label></nobr> <nobr>'. |
|
&mt('Filter [_1]', |
|
&select_form($env{'form.displayfilter'}, |
|
'displayfilter', |
|
('currentfolder' => 'Current folder/page', |
|
'containing' => 'Containing phrase', |
|
'none' => 'None'))). |
|
'<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></nobr>'; |
|
} |
|
|
sub gradeleveldescription { |
sub gradeleveldescription { |
my $gradelevel=shift; |
my $gradelevel=shift; |
my %gradelevels=(0 => 'Not specified', |
my %gradelevels=(0 => 'Not specified', |
Line 2792 sub findallcourses {
|
Line 2810 sub findallcourses {
|
my %courses; |
my %courses; |
my $now=time; |
my $now=time; |
foreach my $key (keys(%env)) { |
foreach my $key (keys(%env)) { |
if ( $key=~m{^user\.role\.(\w+)\./(\w+)/(\w+)} ) { |
if ( $key=~m{^user\.role\.(\w+)\./($match_domain)/($match_username)/?(\w*)$} || |
my ($role,$domain,$id) = ($1,$2,$3); |
$key=~m{^user\.role\.(cr/$match_domain/$match_username/\w+)\./($match_domain)/($match_username)}) { |
|
my ($role,$domain,$id,$sec) = ($1,$2,$3,$4); |
next if ($role eq 'ca' || $role eq 'aa'); |
next if ($role eq 'ca' || $role eq 'aa'); |
next if (%roles && !exists($roles{$role})); |
next if (%roles && !exists($roles{$role})); |
my ($starttime,$endtime)=split(/\./,$env{$key}); |
my ($starttime,$endtime)=split(/\./,$env{$key}); |
Line 2804 sub findallcourses {
|
Line 2823 sub findallcourses {
|
if ($endtime) { |
if ($endtime) { |
if ($now>$endtime) { $active=0; } |
if ($now>$endtime) { $active=0; } |
} |
} |
if ($active) { $courses{$domain.'_'.$id}=1; } |
if ($active) { |
|
if ($sec eq '') { |
|
$sec = 'none'; |
|
} |
|
$courses{$domain.'_'.$id}{$sec} = 1; |
|
} |
} |
} |
} |
} |
return keys(%courses); |
return %courses; |
} |
} |
|
|
############################################### |
############################################### |
|
|
|
sub blockcheck { |
|
my ($setters,$activity) = @_; |
|
# Retrieve active student roles and active course coordinator/instructor roles |
|
|
|
my %live_courses = &findallcourses(); |
|
|
|
# Retrieve blocking times and identity of blocker for active courses |
|
# unless user has 'evb' privilege. |
|
|
|
my $startblock = 0; |
|
my $endblock = 0; |
|
|
|
foreach my $course (keys(%live_courses)) { |
|
my $cdom = $env{'course.'.$course.'.domain'}; |
|
my $cnum = $env{'course.'.$course.'.num'}; |
|
my $noblock = 0; |
|
foreach my $sec (keys(%{$live_courses{$course}})) { |
|
my $role = 'cm./'.$cdom.'/'.$cnum; |
|
if ($sec ne 'none') { |
|
$role .= '/'.$sec; |
|
} |
|
if (&Apache::lonnet::allowed('evb',undef,undef,$role)) { |
|
$noblock = 1; |
|
last; |
|
} |
|
} |
|
# if they have the evb priv and are currently not playing student |
|
next if (($noblock) && |
|
($env{'request.role'} !~ m{^st\./$cdom/$cnum})); |
|
|
|
$setters->{$course} = {}; |
|
$setters->{$course}{'staff'} = []; |
|
$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 > $1) ) { |
|
$startblock = $1; |
|
} |
|
if ( ($endblock == 0) || ($endblock < $2) ) { |
|
$endblock = $2; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return ($startblock,$endblock); |
|
} |
|
|
|
sub parse_block_record { |
|
my ($record) = @_; |
|
my ($setuname,$setudom,$title,$blocks); |
|
if (ref($record) eq 'HASH') { |
|
($setuname,$setudom) = split(/:/,$record->{'setter'}); |
|
$title = &unescape($record->{'event'}); |
|
$blocks = $record->{'blocks'}; |
|
} else { |
|
my @data = split(/:/,$record,3); |
|
if (scalar(@data) eq 2) { |
|
$title = $data[1]; |
|
($setuname,$setudom) = split(/@/,$data[0]); |
|
} else { |
|
($setuname,$setudom,$title) = @data; |
|
} |
|
$blocks = { 'com' => 'on' }; |
|
} |
|
return ($setuname,$setudom,$title,$blocks); |
|
} |
|
|
|
sub build_block_table { |
|
my ($startblock,$endblock,$setters) = @_; |
|
my %lt = &Apache::lonlocal::texthash( |
|
'cacb' => 'Currently active communication blocks', |
|
'cour' => 'Course', |
|
'dura' => 'Duration', |
|
'blse' => 'Block set by' |
|
); |
|
my $output; |
|
$output = '<br />'.$lt{'cacb'}.':<br />'; |
|
$output .= &start_data_table(); |
|
$output .= ' |
|
<tr> |
|
<th>'.$lt{'cour'}.'</th> |
|
<th>'.$lt{'dura'}.'</th> |
|
<th>'.$lt{'blse'}.'</th> |
|
</tr> |
|
'; |
|
foreach my $course (keys(%{$setters})) { |
|
my %courseinfo=&Apache::lonnet::coursedescription($course); |
|
for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) { |
|
my ($uname,$udom) = @{$$setters{$course}{staff}[$i]}; |
|
my $fullname = &aboutmewrapper(&plainname($uname,$udom),$uname,$udom); |
|
my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]}; |
|
$openblock = &Apache::lonlocal::locallocaltime($openblock); |
|
$closeblock= &Apache::lonlocal::locallocaltime($closeblock); |
|
$output .= &Apache::loncommon::start_data_table_row(). |
|
'<td>'.$courseinfo{'description'}.'</td>'. |
|
'<td>'.$openblock.' to '.$closeblock.'</td>'. |
|
'<td>'.$fullname.'.</td>'. |
|
&Apache::loncommon::end_data_table_row(); |
|
} |
|
} |
|
$output .= &end_data_table(); |
|
} |
|
|
############################################### |
############################################### |
|
|
=pod |
=pod |
Line 2983 sub bodytag {
|
Line 3118 sub bodytag {
|
# role and realm |
# role and realm |
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-^/(\w+)/(\w+)$-); |
my ($rdom,$rname) = ($realm =~ m{^/($match_domain)/($match_username)$}); |
$realm = &plainname($rname,$rdom).':'.$rdom; |
$realm = &plainname($rname,$rdom).':'.$rdom; |
} |
} |
# realm |
# realm |
Line 3489 table.LC_whatsnew tr.LC_empty_row td {
|
Line 3624 table.LC_whatsnew tr.LC_empty_row td {
|
table.LC_whatsnew tr.LC_empty_row td { |
table.LC_whatsnew tr.LC_empty_row td { |
padding: 4ex |
padding: 4ex |
} |
} |
|
|
|
|
table.LC_whatsnew { |
table.LC_whatsnew { |
} |
} |
|
|
Line 3514 table.LC_whatsnew tr.LC_odd_row td {
|
Line 3647 table.LC_whatsnew tr.LC_odd_row td {
|
background-color: #EEE; |
background-color: #EEE; |
} |
} |
|
|
|
table.LC_createuser { |
|
} |
|
|
|
table.LC_createuser tr.LC_section_row td { |
|
font-size: smaller; |
|
} |
|
|
|
table.LC_createuser tr.LC_info_row td { |
|
background-color: #CCC; |
|
font-weight: bold; |
|
text-align: center; |
|
} |
|
|
table.LC_calendar { |
table.LC_calendar { |
border: 1px solid #000000; |
border: 1px solid #000000; |
border-collapse: collapse; |
border-collapse: collapse; |
Line 4612 sub get_user_info {
|
Line 4758 sub get_user_info {
|
return; |
return; |
} |
} |
|
|
|
############################################### |
|
|
|
=pod |
|
|
|
=item * &get_user_quota() |
|
|
|
Retrieves quota assigned for storage of portfolio files for a user |
|
|
|
Incoming parameters: |
|
1. user's username |
|
2. user's domain |
|
|
|
Returns: |
|
1. Disk quota (in Mb) assigned to student. |
|
|
|
If a value has been stored in the user's environment, |
|
it will return that, otherwise it returns the default |
|
for users in the domain. |
|
|
|
=cut |
|
|
|
############################################### |
|
|
|
|
|
sub get_user_quota { |
|
my ($uname,$udom) = @_; |
|
my $quota; |
|
if (!defined($udom)) { |
|
$udom = $env{'user.domain'}; |
|
} |
|
if (!defined($uname)) { |
|
$uname = $env{'user.name'}; |
|
} |
|
if (($udom eq '' || $uname eq '') || |
|
($udom eq 'public') && ($uname eq 'public')) { |
|
$quota = 0; |
|
} else { |
|
if ($udom eq $env{'user.domain'} && $uname eq $env{'user.name'}) { |
|
$quota = $env{'environment.portfolioquota'}; |
|
} else { |
|
my %userenv = &Apache::lonnet::dump('environment',$udom,$uname); |
|
my ($tmp) = keys(%userenv); |
|
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
|
$quota = $userenv{'portfolioquota'}; |
|
} else { |
|
undef(%userenv); |
|
} |
|
} |
|
if ($quota eq '') { |
|
$quota = &default_quota($udom); |
|
} |
|
} |
|
return $quota; |
|
} |
|
|
|
############################################### |
|
|
|
=pod |
|
|
|
=item * &default_quota() |
|
|
|
Retrieves default quota assigned for storage of user portfolio files |
|
|
|
Incoming parameters: |
|
1. domain |
|
|
|
Returns: |
|
1. Default disk quota (in Mb) for user portfolios in the domain. |
|
|
|
If a value has been stored in the domain's configuration db, |
|
it will return that, otherwise it returns 20 (for backwards |
|
compatibility with domains which have not set up a configuration |
|
db file; the original statically defined portfolio quota was 20 Mb). |
|
|
|
=cut |
|
|
|
############################################### |
|
|
|
|
|
sub default_quota { |
|
my ($udom) = @_; |
|
my %defaults = &Apache::lonnet::get_dom('configuration', |
|
['portfolioquota'],$udom); |
|
if ($defaults{'portfolioquota'} ne '') { |
|
return $defaults{'portfolioquota'}; |
|
} else { |
|
return '20'; |
|
} |
|
} |
|
|
sub get_secgrprole_info { |
sub get_secgrprole_info { |
my ($cdom,$cnum,$needroles,$type) = @_; |
my ($cdom,$cnum,$needroles,$type) = @_; |
my %sections_count = &get_sections($cdom,$cnum); |
my %sections_count = &get_sections($cdom,$cnum); |
Line 4900 sub record_sep {
|
Line 5136 sub record_sep {
|
$i++; |
$i++; |
} |
} |
} else { |
} else { |
my @allfields=split(/\,/,$record); |
my @allfields; |
|
&Apache::lonnet::logthis("file type is ".$env{'form.upfiletype'}); |
|
if ($env{'form.upfiletype'} eq 'semisv') { |
|
&Apache::lonnet::logthis("splitting on ; "); |
|
@allfields=split(/;/,$record); |
|
} else { |
|
&Apache::lonnet::logthis("splitting on , "); |
|
@allfields=split(/\,/,$record); |
|
} |
my $i=0; |
my $i=0; |
my $j; |
my $j; |
for ($j=0;$j<=$#allfields;$j++) { |
for ($j=0;$j<=$#allfields;$j++) { |
Line 4938 the file type.
|
Line 5182 the file type.
|
sub upfile_select_html { |
sub upfile_select_html { |
my %Types = ( |
my %Types = ( |
csv => &mt('CSV (comma separated values, spreadsheet)'), |
csv => &mt('CSV (comma separated values, spreadsheet)'), |
|
semisv => &mt('Semicolon separated values'), |
space => &mt('Space separated'), |
space => &mt('Space separated'), |
tab => &mt('Tabulator separated'), |
tab => &mt('Tabulator separated'), |
# xml => &mt('HTML/XML'), |
# xml => &mt('HTML/XML'), |
Line 5777 sub construct_course {
|
Line 6022 sub construct_course {
|
# |
# |
# Check if created correctly |
# Check if created correctly |
# |
# |
($$crsudom,$$crsunum)=($$courseid=~/^\/(\w+)\/(\w+)$/); |
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid); |
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom); |
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom); |
$outcome .= &mt('Created on').': '.$crsuhome.'<br>'; |
$outcome .= &mt('Created on').': '.$crsuhome.'<br>'; |
# |
# |
Line 5786 sub construct_course {
|
Line 6031 sub construct_course {
|
my $cloneid=''; |
my $cloneid=''; |
if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) { |
if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) { |
$cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'}; |
$cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'}; |
my ($clonecrsudom,$clonecrsunum)=($cloneid=~/^\/(\w+)\/(\w+)$/); |
my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid); |
my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); |
my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); |
if ($clonehome eq 'no_host') { |
if ($clonehome eq 'no_host') { |
$outcome .= |
$outcome .= |