version 1.342, 2006/10/13 17:40:12
|
version 1.413.4.1, 2009/05/20 18:03:04
|
Line 46 This module sets coursewide and assessme
|
Line 46 This module sets coursewide and assessme
|
|
|
=over 4 |
=over 4 |
|
|
|
=item parmval() |
|
|
|
Figure out a cascading parameter. |
|
|
|
Inputs: $what - a parameter spec (incluse part info and name I.E. 0.weight) |
|
$id - a bighash Id number |
|
$def - the resource's default value 'stupid emacs |
|
|
|
Returns: A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 14 possible levels |
|
|
|
14- General Course |
|
13- Map or Folder level in course |
|
12- resource default |
|
11- map default |
|
10- resource level in course |
|
9 - General for section |
|
8 - Map or Folder level for section |
|
7 - resource level in section |
|
6 - General for group |
|
5 - Map or Folder level for group |
|
4 - resource level in group |
|
3 - General for specific student |
|
2 - Map or Folder level for specific student |
|
1 - resource level for specific student |
|
|
|
=item parmval_by_symb() |
|
|
|
=item reset_caches() |
|
|
|
=item cacheparmhash() |
|
|
|
=item parmhash() |
|
|
|
=item symbcache() |
|
|
|
=item preset_defaults() |
|
|
|
=item date_sanity_info() |
|
|
|
=item storeparm() |
|
|
|
Store a parameter by symb |
|
|
|
Takes |
|
- symb |
|
- name of parameter |
|
- level |
|
- new value |
|
- new type |
|
- username |
|
- userdomain |
|
|
|
=item log_parmset() |
|
|
|
=item storeparm_by_symb_inner() |
|
|
|
=item valout() |
|
|
|
Format a value for output. |
|
|
|
Inputs: $value, $type, $editable |
|
|
|
Returns: $value, formatted for output. If $type indicates it is a date, |
|
localtime($value) is returned. |
|
$editable will return an icon to click on |
|
|
|
=item plink() |
|
|
|
Produces a link anchor. |
|
|
|
Inputs: $type,$dis,$value,$marker,$return,$call |
|
|
|
Returns: scalar with html code for a link which will envoke the |
|
javascript function 'pjump'. |
|
|
|
=item page_js() |
|
|
|
=item startpage() |
|
|
|
=item print_row() |
|
|
|
=item print_td() |
|
|
|
=item print_usergroups() |
|
|
|
=item parm_control_group() |
|
|
|
=item extractResourceInformation() : |
|
|
|
Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes. |
|
|
|
Input: See list below: |
|
|
|
=item * B<ids> : An array that will contain all of the ids in the course. |
|
|
|
=item * B<typep> : hash, id->type, where "type" contains the extension of the file, thus, I<problem exam quiz assess survey form>. |
|
|
|
=item * B<keyp> : hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id |
|
|
|
|
|
=item * B<allparms> : hash, name of parameter->display value (what is the display value?) |
|
|
|
=item * B<allparts> : hash, part identification->text representation of part, where the text representation is "[Part $part]" |
|
|
|
=item * B<allkeys> : hash, full key to part->display value (what's display value?) |
|
|
|
=item * B<allmaps> : hash, ??? |
|
|
|
=item * B<fcat> : ??? |
|
|
|
=item * B<defp> : hash, ??? |
|
|
|
=item * B<mapp> : ?? |
|
|
|
=item * B<symbp> : hash, id->full sym? |
|
|
|
|
|
|
|
=item isdateparm() |
|
|
|
=item parmmenu() |
|
|
|
=item partmenu() |
|
|
|
=item usermenu() |
|
|
|
=item displaymenu() |
|
|
|
=item mapmenu() |
|
|
|
=item levelmenu() |
|
|
|
=item sectionmenu() |
|
|
|
=item keysplit() |
|
|
|
=item keysinorder() |
|
|
|
=item keysinorder_bytype() |
|
|
|
=item keysindisplayorder() |
|
|
|
=item standardkeyorder() |
|
|
|
=item assessparms() : |
|
|
|
Show assessment data and parameters. This is a large routine that should |
|
be simplified and shortened... someday. |
|
|
|
Inputs: $r |
|
|
|
Returns: nothing |
|
|
|
Variables used (guessed by Jeremy): |
|
|
|
=item * B<pscat>: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type. |
|
|
|
=item * B<psprt>: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts? |
|
|
|
=item * B<@catmarker> contains list of all possible parameters including part #s |
|
|
|
=item * B<$fullkeyp> contains the full part/id # for the extraction of proper parameters |
|
|
|
=item * B<$tempkeyp> contains part 0 only (no ids - ie, subparts) |
|
When storing information, store as part 0 |
|
When requesting information, request from full part |
|
|
|
=item tablestart() |
|
|
|
=item tableend() |
|
|
|
=item extractuser() |
|
|
|
=item parse_listdata_key() |
|
|
|
=item listdata() |
|
|
|
=item date_interval_selector() |
|
|
|
=item get_date_interval_from_form() |
|
|
|
=item default_selector() |
|
|
|
=item string_selector() |
|
|
|
=item dateshift() |
|
|
|
=item newoverview() |
|
|
|
=item secgroup_lister() |
|
|
|
=item overview() |
|
|
|
=item clean_parameters() |
|
|
|
=item date_shift_one() |
|
|
|
=item date_shift_two() |
|
|
|
=item parse_key() |
|
|
|
=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 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. |
|
|
|
|
|
=item check_cloners() |
|
|
|
=item change_clone() |
|
|
|
=item header() |
|
|
|
Output html header for page |
|
|
|
=item print_main_menu() |
|
|
|
=item output_row() |
|
|
|
Set portfolio metadata |
|
|
|
=item order_meta_fields() |
|
|
|
=item addmetafield() |
|
|
|
=item setrestrictmeta() |
|
|
|
=item get_added_meta_fieldnames() |
|
|
|
=item get_deleted_meta_fieldnames() |
|
|
|
=item defaultsetter() |
|
|
|
=item components() |
|
|
|
=item load_parameter_names() |
|
|
|
=item parm_change_log() |
|
|
|
=item handler() : |
|
|
|
Main handler. Calls &assessparms subroutine. |
|
|
|
|
|
=back |
|
|
=cut |
=cut |
|
|
|
|
################################################################### |
################################################################### |
################################################################### |
################################################################### |
|
|
Line 65 use Apache::lonlocal;
|
Line 333 use Apache::lonlocal;
|
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use Apache::longroup; |
use Apache::longroup; |
use Apache::lonrss; |
use Apache::lonrss; |
use LONCAPA; |
use LONCAPA qw(:DEFAULT :match); |
|
|
# --- Caches local to lonparmset |
|
|
|
my $parmhashid; |
|
my %parmhash; |
|
my $symbsid; |
|
my %symbs; |
|
my $rulesid; |
|
my %rules; |
|
|
|
# --- end local caches |
|
|
|
################################################## |
|
################################################## |
|
|
|
=pod |
|
|
|
=item parmval |
|
|
|
Figure out a cascading parameter. |
|
|
|
Inputs: $what - a parameter spec (incluse part info and name I.E. 0.weight) |
|
$id - a bighash Id number |
|
$def - the resource's default value 'stupid emacs |
|
|
|
Returns: A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 14 possible levels |
|
|
|
14- General Course |
|
13- Map or Folder level in course |
|
12- resource default |
|
11- map default |
|
10- resource level in course |
|
9 - General for section |
|
8 - Map or Folder level for section |
|
7 - resource level in section |
|
6 - General for group |
|
5 - Map or Folder level for group |
|
4 - resource level in group |
|
3 - General for specific student |
|
2 - Map or Folder level for specific student |
|
1 - resource level for specific student |
|
|
|
=cut |
|
|
|
################################################## |
|
sub parmval { |
sub parmval { |
my ($what,$id,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_; |
my ($what,$id,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_; |
return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec, |
return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec, |
Line 119 sub parmval {
|
Line 343 sub parmval {
|
|
|
sub parmval_by_symb { |
sub parmval_by_symb { |
my ($what,$symb,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_; |
my ($what,$symb,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_; |
# load caches |
|
&cacheparmhash(); |
|
|
|
my $useropt=&Apache::lonnet::get_userresdata($uname,$udom); |
my $useropt; |
|
if ($uname ne '' && $udom ne '') { |
|
$useropt = &Apache::lonnet::get_userresdata($uname,$udom); |
|
} |
|
|
my $result=''; |
my $result=''; |
my @outpar=(); |
my @outpar=(); |
Line 164 sub parmval_by_symb {
|
Line 389 sub parmval_by_symb {
|
|
|
# ------------------------------------------------------ third, check map parms |
# ------------------------------------------------------ third, check map parms |
|
|
my $thisparm=$parmhash{$symbparm}; |
my $thisparm=&parmhash($symbparm); |
if (defined($thisparm)) { $outpar[11]=$thisparm; $result=11; } |
if (defined($thisparm)) { $outpar[11]=$thisparm; $result=11; } |
|
|
if (defined($$courseopt{$courselevelr})) { |
if (defined($$courseopt{$courselevelr})) { |
Line 173 sub parmval_by_symb {
|
Line 398 sub parmval_by_symb {
|
} |
} |
|
|
# ------------------------------------------------------ fourth, back to course |
# ------------------------------------------------------ fourth, back to course |
if (defined($csec)) { |
if ($csec ne '') { |
if (defined($$courseopt{$seclevel})) { |
if (defined($$courseopt{$seclevel})) { |
$outpar[9]=$$courseopt{$seclevel}; |
$outpar[9]=$$courseopt{$seclevel}; |
$result=9; |
$result=9; |
Line 189 sub parmval_by_symb {
|
Line 414 sub parmval_by_symb {
|
} |
} |
} |
} |
# ------------------------------------------------------ fifth, check course group |
# ------------------------------------------------------ fifth, check course group |
if (defined($cgroup)) { |
if ($cgroup ne '') { |
if (defined($$courseopt{$grplevel})) { |
if (defined($$courseopt{$grplevel})) { |
$outpar[6]=$$courseopt{$grplevel}; |
$outpar[6]=$$courseopt{$grplevel}; |
$result=6; |
$result=6; |
Line 206 sub parmval_by_symb {
|
Line 431 sub parmval_by_symb {
|
|
|
# ---------------------------------------------------------- fifth, check user |
# ---------------------------------------------------------- fifth, check user |
|
|
if (defined($uname)) { |
if ($uname ne '') { |
if (defined($$useropt{$courselevel})) { |
if (defined($$useropt{$courselevel})) { |
$outpar[3]=$$useropt{$courselevel}; |
$outpar[3]=$$useropt{$courselevel}; |
$result=3; |
$result=3; |
Line 225 sub parmval_by_symb {
|
Line 450 sub parmval_by_symb {
|
return ($result,@outpar); |
return ($result,@outpar); |
} |
} |
|
|
sub resetparmhash { |
|
$parmhashid=''; |
|
} |
|
|
|
sub cacheparmhash { |
|
if ($parmhashid eq $env{'request.course.fn'}) { return; } |
|
my %parmhashfile; |
|
if (tie(%parmhashfile,'GDBM_File', |
|
$env{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640)) { |
|
%parmhash=%parmhashfile; |
|
untie %parmhashfile; |
|
$parmhashid=$env{'request.course.fn'}; |
|
} |
|
} |
|
|
|
sub resetsymbcache { |
# --- Caches local to lonparmset |
$symbsid=''; |
|
|
|
|
sub reset_caches { |
|
&resetparmhash(); |
|
&resetsymbcache(); |
|
&resetrulescache(); |
} |
} |
|
|
sub symbcache { |
{ |
my $id=shift; |
my $parmhashid; |
if ($symbsid ne $env{'request.course.id'}) { |
my %parmhash; |
%symbs=(); |
sub resetparmhash { |
|
undef($parmhashid); |
|
undef(%parmhash); |
} |
} |
unless ($symbs{$id}) { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
sub cacheparmhash { |
if ($id=~/\./) { |
if ($parmhashid eq $env{'request.course.fn'}) { return; } |
my $resource=$navmap->getById($id); |
my %parmhashfile; |
$symbs{$id}=$resource->symb(); |
if (tie(%parmhashfile,'GDBM_File', |
} else { |
$env{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640)) { |
my $resource=$navmap->getByMapPc($id); |
%parmhash=%parmhashfile; |
$symbs{$id}=&Apache::lonnet::declutter($resource->src()); |
untie(%parmhashfile); |
|
$parmhashid=$env{'request.course.fn'}; |
} |
} |
$symbsid=$env{'request.course.id'}; |
|
} |
} |
return $symbs{$id}; |
|
} |
sub parmhash { |
|
my ($id) = @_; |
sub resetrulescache { |
&cacheparmhash(); |
$rulesid=''; |
return $parmhash{$id}; |
} |
} |
|
} |
|
|
|
{ |
|
my $symbsid; |
|
my %symbs; |
|
sub resetsymbcache { |
|
undef($symbsid); |
|
undef(%symbs); |
|
} |
|
|
|
sub symbcache { |
|
my $id=shift; |
|
if ($symbsid ne $env{'request.course.id'}) { |
|
undef(%symbs); |
|
} |
|
if (!$symbs{$id}) { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if ($id=~/\./) { |
|
my $resource=$navmap->getById($id); |
|
$symbs{$id}=$resource->symb(); |
|
} else { |
|
my $resource=$navmap->getByMapPc($id); |
|
$symbs{$id}=&Apache::lonnet::declutter($resource->src()); |
|
} |
|
$symbsid=$env{'request.course.id'}; |
|
} |
|
return $symbs{$id}; |
|
} |
|
} |
|
|
sub rulescache { |
{ |
my $id=shift; |
my $rulesid; |
if ($rulesid ne $env{'request.course.id'}) { |
my %rules; |
%rules=(); |
sub resetrulescache { |
|
undef($rulesid); |
|
undef(%rules); |
} |
} |
unless (defined($rules{$id})) { |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
sub rulescache { |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $id=shift; |
%rules=&Apache::lonnet::dump('parmdefactions',$dom,$crs); |
if ($rulesid ne $env{'request.course.id'} |
$rulesid=$env{'request.course.id'}; |
&& !defined($rules{$id})) { |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
%rules=&Apache::lonnet::dump('parmdefactions',$dom,$crs); |
|
$rulesid=$env{'request.course.id'}; |
|
} |
|
return $rules{$id}; |
} |
} |
return $rules{$id}; |
|
} |
} |
|
|
|
|
sub preset_defaults { |
sub preset_defaults { |
my $type=shift; |
my $type=shift; |
if (&rulescache($type.'_action') eq 'default') { |
if (&rulescache($type.'_action') eq 'default') { |
Line 295 sub preset_defaults {
|
Line 551 sub preset_defaults {
|
} |
} |
} |
} |
|
|
################################################## |
|
|
|
sub date_sanity_info { |
sub date_sanity_info { |
my $checkdate=shift; |
my $checkdate=shift; |
Line 304 sub date_sanity_info {
|
Line 559 sub date_sanity_info {
|
my $crsprefix='course.'.$env{'request.course.id'}.'.'; |
my $crsprefix='course.'.$env{'request.course.id'}.'.'; |
if ($env{$crsprefix.'default_enrollment_end_date'}) { |
if ($env{$crsprefix.'default_enrollment_end_date'}) { |
if ($checkdate>$env{$crsprefix.'default_enrollment_end_date'}) { |
if ($checkdate>$env{$crsprefix.'default_enrollment_end_date'}) { |
$result.='<br />'.&mt('After course enrollment end!'); |
$result.='<div class="LC_warning">' |
|
.&mt('After course enrollment end!') |
|
.'</div>'; |
} |
} |
} |
} |
if ($env{$crsprefix.'default_enrollment_start_date'}) { |
if ($env{$crsprefix.'default_enrollment_start_date'}) { |
if ($checkdate<$env{$crsprefix.'default_enrollment_start_date'}) { |
if ($checkdate<$env{$crsprefix.'default_enrollment_start_date'}) { |
$result.='<br />'.&mt('Before course enrollment start!'); |
$result.='<div class="LC_warning">' |
|
.&mt('Before course enrollment start!') |
|
.'</div>'; |
} |
} |
} |
} |
|
# Preparation for additional warnings about dates in the past/future. |
|
# An improved, more context sensitive version is recommended, |
|
# e.g. warn for due and answer dates which are defined before the corresponding open date, etc. |
|
# if ($checkdate<time) { |
|
# $result.='<div class="LC_info">' |
|
# .'('.&mt('in the past').')' |
|
# .'</div>'; |
|
# } |
|
# if ($checkdate>time) { |
|
# $result.='<div class="LC_info">' |
|
# .'('.&mt('in the future').')' |
|
# .'</div>'; |
|
# } |
return $result; |
return $result; |
} |
} |
################################################## |
################################################## |
Line 333 sub storeparm {
|
Line 605 sub storeparm {
|
&storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,'',$cgroup); |
&storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,'',$cgroup); |
} |
} |
|
|
# |
|
# Store a parameter by symb |
|
# |
|
# Takes |
|
# - symb |
|
# - name of parameter |
|
# - level |
|
# - new value |
|
# - new type |
|
# - username |
|
# - userdomain |
|
|
|
my %recstack; |
my %recstack; |
sub storeparm_by_symb { |
sub storeparm_by_symb { |
my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag,$cgroup)=@_; |
my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag,$cgroup)=@_; |
Line 499 sub storeparm_by_symb_inner {
|
Line 759 sub storeparm_by_symb_inner {
|
return ''; |
return ''; |
} |
} |
|
|
################################################## |
|
################################################## |
|
|
|
=pod |
|
|
|
=item valout |
|
|
|
Format a value for output. |
|
|
|
Inputs: $value, $type, $editable |
|
|
|
Returns: $value, formatted for output. If $type indicates it is a date, |
|
localtime($value) is returned. |
|
$editable will return an icon to click on |
|
|
|
=cut |
|
|
|
################################################## |
|
################################################## |
|
sub valout { |
sub valout { |
my ($value,$type,$editable)=@_; |
my ($value,$type,$editable)=@_; |
my $result = ''; |
my $result = ''; |
Line 531 sub valout {
|
Line 772 sub valout {
|
} else { |
} else { |
if ($type eq 'date_interval') { |
if ($type eq 'date_interval') { |
my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value); |
my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value); |
|
my @timer; |
$year=$year-70; |
$year=$year-70; |
$mday--; |
$mday--; |
if ($year) { |
if ($year) { |
$result.=$year.' yrs '; |
# $result.=&mt('[quant,_1,yr]',$year).' '; |
|
push(@timer,&mt('[quant,_1,yr]',$year)); |
} |
} |
if ($mon) { |
if ($mon) { |
$result.=$mon.' mths '; |
# $result.=&mt('[quant,_1,mth]',$mon).' '; |
|
push(@timer,&mt('[quant,_1,mth]',$mon)); |
} |
} |
if ($mday) { |
if ($mday) { |
$result.=$mday.' days '; |
# $result.=&mt('[quant,_1,day]',$mday).' '; |
|
push(@timer,&mt('[quant,_1,day]',$mday)); |
} |
} |
if ($hour) { |
if ($hour) { |
$result.=$hour.' hrs '; |
# $result.=&mt('[quant,_1,hr]',$hour).' '; |
|
push(@timer,&mt('[quant,_1,hr]',$hour)); |
} |
} |
if ($min) { |
if ($min) { |
$result.=$min.' mins '; |
# $result.=&mt('[quant,_1,min]',$min).' '; |
|
push(@timer,&mt('[quant,_1,min]',$min)); |
} |
} |
if ($sec) { |
if ($sec) { |
$result.=$sec.' secs '; |
# $result.=&mt('[quant,_1,sec]',$sec).' '; |
|
push(@timer,&mt('[quant,_1,sec]',$sec)); |
} |
} |
$result=~s/\s+$//; |
# $result=~s/\s+$//; |
|
if (!@timer) { # Special case: all entries 0 -> display "0 secs" intead of empty field to keep this field editable |
|
push(@timer,&mt('[quant,_1,sec]',0)); |
|
} |
|
$result.=join(", ",@timer); |
} elsif (&isdateparm($type)) { |
} elsif (&isdateparm($type)) { |
$result = localtime($value).&date_sanity_info($value); |
$result = &Apache::lonlocal::locallocaltime($value). |
|
&date_sanity_info($value); |
} else { |
} else { |
$result = $value; |
$result = $value; |
|
$result = &HTML::Entities::encode($result,'"<>&'); |
} |
} |
} |
} |
return $result; |
return $result; |
} |
} |
|
|
################################################## |
|
################################################## |
|
|
|
=pod |
|
|
|
=item plink |
|
|
|
Produces a link anchor. |
|
|
|
Inputs: $type,$dis,$value,$marker,$return,$call |
|
|
|
Returns: scalar with html code for a link which will envoke the |
|
javascript function 'pjump'. |
|
|
|
=cut |
|
|
|
################################################## |
|
################################################## |
|
sub plink { |
sub plink { |
my ($type,$dis,$value,$marker,$return,$call)=@_; |
my ($type,$dis,$value,$marker,$return,$call)=@_; |
my $winvalue=$value; |
my $winvalue=$value; |
Line 592 sub plink {
|
Line 828 sub plink {
|
my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/); |
my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/); |
my ($hour,$min,$sec,$val)=&preset_defaults($parmname); |
my ($hour,$min,$sec,$val)=&preset_defaults($parmname); |
unless (defined($winvalue)) { $winvalue=$val; } |
unless (defined($winvalue)) { $winvalue=$val; } |
|
my $valout = &valout($value,$type,1); |
|
my $unencmarker = $marker; |
|
foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call, |
|
\$hour, \$min, \$sec) { |
|
$$item = &HTML::Entities::encode($$item,'"<>&'); |
|
$$item =~ s/\'/\\\'/g; |
|
} |
return '<table width="100%"><tr valign="top" align="right"><td><a name="'.$marker.'" /></td></tr><tr><td align="center">'. |
return '<table width="100%"><tr valign="top" align="right"><td><a name="'.$marker.'" /></td></tr><tr><td align="center">'. |
'<a href="javascript:pjump('."'".$type."','".$dis."','".$winvalue."','" |
'<a href="javascript:pjump('."'".$type."','".$dis."','".$winvalue."','" |
.$marker."','".$return."','".$call."','".$hour."','".$min."','".$sec."'".');">'. |
.$unencmarker."','".$return."','".$call."','".$hour."','".$min."','".$sec."'".');">'. |
&valout($value,$type,1).'</a></td></tr></table>'; |
$valout.'</a></td></tr></table>'; |
} |
} |
|
|
sub page_js { |
sub page_js { |
Line 665 sub startpage {
|
Line 908 sub startpage {
|
$start_page |
$start_page |
$breadcrumbs |
$breadcrumbs |
<form method="post" action="/adm/parmset?action=settable" name="parmform"> |
<form method="post" action="/adm/parmset?action=settable" name="parmform"> |
<input type="hidden" value='' name="pres_value" /> |
<input type="hidden" value="" name="pres_value" /> |
<input type="hidden" value='' name="pres_type" /> |
<input type="hidden" value="" name="pres_type" /> |
<input type="hidden" value='' name="pres_marker" /> |
<input type="hidden" value="" name="pres_marker" /> |
<input type="hidden" value='1' name="prevvisit" /> |
<input type="hidden" value="1" name="prevvisit" /> |
ENDHEAD |
ENDHEAD |
} |
} |
|
|
Line 700 sub print_row {
|
Line 943 sub print_row {
|
my $parm=$$display{$which}; |
my $parm=$$display{$which}; |
|
|
if ($parmlev eq 'full') { |
if ($parmlev eq 'full') { |
$r->print('<td bgcolor='.$defbgtwo.' align="center">' |
$r->print('<td style="background-color:'.$defbgtwo.';" align="center">' |
.$$part{$which}.'</td>'); |
.$$part{$which}.'</td>'); |
} else { |
} else { |
$parm=~s|\[.*\]\s||g; |
$parm=~s|\[.*\]\s||g; |
Line 709 sub print_row {
|
Line 952 sub print_row {
|
if ($automatic) { |
if ($automatic) { |
$parm.='<span class="LC_warning"><br />'.&mt('Automatically sets').' '.join(', ',split(/\:/,$automatic)).'</span>'; |
$parm.='<span class="LC_warning"><br />'.&mt('Automatically sets').' '.join(', ',split(/\:/,$automatic)).'</span>'; |
} |
} |
$r->print('<td bgcolor='.$defbgone.'>'.$parm.'</td>'); |
$r->print('<td>'.$parm.'</td>'); |
|
|
my $thismarker=$which; |
my $thismarker=$which; |
$thismarker=~s/^parameter\_//; |
$thismarker=~s/^parameter\_//; |
Line 786 sub print_row {
|
Line 1029 sub print_row {
|
} |
} |
|
|
} # end of $parmlev if/else |
} # end of $parmlev if/else |
$r->print('<td bgcolor="#CCCCFF" align="center">'.$effective_parm.'</td>'); |
$r->print('<td style="background-color:#CCCCFF;" align="center">'.$effective_parm.'</td>'); |
|
|
if ($parmlev eq 'full') { |
if ($parmlev eq 'full') { |
my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}. |
my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}. |
'.'.$$name{$which},$$symbp{$rid}); |
'.'.$$name{$which},$$symbp{$rid}); |
my $sessionvaltype=$typeoutpar[$result]; |
my $sessionvaltype=$typeoutpar[$result]; |
if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; } |
if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; } |
$r->print('<td bgcolor="#999999" align="center"><font color="#FFFFFF">'. |
$r->print('<td style="background-color:#999999;" align="center"><font color="#FFFFFF">'. |
&valout($sessionval,$sessionvaltype).' '. |
&valout($sessionval,$sessionvaltype).' '. |
'</font></td>'); |
'</font></td>'); |
} |
} |
$r->print('</tr>'); |
|
$r->print("\n"); |
|
} |
} |
|
|
sub print_td { |
sub print_td { |
my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; |
my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; |
$r->print('<td bgcolor='.(($result==$which)?'"#AAFFAA"':$defbg). |
$r->print('<td style="background-color:'.(($result==$which)?'#AAFFAA':$defbg). |
' align="center">'); |
';" align="center">'); |
if ($which<11 || $which > 12) { |
my $nolink = 0; |
$r->print(&plink($$typeoutpar[$which], |
if ($which == 11 || $which == 12) { |
$$display{$value},$$outpar[$which], |
$nolink = 1; |
$mprefix."$which",'parmform.pres','psub')); |
} elsif ($mprefix =~ /availablestudent\&$/) { |
|
if ($which > 3) { |
|
$nolink = 1; |
|
} |
|
} |
|
if ($nolink) { |
|
$r->print(&valout($$outpar[$which],$$typeoutpar[$which])); |
} else { |
} else { |
$r->print(&valout($$outpar[$which],$$typeoutpar[$which])); |
$r->print(&plink($$typeoutpar[$which], |
|
$$display{$value},$$outpar[$which], |
|
$mprefix."$which",'parmform.pres','psub')); |
} |
} |
$r->print('</td>'."\n"); |
$r->print('</td>'."\n"); |
} |
} |
Line 830 sub print_usergroups {
|
Line 1079 sub print_usergroups {
|
my $grp_parm; |
my $grp_parm; |
if (($coursereply) && ($cgroup ne $resultgroup)) { |
if (($coursereply) && ($cgroup ne $resultgroup)) { |
if ($result > 3) { |
if ($result > 3) { |
$bgcolor = '"#AAFFAA"'; |
$bgcolor = '#AAFFAA'; |
$grp_parm = &valout($coursereply,$resulttype); |
$grp_parm = &valout($coursereply,$resulttype); |
} |
} |
$grp_parm = &valout($coursereply,$resulttype); |
$grp_parm = &valout($coursereply,$resulttype); |
$output = '<td bgcolor='.$bgcolor.' align="center">'; |
$output = '<td style="background-color:'.$bgcolor.';" align="center">'; |
if ($resultgroup && $resultlevel) { |
if ($resultgroup && $resultlevel) { |
$output .= '<small><b>'.$resultgroup.'</b> ('.$resultlevel.'): </small>'.$grp_parm; |
$output .= '<small><b>'.$resultgroup.'</b> ('.$resultlevel.'): </small>'.$grp_parm; |
} else { |
} else { |
Line 842 sub print_usergroups {
|
Line 1091 sub print_usergroups {
|
} |
} |
$output .= '</td>'; |
$output .= '</td>'; |
} else { |
} else { |
$output .= '<td bgcolor='.$bgcolor.'> </td>'; |
$output .= '<td style="background-color:'.$bgcolor.';"> </td>'; |
} |
} |
return ($coursereply,$output,$grp_parm,$resultgroup); |
return ($coursereply,$output,$grp_parm,$resultgroup); |
} |
} |
Line 871 sub parm_control_group {
|
Line 1120 sub parm_control_group {
|
return($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype); |
return($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype); |
} |
} |
|
|
=pod |
|
|
|
=item B<extractResourceInformation>: Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes. |
|
|
|
Input: See list below: |
|
|
|
=over 4 |
|
|
|
=item B<ids>: An array that will contain all of the ids in the course. |
|
|
|
=item B<typep>: hash, id->type, where "type" contains the extension of the file, thus, I<problem exam quiz assess survey form>. |
|
|
|
=item B<keyp>: hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id |
|
|
|
=item B<allparms>: hash, name of parameter->display value (what is the display value?) |
|
|
|
=item B<allparts>: hash, part identification->text representation of part, where the text representation is "[Part $part]" |
|
|
|
=item B<allkeys>: hash, full key to part->display value (what's display value?) |
|
|
|
=item B<allmaps>: hash, ??? |
|
|
|
=item B<fcat>: ??? |
|
|
|
=item B<defp>: hash, ??? |
|
|
|
=item B<mapp>: ?? |
|
|
|
=item B<symbp>: hash, id->full sym? |
|
|
|
=back |
|
|
|
=cut |
|
|
|
sub extractResourceInformation { |
sub extractResourceInformation { |
my $ids = shift; |
my $ids = shift; |
my $typep = shift; |
my $typep = shift; |
Line 933 sub extractResourceInformation {
|
Line 1148 sub extractResourceInformation {
|
$$typep{$id}=$1; |
$$typep{$id}=$1; |
$$keyp{$id}=''; |
$$keyp{$id}=''; |
$$uris{$id}=$srcf; |
$$uris{$id}=$srcf; |
foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) { |
foreach my $key (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) { |
if ($_=~/^parameter\_(.*)/) { |
next if ($key!~/^parameter_/); |
my $key=$_; |
|
# Hidden parameters |
# Hidden parameters |
if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 'parm') { |
next if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 'parm'); |
next; |
|
} |
|
my $display= &Apache::lonnet::metadata($srcf,$key.'.display'); |
|
my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); |
|
my $part= &Apache::lonnet::metadata($srcf,$key.'.part'); |
|
# |
# |
# allparms is a hash of parameter names |
# allparms is a hash of parameter names |
# |
# |
my $parmdis = $display; |
my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); |
$parmdis =~ s/\[Part.*$//g; |
if (!exists($$allparms{$name}) || $$allparms{$name} =~ m/^\s*$/ ) { |
$$allparms{$name}=$parmdis; |
my ($display,$parmdis); |
$$defkeytype{$name}=&Apache::lonnet::metadata($srcf,$key.'.type'); |
$display = &standard_parameter_names($name); |
|
if ($display eq '') { |
|
$display= &Apache::lonnet::metadata($srcf,$key.'.display'); |
|
$parmdis = $display; |
|
$parmdis =~ s/\s*\[Part.*$//g; |
|
} else { |
|
$parmdis = $display; |
|
} |
|
$$allparms{$name}=$parmdis; |
|
if (ref($defkeytype)) { |
|
$$defkeytype{$name}= |
|
&Apache::lonnet::metadata($srcf,$key.'.type'); |
|
} |
|
} |
|
|
# |
# |
# allparts is a hash of all parts |
# allparts is a hash of all parts |
# |
# |
$$allparts{$part} = "Part: $part"; |
my $part= &Apache::lonnet::metadata($srcf,$key.'.part'); |
|
$$allparts{$part} = &mt('Part: [_1]',$part); |
# |
# |
# Remember all keys going with this resource |
# Remember all keys going with this resource |
# |
# |
if ($$keyp{$id}) { |
if ($$keyp{$id}) { |
$$keyp{$id}.=','.$key; |
$$keyp{$id}.=','.$key; |
} else { |
} else { |
$$keyp{$id}=$key; |
$$keyp{$id}=$key; |
} |
} |
# |
# |
# Put in order |
# Put in order |
# |
# |
unless ($$keyorder{$key}) { |
unless ($$keyorder{$key}) { |
$$keyorder{$key}=$keyordercnt; |
$$keyorder{$key}=$keyordercnt; |
$keyordercnt++; |
$keyordercnt++; |
} |
|
|
|
} |
} |
} |
} |
$$mapp{$id}= |
|
&Apache::lonnet::declutter($resource->enclosing_map_src()); |
|
$$mapp{$mapid}=$$mapp{$id}; |
if (!exists($$mapp{$mapid})) { |
$$allmaps{$mapid}=$$mapp{$id}; |
$$mapp{$id}= |
if ($mapid eq '1') { |
&Apache::lonnet::declutter($resource->enclosing_map_src()); |
$$maptitles{$mapid}='Main Course Documents'; |
$$mapp{$mapid}=$$mapp{$id}; |
|
$$allmaps{$mapid}=$$mapp{$id}; |
|
if ($mapid eq '1') { |
|
$$maptitles{$mapid}=&mt('Main Course Documents'); |
|
} else { |
|
$$maptitles{$mapid}= |
|
&Apache::lonnet::gettitle($$mapp{$id}); |
|
} |
|
$$maptitles{$$mapp{$id}}=$$maptitles{$mapid}; |
|
$$symbp{$mapid}=$$mapp{$id}.'___(all)'; |
} else { |
} else { |
$$maptitles{$mapid}=&Apache::lonnet::gettitle(&Apache::lonnet::clutter($$mapp{$id})); |
$$mapp{$id} = $$mapp{$mapid}; |
} |
} |
$$maptitles{$$mapp{$id}}=$$maptitles{$mapid}; |
|
$$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf); |
$$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf); |
$$symbp{$mapid}=$$mapp{$id}.'___(all)'; |
|
} |
} |
} |
} |
|
|
Line 1062 sub parmmenu {
|
Line 1292 sub parmmenu {
|
</script> |
</script> |
ENDSCRIPT |
ENDSCRIPT |
$r->print(); |
$r->print(); |
$r->print("\n<table id=\"LC_parm_overview_parm_menu\"><tr>"); |
$r->print("\n".'<table id="LC_parm_overview_parm_menu"><tr>'); |
my $cnt=0; |
my $cnt=0; |
foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) { |
foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) { |
$r->print("\n<td><label><input type='checkbox' name='pscat' "); |
$r->print("\n".'<td><label><input type="checkbox" name="pscat" '); |
$r->print('value="'.$tempkey.'"'); |
$r->print('value="'.$tempkey.'"'); |
if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) { |
if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) { |
$r->print(' checked'); |
$r->print(' checked="checked"'); |
} |
} |
$r->print('>'.$$allparms{$tempkey}.'</label></td>'); |
$r->print(' />'.($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey} |
|
: $tempkey). |
|
'</label></td>'); |
$cnt++; |
$cnt++; |
if ($cnt==3) { |
if ($cnt==3) { |
$r->print("</tr>\n<tr>"); |
$r->print("</tr>\n<tr>"); |
$cnt=0; |
$cnt=0; |
} |
} |
} |
} |
$r->print(' |
$r->print('</tr>' |
</tr><tr id=\"LC_parm_overview_parm_menu_selectors\"><td> |
.'<tr id="LC_parm_overview_parm_menu_selectors">' |
<a href="javascript:checkall(true, \'pscat\')">Select All</a><br /> |
.'<td valign="top">' |
<a href="javascript:checkstandard()">Select Common Only</a> |
.'<fieldset><legend><b>'.&mt('Parameter Selection').'</b></legend>' |
</td><td> |
.'<span class="LC_nobreak">' |
<a href="javascript:checkdates()">Add Problem Dates</a> |
.'• <a href="javascript:checkall(true, \'pscat\')">'.&mt('Select All').'</a>' |
<a href="javascript:checkcontdates()">Add Content Dates</a><br /> |
.'</span>' |
<a href="javascript:checkdisset()">Add Discussion Settings</a> |
.'<br />' |
<a href="javascript:checkvisi()">Add Visibilities</a><br /> |
.'<span class="LC_nobreak">' |
<a href="javascript:checkparts()">Add Part Parameters</a> |
.'• <a href="javascript:checkstandard()">'.&mt('Select Common Only').'</a>' |
</td><td> |
.'</span>' |
<a href="javascript:checkall(false, \'pscat\')">Unselect All</a> |
.'<br />' |
</td> |
.'<span class="LC_nobreak">' |
'); |
.'• <a href="javascript:checkall(false, \'pscat\')">'.&mt('Unselect All').'</a>' |
$r->print('</tr></table>'); |
.'</span>' |
|
.'</fieldset>' |
|
.'</td>' |
|
.'<td colspan="2" valign="top">' |
|
.'<fieldset><legend><b>'.&mt('Add Selection for...').'</b></legend>' |
|
.'<span class="LC_nobreak">' |
|
.'• <a href="javascript:checkdates()">'.&mt('Problem Dates').'</a>' |
|
.'</span>' |
|
.'<span class="LC_nobreak">' |
|
.' • <a href="javascript:checkcontdates()">'.&mt('Content Dates').'</a>' |
|
.'</span>' |
|
# .'<br />' |
|
.'<span class="LC_nobreak">' |
|
.' • <a href="javascript:checkdisset()">'.&mt('Discussion Settings').'</a>' |
|
.'</span>' |
|
.'<span class="LC_nobreak">' |
|
.' • <a href="javascript:checkvisi()">'.&mt('Visibilities').'</a>' |
|
.'</span>' |
|
# .'<br />' |
|
.'<span class="LC_nobreak">' |
|
.' • <a href="javascript:checkparts()">'.&mt('Part Parameters').'</a>' |
|
.'</span>' |
|
.'</fieldset>' |
|
.'</td>' |
|
.'</tr></table>' |
|
); |
} |
} |
|
|
sub partmenu { |
sub partmenu { |
my ($r,$allparts,$psprt)=@_; |
my ($r,$allparts,$psprt)=@_; |
$r->print('<select multiple name="psprt" size="8">'); |
$r->print('<select multiple="multiple" name="psprt" size="8">'); |
$r->print('<option value="all"'); |
$r->print('<option value="all"'); |
$r->print(' selected') unless (@{$psprt}); |
$r->print(' selected="selected"') unless (@{$psprt}); |
$r->print('>'.&mt('All Parts').'</option>'); |
$r->print('>'.&mt('All Parts').'</option>'); |
my %temphash=(); |
my %temphash=(); |
foreach (@{$psprt}) { $temphash{$_}=1; } |
foreach (@{$psprt}) { $temphash{$_}=1; } |
Line 1108 sub partmenu {
|
Line 1365 sub partmenu {
|
unless ($tempkey =~ /\./) { |
unless ($tempkey =~ /\./) { |
$r->print('<option value="'.$tempkey.'"'); |
$r->print('<option value="'.$tempkey.'"'); |
if ($$psprt[0] eq "all" || $temphash{$tempkey}) { |
if ($$psprt[0] eq "all" || $temphash{$tempkey}) { |
$r->print(' selected'); |
$r->print(' selected="selected"'); |
} |
} |
$r->print('>'.$$allparts{$tempkey}.'</option>'); |
$r->print('>'.$$allparts{$tempkey}.'</option>'); |
} |
} |
Line 1121 sub usermenu {
|
Line 1378 sub usermenu {
|
my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. |
my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. |
&Apache::loncommon::selectstudent_link('parmform','uname','udom'); |
&Apache::loncommon::selectstudent_link('parmform','uname','udom'); |
my $selscript=&Apache::loncommon::studentbrowser_javascript(); |
my $selscript=&Apache::loncommon::studentbrowser_javascript(); |
my %lt=&Apache::lonlocal::texthash( |
|
'se' => "Section", |
|
'gr' => "Group", |
|
'fu' => "For User", |
|
'oi' => "or ID", |
|
'ad' => "at Domain" |
|
); |
|
my $sections=''; |
my $sections=''; |
my %sectionhash = &Apache::loncommon::get_sections(); |
my %sectionhash = &Apache::loncommon::get_sections(); |
|
|
my $groups; |
my $groups; |
my %grouphash = &Apache::longroup::coursegroups(); |
my %grouphash = &Apache::longroup::coursegroups(); |
|
|
|
my $g_s_header=''; |
|
my $g_s_footer=''; |
|
|
if (%sectionhash) { |
if (%sectionhash) { |
$sections=$lt{'se'}.': <select name="csec"'; |
$sections=&mt('Section:').' <select name="csec"'; |
if (%grouphash && $parmlev ne 'full') { |
if (%grouphash && $parmlev ne 'full') { |
$sections .= qq| onchange="group_or_section('csec')" |; |
$sections .= qq| onchange="group_or_section('csec')" |; |
} |
} |
Line 1147 sub usermenu {
|
Line 1401 sub usermenu {
|
} |
} |
$sections.='</select>'; |
$sections.='</select>'; |
} |
} |
|
|
if (%sectionhash && %grouphash && $parmlev ne 'full') { |
if (%sectionhash && %grouphash && $parmlev ne 'full') { |
$sections .= ' or '; |
$sections .= ' '.&mt('or').' '; |
$sections .= qq| |
$sections .= qq| |
<script type="text/javascript"> |
<script type="text/javascript"> |
function group_or_section(caller) { |
function group_or_section(caller) { |
Line 1175 function group_or_section(caller) {
|
Line 1430 function group_or_section(caller) {
|
} |
} |
|
|
if (%grouphash) { |
if (%grouphash) { |
$groups=$lt{'gr'}.': <select name="cgroup"'; |
$groups=&mt('Group:').' <select name="cgroup"'; |
if (%sectionhash && $env{'form.action'} eq 'settable') { |
if (%sectionhash && $env{'form.action'} eq 'settable') { |
$groups .= qq| onchange="group_or_section('cgroup')" |; |
$groups .= qq| onchange="group_or_section('cgroup')" |; |
} |
} |
Line 1197 function group_or_section(caller) {
|
Line 1452 function group_or_section(caller) {
|
} |
} |
$groups.='</select>'; |
$groups.='</select>'; |
} |
} |
$r->print(<<ENDMENU); |
|
<b> |
if (%sectionhash || %grouphash) { |
$sections |
$g_s_header='<fieldset><legend>'.&mt('Group/Section').'</legend><div>'; |
$groups |
$g_s_footer='</div></fieldset>'; |
<br /> |
} |
$lt{'fu'} |
|
<input type="text" value="$uname" size="12" name="uname" /> |
$r->print('<b>' |
$lt{'oi'} |
.$g_s_header |
<input type="text" value="$id" size="12" name="id" /> |
.$sections |
$lt{'ad'} |
.$groups |
$chooseopt |
.$g_s_footer |
</b> |
.'<fieldset><legend>'.&mt('User').'</legend><div>' |
ENDMENU |
.&mt('For User [_1] or Student/Employee ID [_2] at Domain [_3]' |
|
,'<input type="text" value="'.$uname.'" size="12" name="uname" />' |
|
,'<input type="text" value="'.$id.'" size="12" name="id" /> ' |
|
,$chooseopt) |
|
.'</div></fieldset>' |
|
.'</b>' |
|
); |
} |
} |
|
|
sub displaymenu { |
sub displaymenu { |
Line 1217 sub displaymenu {
|
Line 1478 sub displaymenu {
|
$r->print('<table border="1"><tr><th>'.&mt('Select Parameters to View').'</th><th>'. |
$r->print('<table border="1"><tr><th>'.&mt('Select Parameters to View').'</th><th>'. |
&mt('Select Parts to View').'</th></tr><tr><td>'); |
&mt('Select Parts to View').'</th></tr><tr><td>'); |
&parmmenu($r,$allparms,$pscat,$keyorder); |
&parmmenu($r,$allparms,$pscat,$keyorder); |
$r->print('</td><td>'); |
$r->print('</td><td valign="top" align="center">'); |
&partmenu($r,$allparts,$psprt); |
&partmenu($r,$allparts,$psprt); |
$r->print('</td></tr></table>'); |
$r->print('</td></tr></table>'); |
} |
} |
Line 1229 sub mapmenu {
|
Line 1490 sub mapmenu {
|
$r->print('<option value="all">'.&mt('All Maps or Folders').'</option>'); |
$r->print('<option value="all">'.&mt('All Maps or Folders').'</option>'); |
foreach (sort {$$allmaps{$a} cmp $$allmaps{$b}} keys %{$allmaps}) { |
foreach (sort {$$allmaps{$a} cmp $$allmaps{$b}} keys %{$allmaps}) { |
$r->print('<option value="'.$_.'"'); |
$r->print('<option value="'.$_.'"'); |
if (($pschp eq $_)) { $r->print(' selected'); } |
if (($pschp eq $_)) { $r->print(' selected="selected"'); } |
$r->print('>'.$$maptitles{$_}.($$allmaps{$_}!~/^uploaded/?' ['.$$allmaps{$_}.']':'').'</option>'); |
$r->print('>'.$$maptitles{$_}.($$allmaps{$_}!~/^uploaded/?' ['.$$allmaps{$_}.']':'').'</option>'); |
} |
} |
$r->print("</select>"); |
$r->print("</select>"); |
Line 1243 sub levelmenu {
|
Line 1504 sub levelmenu {
|
foreach (reverse sort keys %{$alllevs}) { |
foreach (reverse sort keys %{$alllevs}) { |
$r->print('<option value="'.$$alllevs{$_}.'"'); |
$r->print('<option value="'.$$alllevs{$_}.'"'); |
if ($parmlev eq $$alllevs{$_}) { |
if ($parmlev eq $$alllevs{$_}) { |
$r->print(' selected'); |
$r->print(' selected="selected"'); |
} |
} |
$r->print('>'.$_.'</option>'); |
$r->print('>'.&mt($_).'</option>'); |
} |
} |
$r->print("</select>"); |
$r->print("</select>"); |
} |
} |
Line 1256 sub sectionmenu {
|
Line 1517 sub sectionmenu {
|
my %sectionhash = &Apache::loncommon::get_sections(); |
my %sectionhash = &Apache::loncommon::get_sections(); |
return if (!%sectionhash); |
return if (!%sectionhash); |
|
|
$r->print('<select name="Section" multiple="true" size="8" >'); |
$r->print('<select name="Section" multiple="multiple" size="8" >'); |
foreach my $s ('all',sort keys %sectionhash) { |
foreach my $s ('all',sort keys %sectionhash) { |
$r->print(' <option value="'.$s.'"'); |
$r->print(' <option value="'.$s.'"'); |
foreach (@{$selectedsections}) { |
foreach (@{$selectedsections}) { |
if ($s eq $_) { |
if ($s eq $_) { |
$r->print(' selected'); |
$r->print(' selected="selected"'); |
last; |
last; |
} |
} |
} |
} |
Line 1275 sub groupmenu {
|
Line 1536 sub groupmenu {
|
my %grouphash = &Apache::longroup::coursegroups(); |
my %grouphash = &Apache::longroup::coursegroups(); |
return if (!%grouphash); |
return if (!%grouphash); |
|
|
$r->print('<select name="Group" multiple="true" size="8" >'); |
$r->print('<select name="Group" multiple="multiple" size="8" >'); |
foreach my $group (sort(keys(%grouphash))) { |
foreach my $group (sort(keys(%grouphash))) { |
$r->print(' <option value="'.$group.'"'); |
$r->print(' <option value="'.$group.'"'); |
foreach (@{$selectedgroups}) { |
foreach (@{$selectedgroups}) { |
if ($group eq $_) { |
if ($group eq $_) { |
$r->print(' selected'); |
$r->print(' selected="selected"'); |
last; |
last; |
} |
} |
} |
} |
Line 1325 sub sortmenu {
|
Line 1586 sub sortmenu {
|
my ($r,$sortorder)=@_; |
my ($r,$sortorder)=@_; |
$r->print('<br /><label><input type="radio" name="sortorder" value="realmstudent"'); |
$r->print('<br /><label><input type="radio" name="sortorder" value="realmstudent"'); |
if ($sortorder eq 'realmstudent') { |
if ($sortorder eq 'realmstudent') { |
$r->print(' checked="on"'); |
$r->print(' checked="checked"'); |
} |
} |
$r->print(' />'.&mt('Sort by realm first, then student (group/section)')); |
$r->print(' />'.&mt('Sort by realm first, then student (group/section)')); |
$r->print('</label><br /><label><input type="radio" name="sortorder" value="studentrealm"'); |
$r->print('</label><br /><label><input type="radio" name="sortorder" value="studentrealm"'); |
if ($sortorder eq 'studentrealm') { |
if ($sortorder eq 'studentrealm') { |
$r->print(' checked="on"'); |
$r->print(' checked="checked"'); |
} |
} |
$r->print(' />'.&mt('Sort by student (group/section) first, then realm'). |
$r->print(' />'.&mt('Sort by student (group/section) first, then realm'). |
'</label>'); |
'</label>'); |
Line 1359 sub standardkeyorder {
|
Line 1620 sub standardkeyorder {
|
'parameter_0_discusshide' => 20); |
'parameter_0_discusshide' => 20); |
} |
} |
|
|
################################################## |
|
################################################## |
|
|
|
=pod |
|
|
|
=item assessparms |
|
|
|
Show assessment data and parameters. This is a large routine that should |
|
be simplified and shortened... someday. |
|
|
|
Inputs: $r |
|
|
|
Returns: nothing |
|
|
|
Variables used (guessed by Jeremy): |
|
|
|
=over 4 |
|
|
|
=item B<pscat>: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type. |
|
|
|
=item B<psprt>: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts? |
|
|
|
=item B<allmaps>: |
|
|
|
=back |
|
|
|
=cut |
|
|
|
################################################## |
|
################################################## |
|
sub assessparms { |
sub assessparms { |
|
|
my $r=shift; |
my $r=shift; |
Line 1543 sub assessparms {
|
Line 1774 sub assessparms {
|
my @values=split(/\&\&\&/,$env{'form.pres_value'}); |
my @values=split(/\&\&\&/,$env{'form.pres_value'}); |
my @types=split(/\&\&\&/,$env{'form.pres_type'}); |
my @types=split(/\&\&\&/,$env{'form.pres_type'}); |
for (my $i=0;$i<=$#markers;$i++) { |
for (my $i=0;$i<=$#markers;$i++) { |
|
if ($markers[$i] =~ /^[\d.]+\&0_availablestudent\&(1|2|3)$/) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my (@ok_slots,@fail_slots,@del_slots); |
|
my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); |
|
my ($level,@all) = |
|
&parmval_by_symb('0.availablestudent',$pssymb,'',$uname,$udom, |
|
$csec,$cgroup,$courseopt); |
|
foreach my $slot_name (split(/:/,$values[$i])) { |
|
next if ($slot_name eq ''); |
|
if (&update_slots($slot_name,$cdom,$cnum,$pssymb,$uname,$udom) eq 'ok') { |
|
push(@ok_slots,$slot_name); |
|
|
|
} else { |
|
push(@fail_slots,$slot_name); |
|
} |
|
} |
|
if (@ok_slots) { |
|
$values[$i] = join(':',@ok_slots); |
|
} else { |
|
$values[$i] = ''; |
|
} |
|
if ($all[$level] ne '') { |
|
my @existing = split(/:/,$all[$level]); |
|
foreach my $slot_name (@existing) { |
|
if (!grep(/^\Q$slot_name\E$/,split(/:/,$values[$i]))) { |
|
if (&delete_slots($slot_name,$cdom,$cnum,$uname,$udom,$pssymb) eq 'ok') { |
|
push(@del_slots,$slot_name); |
|
} |
|
} |
|
} |
|
} |
|
} |
$message.=&storeparm(split(/\&/,$markers[$i]), |
$message.=&storeparm(split(/\&/,$markers[$i]), |
$values[$i], |
$values[$i], |
$types[$i], |
$types[$i], |
Line 1562 sub assessparms {
|
Line 1826 sub assessparms {
|
foreach ('tolerance','date_default','date_start','date_end', |
foreach ('tolerance','date_default','date_start','date_end', |
'date_interval','int','float','string') { |
'date_interval','int','float','string') { |
$r->print('<input type="hidden" value="'. |
$r->print('<input type="hidden" value="'. |
$env{'form.recent_'.$_}.'" name="recent_'.$_.'" />'); |
&HTML::Entities::encode($env{'form.recent_'.$_},'"&<>'). |
|
'" name="recent_'.$_.'" />'); |
} |
} |
|
|
if (!$pssymb) { |
if (!$pssymb) { |
$r->print('<table border="1"><tr><td>'); |
$r->print('<table border="1"><tr><td>'); |
&levelmenu($r,\%alllevs,$parmlev); |
&levelmenu($r,\%alllevs,$parmlev); |
|
$r->print('</td>'); |
if ($parmlev ne 'general') { |
if ($parmlev ne 'general') { |
$r->print('<td>'); |
$r->print('<td>'); |
&mapmenu($r,\%allmaps,$pschp,\%maptitles); |
&mapmenu($r,\%allmaps,$pschp,\%maptitles); |
$r->print('</td>'); |
$r->print('</td>'); |
} |
} |
$r->print('</td></tr></table>'); |
$r->print('</tr></table>'); |
&displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder); |
&displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder); |
} else { |
} else { |
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); |
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); |
Line 1610 sub assessparms {
|
Line 1876 sub assessparms {
|
$coursespan += 3; |
$coursespan += 3; |
} |
} |
|
|
$r->print('<p><table border=2>'); |
$r->print('<p><table border="2">'); |
$r->print('<tr><td colspan=5></td>'); |
$r->print('<tr><td colspan="5"></td>'); |
$r->print('<th colspan='.($coursespan).'>'.&mt('Any User').'</th>'); |
$r->print('<th colspan="'.($coursespan).'">'.&mt('Any User').'</th>'); |
if ($uname) { |
if ($uname) { |
if (@usersgroups > 1) { |
if (@usersgroups > 1) { |
$userspan ++; |
$userspan ++; |
Line 1638 sub assessparms {
|
Line 1904 sub assessparms {
|
'fr' => 'for Resource' |
'fr' => 'for Resource' |
); |
); |
$r->print(<<ENDTABLETWO); |
$r->print(<<ENDTABLETWO); |
<th rowspan=3>$lt{'pie'}</th> |
<th rowspan="3">$lt{'pie'}</th> |
<th rowspan=3>$lt{'csv'}<br />($csuname $lt{'at'} $csudom)</th> |
<th rowspan="3">$lt{'csv'}<br />($csuname $lt{'at'} $csudom)</th> |
</tr><tr><td colspan=5></td><th colspan=2>$lt{'ic'}</th><th colspan=2>$lt{'rl'}</th> |
</tr><tr><td colspan="5"></td><th colspan="2">$lt{'ic'}</th><th colspan="2">$lt{'rl'}</th> |
<th colspan=1>$lt{'ic'}</th> |
<th colspan="1">$lt{'ic'}</th> |
|
|
ENDTABLETWO |
ENDTABLETWO |
if ($csec) { |
if ($csec) { |
$r->print("<th colspan=3>". |
$r->print('<th colspan="3">'. |
&mt("in Section")." $csec</th>"); |
&mt("in Section")." $csec</th>"); |
} |
} |
if ($cgroup) { |
if ($cgroup) { |
$r->print("<th colspan=3>". |
$r->print('<th colspan="3">'. |
&mt("in Group")." $cgroup</th>"); |
&mt("in Group")." $cgroup</th>"); |
} |
} |
$r->print(<<ENDTABLEHEADFOUR); |
$r->print(<<ENDTABLEHEADFOUR); |
Line 1690 ENDTABLEHEADFOUR
|
Line 1956 ENDTABLEHEADFOUR
|
|| |
|| |
($pssymb && $pssymb eq $symbp{$rid})) { |
($pssymb && $pssymb eq $symbp{$rid})) { |
# ------------------------------------------------------ Entry for one resource |
# ------------------------------------------------------ Entry for one resource |
if ($defbgone eq '"#E0E099"') { |
if ($defbgone eq '#E0E099') { |
$defbgone='"#E0E0DD"'; |
$defbgone='#E0E0DD'; |
} else { |
} else { |
$defbgone='"#E0E099"'; |
$defbgone='#E0E099'; |
} |
} |
if ($defbgtwo eq '"#FFFF99"') { |
if ($defbgtwo eq '#FFFF99') { |
$defbgtwo='"#FFFFDD"'; |
$defbgtwo='#FFFFDD'; |
} else { |
} else { |
$defbgtwo='"#FFFF99"'; |
$defbgtwo='#FFFF99'; |
} |
} |
if ($defbgthree eq '"#FFBB99"') { |
if ($defbgthree eq '#FFBB99') { |
$defbgthree='"#FFBBDD"'; |
$defbgthree='#FFBBDD'; |
} else { |
} else { |
$defbgthree='"#FFBB99"'; |
$defbgthree='#FFBB99'; |
} |
} |
|
|
my $thistitle=''; |
my $thistitle=''; |
Line 1720 ENDTABLEHEADFOUR
|
Line 1986 ENDTABLEHEADFOUR
|
if (grep $_ eq $tempkeyp, @catmarker) { |
if (grep $_ eq $tempkeyp, @catmarker) { |
$part{$_}=&Apache::lonnet::metadata($uri,$_.'.part'); |
$part{$_}=&Apache::lonnet::metadata($uri,$_.'.part'); |
$name{$_}=&Apache::lonnet::metadata($uri,$_.'.name'); |
$name{$_}=&Apache::lonnet::metadata($uri,$_.'.name'); |
$display{$_}=&Apache::lonnet::metadata($uri,$_.'.display'); |
|
unless ($display{$_}) { $display{$_}=''; } |
unless ($display{$_}) { $display{$_}=''; } |
|
my $parmdis=&Apache::lonnet::metadata($uri,$_.'.display'); |
|
if ($allparms{$name{$_}} ne '') { |
|
my $identifier; |
|
if ($parmdis =~ /(\s*\[Part.*)$/) { |
|
$identifier = $1; |
|
} |
|
$display{$_} = $allparms{$name{$_}}.$identifier; |
|
} else { |
|
$display{$_} = $parmdis; |
|
} |
$display{$_}.=' ('.$name{$_}.')'; |
$display{$_}.=' ('.$name{$_}.')'; |
$default{$_}=&Apache::lonnet::metadata($uri,$_); |
$default{$_}=&Apache::lonnet::metadata($uri,$_); |
$type{$_}=&Apache::lonnet::metadata($uri,$_.'.type'); |
$type{$_}=&Apache::lonnet::metadata($uri,$_.'.type'); |
$thistitle=&Apache::lonnet::metadata($uri,$_.'.title'); |
$thistitle=&Apache::lonnet::metadata($uri,$_.'.title'); |
} |
} |
} |
} |
my $totalparms=scalar keys %name; |
my $totalparms=scalar(keys(%name)); |
if ($totalparms>0) { |
if ($totalparms>0) { |
my $firstrow=1; |
my $firstrow=1; |
my $title=&Apache::lonnet::gettitle($symbp{$rid}); |
my $title=&Apache::lonnet::gettitle($symbp{$rid}); |
$r->print('<tr><td bgcolor='.$defbgone. |
$r->print('<tr><td style="background-color:'.$defbgone.';"'. |
' rowspan='.$totalparms. |
' rowspan="'.$totalparms. |
'><tt><font size=-1>'. |
'"><tt><font size="-1">'. |
join(' / ',split(/\//,$uri)). |
join(' / ',split(/\//,$uri)). |
'</font></tt><p><b>'. |
'</font></tt><p><b>'. |
"<a href=\"javascript:openWindow('". |
"<a href=\"javascript:openWindow('". |
Line 1747 ENDTABLEHEADFOUR
|
Line 2022 ENDTABLEHEADFOUR
|
$r->print(' ('.$thistitle.')'); |
$r->print(' ('.$thistitle.')'); |
} |
} |
$r->print('</a></b></td>'); |
$r->print('</a></b></td>'); |
$r->print('<td bgcolor='.$defbgtwo. |
$r->print('<td style="background-color:'.$defbgtwo.';"'. |
' rowspan='.$totalparms.'>'.$typep{$rid}. |
' rowspan="'.$totalparms.'">'.$typep{$rid}. |
'</td>'); |
'</td>'); |
|
|
$r->print('<td bgcolor='.$defbgone. |
$r->print('<td style="background-color:'.$defbgone.';"'. |
' rowspan='.$totalparms. |
' rowspan="'.$totalparms. |
'>'.$maptitles{$mapp{$rid}}.'</td>'); |
'">'.$maptitles{$mapp{$rid}}.'</td>'); |
|
|
foreach (&keysinorder_bytype(\%name,\%keyorder)) { |
foreach (&keysinorder_bytype(\%name,\%keyorder)) { |
unless ($firstrow) { |
unless ($firstrow) { |
Line 1765 ENDTABLEHEADFOUR
|
Line 2040 ENDTABLEHEADFOUR
|
\%type,\%display,$defbgone,$defbgtwo, |
\%type,\%display,$defbgone,$defbgtwo, |
$defbgthree,$parmlev,$uname,$udom,$csec, |
$defbgthree,$parmlev,$uname,$udom,$csec, |
$cgroup,\@usersgroups); |
$cgroup,\@usersgroups); |
|
$print('</tr>'."\n"); |
} |
} |
} |
} |
} |
} |
Line 1774 ENDTABLEHEADFOUR
|
Line 2050 ENDTABLEHEADFOUR
|
} # end of full |
} # end of full |
#--------------------------------------------------- Entry for parm level map |
#--------------------------------------------------- Entry for parm level map |
if ($parmlev eq 'map') { |
if ($parmlev eq 'map') { |
my $defbgone = '"E0E099"'; |
my $defbgone = 'E0E099'; |
my $defbgtwo = '"FFFF99"'; |
my $defbgtwo = 'FFFF99'; |
my $defbgthree = '"FFBB99"'; |
my $defbgthree = 'FFBB99'; |
|
|
my %maplist; |
my %maplist; |
|
|
Line 1827 ENDTABLEHEADFOUR
|
Line 2103 ENDTABLEHEADFOUR
|
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
$part{$tempkeyp}="0"; |
$part{$tempkeyp}="0"; |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
|
if ($allparms{$name{$tempkeyp}} ne '') { |
|
my $identifier; |
|
if ($parmdis =~ /(\s*\[Part.*)$/) { |
|
$identifier = $1; |
|
} |
|
$display{$tempkeyp} = $allparms{$name{$tempkeyp}}.$identifier; |
|
} else { |
|
$display{$tempkeyp} = $parmdis; |
|
} |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
Line 1841 ENDTABLEHEADFOUR
|
Line 2126 ENDTABLEHEADFOUR
|
#---------------------------------------------------- print header information |
#---------------------------------------------------- print header information |
my $foldermap=&mt($maptitle=~/^uploaded/?'Folder':'Map'); |
my $foldermap=&mt($maptitle=~/^uploaded/?'Folder':'Map'); |
my $showtitle=$maptitles{$maptitle}.($maptitle!~/^uploaded/?' ['.$maptitle.']':''); |
my $showtitle=$maptitles{$maptitle}.($maptitle!~/^uploaded/?' ['.$maptitle.']':''); |
$r->print(<<ENDMAPONE); |
my $tmp=""; |
<center><h4> |
|
Set Defaults for All Resources in $foldermap<br /> |
|
<font color="red"><i>$showtitle</i></font><br /> |
|
Specifically for |
|
ENDMAPONE |
|
if ($uname) { |
if ($uname) { |
my $person=&Apache::loncommon::plainname($uname,$udom); |
my $person=&Apache::loncommon::plainname($uname,$udom); |
$r->print(&mt("User")." <font color=\"red\"><i>$uname \($person\) </i></font> ". |
$tmp.=&mt("User")." <font color=\"red\"><i>$uname \($person\) </i></font> ". |
&mt('in')." \n"); |
&mt('in')." \n"; |
} else { |
} else { |
$r->print("<font color=\"red\"><i>".&mt('all').'</i></font> '.&mt('users in')." \n"); |
$tmp.="<font color=\"red\"><i>".&mt('all').'</i></font> '.&mt('users in')." \n"; |
} |
} |
if ($cgroup) { |
if ($cgroup) { |
$r->print(&mt("Group")." <font color=\"red\"><i>$cgroup". |
$tmp.=&mt("Group")." <font color=\"red\"><i>$cgroup". |
"</i></font> ".&mt('of')." \n"); |
"</i></font> ".&mt('of')." \n"; |
$csec = ''; |
$csec = ''; |
} elsif ($csec) { |
} elsif ($csec) { |
$r->print(&mt("Section")." <font color=\"red\"><i>$csec". |
$tmp.=&mt("Section")." <font color=\"red\"><i>$csec". |
"</i></font> ".&mt('of')." \n"); |
"</i></font> ".&mt('of')." \n"; |
} |
} |
$r->print("<font color=\"red\"><i>$coursename</i></font><br />"); |
$r->print('<div align="center"><h4>' |
$r->print("</h4>\n"); |
.&mt('Set Defaults for All Resources in [_1]Specifically for [_2][_3]' |
|
,$foldermap.'<br /><font color="red"><i>'.$showtitle.'</i></font><br />' |
|
,$tmp |
|
,'<font color="red"><i>'.$coursename.'</i></font>' |
|
) |
|
."<br /></h4>\n" |
|
); |
#---------------------------------------------------------------- print table |
#---------------------------------------------------------------- print table |
$r->print('<p><table border="2">'); |
$r->print('<p>'..&Apache::loncommon::start_data_table(). |
$r->print('<tr><th>'.&mt('Parameter Name').'</th>'); |
&Apache::loncommon::start_data_table_header_row(). |
$r->print('<th>'.&mt('Default Value').'</th>'); |
'<tr><th>'.&mt('Parameter Name').'</th>'. |
$r->print('<th>'.&mt('Parameter in Effect').'</th></tr>'); |
'<th>'.&mt('Default Value').'</th>'. |
|
'<th>'.&mt('Parameter in Effect').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row()); |
|
|
foreach (&keysinorder(\%name,\%keyorder)) { |
foreach (&keysinorder(\%name,\%keyorder)) { |
$r->print('<tr>'); |
$r->print(&Apache::loncommon::start_data_table_row()); |
&print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, |
&print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, |
\%type,\%display,$defbgone,$defbgtwo,$defbgthree, |
\%type,\%display,$defbgone,$defbgtwo,$defbgthree, |
$parmlev,$uname,$udom,$csec,$cgroup); |
$parmlev,$uname,$udom,$csec,$cgroup); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print("</table></center>"); |
$r->print(&Apache::loncommon::end_data_table().'</p></div>'); |
} # end each map |
} # end each map |
} # end of $parmlev eq map |
} # end of $parmlev eq map |
#--------------------------------- Entry for parm level general (Course level) |
#--------------------------------- Entry for parm level general (Course level) |
if ($parmlev eq 'general') { |
if ($parmlev eq 'general') { |
my $defbgone = '"E0E099"'; |
my $defbgone = 'E0E099'; |
my $defbgtwo = '"FFFF99"'; |
my $defbgtwo = 'FFFF99'; |
my $defbgthree = '"FFBB99"'; |
my $defbgthree = 'FFBB99'; |
|
|
#-------------------------------------------- for each map, gather information |
#-------------------------------------------- for each map, gather information |
my $mapid="0.0"; |
my $mapid="0.0"; |
Line 1914 ENDMAPONE
|
Line 2203 ENDMAPONE
|
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
$part{$tempkeyp}="0"; |
$part{$tempkeyp}="0"; |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
|
if ($allparms{$name{$tempkeyp}} ne '') { |
|
my $identifier; |
|
if ($parmdis =~ /(\s*\[Part.*)$/) { |
|
$identifier = $1; |
|
} |
|
$display{$tempkeyp} = $allparms{$name{$tempkeyp}}.$identifier; |
|
} else { |
|
$display{$tempkeyp} = $parmdis; |
|
} |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
Line 1927 ENDMAPONE
|
Line 2225 ENDMAPONE
|
#---------------------------------------------------- print header information |
#---------------------------------------------------- print header information |
my $setdef=&mt("Set Defaults for All Resources in Course"); |
my $setdef=&mt("Set Defaults for All Resources in Course"); |
$r->print(<<ENDMAPONE); |
$r->print(<<ENDMAPONE); |
<center><h4>$setdef |
<center> |
|
<h4>$setdef |
<font color="red"><i>$coursename</i></font><br /> |
<font color="red"><i>$coursename</i></font><br /> |
ENDMAPONE |
ENDMAPONE |
if ($uname) { |
if ($uname) { |
Line 1941 ENDMAPONE
|
Line 2240 ENDMAPONE
|
if ($cgroup) {$r->print(&mt("Group")."<font color=\"red\"> <i>$cgroup</i></font>\n")}; |
if ($cgroup) {$r->print(&mt("Group")."<font color=\"red\"> <i>$cgroup</i></font>\n")}; |
$r->print("</h4>\n"); |
$r->print("</h4>\n"); |
#---------------------------------------------------------------- print table |
#---------------------------------------------------------------- print table |
$r->print('<p><table border="2">'); |
$r->print('<p>'.&Apache::loncommon::start_data_table(). |
$r->print('<tr><th>'.&mt('Parameter Name').'</th>'); |
&Apache::loncommon::start_data_table_header_row(). |
$r->print('<th>'.&mt('Default Value').'</th>'); |
'<th>'.&mt('Parameter Name').'</th>'. |
$r->print('<th>'.&mt('Parameter in Effect').'</th></tr>'); |
'<th>'.&mt('Default Value').'</th>'. |
|
'<th>'.&mt('Parameter in Effect').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row()); |
|
|
foreach (&keysinorder(\%name,\%keyorder)) { |
foreach (&keysinorder(\%name,\%keyorder)) { |
$r->print('<tr>'); |
$r->print(&Apache::loncommon::start_data_table_row()); |
&print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, |
&print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, |
\%type,\%display,$defbgone,$defbgtwo,$defbgthree, |
\%type,\%display,$defbgone,$defbgtwo,$defbgthree, |
$parmlev,$uname,$udom,$csec,$cgroup); |
$parmlev,$uname,$udom,$csec,$cgroup); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print("</table></center>"); |
$r->print(&Apache::loncommon::end_data_table().'</p></center>'); |
} # end of $parmlev eq general |
} # end of $parmlev eq general |
} |
} |
$r->print('</form>'.&Apache::loncommon::end_page()); |
$r->print('</form>'.&Apache::loncommon::end_page()); |
Line 1960 ENDMAPONE
|
Line 2262 ENDMAPONE
|
|
|
|
|
################################################## |
################################################## |
################################################## |
|
|
|
=pod |
|
|
|
=item crsenv |
|
|
|
Show and set course data and parameters. This is a large routine that should |
|
be simplified and shortened... someday. |
|
|
|
Inputs: $r |
|
|
|
Returns: nothing |
|
|
|
=cut |
|
|
|
################################################## |
|
################################################## |
|
sub crsenv { |
|
my $r=shift; |
|
my $setoutput=''; |
|
|
|
my $breadcrumbs = |
|
&Apache::lonhtmlcommon::breadcrumbs('Edit Course Environment'); |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
|
|
# |
|
# Go through list of changes |
|
foreach (keys %env) { |
|
next if ($_!~/^form\.(.+)\_setparmval$/); |
|
my $name = $1; |
|
my $value = $env{'form.'.$name.'_value'}; |
|
if ($name eq 'newp') { |
|
$name = $env{'form.newp_name'}; |
|
} |
|
if ($name eq 'url') { |
|
$value=~s/^\/res\///; |
|
my $bkuptime=time; |
|
my @tmp = &Apache::lonnet::get |
|
('environment',['url'],$dom,$crs); |
|
$setoutput.=&mt('Backing up previous URL').': '. |
|
&Apache::lonnet::put |
|
('environment', |
|
{'top level map backup '.$bkuptime => $tmp[1] }, |
|
$dom,$crs). |
|
'<br />'; |
|
} |
|
# |
|
# Deal with modified default spreadsheets |
|
if ($name =~ /^spreadsheet_default_(classcalc| |
|
studentcalc| |
|
assesscalc)$/x) { |
|
my $sheettype = $1; |
|
if ($sheettype eq 'classcalc') { |
|
# no need to do anything since viewing the sheet will |
|
# cause it to be updated. |
|
} elsif ($sheettype eq 'studentcalc') { |
|
# expire all the student spreadsheets |
|
&Apache::lonnet::expirespread('','','studentcalc'); |
|
} else { |
|
# expire all the assessment spreadsheets |
|
# this includes non-default spreadsheets, but better to |
|
# be safe than sorry. |
|
&Apache::lonnet::expirespread('','','assesscalc'); |
|
# expire all the student spreadsheets |
|
&Apache::lonnet::expirespread('','','studentcalc'); |
|
} |
|
} |
|
# |
|
# Deal with the enrollment dates |
|
if ($name =~ /^default_enrollment_(start|end)_date$/) { |
|
$value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value'); |
|
} |
|
# Get existing cloners |
|
my @oldcloner = (); |
|
if ($name eq 'cloners') { |
|
my %clonenames=&Apache::lonnet::dump('environment',$dom,$crs,'cloners'); |
|
if ($clonenames{'cloners'} =~ /,/) { |
|
@oldcloner = split/,/,$clonenames{'cloners'}; |
|
} else { |
|
$oldcloner[0] = $clonenames{'cloners'}; |
|
} |
|
} |
|
# |
|
# 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); |
|
if ($put_result eq 'ok') { |
|
$setoutput.=&mt('Set').' <b>'.$name.'</b> '.&mt('to').' <b>'.$value.'</b>.<br />'; |
|
if ($name eq 'cloners') { |
|
&change_clone($value,\@oldcloner); |
|
} |
|
# Flush the course logs so course description is immediately updated |
|
if ($name eq 'description' && defined($value)) { |
|
&Apache::lonnet::flushcourselogs(); |
|
} |
|
} else { |
|
$setoutput.=&mt('Unable to set').' <b>'.$name.'</b> '.&mt('to'). |
|
' <b>'.$value.'</b> '.&mt('due to').' '.$put_result.'.<br />'; |
|
} |
|
if (($name eq 'cloners') && ($failed_cloners)) { |
|
$setoutput.= &mt('Unable to include').' - <b>'.$failed_cloners.'</b>, '. |
|
&mt('reason').' - '.&mt('LON-CAPA user(s) do(es) not exist'). |
|
'.<br />'.&mt('Please '). |
|
' <a href="/adm/createuser">'. |
|
&mt('add the user(s)').'</a>, '. |
|
&mt('and then return to the '). |
|
'<a href="/admparmset?action=crsenv">'. |
|
&mt('Course Parameters page').'</a> '. |
|
&mt('to add the new user(s) to the list of possible cloners'). |
|
'.<br />'; |
|
} |
|
} |
|
} |
|
|
|
my $start_table =&Apache::loncommon::start_data_table(); |
|
my $start_header_row=&Apache::loncommon::start_data_table_header_row(); |
|
my $end_header_row =&Apache::loncommon::end_data_table_header_row(); |
|
# ------------------------- Re-init course environment entries for this session |
|
|
|
&Apache::lonnet::coursedescription($env{'request.course.id'}, |
|
{'freshen_cache' => 1}); |
|
|
|
# -------------------------------------------------------- Get parameters again |
|
|
|
my %values=&Apache::lonnet::dump('environment',$dom,$crs); |
|
my $SelectStyleFile=&mt('Select Style File'); |
|
my $SelectSpreadsheetFile=&mt('Select Spreadsheet File'); |
|
my $output=''; |
|
if (! exists($values{'con_lost'})) { |
|
my %descriptions= |
|
('url' => '<b>'.&mt('Top Level Map').'</b> '. |
|
'<a href="javascript:openbrowser'. |
|
"('envform','url','sequence')\">". |
|
&mt('Select Map').'</a><br /><span class="LC_warning"> '. |
|
&mt('Modification may make assessment data inaccessible'). |
|
'</span>', |
|
'description' => '<b>'.&mt('Course Description').'</b>', |
|
'courseid' => '<b>'.&mt('Course ID or number'). |
|
'</b><br />'. |
|
'('.&mt('internal').', '.&mt('optional').')', |
|
'cloners' => '<b>'.&mt('Users allowed to clone course').'</b><br /><tt>(user:domain,user:domain)</tt><br />'.&mt('Users with active Course Coordinator role in the course automatically have the right to clone it, and can be omitted from list.'), |
|
'grading' => '<b>'.&mt('Grading').'</b><br />'. |
|
'<tt>"standard", "external", or "spreadsheet"</tt> '.&Apache::loncommon::help_open_topic('GradingOptions'), |
|
'default_xml_style' => '<b>'.&mt('Default XML Style File').'</b> '. |
|
'<a href="javascript:openbrowser'. |
|
"('envform','default_xml_style'". |
|
",'sty')\">$SelectStyleFile</a><br />", |
|
'question.email' => '<b>'.&mt('Feedback Addresses for Resource Content Question'). |
|
'</b><br />(<tt>user:domain,'. |
|
'user:domain(section;section;...;*;...),...</tt>)', |
|
'comment.email' => '<b>'.&mt('Feedback Addresses for Course Content Comments').'</b><br />'. |
|
'(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)', |
|
'policy.email' => '<b>'.&mt('Feedback Addresses for Course Policy').'</b>'. |
|
'<br />(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)', |
|
'hideemptyrows' => '<b>'.&mt('Hide Empty Rows in Spreadsheets').'</b><br />'. |
|
'('.&mt('"[_1]" for default hiding','<tt>yes</tt>').')', |
|
'pageseparators' => '<b>'.&mt('Visibly Separate Items on Pages').'</b><br />'. |
|
'('.&mt('"[_1]" for visible separation','<tt>yes</tt>').', '. |
|
&mt('changes will not show until next login').')', |
|
'student_classlist_view' => '<b>'.&mt('Allow students to view classlist.').'</b>'.&mt('("all":students can view all sections,"section":students can only view their own section.blank or "disabled" prevents student view.'), |
|
|
|
'plc.roles.denied'=> '<b>'.&mt('Disallow live chatroom use for Roles'). |
|
'</b><br />"<tt>st</tt>": '. |
|
&mt('student').', "<tt>ta</tt>": '. |
|
'TA, "<tt>in</tt>": '. |
|
&mt('instructor').';<br /><tt>'.&mt('role,role,...').'</tt>) '. |
|
Apache::loncommon::help_open_topic("Course_Disable_Discussion"), |
|
'plc.users.denied' => |
|
'<b>'.&mt('Disallow live chatroom use for Users').'</b><br />'. |
|
'(<tt>user:domain,user:domain,...</tt>)', |
|
|
|
'pch.roles.denied'=> '<b>'.&mt('Disallow Resource Discussion for Roles'). |
|
'</b><br />"<tt>st</tt>": '. |
|
'student, "<tt>ta</tt>": '. |
|
'TA, "<tt>in</tt>": '. |
|
'instructor;<br /><tt>role,role,...</tt>) '. |
|
Apache::loncommon::help_open_topic("Course_Disable_Discussion"), |
|
'pch.users.denied' => |
|
'<b>'.&mt('Disallow Resource Discussion for Users').'</b><br />'. |
|
'(<tt>user:domain,user:domain,...</tt>)', |
|
'spreadsheet_default_classcalc' |
|
=> '<b>'.&mt('Default Course Spreadsheet').'</b> '. |
|
'<a href="javascript:openbrowser'. |
|
"('envform','spreadsheet_default_classcalc'". |
|
",'spreadsheet')\">$SelectSpreadsheetFile</a><br />", |
|
'spreadsheet_default_studentcalc' |
|
=> '<b>'.&mt('Default Student Spreadsheet').'</b> '. |
|
'<a href="javascript:openbrowser'. |
|
"('envform','spreadsheet_default_calc'". |
|
",'spreadsheet')\">$SelectSpreadsheetFile</a><br />", |
|
'spreadsheet_default_assesscalc' |
|
=> '<b>'.&mt('Default Assessment Spreadsheet').'</b> '. |
|
'<a href="javascript:openbrowser'. |
|
"('envform','spreadsheet_default_assesscalc'". |
|
",'spreadsheet')\">$SelectSpreadsheetFile</a><br />", |
|
'allow_limited_html_in_feedback' |
|
=> '<b>'.&mt('Allow limited HTML in discussion posts').'</b><br />'. |
|
'('.&mt('Set value to "[_1]" to allow',"<tt>yes</tt>").')', |
|
'allow_discussion_post_editing' |
|
=> '<b>'.&mt('Allow users with specified roles to edit/delete their own discussion posts').'</b><br />"<tt>st</tt>": '. |
|
&mt('student').', "<tt>ta</tt>": '. |
|
'TA, "<tt>in</tt>": '. |
|
&mt('instructor').'; (<tt>'.&mt('role:section,role:section,..., e.g., st:001,st:002,in,cc would permit students in sections 001 and 002 and instructors in any section, and course coordinators to edit their own posts.').'</tt>)<br />'. |
|
'('.&mt('or set value to "[_1]" to allow all roles',"<tt>yes</tt>").')', |
|
'rndseed' |
|
=> '<b>'.&mt('Randomization algorithm used').'</b> <br />'. |
|
'<span class="LC_error">'.&mt('Modifying this will make problems').' '. |
|
&mt('have different numbers and answers').'</span>', |
|
'receiptalg' |
|
=> '<b>'.&mt('Receipt algorithm used').'</b> <br />'. |
|
&mt('This controls how receipt numbers are generated.'), |
|
'suppress_tries' |
|
=> '<b>'.&mt('Suppress number of tries in printing').'</b><br />'. |
|
' ('.&mt('"[_1]" to suppress, anything else to not suppress','<tt>yes</tt>').')', |
|
'problem_stream_switch' |
|
=> '<b>'.&mt('Allow problems to be split over pages').'</b><br />'. |
|
' ('.&mt('"[_1]" if allowed, anything else if not','<tt>yes</tt>').')', |
|
'default_paper_size' |
|
=> '<b>'.&mt('Default paper type').'</b><br />'. |
|
' ('.&mt('supported types').': Letter [8 1/2x11 in], Legal [8 1/2x14 in],'. |
|
' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'. |
|
' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])', |
|
'print_header_format' |
|
=> '<b>Print header format; substitutions: %n student name %c course id %a assignment', |
|
'anonymous_quiz' |
|
=> '<b>'.&mt('Anonymous quiz/exam').'</b><br />'. |
|
' (<tt><b>'.&mt('yes').'</b> '.&mt('to avoid print students names').' </tt>)', |
|
'default_enrollment_start_date' => '<b>'.&mt('Default beginning date for student access.').'</b>', |
|
'default_enrollment_end_date' => '<b>'.&mt('Default ending date for student access.').'</b>', |
|
'nothideprivileged' => '<b>'.&mt('Privileged users that should not be hidden on staff listings').'</b>'. |
|
'<br />(<tt>user:domain,user:domain,...</tt>)', |
|
'languages' => '<b>'.&mt('Languages used').'</b>', |
|
'disable_receipt_display' |
|
=> '<b>'.&mt('Disable display of problem receipts').'</b><br />'. |
|
' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')', |
|
'task_messages' |
|
=> '<b>'.&mt('Send message to student when clicking Done on Tasks. [_1] to send a message only to student, [_2] to send message to student and add record to user information page for instructors. Leave blank to disable.','<tt>only_student</tt>','<tt>student_and_user_notes_screen</tt>').'</b>', |
|
'disablesigfigs' |
|
=> '<b>'.&mt('Disable checking of Significant Figures').'</b><br />'. |
|
' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')', |
|
'disableexampointprint' |
|
=> '<b>'.&mt('Disable automatically printing point values onto exams.').'</b><br />'. |
|
' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')', |
|
'externalsyllabus' |
|
=> '<b>'.&mt('URL of Syllabus (not using internal handler)').'</b>', |
|
'tthoptions' |
|
=> '<b>'.&mt('Default set of options to pass to tth/m when converting tex').'</b>' |
|
); |
|
my @Display_Order = ('url','description','courseid','cloners','grading', |
|
'externalsyllabus', |
|
'default_xml_style','pageseparators', |
|
'question.email','comment.email','policy.email', |
|
'student_classlist_view', |
|
'plc.roles.denied','plc.users.denied', |
|
'pch.roles.denied','pch.users.denied', |
|
'allow_limited_html_in_feedback', |
|
'allow_discussion_post_editing', |
|
'languages', |
|
'nothideprivileged', |
|
'rndseed', |
|
'receiptalg', |
|
'problem_stream_switch', |
|
'suppress_tries', |
|
'default_paper_size', |
|
'print_header_format', |
|
'disable_receipt_display', |
|
'spreadsheet_default_classcalc', |
|
'spreadsheet_default_studentcalc', |
|
'spreadsheet_default_assesscalc', |
|
'hideemptyrows', |
|
'default_enrollment_start_date', |
|
'default_enrollment_end_date', |
|
'tthoptions', |
|
'disablesigfigs', |
|
'disableexampointprint', |
|
'task_messages' |
|
); |
|
foreach my $parameter (sort(keys(%values))) { |
|
unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./)) { |
|
if (! $descriptions{$parameter}) { |
|
$descriptions{$parameter}=$parameter; |
|
push(@Display_Order,$parameter); |
|
} |
|
} |
|
} |
|
|
|
foreach my $parameter (@Display_Order) { |
|
my $description = $descriptions{$parameter}; |
|
# onchange is javascript to automatically check the 'Set' button. |
|
my $onchange = 'onFocus="javascript:window.document.forms'. |
|
"['envform'].elements['".$parameter."_setparmval']". |
|
'.checked=true;"'; |
|
$output .= &Apache::loncommon::start_data_table_row(). |
|
'<td>'.$description.'</td>'; |
|
if ($parameter =~ /^default_enrollment_(start|end)_date$/) { |
|
$output .= '<td>'. |
|
&Apache::lonhtmlcommon::date_setter('envform', |
|
$parameter.'_value', |
|
$values{$parameter}, |
|
$onchange). |
|
'</td>'; |
|
} else { |
|
$output .= '<td>'. |
|
&Apache::lonhtmlcommon::textbox($parameter.'_value', |
|
$values{$parameter}, |
|
40,$onchange).'</td>'; |
|
} |
|
$output .= '<td>'. |
|
&Apache::lonhtmlcommon::checkbox($parameter.'_setparmval'). |
|
'</td>'; |
|
$output .= &Apache::loncommon::end_data_table_row()."\n"; |
|
} |
|
my $onchange = 'onFocus="javascript:window.document.forms'. |
|
'[\'envform\'].elements[\'newp_setparmval\']'. |
|
'.checked=true;"'; |
|
$output.=&Apache::loncommon::start_data_table_row(). |
|
'<td><i>'.&mt('Create New Environment Variable').'</i><br />'. |
|
'<input type="text" size=40 name="newp_name" '. |
|
$onchange.' /></td><td>'. |
|
'<input type="text" size=40 name="newp_value" '. |
|
$onchange.' /></td><td>'. |
|
'<input type="checkbox" name="newp_setparmval" /></td>'. |
|
&Apache::loncommon::end_data_table_row()."\n"; |
|
} |
|
my %lt=&Apache::lonlocal::texthash( |
|
'par' => 'Parameter', |
|
'val' => 'Value', |
|
'set' => 'Set', |
|
'sce' => 'Set Course Environment' |
|
); |
|
|
|
my $Parameter=&mt('Parameter'); |
|
my $Value=&mt('Value'); |
|
my $Set=&mt('Set'); |
|
my $browse_js= |
|
'<script type="text/javascript" language="Javascript">'. |
|
&Apache::loncommon::browser_and_searcher_javascript('parmset'). |
|
'</script>'; |
|
|
|
my $start_page = |
|
&Apache::loncommon::start_page('Set Course Environment', |
|
$browse_js); |
|
my $end_page = |
|
&Apache::loncommon::end_page(); |
|
my $end_table=&Apache::loncommon::end_data_table(); |
|
$r->print(<<ENDENV); |
|
$start_page |
|
$breadcrumbs |
|
<form method="post" action="/adm/parmset?action=crsenv" name="envform"> |
|
$setoutput |
|
$start_table |
|
$start_header_row |
|
<th>$lt{'par'}</th><th>$lt{'val'}</th><th>$lt{'set'}?</th> |
|
$end_header_row |
|
$output |
|
$end_table |
|
<input type="submit" name="crsenv" value="$lt{'sce'}"> |
|
</form> |
|
$end_page |
|
ENDENV |
|
} |
|
################################################## |
|
# Overview mode |
# Overview mode |
################################################## |
################################################## |
my $tableopen; |
my $tableopen; |
Line 2363 sub readdata {
|
Line 2293 sub readdata {
|
|
|
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
foreach (keys %$classlist) { |
foreach (keys %$classlist) { |
# the following undefs are for 'domain', and 'username' respectively. |
if ($_=~/^($match_username)\:($match_domain)$/) { |
if ($_=~/^(\w+)\:(\w+)$/) { |
|
my ($tuname,$tudom)=($1,$2); |
my ($tuname,$tudom)=($1,$2); |
my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom); |
my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom); |
foreach my $userkey (keys %{$useropt}) { |
foreach my $userkey (keys %{$useropt}) { |
Line 2400 sub storedata {
|
Line 2329 sub storedata {
|
if ($tuname) { |
if ($tuname) { |
$tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./; |
$tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./; |
} |
} |
if ($cmd eq 'set') { |
if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') { |
my $data=$env{$_}; |
my ($data, $typeof, $text); |
my $typeof=$env{'form.typeof_'.$thiskey}; |
if ($cmd eq 'set') { |
if ($$olddata{$thiskey} ne $data) { |
$data=$env{$_}; |
|
$typeof=$env{'form.typeof_'.$thiskey}; |
|
$text = &mt('Saved modified parameter for'); |
|
} elsif ($cmd eq 'datepointer') { |
|
$data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); |
|
$typeof=$env{'form.typeof_'.$thiskey}; |
|
$text = &mt('Saved modified date for'); |
|
} elsif ($cmd eq 'dateinterval') { |
|
$data=&get_date_interval_from_form($thiskey); |
|
$typeof=$env{'form.typeof_'.$thiskey}; |
|
$text = &mt('Saved modified date for'); |
|
} |
|
if (defined($data) and $$olddata{$thiskey} ne $data) { |
if ($tuname) { |
if ($tuname) { |
if (&Apache::lonnet::put('resourcedata',{$tkey=>$data, |
if (&Apache::lonnet::put('resourcedata',{$tkey=>$data, |
$tkey.'.type' => $typeof}, |
$tkey.'.type' => $typeof}, |
$tudom,$tuname) eq 'ok') { |
$tudom,$tuname) eq 'ok') { |
&log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom); |
&log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom); |
$r->print('<br />'.&mt('Stored modified parameter for').' '. |
$r->print('<br />'.$text.' '. |
&Apache::loncommon::plainname($tuname,$tudom)); |
&Apache::loncommon::plainname($tuname,$tudom)); |
} else { |
} else { |
$r->print('<div class="LC_error">'. |
$r->print('<div class="LC_error">'. |
&mt('Error storing parameters').'</div>'); |
&mt('Error saving parameters').'</div>'); |
} |
} |
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
} else { |
} else { |
Line 2434 sub storedata {
|
Line 2375 sub storedata {
|
} else { |
} else { |
push (@deldata,$thiskey,$thiskey.'.type'); |
push (@deldata,$thiskey,$thiskey.'.type'); |
} |
} |
} elsif ($cmd eq 'datepointer') { |
|
my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); |
|
my $typeof=$env{'form.typeof_'.$thiskey}; |
|
if (defined($data) and $$olddata{$thiskey} ne $data) { |
|
if ($tuname) { |
|
if (&Apache::lonnet::put('resourcedata',{$tkey=>$data, |
|
$tkey.'.type' => $typeof}, |
|
$tudom,$tuname) eq 'ok') { |
|
&log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom); |
|
$r->print('<br />'.&mt('Stored modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom)); |
|
} else { |
|
$r->print('<div class="LC_error">'. |
|
&mt('Error storing parameters').'</div>'); |
|
} |
|
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
|
} else { |
|
$newdata{$thiskey}=$data; |
|
$newdata{$thiskey.'.type'}=$typeof; |
|
} |
|
} |
|
} |
} |
} |
} |
} |
} |
Line 2475 sub storedata {
|
Line 2396 sub storedata {
|
if ($putentries) { |
if ($putentries) { |
if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') { |
if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') { |
&log_parmset(\%newdata,0); |
&log_parmset(\%newdata,0); |
$r->print('<h3>'.&mt('Stored [_1] parameter(s)',$putentries/2).'</h3>'); |
$r->print('<h3>'.&mt('Saved [_1] parameter(s)',$putentries/2).'</h3>'); |
} else { |
} else { |
$r->print('<div class="LC_error">'. |
$r->print('<div class="LC_error">'. |
&mt('Error storing parameters').'</div>'); |
&mt('Error saving parameters').'</div>'); |
} |
} |
&Apache::lonnet::devalidatecourseresdata($crs,$dom); |
&Apache::lonnet::devalidatecourseresdata($crs,$dom); |
} |
} |
Line 2486 sub storedata {
|
Line 2407 sub storedata {
|
|
|
sub extractuser { |
sub extractuser { |
my $key=shift; |
my $key=shift; |
return ($key=~/^$env{'request.course.id'}.\[useropt\:(\w+)\:(\w+)\]\./); |
return ($key=~/^$env{'request.course.id'}.\[useropt\:($match_username)\:($match_domain)\]\./); |
|
} |
|
|
|
sub parse_listdata_key { |
|
my ($key,$listdata) = @_; |
|
# split into student/section affected, and |
|
# the realm (folder/resource part and parameter |
|
my ($student,$realm) = |
|
($key=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)$/); |
|
# if course wide student would be undefined |
|
if (!defined($student)) { |
|
($realm)=($key=~/^\Q$env{'request.course.id'}\E\.(.+)$/); |
|
} |
|
# strip off the .type if it's not the Question type parameter |
|
if ($realm=~/\.type$/ && !exists($listdata->{$key.'.type'})) { |
|
$realm=~s/\.type//; |
|
} |
|
# split into resource+part and parameter name |
|
my ($res, $parm) = ($realm=~/^(.*)\.(.*)$/); |
|
($res, my $part) = ($res =~/^(.*)\.(.*)$/); |
|
return ($student,$res,$part,$parm); |
} |
} |
|
|
sub listdata { |
sub listdata { |
Line 2500 sub listdata {
|
Line 2441 sub listdata {
|
$tableopen=0; |
$tableopen=0; |
my $foundkeys=0; |
my $foundkeys=0; |
my %keyorder=&standardkeyorder(); |
my %keyorder=&standardkeyorder(); |
|
|
foreach my $thiskey (sort { |
foreach my $thiskey (sort { |
|
my ($astudent,$ares,$apart,$aparm) = &parse_listdata_key($a,$listdata); |
|
my ($bstudent,$bres,$bpart,$bparm) = &parse_listdata_key($b,$listdata); |
|
|
|
# get the numerical order for the param |
|
$aparm=$keyorder{'parameter_0_'.$aparm}; |
|
$bparm=$keyorder{'parameter_0_'.$bparm}; |
|
|
|
my $result=0; |
|
|
if ($sortorder eq 'realmstudent') { |
if ($sortorder eq 'realmstudent') { |
my ($astudent,$arealm)=($a=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)\.[^\.]+$/); |
if ($ares ne $bres ) { |
my ($bstudent,$brealm)=($b=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)\.[^\.]+$/); |
$result = ($ares cmp $bres); |
if (!defined($astudent)) { |
} elsif ($astudent ne $bstudent) { |
($arealm)=($a=~/^\Q$env{'request.course.id'}\E\.(.+)$/); |
$result = ($astudent cmp $bstudent); |
} |
} elsif ($apart ne $bpart ) { |
if (!defined($bstudent)) { |
$result = ($apart cmp $bpart); |
($brealm)=($b=~/^\Q$env{'request.course.id'}\E\.(.+)$/); |
|
} |
|
$arealm=~s/\.type//; |
|
my ($ares, $aparm) = ($arealm=~/^(.*)\.(.*)$/); |
|
$aparm=$keyorder{'parameter_0_'.$aparm}; |
|
$brealm=~s/\.type//; |
|
my ($bres, $bparm) = ($brealm=~/^(.*)\.(.*)$/); |
|
$bparm=$keyorder{'parameter_0_'.$bparm}; |
|
if ($ares eq $bres) { |
|
if (defined($aparm) && defined($bparm)) { |
|
($aparm <=> $bparm); |
|
} elsif (defined($aparm)) { |
|
-1; |
|
} elsif (defined($bparm)) { |
|
1; |
|
} else { |
|
($arealm cmp $brealm) || ($astudent cmp $bstudent); |
|
} |
|
} else { |
|
($arealm cmp $brealm) || ($astudent cmp $bstudent); |
|
} |
} |
} else { |
} else { |
$a cmp $b; |
if ($astudent ne $bstudent) { |
|
$result = ($astudent cmp $bstudent); |
|
} elsif ($ares ne $bres ) { |
|
$result = ($ares cmp $bres); |
|
} elsif ($apart ne $bpart ) { |
|
$result = ($apart cmp $bpart); |
|
} |
|
} |
|
|
|
if (!$result) { |
|
if (defined($aparm) && defined($bparm)) { |
|
$result = ($aparm <=> $bparm); |
|
} elsif (defined($aparm)) { |
|
$result = -1; |
|
} elsif (defined($bparm)) { |
|
$result = 1; |
|
} |
} |
} |
|
|
|
$result; |
} keys %{$listdata}) { |
} keys %{$listdata}) { |
|
|
if ($$listdata{$thiskey.'.type'}) { |
if ($$listdata{$thiskey.'.type'}) { |
my $thistype=$$listdata{$thiskey.'.type'}; |
my $thistype=$$listdata{$thiskey.'.type'}; |
if ($$resourcedata{$thiskey.'.type'}) { |
if ($$resourcedata{$thiskey.'.type'}) { |
Line 2544 sub listdata {
|
Line 2493 sub listdata {
|
my $section=&mt('All Students'); |
my $section=&mt('All Students'); |
if ($middle=~/^\[(.*)\]/) { |
if ($middle=~/^\[(.*)\]/) { |
my $issection=$1; |
my $issection=$1; |
if ($issection=~/^useropt\:(\w+)\:(\w+)/) { |
if ($issection=~/^useropt\:($match_username)\:($match_domain)/) { |
$section=&mt('User').": ".&Apache::loncommon::plainname($1,$2); |
$section=&mt('User').": ".&Apache::loncommon::plainname($1,$2); |
} else { |
} else { |
$section=&mt('Group/Section').': '.$issection; |
$section=&mt('Group/Section').': '.$issection; |
Line 2585 sub listdata {
|
Line 2534 sub listdata {
|
} |
} |
if ($part ne $oldpart) { |
if ($part ne $oldpart) { |
$r->print(&tableend(). |
$r->print(&tableend(). |
"\n<span class=\"LC_parm_part\">".&mt('Part').": $part</span>"); |
"\n".'<span class="LC_parm_part">'.&mt('Part').": $part</span>"); |
$oldpart=$part; |
$oldpart=$part; |
} |
} |
# |
# |
Line 2606 sub listdata {
|
Line 2555 sub listdata {
|
$$resourcedata{$thiskey}, |
$$resourcedata{$thiskey}, |
'',1,'',''). |
'',1,'',''). |
'<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />'. |
'<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />'. |
|
(($$resourcedata{$thiskey}!=0)?'<span class="LC_nobreak"><a href="/adm/parmset?&action=dateshift1&timebase='.$$resourcedata{$thiskey}.'">'. |
|
&mt('Shift all dates based on this date').'</a></span>':''). |
&date_sanity_info($$resourcedata{$thiskey}) |
&date_sanity_info($$resourcedata{$thiskey}) |
); |
); |
} elsif ($thistype eq 'string_yesno') { |
} elsif ($thistype eq 'date_interval') { |
my $showval; |
$r->print(&date_interval_selector($thiskey, |
if (defined($$resourcedata{$thiskey})) { |
$$resourcedata{$thiskey})); |
$showval=$$resourcedata{$thiskey}; |
} elsif ($thistype =~ m/^string/) { |
} |
$r->print(&string_selector($thistype,$thiskey, |
$r->print('<label><input type="radio" name="set_'.$thiskey. |
$$resourcedata{$thiskey})); |
'" value="yes"'); |
|
if ($showval eq 'yes') { |
|
$r->print(' checked="checked"'); |
|
} |
|
$r->print(' />'.&mt('Yes').'</label> '); |
|
$r->print('<label><input type="radio" name="set_'.$thiskey. |
|
'" value="no"'); |
|
if ($showval eq 'no') { |
|
$r->print(' checked="checked"'); |
|
} |
|
$r->print(' />'.&mt('No').'</label>'); |
|
} else { |
} else { |
my $showval; |
$r->print(&default_selector($thiskey,$$resourcedata{$thiskey})); |
if (defined($$resourcedata{$thiskey})) { |
|
$showval=$$resourcedata{$thiskey}; |
|
} |
|
$r->print('<input type="text" name="set_'.$thiskey.'" value="'. |
|
$showval.'">'); |
|
} |
} |
$r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'. |
$r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'. |
$thistype.'">'); |
$thistype.'" />'); |
$r->print('</td>'.&Apache::loncommon::end_data_table_row()); |
$r->print('</td>'.&Apache::loncommon::end_data_table_row()); |
} |
} |
} |
} |
return $foundkeys; |
return $foundkeys; |
} |
} |
|
|
|
|
|
sub date_interval_selector { |
|
my ($thiskey, $showval) = @_; |
|
my $result; |
|
foreach my $which (['days', 86400, 31], |
|
['hours', 3600, 23], |
|
['minutes', 60, 59], |
|
['seconds', 1, 59]) { |
|
my ($name, $factor, $max) = @{ $which }; |
|
my $amount = int($showval/$factor); |
|
$showval %= $factor; |
|
my %select = ((map {$_ => $_} (0..$max)), |
|
'select_form_order' => [0..$max]); |
|
$result .= &Apache::loncommon::select_form($amount,$name.'_'.$thiskey, |
|
%select); |
|
$result .= ' '.&mt($name); |
|
} |
|
$result .= '<input type="hidden" name="dateinterval_'.$thiskey.'" />'; |
|
return $result; |
|
|
|
} |
|
|
|
sub get_date_interval_from_form { |
|
my ($key) = @_; |
|
my $seconds = 0; |
|
foreach my $which (['days', 86400], |
|
['hours', 3600], |
|
['minutes', 60], |
|
['seconds', 1]) { |
|
my ($name, $factor) = @{ $which }; |
|
if (defined($env{'form.'.$name.'_'.$key})) { |
|
$seconds += $env{'form.'.$name.'_'.$key} * $factor; |
|
} |
|
} |
|
return $seconds; |
|
} |
|
|
|
|
|
sub default_selector { |
|
my ($thiskey, $showval) = @_; |
|
return '<input type="text" name="set_'.$thiskey.'" value="'.$showval.'" />'; |
|
} |
|
|
|
my %strings = |
|
( |
|
'string_yesno' |
|
=> [[ 'yes', 'Yes' ], |
|
[ 'no', 'No' ]], |
|
'string_problemstatus' |
|
=> [[ 'yes', 'Yes' ], |
|
[ 'answer', 'Yes, and show correct answer if they exceed the maximum number of tries.' ], |
|
[ 'no', 'No, don\'t show correct/incorrect feedback.' ], |
|
[ 'no_feedback_ever', 'No, show no feedback at all.' ]], |
|
); |
|
|
|
|
|
sub string_selector { |
|
my ($thistype, $thiskey, $showval) = @_; |
|
|
|
if (!exists($strings{$thistype})) { |
|
return &default_selector($thiskey,$showval); |
|
} |
|
|
|
my $result; |
|
foreach my $possibilities (@{ $strings{$thistype} }) { |
|
my ($name, $description) = @{ $possibilities }; |
|
$result .= '<label><input type="radio" name="set_'.$thiskey. |
|
'" value="'.$name.'"'; |
|
if ($showval eq $name) { |
|
$result .= ' checked="checked"'; |
|
} |
|
$result .= ' />'.&mt($description).'</label> '; |
|
} |
|
return $result; |
|
} |
|
|
|
# |
|
# Shift all start and end dates by $shift |
|
# |
|
|
|
sub dateshift { |
|
my ($shift)=@_; |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my %data=&Apache::lonnet::dump('resourcedata',$dom,$crs); |
|
# ugly retro fix for broken version of types |
|
foreach my $key (keys %data) { |
|
if ($key=~/\wtype$/) { |
|
my $newkey=$key; |
|
$newkey=~s/type$/\.type/; |
|
$data{$newkey}=$data{$key}; |
|
delete $data{$key}; |
|
} |
|
} |
|
my %storecontent=(); |
|
# go through all parameters and look for dates |
|
foreach my $key (keys %data) { |
|
if ($data{$key.'.type'}=~/^date_(start|end)$/) { |
|
my $newdate=$data{$key}+$shift; |
|
$storecontent{$key}=$newdate; |
|
} |
|
} |
|
my $reply=&Apache::lonnet::cput |
|
('resourcedata',\%storecontent,$dom,$crs); |
|
if ($reply eq 'ok') { |
|
&log_parmset(\%storecontent); |
|
} |
|
&Apache::lonnet::devalidatecourseresdata($crs,$dom); |
|
return $reply; |
|
} |
|
|
sub newoverview { |
sub newoverview { |
my ($r) = @_; |
my ($r) = @_; |
|
|
Line 2682 ENDOVER
|
Line 2728 ENDOVER
|
my @selected_sections = |
my @selected_sections = |
&Apache::loncommon::get_env_multiple('form.Section'); |
&Apache::loncommon::get_env_multiple('form.Section'); |
@selected_sections = ('all') if (! @selected_sections); |
@selected_sections = ('all') if (! @selected_sections); |
foreach (@selected_sections) { |
foreach my $sec (@selected_sections) { |
if ($_ eq 'all') { |
if ($sec eq 'all') { |
@selected_sections = ('all'); |
@selected_sections = ('all'); |
} |
} |
} |
} |
Line 2703 ENDOVER
|
Line 2749 ENDOVER
|
\%mapp, \%symbp,\%maptitles,\%uris, |
\%mapp, \%symbp,\%maptitles,\%uris, |
\%keyorder,\%defkeytype); |
\%keyorder,\%defkeytype); |
|
|
|
if (grep {$_ eq 'all'} (@psprt)) { |
|
@psprt = keys(%allparts); |
|
} |
# Menu to select levels, etc |
# Menu to select levels, etc |
|
|
$r->print('<table id="LC_parm_overview_scope"> |
$r->print('<table id="LC_parm_overview_scope"> |
Line 2759 ENDOVER
|
Line 2808 ENDOVER
|
&listdata($r,$resourcedata,$listdata,$sortorder); |
&listdata($r,$resourcedata,$listdata,$sortorder); |
} |
} |
$r->print(&tableend(). |
$r->print(&tableend(). |
((($env{'form.store'}) || ($env{'form.dis'}))?'<p><input type="submit" name="store" value="'.&mt('Store').'" /></p>':''). |
((($env{'form.store'}) || ($env{'form.dis'}))?'<p><input type="submit" name="store" value="'.&mt('Save').'" /></p>':''). |
'</form>'.&Apache::loncommon::end_page()); |
'</form>'.&Apache::loncommon::end_page()); |
} |
} |
|
|
Line 2828 ENDOVER
|
Line 2877 ENDOVER
|
my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder); |
my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder); |
|
|
$r->print(&tableend().'<p>'. |
$r->print(&tableend().'<p>'. |
($foundkeys?'<input type="submit" value="'.&mt('Modify Parameters').'" />':&mt('There are no parameters.')).'</p></form>'. |
($foundkeys?'<input type="submit" value="'.&mt('Save').'" />':&mt('There are no parameters.')).'</p></form>'. |
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
} |
} |
|
|
Line 2857 ENDOVER
|
Line 2906 ENDOVER
|
$r->print('<h3>'. |
$r->print('<h3>'. |
&mt('These parameters refer to resources that do not exist.'). |
&mt('These parameters refer to resources that do not exist.'). |
'</h3>'. |
'</h3>'. |
'<input type="submit" value="'.&mt('Delete Checked Parameters').'" />'.'<br />'. |
'<input type="submit" value="'.&mt('Delete Selected').'" />'.'<br />'. |
'<br />'); |
'<br />'); |
$r->print(&Apache::loncommon::start_data_table(). |
$r->print(&Apache::loncommon::start_data_table(). |
'<tr>'. |
'<tr>'. |
Line 2868 ENDOVER
|
Line 2917 ENDOVER
|
next if (!exists($resourcedata->{$thiskey.'.type'}) |
next if (!exists($resourcedata->{$thiskey.'.type'}) |
&& $thiskey=~/\.type$/); |
&& $thiskey=~/\.type$/); |
my %data = &parse_key($thiskey); |
my %data = &parse_key($thiskey); |
if (exists($data{'realm_exists'}) |
if (1) { #exists($data{'realm_exists'}) |
&& !$data{'realm_exists'}) { |
#&& !$data{'realm_exists'}) { |
$r->print(&Apache::loncommon::start_data_table_row(). |
$r->print(&Apache::loncommon::start_data_table_row(). |
'<tr>'. |
'<tr>'. |
'<td><input type="checkbox" name="del_'.$thiskey.'" /></td>' ); |
'<td><input type="checkbox" name="del_'.$thiskey.'" /></td>' ); |
|
|
$r->print('<td>'); |
$r->print('<td>'); |
|
my $display_value = $resourcedata->{$thiskey}; |
|
if (&isdateparm($resourcedata->{$thiskey.'.type'})) { |
|
$display_value = |
|
&Apache::lonlocal::locallocaltime($display_value); |
|
} |
$r->print(&mt('Parameter: "[_1]" with value: "[_2]"', |
$r->print(&mt('Parameter: "[_1]" with value: "[_2]"', |
&standard_parameter_names($data{'parameter_name'}), |
&standard_parameter_names($data{'parameter_name'}), |
$resourcedata->{$thiskey})); |
$resourcedata->{$thiskey})); |
Line 2899 ENDOVER
|
Line 2953 ENDOVER
|
$r->print(&mt('Resource: [_1] <br /> with ID: [_2] <br /> in folder [_3]', |
$r->print(&mt('Resource: [_1] <br /> with ID: [_2] <br /> in folder [_3]', |
$url,$resid,$map)); |
$url,$resid,$map)); |
} |
} |
$r->print(&mt('Part: [_1]',$data{'parameter_part'})); |
$r->print(' <br /> '.&mt('Part: [_1]',$data{'parameter_part'})); |
$r->print('</td></tr>'); |
$r->print('</td></tr>'); |
|
|
} |
} |
} |
} |
$r->print(&Apache::loncommon::end_data_table().'<p>'. |
$r->print(&Apache::loncommon::end_data_table().'<p>'. |
'<input type="submit" value="'.&mt('Delete Checked Parameters').'" />'. |
'<input type="submit" value="'.&mt('Delete Selected').'" />'. |
'</p></form>'. |
'</p></form>'. |
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
} |
} |
|
|
|
sub date_shift_one { |
|
my ($r) = @_; |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
|
|
my $start_page=&Apache::loncommon::start_page('Shift Dates'); |
|
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift'); |
|
$r->print(<<ENDOVER); |
|
$start_page |
|
$breadcrumbs |
|
ENDOVER |
|
$r->print('<form name="shiftform" method="post">'. |
|
'<table><tr><td>'.&mt('Currently set date:').'</td><td>'. |
|
&Apache::lonlocal::locallocaltime($env{'form.timebase'}).'</td></tr>'. |
|
'<tr><td>'.&mt('Shifted date:').'</td><td>'. |
|
&Apache::lonhtmlcommon::date_setter('shiftform', |
|
'timeshifted', |
|
$env{'form.timebase'},, |
|
''). |
|
'</td></tr></table>'. |
|
'<input type="hidden" name="action" value="dateshift2" />'. |
|
'<input type="hidden" name="timebase" value="'.$env{'form.timebase'}.'" />'. |
|
'<input type="submit" value="'.&mt('Shift all dates accordingly').'" /></form>'); |
|
$r->print(&Apache::loncommon::end_page()); |
|
} |
|
|
|
sub date_shift_two { |
|
my ($r) = @_; |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $start_page=&Apache::loncommon::start_page('Shift Dates'); |
|
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift'); |
|
$r->print(<<ENDOVER); |
|
$start_page |
|
$breadcrumbs |
|
ENDOVER |
|
my $timeshifted=&Apache::lonhtmlcommon::get_date_from_form('timeshifted'); |
|
$r->print(&mt('Shifting all dates such that [_1] becomes [_2]', |
|
&Apache::lonlocal::locallocaltime($env{'form.timebase'}), |
|
&Apache::lonlocal::locallocaltime($timeshifted))); |
|
my $delta=$timeshifted-$env{'form.timebase'}; |
|
&dateshift($delta); |
|
$r->print(&Apache::loncommon::end_page()); |
|
} |
|
|
sub parse_key { |
sub parse_key { |
my ($key) = @_; |
my ($key) = @_; |
my %data; |
my %data; |
Line 2918 sub parse_key {
|
Line 3017 sub parse_key {
|
$data{'scope_type'} = 'all'; |
$data{'scope_type'} = 'all'; |
if ($middle=~/^\[(.*)\]/) { |
if ($middle=~/^\[(.*)\]/) { |
$data{'scope'} = $1; |
$data{'scope'} = $1; |
if ($data{'scope'}=~/^useropt\:(\w+)\:(\w+)/) { |
if ($data{'scope'}=~/^useropt\:($match_username)\:($match_domain)/) { |
$data{'scope_type'} = 'user'; |
$data{'scope_type'} = 'user'; |
$data{'scope'} = [$1,$2]; |
$data{'scope'} = [$1,$2]; |
} else { |
} else { |
Line 2935 sub parse_key {
|
Line 3034 sub parse_key {
|
$data{'realm_type'} = 'folder'; |
$data{'realm_type'} = 'folder'; |
$data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'}); |
$data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'}); |
($data{'realm_exists'}) = &Apache::lonnet::is_on_map($data{'realm'}); |
($data{'realm_exists'}) = &Apache::lonnet::is_on_map($data{'realm'}); |
&Apache::lonnet::logthis($1." siad ". $data{'realm_exists'} ); |
|
} elsif ($middle) { |
} elsif ($middle) { |
$data{'realm'} = $middle; |
$data{'realm'} = $middle; |
$data{'realm_type'} = 'symb'; |
$data{'realm_type'} = 'symb'; |
Line 2950 sub parse_key {
|
Line 3048 sub parse_key {
|
return %data; |
return %data; |
} |
} |
|
|
################################################## |
|
################################################## |
|
|
|
=pod |
|
|
|
=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 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. |
|
|
|
=cut |
|
|
|
################################################## |
|
################################################## |
|
|
|
sub extract_cloners { |
sub extract_cloners { |
my ($clonelist,$allowclone) = @_; |
my ($clonelist,$allowclone) = @_; |
if ($clonelist =~ /,/) { |
if ($clonelist =~ /,/) { |
@{$allowclone} = split/,/,$clonelist; |
@{$allowclone} = split(/,/,$clonelist); |
} else { |
} else { |
$$allowclone[0] = $clonelist; |
$$allowclone[0] = $clonelist; |
} |
} |
} |
} |
|
|
|
|
sub check_cloners { |
sub check_cloners { |
my ($clonelist,$oldcloner) = @_; |
my ($clonelist,$oldcloner) = @_; |
my ($clean_clonelist,$disallowed); |
my ($clean_clonelist,%disallowed); |
my @allowclone = (); |
my @allowclone = (); |
&extract_cloners($$clonelist,\@allowclone); |
&extract_cloners($$clonelist,\@allowclone); |
foreach my $currclone (@allowclone) { |
foreach my $currclone (@allowclone) { |
if (!grep/^$currclone$/,@$oldcloner) { |
if (!grep(/^\Q$currclone\E$/,@$oldcloner)) { |
my ($uname,$udom) = split/:/,$currclone; |
if ($currclone eq '*') { |
if ($uname && $udom) { |
$clean_clonelist .= $currclone.','; |
if (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') { |
} else { |
$disallowed .= $currclone.','; |
my ($uname,$udom) = split(/:/,$currclone); |
|
if ($uname eq '*') { |
|
if ($udom =~ /^$match_domain$/) { |
|
if (!&Apache::lonnet::domain($udom)) { |
|
$disallowed{'domain'} .= $currclone.','; |
|
} else { |
|
$clean_clonelist .= $currclone.','; |
|
} |
|
} else { |
|
$disallowed{'format'} .= $currclone.','; |
|
} |
|
} elsif ($currclone !~/^($match_username)\:($match_domain)$/) { |
|
$disallowed{'format'} .= $currclone.','; |
} else { |
} else { |
$clean_clonelist .= $currclone.','; |
if (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') { |
|
$disallowed{'newuser'} .= $currclone.','; |
|
} else { |
|
$clean_clonelist .= $currclone.','; |
|
} |
} |
} |
} |
} |
} else { |
} else { |
$clean_clonelist .= $currclone.','; |
$clean_clonelist .= $currclone.','; |
} |
} |
} |
} |
if ($disallowed) { |
foreach my $key (keys(%disallowed)) { |
$disallowed =~ s/,$//; |
$disallowed{$key} =~ s/,$//; |
} |
} |
if ($clean_clonelist) { |
if ($clean_clonelist) { |
$clean_clonelist =~ s/,$//; |
$clean_clonelist =~ s/,$//; |
} |
} |
$$clonelist = $clean_clonelist; |
$$clonelist = $clean_clonelist; |
return $disallowed; |
return %disallowed; |
} |
} |
|
|
sub change_clone { |
sub change_clone { |
my ($clonelist,$oldcloner) = @_; |
my ($clonelist,$oldcloner) = @_; |
Line 3036 sub change_clone {
|
Line 3113 sub change_clone {
|
my @allowclone; |
my @allowclone; |
&extract_cloners($clonelist,\@allowclone); |
&extract_cloners($clonelist,\@allowclone); |
foreach my $currclone (@allowclone) { |
foreach my $currclone (@allowclone) { |
if (!grep/^$currclone$/,@$oldcloner) { |
if (!grep(/^$currclone$/,@$oldcloner)) { |
($uname,$udom) = split/:/,$currclone; |
if ($currclone ne '*') { |
if ($uname && $udom) { |
($uname,$udom) = split(/:/,$currclone); |
unless (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') { |
if ($uname && $udom && $uname ne '*') { |
my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); |
if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { |
if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { |
my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); |
if ($currclonecrs{'cloneable'} eq '') { |
if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { |
$currclonecrs{'cloneable'} = $clone_crs; |
if ($currclonecrs{'cloneable'} eq '') { |
} else { |
$currclonecrs{'cloneable'} = $clone_crs; |
$currclonecrs{'cloneable'} .= ','.$clone_crs; |
} else { |
|
$currclonecrs{'cloneable'} .= ','.$clone_crs; |
|
} |
|
&Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); |
} |
} |
&Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); |
|
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
foreach my $oldclone (@$oldcloner) { |
foreach my $oldclone (@$oldcloner) { |
if (!grep/^$oldclone$/,@allowclone) { |
if (!grep(/^\Q$oldclone\E$/,@allowclone)) { |
($uname,$udom) = split/:/,$oldclone; |
if ($oldclone ne '*') { |
if ($uname && $udom) { |
($uname,$udom) = split(/:/,$oldclone); |
unless (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') { |
if ($uname && $udom && $uname ne '*' ) { |
my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); |
if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { |
my %newclonecrs = (); |
my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); |
if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { |
my %newclonecrs = (); |
if ($currclonecrs{'cloneable'} =~ /,/) { |
if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { |
my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; |
if ($currclonecrs{'cloneable'} =~ /,/) { |
foreach (@currclonecrs) { |
my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; |
unless ($_ eq $clone_crs) { |
foreach my $crs (@currclonecrs) { |
$newclonecrs{'cloneable'} .= $_.','; |
if ($crs ne $clone_crs) { |
|
$newclonecrs{'cloneable'} .= $crs.','; |
|
} |
} |
} |
|
$newclonecrs{'cloneable'} =~ s/,$//; |
|
} else { |
|
$newclonecrs{'cloneable'} = ''; |
} |
} |
$newclonecrs{'cloneable'} =~ s/,$//; |
&Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); |
} else { |
|
$newclonecrs{'cloneable'} = ''; |
|
} |
} |
&Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); |
|
} |
} |
} |
} |
} |
} |
Line 3082 sub change_clone {
|
Line 3163 sub change_clone {
|
} |
} |
|
|
|
|
################################################## |
|
################################################## |
|
|
|
=pod |
|
|
|
=item * header |
|
|
|
Output html header for page |
|
|
|
=cut |
|
|
|
################################################## |
|
################################################## |
|
sub header { |
sub header { |
return &Apache::loncommon::start_page('Parameter Manager'); |
return &Apache::loncommon::start_page('Parameter Manager'); |
} |
} |
################################################## |
|
################################################## |
|
sub print_main_menu { |
sub print_main_menu { |
my ($r,$parm_permission)=@_; |
my ($r,$parm_permission)=@_; |
# |
# |
Line 3111 ENDMAINFORMHEAD
|
Line 3178 ENDMAINFORMHEAD
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $vgr = &Apache::lonnet::allowed('vgr',$env{'request.course.id'}); |
my $vgr = &Apache::lonnet::allowed('vgr',$env{'request.course.id'}); |
|
my $mgr = &Apache::lonnet::allowed('mgr',$env{'request.course.id'}); |
|
|
my @menu = |
my @menu = |
( { divider=>'Settings for Your Course', |
( { divider=>'Settings for Your Course', |
}, |
}, |
{ text => 'Set Course Environment', |
{ text => 'Edit course configuration', |
action => 'crsenv', |
url => '/adm/courseprefs?origin=params', |
permission => $parm_permission, |
permission => $parm_permission, |
help => 'Course_Environment', |
help => 'Course_Environment', |
}, |
}, |
Line 3128 ENDMAINFORMHEAD
|
Line 3196 ENDMAINFORMHEAD
|
url => '/adm/slotrequest?command=showslots', |
url => '/adm/slotrequest?command=showslots', |
permission => $vgr, |
permission => $vgr, |
}, |
}, |
|
{ text => 'Reset Student Access Times', |
|
url => '/adm/helper/resettimes.helper', |
|
permission => $mgr, |
|
}, |
|
|
{ text => 'Set Parameter Setting Default Actions', |
{ text => 'Set Parameter Setting Default Actions', |
action => 'setdefaults', |
action => 'setdefaults', |
permission => $parm_permission, |
permission => $parm_permission, |
Line 3197 sub output_row {
|
Line 3270 sub output_row {
|
$values = ''; |
$values = ''; |
} |
} |
if (!($options =~ /deleted/)) { |
if (!($options =~ /deleted/)) { |
$output.='<strong>'.$field_text.':</strong>'; |
|
$output.='<input name="'.$field_name.'_values" type="text" value="'.$values.'" size="80" /><br />'; |
|
|
|
my @options= ( ['active', 'Show to student'], |
my @options= ( ['active', 'Show to student'], |
['onlyone','Student may select only one choice'], |
['stuadd', 'Provide text area for students to type metadata'], |
['stuadd', 'Student may type choices']); |
['choices','Provide choices for students to select from']); |
|
# ['onlyone','Student may select only one choice']); |
if ($added_flag) { |
if ($added_flag) { |
push @options,['deleted', 'Delete Metadata Field']; |
push @options,['deleted', 'Delete Metadata Field']; |
} |
} |
|
$output = &Apache::loncommon::start_data_table_row(); |
|
$output .= '<td><span class="LC_metadata"><strong>'.$field_text.':</strong></span></td>'; |
|
$output .= &Apache::loncommon::end_data_table_row(); |
foreach my $opt (@options) { |
foreach my $opt (@options) { |
my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; |
my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; |
$output.=(' 'x5).'<label><input type="checkbox" name="'. |
$output .= &Apache::loncommon::continue_data_table_row(); |
$field_name.'_'.$opt->[0].'" value="yes"'.$checked.' />'. |
$output .= '<td>'.(' ' x 5).'<span class="LC_metadata"><label> |
&mt($opt->[1]).'</label> <br />'; |
<input type="checkbox" name="'. |
} |
$field_name.'_'.$opt->[0].'" value="yes"'.$checked.' />'. |
|
&mt($opt->[1]).'</label></span> </td>'; |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
} |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
$output .= '<td>'.(' ' x 10).'<span class="LC_metadata"><input name="'.$field_name.'_values" type="text" value="'.$values.'" size="80" /></span></td>'; |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
my $multiple_checked; |
|
my $single_checked; |
|
if ($options =~ m/onlyone/) { |
|
$multiple_checked = ""; |
|
$single_checked = ' checked="checked"'; |
|
} else { |
|
$multiple_checked = ' checked="checked"'; |
|
$single_checked = ""; |
|
} |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
$output .= '<td>'.(' ' x 10).'<span class="LC_metadata"> |
|
<input type="radio" name="'.$field_name.'_onlyone" value="multiple"'.$multiple_checked.' />'. |
|
&mt('Student may select multiple choices from list').'</span></td>'; |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
$output .= '<td>'.(' ' x 10).'<span class="LC_metadata"> |
|
<input type="radio" name="'.$field_name.'_onlyone" value="single"'.$single_checked.' />'. |
|
&mt('Student may select only one choice from list').'</span></td>'; |
|
$output .= &Apache::loncommon::end_data_table_row(); |
} |
} |
return ($output); |
return ($output); |
} |
} |
Line 3221 sub order_meta_fields {
|
Line 3320 sub order_meta_fields {
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$r->print(&Apache::loncommon::start_page('Order Metadata Fields')); |
$r->print(&Apache::loncommon::start_page('Order Metadata Fields')); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata Fields')); |
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>"/adm/parmset?action=setrestrictmeta", |
|
text=>"Restrict Metadata"}, |
|
{text=>"Order Metadata"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata')); |
if ($env{'form.storeorder'}) { |
if ($env{'form.storeorder'}) { |
my $newpos = $env{'form.newpos'} - 1; |
my $newpos = $env{'form.newpos'} - 1; |
my $currentpos = $env{'form.currentpos'} - 1; |
my $currentpos = $env{'form.currentpos'} - 1; |
Line 3254 sub order_meta_fields {
|
Line 3357 sub order_meta_fields {
|
} |
} |
} |
} |
my $ordered_fields = join ",", @neworder; |
my $ordered_fields = join ",", @neworder; |
&Apache::lonnet::appenv('course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields); |
my $put_result = &Apache::lonnet::put('environment', |
|
{'metadata.addedorder'=>$ordered_fields},$dom,$crs); |
|
&Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields}); |
} |
} |
my $fields = &get_added_meta_fieldnames(); |
my $fields = &get_added_meta_fieldnames($env{'request.course.id'}); |
my $ordered_fields; |
my $ordered_fields; |
my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; |
my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; |
if (!@fields_in_order) { |
if (!@fields_in_order) { |
Line 3291 sub order_meta_fields {
|
Line 3396 sub order_meta_fields {
|
$r->print('</table>'); |
$r->print('</table>'); |
return 'ok'; |
return 'ok'; |
} |
} |
|
sub continue { |
|
my $output; |
|
$output .= '<form action="" method="post">'; |
|
$output .= '<input type="hidden" name="action" value="setrestrictmeta" />'; |
|
$output .= '<input type="submit" value="Continue" />'; |
|
return ($output); |
|
} |
sub addmetafield { |
sub addmetafield { |
my ($r)=@_; |
my ($r)=@_; |
$r->print(&Apache::loncommon::start_page('Add Metadata Field')); |
$r->print(&Apache::loncommon::start_page('Add Metadata Field')); |
Line 3298 sub addmetafield {
|
Line 3410 sub addmetafield {
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
if (exists($env{'form.undelete'})) { |
if (exists($env{'form.undelete'})) { |
my @meta_fields = &Apache::loncommon::get_env_multiple('form.undelete'); |
my @meta_fields = &Apache::loncommon::get_env_multiple('form.undeletefield'); |
foreach my $meta_field(@meta_fields) { |
foreach my $meta_field(@meta_fields) { |
my $options = $env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.options'}; |
my $options = $env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.options'}; |
$options =~ s/deleted//; |
$options =~ s/deleted//; |
Line 3308 sub addmetafield {
|
Line 3420 sub addmetafield {
|
|
|
$r->print('Undeleted Metadata Field <strong>'.$env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.added'}."</strong> with result ".$put_result.'<br />'); |
$r->print('Undeleted Metadata Field <strong>'.$env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.added'}."</strong> with result ".$put_result.'<br />'); |
} |
} |
$r->print('<form action="" method="post">'); |
$r->print(&continue()); |
$r->print('<input type="hidden" name="action" value="setrestrictmeta" />'); |
|
$r->print('<input type="submit" value="Continue" />'); |
|
} elsif (exists($env{'form.fieldname'})) { |
} elsif (exists($env{'form.fieldname'})) { |
my $meta_field = $env{'form.fieldname'}; |
my $meta_field = $env{'form.fieldname'}; |
my $display_field = $env{'form.fieldname'}; |
my $display_field = $env{'form.fieldname'}; |
Line 3320 sub addmetafield {
|
Line 3430 sub addmetafield {
|
{'metadata.'.$meta_field.'.values'=>"", |
{'metadata.'.$meta_field.'.values'=>"", |
'metadata.'.$meta_field.'.added'=>"$display_field", |
'metadata.'.$meta_field.'.added'=>"$display_field", |
'metadata.'.$meta_field.'.options'=>""},$dom,$crs); |
'metadata.'.$meta_field.'.options'=>""},$dom,$crs); |
$r->print('Added new Metadata Field '.$env{'form.fieldname'}." with result ".$put_result); |
$r->print('Added new Metadata Field <strong>'.$env{'form.fieldname'}."</strong> with result ".$put_result.'<br />'); |
|
$r->print(&continue()); |
} else { |
} else { |
my $fields = &get_deleted_meta_fieldnames(); |
my $fields = &get_deleted_meta_fieldnames($env{'request.course.id'}); |
if ($fields) { |
if ($fields) { |
$r->print('You may undelete previously deleted fields.<br />Check those you wish to undelete and click Undelete.<br />'); |
$r->print('You may undelete previously deleted fields.<br />Check those you wish to undelete and click Undelete.<br />'); |
$r->print('<form method="post" action="">'); |
$r->print('<form method="post" action="">'); |
foreach my $key(keys(%$fields)) { |
foreach my $key(keys(%$fields)) { |
$r->print('<input type="checkbox" name="undelete" value="'.$key.'" />'.$$fields{$key}.'<br /'); |
$r->print('<input type="checkbox" name="undeletefield" value="'.$key.'" />'.$$fields{$key}.'<br /'); |
} |
} |
$r->print('<input type="submit" name="undelete" value="Undelete" />'); |
$r->print('<input type="submit" name="undelete" value="Undelete" />'); |
$r->print('</form>'); |
$r->print('</form>'); |
Line 3335 sub addmetafield {
|
Line 3446 sub addmetafield {
|
$r->print('<hr /><strong>Or</strong> you may enter a new metadata field name.<form method="post" action="/adm/parmset?action=addmetadata"'); |
$r->print('<hr /><strong>Or</strong> you may enter a new metadata field name.<form method="post" action="/adm/parmset?action=addmetadata"'); |
$r->print('<input type="text" name="fieldname" /><br />'); |
$r->print('<input type="text" name="fieldname" /><br />'); |
$r->print('<input type="submit" value="Add Metadata Field" />'); |
$r->print('<input type="submit" value="Add Metadata Field" />'); |
$r->print('</form>'); |
|
} |
} |
|
$r->print('</form>'); |
} |
} |
sub setrestrictmeta { |
sub setrestrictmeta { |
my ($r)=@_; |
my ($r)=@_; |
Line 3361 sub setrestrictmeta {
|
Line 3472 sub setrestrictmeta {
|
if ($env{'form.'.$meta_field.'_stuadd'}) { |
if ($env{'form.'.$meta_field.'_stuadd'}) { |
$options.='stuadd,'; |
$options.='stuadd,'; |
} |
} |
if ($env{'form.'.$meta_field.'_onlyone'}) { |
if ($env{'form.'.$meta_field.'_choices'}) { |
|
$options.='choices,'; |
|
} |
|
if ($env{'form.'.$meta_field.'_onlyone'} eq 'single') { |
$options.='onlyone,'; |
$options.='onlyone,'; |
} |
} |
if ($env{'form.'.$meta_field.'_active'}) { |
if ($env{'form.'.$meta_field.'_active'}) { |
Line 3370 sub setrestrictmeta {
|
Line 3484 sub setrestrictmeta {
|
if ($env{'form.'.$meta_field.'_deleted'}) { |
if ($env{'form.'.$meta_field.'_deleted'}) { |
$options.='deleted,'; |
$options.='deleted,'; |
} |
} |
|
|
my $name = $save_field; |
my $name = $save_field; |
$put_result = &Apache::lonnet::put('environment', |
$put_result = &Apache::lonnet::put('environment', |
{'metadata.'.$meta_field.'.options'=>$options, |
{'metadata.'.$meta_field.'.options'=>$options, |
Line 3385 sub setrestrictmeta {
|
Line 3498 sub setrestrictmeta {
|
# Get the default metadata fields |
# Get the default metadata fields |
my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio'); |
my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio'); |
# Now get possible added metadata fields |
# Now get possible added metadata fields |
my $added_metadata_fields = &get_added_meta_fieldnames(\%metadata_fields); |
my $added_metadata_fields = &get_added_meta_fieldnames($env{'request.course.id'}); |
|
my $row_alt = 1; |
|
$output .= &Apache::loncommon::start_data_table(); |
foreach my $field (sort(keys(%metadata_fields))) { |
foreach my $field (sort(keys(%metadata_fields))) { |
if ($field ne 'courserestricted') { |
if ($field ne 'courserestricted') { |
|
$row_alt = $row_alt ? 0 : 1; |
$output.= &output_row($r, $field, $metadata_fields{$field}); |
$output.= &output_row($r, $field, $metadata_fields{$field}); |
} |
} |
} |
} |
|
my $buttons = (<<ENDButtons); |
|
<input type="submit" name="restrictmeta" value="Save" /> |
|
</form><br /> |
|
<form method="post" action="/adm/parmset?action=addmetadata" name="form1"> |
|
<input type="submit" name="restrictmeta" value="Add a Metadata Field" /> |
|
</form> |
|
<br /> |
|
<form method="post" action="/adm/parmset?action=ordermetadata" name="form2"> |
|
<input type="submit" name="restrictmeta" value="Order Metadata Fields" /> |
|
ENDButtons |
my $added_flag = 1; |
my $added_flag = 1; |
foreach my $field (sort(keys(%$added_metadata_fields))) { |
foreach my $field (sort(keys(%$added_metadata_fields))) { |
$output.= &output_row($r, $field, $$added_metadata_fields{$field},$added_flag); |
$row_alt = $row_alt ? 0 : 1; |
|
$output.= &output_row($r, $field, $$added_metadata_fields{$field},$added_flag, $row_alt); |
} |
} |
|
$output .= &Apache::loncommon::end_data_table(); |
$r->print(<<ENDenv); |
$r->print(<<ENDenv); |
<form method="post" action="/adm/parmset?action=setrestrictmeta" name="form"> |
<form method="post" action="/adm/parmset?action=setrestrictmeta" name="form"> |
<p> |
|
$output |
$output |
<input type="submit" name="restrictmeta" value="Update Metadata Restrictions"> |
$buttons |
</form><br /> |
|
<form method="post" action="/adm/parmset?action=addmetadata" name="form"> |
|
<input type="submit" name="restrictmeta" value="Add a Metadata Field"> |
|
</form> |
|
</form><br /> |
|
<form method="post" action="/adm/parmset?action=ordermetadata" name="form"> |
|
<input type="submit" name="restrictmeta" value="Order Metadata Fields"> |
|
</form> |
</form> |
ENDenv |
ENDenv |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
Line 3414 ENDenv
|
Line 3534 ENDenv
|
} |
} |
################################################## |
################################################## |
sub get_added_meta_fieldnames { |
sub get_added_meta_fieldnames { |
|
my ($cid) = @_; |
my %fields; |
my %fields; |
foreach my $key(%env) { |
foreach my $key(%env) { |
if ($key =~ m/\.metadata\.(.+)\.added$/) { |
if ($key =~ m/\Q$cid\E\.metadata\.(.+)\.added$/) { |
my $field_name = $1; |
my $field_name = $1; |
my ($display_field_name) = $env{$key}; |
my ($display_field_name) = $env{$key}; |
$fields{$field_name} = $display_field_name; |
$fields{$field_name} = $display_field_name; |
Line 3425 sub get_added_meta_fieldnames {
|
Line 3546 sub get_added_meta_fieldnames {
|
return \%fields; |
return \%fields; |
} |
} |
sub get_deleted_meta_fieldnames { |
sub get_deleted_meta_fieldnames { |
|
my ($cid) = @_; |
my %fields; |
my %fields; |
my ($default_fields) = @_; |
|
foreach my $key(%env) { |
foreach my $key(%env) { |
if ($key =~ m/\.metadata\.(.+)\.added$/) { |
if ($key =~ m/\Q$cid\E\.metadata\.(.+)\.added$/) { |
my $field_name = $1; |
my $field_name = $1; |
if ($env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'} =~ m/deleted/) { |
if ($env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'} =~ m/deleted/) { |
my ($display_field_name) = $env{$key}; |
my ($display_field_name) = $env{$key}; |
Line 3579 ENDINPUTDATE
|
Line 3700 ENDINPUTDATE
|
} elsif ($defkeytype{$tempkey} eq 'string_yesno') { |
} elsif ($defkeytype{$tempkey} eq 'string_yesno') { |
my $yeschecked=''; |
my $yeschecked=''; |
my $nochecked=''; |
my $nochecked=''; |
if (&rulescache($tempkey.'_value') eq 'yes') { $yeschecked='checked="checked"'; } |
if (&rulescache($tempkey.'_value') eq 'yes') { $yeschecked=' checked="checked"'; } |
if (&rulescache($tempkey.'_value') eq 'no') { $nochecked='checked="checked"'; } |
if (&rulescache($tempkey.'_value') eq 'no') { $nochecked=' checked="checked"'; } |
|
|
$r->print(<<ENDYESNO); |
$r->print(<<ENDYESNO); |
<label><input type="radio" name="$tempkey\_value" value="yes" $yeschecked /> $lt{'yes'}</label><br /> |
<label><input type="radio" name="$tempkey\_value" value="yes"$yeschecked /> $lt{'yes'}</label><br /> |
<label><input type="radio" name="$tempkey\_value" value="no" $nochecked /> $lt{'no'}</label> |
<label><input type="radio" name="$tempkey\_value" value="no"$nochecked /> $lt{'no'}</label> |
ENDYESNO |
ENDYESNO |
} else { |
} else { |
$r->print('<input type="text" size="20" name="'.$tempkey.'_value" value="'.&rulescache($tempkey.'_value').'" />'); |
$r->print('<input type="text" size="20" name="'.$tempkey.'_value" value="'.&rulescache($tempkey.'_value').'" />'); |
Line 3592 ENDYESNO
|
Line 3713 ENDYESNO
|
$r->print('</td>'.&Apache::loncommon::end_data_table_row()); |
$r->print('</td>'.&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print(&Apache::loncommon::end_data_table(). |
$r->print(&Apache::loncommon::end_data_table(). |
"\n<input type='submit' name='storerules' value='". |
"\n".'<input type="submit" name="storerules" value='". |
&mt('Store Rules')."' /></form>\n". |
&mt('Save')."' /></form>'."\n". |
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
return; |
return; |
} |
} |
Line 3690 sub parm_change_log {
|
Line 3811 sub parm_change_log {
|
\%saveable_parameters); |
\%saveable_parameters); |
&Apache::loncommon::restore_course_settings('parameter_log', |
&Apache::loncommon::restore_course_settings('parameter_log', |
\%saveable_parameters); |
\%saveable_parameters); |
if (!$env{'form.show'}) { $env{'form.show'}=10; } |
$r->print(&Apache::loncommon::display_filter(). |
|
|
my $countselect = |
|
&Apache::lonmeta::selectbox('show',$env{'form.show'},undef, |
|
(&mt('all'),10,20,50,100,1000,10000)); |
|
|
|
$r->print('<nobr>'.&mt('[_1] Records',$countselect).'</nobr>'. |
|
'<label>'.&Apache::lonhtmlcommon::checkbox('includetypes',$env{'form.includetypes'},'1'). |
'<label>'.&Apache::lonhtmlcommon::checkbox('includetypes',$env{'form.includetypes'},'1'). |
' '.&mt('Include parameter types').'</label>'. |
' '.&mt('Include parameter types').'</label>'. |
'<input type="submit" value="'.&mt('Display').'" /></form>'); |
'<input type="submit" value="'.&mt('Display').'" /></form>'); |
Line 3708 sub parm_change_log {
|
Line 3823 sub parm_change_log {
|
&mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'. |
&mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'. |
&Apache::loncommon::end_data_table_header_row()); |
&Apache::loncommon::end_data_table_header_row()); |
my $shown=0; |
my $shown=0; |
foreach my $id (sort { $parmlog{$b}{'exe_time'}<=>$parmlog{$a}{'exe_time'} } (keys(%parmlog))) { |
my $folder=''; |
|
if ($env{'form.displayfilter'} eq 'currentfolder') { |
|
my $last=''; |
|
if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', |
|
&GDBM_READER(),0640)) { |
|
$last=$hash{'last_known'}; |
|
untie(%hash); |
|
} |
|
if ($last) { ($folder) = &Apache::lonnet::decode_symb($last); } |
|
} |
|
foreach my $id (sort |
|
{ |
|
if ($parmlog{$b}{'exe_time'} ne $parmlog{$a}{'exe_time'}) { |
|
return $parmlog{$b}{'exe_time'} <=>$parmlog{$a}{'exe_time'} |
|
} |
|
my $aid = (split('00000',$a))[-1]; |
|
my $bid = (split('00000',$b))[-1]; |
|
return $bid<=>$aid; |
|
} (keys(%parmlog))) { |
my @changes=keys(%{$parmlog{$id}{'logentry'}}); |
my @changes=keys(%{$parmlog{$id}{'logentry'}}); |
my $count = 0; |
my $count = 0; |
my $time = |
my $time = |
Line 3729 sub parm_change_log {
|
Line 3862 sub parm_change_log {
|
$parmlog{$id}{'exe_udom'}); |
$parmlog{$id}{'exe_udom'}); |
} |
} |
my $row_start=&Apache::loncommon::start_data_table_row(); |
my $row_start=&Apache::loncommon::start_data_table_row(); |
$r->print($row_start); |
|
my $makenewrow=0; |
my $makenewrow=0; |
my %istype=(); |
my %istype=(); |
my $output; |
my $output; |
Line 3739 sub parm_change_log {
|
Line 3871 sub parm_change_log {
|
!exists($parmlog{$id}{'logentry'}{$changed.'.type'})); |
!exists($parmlog{$id}{'logentry'}{$changed.'.type'})); |
my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= |
my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= |
&components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); |
&components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); |
|
if ($env{'form.displayfilter'} eq 'currentfolder') { |
|
if ($folder) { |
|
if ($middle!~/^\Q$folder\E/) { next; } |
|
} |
|
} |
if ($typeflag) { |
if ($typeflag) { |
$istype{$parmname}=$value; |
$istype{$parmname}=$value; |
if (!$env{'form.includetypes'}) { next; } |
if (!$env{'form.includetypes'}) { next; } |
Line 3791 sub parm_change_log {
|
Line 3928 sub parm_change_log {
|
} |
} |
$output .= '</td>'.&Apache::loncommon::end_data_table_row(); |
$output .= '</td>'.&Apache::loncommon::end_data_table_row(); |
} |
} |
$r->print('<td rowspan="'.$count.'">'.$time.'</td> |
if ($env{'form.displayfilter'} eq 'containing') { |
|
my $wholeentry=$about_me_link.':'. |
|
$parmlog{$id}{'exe_uname'}.':'.$parmlog{$id}{'exe_udom'}.':'. |
|
$output; |
|
if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } |
|
} |
|
if ($count) { |
|
$r->print($row_start.'<td rowspan="'.$count.'">'.$time.'</td> |
<td rowspan="'.$count.'">'.$about_me_link. |
<td rowspan="'.$count.'">'.$about_me_link. |
'<br /><tt>'.$parmlog{$id}{'exe_uname'}. |
'<br /><tt>'.$parmlog{$id}{'exe_uname'}. |
':'.$parmlog{$id}{'exe_udom'}.'</tt>'. |
':'.$parmlog{$id}{'exe_udom'}.'</tt>'. |
$send_msg_link.'</td>'.$output); |
$send_msg_link.'</td>'.$output); |
|
$shown++; |
$shown++; |
} |
if (!($env{'form.show'} eq &mt('all') |
if (!($env{'form.show'} eq &mt('all') |
|| $shown<=$env{'form.show'})) { last; } |
|| $shown<=$env{'form.show'})) { last; } |
} |
} |
Line 3805 sub parm_change_log {
|
Line 3949 sub parm_change_log {
|
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
} |
} |
|
|
################################################## |
sub update_slots { |
################################################## |
my ($slot_name,$cdom,$cnum,$symb,$uname,$udom) = @_; |
|
my %slot=&Apache::lonnet::get_slot($slot_name); |
=pod |
if (!keys(%slot)) { |
|
return 'error: slot does not exist'; |
=item * handler |
} |
|
my $max=$slot{'maxspace'}; |
Main handler. Calls &assessparms and &crsenv subroutines. |
if (!defined($max)) { $max=99999; } |
|
|
=cut |
my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, |
################################################## |
"^$slot_name\0"); |
################################################## |
my ($tmp)=%consumed; |
# use Data::Dumper; |
if ($tmp=~/^error: 2 / ) { |
|
return 'error: unable to determine current slot status'; |
|
} |
|
my $last=0; |
|
foreach my $key (keys(%consumed)) { |
|
my $num=(split('\0',$key))[1]; |
|
if ($num > $last) { $last=$num; } |
|
if ($consumed{$key}->{'name'} eq $uname.':'.$udom) { |
|
return 'ok'; |
|
} |
|
} |
|
|
|
if (scalar(keys(%consumed)) >= $max) { |
|
return 'error: no space left in slot'; |
|
} |
|
my $wanted=$last+1; |
|
|
|
my %reservation=('name' => $uname.':'.$udom, |
|
'timestamp' => time, |
|
'symb' => $symb); |
|
|
|
my $success=&Apache::lonnet::newput('slot_reservations', |
|
{"$slot_name\0$wanted" => |
|
\%reservation}, |
|
$cdom, $cnum); |
|
if ($success eq 'ok') { |
|
my %storehash = ( |
|
symb => $symb, |
|
slot => $slot_name, |
|
action => 'reserve', |
|
context => 'parameter', |
|
); |
|
&Apache::lonnet::instructor_log('slotreservationslog',\%storehash, |
|
'',$uname,$udom,$cnum,$cdom); |
|
|
|
&Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash, |
|
'',$uname,$udom,$uname,$udom); |
|
} |
|
return $success; |
|
} |
|
|
|
sub delete_slots { |
|
my ($slot_name,$cdom,$cnum,$uname,$udom,$symb) = @_; |
|
my $delresult; |
|
my %consumed = &Apache::lonnet::dump('slot_reservations',$cdom, |
|
$cnum, "^$slot_name\0"); |
|
if (&Apache::lonnet::error(%consumed)) { |
|
return 'error: unable to determine current slot status'; |
|
} |
|
my ($tmp)=%consumed; |
|
if ($tmp=~/^error: 2 /) { |
|
return 'error: unable to determine current slot status'; |
|
} |
|
foreach my $key (keys(%consumed)) { |
|
if ($consumed{$key}->{'name'} eq $uname.':'.$udom) { |
|
my $num=(split('\0',$key))[1]; |
|
my $entry = $slot_name.'\0'.$num; |
|
$delresult = &Apache::lonnet::del('slot_reservations',[$entry], |
|
$cdom,$cnum); |
|
if ($delresult eq 'ok') { |
|
my %storehash = ( |
|
symb => $symb, |
|
slot => $slot_name, |
|
action => 'release', |
|
context => 'parameter', |
|
); |
|
&Apache::lonnet::instructor_log('slotreservationslog',\%storehash, |
|
1,$uname,$udom,$cnum,$cdom); |
|
&Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash, |
|
1,$uname,$udom,$uname,$udom); |
|
} |
|
} |
|
} |
|
return $delresult; |
|
} |
|
|
|
sub check_for_course_info { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
return 1 if ($navmap); |
|
return 0; |
|
} |
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
|
|
|
&reset_caches(); |
|
|
if ($r->header_only) { |
if ($r->header_only) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
Line 3833 sub handler {
|
Line 4058 sub handler {
|
'pres_marker', |
'pres_marker', |
'pres_value', |
'pres_value', |
'pres_type', |
'pres_type', |
'udom','uname','symb','serial']); |
'udom','uname','symb','serial','timebase']); |
|
|
|
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
Line 3848 sub handler {
|
Line 4073 sub handler {
|
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}) || |
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}) || |
&Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'. |
&Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'. |
$env{'request.course.sec'})); |
$env{'request.course.sec'})); |
if ($env{'request.course.id'} && $parm_permission) { |
my $exists = &check_for_course_info(); |
|
|
|
if ($env{'request.course.id'} && $parm_permission && $exists) { |
|
|
# Start Page |
# Start Page |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
|
|
# id numbers can change on re-ordering of folders |
|
|
|
&resetsymbcache(); |
|
|
|
# |
# |
# Main switch on form.action and form.state, as appropriate |
# Main switch on form.action and form.state, as appropriate |
# |
# |
Line 3874 sub handler {
|
Line 4097 sub handler {
|
$r->print(&header()); |
$r->print(&header()); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Manager')); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Manager')); |
&print_main_menu($r,$parm_permission); |
&print_main_menu($r,$parm_permission); |
} elsif ($env{'form.action'} eq 'crsenv' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv', |
|
text=>"Course Environment"}); |
|
&crsenv($r); |
|
} elsif ($env{'form.action'} eq 'setoverview' && $parm_permission) { |
} elsif ($env{'form.action'} eq 'setoverview' && $parm_permission) { |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', |
text=>"Overview Mode"}); |
text=>"Overview Mode"}); |
Line 3915 sub handler {
|
Line 4134 sub handler {
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=cleanparameters', |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=cleanparameters', |
text=>"Clean Parameters"}); |
text=>"Clean Parameters"}); |
&clean_parameters($r); |
&clean_parameters($r); |
} |
} elsif ($env{'form.action'} eq 'dateshift1' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'}, |
|
text=>"Shifting Dates"}); |
|
&date_shift_one($r); |
|
} elsif ($env{'form.action'} eq 'dateshift2' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'}, |
|
text=>"Shifting Dates"}); |
|
&date_shift_two($r); |
|
} elsif ($env{'form.action'} eq 'categorizecourse' && $parm_permission) { |
|
&assign_course_categories($r); |
|
} |
} else { |
} else { |
# ----------------------------- Not in a course, or not allowed to modify parms |
# ----------------------------- Not in a course, or not allowed to modify parms |
$env{'user.error.msg'}= |
if ($exists) { |
"/adm/parmset:opa:0:0:Cannot modify assessment parameters"; |
$env{'user.error.msg'}= |
|
"/adm/parmset:opa:0:0:Cannot modify assessment parameters"; |
|
} else { |
|
$env{'user.error.msg'}= |
|
"/adm/parmset::0:1:Course environment gone, reinitialize the course"; |
|
} |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
|
&reset_caches(); |
|
|
return OK; |
return OK; |
} |
} |
|
|
1; |
1; |
__END__ |
__END__ |
|
|
=pod |
|
|
|
=back |
|
|
|
=cut |
|
|
|
|
|
|
|