version 1.82, 2016/10/24 18:08:55
|
version 1.91, 2020/10/29 23:24:13
|
Line 367 sub handler {
|
Line 367 sub handler {
|
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', |
'spreadsheet','bridgetasks','other'); |
'menuitems','spreadsheet','bridgetasks','lti','other'); |
|
|
my %prefs = ( |
my %prefs = ( |
'courseinfo' => |
'courseinfo' => |
Line 375 sub handler {
|
Line 375 sub handler {
|
help => 'Course_Prefs_General', |
help => 'Course_Prefs_General', |
ordered => ['owner','co-owners','loncaparev','description', |
ordered => ['owner','co-owners','loncaparev','description', |
'clonedfrom','courseid','uniquecode','categories', |
'clonedfrom','courseid','uniquecode','categories', |
'hidefromcat','externalsyllabus','cloners','url', |
'hidefromcat','syllabus','cloners','url', |
'rolenames'], |
'rolenames'], |
itemtext => { |
itemtext => { |
'owner' => $lt{'ownr'}, |
'owner' => $lt{'ownr'}, |
Line 386 sub handler {
|
Line 386 sub handler {
|
'categories' => $lt{'catg'}, |
'categories' => $lt{'catg'}, |
'hidefromcat' => $lt{'excc'}, |
'hidefromcat' => $lt{'excc'}, |
'cloners' => $lt{'clon'}, |
'cloners' => $lt{'clon'}, |
'externalsyllabus' => 'Syllabus status', |
'syllabus' => 'Syllabus status', |
'url' => 'Top Level Map', |
'url' => 'Top Level Map', |
'rolenames' => $lt{'rept'}, |
'rolenames' => $lt{'rept'}, |
'loncaparev' => $lt{'lcrv'}, |
'loncaparev' => $lt{'lcrv'}, |
Line 530 sub handler {
|
Line 530 sub handler {
|
suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio', |
suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio', |
}, |
}, |
}, |
}, |
|
'lti' => |
|
{ |
|
text => 'LTI provider settings', |
|
help => 'Course_Prefs_LTIProvider', |
|
ordered => ['lti.override','lti.topmenu','lti.inlinemenu','lti.lcmenu'], |
|
itemtext => { |
|
'lti.override' => 'Override domain defaults', |
|
'lti.topmenu' => 'Display LON-CAPA page header', |
|
'lti.inlinemenu' => 'Display LON-CAPA inline menu', |
|
'lti.lcmenu' => 'Menu items', |
|
}, |
|
}, |
|
'menuitems' => |
|
{ |
|
text => 'Menu display', |
|
help => 'Course_Prefs_Menus', |
|
header => [{col1 => 'Default Menu', |
|
col2 => 'Value',}, |
|
{col1 => 'Menu collections', |
|
col2 => 'Settings', |
|
}], |
|
ordered => ['menudefault','menucollections'], |
|
itemtext => { |
|
menudefault => 'Choose default collection of menu items for course', |
|
menucollections => 'Menu collections', |
|
}, |
|
}, |
'other' => |
'other' => |
{ text => 'Other settings', |
{ text => 'Other settings', |
help => 'Course_Prefs_Other', |
help => 'Course_Prefs_Other', |
Line 545 sub handler {
|
Line 572 sub handler {
|
$cnum,undef,\@allitems, |
$cnum,undef,\@allitems, |
'coursepref',$parm_permission); |
'coursepref',$parm_permission); |
} elsif (($phase eq 'display') && ($parm_permission->{'display'})) { |
} elsif (($phase eq 'display') && ($parm_permission->{'display'})) { |
my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values); |
my $noedit; |
|
if (ref($parm_permission) eq 'HASH') { |
|
unless ($parm_permission->{'process'}) { |
|
$noedit = 1; |
|
} |
|
} |
|
my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values,$noedit); |
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, |
Line 622 sub print_config_box {
|
Line 655 sub print_config_box {
|
} |
} |
$output .= '</span></th>'."\n". |
$output .= '</span></th>'."\n". |
'</tr>'; |
'</tr>'; |
if (($action eq 'feedback') || ($action eq 'classlists')) { |
if (($action eq 'feedback') || ($action eq 'classlists') || ($action eq 'menuitems')) { |
$output .= ' |
$output .= ' |
<tr> |
<tr> |
<td> |
<td> |
Line 647 sub print_config_box {
|
Line 680 sub print_config_box {
|
$output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); |
$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,$noedit); |
$output .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); |
|
} elsif ($action eq 'menuitems') { |
|
$output .= &print_menuitems('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); |
} |
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
Line 725 sub print_config_box {
|
Line 760 sub print_config_box {
|
$output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
$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,$noedit); |
$output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
|
} elsif ($action eq 'lti') { |
|
$output .= &print_lti($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); |
|
} elsif ($action eq 'menuitems') { |
|
$output .= &print_menuitems('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); |
} elsif ($action eq 'other') { |
} elsif ($action eq 'other') { |
$output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit); |
$output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit); |
} |
} |
Line 766 sub process_changes {
|
Line 805 sub process_changes {
|
(!$can_categorize)); |
(!$can_categorize)); |
next if (($entry eq 'loncaparev') || |
next if (($entry eq 'loncaparev') || |
($entry eq 'owner') || |
($entry eq 'owner') || |
($entry eq 'clonedfrom')); |
($entry eq 'clonedfrom') || |
|
($entry eq 'syllabus')); |
push(@ordered,$entry); |
push(@ordered,$entry); |
} |
} |
} elsif ($action eq 'classlists') { |
} elsif ($action eq 'classlists') { |
Line 816 sub process_changes {
|
Line 856 sub process_changes {
|
$changes->{$ext_entry} = $newvalues{$ext_entry}; |
$changes->{$ext_entry} = $newvalues{$ext_entry}; |
} |
} |
} |
} |
|
} elsif ($action eq 'menuitems') { |
|
my (%current,@colls); |
|
my $next = 1; |
|
if ($values->{'menucollections'}) { |
|
foreach my $item (split(/;/,$values->{'menucollections'})) { |
|
my ($num,$value) = split(/\%/,$item); |
|
if ($num =~ /^\d+$/) { |
|
unless (grep(/^$num$/,@colls)) { |
|
push(@colls,$num); |
|
} |
|
my @entries = split(/\&/,$value); |
|
foreach my $entry (@entries) { |
|
my ($name,$fields) = split(/=/,$entry); |
|
$current{$num}{$name} = $fields; |
|
} |
|
} |
|
} |
|
} |
|
if (@colls) { |
|
@colls = sort { $a <=> $b } @colls; |
|
$next += $colls[-1]; |
|
} |
|
if ($env{'form.menucollections_add'} eq $next) { |
|
push(@colls,$next); |
|
} |
|
my $currdef = $values->{'menudefault'}; |
|
my $possdef = $env{'form.menudefault'}; |
|
if (($possdef =~ /^\d+$/) && (grep(/^$possdef$/,@colls))) { |
|
if ($values->{'menudefault'} ne $possdef) { |
|
$changes->{'menudefault'} = $possdef; |
|
} |
|
} elsif ($values->{'menudefault'}) { |
|
$changes->{'menudefault'} = ''; |
|
} |
|
my $menucoll; |
|
if (@colls) { |
|
my ($ordered,$cats) = &menuitems_categories(); |
|
my %shortcats = &menuitems_abbreviations(); |
|
foreach my $num (@colls) { |
|
my ($entry,%include); |
|
map { $include{$_}= 1; } &Apache::loncommon::get_env_multiple('form.menucollections_'.$num); |
|
foreach my $item (@{$ordered}) { |
|
if ($item eq 'shown') { |
|
foreach my $type (@{$cats->{$item}}) { |
|
$entry .= $type.'='; |
|
if ($include{$type}) { |
|
$entry .= 'y'; |
|
} else { |
|
$entry .= 'n'; |
|
} |
|
$entry .= '&'; |
|
} |
|
} else { |
|
$entry .= $shortcats{$item}.'='; |
|
foreach my $type (@{$cats->{$item}}) { |
|
if ($include{$type}) { |
|
$entry .= $type.','; |
|
} |
|
} |
|
$entry =~ s/,$//; |
|
$entry .= '&'; |
|
} |
|
} |
|
$entry =~ s/\&$//; |
|
if ($menucoll) { |
|
$menucoll .= ';'; |
|
} |
|
$menucoll .= $num.'%'.$entry; |
|
} |
|
if ($menucoll ne $values->{'menucollections'}) { |
|
$changes->{'menucollections'} = $menucoll; |
|
} |
|
} elsif ($values->{'menucollections'}) { |
|
$changes->{'menucollections'} = ''; |
|
} |
} else { |
} else { |
foreach my $entry (@ordered) { |
foreach my $entry (@ordered) { |
if ($entry eq 'cloners') { |
if ($entry eq 'cloners') { |
Line 969 sub process_changes {
|
Line 1084 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 1257 sub process_changes {
|
Line 1372 sub process_changes {
|
$settings =~ s/,$//; |
$settings =~ s/,$//; |
} |
} |
$newvalues{$entry} = $settings; |
$newvalues{$entry} = $settings; |
|
} elsif ($action eq 'lti') { |
|
if ($entry eq 'lti.override') { |
|
$newvalues{$entry} = $env{'form.'.$entry}; |
|
} elsif (($entry eq 'lti.topmenu') || ($entry eq 'lti.inlinemenu')) { |
|
if ($env{'form.lti.override'}) { |
|
$newvalues{$entry} = $env{'form.'.$entry}; |
|
} else { |
|
$newvalues{$entry} = ''; |
|
} |
|
} elsif ($entry eq 'lti.lcmenu') { |
|
if (($env{'form.lti.override'}) && |
|
(($env{'form.lti.topmenu'}) || ($env{'form.lti.inlinemenu'}))) { |
|
my @lcmenu = &Apache::loncommon::get_env_multiple('form.lti.lcmenu'); |
|
my @newlcmenu; |
|
if (@lcmenu) { |
|
my @menuitems = ('fullname','coursetitle','role','logout','grades'); |
|
foreach my $item (@menuitems) { |
|
next if (($item eq 'grades') && (!$newvalues{'lti.inlinemenu'})); |
|
if (grep(/^\Q$item\E$/,@lcmenu)) { |
|
push(@newlcmenu,$item); |
|
} |
|
} |
|
} |
|
if (@newlcmenu) { |
|
$newvalues{$entry} = join(',',@newlcmenu); |
|
} else { |
|
$newvalues{$entry} = 'none'; |
|
} |
|
} else { |
|
$newvalues{$entry} = ''; |
|
} |
|
} |
} else { |
} else { |
$newvalues{$entry} = $env{'form.'.$entry}; |
$newvalues{$entry} = $env{'form.'.$entry}; |
} |
} |
Line 1467 sub store_changes {
|
Line 1614 sub store_changes {
|
} |
} |
} |
} |
$displayname = &mt($text); |
$displayname = &mt($text); |
|
} elsif ($item eq 'lti') { |
|
if ($key eq 'lti.lcmenu') { |
|
if ($changes->{$item}{$key} eq 'none') { |
|
$displayval = &mt('None of the configurable menu items displayed'); |
|
} else { |
|
my %ltititles = <imenu_titles(); |
|
$displayval = join(', ', map { $ltititles{$_}; } split(/,/,$changes->{$item}{$key})); |
|
} |
|
} else { |
|
if ($changes->{$item}{$key} eq '1') { |
|
$displayval = &mt('Yes'); |
|
} elsif ($changes->{$item}{$key} eq '') { |
|
$displayval = &mt('No'); |
|
} |
|
} |
|
$displayname = &mt($text); |
|
} elsif ($item eq 'menuitems') { |
|
unless ($changes->{$item}{$key} eq '') { |
|
if ($key eq 'menudefault') { |
|
$displayname = &mt('Default collection of menu items'); |
|
$displayval = &mt('Collection: [_1]', |
|
$changes->{$item}{$key}); |
|
} elsif ($key eq 'menucollections') { |
|
$displayval = &menucollections_display($changes->{$item}{$key}); |
|
} |
|
} |
} else { |
} else { |
$displayname = &mt($text); |
$displayname = &mt($text); |
} |
} |
Line 1511 sub store_changes {
|
Line 1684 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 1529 sub store_changes {
|
Line 1702 sub store_changes {
|
} |
} |
} elsif ($changes->{$item}{$key} eq '') { |
} elsif ($changes->{$item}{$key} eq '') { |
push(@delkeys,$key); |
push(@delkeys,$key); |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', |
if ($item eq 'lti') { |
'<i>'.$displayname.'</i>')).'</li>'; |
if (($key eq 'lti.override') || (($key ne 'lti.override') && ($env{'form.lti.override'} ne ''))) { |
|
if (($key eq 'lti.lcmenu') && |
|
((!$env{'form.lti.topmenu'}) && (!$env{'form.lti.inlinemenu'}))) { |
|
$output .= '<li>'.&mt('LTI settings for menu items only saved if page header and/or inline menu is set to be displayed').'</li>'; |
|
} else { |
|
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', |
|
'<i>'.$displayname.'</i>', |
|
"'<b>$displayval</b>'")).'</li>'; |
|
} |
|
} elsif (!exists($changes->{$item}{'lti.override'})) { |
|
$output .= '<li>'.&mt('LTI settings only saved if Override is set to "Yes"').'</li>'; |
|
} |
|
} elsif ($item eq 'menuitems') { |
|
if ($key eq 'menudefault') { |
|
$output .= '<li>'.&mt("Default collection of menu items set to: 'Standard' (all menus shown)").'</li>'; |
|
} elsif ($key eq 'menucollections') { |
|
$output .= '<li>'.&mt('Specific collections of menus no longer available').'</li>'; |
|
} |
|
} else { |
|
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', |
|
'<i>'.$displayname.'</i>')).'</li>'; |
|
} |
|
} elsif ($key eq 'menucollections') { |
|
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Numbered menu collections:')).'<br />'. |
|
$displayval.'</li>'; |
} else { |
} else { |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', |
$output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', |
'<i>'.$displayname.'</i>', |
'<i>'.$displayname.'</i>', |
Line 1569 sub store_changes {
|
Line 1766 sub store_changes {
|
} |
} |
if (($key eq 'description') || ($key eq 'cloners') || |
if (($key eq 'description') || ($key eq 'cloners') || |
($key eq 'hidefromcat') || ($key eq 'categories') || |
($key eq 'hidefromcat') || ($key eq 'categories') || |
($key eq 'co-owners')) { |
($key eq 'co-owners') || ($key eq 'lti.override') || |
|
($key eq 'lti.topmenu') || ($key eq 'lti.inlinemenu') || |
|
($key eq 'lti.lcmenu')) { |
push(@need_env_update,$key); |
push(@need_env_update,$key); |
} |
} |
} |
} |
Line 1653 sub update_env {
|
Line 1852 sub update_env {
|
my @coowners = split(',',$storehash->{'internal.'.$key}); |
my @coowners = split(',',$storehash->{'internal.'.$key}); |
$crsinfo{$env{'request.course.id'}}{'co-owners'} = \@coowners; |
$crsinfo{$env{'request.course.id'}}{'co-owners'} = \@coowners; |
$count ++; |
$count ++; |
|
} elsif ($key =~ /^lti\./) { |
|
&Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.'.$key => $storehash->{$key}}); |
} |
} |
} |
} |
if ($count) { |
if ($count) { |
Line 1756 sub get_course {
|
Line 1957 sub get_course {
|
} |
} |
|
|
sub get_jscript { |
sub get_jscript { |
my ($cid,$cdom,$phase,$crstype,$settings) = @_; |
my ($cid,$cdom,$phase,$crstype,$settings,$noedit) = @_; |
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,$loncaparev_js,$instcode_js); |
my ($jscript,$categorize_js,$loncaparev_js,$instcode_js); |
my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); |
my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); |
Line 1882 function syllabusinfo() {
|
Line 2083 function syllabusinfo() {
|
} |
} |
} |
} |
ENDSCRIPT |
ENDSCRIPT |
|
my $menuitems_js; |
|
unless ($noedit) { |
|
my $collections; |
|
my $next = 1; |
|
if (ref($settings) eq 'HASH') { |
|
if ($settings->{'menucollections'} ne '') { |
|
my @current; |
|
foreach my $item (split(/;/,$settings->{'menucollections'})) { |
|
my ($num) = split(/\%/,$item); |
|
if ($num =~ /^\d+$/) { |
|
push(@current,$num); |
|
} |
|
} |
|
$collections = join("','",sort { $a <=> $b } @current); |
|
if ($collections) { |
|
$collections = "'$collections'"; |
|
} |
|
$next += $current[-1]; |
|
} |
|
} |
|
my $deftext = &mt('Standard (all menus shown)'); |
|
$menuitems_js = <<ENDSCRIPT; |
|
function toggleAddmenucoll() { |
|
if (document.getElementById('menucollections_add')) { |
|
var state = 'none'; |
|
var add = document.getElementById('menucollections_add').checked; |
|
if (add) { |
|
state = 'inline-block'; |
|
} |
|
var fieldsets = new Array('shown','text','links','list','inline'); |
|
for (var i=0; i<fieldsets.length; i++) { |
|
if (document.getElementById('addmenucoll_'+fieldsets[i])) { |
|
document.getElementById('addmenucoll_'+fieldsets[i]).style.display = state; |
|
} |
|
} |
|
var box = document.getElementsByClassName('LC_menucoll_add'); |
|
if (box.length) { |
|
for (var i=0; i<box.length; i++) { |
|
if (add) { |
|
box[i].checked = true; |
|
} else { |
|
box[i].checked = false; |
|
} |
|
} |
|
} |
|
if (document.getElementById('menudefault')) { |
|
var menudef = document.getElementById('menudefault'); |
|
var currsel = menudef.selectedIndex; |
|
var colls = new Array($collections); |
|
menudef.options.length = 0; |
|
if (!add) { |
|
if (currsel == 1 + colls.length) { |
|
currsel = 0; |
|
} |
|
} |
|
if (currsel == 0) { |
|
menudef.options[0] = new Option('$deftext','',true,true); |
|
} else { |
|
menudef.options[0] = new Option('$deftext','',false,false); |
|
} |
|
if (colls.length) { |
|
for (var i=0; i<colls.length; i++) { |
|
var idx = i+1; |
|
if (currsel == colls[i]) { |
|
menudef.options[idx] = new Option(colls[i],colls[i],true,true); |
|
} else { |
|
menudef.options[idx] = new Option(colls[i],colls[i],false,false); |
|
} |
|
} |
|
} |
|
if (add) { |
|
var addidx = 1 + colls.length; |
|
if (currsel == addidx) { |
|
menudef.options[addidx] = new Option('$next','$next',true,true); |
|
} else { |
|
menudef.options[addidx] = new Option('$next','$next',false,false); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
ENDSCRIPT |
|
} |
$jscript = '<script type="text/javascript" language="Javascript">'."\n". |
$jscript = '<script type="text/javascript" language="Javascript">'."\n". |
'// <![CDATA['."\n". |
'// <![CDATA['."\n". |
$browse_js."\n".$categorize_js."\n".$loncaparev_js."\n". |
$browse_js."\n".$categorize_js."\n".$loncaparev_js."\n". |
$cloners_js."\n".$instcode_js. |
$cloners_js."\n".$instcode_js. |
$syllabus_js."\n".'//]]>'."\n". |
$syllabus_js."\n".$menuitems_js."\n".'//]]>'."\n". |
'</script>'."\n".$stubrowse_js."\n"; |
'</script>'."\n".$stubrowse_js."\n"; |
return $jscript; |
return $jscript; |
} |
} |
Line 1978 sub print_courseinfo {
|
Line 2262 sub print_courseinfo {
|
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,$clonedefaults); |
my ($cathash,$categoriesform,$autocoowner,$clonedefaults,$disabled); |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
my %domconf = |
my %domconf = |
&Apache::lonnet::get_dom('configuration', |
&Apache::lonnet::get_dom('configuration', |
['coursecategories','autoenroll','coursedefaults'],$cdom); |
['coursecategories','autoenroll','coursedefaults'],$cdom); |
Line 1987 sub print_courseinfo {
|
Line 2274 sub print_courseinfo {
|
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') { |
Line 2054 sub print_courseinfo {
|
Line 2341 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 => '55', |
size => '55', |
advanced => 1 |
advanced => 1 |
Line 2103 sub print_courseinfo {
|
Line 2396 sub print_courseinfo {
|
size => '20', |
size => '20', |
advanced => 1 |
advanced => 1 |
}, |
}, |
'externalsyllabus' => { |
'syllabus' => { |
text => '<b>'.&mt($itemtext->{'externalsyllabus'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'syllabus'}).'</b><br />'. |
&mt('(Syllabus type in use)').(' ' x2). |
&mt('(Syllabus type in use)').(' ' x2). |
&mt('[_1]Edit[_2]','<a href="/public/'.$cdom.'/'.$cnum.'/syllabus?forceedit=1">', |
$editsyllabus, |
'</a>'), |
|
}, |
}, |
'hidefromcat' => { |
'hidefromcat' => { |
text => '<b>'.&mt($itemtext->{'hidefromcat'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'hidefromcat'}).'</b><br />'. |
Line 2129 sub print_courseinfo {
|
Line 2421 sub print_courseinfo {
|
); |
); |
my $datatable; |
my $datatable; |
my $count = 0; |
my $count = 0; |
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
foreach my $item (@{$ordered}) { |
foreach my $item (@{$ordered}) { |
my $colspan; |
my $colspan; |
if ($item eq 'hidefromcat') { |
if ($item eq 'hidefromcat') { |
Line 2354 sub print_courseinfo {
|
Line 2642 sub print_courseinfo {
|
$datatable .= &manage_coownership($cnum,$cdom,\@currcoown,$noedit); |
$datatable .= &manage_coownership($cnum,$cdom,\@currcoown,$noedit); |
} |
} |
} |
} |
} elsif ($item eq 'externalsyllabus') { |
} elsif ($item eq 'syllabus') { |
my $external = $env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}; |
my $external = $env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}; |
my $uploaded = $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}; |
my $uploaded = $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}; |
my $minimal = $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}; |
my $minimal = $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}; |
Line 2576 sub display_loncaparev_constraints {
|
Line 2864 sub display_loncaparev_constraints {
|
$Apache::lonrelrequtils::checkcrstypes{$crstype}).'</h4>'; |
$Apache::lonrelrequtils::checkcrstypes{$crstype}).'</h4>'; |
} |
} |
my (%fromparam,%rowspan,%bymap,%byresource,@scopeorder,%toshow,%allmaps, |
my (%fromparam,%rowspan,%bymap,%byresource,@scopeorder,%toshow,%allmaps, |
%byresponsetype,%bysubmission,%fromblocks); |
%byresponsetype,%bysubmission,%fromblocks,%bycrsrestype); |
@scopeorder = ('all','section/group','user'); |
@scopeorder = ('all','section/group','user'); |
my $now = time; |
my $now = time; |
my $resourcedata = &Apache::lonparmset::readdata($cnum,$cdom); |
my $resourcedata = &Apache::lonparmset::readdata($cnum,$cdom); |
Line 2850 sub display_loncaparev_constraints {
|
Line 3138 sub display_loncaparev_constraints {
|
my $rev_anonsurv=$Apache::lonnet::needsrelease{'parameter:type:anonsurvey::'}; |
my $rev_anonsurv=$Apache::lonnet::needsrelease{'parameter:type:anonsurvey::'}; |
my %randtrysubms=&Apache::lonnet::dump('nohist_randomizetry',$cdom,$cnum); |
my %randtrysubms=&Apache::lonnet::dump('nohist_randomizetry',$cdom,$cnum); |
my $rev_randtry=$Apache::lonnet::needsrelease{'parameter:type:randomizetry::'}; |
my $rev_randtry=$Apache::lonnet::needsrelease{'parameter:type:randomizetry::'}; |
|
my $rev_exttool=$Apache::lonnet::needsrelease{'course:courserestype:exttool'}; |
my $stdtype=&Apache::lonparmset::standard_parameter_types('type'); |
my $stdtype=&Apache::lonparmset::standard_parameter_types('type'); |
my $stdname=&Apache::lonparmset::standard_parameter_names('type'); |
my $stdname=&Apache::lonparmset::standard_parameter_names('type'); |
my $valanon=&get_param_description($stdtype,'anonsurvey'); |
my $valanon=&get_param_description($stdtype,'anonsurvey'); |
my $valrandtry=&get_param_description($stdtype,'randomizetry'); |
my $valrandtry=&get_param_description($stdtype,'randomizetry'); |
my %checkedrev; |
my %checkedrev; |
foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { |
foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() || $_[0]->is_tool() },1,0)) { |
my @parts = @{$res->parts()}; |
my @parts = @{$res->parts()}; |
my $symb = $res->symb(); |
my $symb = $res->symb(); |
my $enclosing_map = &Apache::lonnet::declutter($res->enclosing_map_src()); |
my $enclosing_map = &Apache::lonnet::declutter($res->enclosing_map_src()); |
|
if ($res->is_tool()) { |
|
my $rev = $rev_exttool; |
|
$bycrsrestype{$symb}{$rev} = &mt('External Tool'); |
|
$allmaps{$enclosing_map} = 1; |
|
next; |
|
} |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
if (exists($anonsubms{$symb."\0".$part})) { |
if (exists($anonsubms{$symb."\0".$part})) { |
my $rev = $rev_anonsurv; |
my $rev = $rev_anonsurv; |
Line 2946 sub display_loncaparev_constraints {
|
Line 3241 sub display_loncaparev_constraints {
|
} |
} |
} |
} |
} |
} |
|
my $suppmap = 'supplemental.sequence'; |
|
my ($suppcount,$supptools,$errors) = (0,0,0); |
|
($suppcount,$supptools,$errors) = &Apache::loncommon::recurse_supplemental($cnum,$cdom, |
|
$suppmap,$suppcount,$supptools,$errors); |
my $mapres_header = '<h4>'. |
my $mapres_header = '<h4>'. |
&mt('Requirements for specific folders or resources'). |
&mt('Requirements for specific folders or resources'). |
'</h4>'; |
'</h4>'; |
Line 2960 sub display_loncaparev_constraints {
|
Line 3259 sub display_loncaparev_constraints {
|
$r->print($start_page.$top_header); |
$r->print($start_page.$top_header); |
if ($output) { |
if ($output) { |
$r->print($output); |
$r->print($output); |
if (defined($navmap)) { |
if (defined($navmap) || $supptools) { |
&show_contents_view($r,$navmap,$cid,\%toshow,\%bymap,\%byresource,\%bysubmission, |
&show_contents_view($r,$navmap,$cid,\%toshow,\%bymap,\%byresource,\%bysubmission, |
\%byresponsetype,\@scopeorder,\%lt); |
\%byresponsetype,\%bycrsrestype,\@scopeorder,\%lt,$supptools); |
} |
} |
$r->print('<br /><br />'); |
$r->print('<br /><br />'); |
} else { |
} else { |
Line 2980 sub display_loncaparev_constraints {
|
Line 3279 sub display_loncaparev_constraints {
|
|
|
sub show_contents_view { |
sub show_contents_view { |
my ($r,$navmap,$cid,$toshow,$bymap,$byresource,$bysubmission,$byresponsetype, |
my ($r,$navmap,$cid,$toshow,$bymap,$byresource,$bysubmission,$byresponsetype, |
$scopeorder,$lt) = @_; |
$bycrsrestype,$scopeorder,$lt,$supptools) = @_; |
if ((keys(%{$toshow}) > 0) || (keys(%{$byresource}) > 0) || |
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons"); |
(keys(%{$bysubmission}) > 0) || (keys(%{$byresponsetype}) > 0)) { |
my $whitespace = '<img src="'.$location.'/whitespace_21.gif" alt="" />'; |
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons"); |
my $showmaincontent; |
my $whitespace = '<img src="'.$location.'/whitespace_21.gif" alt="" />'; |
if ((ref($navmap)) && |
my $icon = '<img src="'.$location.'/navmap.folder.open.gif" alt="" />'; |
((keys(%{$toshow}) > 0) || (keys(%{$byresource}) > 0) || |
|
(keys(%{$bysubmission}) > 0) || (keys(%{$byresponsetype}) > 0) || |
|
(keys(%{$bycrsrestype}) > 0))) { |
|
$showmaincontent = 1; |
|
} |
|
if ($showmaincontent || $supptools) { |
|
$r->print(&Apache::loncommon::start_data_table()); |
|
} |
|
if ($showmaincontent) { |
|
my $icon = '<img src="'.$location.'/navmap.folder.open.gif" alt="" />'; |
my $topmap = $env{'course.'.$cid.'.url'}; |
my $topmap = $env{'course.'.$cid.'.url'}; |
$r->print(&Apache::loncommon::start_data_table(). |
$r->print(&Apache::loncommon::start_data_table_header_row(). |
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Location').'</th><th>'.&mt('Release').'</th>'. |
'<th>'.&mt('Location').'</th><th>'.&mt('Release').'</th>'. |
'<th>'.&mt('Attribute/Setting').'</th>'. |
'<th>'.&mt('Attribute/Setting').'</th>'. |
&Apache::loncommon::end_data_table_header_row(). |
&Apache::loncommon::end_data_table_header_row(). |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td> '.$icon.' '.&mt('Main Content').'</td>'); |
'<td> '.$icon.' '.&mt('Main Content').'</td>'); |
&releases_by_map($r,$bymap,$topmap,$scopeorder,$lt); |
&releases_by_map($r,$bymap,$topmap,$scopeorder,$lt); |
$r->print(&Apache::loncommon::end_data_table_row()); |
$r->print(&Apache::loncommon::end_data_table_row()); |
my $it=$navmap->getIterator(undef,undef,undef,1,1,undef); |
my $it=$navmap->getIterator(undef,undef,undef,1,1,undef); |
my $curRes; |
my $curRes; |
my $depth = 0; |
my $depth = 0; |
Line 3046 sub show_contents_view {
|
Line 3353 sub show_contents_view {
|
if (ref($byresponsetype->{$symb}) eq 'HASH') { |
if (ref($byresponsetype->{$symb}) eq 'HASH') { |
$rowspan += scalar(keys(%{$byresponsetype->{$symb}})); |
$rowspan += scalar(keys(%{$byresponsetype->{$symb}})); |
} |
} |
|
if (ref($bycrsrestype->{$symb}) eq 'HASH') { |
|
$rowspan += scalar(keys(%{$bycrsrestype->{$symb}})); |
|
} |
next if (!$rowspan); |
next if (!$rowspan); |
$icon = '<img class="LC_contentImage" src="'.$location.'/problem.gif" alt="'. |
$icon = '<img class="LC_contentImage" src="'.$location.'/problem.gif" alt="'. |
&mt('Problem').'" />'; |
&mt('Problem').'" />'; |
Line 3110 sub show_contents_view {
|
Line 3420 sub show_contents_view {
|
$r->print('</td>'); |
$r->print('</td>'); |
} |
} |
$r->print(&Apache::loncommon::end_data_table_row()); |
$r->print(&Apache::loncommon::end_data_table_row()); |
|
$newrow = 1; |
|
} |
|
if (ref($bycrsrestype->{$symb}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$bycrsrestype->{$symb}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td>'.$rev.'</td><td>'.$bycrsrestype->{$symb}{$rev}.'</td>'); |
|
} |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
} |
} |
} |
} |
} |
} |
} |
} |
|
} |
|
if ($supptools) { |
|
my $icon = '<img src="'.$location.'/navmap.folder.open.gif" alt="" />'; |
|
$r->print(&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Location').'</th><th>'.&mt('Release').'</th>'. |
|
'<th>'.&mt('Resource Type').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row(). |
|
&Apache::loncommon::start_data_table_row(). |
|
'<td> '.$icon.' '.&mt('Supplemental Content').'</td>'. |
|
'<td valign="middle">'. |
|
$Apache::lonrelrequtils::exttool{'major'}.'.'. |
|
$Apache::lonrelrequtils::exttool{'minor'}. |
|
'</td><td>'.&mt('[quant,_1,External Tool,External Tools]', |
|
$supptools).'</td>'. |
|
&Apache::loncommon::end_data_table_row()); |
|
} |
|
if ($showmaincontent || $supptools) { |
$r->print(&Apache::loncommon::end_data_table()); |
$r->print(&Apache::loncommon::end_data_table()); |
} |
} |
return; |
return; |
Line 3363 sub manage_coownership {
|
Line 3700 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"'.$disabled.' />'.&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"'.$disabled.' />'.&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 3624 sub select_recipient {
|
Line 3961 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 4322 sub print_bridgetasks {
|
Line 4659 sub print_bridgetasks {
|
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks',$noedit); |
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks',$noedit); |
} |
} |
|
|
|
sub print_lti { |
|
my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
|
unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { |
|
return; |
|
} |
|
my @menuitems = ('fullname','coursetitle','role','logout','grades'); |
|
my %menutitles = <imenu_titles(); |
|
my ($domdefs,$displaydefs); |
|
if ($env{'request.lti.login'}) { |
|
my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider'); |
|
my @domdefsmenu; |
|
if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') { |
|
if ($lti{$env{'request.lti.login'}}{'topmenu'}) { |
|
$domdefs = &mt('Header shown').', '; |
|
} |
|
if ($lti{$env{'request.lti.login'}}{'inlinemenu'}) { |
|
$domdefs .= &mt('Inline menu shown'); |
|
} |
|
$domdefs =~ s/,\s$//; |
|
if (!$domdefs) { |
|
$domdefs = &mt('No header or inline menu shown'); |
|
} |
|
$domdefs = ' ('.&mt('Domain default').': '.$domdefs.')'; |
|
if (ref($lti{$env{'request.lti.login'}}{'lcmenu'}) eq 'ARRAY') { |
|
@domdefsmenu = @{$lti{$env{'request.lti.login'}}{'lcmenu'}}; |
|
} |
|
} |
|
$displaydefs = &mt('Domain defaults'); |
|
if (@domdefsmenu) { |
|
my @diffs = &Apache::loncommon::compare_arrays(\@menuitems,\@domdefsmenu); |
|
if (@diffs) { |
|
my $missing; |
|
foreach my $item (@menuitems) { |
|
unless (grep(/^\Q$item\E$/,@domdefsmenu)) { |
|
$missing .= ' '.$menutitles{$item}.','; |
|
} |
|
} |
|
$missing =~ s/,$//; |
|
$displaydefs .= ': '.&mt('Not shown').' --'.$missing; |
|
} else { |
|
$displaydefs .= ': '.&mt('All shown'); |
|
} |
|
} else { |
|
$displaydefs .= ': '.&mt('Not shown').' -- '.join(', ', map { $menutitles{$_}; } @menuitems); |
|
} |
|
} else { |
|
$displaydefs = &mt('Domain defaults only available in LTI context'); |
|
} |
|
my %items = ( |
|
'lti.override' => { |
|
text => '<b>'.&mt($itemtext->{'lti.override'}).'</b>'.$domdefs, |
|
input => 'radio', |
|
}, |
|
'lti.topmenu' => { |
|
text => '<b>'.&mt($itemtext->{'lti.topmenu'}).'</b>', |
|
input => 'radio', |
|
}, |
|
'lti.inlinemenu' => { |
|
text => '<b>'.&mt($itemtext->{'lti.inlinemenu'}).'</b>', |
|
input => 'radio', |
|
}, |
|
'lti.lcmenu' => { |
|
text => '<b>'.&mt($itemtext->{'lti.lcmenu'}).'</b><br />'.$displaydefs, |
|
input => 'custom', |
|
}, |
|
); |
|
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'lti',$noedit); |
|
} |
|
|
|
sub lcmenu_checkboxes { |
|
my ($cdom,$caller,$settings,$crstype,$noedit) = @_; |
|
my @menuitems = ('fullname','coursetitle','role','logout','grades'); |
|
my %menutitles = <imenu_titles(); |
|
my (@current,@domdefs); |
|
if ($env{'request.lti.login'}) { |
|
my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider'); |
|
if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') { |
|
if (ref($lti{$env{'request.lti.login'}}{'lcmenu'}) eq 'ARRAY') { |
|
@domdefs = @{$lti{$env{'request.lti.login'}}{'lcmenu'}}; |
|
} |
|
} |
|
} |
|
if (ref($settings) eq 'HASH') { |
|
if ($settings->{'lti.lcmenu'}) { |
|
unless ($settings->{'lti.lcmenu'} eq 'none') { |
|
@current = split(',',$settings->{'lti.lcmenu'}); |
|
} |
|
} else { |
|
@current = @domdefs; |
|
} |
|
} else { |
|
@current = @domdefs; |
|
} |
|
my $numinrow = 3; |
|
my $count = 0; |
|
my $disabled; |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
my $output = '<table>'; |
|
foreach my $item (@menuitems) { |
|
my $checked = ''; |
|
if (grep(/^\Q$item\E$/,@current)) { |
|
$checked = ' checked="checked" '; |
|
} |
|
my $rem = $count%($numinrow); |
|
if ($rem == 0) { |
|
if ($count > 0) { |
|
$output .= '</tr>'; |
|
} |
|
$output .= '<tr>'; |
|
} |
|
$output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" '. |
|
'name="lti.lcmenu" value="'.$item.'"'.$checked.$disabled.'/> '. |
|
$menutitles{$item}.'</label></span></td>'; |
|
$count ++; |
|
} |
|
my $rem = $count%($numinrow); |
|
my $colsleft = $numinrow - $rem; |
|
if ($colsleft > 1 ) { |
|
$output .= '<td colspan="'.$colsleft.'" class="LC_left_item">'. |
|
' </td>'; |
|
} elsif ($colsleft == 1) { |
|
$output .= '<td class="LC_left_item"> </td>'; |
|
} |
|
$output .= '</tr></table>'; |
|
} |
|
|
|
sub ltimenu_titles { |
|
return &Apache::lonlocal::texthash( |
|
fullname => 'Full name', |
|
coursetitle => 'Course title', |
|
role => 'Role', |
|
logout => 'Logout', |
|
grades => 'Grades', |
|
); |
|
} |
|
|
|
sub print_menuitems { |
|
my ($position,$cdom,$settings,$itemtext,$rowtotal,$crstype,$noedit) = @_; |
|
unless ((ref($settings) eq 'HASH') && (ref($itemtext) eq 'HASH')) { |
|
return; |
|
} |
|
if ($position eq 'top') { |
|
my (%defaultmenu_options,@defaultmenu_order,$addcollection); |
|
if ($settings->{'menucollections'} ne '') { |
|
foreach my $item (split(/;/,$settings->{'menucollections'})) { |
|
my ($num,$value) = split(/\%/,$item); |
|
if ($num =~ /^\d+$/) { |
|
$defaultmenu_options{$num} = $num; |
|
} |
|
} |
|
@defaultmenu_order = sort { $a <=> $b } keys(%defaultmenu_options); |
|
$addcollection = $defaultmenu_order[-1] + 1; |
|
} else { |
|
$addcollection = 1; |
|
} |
|
$defaultmenu_options{$addcollection} = $addcollection; |
|
my %items = ( |
|
'menudefault' => { |
|
text => '<b>'.&mt($itemtext->{'menudefault'}).'</b><br />'. |
|
&mt("(can be overriden in deep-link context)"), |
|
input => 'selectbox', |
|
options => \%defaultmenu_options, |
|
order => \@defaultmenu_order, |
|
nullval => &mt('Standard (all menus shown)'), |
|
}, |
|
); |
|
return &make_item_rows($cdom,\%items,['menudefault'],$settings,$rowtotal,$crstype,'menuitems',$noedit); |
|
} else { |
|
my %menu; |
|
my $count = 0; |
|
my $next = 1; |
|
my ($datatable,$disabled); |
|
if ($noedit) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
|
|
my ($ordered,$cats) = &menuitems_categories(); |
|
my @order = @{$ordered}; |
|
my %categories = %{$cats}; |
|
my %menutitles = &menuitems_titles(); |
|
my %menufields = &menuitems_fields(); |
|
|
|
if ($settings->{'menucollections'} ne '') { |
|
foreach my $item (split(/;/,$settings->{'menucollections'})) { |
|
my ($num,$value) = split(/\%/,$item); |
|
if ($num =~ /^\d+$/) { |
|
my @entries = split(/\&/,$value); |
|
foreach my $entry (@entries) { |
|
my ($name,$fields) = split(/=/,$entry); |
|
$menu{$num}{$name} = $fields; |
|
} |
|
} |
|
} |
|
if (keys(%menu)) { |
|
my @current = sort { $a <=> $b } keys(%menu); |
|
$next += $current[-1]; |
|
foreach my $num (@current) { |
|
my %checked; |
|
my $on = ' checked="checked"'; |
|
foreach my $key (keys(%{$menu{$num}})) { |
|
if (($key eq 'top') || ($key eq 'inline') || ($key eq 'main')) { |
|
if ($menu{$num}{$key} eq 'y') { |
|
$checked{$key} = $on; |
|
} |
|
} else { |
|
foreach my $field (split(/,/,$menu{$num}{$key})) { |
|
if (exists($menufields{$field})) { |
|
$checked{$field} = $on; |
|
} |
|
} |
|
} |
|
} |
|
if (ref($menu{$num}) eq 'HASH') { |
|
$datatable .= &item_table_row_start('<em class="LC_nav_bar">'.$num.'</em>',$count,'','','','LC_left_item'); |
|
foreach my $category (@order) { |
|
if ((ref($categories{$category}) eq 'ARRAY') && (@{$categories{$category}} > 0)) { |
|
$datatable .= '<fieldset style="vertical-align:top; display:inline-block"><legend>'.$menutitles{$category}.'</legend>'."\n"; |
|
foreach my $field (@{$categories{$category}}) { |
|
$datatable .= '<label><input type="checkbox" name="menucollections_'.$num.'" value="'.$field.'"'.$checked{$field}.$disabled.' />'. |
|
$menufields{$field}.'</label><br />'; |
|
} |
|
$datatable .= '</fieldset>'; |
|
} |
|
} |
|
$datatable .= &item_table_row_end(); |
|
$count ++; |
|
} |
|
} |
|
} |
|
} elsif ($noedit) { |
|
my $text = &mt('No menu collections defined for this course.'); |
|
$datatable .= &item_table_row_start($text,$count); |
|
} |
|
unless ($noedit) { |
|
my $add = '<label><input type="checkbox" name="menucollections_add" id="menucollections_add" value="'.$next.'" '. |
|
'onclick="javascript:toggleAddmenucoll();" />'.&mt('Add').'</label>'; |
|
$datatable .= &item_table_row_start($add,$count,'','','','LC_left_item'); |
|
foreach my $category (@order) { |
|
if ((ref($categories{$category}) eq 'ARRAY') && (@{$categories{$category}} > 0)) { |
|
$datatable .= '<fieldset id="addmenucoll_'.$category.'" style="display:none; vertical-align:top;"><legend>'.$menutitles{$category}.'</legend>'."\n"; |
|
foreach my $field (@{$categories{$category}}) { |
|
$datatable .= '<label><input type="checkbox" class="LC_menucoll_add" name="menucollections_'.$next.'" value="'.$field.'"'.$disabled.' />'. |
|
$menufields{$field}.'</label><br />'; |
|
} |
|
$datatable .= '</fieldset>'; |
|
} |
|
} |
|
$datatable .= &item_table_row_end(); |
|
$count ++; |
|
} |
|
return $datatable; |
|
} |
|
} |
|
|
|
sub menuitems_abbreviations { |
|
my %briefcats = ( |
|
text => 'pt', |
|
links => 'p', |
|
list => 'ps', |
|
inline => 's', |
|
); |
|
return %briefcats; |
|
} |
|
|
|
sub menuitems_categories { |
|
my @order = ('shown','text','links','list','inline'); |
|
my %categories = ( |
|
shown => ['top','inline','main'], |
|
text => ['name','role','crs'], |
|
links => ['personal','menu','comm','roles','help','logout'], |
|
list => ['about','prefs','port','wish','anno','rss'], |
|
inline => ['cont','grades','chat','people','groups','resv','syll','feeds'], |
|
); |
|
return (\@order,\%categories); |
|
} |
|
|
|
sub menuitems_titles { |
|
return &Apache::lonlocal::texthash ( |
|
shown => 'Hierarchy', |
|
text => 'Header text', |
|
links => 'Header links', |
|
list => 'Drop-down list', |
|
inline => 'Inline links', |
|
); |
|
} |
|
|
|
sub menuitems_fields { |
|
return &Apache::lonlocal::texthash ( |
|
top => 'Display header', |
|
inline => 'Display inline menu', |
|
main => 'Access to main menu', |
|
personal => 'Personal', |
|
menu => 'Home', |
|
comm => 'Messages', |
|
roles => 'Roles/Courses', |
|
help => 'Help', |
|
logout => 'Logout', |
|
name => 'Fullname', |
|
crs => 'Course Title', |
|
role => 'Current Role', |
|
about => 'Information', |
|
prefs => 'Preferences', |
|
port => 'Portfolio', |
|
wish => 'Stored Links', |
|
anno => 'Calendar', |
|
rss => 'RSS Feeds', |
|
cont => 'Contents', |
|
grades => 'Grades', |
|
chat => 'Chat', |
|
people => 'People', |
|
groups => 'Groups', |
|
resv => 'Reservations', |
|
syll => 'Syllabus', |
|
feeds => 'Feeds', |
|
); |
|
} |
|
|
|
sub menucollections_display { |
|
my ($collections) = @_; |
|
my %menu; |
|
my ($ordered,$cats) = &menuitems_categories(); |
|
my @order = @{$ordered}; |
|
my %categories = %{$cats}; |
|
my %menutitles = &menuitems_titles(); |
|
my %menufields = &menuitems_fields(); |
|
foreach my $item (split(/;/,$collections)) { |
|
my ($num,$value) = split(/\%/,$item); |
|
if ($num =~ /^\d+$/) { |
|
my @entries = split(/\&/,$value); |
|
foreach my $entry (@entries) { |
|
my ($name,$fields) = split(/=/,$entry); |
|
$menu{$num}{$name} = $fields; |
|
} |
|
} |
|
} |
|
my $output = ''; |
|
if (keys(%menu)) { |
|
my @current = sort { $a <=> $b } keys(%menu); |
|
foreach my $num (@current) { |
|
my %checked; |
|
foreach my $key (keys(%{$menu{$num}})) { |
|
if (($key eq 'top') || ($key eq 'inline') || ($key eq 'main')) { |
|
if ($menu{$num}{$key} eq 'y') { |
|
$checked{$key} = 1; |
|
} |
|
} else { |
|
foreach my $field (split(/,/,$menu{$num}{$key})) { |
|
if (exists($menufields{$field})) { |
|
$checked{$field} = 1; |
|
} |
|
} |
|
} |
|
} |
|
if (ref($menu{$num}) eq 'HASH') { |
|
$output .= '<fieldset><legend>'.&mt('Collection [_1]',$num).'</legend>'; |
|
foreach my $category (@order) { |
|
if ((ref($categories{$category}) eq 'ARRAY') && (@{$categories{$category}} > 0)) { |
|
$output .= '<fieldset style="vertical-align:top; display:inline-block">'. |
|
'<legend>'.$menutitles{$category}.'</legend>'."\n"; |
|
foreach my $field (@{$categories{$category}}) { |
|
if ($checked{$field}) { |
|
$output .= &Apache::lonhtmlcommon::confirm_success($menufields{$field}); |
|
} else { |
|
$output .= &Apache::lonhtmlcommon::confirm_success($menufields{$field},1); |
|
} |
|
$output .= '<br />'; |
|
} |
|
$output .= '</fieldset>'; |
|
} |
|
} |
|
$output .= '</fieldset>'; |
|
} |
|
} |
|
} |
|
return $output; |
|
} |
|
|
sub print_other { |
sub print_other { |
my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_; |
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')) { |
Line 4373 sub get_other_items {
|
Line 5089 sub get_other_items {
|
} |
} |
|
|
sub item_table_row_start { |
sub item_table_row_start { |
my ($text,$count,$add_class,$colspan) = @_; |
my ($text,$count,$add_class,$colspan,$leftclass,$rightclass) = @_; |
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 ''); |
|
if ($leftclass eq '') { |
|
$leftclass = 'LC_left_item'; |
|
} |
|
if ($rightclass eq '') { |
|
$rightclass = 'LC_right_item'; |
|
} |
$output .= '<tr class="'.$css_class.'">'."\n". |
$output .= '<tr class="'.$css_class.'">'."\n". |
'<td class="LC_left_item">'.$text. |
'<td class="'.$leftclass.'">'.$text. |
'</td>'; |
'</td>'; |
if ($colspan) { |
if ($colspan > 1) { |
$output .= '<td class="LC_right_item" colspan="'.$colspan.'">'; |
$output .= '<td class="'.$rightclass.'" colspan="'.$colspan.'">'; |
} else { |
} else { |
$output .= '<td class="LC_right_item">'; |
$output .= '<td class="'.$rightclass.'">'; |
} |
} |
return $output; |
return $output; |
} |
} |
Line 4424 sub yesno_radio {
|
Line 5146 sub yesno_radio {
|
} |
} |
|
|
sub select_from_options { |
sub select_from_options { |
my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange,$noedit) = @_; |
my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange,$noedit,$id) = @_; |
my $output; |
my $output; |
my $disabled; |
my $disabled; |
if ($noedit) { |
if ($noedit) { |
Line 4440 sub select_from_options {
|
Line 5162 sub select_from_options {
|
$output .= ' size="'.$maxsize.'"'; |
$output .= ' size="'.$maxsize.'"'; |
} |
} |
} |
} |
|
if ($id ne '') { |
|
$output .= ' id="'.$id.'"'; |
|
} |
$output .= $disabled.'>'."\n"; |
$output .= $disabled.'>'."\n"; |
if ($nullval ne '') { |
if ($nullval ne '') { |
$output .= '<option value=""'; |
$output .= '<option value=""'; |
Line 4504 sub make_item_rows {
|
Line 5229 sub make_item_rows {
|
$datatable .= &checkforpriv_row($cdom,$item,$settings,$crstype,$noedit); |
$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,$noedit); |
$datatable .= &print_hdrfmt_row($item,$settings,$noedit); |
|
} elsif ($item eq 'lti.lcmenu') { |
|
$datatable .= &lcmenu_checkboxes($cdom,$item,$settings,$crstype,$noedit); |
} elsif ($items->{$item}{input} eq 'dates') { |
} elsif ($items->{$item}{input} eq 'dates') { |
my $disabled; |
my $disabled; |
if ($noedit) { |
if ($noedit) { |
Line 4521 sub make_item_rows {
|
Line 5248 sub make_item_rows {
|
} |
} |
$valueyes = "1"; |
$valueyes = "1"; |
$valueno = "0"; |
$valueno = "0"; |
|
} elsif (($item eq 'lti.topmenu') || ($item eq 'lti.inlinemenu')) { |
|
$valueyes = '1'; |
} |
} |
$datatable .= &yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit); |
$datatable .= &yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit); |
} elsif ($items->{$item}{input} eq 'selectbox') { |
} elsif ($items->{$item}{input} eq 'selectbox') { |
|
my $id; |
|
if ($caller eq 'menuitems') { |
|
$id = $item; |
|
} |
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); |
undef,undef,undef,$noedit,$id); |
} elsif ($items->{$item}{input} eq 'textbox') { |
} elsif ($items->{$item}{input} eq 'textbox') { |
my $disabled; |
my $disabled; |
if ($noedit) { |
if ($noedit) { |