-
-ENDPROGBAR
- }
- &r_print($r,$content.&LCprogressbar_script($LCcurrentid,$number_to_do));
+ &r_print($r,$content.&LCprogressbar_script($LCcurrentid));
}
sub LCprogressbarUpdate {
- my ($r,$val,$text,$number_to_do)=@_;
- if ($number_to_do) {
- unless ($val) {
- if ($LClastpercent) {
- $val=$LClastpercent;
- } else {
- $val=0;
- }
- }
- if ($val<0) { $val=0; }
- if ($val>100) { $val=0; }
- $LClastpercent=$val;
- unless ($text) { $text=$val.'%'; }
- } else {
- $val = 'false';
+ my ($r,$val,$text)=@_;
+ unless ($val) {
+ if ($LClastpercent) {
+ $val=$LClastpercent;
+ } else {
+ $val=0;
+ }
}
+ if ($val<0) { $val=0; }
+ if ($val>100) { $val=0; }
+ $LClastpercent=$val;
+ unless ($text) { $text=$val.'%'; }
$text=&js_ready($text);
&r_print($r,<
//
ENDUPDATE
@@ -10162,21 +8090,14 @@ function expand_div(caller) {
sub simple_error_page {
my ($r,$title,$msg,$args) = @_;
- my %displayargs;
if (ref($args) eq 'HASH') {
if (!$args->{'no_auto_mt_msg'}) { $msg = &mt($msg); }
- if ($args->{'only_body'}) {
- $displayargs{'only_body'} = 1;
- }
- if ($args->{'no_nav_bar'}) {
- $displayargs{'no_nav_bar'} = 1;
- }
} else {
$msg = &mt($msg);
}
my $page =
- &Apache::loncommon::start_page($title,'',\%displayargs).
+ &Apache::loncommon::start_page($title).
'
'.$msg.'
'.
&Apache::loncommon::end_page();
if (ref($r)) {
@@ -10393,7 +8314,7 @@ role status: active, previous or future.
sub check_user_status {
my ($udom,$uname,$cdom,$crs,$role,$sec) = @_;
my %userinfo = &Apache::lonnet::dump('roles',$udom,$uname);
- my @uroles = keys(%userinfo);
+ my @uroles = keys %userinfo;
my $srchstr;
my $active_chk = 'none';
my $now = time;
@@ -10482,7 +8403,7 @@ sub get_sections {
}
}
- if ($check_students) {
+ if ($check_students) {
my ($classlist) = &Apache::loncoursedata::get_classlist($cdom,$cnum);
my $sec_index = &Apache::loncoursedata::CL_SECTION();
my $status_index = &Apache::loncoursedata::CL_STATUS();
@@ -10878,8 +8799,8 @@ sub get_user_quota {
if ($quota eq '' || wantarray) {
if ($quotaname eq 'course') {
my %domdefs = &Apache::lonnet::get_domain_defaults($udom);
- if (($crstype eq 'official') || ($crstype eq 'unofficial') ||
- ($crstype eq 'community') || ($crstype eq 'textbook')) {
+ if (($crstype eq 'official') || ($crstype eq 'unofficial') ||
+ ($crstype eq 'community') || ($crstype eq 'textbook')) {
$defquota = $domdefs{$crstype.'quota'};
}
if ($defquota eq '') {
@@ -11063,6 +8984,8 @@ sub excess_filesize_warning {
###############################################
+
+
sub get_secgrprole_info {
my ($cdom,$cnum,$needroles,$type) = @_;
my %sections_count = &get_sections($cdom,$cnum);
@@ -11101,24 +9024,8 @@ sub get_secgrprole_info {
}
sub user_picker {
- my ($dom,$srch,$forcenewuser,$caller,$cancreate,$usertype,$context,$fixeddom,$noinstd) = @_;
+ my ($dom,$srch,$forcenewuser,$caller,$cancreate,$usertype,$context) = @_;
my $currdom = $dom;
- my @alldoms = &Apache::lonnet::all_domains();
- if (@alldoms == 1) {
- my %domsrch = &Apache::lonnet::get_dom('configuration',
- ['directorysrch'],$alldoms[0]);
- my $domdesc = &Apache::lonnet::domain($alldoms[0],'description');
- my $showdom = $domdesc;
- if ($showdom eq '') {
- $showdom = $dom;
- }
- if (ref($domsrch{'directorysrch'}) eq 'HASH') {
- if ((!$domsrch{'directorysrch'}{'available'}) &&
- ($domsrch{'directorysrch'}{'lcavailable'} eq '0')) {
- return (&mt('LON-CAPA directory search is not available in domain: [_1]',$showdom),0);
- }
- }
- }
my %curr_selected = (
srchin => 'dom',
srchby => 'lastname',
@@ -11139,7 +9046,7 @@ sub user_picker {
}
$srchterm = $srch->{'srchterm'};
}
- my %html_lt=&Apache::lonlocal::texthash(
+ my %lt=&Apache::lonlocal::texthash(
'usr' => 'Search criteria',
'doma' => 'Domain/institution to search',
'uname' => 'username',
@@ -11152,8 +9059,6 @@ sub user_picker {
'exact' => 'is',
'contains' => 'contains',
'begins' => 'begins with',
- );
- my %js_lt=&Apache::lonlocal::texthash(
'youm' => "You must include some text to search for.",
'thte' => "The text you are searching for must contain at least two characters when using a 'begins' type search.",
'thet' => "The text you are searching for must contain at least three characters when using a 'contains' type search.",
@@ -11163,16 +9068,7 @@ sub user_picker {
'whse' => "When searching by last,first you must include at least one character in the first name.",
'thfo' => "The following need to be corrected before the search can be run:",
);
- &html_escape(\%html_lt);
- &js_escape(\%js_lt);
- my $domform;
- my $allow_blank = 1;
- if ($fixeddom) {
- $allow_blank = 0;
- $domform = &select_dom_form($currdom,'srchdomain',$allow_blank,1,undef,[$currdom]);
- } else {
- $domform = &select_dom_form($currdom,'srchdomain',$allow_blank,1);
- }
+ my $domform = &select_dom_form($currdom,'srchdomain',1,1);
my $srchinsel = ' \n";
@@ -11199,10 +9094,10 @@ sub user_picker {
foreach my $option ('lastname','lastfirst','uname') {
if ($curr_selected{'srchby'} eq $option) {
$srchbysel .= '
- ';
+ ';
} else {
$srchbysel .= '
- ';
+ ';
}
}
$srchbysel .= "\n \n";
@@ -11211,10 +9106,10 @@ sub user_picker {
foreach my $option ('begins','contains','exact') {
if ($curr_selected{'srchtype'} eq $option) {
$srchtypesel .= '
- ';
+ ';
} else {
$srchtypesel .= '
- ';
+ ';
}
}
$srchtypesel .= "\n \n";
@@ -11299,46 +9194,46 @@ function validateEntry(callingForm) {
if (srchterm == "") {
checkok = 0;
- msg += "$js_lt{'youm'}\\n";
+ msg += "$lt{'youm'}\\n";
}
if (srchtype== 'begins') {
if (srchterm.length < 2) {
checkok = 0;
- msg += "$js_lt{'thte'}\\n";
+ msg += "$lt{'thte'}\\n";
}
}
if (srchtype== 'contains') {
if (srchterm.length < 3) {
checkok = 0;
- msg += "$js_lt{'thet'}\\n";
+ msg += "$lt{'thet'}\\n";
}
}
if (srchin == 'instd') {
if (srchdomain == '') {
checkok = 0;
- msg += "$js_lt{'yomc'}\\n";
+ msg += "$lt{'yomc'}\\n";
}
}
if (srchin == 'dom') {
if (srchdomain == '') {
checkok = 0;
- msg += "$js_lt{'ymcd'}\\n";
+ msg += "$lt{'ymcd'}\\n";
}
}
if (srchby == 'lastfirst') {
if (srchterm.indexOf(",") == -1) {
checkok = 0;
- msg += "$js_lt{'whus'}\\n";
+ msg += "$lt{'whus'}\\n";
}
if (srchterm.indexOf(",") == srchterm.length -1) {
checkok = 0;
- msg += "$js_lt{'whse'}\\n";
+ msg += "$lt{'whse'}\\n";
}
}
if (checkok == 0) {
- alert("$js_lt{'thfo'}\\n"+msg);
+ alert("$lt{'thfo'}\\n"+msg);
return;
}
if (checkok == 1) {
@@ -11356,10 +9251,10 @@ $new_user_create
END_BLOCK
$output .= &Apache::lonhtmlcommon::start_pick_box().
- &Apache::lonhtmlcommon::row_title($html_lt{'doma'}).
+ &Apache::lonhtmlcommon::row_title($lt{'doma'}).
$domform.
&Apache::lonhtmlcommon::row_closure().
- &Apache::lonhtmlcommon::row_title($html_lt{'usr'}).
+ &Apache::lonhtmlcommon::row_title($lt{'usr'}).
$srchbysel.
$srchtypesel.
''.
@@ -11367,165 +9262,61 @@ END_BLOCK
&Apache::lonhtmlcommon::row_closure(1).
&Apache::lonhtmlcommon::end_pick_box().
' ';
- return ($output,1);
+ return $output;
}
sub user_rule_check {
my ($usershash,$checks,$alerts,$rulematch,$inst_results,$curr_rules,$got_rules) = @_;
- my ($response,%inst_response);
+ my $response;
if (ref($usershash) eq 'HASH') {
- if (keys(%{$usershash}) > 1) {
- my (%by_username,%by_id,%userdoms);
- my $checkid;
- if (ref($checks) eq 'HASH') {
- if ((!defined($checks->{'username'})) && (defined($checks->{'id'}))) {
- $checkid = 1;
- }
- }
- foreach my $user (keys(%{$usershash})) {
- my ($uname,$udom) = split(/:/,$user);
- if ($checkid) {
- if (ref($usershash->{$user}) eq 'HASH') {
- if ($usershash->{$user}->{'id'} ne '') {
- $by_id{$udom}{$usershash->{$user}->{'id'}} = $uname;
- $userdoms{$udom} = 1;
- if (ref($inst_results) eq 'HASH') {
- $inst_results->{$uname.':'.$udom} = {};
- }
- }
- }
- } else {
- $by_username{$udom}{$uname} = 1;
- $userdoms{$udom} = 1;
- if (ref($inst_results) eq 'HASH') {
- $inst_results->{$uname.':'.$udom} = {};
- }
- }
- }
- foreach my $udom (keys(%userdoms)) {
- if (!$got_rules->{$udom}) {
- my %domconfig = &Apache::lonnet::get_dom('configuration',
- ['usercreation'],$udom);
- if (ref($domconfig{'usercreation'}) eq 'HASH') {
- foreach my $item ('username','id') {
- if (ref($domconfig{'usercreation'}{$item.'_rule'}) eq 'ARRAY') {
- $$curr_rules{$udom}{$item} =
- $domconfig{'usercreation'}{$item.'_rule'};
- }
- }
- }
- $got_rules->{$udom} = 1;
- }
+ foreach my $user (keys(%{$usershash})) {
+ my ($uname,$udom) = split(/:/,$user);
+ next if ($udom eq '' || $uname eq '');
+ my ($id,$newuser);
+ if (ref($usershash->{$user}) eq 'HASH') {
+ $newuser = $usershash->{$user}->{'newuser'};
+ $id = $usershash->{$user}->{'id'};
}
- if ($checkid) {
- foreach my $udom (keys(%by_id)) {
- my ($outcome,$results) = &Apache::lonnet::get_multiple_instusers($udom,$by_id{$udom},'id');
- if ($outcome eq 'ok') {
- foreach my $id (keys(%{$by_id{$udom}})) {
- my $uname = $by_id{$udom}{$id};
- $inst_response{$uname.':'.$udom} = $outcome;
- }
- if (ref($results) eq 'HASH') {
- foreach my $uname (keys(%{$results})) {
- if (exists($inst_response{$uname.':'.$udom})) {
- $inst_response{$uname.':'.$udom} = $outcome;
- $inst_results->{$uname.':'.$udom} = $results->{$uname};
- }
- }
- }
- }
+ my $inst_response;
+ if (ref($checks) eq 'HASH') {
+ if (defined($checks->{'username'})) {
+ ($inst_response,%{$inst_results->{$user}}) =
+ &Apache::lonnet::get_instuser($udom,$uname);
+ } elsif (defined($checks->{'id'})) {
+ ($inst_response,%{$inst_results->{$user}}) =
+ &Apache::lonnet::get_instuser($udom,undef,$id);
}
} else {
- foreach my $udom (keys(%by_username)) {
- my ($outcome,$results) = &Apache::lonnet::get_multiple_instusers($udom,$by_username{$udom});
- if ($outcome eq 'ok') {
- foreach my $uname (keys(%{$by_username{$udom}})) {
- $inst_response{$uname.':'.$udom} = $outcome;
- }
- if (ref($results) eq 'HASH') {
- foreach my $uname (keys(%{$results})) {
- $inst_results->{$uname.':'.$udom} = $results->{$uname};
- }
- }
- }
- }
+ ($inst_response,%{$inst_results->{$user}}) =
+ &Apache::lonnet::get_instuser($udom,$uname);
+ return;
}
- } elsif (keys(%{$usershash}) == 1) {
- my $user = (keys(%{$usershash}))[0];
- my ($uname,$udom) = split(/:/,$user);
- if (($udom ne '') && ($uname ne '')) {
- if (ref($usershash->{$user}) eq 'HASH') {
- if (ref($checks) eq 'HASH') {
- if (defined($checks->{'username'})) {
- ($inst_response{$user},%{$inst_results->{$user}}) =
- &Apache::lonnet::get_instuser($udom,$uname);
- } elsif (defined($checks->{'id'})) {
- if ($usershash->{$user}->{'id'} ne '') {
- ($inst_response{$user},%{$inst_results->{$user}}) =
- &Apache::lonnet::get_instuser($udom,undef,
- $usershash->{$user}->{'id'});
- } else {
- ($inst_response{$user},%{$inst_results->{$user}}) =
- &Apache::lonnet::get_instuser($udom,$uname);
- }
- }
- } else {
- ($inst_response{$user},%{$inst_results->{$user}}) =
- &Apache::lonnet::get_instuser($udom,$uname);
- return;
- }
- if (!$got_rules->{$udom}) {
- my %domconfig = &Apache::lonnet::get_dom('configuration',
- ['usercreation'],$udom);
- if (ref($domconfig{'usercreation'}) eq 'HASH') {
- foreach my $item ('username','id') {
- if (ref($domconfig{'usercreation'}{$item.'_rule'}) eq 'ARRAY') {
- $$curr_rules{$udom}{$item} =
- $domconfig{'usercreation'}{$item.'_rule'};
- }
- }
+ if (!$got_rules->{$udom}) {
+ my %domconfig = &Apache::lonnet::get_dom('configuration',
+ ['usercreation'],$udom);
+ if (ref($domconfig{'usercreation'}) eq 'HASH') {
+ foreach my $item ('username','id') {
+ if (ref($domconfig{'usercreation'}{$item.'_rule'}) eq 'ARRAY') {
+ $$curr_rules{$udom}{$item} =
+ $domconfig{'usercreation'}{$item.'_rule'};
}
- $got_rules->{$udom} = 1;
}
}
- } else {
- return;
- }
- } else {
- return;
- }
- foreach my $user (keys(%{$usershash})) {
- my ($uname,$udom) = split(/:/,$user);
- next if (($udom eq '') || ($uname eq ''));
- my $id;
- if (ref($inst_results) eq 'HASH') {
- if (ref($inst_results->{$user}) eq 'HASH') {
- $id = $inst_results->{$user}->{'id'};
- }
- }
- if ($id eq '') {
- if (ref($usershash->{$user})) {
- $id = $usershash->{$user}->{'id'};
- }
+ $got_rules->{$udom} = 1;
}
foreach my $item (keys(%{$checks})) {
if (ref($$curr_rules{$udom}) eq 'HASH') {
if (ref($$curr_rules{$udom}{$item}) eq 'ARRAY') {
if (@{$$curr_rules{$udom}{$item}} > 0) {
- my %rule_check = &Apache::lonnet::inst_rulecheck($udom,$uname,$id,$item,
- $$curr_rules{$udom}{$item});
+ my %rule_check = &Apache::lonnet::inst_rulecheck($udom,$uname,$id,$item,$$curr_rules{$udom}{$item});
foreach my $rule (@{$$curr_rules{$udom}{$item}}) {
if ($rule_check{$rule}) {
$$rulematch{$user}{$item} = $rule;
- if ($inst_response{$user} eq 'ok') {
+ if ($inst_response eq 'ok') {
if (ref($inst_results) eq 'HASH') {
if (ref($inst_results->{$user}) eq 'HASH') {
if (keys(%{$inst_results->{$user}}) == 0) {
$$alerts{$item}{$udom}{$uname} = 1;
- } elsif ($item eq 'id') {
- if ($inst_results->{$user}->{'id'} eq '') {
- $$alerts{$item}{$udom}{$uname} = 1;
- }
}
}
}
@@ -11636,14 +9427,7 @@ sub personal_data_fieldtitles {
sub sorted_inst_types {
my ($dom) = @_;
- my ($usertypes,$order);
- my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
- if (ref($domdefaults{'inststatus'}) eq 'HASH') {
- $usertypes = $domdefaults{'inststatus'}{'inststatustypes'};
- $order = $domdefaults{'inststatus'}{'inststatusorder'};
- } else {
- ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
- }
+ my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
my $othertitle = &mt('All users');
if ($env{'request.course.id'}) {
$othertitle = &mt('Any users');
@@ -11664,15 +9448,11 @@ sub sorted_inst_types {
}
sub get_institutional_codes {
- my ($cdom,$crs,$settings,$allcourses,$LC_code) = @_;
+ my ($settings,$allcourses,$LC_code) = @_;
# Get complete list of course sections to update
my @currsections = ();
my @currxlists = ();
- my (%unclutteredsec,%unclutteredlcsec);
my $coursecode = $$settings{'internal.coursecode'};
- my $crskey = $crs.':'.$coursecode;
- @{$unclutteredsec{$crskey}} = ();
- @{$unclutteredlcsec{$crskey}} = ();
if ($$settings{'internal.sectionnums'} ne '') {
@currsections = split(/,/,$$settings{'internal.sectionnums'});
@@ -11683,37 +9463,24 @@ sub get_institutional_codes {
}
if (@currxlists > 0) {
- foreach my $xl (@currxlists) {
- if ($xl =~ /^([^:]+):(\w*)$/) {
+ foreach (@currxlists) {
+ if (m/^([^:]+):(\w*)$/) {
unless (grep/^$1$/,@{$allcourses}) {
- push(@{$allcourses},$1);
+ push @{$allcourses},$1;
$$LC_code{$1} = $2;
}
}
}
}
-
+
if (@currsections > 0) {
- foreach my $sec (@currsections) {
- if ($sec =~ m/^(\w+):(\w*)$/ ) {
- my $instsec = $1;
+ foreach (@currsections) {
+ if (m/^(\w+):(\w*)$/) {
+ my $sec = $coursecode.$1;
my $lc_sec = $2;
- unless (grep/^\Q$instsec\E$/,@{$unclutteredsec{$crskey}}) {
- push(@{$unclutteredsec{$crskey}},$instsec);
- push(@{$unclutteredlcsec{$crskey}},$lc_sec);
- }
- }
- }
- }
-
- if (@{$unclutteredsec{$crskey}} > 0) {
- my %formattedsec = &Apache::lonnet::auto_instsec_reformat($cdom,'clutter',\%unclutteredsec);
- if ((ref($formattedsec{$crskey}) eq 'ARRAY') && (ref($unclutteredlcsec{$crskey}) eq 'ARRAY')) {
- for (my $i=0; $i<@{$formattedsec{$crskey}}; $i++) {
- my $sec = $coursecode.$formattedsec{$crskey}[$i];
- unless (grep/^\Q$sec\E$/,@{$allcourses}) {
- push(@{$allcourses},$sec);
- $$LC_code{$sec} = $unclutteredlcsec{$crskey}[$i];
+ unless (grep/^$sec$/,@{$allcourses}) {
+ push @{$allcourses},$sec;
+ $$LC_code{$sec} = $lc_sec;
}
}
}
@@ -11810,9 +9577,7 @@ reservable_now - ref to hash of student_
Keys in inner hash are:
(a) symb: either blank or symb to which slot use is restricted.
- (b) endreserve: end date of reservation period.
- (c) uniqueperiod: start,end dates when slot is to be uniquely
- selected.
+ (b) endreserve: end date of reservation period.
sorted_future - ref to array of student_schedulable slots reservable in
the future, ordered by start date of reservation period.
@@ -11823,8 +9588,6 @@ future_reservable - ref to hash of stude
Keys in inner hash are:
(a) symb: either blank or symb to which slot use is restricted.
(b) startreserve: start date of reservation period.
- (c) uniqueperiod: start,end dates when slot is to be uniquely
- selected.
=back
@@ -11878,10 +9641,6 @@ sub get_future_slots {
my $startreserve = $slots{$slot}->{'startreserve'};
my $endreserve = $slots{$slot}->{'endreserve'};
my $symb = $slots{$slot}->{'symb'};
- my $uniqueperiod;
- if (ref($slots{$slot}->{'uniqueperiod'}) eq 'ARRAY') {
- $uniqueperiod = join(',',@{$slots{$slot}->{'uniqueperiod'}});
- }
if (($startreserve < $now) &&
(!$endreserve || $endreserve > $now)) {
my $lastres = $endreserve;
@@ -11890,15 +9649,13 @@ sub get_future_slots {
}
$reservable_now{$slot} = {
symb => $symb,
- endreserve => $lastres,
- uniqueperiod => $uniqueperiod,
+ endreserve => $lastres
};
} elsif (($startreserve > $now) &&
(!$endreserve || $endreserve > $startreserve)) {
$future_reservable{$slot} = {
symb => $symb,
- startreserve => $startreserve,
- uniqueperiod => $uniqueperiod,
+ startreserve => $startreserve
};
}
}
@@ -12079,7 +9836,7 @@ sub ask_for_embedded_content {
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
}
- if (($actionurl eq '/adm/portfolio') ||
+ if (($actionurl eq '/adm/portfolio') ||
($actionurl eq '/adm/coursegrp_portfolio')) {
my $current_path='/';
if ($env{'form.currentpath'}) {
@@ -12111,18 +9868,18 @@ sub ask_for_embedded_content {
$toplevel = $url;
if ($args->{'context'} eq 'paste') {
($cdom,$cnum) = ($url =~ m{^\Q/uploaded/\E($match_domain)/($match_courseid)/});
- ($path) =
+ ($path) =
($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
$fileloc = &Apache::lonnet::filelocation('',$toplevel);
$fileloc =~ s{^/}{};
}
}
- } elsif ($actionurl eq '/adm/dependencies') {
+ } elsif ($actionurl eq '/adm/dependencies') {
if ($env{'request.course.id'} ne '') {
if (ref($args) eq 'HASH') {
$url = $args->{'docs_url'};
$title = $args->{'docs_title'};
- $toplevel = $url;
+ $toplevel = $url;
unless ($toplevel =~ m{^/}) {
$toplevel = "/$url";
}
@@ -12133,15 +9890,7 @@ sub ask_for_embedded_content {
($path) =
($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
}
- if ($toplevel=~/^\/*(uploaded|editupload)/) {
- $fileloc = $toplevel;
- $fileloc=~ s/^\s*(\S+)\s*$/$1/;
- my ($udom,$uname,$fname) =
- ($fileloc=~ m{^/+(?:uploaded|editupload)/+($match_domain)/+($match_name)/+(.*)$});
- $fileloc = propath($udom,$uname).'/userfiles/'.$fname;
- } else {
- $fileloc = &Apache::lonnet::filelocation('',$toplevel);
- }
+ $fileloc = &Apache::lonnet::filelocation('',$toplevel);
$fileloc =~ s{^/}{};
($filename) = ($fileloc =~ m{.+/([^/]+)$});
$heading = &mt('Status of dependencies in [_1]',"$title ($filename)");
@@ -12201,8 +9950,8 @@ sub ask_for_embedded_content {
my $dirptr = 16384;
foreach my $path (keys(%subdependencies)) {
$currsubfile{$path} = {};
- if (($actionurl eq '/adm/portfolio') ||
- ($actionurl eq '/adm/coursegrp_portfolio')) {
+ if (($actionurl eq '/adm/portfolio') ||
+ ($actionurl eq '/adm/coursegrp_portfolio')) {
my ($sublistref,$listerror) =
&Apache::lonnet::dirlist($url.$path,$udom,$uname,$getpropath);
if (ref($sublistref) eq 'ARRAY') {
@@ -12344,7 +10093,7 @@ sub ask_for_embedded_content {
$counter = scalar(keys(%existing));
$numpathchg = scalar(keys(%pathchanges));
return ($output,$counter,$numpathchg,\%existing);
- } elsif (($actionurl eq "/public/$cdom/$cnum/syllabus") &&
+ } elsif (($actionurl eq "/public/$cdom/$cnum/syllabus") &&
(ref($args) eq 'HASH') && ($args->{'context'} eq 'rewrites')) {
$counter = scalar(keys(%existing));
$numpathchg = scalar(keys(%pathchanges));
@@ -12573,7 +10322,7 @@ sub ask_for_embedded_content {
Performs clean-up of directories, subdirectories and filename in an
embedded object, referenced in an HTML file which is being uploaded
-to a course or portfolio, where
+to a course or portfolio, where
"Upload embedded images/multimedia files if HTML file" checkbox was
checked.
@@ -12592,7 +10341,7 @@ sub clean_path {
@contents = ($embed_file);
}
my $lastidx = scalar(@contents)-1;
- for (my $i=0; $i<=$lastidx; $i++) {
+ for (my $i=0; $i<=$lastidx; $i++) {
$contents[$i]=~s{\\}{/}g;
$contents[$i]=~s/\s+/\_/g;
$contents[$i]=~s{[^/\w\.\-]}{}g;
@@ -12931,7 +10680,7 @@ sub modify_html_refs {
}
my (%allfiles,%codebase,$output,$content);
my @changes = &get_env_multiple('form.namechange');
- unless ((@changes > 0) || ($context eq 'syllabus')) {
+ unless ((@changes > 0) || ($context eq 'syllabus')) {
if (wantarray) {
return ('',0,0);
} else {
@@ -12963,7 +10712,7 @@ sub modify_html_refs {
return;
}
}
- if (open(my $fh,'<',$container)) {
+ if (open(my $fh,"<$container")) {
$content = join('', <$fh>);
close($fh);
} else {
@@ -13028,7 +10777,7 @@ sub modify_html_refs {
}
}
} else {
- if (open(my $fh,'>',$container)) {
+ if (open(my $fh,">$container")) {
print $fh $content;
close($fh);
$output = '
'.&mt('Updated [quant,_1,reference] in [_2].',
@@ -13066,7 +10815,7 @@ sub modify_html_refs {
}
}
if ($rewrites) {
- my $saveresult;
+ my $saveresult;
my $url = &Apache::lonnet::store_edited_file($container,$content,$udom,$uname,\$saveresult);
if ($url eq $container) {
my ($fname) = ($container =~ m{/([^/]+)$});
@@ -13187,7 +10936,7 @@ sub check_for_upload {
if (($current_disk_usage + $filesize) > $disk_quota){
my $msg = '
'.
&mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded.',''.$fname.'',$filesize).'
'.
- '
'.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] kilobytes.',$disk_quota,$current_disk_usage).'
';
+ ' '.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] kilobytes.',$disk_quota,$current_disk_usage);
return ('will_exceed_quota',$msg);
} elsif ($found_file) {
if ($locked_file) {
@@ -13297,7 +11046,7 @@ sub decompress_form {
"$topdir/media/player.swf",
"$topdir/media/swfobject.js",
"$topdir/media/expressInstall.swf");
- my @camtasia8_1 = ("$topdir/","$topdir/$topdir.html",
+ my @camtasia8 = ("$topdir/","$topdir/$topdir.html",
"$topdir/$topdir.mp4",
"$topdir/$topdir\_config.xml",
"$topdir/$topdir\_controller.swf",
@@ -13319,36 +11068,13 @@ sub decompress_form {
"$topdir/skins/express_show/",
"$topdir/skins/express_show/player-min.css",
"$topdir/skins/express_show/spritesheet.png");
- my @camtasia8_4 = ("$topdir/","$topdir/$topdir.html",
- "$topdir/$topdir.mp4",
- "$topdir/$topdir\_config.xml",
- "$topdir/$topdir\_controller.swf",
- "$topdir/$topdir\_embed.css",
- "$topdir/$topdir\_First_Frame.png",
- "$topdir/$topdir\_player.html",
- "$topdir/$topdir\_Thumbnails.png",
- "$topdir/playerProductInstall.swf",
- "$topdir/scripts/",
- "$topdir/scripts/config_xml.js",
- "$topdir/scripts/techsmith-smart-player.min.js",
- "$topdir/skins/",
- "$topdir/skins/configuration_express.xml",
- "$topdir/skins/express_show/",
- "$topdir/skins/express_show/spritesheet.min.css",
- "$topdir/skins/express_show/spritesheet.png",
- "$topdir/skins/express_show/techsmith-smart-player.min.css");
my @diffs = &compare_arrays(\@paths,\@camtasia6);
if (@diffs == 0) {
$is_camtasia = 6;
} else {
- @diffs = &compare_arrays(\@paths,\@camtasia8_1);
+ @diffs = &compare_arrays(\@paths,\@camtasia8);
if (@diffs == 0) {
$is_camtasia = 8;
- } else {
- @diffs = &compare_arrays(\@paths,\@camtasia8_4);
- if (@diffs == 0) {
- $is_camtasia = 8;
- }
}
}
}
@@ -13362,6 +11088,7 @@ function camtasiaToggle() {
for (var i=0; i'.&mt('Not extracted.').' '.
- &mt('Unexpected file path.').'
';
$itemcount ++;
@@ -16150,15 +13619,12 @@ path - Array containing all categories b
currcategories - reference to array of current categories assigned to the course
-disabled - scalar (optional) contains disabled="disabled" if input elements are
- to be readonly (e.g., Domain Helpdesk role viewing course settings).
-
Returns: $output (markup to be displayed).
=cut
sub assign_category_rows {
- my ($itemcount,$cats,$depth,$parent,$path,$currcategories,$disabled) = @_;
+ my ($itemcount,$cats,$depth,$parent,$path,$currcategories) = @_;
my ($text,$name,$item,$chgstr);
if (ref($cats) eq 'ARRAY') {
my $maxdepth = scalar(@{$cats});
@@ -16181,12 +13647,12 @@ sub assign_category_rows {
}
$text .= '
';
@@ -16285,7 +13751,7 @@ sub commit_studentrole {
}
$oldsecurl = $uurl;
$expire_role_result =
- &Apache::lonnet::assignrole($udom,$uname,$uurl,'st',$now,'','','',$context);
+ &Apache::lonnet::assignrole($udom,$uname,$uurl,'st',$now,'','',$context);
if ($env{'request.course.sec'} ne '') {
if ($expire_role_result eq 'refused') {
my @roles = ('st');
@@ -16334,7 +13800,7 @@ sub commit_studentrole {
}
}
} else {
- if ($secchange) {
+ if ($secchange) {
$$logmsg .= &mt('Error when attempting section change for [_1] from old section "[_2]" to new section: "[_3]" in course [_4] -error:',$uname,$oldsec,$sec,$cid).' '.$modify_section_result.$linefeed;
} else {
$$logmsg .= &mt('Error when attempting to modify role for [_1] for section: "[_2]" in course [_3] -error:',$uname,$sec,$cid).' '.$modify_section_result.$linefeed;
@@ -16397,8 +13863,7 @@ sub check_clone {
my $cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'};
my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid);
my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
- my $clonetitle;
- my @clonemsg;
+ my $clonemsg;
my $can_clone = 0;
my $lctype = lc($args->{'crstype'});
if ($lctype ne 'community') {
@@ -16406,154 +13871,59 @@ sub check_clone {
}
if ($clonehome eq 'no_host') {
if ($args->{'crstype'} eq 'Community') {
- push(@clonemsg,({
- mt => 'No new community created.',
- args => [],
- },
- {
- mt => 'A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',
- args => [$args->{'clonedomain'}.':'.$args->{'clonedomain'}],
- }));
+ $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
} else {
- push(@clonemsg,({
- mt => 'No new course created.',
- args => [],
- },
- {
- mt => 'A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',
- args => [$args->{'clonecourse'}.':'.$args->{'clonedomain'}],
- }));
- }
+ $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
+ }
} else {
my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
- $clonetitle = $clonedesc{'description'};
if ($args->{'crstype'} eq 'Community') {
if ($clonedesc{'type'} ne 'Community') {
- push(@clonemsg,({
- mt => 'No new community created.',
- args => [],
- },
- {
- mt => 'A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',
- args => [$args->{'clonecourse'}.':'.$args->{'clonedomain'}],
- }));
- return ($can_clone,\@clonemsg,$cloneid,$clonehome);
+ $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
+ return ($can_clone, $clonemsg, $cloneid, $clonehome);
}
}
- if (($env{'request.role.domain'} eq $args->{'clonedomain'}) &&
+ if (($env{'request.role.domain'} eq $args->{'clonedomain'}) &&
(&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {
$can_clone = 1;
} else {
- my %clonehash = &Apache::lonnet::get('environment',['cloners','internal.coursecode'],
+ my %clonehash = &Apache::lonnet::get('environment',['cloners'],
$args->{'clonedomain'},$args->{'clonecourse'});
- if ($clonehash{'cloners'} eq '') {
- my %domdefs = &Apache::lonnet::get_domain_defaults($args->{'course_domain'});
- if ($domdefs{'canclone'}) {
- unless ($domdefs{'canclone'} eq 'none') {
- if ($domdefs{'canclone'} eq 'domain') {
- if ($args->{'ccdomain'} eq $args->{'clonedomain'}) {
- $can_clone = 1;
- }
- } elsif (($clonehash{'internal.coursecode'}) && ($args->{'crscode'}) &&
- ($args->{'clonedomain'} eq $args->{'course_domain'})) {
- if (&Apache::lonnet::default_instcode_cloning($args->{'clonedomain'},$domdefs{'canclone'},
- $clonehash{'internal.coursecode'},$args->{'crscode'})) {
- $can_clone = 1;
- }
- }
- }
- }
+ my @cloners = split(/,/,$clonehash{'cloners'});
+ if (grep(/^\*$/,@cloners)) {
+ $can_clone = 1;
+ } elsif (grep(/^\*\:\Q$args->{'ccdomain'}\E$/,@cloners)) {
+ $can_clone = 1;
} else {
- my @cloners = split(/,/,$clonehash{'cloners'});
- if (grep(/^\*$/,@cloners)) {
- $can_clone = 1;
- } elsif (grep(/^\*\:\Q$args->{'ccdomain'}\E$/,@cloners)) {
- $can_clone = 1;
- } elsif (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners)) {
- $can_clone = 1;
- }
- unless ($can_clone) {
- if (($clonehash{'internal.coursecode'}) && ($args->{'crscode'}) &&
- ($args->{'clonedomain'} eq $args->{'course_domain'})) {
- my (%gotdomdefaults,%gotcodedefaults);
- foreach my $cloner (@cloners) {
- if (($cloner ne '*') && ($cloner !~ /^\*\:$match_domain$/) &&
- ($cloner !~ /^$match_username\:$match_domain$/) && ($cloner ne '')) {
- my (%codedefaults,@code_order);
- if (ref($gotcodedefaults{$args->{'clonedomain'}}) eq 'HASH') {
- if (ref($gotcodedefaults{$args->{'clonedomain'}}{'defaults'}) eq 'HASH') {
- %codedefaults = %{$gotcodedefaults{$args->{'clonedomain'}}{'defaults'}};
- }
- if (ref($gotcodedefaults{$args->{'clonedomain'}}{'order'}) eq 'ARRAY') {
- @code_order = @{$gotcodedefaults{$args->{'clonedomain'}}{'order'}};
- }
- } else {
- &Apache::lonnet::auto_instcode_defaults($args->{'clonedomain'},
- \%codedefaults,
- \@code_order);
- $gotcodedefaults{$args->{'clonedomain'}}{'defaults'} = \%codedefaults;
- $gotcodedefaults{$args->{'clonedomain'}}{'order'} = \@code_order;
- }
- if (@code_order > 0) {
- if (&Apache::lonnet::check_instcode_cloning(\%codedefaults,\@code_order,
- $cloner,$clonehash{'internal.coursecode'},
- $args->{'crscode'})) {
- $can_clone = 1;
- last;
- }
- }
- }
- }
- }
- }
- }
- unless ($can_clone) {
my $ccrole = 'cc';
if ($args->{'crstype'} eq 'Community') {
$ccrole = 'co';
}
- my %roleshash =
- &Apache::lonnet::get_my_roles($args->{'ccuname'},
- $args->{'ccdomain'},
- 'userroles',['active'],[$ccrole],
- [$args->{'clonedomain'}]);
- if ($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) {
+ my %roleshash =
+ &Apache::lonnet::get_my_roles($args->{'ccuname'},
+ $args->{'ccdomain'},
+ '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;
- } elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},
- $args->{'ccuname'},$args->{'ccdomain'})) {
+ } elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},$args->{'ccuname'},$args->{'ccdomain'})) {
$can_clone = 1;
- }
- }
- unless ($can_clone) {
- if ($args->{'crstype'} eq 'Community') {
- push(@clonemsg,({
- mt => 'No new community created.',
- args => [],
- },
- {
- 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 => [$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}],
- }));
} else {
- push(@clonemsg,({
- mt => 'No new course created.',
- args => [],
- },
- {
- mt => 'The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',
- args => [$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}],
- }));
+ 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 {
+ $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+ }
}
}
}
}
- return ($can_clone,\@clonemsg,$cloneid,$clonehome,$clonetitle);
+ return ($can_clone, $clonemsg, $cloneid, $clonehome);
}
sub construct_course {
- my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context,
- $cnum,$category,$coderef,$callercontext,$user_lh) = @_;
- my ($outcome,$msgref,$clonemsgref);
+ my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context,$cnum,$category,$coderef) = @_;
+ my $outcome;
my $linefeed = ' '."\n";
if ($context eq 'auto') {
$linefeed = "\n";
@@ -16562,11 +13932,18 @@ sub construct_course {
#
# Are we cloning?
#
- my ($can_clone,$cloneid,$clonehome,$clonetitle);
+ my ($can_clone, $clonemsg, $cloneid, $clonehome);
if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) {
- ($can_clone,$clonemsgref,$cloneid,$clonehome,$clonetitle) = &check_clone($args,$linefeed);
+ ($can_clone, $clonemsg, $cloneid, $clonehome) = &check_clone($args,$linefeed);
+ if ($context ne 'auto') {
+ if ($clonemsg ne '') {
+ $clonemsg = ''.$clonemsg.'';
+ }
+ }
+ $outcome .= $clonemsg.$linefeed;
+
if (!$can_clone) {
- return (0,$outcome,$clonemsgref);
+ return (0,$outcome);
}
}
@@ -16584,20 +13961,15 @@ sub construct_course {
$args->{'ccuname'}.':'.
$args->{'ccdomain'},
$args->{'crstype'},
- $cnum,$context,$category,
- $callercontext);
+ $cnum,$context,$category);
# Note: The testing routines depend on this being output; see
# 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.
- if (($callercontext eq 'auto') && ($user_lh ne '')) {
- $outcome .= &mt_user($user_lh,'New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
- } else {
- $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
- }
+ $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
if ($$courseid =~ /^error:/) {
- return (0,$outcome,$clonemsgref);
+ return (0,$outcome);
}
#
@@ -16606,37 +13978,23 @@ sub construct_course {
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
if ($crsuhome eq 'no_host') {
- if (($callercontext eq 'auto') && ($user_lh ne '')) {
- $outcome .= &mt_user($user_lh,
- 'Course creation failed, unrecognized course home server.');
- } else {
- $outcome .= &mt('Course creation failed, unrecognized course home server.');
- }
- $outcome .= $linefeed;
- return (0,$outcome,$clonemsgref);
+ $outcome .= &mt('Course creation failed, unrecognized course home server.').$linefeed;
+ return (0,$outcome);
}
$outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
#
# Do the cloning
-#
- my @clonemsg;
+#
if ($can_clone && $cloneid) {
- push(@clonemsg,
- {
- mt => 'Created [_1] by cloning from [_2]',
- args => [$crstype,$clonetitle],
- });
+ $clonemsg = &mt('Cloning [_1] from [_2]',$crstype,$clonehome);
+ if ($context ne 'auto') {
+ $clonemsg = ''.$clonemsg.'';
+ }
+ $outcome .= $clonemsg.$linefeed;
my %oldcenv=&Apache::lonnet::dump('environment',$$crsudom,$$crsunum);
# Copy all files
- my @info =
- &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid,$args->{'datemode'},
- $args->{'dateshift'},$args->{'crscode'},
- $args->{'ccuname'}.':'.$args->{'ccdomain'},
- $args->{'tinyurls'});
- if (@info) {
- push(@clonemsg,@info);
- }
+ &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid,$args->{'datemode'},$args->{'dateshift'});
# Restore URL
$cenv{'url'}=$oldcenv{'url'};
# Restore title
@@ -16661,7 +14019,8 @@ sub construct_course {
'plc.users.denied',
'hidefromcat',
'checkforpriv',
- 'categories'],
+ 'categories',
+ 'internal.uniquecode'],
$$crsudom,$$crsunum);
if ($args->{'textbook'}) {
$cenv{'internal.textbook'} = $args->{'textbook'};
@@ -16676,9 +14035,6 @@ sub construct_course {
if ($args->{'crstype'}) {
$cenv{'type'}=$args->{'crstype'};
}
- if ($args->{'lti'}) {
- $cenv{'internal.lti'}=$args->{'lti'};
- }
if ($args->{'crsid'}) {
$cenv{'courseid'}=$args->{'crsid'};
}
@@ -16700,7 +14056,6 @@ sub construct_course {
$cenv{'internal.defaultcredits'} = $args->{'defaultcredits'};
}
my @badclasses = (); # Used to accumulate sections/crosslistings that did not pass classlist access check for course owner.
- my @oklcsecs = (); # Used to accumulate LON-CAPA sections for validated institutional sections.
if ($args->{'crssections'}) {
$cenv{'internal.sectionnums'} = '';
if ($args->{'crssections'} =~ m/,/) {
@@ -16714,12 +14069,8 @@ sub construct_course {
my $class = $args->{'crscode'}.$sec;
my $addcheck = &Apache::lonnet::auto_new_course($$crsunum,$$crsudom,$class,$cenv{'internal.courseowner'});
$cenv{'internal.sectionnums'} .= $item.',';
- if ($addcheck eq 'ok') {
- unless (grep(/^\Q$gp\E$/,@oklcsecs)) {
- push(@oklcsecs,$gp);
- }
- } else {
- push(@badclasses,$class);
+ unless ($addcheck eq 'ok') {
+ push @badclasses, $class;
}
}
$cenv{'internal.sectionnums'} =~ s/,$//;
@@ -16746,12 +14097,8 @@ sub construct_course {
my ($xl,$gp) = split/:/,$item;
my $addcheck = &Apache::lonnet::auto_new_course($$crsunum,$$crsudom,$xl,$cenv{'internal.courseowner'});
$cenv{'internal.crosslistings'} .= $item.',';
- if ($addcheck eq 'ok') {
- unless (grep(/^\Q$gp\E$/,@oklcsecs)) {
- push(@oklcsecs,$gp);
- }
- } else {
- push(@badclasses,$xl);
+ unless ($addcheck eq 'ok') {
+ push @badclasses, $xl;
}
}
$cenv{'internal.crosslistings'} =~ s/,$//;
@@ -16786,63 +14133,32 @@ sub construct_course {
}
if (@badclasses > 0) {
my %lt=&Apache::lonlocal::texthash(
- 'tclb' => 'The courses listed below were included as sections or crosslistings affiliated with your new LON-CAPA course.',
- 'howi' => 'However, if automated course roster updates are enabled for this class, these particular sections/crosslistings are not guaranteed to contribute towards enrollment.',
- 'itis' => 'It is possible that rights to access enrollment for these classes will be available through assignment of co-owners.',
+ 'tclb' => 'The courses listed below were included as sections or crosslistings affiliated with your new LON-CAPA course. However, if automated course roster updates are enabled for this class, these particular sections/crosslistings will not contribute towards enrollment, because the user identified as the course owner for this LON-CAPA 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'
);
- my $badclass_msg = $lt{'tclb'}.$linefeed.$lt{'howi'}.$linefeed.
- &mt('That is because the user identified as the course owner ([_1]) does not have rights to access enrollment in these classes, as determined by the policies of your institution on access to official classlists',$cenv{'internal.courseowner'}).$linefeed.$lt{'itis'};
+ my $badclass_msg = $cenv{'internal.courseowner'}.') - '.$lt{'dnhr'}.
+ ' ('.$lt{'adby'}.')';
if ($context eq 'auto') {
$outcome .= $badclass_msg.$linefeed;
- } else {
$outcome .= '
\n";
- }
+ }
}
if ($args->{'no_end_date'}) {
$args->{'endaccess'} = 0;
}
-# If an official course with institutional sections is created by cloning
-# an existing course, section-specific hiding of course totals in student's
-# view of grades as copied from cloned course, will be checked for valid
-# sections.
- if (($can_clone && $cloneid) &&
- ($cenv{'internal.coursecode'} ne '') &&
- ($cenv{'grading'} eq 'standard') &&
- ($cenv{'hidetotals'} ne '') &&
- ($cenv{'hidetotals'} ne 'all')) {
- my @hidesecs;
- my $deletehidetotals;
- if (@oklcsecs) {
- foreach my $sec (split(/,/,$cenv{'hidetotals'})) {
- if (grep(/^\Q$sec$/,@oklcsecs)) {
- push(@hidesecs,$sec);
- }
- }
- if (@hidesecs) {
- $cenv{'hidetotals'} = join(',',@hidesecs);
- } else {
- $deletehidetotals = 1;
- }
- } else {
- $deletehidetotals = 1;
- }
- if ($deletehidetotals) {
- delete($cenv{'hidetotals'});
- &Apache::lonnet::del('environment',['hidetotals'],$$crsudom,$$crsunum);
- }
- }
$cenv{'internal.autostart'}=$args->{'enrollstart'};
$cenv{'internal.autoend'}=$args->{'enrollend'};
$cenv{'default_enrollment_start_date'}=$args->{'startaccess'};
@@ -16870,9 +14186,6 @@ sub construct_course {
if ($args->{'setcontent'}) {
$cenv{'question.email'}=$args->{'ccuname'}.':'.$args->{'ccdomain'};
}
- if ($args->{'setcomment'}) {
- $cenv{'comment.email'}=$args->{'ccuname'}.':'.$args->{'ccdomain'};
- }
}
if ($args->{'reshome'}) {
$cenv{'reshome'}=$args->{'reshome'}.'/';
@@ -16907,7 +14220,7 @@ sub construct_course {
if (ref($crsinfo{$$crsudom.'_'.$$crsunum}) eq 'HASH') {
$crsinfo{$$crsudom.'_'.$$crsunum}{'uniquecode'} = $code;
my $putres = &Apache::lonnet::courseidput($$crsudom,\%crsinfo,$crsuhome,'notime');
- }
+ }
if (ref($coderef)) {
$$coderef = $code;
}
@@ -16944,23 +14257,19 @@ sub construct_course {
# Open all assignments
#
if ($args->{'openall'}) {
- my $opendate = time;
- if ($args->{'openallfrom'} =~ /^\d+$/) {
- $opendate = $args->{'openallfrom'};
- }
my $storeunder=$$crsudom.'_'.$$crsunum.'.0.opendate';
- my %storecontent = ($storeunder => $opendate,
+ my %storecontent = ($storeunder => time,
$storeunder.'.type' => 'date_start');
- $outcome .= &mt('All assignments open starting [_1]',
- &Apache::lonlocal::locallocaltime($opendate)).': '.
- &Apache::lonnet::cput
- ('resourcedata',\%storecontent,$$crsudom,$$crsunum).$linefeed;
+
+ $outcome .= &mt('Opening all assignments').': '.&Apache::lonnet::cput
+ ('resourcedata',\%storecontent,$$crsudom,$$crsunum).$linefeed;
}
#
# Set first page
#
unless (($args->{'nonstandard'}) || ($args->{'firstres'} eq 'blank')
|| ($cloneid)) {
+ use LONCAPA::map;
$outcome .= &mt('Setting first resource').': ';
my $map = '/uploaded/'.$$crsudom.'/'.$$crsunum.'/default.sequence';
@@ -16983,7 +14292,7 @@ sub construct_course {
$outcome .= ($fatal?$errtext:'write ok').$linefeed;
}
- return (1,$outcome,\@clonemsg);
+ return (1,$outcome);
}
sub make_unique_code {
@@ -16996,7 +14305,7 @@ sub make_unique_code {
my $tries = 0;
my $gotlock = &Apache::lonnet::newput_dom('uniquecodes',$lockhash,$cdom);
my ($code,$error);
-
+
while (($gotlock ne 'ok') && ($tries<3)) {
$tries ++;
sleep 1;
@@ -17067,13 +14376,12 @@ sub group_term {
}
sub course_types {
- my @types = ('official','unofficial','community','textbook','lti');
+ my @types = ('official','unofficial','community','textbook');
my %typename = (
official => 'Official course',
unofficial => 'Unofficial course',
community => 'Community',
textbook => 'Textbook course',
- lti => 'LTI provider',
);
return (\@types,\%typename);
}
@@ -17134,7 +14442,7 @@ sub escape_url {
my ($url) = @_;
my @urlslices = split(/\//, $url,-1);
my $lastitem = &escape(pop(@urlslices));
- return &HTML::Entities::encode(join('/',@urlslices),"'").'/'.$lastitem;
+ return join('/',@urlslices).'/'.$lastitem;
}
sub compare_arrays {
@@ -17153,24 +14461,6 @@ sub compare_arrays {
return @difference;
}
-sub lon_status_items {
- my %defaults = (
- E => 100,
- W => 4,
- N => 1,
- U => 5,
- threshold => 200,
- sysmail => 2500,
- );
- my %names = (
- E => 'Errors',
- W => 'Warnings',
- N => 'Notices',
- U => 'Unsent',
- );
- return (\%defaults,\%names);
-}
-
# -------------------------------------------------------- Initialize user login
sub init_user_environment {
my ($r, $username, $domain, $authhost, $form, $args) = @_;
@@ -17180,8 +14470,7 @@ sub init_user_environment {
# See if old ID present, if so, remove
- my ($filename,$cookie,$userroles,$firstaccenv,$timerintenv,
- $coauthorenv);
+ my ($filename,$cookie,$userroles,$firstaccenv,$timerintenv);
my $now=time;
if ($public) {
@@ -17207,37 +14496,10 @@ sub init_user_environment {
opendir(DIR,$lonids);
while ($filename=readdir(DIR)) {
if ($filename=~/^$username\_\d+\_$domain\_$authhost\.id$/) {
- if (tie(my %oldenv,'GDBM_File',"$lonids/$filename",
- &GDBM_READER(),0640)) {
- my $linkedfile;
- if (exists($oldenv{'user.linkedenv'})) {
- $linkedfile = $oldenv{'user.linkedenv'};
- }
- untie(%oldenv);
- if (unlink("$lonids/$filename")) {
- if ($linkedfile =~ /^[a-f0-9]+_linked$/) {
- if (-l "$lonids/$linkedfile.id") {
- unlink("$lonids/$linkedfile.id");
- }
- }
- }
- } else {
- unlink($lonids.'/'.$filename);
- }
+ unlink($lonids.'/'.$filename);
}
}
closedir(DIR);
-# If there is a undeleted lockfile for the user's paste buffer remove it.
- my $namespace = 'nohist_courseeditor';
- my $lockingkey = 'paste'."\0".'locked_num';
- my %lockhash = &Apache::lonnet::get($namespace,[$lockingkey],
- $domain,$username);
- if (exists($lockhash{$lockingkey})) {
- my $delresult = &Apache::lonnet::del($namespace,[$lockingkey],$domain,$username);
- unless ($delresult eq 'ok') {
- &Apache::lonnet::logthis("Failed to delete paste buffer locking key in $namespace for ".$username.":".$domain." Result was: $delresult");
- }
- }
}
# Give them a new cookie
my $id = ($args->{'robot'} ? 'robot'.$args->{'robot'}
@@ -17246,13 +14508,13 @@ sub init_user_environment {
# Initialize roles
- ($userroles,$firstaccenv,$timerintenv,$coauthorenv) =
+ ($userroles,$firstaccenv,$timerintenv) =
&Apache::lonnet::rolesinit($domain,$username,$authhost);
}
# ------------------------------------ Check browser type and MathML capability
- my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,$clientunicode,
- $clientos,$clientmobile,$clientinfo,$clientosversion) = &decode_user_agent($r);
+ my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,
+ $clientunicode,$clientos,$clientmobile,$clientinfo) = &decode_user_agent($r);
# ------------------------------------------------------------- Get environment
@@ -17274,7 +14536,6 @@ sub init_user_environment {
# --------------------------------------------------------- Write first profile
{
- my $ip = &Apache::lonnet::get_requestor_ip();
my %initial_env =
("user.name" => $username,
"user.domain" => $domain,
@@ -17286,14 +14547,13 @@ sub init_user_environment {
"browser.os" => $clientos,
"browser.mobile" => $clientmobile,
"browser.info" => $clientinfo,
- "browser.osversion" => $clientosversion,
"server.domain" => $Apache::lonnet::perlvar{'lonDefDomain'},
"request.course.fn" => '',
"request.course.uri" => '',
"request.course.sec" => '',
"request.role" => 'cm',
"request.role.adv" => $env{'user.adv'},
- "request.host" => $ip,);
+ "request.host" => $ENV{'REMOTE_ADDR'},);
if ($form->{'localpath'}) {
$initial_env{"browser.localpath"} = $form->{'localpath'};
@@ -17312,61 +14572,36 @@ sub init_user_environment {
$env{'user.noloadbalance'} = $lonhost;
}
- if ($form->{'noloadbalance'}) {
- my @hosts = &Apache::lonnet::current_machine_ids();
- my $hosthere = $form->{'noloadbalance'};
- if (grep(/^\Q$hosthere\E$/,@hosts)) {
- $initial_env{"user.noloadbalance"} = $hosthere;
- $env{'user.noloadbalance'} = $hosthere;
- }
- }
-
+ my %is_adv = ( is_adv => $env{'user.adv'} );
+ my %domdef;
unless ($domain eq 'public') {
- my %is_adv = ( is_adv => $env{'user.adv'} );
- my %domdef = &Apache::lonnet::get_domain_defaults($domain);
+ %domdef = &Apache::lonnet::get_domain_defaults($domain);
+ }
- foreach my $tool ('aboutme','blog','webdav','portfolio','portaccess','timezone') {
- $userenv{'availabletools.'.$tool} =
- &Apache::lonnet::usertools_access($username,$domain,$tool,'reload',
- undef,\%userenv,\%domdef,\%is_adv);
- }
-
- foreach my $crstype ('official','unofficial','community','textbook','lti') {
- $userenv{'canrequest.'.$crstype} =
- &Apache::lonnet::usertools_access($username,$domain,$crstype,
- 'reload','requestcourses',
- \%userenv,\%domdef,\%is_adv);
- }
-
- if ((ref($userroles) eq 'HASH') && ($userroles->{'user.author'}) &&
- (exists($userroles->{"user.role.au./$domain/"}))) {
- if ($userenv{'authoreditors'}) {
- $userenv{'editors'} = $userenv{'authoreditors'};
- } elsif ($domdef{'editors'} ne '') {
- $userenv{'editors'} = $domdef{'editors'};
- } else {
- $userenv{'editors'} = 'edit,xml';
- }
- if ($userenv{'authorarchive'}) {
- $userenv{'canarchive'} = 1;
- } elsif (($userenv{'authorarchive'} eq '') &&
- ($domdef{'archive'})) {
- $userenv{'canarchive'} = 1;
- }
- }
+ foreach my $tool ('aboutme','blog','webdav','portfolio') {
+ $userenv{'availabletools.'.$tool} =
+ &Apache::lonnet::usertools_access($username,$domain,$tool,'reload',
+ undef,\%userenv,\%domdef,\%is_adv);
+ }
- $userenv{'canrequest.author'} =
- &Apache::lonnet::usertools_access($username,$domain,'requestauthor',
- 'reload','requestauthor',
+ foreach my $crstype ('official','unofficial','community','textbook') {
+ $userenv{'canrequest.'.$crstype} =
+ &Apache::lonnet::usertools_access($username,$domain,$crstype,
+ 'reload','requestcourses',
\%userenv,\%domdef,\%is_adv);
- my %reqauthor = &Apache::lonnet::get('requestauthor',['author_status','author'],
- $domain,$username);
- my $reqstatus = $reqauthor{'author_status'};
- if ($reqstatus eq 'approval' || $reqstatus eq 'approved') {
- if (ref($reqauthor{'author'}) eq 'HASH') {
- $userenv{'requestauthorqueued'} = $reqstatus.':'.
- $reqauthor{'author'}{'timestamp'};
- }
+ }
+
+ $userenv{'canrequest.author'} =
+ &Apache::lonnet::usertools_access($username,$domain,'requestauthor',
+ 'reload','requestauthor',
+ \%userenv,\%domdef,\%is_adv);
+ my %reqauthor = &Apache::lonnet::get('requestauthor',['author_status','author'],
+ $domain,$username);
+ my $reqstatus = $reqauthor{'author_status'};
+ if ($reqstatus eq 'approval' || $reqstatus eq 'approved') {
+ if (ref($reqauthor{'author'}) eq 'HASH') {
+ $userenv{'requestauthorqueued'} = $reqstatus.':'.
+ $reqauthor{'author'}{'timestamp'};
}
}
@@ -17383,11 +14618,6 @@ sub init_user_environment {
if (ref($timerintenv) eq 'HASH') {
&_add_to_env(\%disk_env,$timerintenv);
}
- if (ref($coauthorenv) eq 'HASH') {
- if (keys(%{$coauthorenv})) {
- &_add_to_env(\%disk_env,$coauthorenv);
- }
- }
if (ref($args->{'extra_env'})) {
&_add_to_env(\%disk_env,$args->{'extra_env'});
}
@@ -17478,12 +14708,12 @@ and quotacheck.pl
Inputs:
-filterlist - anonymous array of fields to include as potential filters
+filterlist - anonymous array of fields to include as potential filters
crstype - course type
roleelement - fifth arg in selectcourse_link() populates fifth arg in javascript: opencrsbrowser() function, used
- to pop-open a course selector (will contain "extra element").
+ to pop-open a course selector (will contain "extra element").
multelement - if multiple course selections will be allowed, this will be a hidden form element: name: multiple; value: 1
@@ -17499,19 +14729,19 @@ cloneruname - username of owner of new c
clonerudom - domain of owner of new course who wants to clone
-typeelem - text to use for left column in row containing course type (i.e., Course, Community or Course/Community)
+typeelem - text to use for left column in row containing course type (i.e., Course, Community or Course/Community)
codetitlesref - reference to array of titles of components in institutional codes (official courses)
codedom - domain
-formname - value of form element named "form".
+formname - value of form element named "form".
fixeddom - domain, if fixed.
-prevphase - value to assign to form element named "phase" when going back to the previous screen
+prevphase - value to assign to form element named "phase" when going back to the previous screen
-cnameelement - name of form element in form on opener page which will receive title of selected course
+cnameelement - name of form element in form on opener page which will receive title of selected course
cnumelement - name of form element in form on opener page which will receive courseID of selected course
@@ -17643,7 +14873,7 @@ sub build_filters {
}
$cloneableonlyform = ''.(' 'x3).'';
if ($formname eq 'ccrs') {
- $cloneabletitle = &mt('Cloneable for [_1]',$cloneruname.':'.$clonerudom);
+ $cloneabletitle = &mt('Cloneable for').' '.$cloneruname.':'.$clonerudom;
} else {
$cloneabletitle = &mt('Cloneable by you');
}
@@ -17653,7 +14883,7 @@ sub build_filters {
if (exists($filter->{'instcodefilter'})) {
# if (($fixeddom) || ($formname eq 'requestcrs') ||
# ($formname eq 'modifycourse') || ($formname eq 'filterpicker')) {
- if ($codedom) {
+ if ($codedom) {
$officialjs = 1;
($instcodeform,$jscript,$$numtitlesref) =
&Apache::courseclassifier::instcode_selectors($codedom,'filterpicker',
@@ -17687,12 +14917,7 @@ sub build_filters {
$output .= ''."\n".
''."\n";
- } elsif ($formname eq 'quotacheck') {
- $output .= qq|
-
-
-|;
- } else {
+ } elsif ($formname ne 'quotacheck') {
my $name_input;
if ($cnameelement ne '') {
$name_input = '{'ownerfilter'} ne '') ||
($filter->{'ownerdomfilter'} ne '')) {
@@ -17956,10 +15173,10 @@ sub search_courses {
$filter->{'combownerfilter'},
$filter->{'coursefilter'},
undef,undef,$type,$regexpok,undef,undef,
- undef,undef,$cloner,$cc_clone,
+ undef,undef,$cloner,$env{'form.cc_clone'},
$filter->{'cloneableonly'},
$createdbefore,$createdafter,undef,
- $domcloner,undef,$reqcrsdom,$reqinstcode);
+ $domcloner);
if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) {
my $ccrole;
if ($type eq 'Community') {
@@ -17979,7 +15196,7 @@ sub search_courses {
if (ref($courses{$cid}) eq 'HASH') {
if (ref($courses{$cid}{roles}) eq 'ARRAY') {
if (!grep(/^\Q$courserole\E$/,@{$courses{$cid}{roles}})) {
- push(@{$courses{$cid}{roles}},$courserole);
+ push (@{$courses{$cid}{roles}},$courserole);
}
} else {
$courses{$cid}{roles} = [$courserole];
@@ -17993,237 +15210,42 @@ sub search_courses {
return %courses;
}
+
=pod
=back
-=head1 Routines for version requirements for current course.
-
-=over 4
-
-=item * &check_release_required()
-
-Compares required LON-CAPA version with version on server, and
-if required version is newer looks for a server with the required version.
-
-Looks first at servers in user's owen domain; if none suitable, looks at
-servers in course's domain are permitted to host sessions for user's domain.
-
-Inputs:
-
-$loncaparev - Version on current server (format: Major.Minor.Subrelease-datestamp)
-
-$courseid - Course ID of current course
-
-$rolecode - User's current role in course (for switchserver query string).
-
-$required - LON-CAPA version needed by course (format: Major.Minor).
-
-
-Returns:
-
-$switchserver - query string tp append to /adm/switchserver call (if
- current server's LON-CAPA version is too old.
-
-$warning - Message is displayed if no suitable server could be found.
-
=cut
-sub check_release_required {
- my ($loncaparev,$courseid,$rolecode,$required) = @_;
- my ($switchserver,$warning);
- if ($required ne '') {
- my ($reqdmajor,$reqdminor) = ($required =~ /^(\d+)\.(\d+)$/);
- my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
- if ($reqdmajor ne '' && $reqdminor ne '') {
- my $otherserver;
- if (($major eq '' && $minor eq '') ||
- (($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor)))) {
- my ($userdomserver) = &Apache::lonnet::choose_server($env{'user.domain'},undef,$required,1);
- my $switchlcrev =
- &Apache::lonnet::get_server_loncaparev($env{'user.domain'},
- $userdomserver);
- my ($swmajor,$swminor) = ($switchlcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
- if (($swmajor eq '' && $swminor eq '') || ($reqdmajor > $swmajor) ||
- (($reqdmajor == $swmajor) && ($reqdminor > $swminor))) {
- my $cdom = $env{'course.'.$courseid.'.domain'};
- if ($cdom ne $env{'user.domain'}) {
- my ($coursedomserver,$coursehostname) = &Apache::lonnet::choose_server($cdom,undef,$required,1);
- my $serverhomeID = &Apache::lonnet::get_server_homeID($coursehostname);
- my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID);
- my %defdomdefaults = &Apache::lonnet::get_domain_defaults($serverhomedom);
- my %udomdefaults = &Apache::lonnet::get_domain_defaults($env{'user.domain'});
- my $remoterev = &Apache::lonnet::get_server_loncaparev($serverhomedom,$coursedomserver);
- my $canhost =
- &Apache::lonnet::can_host_session($env{'user.domain'},
- $coursedomserver,
- $remoterev,
- $udomdefaults{'remotesessions'},
- $defdomdefaults{'hostedsessions'});
- if ($canhost) {
- $otherserver = $coursedomserver;
- } else {
- $warning = &mt('Requires LON-CAPA version [_1].',$env{'course.'.$courseid.'.internal.releaserequired'}).' '. &mt("No suitable server could be found amongst servers in either your own domain or in the course's domain.");
- }
- } else {
- $warning = &mt('Requires LON-CAPA version [_1].',$env{'course.'.$courseid.'.internal.releaserequired'}).' '.&mt("No suitable server could be found amongst servers in your own domain (which is also the course's domain).");
- }
- } else {
- $otherserver = $userdomserver;
+sub build_release_hashes {
+ my ($checkparms,$checkresponsetypes,$checkcrstypes,$anonsurvey,$randomizetry) = @_;
+ return unless((ref($checkparms) eq 'HASH') && (ref($checkresponsetypes) eq 'HASH') &&
+ (ref($checkcrstypes) eq 'HASH') && (ref($anonsurvey) eq 'HASH') &&
+ (ref($randomizetry) eq 'HASH'));
+ foreach my $key (keys(%Apache::lonnet::needsrelease)) {
+ my ($item,$name,$value) = split(/:/,$key);
+ if ($item eq 'parameter') {
+ if (ref($checkparms->{$name}) eq 'ARRAY') {
+ unless(grep(/^\Q$name\E$/,@{$checkparms->{$name}})) {
+ push(@{$checkparms->{$name}},$value);
}
- }
- if ($otherserver ne '') {
- $switchserver = 'otherserver='.$otherserver.'&role='.$rolecode;
- }
- }
- }
- return ($switchserver,$warning);
-}
-
-=pod
-
-=item * &check_release_result()
-
-Inputs:
-
-$switchwarning - Warning message if no suitable server found to host session.
-
-$switchserver - query string to append to /adm/switchserver containing lonHostID
- and current role.
-
-Returns: HTML to display with information about requirement to switch server.
- Either displaying warning with link to Roles/Courses screen or
- display link to switchserver.
-
-=cut
-
-sub check_release_result {
- my ($switchwarning,$switchserver) = @_;
- my $output = &start_page('Selected course unavailable on this server').
- '