version 1.14, 2009/11/30 06:23:32
|
version 1.24, 2010/02/21 16:02:09
|
Line 28
|
Line 28
|
############################################################### |
############################################################### |
############################################################## |
############################################################## |
|
|
|
=pod |
|
|
|
=head1 NAME |
|
|
|
courseprefs- Handler to set/modify course configuration |
|
|
|
=head1 SYNOPSIS |
|
|
|
courseprefs provides an interface for setting general course configuration |
|
|
|
=head1 DESCRIPTION |
|
|
|
This module is used for configuration of a course |
|
|
|
=head1 INTERNAL SUBROUTINES |
|
|
|
=over |
|
|
|
=item get_allitems() |
|
|
|
=item print_config_box() |
|
|
|
=item process_changes() |
|
|
|
=item get_sec_str() |
|
|
|
=item check_clone() |
|
|
|
=item store_changes() |
|
|
|
=item update_env() |
|
|
|
=item display_disallowed() |
|
|
|
=item get_course() |
|
|
|
=item get_jscript() |
|
|
|
=item cloners_javascript() |
|
|
|
=item print_courseinfo() |
|
|
|
=item new_cloners_dom_row() |
|
|
|
=item can_modify_catsettings() |
|
|
|
=item assign_course_categories() |
|
|
|
=item print_localization() |
|
|
|
=item get_lang_choices() |
|
|
|
=item print_feedback() |
|
|
|
=item user_table() |
|
|
|
=item select_recipient() |
|
|
|
=item select_sections() |
|
|
|
=item print_discussion() |
|
|
|
=item role_checkboxes() |
|
|
|
=item print_classlists() |
|
|
|
=item print_appearance() |
|
|
|
=item print_grading() |
|
|
|
=item print_printouts() |
|
|
|
=item print_spreadsheet() |
|
|
|
=item print_bridgetasks() |
|
|
|
=item print_other() |
|
|
|
=item get_other_items() |
|
|
|
=item item_table_row_start() |
|
|
|
=item item_table_row_end() |
|
|
|
=item yes_no_radio() |
|
|
|
=item select_from_options() |
|
|
|
=item make_item_rows() |
|
|
|
Creates table used to display and set course configuration items. |
|
|
|
Inputs: $cdom,$items,$ordered,$settings,$rowtotal,$crstype |
|
where $cdom is course's domain, $items is HASH ref for current config |
|
item, $ordered is ARRAY ref of items to include in row in |
|
display order, $settings is HASH ref of current values forrow, |
|
$rowtotal is SCALAR ref used to accumulate row count, $crstype is |
|
course type. |
|
|
|
Returns: $datatable |
|
HTML mark-up of data table which accumulates individual rows. |
|
|
|
=item nothidepriv_row() |
|
|
|
Creates row containing form elements used to display and set |
|
whether Domain coordinators who are currently included in |
|
advanced course user .db file for a course are to be hidden (e.g., |
|
in syllabus, or from course user lists). |
|
|
|
Inputs: $cdom,$item,$settings,$crstype |
|
where $cdom is course domain, item is nothideprivileged, $settings is |
|
HASH ref of the current values for nothideprivileged, $crstype is |
|
course type (Course or Community). |
|
|
|
Return: $datatable |
|
HTML mark-up for Privileged users (Domain Coordinators) in staff listing. |
|
|
|
=item print_hdrfmt_row() |
|
|
|
Creates row containing form elements used to display and set |
|
substitution items and text to be used in the header included |
|
on printouts. |
|
|
|
Inputs: $item,$settings |
|
where $item is print_header_format, and $settings is a HASH ref |
|
of the current values stored for print_header_format. |
|
|
|
Returns: $output |
|
HTML mark-up containing Javascript functions: reOrder() and getIndexByName() |
|
used to dynamically update position selectboxes, and HTML table elements |
|
for the "Print header format" row. |
|
|
|
=item position_selector() |
|
|
|
Creates a select box which can be used to reorder substitutions |
|
and text included in a printout header. |
|
|
|
Inputs: $pos,$num,$maxnum |
|
where $pos is current position, $num is the unique identifier, |
|
and $maxnum is the total number of items (both substitutions |
|
and text in the printout header. |
|
|
|
Returns: $output |
|
HTML mark-up for the selectbox and a hidden form element containing |
|
the current position. |
|
|
|
=item substitution_selector() |
|
|
|
Creates a combination of select box for choosing an item |
|
(student name, course ID or assignment note) to substitute, |
|
and a corresponding size limit in the header used for printouts. |
|
|
|
Inputs: $num,$subst,$limit,$crstype |
|
where $num is the unique identifier, $subst is the current |
|
substitution (n,c or a, for name, course or note respectively, |
|
$limit is the current size limit (integer), and $crstype is |
|
course type - course or community. |
|
|
|
Returns: $output |
|
HTML mark-up for selectbox and textbox (separate table cells). |
|
|
|
=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. |
|
|
|
Returns: nothing |
|
|
|
=back |
|
|
|
=cut |
|
|
|
|
package Apache::courseprefs; |
package Apache::courseprefs; |
|
|
use strict; |
use strict; |
Line 93 sub handler {
|
Line 272 sub handler {
|
gens => 'General community settings', |
gens => 'General community settings', |
idnu => 'Community ID or number', |
idnu => 'Community ID or number', |
desc => 'Community Description', |
desc => 'Community Description', |
|
ownr => 'Community Owner', |
catg => 'Categorize community', |
catg => 'Categorize community', |
excc => 'Exclude from community catalog', |
excc => 'Exclude from community catalog', |
clon => 'Users allowed to clone community', |
clon => 'Users allowed to clone community', |
Line 118 sub handler {
|
Line 298 sub handler {
|
gens => 'General course settings', |
gens => 'General course settings', |
idnu => 'Course ID or number', |
idnu => 'Course ID or number', |
desc => 'Course Description', |
desc => 'Course Description', |
|
ownr => 'Course Owner', |
catg => 'Categorize course', |
catg => 'Categorize course', |
excc => 'Exclude from course catalog', |
excc => 'Exclude from course catalog', |
clon => 'Users allowed to clone course', |
clon => 'Users allowed to clone course', |
Line 161 sub handler {
|
Line 342 sub handler {
|
'courseinfo' => |
'courseinfo' => |
{ text => $lt{'gens'}, |
{ text => $lt{'gens'}, |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
ordered => ['owner','description','courseid','categories', |
col2 => 'Value'}], |
'hidefromcat','externalsyllabus', |
ordered => ['description','courseid','categories', |
'cloners','url','rolenames'], |
'hidefromcat','cloners','externalsyllabus', |
|
'url','rolenames'], |
|
itemtext => { |
itemtext => { |
|
owner => $lt{'ownr'}, |
description => $lt{'desc'}, |
description => $lt{'desc'}, |
courseid => $lt{'idnu'}, |
courseid => $lt{'idnu'}, |
categories => $lt{'catg'}, |
categories => $lt{'catg'}, |
Line 178 sub handler {
|
Line 358 sub handler {
|
}, |
}, |
}, |
}, |
'localization' => |
'localization' => |
{ text => 'Language/TimeZone/Locale', |
{ text => 'Language & Time Localization', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
|
col2 => 'Value',}], |
|
ordered => ['languages','timezone','datelocale'], |
ordered => ['languages','timezone','datelocale'], |
itemtext => { |
itemtext => { |
languages => 'Languages used', |
languages => 'Languages used', |
Line 193 sub handler {
|
Line 371 sub handler {
|
{ text => 'Feedback messages', |
{ text => 'Feedback messages', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Questions about:', |
header => [{col1 => 'Questions about:', |
col2 => 'Recipients'}, |
col2 => 'Recipients'}], |
{col1 => 'Questions about:', |
|
col2 => 'Custom Text'}], |
|
ordered => ['question.email','comment.email','policy.email'], |
ordered => ['question.email','comment.email','policy.email'], |
itemtext => { |
itemtext => { |
'question.email' => 'Resource Content', |
'question.email' => 'Resource Content', |
Line 206 sub handler {
|
Line 382 sub handler {
|
'discussion' => |
'discussion' => |
{ text => 'Discussion and Chat', |
{ text => 'Discussion and Chat', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
|
col2 => 'Value',}], |
|
ordered => ['plc.roles.denied','plc.users.denied', |
ordered => ['plc.roles.denied','plc.users.denied', |
'pch.roles.denied','pch.users.denied', |
'pch.roles.denied','pch.users.denied', |
'allow_limited_html_in_feedback', |
'allow_limited_html_in_feedback', |
Line 217 sub handler {
|
Line 391 sub handler {
|
'plc.users.denied' => 'No Resource Discussion', |
'plc.users.denied' => 'No Resource Discussion', |
'pch.roles.denied' => 'No Chat room use', |
'pch.roles.denied' => 'No Chat room use', |
'pch.users.denied' => 'No Chat room use', |
'pch.users.denied' => 'No Chat room use', |
allow_limited_html_in_feedback => 'Allow limited HTML in discussion posts', |
allow_limited_html_in_feedback => 'Allow limited HTML in discussion', |
allow_discussion_post_editing => 'Users can edit/delete own discussion posts', |
allow_discussion_post_editing => 'Users can edit/delete own discussion posts', |
}, |
}, |
}, |
}, |
Line 246 sub handler {
|
Line 420 sub handler {
|
'appearance' => |
'appearance' => |
{ text => 'Display of resources ', |
{ text => 'Display of resources ', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
|
col2 => 'Value'}], |
|
ordered => ['default_xml_style','pageseparators', |
ordered => ['default_xml_style','pageseparators', |
'disable_receipt_display','texengine', |
'disable_receipt_display','texengine', |
'tthoptions'], |
'tthoptions'], |
itemtext => { |
itemtext => { |
default_xml_style => 'Default XML Style File', |
default_xml_style => 'Default XML style file', |
pageseparators => 'Visibly Separate Items on Pages', |
pageseparators => 'Visibly Separate Items on Pages', |
disable_receipt_display => 'Disable display of problem receipts', |
disable_receipt_display => 'Disable display of problem receipts', |
texengine => 'Force use of a specific math rendering engine', |
texengine => 'Force use of a specific math rendering engine', |
Line 262 sub handler {
|
Line 434 sub handler {
|
'grading' => |
'grading' => |
{ text => 'Grading', |
{ text => 'Grading', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
|
col2 => 'Value',}], |
|
ordered => ['grading','rndseed', |
ordered => ['grading','rndseed', |
'receiptalg','disablesigfigs'], |
'receiptalg','disablesigfigs'], |
itemtext => { |
itemtext => { |
Line 277 sub handler {
|
Line 447 sub handler {
|
'printouts' => |
'printouts' => |
{ text => 'Printout generation', |
{ text => 'Printout generation', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
|
col2 => 'Value',}], |
|
ordered => ['problem_stream_switch','suppress_tries', |
ordered => ['problem_stream_switch','suppress_tries', |
'default_paper_size','print_header_format', |
'default_paper_size','print_header_format', |
'disableexampointprint','canuse_pdfforms'], |
'disableexampointprint','canuse_pdfforms'], |
Line 294 sub handler {
|
Line 462 sub handler {
|
'spreadsheet' => |
'spreadsheet' => |
{ text => 'Spreadsheets', |
{ text => 'Spreadsheets', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
|
col2 => 'Value'}], |
|
ordered => ['spreadsheet_default_classcalc', |
ordered => ['spreadsheet_default_classcalc', |
'spreadsheet_default_studentcalc', |
'spreadsheet_default_studentcalc', |
'spreadsheet_default_assesscalc','hideemptyrows'], |
'spreadsheet_default_assesscalc','hideemptyrows'], |
Line 309 sub handler {
|
Line 475 sub handler {
|
'bridgetasks' => |
'bridgetasks' => |
{ text => 'Bridge tasks', |
{ text => 'Bridge tasks', |
help => 'Course_Environment', |
help => 'Course_Environment', |
header => [{col1 => 'Setting', |
|
col2 => 'Value'}], |
|
ordered => ['task_messages','task_grading', |
ordered => ['task_messages','task_grading', |
'suppress_embed_prompt'], |
'suppress_embed_prompt'], |
itemtext => { |
itemtext => { |
Line 366 sub print_config_box {
|
Line 530 sub print_config_box {
|
my $itemtext = $item->{'itemtext'}; |
my $itemtext = $item->{'itemtext'}; |
my $rowtotal = 0; |
my $rowtotal = 0; |
my $output = |
my $output = |
'<table class="LC_nested_outer"> |
'<h3><a href="#">'.&mt($item->{text}).'</a></h3> |
<tr> |
<div> <span style="float:right">'. |
<th align="left" valign="middle"><span class="LC_font_larger">'. |
&Apache::loncommon::help_open_topic($item->{'help'}).'</span>'; |
&mt($item->{text}).' '. |
|
&Apache::loncommon::help_open_topic($item->{'help'}).'</span></th>'."\n". |
|
'</tr>'; |
|
if (($action eq 'feedback') || ($action eq 'classlists')) { |
if (($action eq 'feedback') || ($action eq 'classlists')) { |
$output .= ' |
$output .= ' |
<tr> |
<table class="LC_nested">'; |
<td> |
if (exists $item->{'header'}->[0]->{'col1'} || |
<table class="LC_nested"> |
exists $item->{'header'}->[0]->{'col2'}) { |
<tr class="LC_info_row"> |
$output .= ' |
|
<tr class="LC_info_row"> |
<td class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</td> |
<td class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</td> |
<td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
<td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
|
} |
$rowtotal ++; |
$rowtotal ++; |
if ($action eq 'feedback') { |
if ($action eq 'feedback') { |
$output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal); |
$output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal); |
Line 389 sub print_config_box {
|
Line 552 sub print_config_box {
|
} |
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
<table class="LC_nested"> |
<table class="LC_nested"> |
<tr class="LC_info_row"> |
<tr class="LC_info_row"> |
<td class="LC_left_item">'.&mt($item->{'header'}->[1]->{'col1'}).'</td>'; |
<td class="LC_left_item">'.&mt($item->{'header'}->[1]->{'col1'}).'</td>'; |
Line 403 sub print_config_box {
|
Line 562 sub print_config_box {
|
$output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype). |
$output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype). |
' |
' |
</table> |
</table> |
</td> |
<table class="LC_nested">'; |
</tr> |
if (exists $item->{'header'}->[0]->{'col1'} || |
<tr> |
exists $item->{'header'}->[0]->{'col2'}) { |
<td> |
$output .= ' |
<table class="LC_nested"> |
<tr class="LC_info_row"> |
<tr class="LC_info_row"> |
<td class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</td> |
<td class="LC_left_item" valign="top">'.&mt($item->{'header'}->[2]->{'col1'}).'</td> |
<td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
<td class="LC_right_item" valign="top">'.&mt($item->{'header'}->[2]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
} |
} |
} |
} else { |
} else { |
$output .= ' |
$output .= ' |
<tr> |
<table class="LC_nested">'; |
<td> |
if (exists $item->{'header'}->[0]->{'col1'} || |
<table class="LC_nested"> |
exists $item->{'header'}->[0]->{'col2'}) { |
<tr class="LC_info_row"> |
$output .= ' |
|
<tr class="LC_info_row"> |
<td class="LC_left_item" valign="top">'.&mt($item->{'header'}->[0]->{'col1'}).'</td> |
<td class="LC_left_item" valign="top">'.&mt($item->{'header'}->[0]->{'col1'}).'</td> |
<td class="LC_right_item" valign="top">'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
<td class="LC_right_item" valign="top">'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
|
} |
} |
} |
$rowtotal ++; |
$rowtotal ++; |
if ($action eq 'courseinfo') { |
if ($action eq 'courseinfo') { |
Line 449 sub print_config_box {
|
Line 610 sub print_config_box {
|
} |
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
</td> |
</div>'; |
</tr> |
|
</table><br />'; |
|
return ($output,$rowtotal); |
return ($output,$rowtotal); |
} |
} |
|
|
Line 568 sub process_changes {
|
Line 727 sub process_changes {
|
my @cloners = split(',',$env{'form.'.$entry}); |
my @cloners = split(',',$env{'form.'.$entry}); |
my @okcloners; |
my @okcloners; |
foreach my $cloner (@cloners) { |
foreach my $cloner (@cloners) { |
my ($uname,$udom) = split(':',$cloner); |
$cloner =~ s/^\s+//; |
if (&check_clone($udom,$disallowed,$uname) eq 'ok') { |
$cloner =~ s/\s+$//; |
if (!grep(/^\Q$cloner\E$/,@okcloners)) { |
unless ($cloner eq '') { |
push(@okcloners,$cloner); |
my ($uname,$udom) = split(':',$cloner); |
|
if (&check_clone($udom,$disallowed,$uname) eq 'ok') { |
|
if (!grep(/^\Q$cloner\E$/,@okcloners)) { |
|
push(@okcloners,$cloner); |
|
} |
} |
} |
} |
} |
} |
} |
Line 861 sub check_clone {
|
Line 1024 sub check_clone {
|
sub store_changes { |
sub store_changes { |
my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_; |
my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_; |
my ($chome,$output); |
my ($chome,$output); |
my (%storehash,@delkeys,@need_env_update); |
my (%storehash,@delkeys,@need_env_update,@oldcloner); |
if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) { |
if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) { |
%storehash = %{$values}; |
%storehash = %{$values}; |
} else { |
} else { |
Line 885 sub store_changes {
|
Line 1048 sub store_changes {
|
$output .= '<h3>'.&mt($prefs->{$item}{'text'}).'</h3>'; |
$output .= '<h3>'.&mt($prefs->{$item}{'text'}).'</h3>'; |
if (ref($changes->{$item}) eq 'HASH') { |
if (ref($changes->{$item}) eq 'HASH') { |
if (keys(%{$changes->{$item}}) > 0) { |
if (keys(%{$changes->{$item}}) > 0) { |
$output .= &mt('Changes made:').'<ul>'; |
$output .= &mt('Changes made:').'<ul style="list-style:none;">'; |
if ($item eq 'other') { |
if ($item eq 'other') { |
foreach my $key (sort(keys(%{$changes->{$item}}))) { |
foreach my $key (sort(keys(%{$changes->{$item}}))) { |
$storehash{$key} = $changes->{$item}{$key}; |
$storehash{$key} = $changes->{$item}{$key}; |
if ($changes->{$item}{$key} eq '') { |
if ($changes->{$item}{$key} eq '') { |
push(@delkeys,$key); |
push(@delkeys,$key); |
$output .= '<li>'.&mt('Deleted setting for [_1]','<i>'.$key.'</i>').'</li>'; |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]','<i>'.$key.'</i>')).'</li>'; |
} else { |
} else { |
$output .= '<li>'.&mt('[_1] set to [_2]','<i>'.$key.'</i>', |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]','<i>'.$key.'</i>', |
"'$storehash{$key}'").'</li>'; |
"'$storehash{$key}'")).'</li>'; |
} |
} |
} |
} |
} else { |
} else { |
Line 926 sub store_changes {
|
Line 1089 sub store_changes {
|
"'<b>".$newname."</b>'").'</li>'; |
"'<b>".$newname."</b>'").'</li>'; |
} |
} |
if ($msg ne '') { |
if ($msg ne '') { |
$output .= '<li>'.&mt($displayname).'<ul>'.$msg.'</ul></li>'; |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt($displayname)).'<ul class="LC_success">'.$msg.'</ul></li>'; |
} |
} |
} else { |
} else { |
next if (!exists($changes->{$item}{$key})); |
next if (!exists($changes->{$item}{$key})); |
Line 1001 sub store_changes {
|
Line 1164 sub store_changes {
|
} |
} |
if ($changes->{$item}{$key} eq '') { |
if ($changes->{$item}{$key} eq '') { |
push(@delkeys,$key); |
push(@delkeys,$key); |
$output .= '<li>'.&mt('Deleted setting for [_1]', |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', |
'<i>'.$displayname.'</i>').'</li>'; |
'<i>'.$displayname.'</i>')).'</li>'; |
} else { |
} else { |
$output .= '<li>'.&mt('[_1] set to [_2]', |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', |
'<i>'.$displayname.'</i>', |
'<i>'.$displayname.'</i>', |
"'<b>$displayval</b>'"); |
"'<b>$displayval</b>'")); |
if ($key eq 'url') { |
if ($key eq 'url') { |
my $bkuptime=time; |
my $bkuptime=time; |
$output .= (' 'x2).&mt('(Previous URL backed up)').': '. |
$output .= (' 'x2).&mt('(Previous URL backed up)').': '. |
Line 1016 sub store_changes {
|
Line 1179 sub store_changes {
|
} |
} |
$storehash{$key} = $changes->{$item}{$key}; |
$storehash{$key} = $changes->{$item}{$key}; |
} |
} |
|
if ($key eq 'cloners') { |
|
# Get existing cloners |
|
my %clonenames = |
|
&Apache::lonnet::dump('environment',$cdom,$cnum,'cloners'); |
|
if ($clonenames{'cloners'} =~ /,/) { |
|
@oldcloner = split(/\s*\,\s*/,$clonenames{'cloners'}); |
|
} else { |
|
$oldcloner[0] = $clonenames{'cloners'}; |
|
} |
|
} |
if (($key eq 'description') || ($key eq 'cloners') || |
if (($key eq 'description') || ($key eq 'cloners') || |
($key eq 'hidefromcat') || ($key eq 'categories')) { |
($key eq 'hidefromcat') || ($key eq 'categories')) { |
push(@need_env_update,$key); |
push(@need_env_update,$key); |
Line 1035 sub store_changes {
|
Line 1208 sub store_changes {
|
} |
} |
} |
} |
if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') { |
if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') { |
|
if (ref($changes) eq 'HASH') { |
|
if (ref($changes->{'courseinfo'}) eq 'HASH') { |
|
if (exists($changes->{'courseinfo'}{'cloners'})) { |
|
&change_clone($cdom,$cnum,$changes->{'courseinfo'}{'cloners'}, |
|
\@oldcloner); |
|
} |
|
} |
|
} |
if (@delkeys) { |
if (@delkeys) { |
if (&Apache::lonnet::del('environment',\@delkeys,$cdom,$cnum) ne 'ok') { |
if (&Apache::lonnet::del('environment',\@delkeys,$cdom,$cnum) ne 'ok') { |
$output .= '<br /><span class="LC_error">'; |
$output .= '<br /><span class="LC_error">'; |
Line 1309 sub print_courseinfo {
|
Line 1490 sub print_courseinfo {
|
} |
} |
} |
} |
if (!defined($categoriesform)) { |
if (!defined($categoriesform)) { |
$categoriesform = &mt('No categories defined for this domain'); |
$categoriesform = &mt('No categories defined in this domain.'); |
} |
} |
|
|
my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); |
my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); |
Line 1330 sub print_courseinfo {
|
Line 1511 sub print_courseinfo {
|
'</span>', |
'</span>', |
input => 'textbox', |
input => 'textbox', |
size => '40', |
size => '40', |
|
advanced => 1 |
}, |
}, |
'description' => { |
'description' => { |
text => '<b>'.&mt($itemtext->{'description'}).'</b>', |
text => '<b>'.&mt($itemtext->{'description'}).'</b>', |
input => 'textbox', |
input => 'textbox', |
size => '25', |
size => '25', |
}, |
}, |
|
'owner' => { |
|
text => '<b>'.&mt($itemtext->{'owner'}).'</b>', |
|
}, |
'courseid' => { |
'courseid' => { |
text => '<b>'.&mt($itemtext->{'courseid'}).'</b><br />'.'('. |
text => '<b>'.&mt($itemtext->{'courseid'}).'</b><br />'.'('. |
&mt('internal, optional').')', |
&mt('internal, optional').')', |
Line 1344 sub print_courseinfo {
|
Line 1529 sub print_courseinfo {
|
}, |
}, |
'cloners' => { |
'cloners' => { |
text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'. |
&mt('Coordinators included automatically'), |
&mt('Owner and Coordinators included automatically'), |
input => 'textbox', |
input => 'textbox', |
size => '40', |
size => '40', |
|
advanced => 1 |
}, |
}, |
'rolenames' => { |
'rolenames' => { |
text => '<b>'.&mt($itemtext->{'rolenames'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'rolenames'}).'</b><br />'. |
'('.$replace.')', |
'('.$replace.')', |
input => 'textbox', |
input => 'textbox', |
size => '20', |
size => '20', |
|
advanced => 1 |
}, |
}, |
'externalsyllabus' => { |
'externalsyllabus' => { |
text => '<b>'.&mt($itemtext->{'externalsyllabus'}).'</b><br />('. |
text => '<b>'.&mt($itemtext->{'externalsyllabus'}).'</b><br />('. |
Line 1381 sub print_courseinfo {
|
Line 1568 sub print_courseinfo {
|
next if (!$can_categorize); |
next if (!$can_categorize); |
} |
} |
$count ++; |
$count ++; |
$datatable .= &item_table_row_start($items{$item}{text},$count); |
if (exists $items{$item}{advanced} && $items{$item}{advanced} == 1) { |
|
$datatable .= &item_table_row_start($items{$item}{text},$count,"advanced"); |
|
} else { |
|
$datatable .= &item_table_row_start($items{$item}{text},$count); |
|
} |
if ($items{$item}{input} eq 'radio') { |
if ($items{$item}{input} eq 'radio') { |
$datatable .= &yesno_radio($item,$settings); |
$datatable .= &yesno_radio($item,$settings); |
} elsif ($item eq 'cloners') { |
} elsif ($item eq 'cloners') { |
Line 1416 sub print_courseinfo {
|
Line 1607 sub print_courseinfo {
|
if (@entries > 0) { |
if (@entries > 0) { |
foreach my $entry (@entries) { |
foreach my $entry (@entries) { |
my ($uname,$udom) = split(/:/,$entry); |
my ($uname,$udom) = split(/:/,$entry); |
|
if ($udom =~ /^$match_domain$/) { |
|
unless (&Apache::lonnet::domain($udom)) { |
|
next; |
|
} |
|
} else { |
|
next; |
|
} |
if ($uname eq '*') { |
if ($uname eq '*') { |
$datatable .= |
$datatable .= |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td valign="top" align="left"><span class="LC_nobreak">'. |
'<td valign="top" align="left"><span class="LC_nobreak">'. |
&mt('Domain:').'<b> '.$udom. |
&mt('Any user in domain:').'<b> '.$udom. |
'</b><input type="hidden" name="cloners_dom_'.$num. |
'</b><input type="hidden" name="cloners_dom_'.$num. |
'" value="'.$udom.'" /></span><br />'. |
'" value="'.$udom.'" /></span><br />'. |
'<span class="LC_nobreak"><label><input type="checkbox" '. |
'<span class="LC_nobreak"><label><input type="checkbox" '. |
Line 1428 sub print_courseinfo {
|
Line 1626 sub print_courseinfo {
|
&mt('Delete').'</label></span></td>'. |
&mt('Delete').'</label></span></td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
$num ++; |
$num ++; |
} else { |
} elsif (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { |
push(@cloners,$entry); |
unless (grep(/^\Q$entry\E$/,@cloners)) { |
|
push(@cloners,$entry); |
|
} |
} |
} |
} |
} |
} |
} |
Line 1485 sub print_courseinfo {
|
Line 1685 sub print_courseinfo {
|
$datatable .= '<input type="hidden" name="categories" value="'.$settings->{$item}.'" />'. |
$datatable .= '<input type="hidden" name="categories" value="'.$settings->{$item}.'" />'. |
&Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item}, |
&Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item}, |
$items{$item}{size},$launcher); |
$items{$item}{size},$launcher); |
|
} elsif ($item eq 'owner') { |
|
my $owner = $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'}; |
|
if ($owner =~ /:/) { |
|
my ($ownername,$ownerdom) = split(':',$owner); |
|
$owner = &Apache::loncommon::plainname($ownername,$ownerdom); |
|
} elsif ($owner ne '') { |
|
$owner = &Apache::loncommon::plainname($owner,$cdom); |
|
} else { |
|
$owner = &mt('None specified'); |
|
} |
|
my $domdesc = &Apache::lonnet::domain($cdom,'description'); |
|
$datatable .= $owner; |
} else { |
} else { |
$datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size}); |
$datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size}); |
} |
} |
Line 1649 sub print_localization {
|
Line 1861 sub print_localization {
|
} |
} |
my %items = ( |
my %items = ( |
languages => { |
languages => { |
text => &mt($itemtext->{'languages'}).'<br />'. |
text => '<b>'.&mt($itemtext->{'languages'}).'</b><br />'. |
&mt("(will override user's preference)"), |
&mt("(overrides individual user preference)"), |
input => 'selectbox', |
input => 'selectbox', |
}, |
}, |
timezone => { |
timezone => { |
text => &mt($itemtext->{'timezone'}), |
text => '<b>'.&mt($itemtext->{'timezone'}).'</b>', |
input => 'selectbox', |
input => 'selectbox', |
}, |
}, |
datelocale => { |
datelocale => { |
text => &mt($itemtext->{'datelocale'}), |
text => '<b>'.&mt($itemtext->{'datelocale'}).'</b>', |
input => 'selectbox', |
input => 'selectbox', |
}, |
}, |
); |
); |
Line 1767 sub print_feedback {
|
Line 1979 sub print_feedback {
|
my %sections = &Apache::loncommon::get_sections($cdom,$cnum); |
my %sections = &Apache::loncommon::get_sections($cdom,$cnum); |
my @sections = sort( { $a <=> $b } keys(%sections)); |
my @sections = sort( { $a <=> $b } keys(%sections)); |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
currone => 'Current recipient:', |
currone => 'Current recipient:', |
curmult => 'Current recipients:', |
currmult => 'Current recipients:', |
add => 'Additional recipient:', |
add => 'Additional recipient:', |
del => 'Delete?', |
del => 'Delete?', |
sec => 'Sections:', |
sec => 'Sections:', |
); |
); |
|
|
foreach my $item (@{$ordered}) { |
foreach my $item (@{$ordered}) { |
$count ++; |
$count ++; |
$datatable .= &item_table_row_start($items{$item}{text},$count); |
if ($position eq 'top') { |
|
$datatable .= &item_table_row_start($items{$item}{text},$count); |
|
} else { |
|
$datatable .= &item_table_row_start($items{$item}{text}."<br/>(Custom text)",$count, "advanced"); |
|
} |
if ($position eq 'top') { |
if ($position eq 'top') { |
my $includeempty = 0; |
my $includeempty = 0; |
$datatable .= &user_table($cdom,$item,\@sections, |
$datatable .= &user_table($cdom,$item,\@sections, |
Line 1832 sub user_table {
|
Line 2048 sub user_table {
|
if ($num) { |
if ($num) { |
$output .= '<tr>'. |
$output .= '<tr>'. |
'<td align="left"><i>'; |
'<td align="left"><i>'; |
if ($num > 1) { |
if ($num == 1) { |
$output .= $lt->{'currone'}; |
$output .= $lt->{'currone'}; |
} else { |
} else { |
$output .= $lt->{'currmult'}; |
$output .= $lt->{'currmult'}; |
Line 1952 sub print_discussion {
|
Line 2168 sub print_discussion {
|
my %sections = &Apache::loncommon::get_sections($cdom,$cnum); |
my %sections = &Apache::loncommon::get_sections($cdom,$cnum); |
my @sections = sort( { $a <=> $b } keys(%sections)); |
my @sections = sort( { $a <=> $b } keys(%sections)); |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
currone => 'Disallowed:', |
currone => 'Disallowed:', |
curmult => 'Disallowed:', |
currmult => 'Disallowed:', |
add => 'Disallow more:', |
add => 'Disallow more:', |
del => 'Delete?', |
del => 'Delete?', |
sec => 'Sections:', |
sec => 'Sections:', |
); |
); |
|
|
foreach my $item (@{$ordered}) { |
foreach my $item (@{$ordered}) { |
Line 2240 sub print_grading {
|
Line 2456 sub print_grading {
|
}, |
}, |
'rndseed' => { |
'rndseed' => { |
text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'. |
text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'. |
'<span class="LC_error">'.'<br />'. |
'<span class="LC_warning">'.'<br />'. |
&mt('Modifying this will make problems have different numbers and answers!'). |
&mt('Modifying this will make problems have different numbers and answers!'). |
'</span>', |
'</span>', |
input => 'selectbox', |
input => 'selectbox', |
Line 2452 sub get_other_items {
|
Line 2668 sub get_other_items {
|
} |
} |
|
|
sub item_table_row_start { |
sub item_table_row_start { |
my ($text,$count) = @_; |
my ($text,$count,$add_class) = @_; |
my $output; |
my $output; |
if ($count%2) { |
my $css_class = ($count % 2) ? 'LC_odd_row' : 'LC_even_row'; |
$output .= '<tr class="LC_odd_row">'; |
$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq ''); |
} else { |
$output .= '<tr class="'.$css_class.'">'."\n";; |
$output .= '<tr>'; |
|
} |
|
$output .= '<td class="LC_left_item">'.$text. |
$output .= '<td class="LC_left_item">'.$text. |
'</td><td class="LC_right_item" align="right">'; |
'</td><td class="LC_right_item">'; |
return $output; |
return $output; |
} |
} |
|
|
Line 2656 sub print_hdrfmt_row {
|
Line 2870 sub print_hdrfmt_row {
|
$currstr .= '<b>'.&mt('Current print header:').' <span class="LC_warning"><tt>'. |
$currstr .= '<b>'.&mt('Current print header:').' <span class="LC_warning"><tt>'. |
$settings->{$item}.'</tt></span></b><br />'; |
$settings->{$item}.'</tt></span></b><br />'; |
my @current = split(/(%\d*[nca])/,$settings->{$item}); |
my @current = split(/(%\d*[nca])/,$settings->{$item}); |
foreach my $item (@current) { |
foreach my $val (@current) { |
unless ($item eq '') { |
unless ($val eq '') { |
push(@curr,$item); |
push(@curr,$val); |
} |
} |
} |
} |
$currnum = @curr; |
$currnum = @curr; |
Line 2811 sub substitution_selector {
|
Line 3025 sub substitution_selector {
|
return $output; |
return $output; |
} |
} |
|
|
|
sub change_clone { |
|
my ($cdom,$cnum,$clonelist,$oldcloner) = @_; |
|
my $clone_crs = $cnum.':'.$cdom; |
|
if ($cnum && $cdom) { |
|
my $clone_crs = $cnum.':'.$cdom; |
|
my @allowclone; |
|
if ($clonelist =~ /,/) { |
|
@allowclone = split(',',$clonelist); |
|
} else { |
|
$allowclone[0] = $clonelist; |
|
} |
|
foreach my $currclone (@allowclone) { |
|
if (!grep(/^$currclone$/,@$oldcloner)) { |
|
if ($currclone ne '*') { |
|
my ($uname,$udom) = split(/:/,$currclone); |
|
if ($uname && $udom && $uname ne '*') { |
|
if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { |
|
my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); |
|
if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { |
|
if ($currclonecrs{'cloneable'} eq '') { |
|
$currclonecrs{'cloneable'} = $clone_crs; |
|
} else { |
|
$currclonecrs{'cloneable'} .= ','.$clone_crs; |
|
} |
|
&Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
foreach my $oldclone (@$oldcloner) { |
|
if (!grep(/^\Q$oldclone\E$/,@allowclone)) { |
|
if ($oldclone ne '*') { |
|
my ($uname,$udom) = split(/:/,$oldclone); |
|
if ($uname && $udom && $uname ne '*' ) { |
|
if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { |
|
my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); |
|
my %newclonecrs = (); |
|
if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { |
|
if ($currclonecrs{'cloneable'} =~ /,/) { |
|
my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; |
|
foreach my $crs (@currclonecrs) { |
|
if ($crs ne $clone_crs) { |
|
$newclonecrs{'cloneable'} .= $crs.','; |
|
} |
|
} |
|
$newclonecrs{'cloneable'} =~ s/,$//; |
|
} else { |
|
$newclonecrs{'cloneable'} = ''; |
|
} |
|
&Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
1; |
1; |