version 1.28.2.4, 2010/12/22 16:46:43
|
version 1.49.2.28, 2021/12/24 21:09:09
|
Line 137 whether Domain coordinators who are curr
|
Line 137 whether Domain coordinators who are curr
|
advanced course user .db file for a course are to be hidden (e.g., |
advanced course user .db file for a course are to be hidden (e.g., |
in syllabus, or from course user lists). |
in syllabus, or from course user lists). |
|
|
Inputs: $cdom,$item,$settings,$crstype |
Inputs: $cdom,$item,$settings,$crstype,$noedit |
where $cdom is course domain, item is nothideprivileged, $settings is |
where $cdom is course domain, item is nothideprivileged, $settings is |
HASH ref of the current values for nothideprivileged, $crstype is |
HASH ref of the current values for nothideprivileged, $crstype is |
course type (Course or Community). |
course type (Course or Community). |
Line 215 use Apache::lonnet;
|
Line 215 use Apache::lonnet;
|
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
use Apache::lonconfigsettings; |
use Apache::lonconfigsettings; |
|
use Apache::lonrelrequtils; |
|
use Apache::lonparmset; |
|
use Apache::courseclassifier; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
|
|
|
my $registered_cleanup; |
|
my $modified_courses; |
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
if ($r->header_only) { |
if ($r->header_only) { |
Line 227 sub handler {
|
Line 233 sub handler {
|
} |
} |
my $context = 'course'; |
my $context = 'course'; |
my $cid = $env{'request.course.id'}; |
my $cid = $env{'request.course.id'}; |
my ($cnum,$cdom) = &get_course($cid); |
my ($cnum,$cdom,$chome) = &get_course($cid); |
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
my $parm_permission = &Apache::lonnet::allowed('opa',$cid); |
my ($parm_permission,$allowed) = &get_permission($cid); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
if ($parm_permission && $navmap) { |
if ($allowed && $navmap) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
} else { |
} else { |
Line 256 sub handler {
|
Line 262 sub handler {
|
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
|
|
|
$registered_cleanup=0; |
|
@{$modified_courses}=(); |
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['phase','actions','origin']); |
['phase','actions','origin']); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
Line 267 sub handler {
|
Line 276 sub handler {
|
my %lt; |
my %lt; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
%lt = ( |
%lt = ( |
conf => 'Community Configuration', |
conf => 'Community Settings', |
edit => 'Edit Community Configuration', |
edit => 'Edit Community Settings', |
gens => 'General community settings', |
gens => 'General community settings', |
idnu => 'Community ID or number', |
idnu => 'Community ID or number', |
|
unco => 'Unique code', |
desc => 'Community Description', |
desc => 'Community Description', |
ownr => 'Community Owner', |
ownr => 'Community Owner', |
cown => 'Community Co-owners', |
cown => 'Community Co-owners', |
Line 286 sub handler {
|
Line 296 sub handler {
|
defd => 'Default dates for member access', |
defd => 'Default dates for member access', |
stuv => 'Member-viewable membership list options', |
stuv => 'Member-viewable membership list options', |
stul => 'Member agreement needed to be listed', |
stul => 'Member agreement needed to be listed', |
clas => 'Membership and Facilitator Listing', |
clas => 'Membership and facilitator listing', |
priv => 'Privileged users (Domain Coordinators) in facilitator listing', |
prus => 'Privileged users (Domain Coordinators) in facilitator listing', |
defc => 'Default Community Spreadsheet', |
defc => 'Default Community Spreadsheet', |
defs => 'Default User Spreadsheet', |
defs => 'Default User Spreadsheet', |
seme => 'Send message to member when clicking Done on Tasks' |
seme => 'Send message to member when clicking Done on Tasks' |
); |
); |
} else { |
} else { |
%lt = ( |
%lt = ( |
conf => 'Course Configuration', |
conf => 'Course Settings', |
edit => 'Edit Course Configuration', |
edit => 'Edit Course Settings', |
gens => 'General course settings', |
gens => 'General course settings', |
idnu => 'Course ID or number', |
idnu => 'Course ID or number', |
|
unco => 'Unique code', |
desc => 'Course Description', |
desc => 'Course Description', |
|
cred => 'Student credits', |
ownr => 'Course Owner', |
ownr => 'Course Owner', |
cown => 'Course Co-owners', |
cown => 'Course Co-owners', |
catg => 'Categorize course', |
catg => 'Categorize course', |
Line 313 sub handler {
|
Line 325 sub handler {
|
defd => 'Default dates for student access', |
defd => 'Default dates for student access', |
stuv => 'Student-viewable classlist options', |
stuv => 'Student-viewable classlist options', |
stul => 'Student agreement needed to be listed', |
stul => 'Student agreement needed to be listed', |
clas => 'Classlists and Staff Listing', |
clas => 'Classlists and staff listing', |
priv => 'Privileged users (Domain Coordinators) in staff listing', |
prus => 'Privileged users (Domain Coordinators) in staff listing', |
|
prdo => "Domains to check for privileged users (besides course's domain)", |
defc => 'Default Course Spreadsheet', |
defc => 'Default Course Spreadsheet', |
defs => 'Default Student Spreadsheet', |
defs => 'Default Student Spreadsheet', |
seme => 'Send message to student when clicking Done on Tasks', |
seme => 'Send message to student when clicking Done on Tasks', |
); |
); |
} |
} |
|
$lt{'lcrv'} = 'Required LON-CAPA version'; |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/courseprefs', |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/courseprefs', |
text=>$lt{'conf'}}); |
text=>$lt{'conf'}}); |
my $breadcrumbs = |
my $breadcrumbs = |
Line 330 sub handler {
|
Line 344 sub handler {
|
$phase = $env{'form.phase'}; |
$phase = $env{'form.phase'}; |
} |
} |
|
|
if ($phase eq 'categorizecourse') { |
if (($phase eq 'categorizecourse') && ($parm_permission->{'categorizecourse'})) { |
&assign_course_categories($r,$crstype); |
&assign_course_categories($r,$crstype); |
return OK; |
return OK; |
} |
} |
|
|
|
if (($phase eq 'releaseinfo') && ($parm_permission->{'releaseinfo'})) { |
|
my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'}; |
|
if ($loncaparev) { |
|
if (&display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype)) { |
|
push(@{$modified_courses},[$cdom,$cnum,$chome,$crstype]); |
|
unless ($registered_cleanup) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\&update_releasereq,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
|
} |
|
return OK; |
|
} |
|
} |
|
|
my %values=&Apache::lonnet::dump('environment',$cdom,$cnum); |
my %values=&Apache::lonnet::dump('environment',$cdom,$cnum); |
my @prefs_order = ('courseinfo','localization','feedback','discussion', |
my @prefs_order = ('courseinfo','localization','feedback','discussion', |
'classlists','appearance','grading','printouts', |
'classlists','appearance','grading','printouts', |
Line 343 sub handler {
|
Line 372 sub handler {
|
my %prefs = ( |
my %prefs = ( |
'courseinfo' => |
'courseinfo' => |
{ text => $lt{'gens'}, |
{ text => $lt{'gens'}, |
help => 'Course_Environment', |
help => 'Course_Prefs_General', |
header => [{col1 => 'Setting', |
ordered => ['owner','co-owners','loncaparev','description', |
col2 => 'Value'}], |
'clonedfrom','courseid','uniquecode','categories', |
ordered => ['owner','co-owners','description','courseid', |
'hidefromcat','syllabus','cloners','url', |
'categories','hidefromcat','externalsyllabus', |
'rolenames'], |
'url','rolenames','cloners'], |
|
itemtext => { |
itemtext => { |
'owner' => $lt{'ownr'}, |
'owner' => $lt{'ownr'}, |
'co-owners' => $lt{'cown'}, |
'co-owners' => $lt{'cown'}, |
'description' => $lt{'desc'}, |
'description' => $lt{'desc'}, |
'courseid' => $lt{'idnu'}, |
'courseid' => $lt{'idnu'}, |
|
'uniquecode' => $lt{'unco'}, |
'categories' => $lt{'catg'}, |
'categories' => $lt{'catg'}, |
'hidefromcat' => $lt{'excc'}, |
'hidefromcat' => $lt{'excc'}, |
'cloners' => $lt{'clon'}, |
'cloners' => $lt{'clon'}, |
'externalsyllabus' => 'URL of Syllabus', |
'syllabus' => 'Syllabus status', |
'url' => 'Top Level Map', |
'url' => 'Top Level Map', |
'rolenames' => $lt{'rept'}, |
'rolenames' => $lt{'rept'}, |
|
'loncaparev' => $lt{'lcrv'}, |
|
'clonedfrom' => 'Cloned from', |
}, |
}, |
}, |
}, |
'localization' => |
'localization' => |
{ text => 'Language and Time Localization', |
{ text => 'Language and time localization', |
help => 'Course_Environment', |
help => 'Course_Prefs_Language', |
header => [{col1 => 'Setting', |
|
col2 => 'Value',}], |
|
ordered => ['languages','timezone','datelocale'], |
ordered => ['languages','timezone','datelocale'], |
itemtext => { |
itemtext => { |
languages => 'Languages used', |
languages => 'Languages used', |
Line 376 sub handler {
|
Line 405 sub handler {
|
}, |
}, |
'feedback' => |
'feedback' => |
{ text => 'Feedback messages', |
{ text => 'Feedback messages', |
help => 'Course_Environment', |
help => 'Course_Prefs_Feedback', |
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 390 sub handler {
|
Line 417 sub handler {
|
}, |
}, |
'discussion' => |
'discussion' => |
{ text => 'Discussion and Chat', |
{ text => 'Discussion and Chat', |
help => 'Course_Environment', |
help => 'Course_Prefs_Discussions', |
ordered => ['pch.roles.denied','pch.users.denied', |
ordered => ['pch.roles.denied','pch.users.denied', |
'plc.roles.denied','plc.users.denied', |
'plc.roles.denied','plc.users.denied', |
'allow_limited_html_in_feedback', |
'allow_limited_html_in_feedback', |
'allow_discussion_post_editing'], |
'allow_discussion_post_editing', |
|
'discussion_post_fonts'], |
itemtext => { |
itemtext => { |
'pch.roles.denied' => 'No Resource Discussion', |
'pch.roles.denied' => 'No Resource Discussion', |
'pch.users.denied' => 'No Resource Discussion', |
'pch.users.denied' => 'No Resource Discussion', |
Line 402 sub handler {
|
Line 430 sub handler {
|
'plc.users.denied' => 'No Chat room use', |
'plc.users.denied' => 'No Chat room use', |
allow_limited_html_in_feedback => 'Allow limited HTML in discussion', |
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', |
|
discussion_post_fonts => 'Discussion post fonts based on likes/unlikes', |
}, |
}, |
}, |
}, |
'classlists' => |
'classlists' => |
{ text => $lt{'clas'}, |
{ text => $lt{'clas'}, |
help => 'Course_Environment', |
help => 'Course_Prefs_Classlists', |
header => [{col1 => 'Type', |
header => [{col1 => 'Type', |
col2 => $lt{'defd'}}, |
col2 => $lt{'defd'}}, |
{col1 => 'Setting', |
{col1 => 'Setting', |
Line 415 sub handler {
|
Line 444 sub handler {
|
col2 => $lt{'stuv'}}], |
col2 => $lt{'stuv'}}], |
ordered => ['default_enrollment_start_date', |
ordered => ['default_enrollment_start_date', |
'default_enrollment_end_date', |
'default_enrollment_end_date', |
'nothideprivileged','student_classlist_view', |
'defaultcredits', |
|
'nothideprivileged','checkforpriv', |
|
'student_classlist_view', |
'student_classlist_opt_in','student_classlist_portfiles'], |
'student_classlist_opt_in','student_classlist_portfiles'], |
itemtext => { |
itemtext => { |
default_enrollment_start_date => 'Start date', |
default_enrollment_start_date => 'Start date', |
default_enrollment_end_date => 'End date', |
default_enrollment_end_date => 'End date', |
nothideprivileged => $lt{'priv'}, |
nothideprivileged => $lt{'prus'}, |
|
checkforpriv => $lt{'prdo'}, |
student_classlist_view => $lt{'stuv'}, |
student_classlist_view => $lt{'stuv'}, |
student_classlist_opt_in => $lt{'stul'}, |
student_classlist_opt_in => $lt{'stul'}, |
student_classlist_portfiles => 'Include link to accessible portfolio files', |
student_classlist_portfiles => 'Include link to accessible portfolio files', |
|
defaultcredits => $lt{'cred'}, |
}, |
}, |
}, |
}, |
'appearance' => |
'appearance' => |
{ text => 'Display of resources ', |
{ text => 'Display of resources ', |
help => 'Course_Environment', |
help => 'Course_Prefs_Display', |
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','uselcmath','usejsme','inline_chem'], |
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', |
tthoptions => 'Default set of options to pass to tth/m when converting TeX', |
tthoptions => 'Default set of options to pass to tth/m when converting TeX', |
|
uselcmath => 'Student formula entry uses inline preview, not DragMath pop-up', |
|
usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)', |
|
inline_chem => 'Chemical reaction response uses inline preview, not pop-up', |
}, |
}, |
}, |
}, |
'grading' => |
'grading' => |
{ text => 'Grading', |
{ text => 'Grading', |
help => 'Course_Environment', |
help => 'Course_Prefs_Grading', |
header => [{col1 => 'Setting', |
|
col2 => 'Value',}], |
|
ordered => ['grading','rndseed', |
ordered => ['grading','rndseed', |
'receiptalg','disablesigfigs'], |
'receiptalg','disablesigfigs'], |
itemtext => { |
itemtext => { |
Line 459 sub handler {
|
Line 491 sub handler {
|
}, |
}, |
'printouts' => |
'printouts' => |
{ text => 'Printout generation', |
{ text => 'Printout generation', |
help => 'Course_Environment', |
help => 'Course_Prefs_Printouts', |
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'], |
itemtext => { |
itemtext => { |
problem_stream_switch => 'Allow problems to be split over pages', |
problem_stream_switch => 'Allow problems to be split over pages', |
suppress_tries => 'Suppress number of tries in printing', |
suppress_tries => 'Suppress number of tries in printing', |
default_paper_size => 'Default paper type', |
default_paper_size => 'Default paper type', |
print_header_format => 'Print header format', |
print_header_format => 'Print header format', |
disableexampointprint => 'Disable automatically printing point values on exams', |
disableexampointprint => 'Disable automatically printing point values on bubblesheet exams', |
canuse_pdfforms => 'Users can print problems as PDF forms and upload later for grading', |
canuse_pdfforms => 'Users can print problems as PDF forms and upload later for grading', |
}, |
}, |
}, |
}, |
'spreadsheet' => |
'spreadsheet' => |
{ text => 'Spreadsheets', |
{ text => 'Spreadsheets', |
help => 'Course_Environment', |
help => 'Course_Prefs_Spreadsheet', |
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 491 sub handler {
|
Line 519 sub handler {
|
}, |
}, |
'bridgetasks' => |
'bridgetasks' => |
{ text => 'Bridge tasks', |
{ text => 'Bridge tasks', |
help => 'Course_Environment', |
help => 'Course_Prefs_Bridgetasks', |
header => [{col1 => 'Setting', |
|
col2 => 'Value'}], |
|
ordered => ['task_messages','task_grading', |
ordered => ['task_messages','task_grading', |
'suppress_embed_prompt'], |
'suppress_embed_prompt'], |
itemtext => { |
itemtext => { |
Line 504 sub handler {
|
Line 530 sub handler {
|
}, |
}, |
'other' => |
'other' => |
{ text => 'Other settings', |
{ text => 'Other settings', |
help => 'Course_Environment', |
help => 'Course_Prefs_Other', |
header => [ {col1 => 'Item', |
header => [ {col1 => 'Item', |
col2 => 'Value', |
col2 => 'Value', |
}], |
}], |
}, |
}, |
); |
); |
if ($phase eq 'process') { |
if (($phase eq 'process') && ($parm_permission->{'process'})) { |
my @allitems = &get_allitems(%prefs); |
my @allitems = &get_allitems(%prefs); |
&Apache::lonconfigsettings::make_changes($r,$cdom,$phase,$context, |
&Apache::lonconfigsettings::make_changes($r,$cdom,$phase,$context, |
\@prefs_order,\%prefs,\%values, |
\@prefs_order,\%prefs,\%values, |
$cnum,undef,\@allitems); |
$cnum,undef,\@allitems, |
} elsif ($phase eq 'display') { |
'coursepref',$parm_permission); |
my $jscript = &get_jscript($cdom,$phase,$crstype); |
} elsif (($phase eq 'display') && ($parm_permission->{'display'})) { |
|
my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values); |
my @allitems = &get_allitems(%prefs); |
my @allitems = &get_allitems(%prefs); |
&Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, |
&Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, |
\@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype); |
\@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype, |
|
'coursepref',$parm_permission); |
} else { |
} else { |
&Apache::lonconfigsettings::display_choices($r,$phase,$context, |
&Apache::lonconfigsettings::display_choices($r,$phase,$context, |
\@prefs_order,\%prefs); |
\@prefs_order,\%prefs, |
|
'coursepref',$parm_permission); |
} |
} |
return OK; |
return OK; |
} |
} |
|
|
|
sub get_permission { |
|
my ($cid) = @_; |
|
my %permission; |
|
my $allowed = 0; |
|
return (\%permission,$allowed) unless ($cid); |
|
if (&Apache::lonnet::allowed('opa',$cid)) { |
|
%permission= ( |
|
'pickactions' => 1, |
|
'categorizecourse' => 1, |
|
'releaseinfo' => 1, |
|
'process' => 1, |
|
'display' => 1, |
|
); |
|
} elsif (&Apache::lonnet::allowed('vpa',$env{'request.course.id'})) { |
|
%permission = ( |
|
'pickactions' => 1, |
|
'releaseinfo' => 1, |
|
'display' => 1, |
|
); |
|
} |
|
foreach my $perm (values(%permission)) { |
|
if ($perm) { $allowed=1; last; } |
|
} |
|
return (\%permission,$allowed); |
|
} |
|
|
sub get_allitems { |
sub get_allitems { |
my (%prefs) = @_; |
my (%prefs) = @_; |
my @allitems; |
my @allitems; |
Line 544 sub get_allitems {
|
Line 599 sub get_allitems {
|
} |
} |
|
|
sub print_config_box { |
sub print_config_box { |
my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype) = @_; |
my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_; |
my $ordered = $item->{'ordered'}; |
my $ordered = $item->{'ordered'}; |
my $itemtext = $item->{'itemtext'}; |
my $itemtext = $item->{'itemtext'}; |
|
my $noedit; |
|
if (ref($parm_permission) eq 'HASH') { |
|
unless ($parm_permission->{'process'}) { |
|
$noedit = 1; |
|
} |
|
} |
my $rowtotal = 0; |
my $rowtotal = 0; |
my $output = |
my $output = |
'<table class="LC_nested_outer"> |
'<table class="LC_nested_outer"> |
<tr> |
<tr> |
<th align="left" valign="middle"><span class="LC_nobreak" style="font-size: larger;" >'. |
<th align="left" valign="middle"><span class="LC_nobreak" style="font-size: larger;" >'. |
&mt($item->{text}).' '. |
&mt($item->{text}); |
&Apache::loncommon::help_open_topic($item->{'help'}).'</span></th>'."\n". |
if ($item->{'help'}) { |
'</tr>'; |
$output .= ' '. |
|
&Apache::loncommon::help_open_topic($item->{'help'}); |
|
} |
|
$output .= '</span></th>'."\n". |
|
'</tr>'; |
if (($action eq 'feedback') || ($action eq 'classlists')) { |
if (($action eq 'feedback') || ($action eq 'classlists')) { |
$output .= ' |
$output .= ' |
<tr> |
<tr> |
<td> |
<td> |
<table class="LC_nested">'; |
<table class="LC_nested">'; |
if (exists $item->{'header'}->[0]->{'col1'} || |
if (exists $item->{'header'}->[0]->{'col1'} || |
exists $item->{'header'}->[0]->{'col2'}) { |
exists $item->{'header'}->[0]->{'col2'}) { |
$output .= ' |
$output .= ' |
<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">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>'; |
<td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
if ($action eq 'feedback') { |
|
$output .= ' |
|
<td class="LC_right_item" colspan="2">'; |
|
} else { |
|
$output .= ' |
|
<td class="LC_right_item">'; |
|
} |
|
$output .= &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,$noedit); |
} elsif ($action eq 'classlists') { |
} elsif ($action eq 'classlists') { |
$output .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype); |
$output .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); |
} |
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
</td> |
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td> |
<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>'; |
$output .= ' |
if ($action eq 'classlists') { |
<td class="LC_right_item">'.&mt($item->{'header'}->[1]->{'col2'}).'</td> |
$output .= ' |
|
<td class="LC_right_item" colspan="2">'; |
|
} else { |
|
$output .= ' |
|
<td class="LC_right_item">'; |
|
} |
|
$output .= &mt($item->{'header'}->[1]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
if ($action eq 'classlists') { |
if ($action eq 'classlists') { |
$output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype). |
$output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit). |
' |
' |
</table> |
</table> |
</td> |
</td> |
Line 595 sub print_config_box {
|
Line 673 sub print_config_box {
|
<tr> |
<tr> |
<td> |
<td> |
<table class="LC_nested">'; |
<table class="LC_nested">'; |
if (exists $item->{'header'}->[0]->{'col1'} || |
if (exists $item->{'header'}->[2]->{'col1'} || |
exists $item->{'header'}->[0]->{'col2'}) { |
exists $item->{'header'}->[2]->{'col2'}) { |
$output .= ' |
$output .= ' |
<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">'.&mt($item->{'header'}->[2]->{'col1'}).'</td> |
<td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
<td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
} |
} |
} |
} |
} else { |
} else { |
$output .= ' |
$output .= ' |
Line 613 sub print_config_box {
|
Line 691 sub print_config_box {
|
exists $item->{'header'}->[0]->{'col2'}) { |
exists $item->{'header'}->[0]->{'col2'}) { |
$output .= ' |
$output .= ' |
<tr class="LC_info_row"> |
<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> |
if (($action eq 'courseinfo') || ($action eq 'localization') || |
|
($action eq 'print_discussion')) { |
|
$output .= '<td class="LC_right_item" valign="top" colspan="2">'; |
|
} else { |
|
$output .= '<td class="LC_right_item" valign="top">'; |
|
} |
|
$output .= &mt($item->{'header'}->[0]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
} |
} |
} |
} |
$rowtotal ++; |
$rowtotal ++; |
if ($action eq 'courseinfo') { |
if ($action eq 'courseinfo') { |
$output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); |
$output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'localization') { |
} elsif ($action eq 'localization') { |
$output .= &print_localization($cdom,$settings,$ordered,$itemtext,\$rowtotal); |
$output .= &print_localization($cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); |
} elsif ($action eq 'feedback') { |
} elsif ($action eq 'feedback') { |
$output .= &print_feedback('bottom',$cdom,$settings,$ordered,$itemtext,\$rowtotal); |
$output .= &print_feedback('bottom',$cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); |
} elsif ($action eq 'discussion') { |
} elsif ($action eq 'discussion') { |
$output .= &print_discussion($cdom,$settings,$ordered,$itemtext,\$rowtotal); |
$output .= &print_discussion($cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); |
} elsif ($action eq 'classlists') { |
} elsif (($action eq 'classlists') || ($action eq 'viewableroster')) { |
$output .= &print_classlists('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype); |
$output .= &print_classlists('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'appearance') { |
} elsif ($action eq 'appearance') { |
$output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); |
$output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'grading') { |
} elsif ($action eq 'grading') { |
$output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); |
$output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'printouts') { |
} elsif ($action eq 'printouts') { |
$output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); |
$output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'spreadsheet') { |
} elsif ($action eq 'spreadsheet') { |
$output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); |
$output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'bridgetasks') { |
} elsif ($action eq 'bridgetasks') { |
$output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); |
$output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'other') { |
} elsif ($action eq 'other') { |
$output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype); |
$output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit); |
} |
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
Line 670 sub process_changes {
|
Line 754 sub process_changes {
|
} |
} |
} |
} |
} elsif (ref($item->{'ordered'}) eq 'ARRAY') { |
} elsif (ref($item->{'ordered'}) eq 'ARRAY') { |
@ordered = @{$item->{'ordered'}}; |
if ($action eq 'courseinfo') { |
|
my ($can_toggle_cat,$can_categorize) = |
|
&can_modify_catsettings($cdom,$crstype); |
|
foreach my $entry (@{$item->{'ordered'}}) { |
|
next if (($entry eq 'hidefromcat') && |
|
(!$can_toggle_cat)); |
|
next if (($entry eq 'categories') && |
|
(!$can_categorize)); |
|
next if (($entry eq 'loncaparev') || |
|
($entry eq 'owner') || |
|
($entry eq 'clonedfrom') || |
|
($entry eq 'syllabus')); |
|
push(@ordered,$entry); |
|
} |
|
} elsif ($action eq 'classlists') { |
|
foreach my $entry (@{$item->{'ordered'}}) { |
|
next if ($entry eq 'defaultcredits'); |
|
push(@ordered,$entry); |
|
} |
|
} else { |
|
@ordered = @{$item->{'ordered'}}; |
|
} |
} |
} |
if (@ordered > 0) { |
if (@ordered > 0) { |
if ($action eq 'feedback') { |
if ($action eq 'feedback') { |
Line 719 sub process_changes {
|
Line 824 sub process_changes {
|
my @clonedoms; |
my @clonedoms; |
if (exists($env{'form.cloners_activate'})) { |
if (exists($env{'form.cloners_activate'})) { |
my $actnum = $env{'form.cloners_activate'}; |
my $actnum = $env{'form.cloners_activate'}; |
if ($actnum ne '') { |
if ($actnum ne '-1') { |
if ($env{'form.cloners_dom_'.$actnum} ne '') { |
if ($env{'form.cloners_dom_'.$actnum} ne '') { |
my $clonedom = $env{'form.cloners_dom_'.$actnum}; |
my $clonedom = $env{'form.cloners_dom_'.$actnum}; |
if (&check_clone($clonedom,$disallowed) eq 'ok') { |
if (&check_clone($clonedom,$disallowed) eq 'ok') { |
Line 737 sub process_changes {
|
Line 842 sub process_changes {
|
my $clonedom = $env{'form.cloners_dom_'.$i}; |
my $clonedom = $env{'form.cloners_dom_'.$i}; |
if (&check_clone($clonedom,$disallowed) eq 'ok') { |
if (&check_clone($clonedom,$disallowed) eq 'ok') { |
if (!grep(/^\*:\Q$clonedom\E$/,@clonedoms)) { |
if (!grep(/^\*:\Q$clonedom\E$/,@clonedoms)) { |
push (@clonedoms,'*:'.$clonedom); |
push(@clonedoms,'*:'.$clonedom); |
} |
} |
} |
} |
} |
} |
Line 783 sub process_changes {
|
Line 888 sub process_changes {
|
} |
} |
} |
} |
} |
} |
|
if (ref($values) eq 'HASH') { |
|
my (@code_order,%codedefaults); |
|
&Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults, |
|
\@code_order); |
|
my $clonebycode; |
|
if ($env{'form.cloners_instcode'}) { |
|
if (@code_order > 0) { |
|
my @standardnames = &Apache::loncommon::get_standard_codeitems(); |
|
my %local_to_standard; |
|
for (my $i=0; $i<@code_order; $i++) { |
|
$local_to_standard{$code_order[$i]} = $standardnames[$i]; |
|
} |
|
foreach my $item (@code_order) { |
|
my $key = $local_to_standard{$item}; |
|
if ($key ne '') { |
|
if ($env{'form.'.$key}) { |
|
$clonebycode .= $key.'='.&escape($env{'form.'.$key}).'&'; |
|
} |
|
} |
|
} |
|
$clonebycode =~ s/\&$//; |
|
} |
|
} |
|
if ($clonebycode) { |
|
if ($newvalues{$entry}) { |
|
$newvalues{$entry} .= ','.$clonebycode; |
|
} else { |
|
$newvalues{$entry} = $clonebycode; |
|
} |
|
} |
|
} |
} |
} |
if (ref($disallowed) eq 'HASH') { |
if (ref($disallowed) eq 'HASH') { |
if (ref($disallowed->{'cloners'}) eq 'HASH') { |
if (ref($disallowed->{'cloners'}) eq 'HASH') { |
Line 832 sub process_changes {
|
Line 968 sub process_changes {
|
my $udom = $env{'user.domain'}; |
my $udom = $env{'user.domain'}; |
my $pendingcoowners = $values->{'internal.pendingco-owners'}; |
my $pendingcoowners = $values->{'internal.pendingco-owners'}; |
my @pendingcoown = split(',',$pendingcoowners); |
my @pendingcoown = split(',',$pendingcoowners); |
if ($env{'form.pending_coowoner'}) { |
if ($env{'form.pending_coowner'}) { |
foreach my $item (@pendingcoown) { |
foreach my $item (@pendingcoown) { |
unless ($item eq $uname.':'.$udom) { |
unless ($item eq $uname.':'.$udom) { |
push(@newpending,$item); |
push(@newpending,$item); |
} |
} |
} |
} |
@newcoown = @currcoown; |
@newcoown = @currcoown; |
if ($env{'form.pending_coowoner'} eq 'accept') { |
if ($env{'form.pending_coowner'} eq 'accept') { |
unless (grep(/^\Q$uname\E:\Q$udom\E$/,@currcoown)) { |
unless (grep(/^\Q$uname\E:\Q$udom\E$/,@currcoown)) { |
push(@newcoown,$uname.':'.$udom); |
push(@newcoown,$uname.':'.$udom); |
} |
} |
} |
} |
} elsif ($env{'form.remove_coowoner'}) { |
} elsif ($env{'form.remove_coowner'}) { |
foreach my $item (@currcoown) { |
foreach my $item (@currcoown) { |
unless ($item eq $uname.':'.$udom) { |
unless ($item eq $uname.':'.$udom) { |
push(@newcoown,$item); |
push(@newcoown,$item); |
Line 978 sub process_changes {
|
Line 1114 sub process_changes {
|
} |
} |
} |
} |
$newvalues{$entry} =~ s/,$//; |
$newvalues{$entry} =~ s/,$//; |
|
} elsif ($entry eq 'discussion_post_fonts') { |
|
my ($classorder,$classtitles) = &discussion_vote_classes(); |
|
my $fontchange = 0; |
|
foreach my $class (@{$classorder}) { |
|
my $ext_entry = $entry.'_'.$class; |
|
my $size = $env{'form.'.$ext_entry.'_size'}; |
|
my $unit = $env{'form.'.$ext_entry.'_unit'}; |
|
my $weight = $env{'form.'.$ext_entry.'_weight'}; |
|
my $style = $env{'form.'.$ext_entry.'_style'}; |
|
my $other = $env{'form.'.$ext_entry.'_other'}; |
|
$size =~ s/,//g; |
|
$unit =~ s/,//g; |
|
$weight =~ s/,//g; |
|
$style =~ s/,//g; |
|
$other =~ s/[^\w;:\s\-\%.]//g; |
|
$other =~ s/(^\s+|\s+$)//g; |
|
$newvalues{$ext_entry} = join(',',($size.$unit,$weight,$style,$other)); |
|
my $current = $values->{$ext_entry}; |
|
if ($values->{$ext_entry} eq '') { |
|
$current = ',,,'; |
|
} |
|
if ($newvalues{$ext_entry} ne $current) { |
|
$changes->{$ext_entry} = $newvalues{$ext_entry}; |
|
$fontchange ++; |
|
} |
|
} |
|
if ($fontchange) { |
|
$changes->{$entry} = 1; |
|
} |
} elsif ($entry eq 'nothideprivileged') { |
} elsif ($entry eq 'nothideprivileged') { |
my @curr_nothide; |
my @curr_nothide; |
my @new_nothide; |
my @new_nothide; |
Line 1052 sub process_changes {
|
Line 1217 sub process_changes {
|
my $newtext = $maxnum-1; |
my $newtext = $maxnum-1; |
$newhdr[$env{'form.printfmthdr_pos_'.$newtext}] = $env{'form.printfmthdr_text_'.$newtext}; |
$newhdr[$env{'form.printfmthdr_pos_'.$newtext}] = $env{'form.printfmthdr_text_'.$newtext}; |
$newvalues{$entry} = join('',@newhdr); |
$newvalues{$entry} = join('',@newhdr); |
} elsif ($entry eq 'languages') { |
} elsif (($entry eq 'languages') || |
my $langstr; |
($entry eq 'checkforpriv')) { |
|
my $settings; |
my $total = $env{'form.'.$entry.'_total'}; |
my $total = $env{'form.'.$entry.'_total'}; |
if ($total) { |
if ($total) { |
my @deletes = &Apache::loncommon::get_env_multiple('form.'.$entry.'_delete'); |
my @deletes = &Apache::loncommon::get_env_multiple('form.'.$entry.'_delete'); |
for (my $i=0; $i<$total; $i++) { |
for (my $i=0; $i<$total; $i++) { |
unless (grep(/^$i$/,@deletes)) { |
unless (grep(/^$i$/,@deletes)) { |
$langstr .= $env{'form.'.$entry.'_'.$i}.','; |
$settings .= $env{'form.'.$entry.'_'.$i}.','; |
} |
} |
} |
} |
} else { |
} else { |
$total = 0; |
$total = 0; |
} |
} |
if ($env{'form.'.$entry.'_'.$total} ne '') { |
if ($env{'form.'.$entry.'_'.$total} ne '') { |
my $newlang = $env{'form.'.$entry.'_'.$total}; |
my $new = $env{'form.'.$entry.'_'.$total}; |
my %langchoices = &get_lang_choices(); |
if ($entry eq 'languages') { |
if ($langchoices{$newlang}) { |
my %langchoices = &get_lang_choices(); |
$langstr .= $newlang; |
if ($langchoices{$new}) { |
|
$settings .= $new; |
|
} else { |
|
$settings =~ s/,$//; |
|
$disallowed->{'localization'}{$entry} = $new; |
|
} |
} else { |
} else { |
$langstr =~ s/,$//; |
my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); |
$disallowed->{'localization'}{$entry} = $newlang; |
if ($domains{$new}) { |
|
$settings .= $new; |
|
} else { |
|
$settings =~ s/,$//; |
|
$disallowed->{'classlists'}{$entry} = $new; |
|
} |
} |
} |
} else { |
} else { |
$langstr =~ s/,$//; |
$settings =~ s/,$//; |
} |
} |
$newvalues{$entry} = $langstr; |
$newvalues{$entry} = $settings; |
} else { |
} else { |
$newvalues{$entry} = $env{'form.'.$entry}; |
$newvalues{$entry} = $env{'form.'.$entry}; |
} |
} |
unless ($entry eq 'co-owners') { |
unless (($entry eq 'co-owners') || ($entry eq 'discussion_post_fonts')) { |
if ($newvalues{$entry} ne $values->{$entry}) { |
if ($newvalues{$entry} ne $values->{$entry}) { |
$changes->{$entry} = $newvalues{$entry}; |
$changes->{$entry} = $newvalues{$entry}; |
} |
} |
Line 1208 sub store_changes {
|
Line 1384 sub store_changes {
|
my ($displayname,$text); |
my ($displayname,$text); |
$text = $prefs->{$item}->{'itemtext'}{$key}; |
$text = $prefs->{$item}->{'itemtext'}{$key}; |
my $displayval; |
my $displayval; |
unless ($key eq 'co-owners') { |
unless (($key eq 'co-owners') || ($key eq 'discussion_post_fonts')) { |
$displayval = $changes->{$item}{$key}; |
$displayval = $changes->{$item}{$key}; |
} |
} |
if ($item eq 'feedback') { |
if ($item eq 'feedback') { |
Line 1244 sub store_changes {
|
Line 1420 sub store_changes {
|
} |
} |
$displayval = join(', ',@longroles); |
$displayval = join(', ',@longroles); |
} |
} |
|
} elsif ($key eq 'discussion_post_fonts') { |
|
my ($classorder,$classtitles)=&discussion_vote_classes(); |
|
my ($styleorder,$styleitems)=&discussion_vote_styles(); |
|
my $count = 1; |
|
my $total = scalar(keys(%{$changes->{$item}})); |
|
foreach my $class (@{$classorder}) { |
|
$count ++; |
|
next unless ($changes->{$item}{$key.'_'.$class}); |
|
my @vals = split(/,/,$changes->{$item}{$key.'_'.$class}); |
|
my $showval = ''; |
|
for (my $i=0; $i<@{$styleorder}; $i++) { |
|
if ($vals[$i] ne '') { |
|
$showval .= 'font-'.$styleorder->[$i].': '.$vals[$i].'; '; |
|
} |
|
} |
|
if ($vals[3] ne '') { |
|
$showval .= $vals[3]; |
|
} |
|
if ($showval ne '') { |
|
$displayval .= $classtitles->{$class}.':{ '. |
|
$showval.'}'; |
|
$storehash{$key.'_'.$class} = $changes->{$item}{$key.'_'.$class}; |
|
} else { |
|
$displayval .= $classtitles->{$class}.': '.&mt('None'); |
|
push(@delkeys,$key.'_'.$class); |
|
} |
|
unless ($count == $total) { |
|
$displayval .= (' 'x2); |
|
} |
|
} |
} |
} |
$displayname = &mt($text); |
$displayname = &mt($text); |
} |
} |
Line 1270 sub store_changes {
|
Line 1476 sub store_changes {
|
$displayval = &Apache::lonlocal::locallocaltime($displayval); |
$displayval = &Apache::lonlocal::locallocaltime($displayval); |
} elsif ($key eq 'categories') { |
} elsif ($key eq 'categories') { |
$displayval = $env{'form.categories_display'}; |
$displayval = $env{'form.categories_display'}; |
} elsif ($key eq 'canuse_pdfforms') { |
} elsif (($key eq 'canuse_pdfforms') || ($key eq 'usejsme') || |
|
($key eq 'uselcmath') || ($key eq 'inline_chem')) { |
if ($changes->{$item}{$key} eq '1') { |
if ($changes->{$item}{$key} eq '1') { |
$displayval = &mt('Yes'); |
$displayval = &mt('Yes'); |
} elsif ($changes->{$item}{$key} eq '0') { |
} elsif ($changes->{$item}{$key} eq '0') { |
Line 1302 sub store_changes {
|
Line 1509 sub store_changes {
|
} |
} |
} |
} |
unless (&Apache::lonnet::is_course_owner($cdom,$cnum)) { |
unless (&Apache::lonnet::is_course_owner($cdom,$cnum)) { |
if ($env{'form.pending_coowoner'} eq 'accept') { |
if ($env{'form.pending_coowner'} eq 'accept') { |
$displayval = &mt('on'); |
$displayval = &mt('on'); |
} elsif ($env{'form.pending_coowoner'} eq 'decline') { |
} elsif ($env{'form.pending_coowner'} eq 'decline') { |
$displayval = ''; |
$displayval = ''; |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Invitation to be co-owner declined')).'</li>'; |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Invitation to be co-owner declined')).'</li>'; |
} elsif ($env{'form.remove_coowoner'}) { |
} elsif ($env{'form.remove_coowner'}) { |
$displayval = &mt('off'); |
$displayval = &mt('off'); |
} |
} |
if ($displayval) { |
if ($displayval) { |
Line 1343 sub store_changes {
|
Line 1550 sub store_changes {
|
} |
} |
} |
} |
} else { |
} else { |
$storehash{$key} = $changes->{$item}{$key}; |
unless ($key eq 'discussion_post_fonts') { |
|
$storehash{$key} = $changes->{$item}{$key}; |
|
} |
} |
} |
} |
} |
if ($key eq 'cloners') { |
if ($key eq 'cloners') { |
Line 1367 sub store_changes {
|
Line 1576 sub store_changes {
|
$output .= '</ul>'; |
$output .= '</ul>'; |
} else { |
} else { |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
$output = &mt('No changes made to community settings.'); |
$output .= &mt('No changes made to community settings.'); |
} else { |
} else { |
$output = &mt('No changes made to course settings.'); |
$output .= &mt('No changes made to course settings.'); |
} |
} |
} |
} |
} |
} |
Line 1540 sub get_course {
|
Line 1749 sub get_course {
|
} |
} |
my $cdom=$env{'course.'.$courseid.'.domain'}; |
my $cdom=$env{'course.'.$courseid.'.domain'}; |
my $cnum=$env{'course.'.$courseid.'.num'}; |
my $cnum=$env{'course.'.$courseid.'.num'}; |
return ($cnum,$cdom); |
my $chome=$env{'course.'.$courseid.'.home'}; |
|
return ($cnum,$cdom,$chome); |
} |
} |
|
|
sub get_jscript { |
sub get_jscript { |
my ($cdom,$phase,$crstype) = @_; |
my ($cid,$cdom,$phase,$crstype,$settings) = @_; |
my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); |
my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); |
my ($jscript,$categorize_js); |
my ($jscript,$categorize_js,$loncaparev_js,$instcode_js); |
my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); |
my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); |
my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); |
my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); |
my $cloners_js = &cloners_javascript($phase); |
my $cloners_js = &cloners_javascript($phase); |
|
my @code_order; |
|
if ($crstype ne 'Community') { |
|
if (ref($settings) eq 'HASH') { |
|
my %codedefaults; |
|
&Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults, |
|
\@code_order); |
|
if (@code_order > 0) { |
|
if ($phase eq 'display') { |
|
my @actions = &Apache::loncommon::get_env_multiple('form.actions'); |
|
if (grep(/^courseinfo$/,@actions)) { |
|
if ($settings->{'cloners'} ne '') { |
|
unless ($settings->{'cloners'} eq '*') { |
|
my @cloners = split(/,/,$settings->{'cloners'}); |
|
my @standardnames = &Apache::loncommon::get_standard_codeitems(); |
|
my %local_to_standard; |
|
for (my $i=0; $i<@code_order; $i++) { |
|
$local_to_standard{$code_order[$i]} = $standardnames[$i]; |
|
} |
|
foreach my $cloner (@cloners) { |
|
if (($cloner !~ /^\Q*:\E$match_domain$/) && |
|
($cloner !~ /^$match_username\:$match_domain$/)) { |
|
foreach my $item (split(/\&/,$cloner)) { |
|
my ($key,$val) = split(/\=/,$item); |
|
$val = &unescape($val); |
|
foreach my $code (@code_order) { |
|
if ($key eq $local_to_standard{$code}) { |
|
$env{'form.'.$key} = $val; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
my @codetitles; |
|
(undef,$instcode_js) = |
|
&Apache::courseclassifier::instcode_selectors($cdom,'display',undef, |
|
\@codetitles); |
|
$instcode_js .= <<ENDSCRIPT; |
|
function toggleCloners(callerradio) { |
|
if (document.getElementById('LC_cloners_instcode')) { |
|
if (callerradio.value == 1) { |
|
document.getElementById('LC_cloners_instcode').style.display = "block"; |
|
} else { |
|
uncheckOfficialLists(); |
|
document.getElementById('LC_cloners_instcode').style.display = "none"; |
|
} |
|
} |
|
} |
|
|
|
if (!document.getElementsByClassName) { |
|
function getElementsByClassName(node, classname) { |
|
var a = []; |
|
var re = new RegExp('(^| )'+classname+'( |$)'); |
|
var els = node.getElementsByTagName("*"); |
|
for(var i=0,j=els.length; i<j; i++) |
|
if(re.test(els[i].className))a.push(els[i]); |
|
return a; |
|
} |
|
} |
|
|
|
function uncheckOfficialLists() { |
|
var codepicks; |
|
if (document.getElementsByClassName) { |
|
codepicks = document.getElementsByClassName('LC_cloners_instcodes'); |
|
} else { |
|
codepicks = getElementsByClassName(document.body,'LC_cloners_instcodes'); |
|
} |
|
if (codepicks.length) { |
|
for (var i=0; i<codepicks.length; i++) { |
|
codepicks[i].selectedIndex = 0; |
|
} |
|
} |
|
} |
|
|
|
ENDSCRIPT |
|
} |
|
} |
|
} |
if ($can_categorize) { |
if ($can_categorize) { |
$categorize_js = <<ENDSCRIPT; |
$categorize_js = <<ENDSCRIPT; |
function catsbrowser() { |
function catsbrowser() { |
Line 1563 function catsbrowser() {
|
Line 1854 function catsbrowser() {
|
} |
} |
ENDSCRIPT |
ENDSCRIPT |
} |
} |
|
my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'}; |
|
if ($loncaparev) { |
|
$loncaparev_js = <<ENDSCRIPT; |
|
function loncaparevinfo() { |
|
var lcrevwin = null; |
|
var url = '/adm/courseprefs?phase=releaseinfo'; |
|
if (!lcrevwin || lcrevwin.closed) { |
|
lcrevwin=window.open(url,'releasewin','height=480,width=600,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); |
|
} else { |
|
lcrevwin.focus(); |
|
} |
|
} |
|
ENDSCRIPT |
|
} |
|
my $cnum = $env{'course.'.$cid.'.num'}; |
|
my $syllabus_js = <<ENDSCRIPT; |
|
function syllabusinfo() { |
|
var syllwin = null; |
|
var url = '/public/$cdom/$cnum/syllabus?only_body=1'; |
|
if (!syllwin || syllwin.closed) { |
|
syllwin=window.open(url,'syllabuswin','height=480,width=600,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); |
|
} else { |
|
syllwin.focus(); |
|
} |
|
} |
|
ENDSCRIPT |
$jscript = '<script type="text/javascript" language="Javascript">'."\n". |
$jscript = '<script type="text/javascript" language="Javascript">'."\n". |
$browse_js."\n".$categorize_js."\n".$cloners_js."\n".'</script>'. |
'// <![CDATA['."\n". |
"\n".$stubrowse_js."\n"; |
$browse_js."\n".$categorize_js."\n".$loncaparev_js."\n". |
|
$cloners_js."\n".$instcode_js. |
|
$syllabus_js."\n".'//]]>'."\n". |
|
'</script>'."\n".$stubrowse_js."\n"; |
return $jscript; |
return $jscript; |
} |
} |
|
|
Line 1599 function update_cloners(caller,num) {
|
Line 1919 function update_cloners(caller,num) {
|
if (document.$formname.cloners_activate[i].value == '0') { |
if (document.$formname.cloners_activate[i].value == '0') { |
document.$formname.cloners_activate[i].checked = false; |
document.$formname.cloners_activate[i].checked = false; |
} |
} |
if (document.$formname.cloners_activate[i].value == '') { |
if (document.$formname.cloners_activate[i].value == '-1') { |
document.$formname.cloners_activate[i].checked = true; |
document.$formname.cloners_activate[i].checked = true; |
} |
} |
} |
} |
Line 1652 ENDSCRIPT
|
Line 1972 ENDSCRIPT
|
|
|
|
|
sub print_courseinfo { |
sub print_courseinfo { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
my ($cathash,$categoriesform,$autocoowner); |
my ($cathash,$categoriesform,$autocoowner,$clonedefaults,$disabled); |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
my %domconf = |
my %domconf = |
&Apache::lonnet::get_dom('configuration',['coursecategories','autoenroll'],$cdom); |
&Apache::lonnet::get_dom('configuration', |
|
['coursecategories','autoenroll','coursedefaults'],$cdom); |
if (ref($domconf{'coursecategories'}) eq 'HASH') { |
if (ref($domconf{'coursecategories'}) eq 'HASH') { |
$cathash = $domconf{'coursecategories'}{'cats'}; |
$cathash = $domconf{'coursecategories'}{'cats'}; |
if (ref($cathash) eq 'HASH') { |
if (ref($cathash) eq 'HASH') { |
$categoriesform = |
$categoriesform = |
&Apache::loncommon::assign_categories_table($cathash, |
&Apache::loncommon::assign_categories_table($cathash, |
$settings->{'categories'},$crstype)."\n"; |
$settings->{'categories'},$crstype,$disabled)."\n"; |
} |
} |
} |
} |
if (ref($domconf{'autoenroll'}) eq 'HASH') { |
if (ref($domconf{'autoenroll'}) eq 'HASH') { |
$autocoowner = $domconf{'autoenroll'}{'co-owners'}; |
$autocoowner = $domconf{'autoenroll'}{'co-owners'}; |
} |
} |
|
my ($currcanclone,@code_order,$cloner_instcode); |
|
my %codedefaults; |
|
&Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults, |
|
\@code_order); |
|
if ($settings->{'cloners'}) { |
|
unless ($settings->{'cloners'} eq '*') { |
|
my @currclone = split(/,/,$settings->{'cloners'}); |
|
foreach my $item (@currclone) { |
|
unless ($item eq '*') { |
|
if (($item !~ /\:/) && ($item =~ /=/)) { |
|
$cloner_instcode = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (ref($domconf{'coursedefaults'}) eq 'HASH') { |
|
my $canclone = $domconf{'coursedefaults'}{'canclone'}; |
|
if (ref($canclone) eq 'HASH') { |
|
if (ref($canclone->{'instcode'}) eq 'ARRAY') { |
|
if ($settings->{'internal.coursecode'}) { |
|
my @posscodes; |
|
if (@code_order > 0) { |
|
$currcanclone = 'instcode'; |
|
foreach my $item (@{$canclone->{'instcode'}}) { |
|
if (grep(/^\Q$item\E$/,@code_order)) { |
|
push(@posscodes,$item); |
|
} |
|
} |
|
my $codestr = join(' + ',@posscodes); |
|
$clonedefaults = &mt('Default for official courses is to also allow cloning if [_1] match in cloner and cloned.', |
|
'"<span class="LC_nobreak" style="font-style:italic">'.$codestr.'</span>"').'<br />'; |
|
} |
|
} |
|
} |
|
} elsif ($canclone eq 'domain') { |
|
$clonedefaults = &mt('Default is for any course requester in [_1] domain to be able to clone.', |
|
'<span class="LC_nobreak" style="font-style:italic">'.$cdom.'</span>').'<br />'; |
|
$currcanclone = 'domain'; |
|
} |
|
if ($clonedefaults) { |
|
if ($settings->{'cloners'} ne '') { |
|
$clonedefaults .= '<br />'.&mt('Default does [_1]not[_2] currently apply because values have been set in the course.','<b>','</b>'); |
|
} else { |
|
$clonedefaults .= &mt('Default is disregarded if [_1]any[_2] values are set here in the course.','<i>','</i>'); |
|
} |
|
$clonedefaults = '<br /><br />'.$clonedefaults; |
|
} |
|
} |
if (!defined($categoriesform)) { |
if (!defined($categoriesform)) { |
$categoriesform = &mt('No categories defined in 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); |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
|
my $replace; |
my $replace; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
Line 1682 sub print_courseinfo {
|
Line 2055 sub print_courseinfo {
|
} else { |
} else { |
$replace = &mt('To replace the standard title for a course role, enter a title, otherwise leave blank'); |
$replace = &mt('To replace the standard title for a course role, enter a title, otherwise leave blank'); |
} |
} |
|
my ($editmap,$editsyllabus); |
|
unless ($noedit) { |
|
$editmap = (' 'x2). |
|
'<a href="javascript:openbrowser'. |
|
"('display','url','sequence')\">". |
|
&mt('Select Map').'</a><br /><span class="LC_warning"> '. |
|
&mt('Modification may make assessment data inaccessible!'). |
|
'</span>'; |
|
$editsyllabus = &mt('[_1]Edit[_2]','<a href="/public/'.$cdom.'/'.$cnum.'/syllabus?forceedit=1">', |
|
'</a>'); |
|
} |
my %items = ( |
my %items = ( |
'url' => { |
'url' => { |
text => '<b>'.&mt($itemtext->{'url'}).'</b>'.(' 'x2). |
text => '<b>'.&mt($itemtext->{'url'}).'</b>'.$editmap, |
'<a href="javascript:openbrowser'. |
|
"('display','url','sequence')\">". |
|
&mt('Select Map').'</a><br /><span class="LC_warning"> '. |
|
&mt('Modification may make assessment data inaccessible!'). |
|
'</span>', |
|
input => 'textbox', |
input => 'textbox', |
size => '40', |
size => '55', |
|
advanced => 1 |
}, |
}, |
'description' => { |
'description' => { |
text => '<b>'.&mt($itemtext->{'description'}).'</b>', |
text => '<b>'.&mt($itemtext->{'description'}).'</b>', |
input => 'textbox', |
input => 'textbox', |
size => '25', |
size => '55', |
}, |
}, |
'owner' => { |
'owner' => { |
text => '<b>'.&mt($itemtext->{'owner'}).'</b>', |
text => '<b>'.&mt($itemtext->{'owner'}).'</b>', |
Line 1704 sub print_courseinfo {
|
Line 2084 sub print_courseinfo {
|
'co-owners' => { |
'co-owners' => { |
text => '<b>'.&mt($itemtext->{'co-owners'}).'</b>', |
text => '<b>'.&mt($itemtext->{'co-owners'}).'</b>', |
}, |
}, |
|
'clonedfrom' => { |
|
text => '<b>'.&mt($itemtext->{'clonedfrom'}).'</b>', |
|
}, |
'courseid' => { |
'courseid' => { |
text => '<b>'.&mt($itemtext->{'courseid'}).'</b><br />'.'('. |
text => '<b>'.&mt($itemtext->{'courseid'}).'</b><br />'.'('. |
&mt('internal, optional').')', |
&mt('internal, optional').')', |
input => 'textbox', |
input => 'textbox', |
size => '25', |
size => '25', |
}, |
}, |
|
'uniquecode' => { |
|
text => '<b>'.&mt($itemtext->{'uniquecode'}).'</b>', |
|
}, |
'cloners' => { |
'cloners' => { |
text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'. |
&mt('Owner and Coordinators included automatically'), |
&mt('Owner and Coordinators included automatically'). |
|
$clonedefaults, |
input => 'textbox', |
input => 'textbox', |
size => '40', |
size => '40' |
}, |
}, |
'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' => { |
'syllabus' => { |
text => '<b>'.&mt($itemtext->{'externalsyllabus'}).'</b><br />('. |
text => '<b>'.&mt($itemtext->{'syllabus'}).'</b><br />'. |
&mt('not using syllabus template)'), |
&mt('(Syllabus type in use)').(' ' x2). |
input => 'textbox', |
$editsyllabus, |
size => '40', |
|
}, |
}, |
'hidefromcat' => { |
'hidefromcat' => { |
text => '<b>'.&mt($itemtext->{'hidefromcat'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'hidefromcat'}).'</b><br />'. |
Line 1739 sub print_courseinfo {
|
Line 2126 sub print_courseinfo {
|
input => 'textbox', |
input => 'textbox', |
size => '25', |
size => '25', |
}, |
}, |
|
'loncaparev' => { |
|
text => '<b>'.&mt($itemtext->{'loncaparev'}).'</b>', |
|
}, |
|
'defaultcredits' => { |
|
text => '<b>'.&mt($itemtext->{'defaultcredits'}).'</b>', |
|
}, |
); |
); |
my $datatable; |
my $datatable; |
my $count = 0; |
my $count = 0; |
foreach my $item (@{$ordered}) { |
foreach my $item (@{$ordered}) { |
|
my $colspan; |
if ($item eq 'hidefromcat') { |
if ($item eq 'hidefromcat') { |
next if (!$can_toggle_cat); |
next if (!$can_toggle_cat); |
} elsif ($item eq 'categories') { |
} elsif ($item eq 'categories') { |
next if (!$can_categorize); |
next if (!$can_categorize); |
|
} elsif ($item eq 'uniquecode') { |
|
next if (!$env{'course.'.$env{'request.course.id'}.'.internal.uniquecode'}); |
|
} |
|
unless (($item eq 'cloners') || ($item eq 'rolenames')) { |
|
$colspan = 2; |
} |
} |
$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",$colspan); |
|
} else { |
|
$datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); |
|
} |
if ($items{$item}{input} eq 'radio') { |
if ($items{$item}{input} eq 'radio') { |
$datatable .= &yesno_radio($item,$settings); |
$datatable .= &yesno_radio($item,$settings,undef,undef,undef,$noedit); |
} elsif ($item eq 'cloners') { |
} elsif ($item eq 'cloners') { |
my $includeempty = 1; |
my $includeempty = 1; |
my $num = 0; |
my $num = 0; |
$datatable .= &Apache::loncommon::start_data_table(). |
$datatable .= '</td><td align="right">'. |
|
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td><span class="LC_nobreak"><label>'. |
'<td><span class="LC_nobreak"><label>'. |
&mt('Any user in any domain:'). |
&mt('Any user in any domain:'). |
Line 1764 sub print_courseinfo {
|
Line 2168 sub print_courseinfo {
|
$datatable .= ' checked="checked" '; |
$datatable .= ' checked="checked" '; |
} |
} |
$datatable .= 'onchange="javascript:update_cloners('. |
$datatable .= 'onchange="javascript:update_cloners('. |
"'cloners_all'".');" />'.&mt('Yes').'</label>'. |
"'cloners_all'".');"'.$disabled.' />'.&mt('Yes').'</label>'. |
(' 'x2).'<input type="radio" name="cloners_all" value="0" '; |
(' 'x2).'<label>'. |
|
'<input type="radio" name="cloners_all" value="0" '; |
if ($settings->{$item} ne '*') { |
if ($settings->{$item} ne '*') { |
$datatable .= ' checked="checked" '; |
$datatable .= ' checked="checked" '; |
} |
} |
$datatable .= ' onchange="javascript:update_cloners('. |
$datatable .= ' onchange="javascript:update_cloners('. |
"'cloners_all'".');"/>'.&mt('No').'</label></td>'. |
"'cloners_all'".');"'.$disabled.' />'.&mt('No').'</label></td>'. |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table(). |
&Apache::loncommon::end_data_table(). |
'<table><tr><td align="left">'.&mt('Or'). |
'<table><tr><td align="left"><b>'.&mt('Or'). |
'</td></tr></table>'. |
'</b></td></tr></table>'. |
&Apache::loncommon::start_data_table(); |
&Apache::loncommon::start_data_table(); |
my @cloners; |
my @cloners; |
if ($settings->{$item} eq '') { |
if ($settings->{$item} eq '') { |
$datatable .= &new_cloners_dom_row($cdom,'0'); |
unless ($noedit) { |
|
my $default; |
|
if ($currcanclone eq 'domain') { |
|
$default = '0'; |
|
} |
|
$datatable .= &new_cloners_dom_row($cdom,'0',$default); |
|
} |
} elsif ($settings->{$item} ne '*') { |
} elsif ($settings->{$item} ne '*') { |
my @entries = split(/,/,$settings->{$item}); |
my @entries = split(/,/,$settings->{$item}); |
if (@entries > 0) { |
if (@entries > 0) { |
Line 1799 sub print_courseinfo {
|
Line 2210 sub print_courseinfo {
|
'</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" '. |
'name="cloners_delete" value="'.$num.'" onchange="javascript:update_cloners('."'cloners_delete','$num'".');" />'. |
'name="cloners_delete" value="'.$num.'" onchange="javascript:update_cloners('."'cloners_delete','$num'".');"'.$disabled.' />'. |
&mt('Delete').'</label></span></td>'. |
&mt('Delete').'</label></span></td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
$num ++; |
$num ++; |
Line 1822 sub print_courseinfo {
|
Line 2233 sub print_courseinfo {
|
'<td align="left"><span class="LC_nobreak">'. |
'<td align="left"><span class="LC_nobreak">'. |
$add_domtitle.'</span><br />'. |
$add_domtitle.'</span><br />'. |
&Apache::loncommon::select_dom_form('','cloners_newdom', |
&Apache::loncommon::select_dom_form('','cloners_newdom', |
$includeempty). |
$includeempty,undef,undef, |
|
undef,undef,$noedit). |
'<input type="hidden" name="cloners_total" value="'.$num.'" />'. |
'<input type="hidden" name="cloners_total" value="'.$num.'" />'. |
'</td>'.&Apache::loncommon::end_data_table_row(). |
'</td>'.&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table(). |
&Apache::loncommon::end_data_table(). |
'<table><tr><td align="left">'.&mt('And'). |
'<table><tr><td align="left"><b>'.&mt('And'). |
'</td></tr></table>'. |
'</b></td></tr></table>'. |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td align="left">'. |
'<td align="left">'. |
&mt('Specific users').' (<tt>'. |
&mt('Specific users').' (<tt>'. |
&mt('user:domain,user:domain').'</tt>)<br />'. |
&mt('user:domain,user:domain').'</tt>)<br />'. |
&Apache::lonhtmlcommon::textbox($item,$cloners_str, |
&Apache::lonhtmlcommon::textbox($item,$cloners_str, |
$items{$item}{'size'}). |
$items{$item}{'size'},$disabled). |
'</td>'.&Apache::loncommon::end_data_table_row(). |
'</td>'.&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table(); |
&Apache::loncommon::end_data_table(); |
|
if (@code_order > 0) { |
|
my (%cat_items,@codetitles,%cat_titles,%cat_order); |
|
my ($jscript,$totcodes,$numtitles,$lasttitle) = |
|
&Apache::courseclassifier::instcode_selectors_data($cdom,'display', |
|
\%cat_items,\@codetitles, |
|
\%cat_titles,\%cat_order); |
|
my $showncodes = 'off'; |
|
my $checkedoff = ' checked="checked"'; |
|
my $checkedon = ''; |
|
if ($cloner_instcode) { |
|
$checkedon = $checkedoff; |
|
$checkedoff = ''; |
|
$showncodes = 'on'; |
|
} |
|
$datatable .= '<table><tr><td align="left"><b>'.&mt('And'). |
|
'</b></td></tr></table>'. |
|
&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_row(). |
|
'<td align="left"><span class="LC_nobreak">'. |
|
&mt('Cloning by official course(s) based on course category').(' 'x2). |
|
'<label>'. |
|
'<input type="radio" name="cloners_instcode" value="1" onclick="toggleCloners(this);"'.$checkedon.$disabled.' />'.&mt('Yes').'</label>'. |
|
(' '). |
|
'<label>'. |
|
'<input type="radio" name="cloners_instcode" value="0" onclick="toggleCloners(this);"'.$checkedoff.$disabled.' />'.&mt('No').'</label>'. |
|
&Apache::courseclassifier::build_instcode_selectors($numtitles, |
|
$lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order, |
|
$showncodes,'LC_cloners_instcodes','LC_cloners_instcode',$noedit). |
|
'</td>'.&Apache::loncommon::end_data_table_row(). |
|
&Apache::loncommon::end_data_table(); |
|
} |
} elsif ($item eq 'rolenames') { |
} elsif ($item eq 'rolenames') { |
$datatable .= &Apache::loncommon::start_data_table(); |
$datatable .= '</td><td align="right">'. |
|
&Apache::loncommon::start_data_table(); |
my @roles; |
my @roles; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
@roles = ('co'); |
@roles = ('co'); |
Line 1853 sub print_courseinfo {
|
Line 2297 sub print_courseinfo {
|
'</span></td><td align="left">'. |
'</span></td><td align="left">'. |
&Apache::lonhtmlcommon::textbox('rolenames_'.$role, |
&Apache::lonhtmlcommon::textbox('rolenames_'.$role, |
$settings->{$role.'.plaintext'}, |
$settings->{$role.'.plaintext'}, |
$items{$item}{size}).'</td>'. |
$items{$item}{size},$disabled).'</td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
} |
} |
$datatable .= &Apache::loncommon::end_data_table().'</td>'; |
$datatable .= &Apache::loncommon::end_data_table().'</td>'; |
} elsif ($item eq 'categories') { |
} elsif ($item eq 'categories') { |
my $launcher = 'onFocus="this.blur();javascript:catsbrowser();";'; |
my $launcher; |
|
if ($noedit) { |
|
$launcher = $disabled; |
|
} else { |
|
$launcher = 'onfocus="this.blur();javascript:catsbrowser();"'; |
|
} |
$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); |
Line 1872 sub print_courseinfo {
|
Line 2321 sub print_courseinfo {
|
} else { |
} else { |
$owner = &mt('None specified'); |
$owner = &mt('None specified'); |
} |
} |
my $domdesc = &Apache::lonnet::domain($cdom,'description'); |
|
$datatable .= $owner; |
$datatable .= $owner; |
|
} elsif ($item eq 'clonedfrom') { |
|
my $clonesrc = $env{'course.'.$env{'request.course.id'}.'.clonedfrom'}; |
|
my $clonedfrom = &mt('None'); |
|
if ($clonesrc =~ m{/$match_domain/$match_courseid}) { |
|
my %clonesrcinfo = &Apache::lonnet::coursedescription($clonesrc); |
|
if ($clonesrcinfo{'description'}) { |
|
$clonedfrom = $clonesrcinfo{'description'}.' '.($clonesrc); |
|
} |
|
} |
|
$datatable .= $clonedfrom; |
|
} elsif ($item eq 'uniquecode') { |
|
my $code = $env{'course.'.$env{'request.course.id'}.'.internal.uniquecode'}; |
|
if ($code) { |
|
$datatable .= $code; |
|
} |
} elsif ($item eq 'co-owners') { |
} elsif ($item eq 'co-owners') { |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $coowners = $env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}; |
my $coowners = $env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}; |
my @currcoown; |
my @currcoown; |
if ($coowners) { |
if ($coowners) { |
Line 1885 sub print_courseinfo {
|
Line 2347 sub print_courseinfo {
|
if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { |
if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { |
$datatable .= &show_autocoowners(@currcoown); |
$datatable .= &show_autocoowners(@currcoown); |
} else { |
} else { |
$datatable .= &coowner_invitations($cnum,$cdom,@currcoown); |
$datatable .= &coowner_invitations($cnum,$cdom,\@currcoown,$noedit); |
} |
} |
} else { |
} else { |
if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { |
if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { |
$datatable .= &show_autocoowners(@currcoown); |
$datatable .= &show_autocoowners(@currcoown); |
} else { |
} else { |
$datatable .= &manage_coownership($cnum,$cdom,@currcoown); |
$datatable .= &manage_coownership($cnum,$cdom,\@currcoown,$noedit); |
|
} |
|
} |
|
} elsif ($item eq 'syllabus') { |
|
my $external = $env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}; |
|
my $uploaded = $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}; |
|
my $minimal = $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}; |
|
if (($minimal =~/\w/) || ($uploaded =~/\w/)) { |
|
if ($minimal =~/\w/) { |
|
if ($external =~ m{\Q$minimal\E$}) { |
|
undef($external); |
|
} |
|
} elsif ($uploaded =~/\w/) { |
|
if ($external =~ m{\Q$uploaded\E$}) { |
|
undef($external); |
|
} |
} |
} |
|
} elsif ($external!~/\w/) { |
|
undef($external); |
} |
} |
|
if ($external) { |
|
$datatable .= &mt('External URL'); |
|
} elsif ($minimal) { |
|
$datatable .= &mt('Minimal template'); |
|
} elsif ($uploaded) { |
|
$datatable .= &mt('Uploaded file'); |
|
} else { |
|
$datatable .= &mt('Standard template'); |
|
} |
|
$datatable .= (' ' x 2). |
|
&mt('[_1]View[_2]', |
|
'<a href="javascript:syllabusinfo();">', |
|
'</a>'); |
|
} elsif ($item eq 'loncaparev') { |
|
my $loncaparev = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; |
|
my $showreqd; |
|
if ($loncaparev) { |
|
$showreqd = &mt('[_1] or newer',$loncaparev).' <a href="javascript:loncaparevinfo()">'. |
|
&mt('Details').'</a>'; |
|
} else { |
|
$showreqd = &mt('No specific version required'); |
|
} |
|
$datatable .= $showreqd; |
} else { |
} else { |
$datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size}); |
$datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size},$disabled); |
} |
} |
$datatable .= &item_table_row_end(); |
$datatable .= &item_table_row_end(); |
} |
} |
Line 1904 sub print_courseinfo {
|
Line 2406 sub print_courseinfo {
|
} |
} |
|
|
sub new_cloners_dom_row { |
sub new_cloners_dom_row { |
my ($newdom,$num) = @_; |
my ($newdom,$num,$default) = @_; |
my $output; |
my ($output,$checkedon,$checkedoff); |
if ($newdom ne '') { |
if ($newdom ne '') { |
|
if ($num eq $default) { |
|
$checkedon = 'checked="checked" '; |
|
} else { |
|
$checkedoff = 'checked="checked" '; |
|
} |
$output .= &Apache::loncommon::start_data_table_row(). |
$output .= &Apache::loncommon::start_data_table_row(). |
'<td valign="top"><span class="LC_nobreak">'. |
'<td valign="top"><span class="LC_nobreak">'. |
&mt('Any user in domain:').' <b>'.$newdom.'</b>'. |
&mt('Any user in domain:').' <b>'.$newdom.'</b>'. |
(' 'x2).'<label><input type="radio" '. |
(' 'x2).'<label><input type="radio" '. |
'name="cloners_activate" value="'.$num.'" '. |
'name="cloners_activate" value="'.$num.'" '.$checkedon. |
'onchange="javascript:update_cloners('. |
'onchange="javascript:update_cloners('. |
"'cloners_activate','$num'".');" />'. |
"'cloners_activate','$num'".');" />'. |
&mt('Yes').'</label>'.(' 'x2). |
&mt('Yes').'</label>'.(' 'x2). |
'<label><input type="radio" '. |
'<label><input type="radio" '. |
'name="cloners_activate" value="" checked="checked" '. |
'name="cloners_activate" value="-1" '.$checkedoff. |
'onchange="javascript:update_cloners('. |
'onchange="javascript:update_cloners('. |
"'cloners_activate','$num'".');" />'. |
"'cloners_activate','$num'".');" />'. |
&mt('No').'</label><input type="hidden" name="cloners_dom_'. |
&mt('No').'</label><input type="hidden" name="cloners_dom_'. |
Line 1977 sub assign_course_categories {
|
Line 2484 sub assign_course_categories {
|
} else { |
} else { |
$alert = &mt("Use 'Save' in the main window to save course categories"); |
$alert = &mt("Use 'Save' in the main window to save course categories"); |
} |
} |
|
&js_escape(\$alert); |
$catwin_js = <<ENDSCRIPT; |
$catwin_js = <<ENDSCRIPT; |
<script type="text/javascript"> |
<script type="text/javascript"> |
|
|
Line 2051 ENDSCRIPT
|
Line 2559 ENDSCRIPT
|
return; |
return; |
} |
} |
|
|
|
sub display_loncaparev_constraints { |
|
my ($r,$navmap,$loncaparev,$crstype) = @_; |
|
my ($reqdmajor,$reqdminor); |
|
my $cid = $env{'request.course.id'}; |
|
my $cdom = $env{'course.'.$cid.'.domain'}; |
|
my $cnum = $env{'course.'.$cid.'.num'}; |
|
my $output; |
|
my %lt = &Apache::lonlocal::texthash ( |
|
'all' => 'all', |
|
'section/group' => 'section/group', |
|
'user' => 'user', |
|
); |
|
&Apache::lonrelrequtils::init_global_hashes(); |
|
if (defined($Apache::lonrelrequtils::checkcrstypes{$crstype})) { |
|
($reqdmajor,$reqdminor) = split(/\./,$Apache::lonrelrequtils::checkcrstypes{$crstype}); |
|
$output .= '<h4>'.&mt('Course type: [_1] requires [_2] or newer',$crstype, |
|
$Apache::lonrelrequtils::checkcrstypes{$crstype}).'</h4>'; |
|
} |
|
my (%fromparam,%rowspan,%bymap,%byresource,@scopeorder,%toshow,%allmaps, |
|
%byresponsetype,%bysubmission,%fromblocks); |
|
@scopeorder = ('all','section/group','user'); |
|
my $now = time; |
|
my $resourcedata = &Apache::lonparmset::readdata($cnum,$cdom); |
|
if (ref($resourcedata) eq 'HASH') { |
|
foreach my $key (keys(%{$resourcedata})) { |
|
foreach my $item (keys(%Apache::lonrelrequtils::checkparms)) { |
|
if ($key =~ /(\Q$item\E)$/) { |
|
if (ref($Apache::lonrelrequtils::checkparms{$item}) eq 'ARRAY') { |
|
my $value = $resourcedata->{$key}; |
|
if ($item eq 'examcode') { |
|
if (&Apache::lonnet::validCODE($value)) { |
|
$value = 'valid'; |
|
} else { |
|
$value = ''; |
|
} |
|
} elsif ($item eq 'printstartdate') { |
|
if ($value =~ /^\d+$/) { |
|
if ($value > $now) { |
|
$value = 'future'; |
|
} |
|
} |
|
} elsif ($item eq 'printenddate') { |
|
if ($value =~ /^\d+$/) { |
|
if ($value < $now) { |
|
$value = 'past'; |
|
} |
|
} |
|
|
|
} |
|
my ($middle,$scope,$which,$level,$map,$resource); |
|
if (grep(/^\Q$value\E$/,@{$Apache::lonrelrequtils::checkparms{$item}})) { |
|
my $stdtype = &Apache::lonparmset::standard_parameter_types($item); |
|
my $stdname = &Apache::lonparmset::standard_parameter_names($item); |
|
my $valname = &get_param_description($stdtype,$value); |
|
my $rev = $Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value}; |
|
my $start = $cid.'.'; |
|
if ($key =~ /^\Q$start\E(\[useropt\:($match_username\:$match_domain)\]\.)/) { |
|
$middle = $1; |
|
$which = $2; |
|
$scope = 'user'; |
|
} elsif ($key =~ /^\Q$start\E(\[(\w+)\]\.)/) { |
|
$middle = $1; |
|
$which = $2; |
|
$scope = 'section/group'; |
|
} else { |
|
$scope = 'all'; |
|
} |
|
my $what="$stdname=$valname"; |
|
if ($key =~ /^\Q$start$middle\E\w+\.\Q$item\E$/) { |
|
$level = 'general'; |
|
if ($scope eq 'all') { |
|
if (ref($fromparam{$rev}{$scope}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}})) { |
|
push(@{$fromparam{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
push(@{$fromparam{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
if (ref($fromparam{$rev}{$scope}{$which}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}{$which}})) { |
|
push(@{$fromparam{$rev}{$scope}{$which}},$what); |
|
} |
|
} else { |
|
push(@{$fromparam{$rev}{$scope}{$which}},$what); |
|
} |
|
} |
|
$rowspan{$rev} ++; |
|
} elsif ($key =~ /^\Q$start$middle\E(.+)___\(all\).\w+\.\Q$item\E$/) { |
|
$level = 'folder'; |
|
$map = $1; |
|
if ($scope eq 'all') { |
|
if (ref($bymap{$map}{$rev}{$scope}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}})) { |
|
push(@{$bymap{$map}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
push(@{$bymap{$map}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
if (ref($bymap{$map}{$rev}{$scope}{$which}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}{$which}})) { |
|
push(@{$bymap{$map}{$rev}{$scope}{$which}},$what); |
|
} |
|
} else { |
|
push(@{$bymap{$map}{$rev}{$scope}{$which}},$what); |
|
} |
|
} |
|
} elsif ($key =~ /^\Q$start$middle\E(.+)\.\w+\.\Q$item\E$/) { |
|
$level = 'resource'; |
|
$resource = $1; |
|
if ($scope eq 'all') { |
|
if (ref($byresource{$resource}{$rev}{$scope}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}})) { |
|
push(@{$byresource{$resource}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
push(@{$byresource{$resource}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
if (ref($byresource{$resource}{$rev}{$scope}{$which}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}{$which}})) { |
|
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what); |
|
} |
|
} else { |
|
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (keys(%fromparam)) { |
|
$output .= '<h4>'.&mt('Requirements from general settings').'</h4>'. |
|
&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Release').'</th><th>'.&mt('Scope').'</th>'. |
|
'<th>'.&mt('Extent').'</th><th>'.&mt('Setting').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row(); |
|
foreach my $rev (keys(%fromparam)) { |
|
my ($major,$minor) = split(/\./,$rev); |
|
($reqdmajor,$reqdminor) = |
|
&Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); |
|
$output .= &Apache::loncommon::start_data_table_row(). |
|
'<td rowspan="'.$rowspan{$rev}.'">'.$rev.'</td>'; |
|
my $newrow; |
|
foreach my $scope (@scopeorder) { |
|
if (ref($fromparam{$rev}{$scope}) eq 'HASH') { |
|
if ($newrow) { |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
} |
|
$output .= '<td>'.$lt{$scope}.'</td>'; |
|
foreach my $which (sort(keys(%{$fromparam{$rev}{$scope}}))) { |
|
$output .= '<td>'.$which.'</td><td>'. |
|
join('<br />',@{$fromparam{$rev}{$scope}{$which}}).'</td>'; |
|
} |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
$newrow = 1; |
|
} elsif (ref($fromparam{$rev}{$scope}) eq 'ARRAY') { |
|
if ($newrow) { |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
} |
|
$output .= '<td>'.$lt{$scope}.'</td><td> </td><td>'. |
|
join('<br />',@{$fromparam{$rev}{$scope}}).'</td>'. |
|
&Apache::loncommon::end_data_table_row(); |
|
$newrow = 1; |
|
} |
|
} |
|
} |
|
$output .= &Apache::loncommon::end_data_table().'<br />'; |
|
} |
|
} |
|
|
|
my %comm_blocks = &Apache::lonnet::dump('comm_block',$cdom,$cnum); |
|
my $now = time; |
|
if (keys(%comm_blocks) > 0) { |
|
foreach my $block (keys(%comm_blocks)) { |
|
if ($block =~ /^firstaccess____(.+)$/) { |
|
my $rev = $Apache::lonnet::needsrelease{'course:commblock:timer'}; |
|
if (ref($comm_blocks{$block}) eq 'HASH') { |
|
push(@{$fromblocks{'timer'}{$rev}},&unescape($comm_blocks{$block}{'event'}). |
|
' '.&mt('set by [_1]', |
|
&Apache::loncommon::plainname(split(/:/,$comm_blocks{$block}{'setter'})))); |
|
} |
|
next; |
|
} elsif ($block =~ /^(\d+)____(\d+)$/) { |
|
my ($start,$end) = ($1,$2); |
|
next if ($end < $now); |
|
} |
|
if (ref($comm_blocks{$block}) eq 'HASH') { |
|
if (ref($comm_blocks{$block}{'blocks'}) eq 'HASH') { |
|
if (ref($comm_blocks{$block}{'blocks'}{'docs'}) eq 'HASH') { |
|
if (keys(%{$comm_blocks{$block}{'blocks'}{'docs'}}) > 0) { |
|
my $rev = $Apache::lonnet::needsrelease{'course:commblock:docs'}; |
|
push(@{$fromblocks{'docs'}{$rev}},&unescape($comm_blocks{$block}{'event'}). |
|
' '. |
|
&mt('set by [_1]', |
|
&Apache::loncommon::plainname(split(/:/,$comm_blocks{$block}{'setter'})))); |
|
} |
|
} elsif ($comm_blocks{$block}{'blocks'}{'printout'} eq 'on') { |
|
my $rev = $Apache::lonnet::needsrelease{'course:commblock:printout'}; |
|
push(@{$fromblocks{'printout'}{$rev}},&unescape($comm_blocks{$block}{'event'}). |
|
' '. |
|
&mt('set by [_1]', |
|
&Apache::loncommon::plainname(split(/:/,$comm_blocks{$block}{'setter'})))); |
|
|
|
} |
|
} |
|
} |
|
} |
|
if (keys(%fromblocks)) { |
|
my %lt = ( |
|
docs => 'Content blocking', |
|
printout => 'Printout generation', |
|
timer => 'Timed quiz trigger', |
|
); |
|
$output .= '<h4>'.&mt('Requirements from exam blocking').'</h4>'. |
|
&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Release').'</th><th>'.&mt('Setting').'</th>'. |
|
'<th>'.&mt('Event(s)').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row(); |
|
foreach my $type ('docs','printout','timer') { |
|
if (ref($fromblocks{$type}) eq 'HASH') { |
|
foreach my $rev (keys(%{$fromblocks{$type}})) { |
|
my ($major,$minor) = split(/\./,$rev); |
|
($reqdmajor,$reqdminor) = |
|
&Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); |
|
$output .= &Apache::loncommon::start_data_table_row(). |
|
'<td>'.$rev.'</td><td>'.$lt{$type}.'</td><td>'; |
|
foreach my $event (sort(@{$fromblocks{$type}{$rev}})) { |
|
$output .= $event.'<br />'; |
|
} |
|
$output =~ s{\Q<br />\E$}{}; |
|
$output .= '</td>'.&Apache::loncommon::end_data_table_row(); |
|
} |
|
} |
|
} |
|
$output .= &Apache::loncommon::end_data_table().'<br />'; |
|
} |
|
} |
|
|
|
if (defined($navmap)) { |
|
my %anonsubms=&Apache::lonnet::dump('nohist_anonsurveys',$cdom,$cnum); |
|
my $rev_anonsurv=$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'}; |
|
my %randtrysubms=&Apache::lonnet::dump('nohist_randomizetry',$cdom,$cnum); |
|
my $rev_randtry=$Apache::lonnet::needsrelease{'parameter:type:randomizetry'}; |
|
my $stdtype=&Apache::lonparmset::standard_parameter_types('type'); |
|
my $stdname=&Apache::lonparmset::standard_parameter_names('type'); |
|
my $valanon=&get_param_description($stdtype,'anonsurvey'); |
|
my $valrandtry=&get_param_description($stdtype,'randomizetry'); |
|
my %checkedrev; |
|
foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { |
|
my @parts = @{$res->parts()}; |
|
my $symb = $res->symb(); |
|
my $enclosing_map = &Apache::lonnet::declutter($res->enclosing_map_src()); |
|
foreach my $part (@parts) { |
|
if (exists($anonsubms{$symb."\0".$part})) { |
|
my $rev = $rev_anonsurv; |
|
my $what="$stdname=$valanon"; |
|
if (ref($bysubmission{$symb}{$rev}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E/,@{$bysubmission{$symb}{$rev}})) { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
} else { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
$allmaps{$enclosing_map} = 1; |
|
unless ($checkedrev{'anonsurvey'}) { |
|
my ($major,$minor) = split(/\./,$rev); |
|
($reqdmajor,$reqdminor) = |
|
&Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor, |
|
$reqdmajor,$reqdminor); |
|
$checkedrev{'anonsurvey'} = 1; |
|
} |
|
} |
|
if (exists($randtrysubms{$symb."\0".$part})) { |
|
my $rev = $rev_randtry; |
|
my $what="$stdname=$valrandtry"; |
|
if (ref($bysubmission{$symb}{$rev}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E/,@{$bysubmission{$symb}{$rev}})) { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
} else { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
$allmaps{$enclosing_map} = 1; |
|
unless ($checkedrev{'randomizetry'}) { |
|
my ($major,$minor) = split(/\./,$rev); |
|
($reqdmajor,$reqdminor) = |
|
&Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor, |
|
$reqdmajor,$reqdminor); |
|
$checkedrev{'randomizetry'} = 1; |
|
} |
|
} |
|
} |
|
my %responses = $res->responseTypes(); |
|
foreach my $key (keys(%responses)) { |
|
if (exists($Apache::lonrelrequtils::checkresponsetypes{$key})) { |
|
my $rev = $Apache::lonrelrequtils::checkresponsetypes{$key}; |
|
unless ($checkedrev{$key}) { |
|
my ($major,$minor) = split(/\./,$rev); |
|
($reqdmajor,$reqdminor) = |
|
&Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor, |
|
$reqdmajor,$reqdminor); |
|
$checkedrev{$key} = 1; |
|
} |
|
push(@{$byresponsetype{$symb}{$rev}},$key); |
|
$allmaps{$enclosing_map} = 1; |
|
} |
|
} |
|
} |
|
if (keys(%byresource) > 0) { |
|
foreach my $symb (keys(%byresource)) { |
|
my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb); |
|
$allmaps{$map} = 1; |
|
} |
|
} |
|
if (keys(%bymap) > 0) { |
|
foreach my $map (keys(%bymap)) { |
|
$allmaps{$map} = 1; |
|
} |
|
} |
|
foreach my $map (keys(%allmaps)) { |
|
my $mapres = $navmap->getResourceByUrl($map); |
|
if (ref($mapres)) { |
|
my $mapsymb = $mapres->symb(); |
|
$toshow{$mapsymb} = 1; |
|
my $pcslist = $mapres->map_hierarchy(); |
|
if ($pcslist ne '') { |
|
foreach my $pc (split(/,/,$pcslist)) { |
|
my $res = $navmap->getByMapPc($pc); |
|
if (ref($res)) { |
|
my $symb = $res->symb(); |
|
unless ($symb eq '______') { |
|
$toshow{$symb} = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
my $mapres_header = '<h4>'. |
|
&mt('Requirements for specific folders or resources'). |
|
'</h4>'; |
|
if ((keys(%toshow) > 0) || (keys(%byresource) > 0) || |
|
(keys(%bysubmission) > 0) || (keys(%byresponsetype))) { |
|
$output .= $mapres_header; |
|
} |
|
my $top_header = '<h3>'.&mt('LON-CAPA version dependencies').'</h3>'; |
|
my $title = 'Version Constraints'; |
|
my $start_page = |
|
&Apache::loncommon::start_page($title,undef,{'only_body' => 1,}); |
|
$r->print($start_page.$top_header); |
|
if ($output) { |
|
$r->print($output); |
|
if (defined($navmap)) { |
|
&show_contents_view($r,$navmap,$cid,\%toshow,\%bymap,\%byresource,\%bysubmission, |
|
\%byresponsetype,\@scopeorder,\%lt); |
|
} |
|
$r->print('<br /><br />'); |
|
} else { |
|
$r->print('<p class="LC_info">'. |
|
&mt('No version requirements from resource content or settings.'). |
|
'</p>'); |
|
} |
|
$r->print(&Apache::loncommon::end_page()); |
|
my ($currmajor,$currminor) = split(/\./,$loncaparev); |
|
if (($currmajor != $reqdmajor) || ($currminor != $reqdminor)) { |
|
return 1; |
|
} |
|
return; |
|
} |
|
|
|
sub show_contents_view { |
|
my ($r,$navmap,$cid,$toshow,$bymap,$byresource,$bysubmission,$byresponsetype, |
|
$scopeorder,$lt) = @_; |
|
if ((keys(%{$toshow}) > 0) || (keys(%{$byresource}) > 0) || |
|
(keys(%{$bysubmission}) > 0) || (keys(%{$byresponsetype}) > 0)) { |
|
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons"); |
|
my $whitespace = '<img src="'.$location.'/whitespace_21.gif" alt="" />'; |
|
my $icon = '<img src="'.$location.'/navmap.folder.open.gif" alt="" />'; |
|
my $topmap = $env{'course.'.$cid.'.url'}; |
|
$r->print(&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Location').'</th><th>'.&mt('Release').'</th>'. |
|
'<th>'.&mt('Attribute/Setting').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row(). |
|
&Apache::loncommon::start_data_table_row(). |
|
'<td> '.$icon.' '.&mt('Main Content').'</td>'); |
|
&releases_by_map($r,$bymap,$topmap,$scopeorder,$lt); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
my $it=$navmap->getIterator(undef,undef,undef,1,1,undef); |
|
my $curRes; |
|
my $depth = 0; |
|
my %parent = (); |
|
my $startcount = 5; |
|
my $lastcontainer = $startcount; |
|
while ($curRes = $it->next()) { |
|
if ($curRes == $it->BEGIN_MAP()) { |
|
$depth++; |
|
$parent{$depth}= $lastcontainer; |
|
} |
|
if ($curRes == $it->END_MAP()) { |
|
$depth--; |
|
$lastcontainer = $parent{$depth}; |
|
} |
|
my $indent; |
|
for (my $i=0; $i<$depth; $i++) { |
|
$indent.= $whitespace; |
|
} |
|
if (ref($curRes)) { |
|
my $symb = $curRes->symb(); |
|
my $ressymb = $symb; |
|
my $srcf = $curRes->src(); |
|
my $title = &Apache::lonnet::gettitle($srcf); |
|
if (($curRes->is_sequence()) || ($curRes->is_page())) { |
|
next unless($toshow->{$symb}); |
|
my ($parent,$ind,$url) = &Apache::lonnet::decode_symb($symb); |
|
$icon = '<img src="'.$location.'/navmap.folder.open.gif" alt="" />'; |
|
if ($curRes->is_page()) { |
|
$icon = '<img src="'.$location.'/navmap.page.open.gif" alt="" />'; |
|
} |
|
my $rowspan = 1; |
|
if (ref($bymap->{$url}) eq 'HASH') { |
|
$rowspan = scalar(keys(%{$bymap->{$url}})); |
|
} |
|
$r->print(&Apache::loncommon::start_data_table_row(). |
|
'<td rowspan="'.$rowspan.'">'.$indent.$icon.' '.$title.'</td>'); |
|
&releases_by_map($r,$bymap,$url,$scopeorder,$lt); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
} else { |
|
my $rowspan; |
|
if (ref($byresource->{$symb}) eq 'HASH') { |
|
$rowspan += scalar(keys(%{$byresource->{$symb}})); |
|
} |
|
if (ref($bysubmission->{$symb}) eq 'HASH') { |
|
$rowspan += scalar(keys(%{$bysubmission->{$symb}})); |
|
} |
|
if (ref($byresponsetype->{$symb}) eq 'HASH') { |
|
$rowspan += scalar(keys(%{$byresponsetype->{$symb}})); |
|
} |
|
next if (!$rowspan); |
|
$icon = '<img class="LC_contentImage" src="'.$location.'/problem.gif" alt="'. |
|
&mt('Problem').'" />'; |
|
$r->print(&Apache::loncommon::start_data_table_row(). |
|
'<td rowspan="'.$rowspan.'">'.$indent.$icon.' '.$title.'</td>'); |
|
my $newrow; |
|
if (ref($byresource->{$symb}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$byresource->{$symb}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td valign="middle">'.$rev.'</td><td>'); |
|
if (ref($byresource->{$symb}{$rev}) eq 'HASH') { |
|
$r->print('<table border="0">'); |
|
foreach my $scope (@{$scopeorder}) { |
|
if (ref($byresource->{$symb}{$rev}{$scope}) eq 'HASH') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}).'</td>'); |
|
foreach my $which (sort(keys(%{$byresource->{$symb}{$rev}{$scope}}))) { |
|
$r->print('<td>'.$which.'</td><td>'. |
|
join('<br />',@{$byresource->{$symb}{$rev}{$scope}{$which}}). |
|
'</td>'); |
|
} |
|
$r->print('</tr>'); |
|
} elsif (ref($byresource->{$symb}{$rev}{$scope}) eq 'ARRAY') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}).'</td>'. |
|
'<td> </td><td>'. |
|
join('<br />',@{$byresource->{$symb}{$rev}{$scope}}).'</td></tr>'); |
|
} |
|
} |
|
$r->print('</table>'); |
|
} |
|
$r->print('</td>'); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
$newrow = 1; |
|
} |
|
} |
|
if (ref($bysubmission->{$symb}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$bysubmission->{$symb}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td>'.$rev.'</td><td>'); |
|
if (ref($bysubmission->{$symb}{$rev}) eq 'ARRAY') { |
|
$r->print(&mt('Submissions to: ').' '. |
|
join(', ',@{$bysubmission->{$symb}{$rev}})); |
|
} |
|
$r->print('</td>'); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
$newrow = 1; |
|
} |
|
} |
|
if (ref($byresponsetype->{$symb}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$byresponsetype->{$symb}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td>'.$rev.'</td><td>'); |
|
if (ref($byresponsetype->{$symb}{$rev}) eq 'ARRAY') { |
|
$r->print(&mt('Response Type(s): ').' '. |
|
join('<br />',@{$byresponsetype->{$symb}{$rev}})); |
|
} |
|
$r->print('</td>'); |
|
} |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
} |
|
} |
|
} |
|
} |
|
$r->print(&Apache::loncommon::end_data_table()); |
|
} |
|
return; |
|
} |
|
|
|
sub releases_by_map { |
|
my ($r,$bymap,$url,$scopeorder,$lt) = @_; |
|
return unless ((ref($bymap) eq 'HASH') && (ref($scopeorder) eq 'ARRAY')); |
|
my $newrow = 0; |
|
if (ref($bymap->{$url}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$bymap->{$url}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::end_data_table_row(). |
|
&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td valign="middle">'.$rev.'</td><td>'); |
|
if (ref($bymap->{$url}{$rev}) eq 'HASH') { |
|
$r->print('<table border="0">'); |
|
foreach my $scope (@{$scopeorder}) { |
|
if (ref($bymap->{$url}{$rev}{$scope}) eq 'HASH') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}).'</td>'); |
|
foreach my $which (sort(keys(%{$bymap->{$url}{$rev}{$scope}}))) { |
|
$r->print('<td>'.$which.'</td><td>'. |
|
join('<br />',@{$bymap->{$url}{$rev}{$scope}{$which}}). |
|
'</td>'); |
|
} |
|
$r->print('</tr>'); |
|
} elsif (ref($bymap->{$url}{$rev}{$scope}) eq 'ARRAY') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}). |
|
'</td><td> </td><td>'. |
|
join('<br />',@{$bymap->{$url}{$rev}{$scope}}).'</td></tr>'); |
|
} |
|
} |
|
$r->print('</table>'); |
|
} |
|
$r->print('</td>'); |
|
$newrow = 1; |
|
} |
|
} else { |
|
$r->print('<td colspan="2"> </td>'); |
|
} |
|
return; |
|
} |
|
|
|
sub get_param_description { |
|
my ($stdtype,$value) = @_; |
|
my $name = $value; |
|
my $paramstrings = &Apache::lonparmset::standard_string_options($stdtype); |
|
unless (ref($paramstrings) eq 'ARRAY') { |
|
return $name; |
|
} |
|
foreach my $possibilities (@{$paramstrings}) { |
|
next unless (ref($possibilities) eq 'ARRAY'); |
|
my ($thing, $description) = @{ $possibilities }; |
|
if ($thing eq $value) { |
|
$name = $description; |
|
last; |
|
} |
|
} |
|
return $name; |
|
} |
|
|
|
sub update_releasereq { |
|
my $readmap = 1; |
|
my $getrelreq = 1; |
|
if (ref($modified_courses) eq 'ARRAY') { |
|
foreach my $item (@{$modified_courses}) { |
|
if (ref($item) eq 'ARRAY') { |
|
my ($cdom,$cnum,$chome,$crstype) = @{$item}; |
|
&Apache::lonrelrequtils::modify_course_relreq(undef,undef,$cnum,$cdom, |
|
$chome,$crstype,$cdom.'_'.$cnum, |
|
$readmap,$getrelreq); |
|
} |
|
} |
|
$modified_courses = []; |
|
} |
|
undef($registered_cleanup); |
|
return; |
|
} |
|
|
sub show_autocoowners { |
sub show_autocoowners { |
my (@currcoown) = @_; |
my (@currcoown) = @_; |
my $output = '<i>'.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').'</i>'; |
my $output = '<i><span class="LC_nobreak">'.&mt('Co-ownership is set automatically when a Course Coordinator role[_1] is assigned to official course personnel (from institutional data).','</span><br /><span class="LC_nobreak">').'</span></i>'; |
if (@currcoown > 0) { |
if (@currcoown > 0) { |
$output .= '<br />'.&mt('Current co-owners are:').' '. |
$output .= '<br />'.&mt('Current co-owners are:').' '. |
join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } (@currcoown)); |
join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } (@currcoown)); |
Line 2064 sub show_autocoowners {
|
Line 3165 sub show_autocoowners {
|
} |
} |
|
|
sub coowner_invitations { |
sub coowner_invitations { |
my ($cnum,$cdom,@currcoown) = @_; |
my ($cnum,$cdom,$currcoownref,$noedit) = @_; |
my ($output,@pendingcoown,@othercoords); |
my ($output,@pendingcoown,@othercoords,@currcoown); |
my $pendingcoowners = |
my $pendingcoowners = |
$env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; |
$env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; |
if ($pendingcoowners) { |
if ($pendingcoowners) { |
@pendingcoown = split(',',$pendingcoowners); |
@pendingcoown = split(',',$pendingcoowners); |
} |
} |
|
if (ref($currcoownref) eq 'ARRAY') { |
|
@currcoown == @{$currcoownref}; |
|
} |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
my $ccrole = 'cc'; |
my $ccrole = 'cc'; |
my %ccroles = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,[$ccrole]); |
my %ccroles = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,[$ccrole]); |
foreach my $key (sort(keys(%ccroles))) { |
foreach my $key (sort(keys(%ccroles))) { |
Line 2088 sub coowner_invitations {
|
Line 3196 sub coowner_invitations {
|
'<td><i>'.&mt('Current co-owners').'</i></td><td>'; |
'<td><i>'.&mt('Current co-owners').'</i></td><td>'; |
foreach my $person (@currcoown) { |
foreach my $person (@currcoown) { |
my ($co_uname,$co_dom) = split(':',$person); |
my ($co_uname,$co_dom) = split(':',$person); |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="coowners" checked="checked" value="'.$person.'" />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.(' 'x2).' '; |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="coowners" checked="checked" value="'.$person.'"'.$disabled.' />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.(' 'x2).' '; |
} |
} |
$output .= '</td>'. |
$output .= '</td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
Line 2098 sub coowner_invitations {
|
Line 3206 sub coowner_invitations {
|
'<td><i>'.&mt('Invited as co-owners [_1](agreement pending)','<br />').'</i></td><td>'; |
'<td><i>'.&mt('Invited as co-owners [_1](agreement pending)','<br />').'</i></td><td>'; |
foreach my $person (@pendingcoown) { |
foreach my $person (@pendingcoown) { |
my ($co_uname,$co_dom) = split(':',$person); |
my ($co_uname,$co_dom) = split(':',$person); |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="pendingcoowners" checked="checked" value="'.$person.'" />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.(' 'x2).' '; |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="pendingcoowners" checked="checked" value="'.$person.'"'.$disabled.' />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.(' 'x2).' '; |
} |
} |
$output .= '</td>'. |
$output .= '</td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
Line 2108 sub coowner_invitations {
|
Line 3216 sub coowner_invitations {
|
'<td><i>'.&mt('Invite other Coordinators [_1]to become co-owners','<br />').'</i></td><td>'; |
'<td><i>'.&mt('Invite other Coordinators [_1]to become co-owners','<br />').'</i></td><td>'; |
foreach my $person (@othercoords) { |
foreach my $person (@othercoords) { |
my ($co_uname,$co_dom) = split(':',$person); |
my ($co_uname,$co_dom) = split(':',$person); |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="invitecoowners" value="'.$person.'" />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.(' 'x2).' '; |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="invitecoowners" value="'.$person.'"'.$disabled.' />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.(' 'x2).' '; |
} |
} |
$output .= '</td>'. |
$output .= '</td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
Line 2121 sub coowner_invitations {
|
Line 3229 sub coowner_invitations {
|
} |
} |
|
|
sub manage_coownership { |
sub manage_coownership { |
my ($cnum,$cdom,@currcoown) = @_; |
my ($cnum,$cdom,$currcoownref,$noedit) = @_; |
my (@pendingcoown); |
my (@pendingcoown,@currcoown); |
my $pendingcoowners = |
my $pendingcoowners = |
$env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; |
$env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; |
if ($pendingcoowners) { |
if ($pendingcoowners) { |
@pendingcoown = split(',',$pendingcoowners); |
@pendingcoown = split(',',$pendingcoowners); |
} |
} |
|
if (ref($currcoownref) eq 'ARRAY') { |
|
@currcoown == @{$currcoownref}; |
|
} |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
my ($is_coowner,$is_pending,$output); |
my ($is_coowner,$is_pending,$output); |
my $uname = $env{'user.name'}; |
my $uname = $env{'user.name'}; |
my $udom = $env{'user.domain'}; |
my $udom = $env{'user.domain'}; |
Line 2157 sub manage_coownership {
|
Line 3272 sub manage_coownership {
|
} |
} |
$output .= '<span class="LC_nobreak">'; |
$output .= '<span class="LC_nobreak">'; |
if ($is_coowner) { |
if ($is_coowner) { |
$output .= &mt('You are currently a co-owner:').' <label><input type="checkbox" name="remove_coowoner" value="'.$uname.':'.$udom.'" />'.&mt('Discontinue?').'</label>'; |
$output .= &mt('You are currently a co-owner:').' <label><input type="checkbox" name="remove_coowner" value="'.$uname.':'.$udom.'" />'.&mt('Discontinue?').'</label>'; |
} else { |
} else { |
$output .= &mt('The course owner has invited you to become a co-owner:').' <label><input type="radio" name="pending_coowoner" value="accept" />'.&mt('Accept?').'</label>'.(' 'x2). |
$output .= &mt('The course owner has invited you to become a co-owner:').' <label><input type="radio" name="pending_coowner" value="accept"'.$disabled.' />'.&mt('Accept?').'</label>'.(' 'x2). |
'<label><input type="radio" name=pending_coowoner" value="decline" />'.&mt('Decline?').'</label>'; |
'<label><input type="radio" name=pending_coowner" value="decline"'.$disabled.' />'.&mt('Decline?').'</label>'; |
} |
} |
$output .= '</span>'; |
$output .= '</span>'; |
if (@currcoown) { |
if (@currcoown) { |
Line 2174 sub manage_coownership {
|
Line 3289 sub manage_coownership {
|
} |
} |
|
|
sub print_localization { |
sub print_localization { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2193 sub print_localization {
|
Line 3308 sub print_localization {
|
input => 'selectbox', |
input => 'selectbox', |
}, |
}, |
); |
); |
my $datatable; |
my ($datatable,$disabled); |
my $count = 0; |
my $count = 0; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
foreach my $item (@{$ordered}) { |
foreach my $item (@{$ordered}) { |
$count ++; |
$count ++; |
$datatable .= &item_table_row_start($items{$item}{text},$count); |
my $colspan; |
|
unless ($item eq 'languages') { |
|
$colspan = 2; |
|
} |
|
$datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); |
if ($item eq 'timezone') { |
if ($item eq 'timezone') { |
my $includeempty = 1; |
my $includeempty = 1; |
my $timezone = &Apache::lonlocal::gettimezone(); |
my $timezone = &Apache::lonlocal::gettimezone(); |
$datatable .= |
$datatable .= |
&Apache::loncommon::select_timezone($item,$timezone,undef, |
&Apache::loncommon::select_timezone($item,$timezone,undef, |
$includeempty); |
$includeempty,$disabled); |
} elsif ($item eq 'datelocale') { |
} elsif ($item eq 'datelocale') { |
my $includeempty = 1; |
my $includeempty = 1; |
my $locale_obj = &Apache::lonlocal::getdatelocale(); |
my $locale_obj = &Apache::lonlocal::getdatelocale(); |
Line 2213 sub print_localization {
|
Line 3335 sub print_localization {
|
} |
} |
$datatable .= |
$datatable .= |
&Apache::loncommon::select_datelocale($item,$currdatelocale, |
&Apache::loncommon::select_datelocale($item,$currdatelocale, |
undef,$includeempty); |
undef,$includeempty,$disabled); |
} else { |
} else { |
if ($settings->{$item} eq '') { |
if ($settings->{$item} eq '') { |
$datatable .= |
unless ($noedit) { |
&Apache::loncommon::select_language('languages_0','',1); |
$datatable .= '</td><td align="right">'. |
|
&Apache::loncommon::select_language('languages_0','',1); |
|
} |
} else { |
} else { |
my $num = 0; |
my $num = 0; |
my @languages = split(/\s*[,;:]\s*/,$settings->{$item}); |
my @languages = split(/\s*[,;:]\s*/,$settings->{$item}); |
$datatable .= &Apache::loncommon::start_data_table(); |
$datatable .= '</td><td align="right"><br />'. |
|
&Apache::loncommon::start_data_table(); |
if (@languages > 0) { |
if (@languages > 0) { |
my %langchoices = &get_lang_choices(); |
my %langchoices = &get_lang_choices(); |
foreach my $lang (@languages) { |
foreach my $lang (@languages) { |
Line 2236 sub print_localization {
|
Line 3361 sub print_localization {
|
'</b><input type="hidden" name="languages_'.$num. |
'</b><input type="hidden" name="languages_'.$num. |
'" value="'.$lang.'" /></span><br />'. |
'" value="'.$lang.'" /></span><br />'. |
'<span class="LC_nobreak"><label><input type="checkbox" '. |
'<span class="LC_nobreak"><label><input type="checkbox" '. |
'name="languages_delete" value="'.$num.'" />'. |
'name="languages_delete" value="'.$num.'"'.$disabled.' />'. |
&mt('Delete').'</label></span></td>'. |
&mt('Delete').'</label></span></td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
$num ++; |
$num ++; |
} |
} |
} |
} |
$datatable .= &Apache::loncommon::start_data_table_row(). |
unless ($noedit) { |
|
$datatable .= |
|
&Apache::loncommon::start_data_table_row(). |
'<td align="left"><span class="LC_nobreak">'. |
'<td align="left"><span class="LC_nobreak">'. |
&mt('Additional language:'). '</span><br />'. |
&mt('Additional language:'). '</span><br />'. |
&Apache::loncommon::select_language('languages_'.$num,'',1). |
&Apache::loncommon::select_language('languages_'.$num,'',1). |
'<input type="hidden" name="languages_total" value="'.$num.'" />'. |
'<input type="hidden" name="languages_total" value="'.$num.'" />'. |
'</td>'.&Apache::loncommon::end_data_table_row(). |
'</td>'.&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table(); |
} |
|
$datatable .= &Apache::loncommon::end_data_table().'<br />'; |
} |
} |
} |
} |
$datatable .= &item_table_row_end(); |
$datatable .= &item_table_row_end(); |
Line 2269 sub get_lang_choices {
|
Line 3397 sub get_lang_choices {
|
} |
} |
|
|
sub print_feedback { |
sub print_feedback { |
my ($position,$cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; |
my ($position,$cdom,$settings,$ordered,$itemtext,$rowtotal,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2304 sub print_feedback {
|
Line 3432 sub print_feedback {
|
del => 'Delete?', |
del => 'Delete?', |
sec => 'Sections:', |
sec => 'Sections:', |
); |
); |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
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",2); |
|
} |
if ($position eq 'top') { |
if ($position eq 'top') { |
my $includeempty = 0; |
my $includeempty = 0; |
$datatable .= &user_table($cdom,$item,\@sections, |
$datatable .= '</td><td align="right">'. |
$settings->{$item},\%lt); |
&user_table($cdom,$item,\@sections, |
|
$settings->{$item},\%lt,$noedit); |
} else { |
} else { |
$datatable .= &Apache::lonhtmlcommon::textbox($item.'.text', |
$datatable .= &Apache::lonhtmlcommon::textbox($item.'.text', |
$settings->{$item.'.text'},$items{$item}{size}); |
$settings->{$item.'.text'},$items{$item}{size},$disabled); |
} |
} |
$datatable .= &item_table_row_end(); |
$datatable .= &item_table_row_end(); |
} |
} |
Line 2323 sub print_feedback {
|
Line 3459 sub print_feedback {
|
} |
} |
|
|
sub user_table { |
sub user_table { |
my ($cdom,$item,$sections,$currvalue,$lt) = @_; |
my ($cdom,$item,$sections,$currvalue,$lt,$noedit) = @_; |
my $output; |
my $output; |
if ($currvalue eq '') { |
if ($currvalue eq '') { |
$output .= &select_recipient($item,'0',$cdom,$sections); |
unless ($noedit) { |
|
$output .= &select_recipient($item,'0',$cdom,$sections); |
|
} |
} else { |
} else { |
my $num = 0; |
my $num = 0; |
my @curr = split(/,/,$currvalue); |
my @curr = split(/,/,$currvalue); |
$output .= '<table class="LC_nested_outer">'; |
$output .= '<table class="LC_data_table">'; |
my ($currusers); |
my ($currusers); |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
foreach my $val (@curr) { |
foreach my $val (@curr) { |
next if ($val eq ''); |
next if ($val eq ''); |
my ($uname,$udom,$seclist) = ($val =~ /^($match_username):($match_domain)(\(?[^\)]*\)?)$/); |
my ($uname,$udom,$seclist) = ($val =~ /^($match_username):($match_domain)(\(?[^\)]*\)?)$/); |
Line 2343 sub user_table {
|
Line 3485 sub user_table {
|
$currusers .= '<tr>'. |
$currusers .= '<tr>'. |
'<td valign="top"><span class="LC_nobreak">'. |
'<td valign="top"><span class="LC_nobreak">'. |
'<label><input type="checkbox" '. |
'<label><input type="checkbox" '. |
'name="'.$item.'_delete" value="'.$num.'" />'. |
'name="'.$item.'_delete" value="'.$num.'"'.$disabled.' />'. |
$lt->{'del'}.'</label>'. |
$lt->{'del'}.'</label>'. |
'<input type="hidden" name="'.$item.'_user_'. |
'<input type="hidden" name="'.$item.'_user_'. |
$num.'" value="'.$uname.':'.$udom.'" />'.(' 'x2). |
$num.'" value="'.$uname.':'.$udom.'" />'.(' 'x2). |
Line 2354 sub user_table {
|
Line 3496 sub user_table {
|
if (@{$sections}) { |
if (@{$sections}) { |
$currusers.= (' 'x3).$lt->{'sec'}.' '. |
$currusers.= (' 'x3).$lt->{'sec'}.' '. |
&select_sections($item,$num,$sections, |
&select_sections($item,$num,$sections, |
\@selsec); |
\@selsec,$noedit); |
} |
} |
} |
} |
$currusers .= '</span></td></tr>'; |
$currusers .= '</span></td></tr>'; |
Line 2372 sub user_table {
|
Line 3514 sub user_table {
|
'<table>'.$currusers.'</table></td>'. |
'<table>'.$currusers.'</table></td>'. |
'</tr>'; |
'</tr>'; |
} |
} |
$output .= '<tr>'. |
unless ($noedit) { |
|
$output .= |
|
'<tr>'. |
'<td align="left"><span class="LC_nobreak"><i>'. |
'<td align="left"><span class="LC_nobreak"><i>'. |
$lt->{'add'}.'</i></span><br />'. |
$lt->{'add'}.'</i></span><br />'. |
&select_recipient($item,$num,$cdom,$sections). |
&select_recipient($item,$num,$cdom,$sections). |
'<input type="hidden" name="'.$item.'_total" value="'.$num.'" />'. |
'<input type="hidden" name="'.$item.'_total" value="'.$num.'" />'. |
'</td></tr></table>'; |
'</td></tr>'; |
|
} |
|
$output .= '</table>'; |
} |
} |
return $output; |
return $output; |
} |
} |
Line 2387 sub select_recipient {
|
Line 3533 sub select_recipient {
|
my $domform = &Apache::loncommon::select_dom_form($cdom,$item.'_udom_'.$num,$includeempty); |
my $domform = &Apache::loncommon::select_dom_form($cdom,$item.'_udom_'.$num,$includeempty); |
my $selectlink = |
my $selectlink = |
&Apache::loncommon::selectstudent_link('display',$item.'_uname_'.$num, |
&Apache::loncommon::selectstudent_link('display',$item.'_uname_'.$num, |
$item.'_udom_'.$num,1); |
$item.'_udom_'.$num,'only'); |
my $output = |
my $output = |
'<table><tr><td align="center">'.&mt('Username').'<br />'. |
'<table><tr><td align="center">'.&mt('Username').'<br />'. |
'<input type="text" name="'.$item.'_uname_'.$num.'" value="" /></td>'. |
'<input type="text" name="'.$item.'_uname_'.$num.'" value="" /></td>'. |
Line 2404 sub select_recipient {
|
Line 3550 sub select_recipient {
|
} |
} |
|
|
sub select_sections { |
sub select_sections { |
my ($item,$num,$sections,$selected) = @_; |
my ($item,$num,$sections,$selected,$noedit) = @_; |
my ($output,@currsecs,$allsec); |
my ($output,@currsecs,$allsec,$disabled); |
if (ref($selected) eq 'ARRAY') { |
if (ref($selected) eq 'ARRAY') { |
@currsecs = @{$selected}; |
@currsecs = @{$selected}; |
} |
} |
if (!@currsecs) { |
if (!@currsecs) { |
$allsec = ' selected="selected"'; |
$allsec = ' selected="selected"'; |
} |
} |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
if (ref($sections) eq 'ARRAY') { |
if (ref($sections) eq 'ARRAY') { |
if (@{$sections}) { |
if (@{$sections}) { |
my $mult; |
my $mult; |
Line 2421 sub select_sections {
|
Line 3570 sub select_sections {
|
$mult .= ' size="4"'; |
$mult .= ' size="4"'; |
} |
} |
} |
} |
$output = '<select name="'.$item.'_sections_'.$num.'"'.$mult.'>'. |
$output = '<select name="'.$item.'_sections_'.$num.'"'.$mult.$disabled.'>'. |
' <option value=""'.$allsec.'>'.&mt('All').'</option>'; |
' <option value=""'.$allsec.'>'.&mt('All').'</option>'; |
foreach my $sec (@{$sections}) { |
foreach my $sec (@{$sections}) { |
my $is_sel; |
my $is_sel; |
Line 2437 sub select_sections {
|
Line 3586 sub select_sections {
|
} |
} |
|
|
sub print_discussion { |
sub print_discussion { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2476 sub print_discussion {
|
Line 3625 sub print_discussion {
|
text => '<b>'.&mt($itemtext->{'allow_discussion_post_editing'}).'</b>', |
text => '<b>'.&mt($itemtext->{'allow_discussion_post_editing'}).'</b>', |
input => 'checkbox', |
input => 'checkbox', |
}, |
}, |
|
'discussion_post_fonts' => { |
|
text => '<b>'.&mt($itemtext->{'discussion_post_fonts'}).'</b>', |
|
input => 'textbox', |
|
size => '20', |
|
}, |
); |
); |
my $datatable; |
my $datatable; |
my $count; |
my $count; |
Line 2489 sub print_discussion {
|
Line 3643 sub print_discussion {
|
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); |
my $colspan; |
|
if ($item eq 'allow_limited_html_in_feedback') { |
|
$colspan = 2; |
|
} |
|
$datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); |
if ($item eq 'plc.roles.denied') { |
if ($item eq 'plc.roles.denied') { |
$datatable .= '<table>'.&role_checkboxes($cdom,$cnum,$item,$settings). |
$datatable .= '</td><td align="right">'. |
|
'<table>'.&role_checkboxes($cdom,$cnum,$item,$settings,undef,undef,$noedit). |
'</table>'; |
'</table>'; |
} elsif ($item eq 'plc.users.denied') { |
} elsif ($item eq 'plc.users.denied') { |
$datatable .= &user_table($cdom,$item,undef, |
$datatable .= '</td><td align="right">'. |
$settings->{$item},\%lt); |
&user_table($cdom,$item,undef, |
|
$settings->{$item},\%lt,$noedit); |
} elsif ($item eq 'pch.roles.denied') { |
} elsif ($item eq 'pch.roles.denied') { |
$datatable .= '<table>'.&role_checkboxes($cdom,$cnum,$item,$settings). |
$datatable .= '</td><td align="right">'. |
|
'<table>'.&role_checkboxes($cdom,$cnum,$item,$settings,undef,undef,$noedit). |
'</table>'; |
'</table>'; |
} elsif ($item eq 'pch.users.denied') { |
} elsif ($item eq 'pch.users.denied') { |
$datatable .= &user_table($cdom,$item,undef, |
$datatable .= '</td><td align="right">'. |
$settings->{$item},\%lt); |
&user_table($cdom,$item,undef, |
|
$settings->{$item},\%lt,$noedit); |
} elsif ($item eq 'allow_limited_html_in_feedback') { |
} elsif ($item eq 'allow_limited_html_in_feedback') { |
$datatable .= &yesno_radio($item,$settings); |
$datatable .= &yesno_radio($item,$settings,undef,undef,undef,$noedit); |
} elsif ($item eq 'allow_discussion_post_editing') { |
} elsif ($item eq 'allow_discussion_post_editing') { |
$datatable .= &Apache::loncommon::start_data_table(). |
$datatable .= '</td><td align="right"><br />'. |
|
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<th align="left">'.&mt('Role').'</th><th>'. |
'<th align="left">'.&mt('Role').'</th><th>'. |
&mt('Sections').'</th>'. |
&mt('Sections').'</th>'. |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table_row(). |
&role_checkboxes($cdom,$cnum,$item,$settings,1). |
&role_checkboxes($cdom,$cnum,$item,$settings,1,undef,$noedit). |
&Apache::loncommon::end_data_table(); |
&Apache::loncommon::end_data_table().'<br />'; |
|
} elsif ($item eq 'discussion_post_fonts') { |
|
$datatable .= '</td><td align="right"><br />'. |
|
&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_row(). |
|
'<th align="center">'.&mt('Sum of likes/dislikes').'</th>'. |
|
'<th align="center">'.&mt('font-size').'</th>'. |
|
'<th align="center">'.&mt('font-weight').'</th>'. |
|
'<th align="center">'.&mt('font-style').'</th>'. |
|
'<th align="center">'.&mt('Other css').'</th>'. |
|
&Apache::loncommon::end_data_table_row(). |
|
&set_discussion_fonts($cdom,$cnum,$item,$settings,$noedit). |
|
&Apache::loncommon::end_data_table().'<br />'; |
} |
} |
$datatable .= &item_table_row_end(); |
$datatable .= &item_table_row_end(); |
} |
} |
Line 2523 sub print_discussion {
|
Line 3697 sub print_discussion {
|
} |
} |
|
|
sub role_checkboxes { |
sub role_checkboxes { |
my ($cdom,$cnum,$item,$settings,$showsections,$crstype) = @_; |
my ($cdom,$cnum,$item,$settings,$showsections,$crstype,$noedit) = @_; |
my @roles = ('st','ad','ta','ep','in'); |
my @roles = ('st','ad','ta','ep','in'); |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
push(@roles,'co'); |
push(@roles,'co'); |
Line 2561 sub role_checkboxes {
|
Line 3735 sub role_checkboxes {
|
} |
} |
my $numinrow = 3; |
my $numinrow = 3; |
my $count = 0; |
my $count = 0; |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
foreach my $role (@roles) { |
foreach my $role (@roles) { |
my $checked = ''; |
my $checked = ''; |
if (grep(/^\Q$role\E$/,@current)) { |
if (grep(/^\Q$role\E$/,@current)) { |
Line 2579 sub role_checkboxes {
|
Line 3757 sub role_checkboxes {
|
} |
} |
} |
} |
$output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" name="'. |
$output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" name="'. |
$item.'" value="'.$role.'"'.$checked.'/> '. |
$item.'" value="'.$role.'"'.$checked.$disabled.'/> '. |
$plrole.'</label></span></td>'; |
$plrole.'</label></span></td>'; |
if ($showsections) { |
if ($showsections) { |
$output .= '<td align="left">'. |
$output .= '<td align="left">'. |
&select_sections($item,$role,\@sections,$currsec{$role}). |
&select_sections($item,$role,\@sections,$currsec{$role},$noedit). |
'</td></tr>'; |
'</td></tr>'; |
} |
} |
$count ++; |
$count ++; |
Line 2611 sub role_checkboxes {
|
Line 3789 sub role_checkboxes {
|
} |
} |
} |
} |
$output .= '<td><span class="LC_nobreak"><label><input type="checkbox" name="'. |
$output .= '<td><span class="LC_nobreak"><label><input type="checkbox" name="'. |
$item.'" value="'.$value.'"'.$checked.' /> '.$rolename. |
$item.'" value="'.$value.'"'.$checked.$disabled.' /> '.$rolename. |
'</label></span></td>'; |
'</label></span></td>'; |
if ($showsections) { |
if ($showsections) { |
$output .= '<td>'. |
$output .= '<td>'. |
&select_sections($item,$role,\@sections,$currsec{$role}). |
&select_sections($item,$role,\@sections,$currsec{$role},$noedit). |
'</td>'.&Apache::loncommon::end_data_table_row(); |
'</td>'.&Apache::loncommon::end_data_table_row(); |
} |
} |
$total ++; |
$total ++; |
Line 2636 sub role_checkboxes {
|
Line 3814 sub role_checkboxes {
|
return $output; |
return $output; |
} |
} |
|
|
|
sub set_discussion_fonts { |
|
my ($cdom,$cnum,$item,$settings,$noedit) = @_; |
|
my ($classorder,$classtitles) = &discussion_vote_classes(); |
|
my ($styleorder,$styleitems) = &discussion_vote_styles(); |
|
my $output; |
|
if (ref($classorder) eq 'ARRAY') { |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
foreach my $cat (@{$classorder}) { |
|
my %curr = (); |
|
($curr{'size'},$curr{'weight'},$curr{'style'},$curr{'other'}) = |
|
split(/,/,$settings->{'discussion_post_fonts_'.$cat}); |
|
$output .= &Apache::loncommon::start_data_table_row(). |
|
'<td>'.$classtitles->{$cat}.'</td>'; |
|
if (ref($styleorder) eq 'ARRAY') { |
|
foreach my $item (@{$styleorder}) { |
|
$output .= '<td><span class="LC_nobreak">'; |
|
my $selitem = $item; |
|
if ($item eq 'size') { |
|
my ($currsize,$currunit); |
|
if ($curr{'size'} =~ /^(\d+)(px|%)$/) { |
|
($currsize,$currunit) = ($1,$2); |
|
$curr{'size'} = $currunit; |
|
} |
|
$output .= '<input type="textbox" name="discussion_post_fonts_'.$cat.'_'.$item.'" value="'.$currsize.'" size="5"'.$disabled.' />'. |
|
' '; |
|
$selitem = 'unit'; |
|
} |
|
if ((ref($styleitems) eq 'HASH') && (ref($styleitems->{$item}) eq 'ARRAY')) { |
|
$output .= '<select name="discussion_post_fonts_'.$cat.'_'.$selitem.'"'.$disabled.'>'; |
|
foreach my $val (@{$styleitems->{$item}}) { |
|
my $sel; |
|
if ($val eq $curr{$item}) { |
|
$sel = ' selected="selected"'; |
|
} |
|
$output .= '<option value="'.$val.'"'.$sel.'>'.$val.'</option>'; |
|
} |
|
} |
|
} |
|
} |
|
$output .= '</span></td><td><input type="textbox" size="10" name="discussion_post_fonts_'.$cat.'_other" value="'.$curr{'other'}.'"'.$disabled.' /></td>'; |
|
} |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
} |
|
return $output; |
|
} |
|
|
|
sub discussion_vote_classes { |
|
my $classorder = ['twoplus','oneplus','zero','oneminus','twominus']; |
|
my %classtitles = &Apache::lonlocal::texthash( |
|
'twoplus' => 'Two sigma above mean', |
|
'oneplus' => 'One sigma above mean', |
|
'zero' => 'Within one sigma of mean', |
|
'oneminus' => 'One sigma below mean', |
|
'twominus' => 'Two sigma below mean', |
|
); |
|
return ($classorder,\%classtitles); |
|
} |
|
|
|
sub discussion_vote_styles { |
|
my $styleorder = ['size','weight','style']; |
|
my $styleitems = { |
|
size => ['','px','%','xx-small','x-small','small','medium','large', |
|
'x-large','xx-large','smaller','larger'], |
|
weight => ['','normal','bold','bolder','lighter','100','200','300','400', |
|
'500','600','700','800','900'], |
|
style => ['','normal','italic','oblique'], |
|
}; |
|
return ($styleorder,$styleitems); |
|
} |
|
|
sub print_classlists { |
sub print_classlists { |
my ($position,$cdom,$settings,$itemtext,$rowtotal,$crstype) = @_; |
my ($position,$cdom,$settings,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
my @ordered; |
my @ordered; |
if ($position eq 'top') { |
if ($position eq 'top') { |
@ordered = ('default_enrollment_start_date', |
@ordered = ('default_enrollment_start_date', |
'default_enrollment_end_date'); |
'default_enrollment_end_date'); |
|
if ($crstype eq 'Course') { |
|
push(@ordered,'defaultcredits'); |
|
} |
} elsif ($position eq 'middle') { |
} elsif ($position eq 'middle') { |
@ordered = ('nothideprivileged'); |
@ordered = ('nothideprivileged','checkforpriv'); |
} else { |
} else { |
@ordered = ('student_classlist_view', |
@ordered = ('student_classlist_view', |
'student_classlist_opt_in', |
'student_classlist_opt_in', |
Line 2674 sub print_classlists {
|
Line 3928 sub print_classlists {
|
text => '<b>'.&mt($itemtext->{'default_enrollment_end_date'}).'</b>', |
text => '<b>'.&mt($itemtext->{'default_enrollment_end_date'}).'</b>', |
input => 'dates', |
input => 'dates', |
}, |
}, |
|
'defaultcredits' => { |
|
text => '<b>'.&mt($itemtext->{'defaultcredits'}).'</b>', |
|
}, |
|
|
'nothideprivileged' => { |
'nothideprivileged' => { |
text => '<b>'.&mt($itemtext->{'nothideprivileged'}).'</b>', |
text => '<b>'.&mt($itemtext->{'nothideprivileged'}).'</b>', |
input => 'checkbox', |
input => 'checkbox', |
}, |
}, |
|
|
|
'checkforpriv' => { |
|
text => '<b>'.&mt($itemtext->{'checkforpriv'}).'</b>', |
|
input => 'selectbox', |
|
}, |
|
|
'student_classlist_view' => { |
'student_classlist_view' => { |
text => '<b>'.&mt($itemtext->{'student_classlist_view'}).'</b>', |
text => '<b>'.&mt($itemtext->{'student_classlist_view'}).'</b>', |
input => 'selectbox', |
input => 'selectbox', |
Line 2700 sub print_classlists {
|
Line 3962 sub print_classlists {
|
($settings->{'student_classlist_view'} eq 'section')) { |
($settings->{'student_classlist_view'} eq 'section')) { |
$settings->{'student_classlist_view'} = 'disabled'; |
$settings->{'student_classlist_view'} = 'disabled'; |
} |
} |
return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype); |
return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'classlists',$noedit); |
} |
} |
|
|
sub print_appearance { |
sub print_appearance { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2736 sub print_appearance {
|
Line 3998 sub print_appearance {
|
text => '<b>'.&mt($itemtext->{'texengine'}).'</b>', |
text => '<b>'.&mt($itemtext->{'texengine'}).'</b>', |
input => 'selectbox', |
input => 'selectbox', |
options => { |
options => { |
jsMath => 'jsMath', |
MathJax => 'MathJax', |
mimetex => &mt('Convert to Images'), |
mimetex => &mt('Convert to Images'), |
tth => &mt('TeX to HTML'), |
tth => &mt('TeX to HTML'), |
}, |
}, |
order => ['jsMath','mimetex','tth'], |
order => ['MathJax','mimetex','tth'], |
nullval => $mathdef, |
nullval => $mathdef, |
}, |
}, |
'tthoptions' => { |
'tthoptions' => { |
Line 2748 sub print_appearance {
|
Line 4010 sub print_appearance {
|
input => 'textbox', |
input => 'textbox', |
size => 40, |
size => 40, |
}, |
}, |
|
'uselcmath' => { |
|
text => '<b>'.&mt($itemtext->{'uselcmath'}).'</b>', |
|
input => 'radio', |
|
}, |
|
'usejsme' => { |
|
text => '<b>'.&mt($itemtext->{'usejsme'}).'</b>', |
|
input => 'radio', |
|
}, |
|
'inline_chem' => { |
|
text => '<b>'.&mt($itemtext->{'inline_chem'}).'</b>', |
|
input => 'radio', |
|
}, |
); |
); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'appearance',$noedit); |
} |
} |
|
|
sub print_grading { |
sub print_grading { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2785 sub print_grading {
|
Line 4059 sub print_grading {
|
'64bit5' => '64bit5', |
'64bit5' => '64bit5', |
}, |
}, |
order => ['32bit','64bit','64bit2','64bit3','64bit4','64bit5'], |
order => ['32bit','64bit','64bit2','64bit3','64bit4','64bit5'], |
|
advanced => 1 |
}, |
}, |
'receiptalg' => { |
'receiptalg' => { |
text => '<b>'.&mt($itemtext->{'receiptalg'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'receiptalg'}).'</b><br />'. |
Line 2796 sub print_grading {
|
Line 4071 sub print_grading {
|
receipt3 => 'receipt3', |
receipt3 => 'receipt3', |
}, |
}, |
order => ['receipt','receipt2','receipt3'], |
order => ['receipt','receipt2','receipt3'], |
|
advanced => 1 |
}, |
}, |
'disablesigfigs' => { |
'disablesigfigs' => { |
text => '<b>'.&mt($itemtext->{'disablesigfigs'}).'</b>', |
text => '<b>'.&mt($itemtext->{'disablesigfigs'}).'</b>', |
input => 'radio', |
input => 'radio', |
}, |
}, |
); |
); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'grading',$noedit); |
} |
} |
|
|
sub print_printouts { |
sub print_printouts { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2834 sub print_printouts {
|
Line 4110 sub print_printouts {
|
A6 => &mt('A6').' [105x148 mm]', |
A6 => &mt('A6').' [105x148 mm]', |
}, |
}, |
order => ['Letter','Legal','Tabloid','Executive','A2','A3','A4','A5','A6'], |
order => ['Letter','Legal','Tabloid','Executive','A2','A3','A4','A5','A6'], |
nullval => 'None specified', |
nullval => &mt('None specified'), |
}, |
}, |
print_header_format => { |
print_header_format => { |
text => '<b>'.&mt($itemtext->{'print_header_format'}).'</b>', |
text => '<b>'.&mt($itemtext->{'print_header_format'}).'</b>', |
Line 2852 sub print_printouts {
|
Line 4128 sub print_printouts {
|
0 => &mt('No'), |
0 => &mt('No'), |
}, |
}, |
order => ['1','0'], |
order => ['1','0'], |
nullval => 'None specified - use domain default', |
nullval => &mt('None specified - use domain default'), |
} |
} |
); |
); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'printouts',$noedit); |
} |
} |
|
|
sub print_spreadsheet { |
sub print_spreadsheet { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2891 sub print_spreadsheet {
|
Line 4167 sub print_spreadsheet {
|
input => 'radio', |
input => 'radio', |
}, |
}, |
); |
); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'spreadsheet',$noedit); |
} |
} |
|
|
sub print_bridgetasks { |
sub print_bridgetasks { |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; |
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
return; |
return; |
} |
} |
Line 2933 sub print_bridgetasks {
|
Line 4209 sub print_bridgetasks {
|
input => 'radio', |
input => 'radio', |
}, |
}, |
); |
); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks',$noedit); |
} |
} |
|
|
sub print_other { |
sub print_other { |
my ($cdom,$settings,$allitems,$rowtotal,$crstype) = @_; |
my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_; |
unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) { |
unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) { |
return; |
return; |
} |
} |
Line 2958 sub print_other {
|
Line 4234 sub print_other {
|
input => 'textbox', |
input => 'textbox', |
size => '30', |
size => '30', |
}; |
}; |
my $output = &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype); |
return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'other',$noedit); |
} |
} |
|
|
sub get_other_items { |
sub get_other_items { |
Line 2975 sub get_other_items {
|
Line 4251 sub get_other_items {
|
unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) || |
unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) || |
($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) |
($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) |
|| ($parameter eq 'type') || |
|| ($parameter eq 'type') || |
($parameter =~ m/^(cc|co|in|ta|ep|ad|st)\.plaintext$/)) { |
($parameter =~ m/^(cc|co|in|ta|ep|ad|st)\.plaintext$/) |
|
|| ($parameter =~ m/^discussion_post_fonts/) || |
|
($parameter =~ m{^(minimal|updated|uploaded|external)syllabus$}) || |
|
($parameter eq 'clonedfrom')) { |
push(@ordered,$parameter); |
push(@ordered,$parameter); |
} |
} |
} |
} |
Line 2984 sub get_other_items {
|
Line 4263 sub get_other_items {
|
} |
} |
|
|
sub item_table_row_start { |
sub item_table_row_start { |
my ($text,$count,$add_class) = @_; |
my ($text,$count,$add_class,$colspan) = @_; |
my $output; |
my $output; |
my $css_class = ($count % 2) ? 'LC_odd_row' : 'LC_even_row'; |
my $css_class = ($count % 2) ? 'LC_odd_row' : 'LC_even_row'; |
$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq ''); |
$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq ''); |
$output .= '<tr class="'.$css_class.'">'."\n";; |
$output .= '<tr class="'.$css_class.'">'."\n". |
$output .= '<td class="LC_left_item">'.$text. |
'<td class="LC_left_item">'.$text. |
'</td><td class="LC_right_item">'; |
'</td>'; |
|
if ($colspan) { |
|
$output .= '<td class="LC_right_item" colspan="'.$colspan.'">'; |
|
} else { |
|
$output .= '<td class="LC_right_item">'; |
|
} |
return $output; |
return $output; |
} |
} |
|
|
Line 2999 sub item_table_row_end {
|
Line 4283 sub item_table_row_end {
|
} |
} |
|
|
sub yesno_radio { |
sub yesno_radio { |
my ($item,$settings) = @_; |
my ($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit) = @_; |
my $itemon = ' '; |
my $itemon = ' '; |
my $itemoff = ' checked="checked" '; |
my $itemoff = ' checked="checked" '; |
|
if (($valueyes eq '') && ($valueno eq '')) { |
|
$valueyes = 'yes'; |
|
$valueno = ''; |
|
} |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if ($settings->{$item} eq 'yes') { |
if ($settings->{$item} eq $valueyes) { |
$itemon = $itemoff; |
$itemon = $itemoff; |
$itemoff = ' '; |
$itemoff = ' '; |
} |
} |
|
unless (exists($settings->{$item})) { |
|
if ($unsetdefault eq $valueyes) { |
|
$itemon = $itemoff; |
|
$itemoff = ' '; |
|
} |
|
} |
|
} |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
} |
} |
return '<span class="LC_nobreak"><label>'. |
return '<span class="LC_nobreak"><label>'. |
'<input type="radio" name="'.$item.'"'. |
'<input type="radio" name="'.$item.'"'. |
$itemon.' value="yes" />'.&mt('Yes').'</label> '. |
$itemon.' value="'.$valueyes.'"'.$disabled.' />'.&mt('Yes').'</label> '. |
'<label><input type="radio" name="'.$item.'"'. |
'<label><input type="radio" name="'.$item.'"'. |
$itemoff.' value="" />'.&mt('No').'</label></span>'; |
$itemoff.' value="'.$valueno.'"'.$disabled.' />'.&mt('No').'</label></span>'; |
} |
} |
|
|
sub select_from_options { |
sub select_from_options { |
my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange) = @_; |
my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange,$noedit) = @_; |
my $output; |
my $output; |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled=disabled"'; |
|
} |
if ((ref($order) eq 'ARRAY') && (ref($options) eq 'HASH')) { |
if ((ref($order) eq 'ARRAY') && (ref($options) eq 'HASH')) { |
$output='<select name="'.$item.'" '.$onchange; |
$output='<select name="'.$item.'" '.$onchange; |
if ($multiple) { |
if ($multiple) { |
Line 3028 sub select_from_options {
|
Line 4330 sub select_from_options {
|
$output .= ' size="'.$maxsize.'"'; |
$output .= ' size="'.$maxsize.'"'; |
} |
} |
} |
} |
$output .= '>'."\n"; |
$output .= $disabled.'>'."\n"; |
if ($nullval ne '') { |
if ($nullval ne '') { |
$output .= '<option value=""'; |
$output .= '<option value=""'; |
if (ref($curr) eq 'ARRAY') { |
if (ref($curr) eq 'ARRAY') { |
Line 3061 sub select_from_options {
|
Line 4363 sub select_from_options {
|
} |
} |
|
|
sub make_item_rows { |
sub make_item_rows { |
my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype) = @_; |
my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype,$caller,$noedit) = @_; |
my $datatable; |
my $datatable; |
if ((ref($items) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { |
if ((ref($items) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { |
my $count = 0; |
my $count = 0; |
foreach my $item (@{$ordered}) { |
foreach my $item (@{$ordered}) { |
$count ++; |
$count ++; |
$datatable .= &item_table_row_start($items->{$item}{text},$count); |
my $colspan; |
if ($item eq 'nothideprivileged') { |
if ((($caller eq 'classlists') && ($item eq 'nothideprivileged')) || |
$datatable .= ¬hidepriv_row($cdom,$item,$settings,$crstype); |
(($caller eq 'printouts') && ($item ne 'print_header_format'))) { |
|
$colspan = 2; |
|
} |
|
if (exists $items->{$item}{advanced} && $items->{$item}{advanced} == 1) { |
|
$datatable .= &item_table_row_start($items->{$item}{text},$count,"advanced",$colspan); |
|
} else { |
|
$datatable .= &item_table_row_start($items->{$item}{text},$count,undef,$colspan); |
|
} |
|
if ($item eq 'defaultcredits') { |
|
my $defaultcredits = $env{'course.'.$env{'request.course.id'}.'.internal.defaultcredits'}; |
|
my $showcredits; |
|
if ($defaultcredits ne '') { |
|
$showcredits = &mt('Default is [quant,_1,credit]',$defaultcredits); |
|
} else { |
|
$showcredits = &mt('No default set'); |
|
} |
|
$datatable .= $showcredits; |
|
} elsif ($item eq 'nothideprivileged') { |
|
$datatable .= ¬hidepriv_row($cdom,$item,$settings,$crstype,$noedit); |
|
} elsif ($item eq 'checkforpriv') { |
|
$datatable .= &checkforpriv_row($cdom,$item,$settings,$crstype,$noedit); |
} elsif ($item eq 'print_header_format') { |
} elsif ($item eq 'print_header_format') { |
$datatable .= &print_hdrfmt_row($item,$settings); |
$datatable .= &print_hdrfmt_row($item,$settings,$noedit); |
} elsif ($items->{$item}{input} eq 'dates') { |
} elsif ($items->{$item}{input} eq 'dates') { |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
$datatable .= |
$datatable .= |
&Apache::lonhtmlcommon::date_setter('display',$item, |
&Apache::lonhtmlcommon::date_setter('display',$item, |
$settings->{$item}); |
$settings->{$item},$disabled); |
} elsif ($items->{$item}{input} eq 'radio') { |
} elsif ($items->{$item}{input} eq 'radio') { |
$datatable .= &yesno_radio($item,$settings); |
my ($unsetdefault,$valueyes,$valueno); |
|
if (($item eq 'usejsme') || ($item eq 'uselcmath') || ($item eq 'inline_chem')) { |
|
my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); |
|
unless ($domdefs{$item} eq '0') { |
|
$unsetdefault = 1; |
|
} |
|
$valueyes = "1"; |
|
$valueno = "0"; |
|
} |
|
$datatable .= &yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit); |
} elsif ($items->{$item}{input} eq 'selectbox') { |
} elsif ($items->{$item}{input} eq 'selectbox') { |
my $curr = $settings->{$item}; |
my $curr = $settings->{$item}; |
$datatable .= |
$datatable .= |
&select_from_options($item,$items->{$item}{'order'}, |
&select_from_options($item,$items->{$item}{'order'}, |
$items->{$item}{'options'},$curr, |
$items->{$item}{'options'},$curr, |
$items->{$item}{'nullval'}); |
$items->{$item}{'nullval'}, |
|
undef,undef,undef,$noedit); |
} elsif ($items->{$item}{input} eq 'textbox') { |
} elsif ($items->{$item}{input} eq 'textbox') { |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled=disabled"'; |
|
} |
$datatable .= |
$datatable .= |
&Apache::lonhtmlcommon::textbox($item,$settings->{$item}, |
&Apache::lonhtmlcommon::textbox($item,$settings->{$item}, |
$items->{$item}{size}); |
$items->{$item}{size}, |
|
$disabled); |
} |
} |
$datatable .= &item_table_row_end(); |
$datatable .= &item_table_row_end(); |
} |
} |
Line 3099 sub make_item_rows {
|
Line 4440 sub make_item_rows {
|
} |
} |
|
|
sub nothidepriv_row { |
sub nothidepriv_row { |
my ($cdom,$item,$settings,$crstype) = @_; |
my ($cdom,$item,$settings,$crstype,$noedit) = @_; |
my ($cnum) = &get_course(); |
my ($cnum) = &get_course(); |
my %nothide; |
my ($datatable,%nothide,@checkdoms); |
my $datatable; |
|
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if ($settings->{$item} ne '') { |
if ($settings->{$item} ne '') { |
foreach my $user (split(/\s*\,\s*/,$settings->{$item})) { |
foreach my $user (split(/\s*\,\s*/,$settings->{$item})) { |
Line 3113 sub nothidepriv_row {
|
Line 4453 sub nothidepriv_row {
|
} |
} |
} |
} |
} |
} |
|
if ($settings->{'checkforpriv'}) { |
|
@checkdoms = split(/,/,$settings->{'checkforpriv'}); |
|
} |
} |
} |
my %coursepersonnel = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); |
push(@checkdoms,$cdom); |
my $now = time; |
my %coursepersonnel = |
|
&Apache::lonnet::get_my_roles($cnum,$cdom,'',['previous','future','active']); |
my @privusers; |
my @privusers; |
my %privileged; |
|
foreach my $person (keys(%coursepersonnel)) { |
foreach my $person (keys(%coursepersonnel)) { |
my ($role,$user,$usec) = ($person =~ /^([^:]*):([^:]+:[^:]+):([^:]*)/); |
my ($uname,$udom,$role) = split(/:/,$person); |
$user =~ s/:$//; |
my $user = $uname.':'.$udom; |
my ($end,$start) = split(/:/,$coursepersonnel{$person}); |
my ($start,$end) = split(/:/,$coursepersonnel{$person}); |
if ($end == -1 || $start == -1) { |
if ($end == -1 || $start == -1) { |
next; |
next; |
} |
} |
my ($uname,$udom) = split(':',$user); |
foreach my $dom (@checkdoms) { |
unless (ref($privileged{$udom}) eq 'HASH') { |
if (&Apache::lonnet::privileged($uname,$udom,\@checkdoms,['dc','su'])) { |
my %dompersonnel = &Apache::lonnet::get_domain_roles($udom,['dc'],undef,$now); |
unless (grep(/^\Q$user\E$/,@privusers)) { |
$privileged{$udom} = {}; |
push(@privusers,$user); |
if (keys(%dompersonnel)) { |
|
foreach my $server (keys(%dompersonnel)) { |
|
foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { |
|
my ($trole,$uname,$udom) = split(/:/,$user); |
|
$privileged{$udom}{$uname} = $trole; |
|
} |
|
} |
} |
} |
} |
} |
} |
if (exists($privileged{$udom}{$uname})) { |
|
unless (grep(/^\Q$user\E$/,@privusers)) { |
|
push(@privusers,$user); |
|
} |
|
} |
|
} |
} |
if (@privusers) { |
if (@privusers > 0) { |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
$datatable .= '<table align="right">'; |
$datatable .= '<table align="right">'; |
foreach my $user (sort(@privusers)) { |
foreach my $user (sort(@privusers)) { |
my $hideon = ' checked="checked" '; |
my $hideon = ' checked="checked" '; |
Line 3161 sub nothidepriv_row {
|
Line 4497 sub nothidepriv_row {
|
'</td><td align="left">'. |
'</td><td align="left">'. |
'<span class="LC_nobreak"><label>'. |
'<span class="LC_nobreak"><label>'. |
'<input type="radio" name="'.$item.'_'.$user.'"'. |
'<input type="radio" name="'.$item.'_'.$user.'"'. |
$hideon.' value="" />'.&mt('Hidden').'</label> '. |
$hideon.' value=""'.$disabled.' />'.&mt('Hidden').'</label> '. |
'<label><input type="radio" name="'.$item.'_'.$user.'"'. $hideoff.' value="yes" />'.&mt('Shown').'</label></span></td>'. |
'<label><input type="radio" name="'.$item.'_'.$user.'"'. |
|
$hideoff.' value="yes"'.$disabled.' />'.&mt('Shown').'</label></span></td>'. |
'</tr>'; |
'</tr>'; |
} |
} |
$datatable .= '</table>'; |
$datatable .= '</table>'; |
Line 3176 sub nothidepriv_row {
|
Line 4513 sub nothidepriv_row {
|
return $datatable; |
return $datatable; |
} |
} |
|
|
|
sub checkforpriv_row { |
|
my ($cdom,$item,$settings,$crstype,$noedit) = @_; |
|
my $datatable; |
|
my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); |
|
if (keys(%domains) == 1) { |
|
$datatable = '</td><td align="right">'. |
|
&mt("Course's domain is only domain"); |
|
return $datatable; |
|
} |
|
my @excdoms = ($cdom); |
|
my $num = 0; |
|
if ($settings->{$item} eq '') { |
|
$datatable = '</td><td align="right">'. |
|
&Apache::loncommon::select_dom_form('','checkforpriv_'.$num, |
|
1,1,undef,undef,\@excdoms, |
|
$noedit); |
|
} else { |
|
my @privdoms = split(/,/,$settings->{$item}); |
|
my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); |
|
$datatable = '</td><td align="right"><br />'. |
|
&Apache::loncommon::start_data_table(); |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
if (@privdoms > 0) { |
|
foreach my $currdom (@privdoms) { |
|
next unless ($domains{$currdom}); |
|
my $domdesc = &Apache::lonnet::domain($currdom,'description'); |
|
if ($domdesc eq '') { |
|
$domdesc = $currdom; |
|
} |
|
$datatable .= |
|
&Apache::loncommon::start_data_table_row(). |
|
'<td align="left"><span class="LC_nobreak">'. |
|
&mt('Domain:').'<b> '.$domdesc. |
|
'</b><input type="hidden" name="checkforpriv_'.$num. |
|
'" value="'.$currdom.'" /></span><br />'. |
|
'<span class="LC_nobreak"><label><input type="checkbox" '. |
|
'name="checkforpriv_delete" value="'.$num.'"'.$disabled.' />'. |
|
&mt('Delete').'</label></span></td>'. |
|
&Apache::loncommon::end_data_table_row(); |
|
$num ++; |
|
unless (grep(/^\Q$currdom\E$/,@excdoms)) { |
|
push(@excdoms,$currdom); |
|
} |
|
} |
|
} |
|
if ((scalar(keys(%domains)) - scalar(@excdoms)) > 0) { |
|
$datatable .= |
|
&Apache::loncommon::start_data_table_row(). |
|
'<td align="left"><span class="LC_nobreak">'. |
|
&mt('Additional domain:'). '</span><br />'. |
|
&Apache::loncommon::select_dom_form('','checkforpriv_'.$num,1, |
|
1,undef,undef,\@excdoms,$noedit). |
|
'</td>'.&Apache::loncommon::end_data_table_row(); |
|
} |
|
$datatable .= &Apache::loncommon::end_data_table(). |
|
'<input type="hidden" name="checkforpriv_total" value="'.$num.'" />'. |
|
'<br />'; |
|
} |
|
return $datatable; |
|
} |
|
|
sub print_hdrfmt_row { |
sub print_hdrfmt_row { |
my ($item,$settings) = @_; |
my ($item,$settings,$noedit) = @_; |
my @curr; |
my @curr; |
my $currnum = 0; |
my $currnum = 0; |
my $maxnum = 2; |
my $maxnum = 2; |
Line 3248 function getIndexByName(item) {
|
Line 4649 function getIndexByName(item) {
|
</script> |
</script> |
|
|
ENDJS |
ENDJS |
$output .= $currstr.'<table class="LC_nested_outer">'; |
$output .= '</td><td align="right"><br />'. |
|
$currstr.'<table class="LC_data_table">'; |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
if (@curr > 0) { |
if (@curr > 0) { |
for (my $i=0; $i<@curr; $i++) { |
for (my $i=0; $i<@curr; $i++) { |
my $pos = $i+1; |
my $pos = $i+1; |
$output .= '<tr>'. |
$output .= '<tr>'. |
'<td align="left"><span class="LC_nobreak">'. |
'<td align="left"><span class="LC_nobreak">'. |
&position_selector($pos,$i,$maxnum).&mt('Delete:'). |
&position_selector($pos,$i,$maxnum,$disabled).&mt('Delete:'). |
'<input type="checkbox" name="printfmthdr_del_'.$i. |
'<input type="checkbox" name="printfmthdr_del_'.$i. |
'" /></span></td>'; |
'"'.$disabled.' /></span></td>'; |
if ($curr[$i] =~ /^%\d*[nca]$/) { |
if ($curr[$i] =~ /^%\d*[nca]$/) { |
my ($limit,$subst) = ($curr[$i] =~ /^%(\d*)([nca])$/); |
my ($limit,$subst) = ($curr[$i] =~ /^%(\d*)([nca])$/); |
$output .= '<td align="left">'. |
$output .= '<td align="left">'. |
&substitution_selector($i,$subst,$limit).'</td>'; |
&substitution_selector($i,$subst,$limit,$disabled).'</td>'; |
} else { |
} else { |
$output .= '<td colspan="2" align="left">'.&mt('Text').'<br />'. |
$output .= '<td colspan="2" align="left">'.&mt('Text').'<br />'. |
'<input type="textbox" name="printfmthdr_text_'.$i.'"'. |
'<input type="textbox" name="printfmthdr_text_'.$i.'"'. |
' value="'.$curr[$i].'" size="25" /></td>'; |
' value="'.$curr[$i].'" size="25"'.$disabled.' /></td>'; |
} |
} |
$output .= '</tr>'; |
$output .= '</tr>'; |
} |
} |
} |
} |
my $pos = $currnum+1; |
my $pos = $currnum+1; |
$output .= '<tr>'. |
unless ($noedit) { |
|
$output .= |
|
'<tr>'. |
'<td align="left"><span class="LC_nobreak">'. |
'<td align="left"><span class="LC_nobreak">'. |
&position_selector($pos,$currnum,$maxnum). |
&position_selector($pos,$currnum,$maxnum). |
'<b>'.&mt('New').'</b></span></td><td align="left">'. |
'<b>'.&mt('New').'</b></span></td><td align="left">'. |
&substitution_selector($currnum).'</td>'. |
&substitution_selector($currnum).'</td>'. |
'</tr>'; |
'</tr>'; |
$pos ++; |
$pos ++; |
$currnum ++; |
$currnum ++; |
$output .= '<tr>'. |
$output .= |
|
'<tr>'. |
'<td align="left"><span class="LC_nobreak">'. |
'<td align="left"><span class="LC_nobreak">'. |
&position_selector($pos,$currnum,$maxnum). |
&position_selector($pos,$currnum,$maxnum). |
'<b>'.&mt('New').'</b></span></td>'. |
'<b>'.&mt('New').'</b></span></td>'. |
Line 3287 ENDJS
|
Line 4696 ENDJS
|
'" value="" size ="25" />'. |
'" value="" size ="25" />'. |
'<input type="hidden" name="printfmthdr_maxnum" value="'. |
'<input type="hidden" name="printfmthdr_maxnum" value="'. |
$maxnum.'" /></td>'. |
$maxnum.'" /></td>'. |
'</tr>'. |
'</tr>'; |
'</table>'; |
} |
|
$output .= '</table><br />'; |
return $output; |
return $output; |
} |
} |
|
|
sub position_selector { |
sub position_selector { |
my ($pos,$num,$maxnum) = @_; |
my ($pos,$num,$maxnum,$disabled) = @_; |
my $output = '<select name="printfmthdr_pos_'.$num.'" onchange="reOrder('."'$num'".');">'; |
my $output = '<select name="printfmthdr_pos_'.$num.'" onchange="reOrder('."'$num'".');"'.$disabled.'>'; |
for (my $j=1; $j<=$maxnum; $j++) { |
for (my $j=1; $j<=$maxnum; $j++) { |
my $sel = ''; |
my $sel = ''; |
if ($pos == $j) { |
if ($pos == $j) { |
Line 3308 sub position_selector {
|
Line 4718 sub position_selector {
|
} |
} |
|
|
sub substitution_selector { |
sub substitution_selector { |
my ($num,$subst,$limit,$crstype) = @_; |
my ($num,$subst,$limit,$crstype,$disabled) = @_; |
my ($stunametxt,$crsidtxt); |
my ($stunametxt,$crsidtxt); |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
$stunametxt = 'member name'; |
$stunametxt = 'member name'; |
Line 3323 sub substitution_selector {
|
Line 4733 sub substitution_selector {
|
a => 'assignment note', |
a => 'assignment note', |
); |
); |
my $output .= &mt('Substitution').'<br />'. |
my $output .= &mt('Substitution').'<br />'. |
'<select name="printfmthdr_sub_'.$num.'">'; |
'<select name="printfmthdr_sub_'.$num.'"'.$disabled.'>'; |
if ($subst eq '') { |
if ($subst eq '') { |
$output .= '<option value="" selected="selected"> </option>'; |
$output .= '<option value="" selected="selected"> </option>'; |
} |
} |
Line 3337 sub substitution_selector {
|
Line 4747 sub substitution_selector {
|
} |
} |
$output .= '</select></td><td align="left">'.&mt('Size limit').'<br />'. |
$output .= '</select></td><td align="left">'.&mt('Size limit').'<br />'. |
'<input type="textbox" name="printfmthdr_limit_'.$num. |
'<input type="textbox" name="printfmthdr_limit_'.$num. |
'" value="'.$limit.'" size="5" /></span>'; |
'" value="'.$limit.'" size="5"'.$disabled.' /></span>'; |
return $output; |
return $output; |
} |
} |
|
|
Line 3355 sub change_clone {
|
Line 4765 sub change_clone {
|
foreach my $currclone (@allowclone) { |
foreach my $currclone (@allowclone) { |
if (!grep(/^$currclone$/,@$oldcloner)) { |
if (!grep(/^$currclone$/,@$oldcloner)) { |
if ($currclone ne '*') { |
if ($currclone ne '*') { |
my ($uname,$udom) = split(/:/,$currclone); |
if ($currclone =~ /:/) { |
if ($uname && $udom && $uname ne '*') { |
my ($uname,$udom) = split(/:/,$currclone); |
if (&Apache::lonnet::homeserver($uname,$udom) ne '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); |
|
} |
} |
} |
} |
} |
} |
Line 3375 sub change_clone {
|
Line 4787 sub change_clone {
|
foreach my $oldclone (@$oldcloner) { |
foreach my $oldclone (@$oldcloner) { |
if (!grep(/^\Q$oldclone\E$/,@allowclone)) { |
if (!grep(/^\Q$oldclone\E$/,@allowclone)) { |
if ($oldclone ne '*') { |
if ($oldclone ne '*') { |
my ($uname,$udom) = split(/:/,$oldclone); |
if ($oldclone =~ /:/) { |
if ($uname && $udom && $uname ne '*' ) { |
my ($uname,$udom) = split(/:/,$oldclone); |
if (&Apache::lonnet::homeserver($uname,$udom) ne '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 my $crs (@currclonecrs) { |
my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; |
if ($crs ne $clone_crs) { |
foreach my $crs (@currclonecrs) { |
$newclonecrs{'cloneable'} .= $crs.','; |
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); |
|
} |
} |
} |
} |
} |
} |