--- loncom/interface/loncommon.pm 2010/11/09 00:08:06 1.925.2.17
+++ loncom/interface/loncommon.pm 2010/05/18 00:44:12 1.948.2.2
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.925.2.17 2010/11/09 00:08:06 raeburn Exp $
+# $Id: loncommon.pm,v 1.948.2.2 2010/05/18 00:44:12 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -483,9 +483,9 @@ ENDAUTHORBRW
sub coursebrowser_javascript {
my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_;
- my $wintitle = &mt('Course Browser');
- if ($crstype ne '') {
- $wintitle = &mt($crstype);
+ my $wintitle = 'Course_Browser';
+ if ($crstype eq 'Community') {
+ $wintitle = 'Community_Browser';
}
my $id_functions = &javascript_index_functions();
my $output = '
@@ -1127,7 +1127,7 @@ sub help_open_topic {
$template.=' '
.'';
if ($text ne "") {
$template.='';
@@ -1719,10 +1719,13 @@ sub create_workbook {
my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
if (! defined($workbook)) {
$r->log_error("Error creating excel spreadsheet $filename: $!");
- $r->print('
'.&mt("Unable to create new Excel file. ".
- "This error has been logged. ".
- "Please alert your LON-CAPA administrator").
- '
');
+ $r->print(
+ '
'
+ .&mt('Problems occurred in creating the new Excel file.')
+ .' '.&mt('This error has been logged.')
+ .' '.&mt('Please alert your LON-CAPA administrator.')
+ .'
'
+ );
return (undef);
}
#
@@ -1762,9 +1765,13 @@ sub create_text_file {
$fh = Apache::File->new('>/home/httpd'.$filename);
if (! defined($fh)) {
$r->log_error("Couldn't open $filename for output $!");
- $r->print(&mt('Problems occurred in creating the output file. '
- .'This error has been logged. '
- .'Please alert your LON-CAPA administrator.'));
+ $r->print(
+ '
'
+ .&mt('Problems occurred in creating the output file.')
+ .' '.&mt('This error has been logged.')
+ .' '.&mt('Please alert your LON-CAPA administrator.')
+ .'
'
+ );
}
return ($fh,$filename)
}
@@ -1978,16 +1985,7 @@ sub select_dom_form {
($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;
if ($showdomdesc) {
if ($dom ne '') {
- my $domdesc;
- if ($name eq 'srchdomain') {
- if ($dom eq 'gci') {
- $domdesc = 'Faculty';
- } else {
- $domdesc = 'Students';
- }
- } else {
- $domdesc = &Apache::lonnet::domain($dom,'description');
- }
+ my $domdesc = &Apache::lonnet::domain($dom,'description');
if ($domdesc ne '') {
$selectdomain .= ' ('.$domdesc.')';
}
@@ -2478,11 +2476,9 @@ sub authform_internal{
}
$autharg = '';
- my $authtext = '[_1] Internally authenticated (with initial password [_2])';
- if ($in{'caller'} eq 'requestcrs') {
- $authtext = "[_1] Students' password, if none in the uploaded file: [_2]";
- }
- $result = &mt($authtext,''.$autharg);
+ $result = &mt
+ ('[_1] Internally authenticated (with initial password [_2])',
+ ''.$autharg);
$result.="';
return $result;
}
@@ -3416,12 +3412,22 @@ sub get_previous_attempt {
}
$prevattempts=&start_data_table().&start_data_table_header_row();
$prevattempts.='
'.&mt('History').'
';
+ my %typeparts;
+ my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'});
foreach my $key (sort(keys(%lasthash))) {
my ($ign,@parts) = split(/\./,$key);
if ($#parts > 0) {
my $data=$parts[-1];
pop(@parts);
- $prevattempts.='
'
.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")
- .' '
- .&mt('Enter a valid e-mail address as the username for the new user.').' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.'
- ,'','')
+ .' '
+ .&mt('Please contact the [_1]helpdesk[_2] for assistance.'
+ ,'','')
.'
';
}
}
@@ -10285,8 +10188,10 @@ sub check_clone {
'userroles',['active'],[$ccrole],
[$args->{'clonedomain'}]);
if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
- $can_clone = 1;
- } else {
+ $can_clone = 1;
+ } elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},$args->{'ccuname'},$args->{'ccdomain'})) {
+ $can_clone = 1;
+ } else {
if ($args->{'crstype'} eq 'Community') {
$clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
} else {
@@ -10346,11 +10251,19 @@ sub construct_course {
# 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).$linefeed;
+ if ($$courseid =~ /^error:/) {
+ return (0,$outcome);
+ }
+
#
# Check if created correctly
#
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
+ if ($crsuhome eq 'no_host') {
+ $outcome .= &mt('Course creation failed, unrecognized course home server.').$linefeed;
+ return (0,$outcome);
+ }
$outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
#
@@ -10369,6 +10282,10 @@ sub construct_course {
$cenv{'url'}=$oldcenv{'url'};
# Restore title
$cenv{'description'}=$oldcenv{'description'};
+# Restore creation date, creator and creation context.
+ $cenv{'internal.created'}=$oldcenv{'internal.created'};
+ $cenv{'internal.creator'}=$oldcenv{'internal.creator'};
+ $cenv{'internal.creationcontext'}=$oldcenv{'internal.creationcontext'};
# Mark as cloned
$cenv{'clonedfrom'}=$cloneid;
# Need to clone grading mode
@@ -10626,21 +10543,6 @@ sub construct_course {
$outcome .= ($fatal?$errtext:'write ok').$linefeed;
}
- if ($args->{'cloneroster'}) {
- my ($numadded,$clisterror) = &Apache::lonclonecourse::copyroster($cloneid,$$courseid,$args->{'startaccess'},$args->{'endaccess'});
- if ($clisterror) {
- $outcome .= "\0".&mt('An error occurred when copying the student roster from the old course to the new course; the error was: [_1].',$clisterror).$linefeed;
- if ($numadded) {
- $outcome .= &mt('Although [quant,_1,student] have received roles in the new course the roster does not report this. It is ').$linefeed;
- }
- } else {
- if ($numadded) {
- $outcome .= "\0".&mt('[quant,_1,student] copied from roster for old course to roster for new course.',$numadded).$linefeed;
- } else {
- $outcome .= "\0".&mt('No students have been enrolled in the new Concept Test.').' '.&mt('This is because either (a) an error occurred, or (b) there were no students with either current access or access which ended on/after the current default end date set for access to the old course.').$linefeed;
- }
- }
- }
return (1,$outcome);
}
@@ -10907,60 +10809,6 @@ sub _add_to_env {
}
}
-sub new_roles_update {
- my $rolecount = 0;
- foreach my $envkey (keys(%env)) {
- next unless ($envkey =~ /^user\.role\./);
- $rolecount ++;
- }
- my $newrolecount = 0;
- if (!$rolecount) {
- my %userenv;
- foreach my $crstype ('official','unofficial','community') {
- $userenv{'canrequest.'.$crstype} =
- &Apache::lonnet::usertools_access($env{'user.name'},
- $env{'user.domain'},$crstype,'reload','requestcourses');
- }
- my $then=$env{'user.login.time'};
- my $refresh=time;
- my (%userroles,%allroles,%allgroups,@newroles);
- my %roleshash =
- &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',['active','future','previous'],undef,undef,1);
- foreach my $item (keys(%roleshash)) {
- my ($uname,$udom,$role,$section) = split(':',$item);
- my $where = '/'.$udom.'/'.$uname;
- my ($tstart,$tend) = split(':',$roleshash{$item});
- if ($section ne '') {
- $where .= '/'.$section;
- }
- my $spec = $role.'.'.$where;
- &Apache::lonnet::set_arearole($role,$where,$tstart,$tend,
- $env{'user.domain'},$env{'user.name'});
- $userroles{'user.role.'.$spec} = $tstart.'.'.$tend;
- $newrolecount ++;
- unless (grep(/^\Q$role\E$/,@newroles)) {
- push(@newroles,$role);
- }
- my $status =
- &Apache::lonnet::curr_role_status($tstart,$tend,$refresh,$then);
- if ($status eq 'active') {
- &Apache::lonnet::gather_roleprivs(\%allroles,\%allgroups,\%userroles,
- $where,$role,$tstart,$tend);
- }
- }
- if (@newroles) {
- my ($author,$adv) = &Apache::lonnet::set_userprivs(\%userroles,\%allroles,
- \%allgroups);
- &Apache::lonnet::appenv(\%userroles,[@newroles,'cm']);
- $userenv{'user.adv'} = $adv;
- $userenv{'user.author'} = $author;
- $userenv{'user.refresh.time'} = $refresh;
- }
- &Apache::lonnet::appenv(\%userenv);
- }
- return $newrolecount;
-}
-
# --- Get the symbolic name of a problem and the url
sub get_symb {
my ($request,$silent) = @_;
@@ -11002,151 +10850,6 @@ sub clean_symb {
return ($symb,$enc);
}
-sub needs_gci_custom {
- my $custommenu;
- my $numdc = &check_for_gci_dc();
- unless ($numdc) {
- my $then=$env{'user.login.time'};
- my $now = time;
- my %cnums = (
- review => '9615072b469884921gcil1',
- submit => '1H96711d710194bfegcil1',
- );
- if ($env{'user.role.st./gci/'.$cnums{'review'}}) {
- my ($start,$end) =
- split('.',$env{'user.role.st./gci/'.$cnums{'review'}});
- if (((!$start) || ($start && $start <= $now)) &&
- ((!$end) || ($end > $now))) {
- $custommenu = 1;
- if ($env{'user.role.cc./gci/'.$cnums{'review'}}) {
- my ($ccstart,$ccend) =
- split('.',$env{'user.role.cc./gci/'.$cnums{'review'}});
- if (((!$start) || ($start && $start <= $now)) &&
- ((!$end) || ($end > $now))) {
- $custommenu = '';
- }
- }
- }
- }
- }
- return $custommenu;
-}
-
-sub check_for_gci_dc {
- my $then=$env{'user.login.time'};
- my $numdc = 0;
- foreach my $dom ('gci','gcitest') {
- if ($env{'user.role.dc./'.$dom.'/'}) {
- my $livedc = 1;
- my ($tstart,$tend)=split(/\./,$env{'user.role.dc./'.$dom.'/'});
- if ($tstart && $tstart>$then) { $livedc = 0; }
- if ($tend && $tend <$then) { $livedc = 0; }
- if ($livedc) {
- $numdc++;
- }
- }
- }
- return $numdc;
-}
-
-sub existing_gcitest_courses {
- my ($role) = @_;
- my %courses;
- my $cdom = 'gcitest';
- my $now = time;
- foreach my $envkey (keys(%env)) {
- my $cnum;
- if ($envkey =~ m{^user\.role\.\Q$role\E\./\Q$cdom\E/($match_courseid)$}) {
- $cnum = $1;
- } else {
- next;
- }
- my ($tstart,$tend) = split(/\./,$env{$envkey});
- if (((!$tstart) || ($tstart < $now)) && ((!$tend) || ($tend > $now))) {
- my $descr = $env{'course.'.$cdom.'_'.$cnum.'.description'};
- if ($descr ne '') {
- $courses{$cdom.'_'.$cnum}{'description'} = $descr;
- }
- }
- }
- return %courses;
-}
-
-sub gcitest_switcher {
- my ($role,$formname,%courses) = @_;
- my $output;
- my %Sortby;
- foreach my $course (sort(keys(%courses))) {
- next unless (ref($courses{$course}) eq 'HASH');
- my $clean_title = $courses{$course}{'description'};
- $clean_title =~ s/\W+//g;
- if ($clean_title eq '') {
- $clean_title = $courses{$course}{'description'};
- }
- push(@{$Sortby{$clean_title}},$course);
- }
- my @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby));
- my $default;
- if (@sorted_courses > 1) {
- if (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) {
- $default = &mt('Switch concept test ...');
- } else {
- $default = &mt('Select a concept test ...');
- }
- } else {
- unless (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) {
- $default = &mt('Select concept test ...');
- }
- }
- if ($default) {
- $output = '';
- }
- return $output;
-}
-
-sub gcitest_switcher_js {
- my ($current,$numcourses,$formname) = @_;
- my $output = <<"ENDJS";
-
-function courseswitcher(caller) {
- var numcourses = $numcourses;
- var current = '$current';
- var choice = document.$formname.newrole.options[document.$formname.newrole.selectedIndex].value;
- if (choice == '') {
- if (caller == 'icon') {
- alert('No Concept Test selected');
- }
- document.$formname.selectrole.value = '';
- return;
- }
- if (choice == current) {
- if ((caller != 'icon') && (numcourses > 1)) {
- alert('You have selected the current course.\\nPlease select a different Concept Test course');
- }
- document.$formname.newrole.selectedIndex = 0;
- document.$formname.selectrole.value = '';
- return;
- }
- document.$formname.selectrole.value = '1';
- document.$formname.submit();
- return;
-}
-
-ENDJS
- return $output;
-}
-
-
-
=pod
=back