--- loncom/interface/loncommon.pm 2007/01/15 20:48:34 1.501
+++ loncom/interface/loncommon.pm 2007/08/02 01:07:00 1.558
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.501 2007/01/15 20:48:34 banghart Exp $
+# $Id: loncommon.pm,v 1.558 2007/08/02 01:07:00 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -68,8 +68,12 @@ use Apache::lontexconvert();
use Apache::lonclonecourse();
use LONCAPA qw(:DEFAULT :match);
+# ---------------------------------------------- Designs
+use vars qw(%defaultdesign);
+
my $readit;
+
##
## Global Variables
##
@@ -82,10 +86,6 @@ my %scprtag;
my %fe; my %fd; my %fm;
my %category_extensions;
-# ---------------------------------------------- Designs
-
-my %designhash;
-
# ---------------------------------------------- Thesaurus variables
#
# %Keywords:
@@ -151,30 +151,18 @@ BEGIN {
}
}
-# -------------------------------------------------------------- domain designs
-
- my $filename;
+# -------------------------------------------------------------- default domain designs
my $designdir=$Apache::lonnet::perlvar{'lonTabDir'}.'/lonDomColors';
- opendir(DIR,$designdir);
- while ($filename=readdir(DIR)) {
- if ($filename!~/\.tab$/) { next; }
- my ($domain)=($filename=~/^($match_domain)\./);
- {
- my $designfile = $designdir.'/'.$filename;
- if ( open (my $fh,"<$designfile") ) {
- while (my $line = <$fh>) {
- next if ($line =~ /^\#/);
- chomp($line);
- my ($key,$val)=(split(/\=/,$line));
- if ($val) { $designhash{$domain.'.'.$key}=$val; }
- }
- close($fh);
- }
- }
-
+ my $designfile = $designdir.'/default.tab';
+ if ( open (my $fh,"<$designfile") ) {
+ while (my $line = <$fh>) {
+ next if ($line =~ /^\#/);
+ chomp($line);
+ my ($key,$val)=(split(/\=/,$line));
+ if ($val) { $defaultdesign{$key}=$val; }
+ }
+ close($fh);
}
- closedir(DIR);
-
# ------------------------------------------------------------- file categories
{
@@ -346,10 +334,12 @@ sub studentbrowser_javascript {
return (<<'ENDSTDBRW');
+
+$new_user_create
+
+
+
+END_BLOCK
+
+ return $output;
+}
+
+
+
=pod
+=back
+
+=head1 HTTP Helpers
+
+=over 4
+
=item * get_unprocessed_cgi($query,$possible_names)
Modify the %env hash to contain unprocessed CGI form parameters held in
@@ -5388,9 +5998,9 @@ sub record_sep {
} else {
my @allfields;
if ($env{'form.upfiletype'} eq 'semisv') {
- @allfields=split(/;/,$record);
+ @allfields=split(/;/,$record,-1);
} else {
- @allfields=split(/\,/,$record);
+ @allfields=split(/\,/,$record,-1);
}
my $i=0;
my $j;
@@ -6174,35 +6784,53 @@ sub commit_customrole {
}
sub commit_standardrole {
- my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;
- my $output;
- my $logmsg;
+ my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_;
+ my ($output,$logmsg,$linefeed);
+ if ($context eq 'auto') {
+ $linefeed = "\n";
+ } else {
+ $linefeed = "
\n";
+ }
if ($three eq 'st') {
- my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec);
- if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) {
+ my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end,
+ $one,$two,$sec,$context);
+ if (($result =~ /^error/) || ($result eq 'not_in_class') ||
+ ($result eq 'unknown_course')) {
$output = "Error: $result\n";
} else {
- $output = &mt('Assigning').' '.$three.' in '.$url.
+ $output = $logmsg.$linefeed.&mt('Assigning').' '.$three.' in '.$url.
($start?', '.&mt('starting').' '.localtime($start):'').
- ($end?', '.&mt('ending').' '.localtime($end):'').
- ': '.$result.'
'.
- &mt('Add to classlist').': ok
';
+ ($end?', '.&mt('ending').' '.localtime($end):'').': ';
+ if ($context eq 'auto') {
+ $output .= $result.$linefeed.&mt('Add to classlist').': ok';
+ } else {
+ $output .= ''.$result.''.$linefeed.
+ &mt('Add to classlist').': ok';
+ }
+ $output .= $linefeed;
}
} else {
$output = &mt('Assigning').' '.$three.' in '.$url.
($start?', '.&mt('starting').' '.localtime($start):'').
- ($end?', '.&mt('ending').' '.localtime($end):'').': '.
- &Apache::lonnet::assignrole(
- $udom,$uname,$url,$three,$end,$start).
- '
';
+ ($end?', '.&mt('ending').' '.localtime($end):'').': ';
+ my $result = &Apache::lonnet::assignrole($udom,$uname,$url,$three,$end,$start);
+ if ($context eq 'auto') {
+ $output .= $result.$linefeed;
+ } else {
+ $output .= ''.$result.''.$linefeed;
+ }
}
return $output;
}
sub commit_studentrole {
- my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;
- my $linefeed = '
'."\n";
- my $result;
+ my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_;
+ my ($result,$linefeed);
+ if ($context eq 'auto') {
+ $linefeed = "\n";
+ } else {
+ $linefeed = '
'."\n";
+ }
if (defined($one) && defined($two)) {
my $cid=$one.'_'.$two;
my $oldsec=&Apache::lonnet::getsection($udom,$uname,$cid);
@@ -6249,9 +6877,12 @@ sub commit_studentrole {
############################################################
sub construct_course {
- my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname) = @_;
+ my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_;
my $outcome;
-
+ my $linefeed = '
'."\n";
+ if ($context eq 'auto') {
+ $linefeed = "\n";
+ }
#
# Open course
#
@@ -6271,27 +6902,65 @@ sub construct_course {
# Utils::Course. This needs to at least be output as a comment
# if anyone ever decides to not show this, and Utils::Course::new
# will need to be suitably modified.
- $outcome .= &mt('New LON-CAPA [_1] ID: [_2]
',$crstype,$$courseid);
+ $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
+
#
# Check if created correctly
#
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
- $outcome .= &mt('Created on').': '.$crsuhome.'
';
+ $outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
#
# Are we cloning?
#
my $cloneid='';
if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) {
+ my $can_clone = 0;
$cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'};
my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid);
my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
+ my $clonemsg;
if ($clonehome eq 'no_host') {
- $outcome .=
- '
'.&mt('Attempting to clone non-existing [_1]',$crstype).' '.$cloneid.'';
+ $clonemsg = &mt('Attempting to clone non-existing [_1]',$crstype);
+ if ($context eq 'auto') {
+ $outcome .= $clonemsg;
+ } else {
+ $outcome .= ''.$clonemsg.'';
+ }
+ $outcome .= $linefeed;
} else {
- $outcome .=
- '
'.&mt('Cloning [_1] from [_2]',$crstype,$clonehome).'';
+ my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
+ if ($env{'request.role.domain'} eq $args->{'form.clonedomain'}) {
+ $can_clone = 1;
+ } else {
+ my %clonehash = &Apache::lonnet::get('environment',['cloners'],
+ $args->{'clonedomain'},$args->{'clonecourse'});
+ my @cloners = split(/,/,$clonehash{'cloners'});
+ my %roleshash =
+ &Apache::lonnet::get_my_roles($args->{'ccuname'},
+ $args->{'ccdomain'},'userroles',['active'],['cc'],
+ [$args->{'clonedomain'}]);
+ if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
+ $can_clone = 1;
+ } else {
+ $clonemsg = &mt('The new course was not cloned from an existing course because the course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+ if ($context eq 'auto') {
+ $outcome .= $clonemsg;
+ } else {
+ $outcome .= ''.$clonemsg.'';
+ }
+ $outcome .= $linefeed;
+ }
+ }
+ }
+ if ($can_clone) {
+ $clonemsg = &mt('Cloning [_1] from [_2]',$crstype,$clonehome);
+ if ($context eq 'auto') {
+ $outcome = $clonemsg;
+ } else {
+ $outcome .= ''.$clonemsg.'';
+ }
+ $outcome .= $linefeed;
my %oldcenv=&Apache::lonnet::dump('environment',$$crsudom,$$crsunum);
# Copy all files
&Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid);
@@ -6412,11 +7081,24 @@ sub construct_course {
'dnhr' => 'does not have rights to access enrollment in these classes',
'adby' => 'as determined by the policies of your institution on access to official classlists'
);
- $outcome .= ''.$lt{'tclb'}.' ('.$cenv{'internal.courseowner'}.') - '.$lt{'dnhr'}.' ('.$lt{'adby'}.').
'."\n";
- foreach (@badclasses) {
- $outcome .= "- $_
\n";
- }
- $outcome .= "
\n";
+ my $badclass_msg = $cenv{'internal.courseowner'}.') - '.$lt{'dnhr'}.
+ ' ('.$lt{'adby'}.')';
+ if ($context eq 'auto') {
+ $outcome .= $badclass_msg.$linefeed;
+ $outcome .= ''.$badclass_msg.$linefeed.''."\n";
+ foreach my $item (@badclasses) {
+ if ($context eq 'auto') {
+ $outcome .= " - $item\n";
+ } else {
+ $outcome .= "- $item
\n";
+ }
+ }
+ if ($context eq 'auto') {
+ $outcome .= $linefeed;
+ } else {
+ $outcome .= "
\n";
+ }
+ }
}
if ($args->{'no_end_date'}) {
$args->{'endaccess'} = 0;
@@ -6432,8 +7114,13 @@ sub construct_course {
$cenv{'internal.autharg'} = $args->{'autharg'};
if ( ($cenv{'internal.authtype'} =~ /^krb/) && ($cenv{'internal.autoadds'} == 1)) {
if (! defined($cenv{'internal.autharg'}) || $cenv{'internal.autharg'} eq '') {
- $outcome .= ''.
- &mt('As you did not include the default Kerberos domain to be used for authentication in this class, the institutional data used by the automated enrollment process must include the Kerberos domain for each new student').'';
+ my $krb_msg = &mt('As you did not include the default Kerberos domain to be used for authentication in this class, the institutional data used by the automated enrollment process must include the Kerberos domain for each new student');
+ if ($context eq 'auto') {
+ $outcome .= $krb_msg;
+ } else {
+ $outcome .= ''.$krb_msg.'';
+ }
+ $outcome .= $linefeed;
}
}
if (($args->{'ccdomain'}) && ($args->{'ccuname'})) {
@@ -6489,8 +7176,8 @@ sub construct_course {
# By default, use standard grading
if (!defined($cenv{'grading'})) { $cenv{'grading'} = 'standard'; }
- $outcome .= ('
'.&mt('Setting environment').': '.
- &Apache::lonnet::put('environment',\%cenv,$$crsudom,$$crsunum).'
');
+ $outcome .= $linefeed.&mt('Setting environment').': '.
+ &Apache::lonnet::put('environment',\%cenv,$$crsudom,$$crsunum).$linefeed;
#
# Open all assignments
#
@@ -6500,7 +7187,7 @@ sub construct_course {
$storeunder.'.type' => 'date_start');
$outcome .= &mt('Opening all assignments').': '.&Apache::lonnet::cput
- ('resourcedata',\%storecontent,$$crsudom,$$crsunum).'
';
+ ('resourcedata',\%storecontent,$$crsudom,$$crsunum).$linefeed;
}
#
# Set first page
@@ -6527,7 +7214,7 @@ sub construct_course {
(my $outtext,$errtext) = &LONCAPA::map::storemap($map,1);
if ($errtext) { $fatal=2; }
- $outcome .= ($fatal?$errtext:'write ok').'
';
+ $outcome .= ($fatal?$errtext:'write ok').$linefeed;
}
return $outcome;
}
@@ -6558,7 +7245,7 @@ sub group_term {
sub icon {
my ($file)=@_;
- my $curfext = (split(/\./,$file))[-1];
+ my $curfext = lc((split(/\./,$file))[-1]);
my $iconname=$Apache::lonnet::perlvar{'lonIconsURL'}.'/unknown.gif';
my $embstyle = &Apache::loncommon::fileembstyle($curfext);
if (!(!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn')) {