--- loncom/interface/lonparmset.pm 2005/06/28 15:26:06 1.234
+++ loncom/interface/lonparmset.pm 2005/08/26 19:55:19 1.241
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.234 2005/06/28 15:26:06 albertel Exp $
+# $Id: lonparmset.pm,v 1.241 2005/08/26 19:55:19 banghart Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -904,12 +904,12 @@ ENDSCRIPT
$r->print("\n
");
my $cnt=0;
foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) {
- $r->print("\nprint("\n | | ');
+ $r->print('>'.$$allparms{$tempkey}.'');
$cnt++;
if ($cnt==3) {
$r->print("
\n");
@@ -1067,6 +1067,18 @@ sub keysinorder {
} (keys %{$name});
}
+sub keysinorder_bytype {
+ my ($name,$keyorder)=@_;
+ return sort {
+ my $ta=(split('_',$a))[-1];
+ my $tb=(split('_',$b))[-1];
+ if ($$keyorder{'parameter_0_'.$ta} == $$keyorder{'parameter_0_'.$tb}) {
+ return ($a cmp $b);
+ }
+ $$keyorder{'parameter_0_'.$ta} <=> $$keyorder{'parameter_0_'.$tb};
+ } (keys %{$name});
+}
+
sub keysindisplayorder {
my ($name,$keyorder)=@_;
return sort {
@@ -1076,16 +1088,17 @@ sub keysindisplayorder {
sub sortmenu {
my ($r,$sortorder)=@_;
- $r->print('
print('
');
}
sub standardkeyorder {
@@ -1317,7 +1330,9 @@ sub assessparms {
} else {
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb);
$r->print(&mt('Specific Resource').": ".$resource.
- '
');
+ ''.
+ '
');
}
&usermenu($r,$uname,$id,$udom,$csec);
@@ -1462,14 +1477,9 @@ ENDTABLEHEADFOUR
$r->print('');
+ '>'.$maptitles{$mapp{$rid}}.' | ');
- $r->print(' / res / ');
- $r->print(join(' / ', split(/\//,$mapp{$rid})));
-
- $r->print('');
-
- foreach (&keysinorder(\%name,\%keyorder)) {
+ foreach (&keysinorder_bytype(\%name,\%keyorder)) {
unless ($firstrow) {
$r->print('
');
} else {
@@ -1759,9 +1769,13 @@ sub crsenv {
#
# Let the user know we made the changes
if ($name && defined($value)) {
+ my $failed_cloners;
if ($name eq 'cloners') {
+ $value =~ s/\s//g;
$value =~ s/^,//;
$value =~ s/,$//;
+ # check requested clones are valid users.
+ $failed_cloners = &check_cloners(\$value,\@oldcloner);
}
my $put_result = &Apache::lonnet::put('environment',
{$name=>$value},$dom,$crs);
@@ -1778,6 +1792,18 @@ sub crsenv {
$setoutput.=&mt('Unable to set').' '.$name.' '.&mt('to').
' '.$value.' '.&mt('due to').' '.$put_result.'.
';
}
+ if (($name eq 'cloners') && ($failed_cloners)) {
+ $setoutput.= &mt('Unable to include').' - '.$failed_cloners.', '.
+ &mt('reason').' - '.&mt('LON-CAPA user(s) do(es) not exist').
+ '.
'.&mt('Please ').
+ ' '.
+ &mt('add the user(s)').', '.
+ &mt('and then return to the ').
+ ''.
+ &mt('Course Parameters page').' '.
+ &mt('to add the new user(s) to the list of possible cloners').
+ '.
';
+ }
}
}
# ------------------------- Re-init course environment entries for this session
@@ -2167,6 +2193,11 @@ sub listdata {
if ($sortorder eq 'realmstudent') {
my ($astudent,$arealm)=($a=~/^$env{'request.course.id'}\.([^\.]+)\.(.+)\.[^\.]+$/);
my ($bstudent,$brealm)=($b=~/^$env{'request.course.id'}\.([^\.]+)\.(.+)\.[^\.]+$/);
+ if (!defined($astudent) && !defined($bstudent) &&
+ !defined($arealm) && !defined($brealm)) {
+ ($arealm)=($a=~/^$env{'request.course.id'}\.(.+)\.[^\.]+$/);
+ ($brealm)=($b=~/^$env{'request.course.id'}\.(.+)\.[^\.]+$/);
+ }
($arealm cmp $brealm) || ($astudent cmp $bstudent);
} else {
$a cmp $b;
@@ -2475,25 +2506,76 @@ ENDOVER
##################################################
=pod
-
-=item change clone
-
+
+=item check_cloners
+
+Checks if new users included in list of allowed cloners
+are valid users. Replaces supplied list with
+cleaned list containing only users with valid usernames
+and domains.
+
+Inputs: $clonelist, $oldcloner
+where $clonelist is ref to array of requested cloners,
+and $oldcloner is ref to array of currently allowed
+cloners.
+
+Returns: string - comma separated list of requested
+cloners (username:domain) who do not exist in system.
+
+=item change_clone
+
Modifies the list of courses a user can clone (stored
-in the user's environemnt.db file), called when a
+in the user's environment.db file), called when a
change is made to the list of users allowed to clone
a course.
-
+
Inputs: $action,$cloner
where $action is add or drop, and $cloner is identity of
user for whom cloning ability is to be changed in course.
-
-Returns:
=cut
##################################################
##################################################
+sub extract_cloners {
+ my ($clonelist,$allowclone) = @_;
+ if ($clonelist =~ /,/) {
+ @{$allowclone} = split/,/,$clonelist;
+ } else {
+ $$allowclone[0] = $clonelist;
+ }
+}
+
+
+sub check_cloners {
+ my ($clonelist,$oldcloner) = @_;
+ my ($clean_clonelist,$disallowed);
+ my @allowclone = ();
+ &extract_cloners($$clonelist,\@allowclone);
+ foreach my $currclone (@allowclone) {
+ if (!grep/^$currclone$/,@$oldcloner) {
+ my ($uname,$udom) = split/:/,$currclone;
+ if ($uname && $udom) {
+ if (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') {
+ $disallowed .= $currclone.',';
+ } else {
+ $clean_clonelist .= $currclone.',';
+ }
+ }
+ } else {
+ $clean_clonelist .= $currclone.',';
+ }
+ }
+ if ($disallowed) {
+ $disallowed =~ s/,$//;
+ }
+ if ($clean_clonelist) {
+ $clean_clonelist =~ s/,$//;
+ }
+ $$clonelist = $clean_clonelist;
+ return $disallowed;
+}
sub change_clone {
my ($clonelist,$oldcloner) = @_;
@@ -2503,12 +2585,8 @@ sub change_clone {
my $clone_crs = $cnum.':'.$cdom;
if ($cnum && $cdom) {
- my @allowclone = ();
- if ($clonelist =~ /,/) {
- @allowclone = split/,/,$clonelist;
- } else {
- $allowclone[0] = $clonelist;
- }
+ my @allowclone;
+ &extract_cloners($clonelist,\@allowclone);
foreach my $currclone (@allowclone) {
if (!grep/^$currclone$/,@$oldcloner) {
($uname,$udom) = split/:/,$currclone;
@@ -2599,6 +2677,10 @@ ENDMAINFORMHEAD
action => 'crsenv',
permission => $parm_permission,
},
+ { text => 'Set Instructor Defined Metadata',
+ action => 'setinstmeta',
+ permission => $parm_permission,
+ },
{ text => 'Set/Modify Resource Parameters - Helper Mode',
url => '/adm/helper/parameter.helper',
permission => $parm_permission,
@@ -2642,8 +2724,24 @@ ENDMAINFORMHEAD
$r->print($menu_html);
return;
}
-
-
+### Set instructor defined metadata
+sub setinstmeta {
+ my ($r)=@_;
+ my $setoutput='';
+ $r->print(&Apache::lonxml::xmlbegin());
+ $r->print('
+ LON-CAPA Set Instructor Metadata
+ ');
+ $r->print(&Apache::loncommon::bodytag('Set Instructor Metadata'));
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef,
+ 'Set Instructor Metadata'));
+ my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+ $r->print('Set instructor metadata here');
+ $r->print('