--- loncom/interface/courseprefs.pm 2023/07/05 17:05:40 1.49.2.28.2.15 +++ loncom/interface/courseprefs.pm 2013/09/01 01:12:01 1.60 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.49.2.28.2.15 2023/07/05 17:05:40 raeburn Exp $ +# $Id: courseprefs.pm,v 1.60 2013/09/01 01:12:01 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -52,16 +52,12 @@ This module is used for configuration of =item process_changes() -=item process_linkprot() - =item get_sec_str() =item check_clone() =item store_changes() -=item store_linkprot() - =item update_env() =item display_disallowed() @@ -116,7 +112,7 @@ This module is used for configuration of =item item_table_row_end() -=item yesno_radio() +=item yes_no_radio() =item select_from_options() @@ -141,7 +137,7 @@ whether Domain coordinators who are curr advanced course user .db file for a course are to be hidden (e.g., in syllabus, or from course user lists). -Inputs: $cdom,$item,$settings,$crstype,$noedit +Inputs: $cdom,$item,$settings,$crstype where $cdom is course domain, item is nothideprivileged, $settings is HASH ref of the current values for nothideprivileged, $crstype is course type (Course or Community). @@ -219,16 +215,9 @@ use Apache::lonnet; use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonconfigsettings; -use Apache::lonrelrequtils; use Apache::lonparmset; -use Apache::courseclassifier; use Apache::lonlocal; use LONCAPA qw(:DEFAULT :match); -use Crypt::CBC; -use Time::HiRes qw( sleep ); - -my $registered_cleanup; -my $modified_courses; sub handler { my $r=shift; @@ -239,11 +228,11 @@ sub handler { } my $context = 'course'; my $cid = $env{'request.course.id'}; - my ($cnum,$cdom,$chome) = &get_course($cid); + my ($cnum,$cdom) = &get_course($cid); my $crstype = &Apache::loncommon::course_type(); - my ($parm_permission,$allowed) = &get_permission($cid); + my $parm_permission = &Apache::lonnet::allowed('opa',$cid); my $navmap = Apache::lonnavmaps::navmap->new(); - if ($allowed && $navmap) { + if ($parm_permission && $navmap) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; } else { @@ -268,9 +257,6 @@ sub handler { return HTTP_NOT_ACCEPTABLE; } - $registered_cleanup=0; - @{$modified_courses}=(); - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['phase','actions','origin']); &Apache::lonhtmlcommon::clear_breadcrumbs(); @@ -286,7 +272,6 @@ sub handler { edit => 'Edit Community Settings', gens => 'General community settings', idnu => 'Community ID or number', - unco => 'Unique code', desc => 'Community Description', ownr => 'Community Owner', cown => 'Community Co-owners', @@ -294,7 +279,7 @@ sub handler { excc => 'Exclude from community catalog', clon => 'Users allowed to clone community', rept => 'Replacement titles for standard community roles', - time => 'Time Zone where the community is located', + time => 'Timezone where the community is located', date => 'Locale used for community calendar', coco => 'Community Content', copo => 'Community Policy', @@ -314,16 +299,15 @@ sub handler { edit => 'Edit Course Settings', gens => 'General course settings', idnu => 'Course ID or number', - unco => 'Unique code', desc => 'Course Description', - cred => 'Student credits', + cred => 'Student credits', ownr => 'Course Owner', cown => 'Course Co-owners', catg => 'Categorize course', excc => 'Exclude from course catalog', clon => 'Users allowed to clone course', rept => 'Replacement titles for standard course roles', - time => 'Time Zone in which the course takes place', + time => 'Timezone in which the course takes place', date => 'Locale used for course calendar', coco => 'Course Content', copo => 'Course Policy', @@ -350,91 +334,43 @@ sub handler { $phase = $env{'form.phase'}; } - if (($phase eq 'categorizecourse') && ($parm_permission->{'categorizecourse'})) { + if ($phase eq 'categorizecourse') { &assign_course_categories($r,$crstype); return OK; } - if (($phase eq 'releaseinfo') && ($parm_permission->{'releaseinfo'})) { + if ($phase eq '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; - } - } + &display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype); return OK; } } my %values=&Apache::lonnet::dump('environment',$cdom,$cnum); - my %linkprot=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1); - my %ltienc = &Apache::lonnet::dump('nohist_ltienc',$cdom,$cnum,undef,undef,undef,1); - my %ltitools = &Apache::lonnet::dump('ltitools',$cdom,$cnum,undef,undef,undef,1); - my %ltitoolsenc = &Apache::lonnet::dump('nohist_toolsenc',$cdom,$cnum,undef,undef,undef,1); - foreach my $id (keys(%linkprot)) { - if (ref($linkprot{$id}) eq 'HASH') { - if (ref($ltienc{$id}) eq 'HASH') { - $values{'linkprot'}{$id} = { %{$linkprot{$id}}, %{$ltienc{$id}} }; - } else { - $values{'linkprot'}{$id} = $linkprot{$id}; - } - } - unless ($phase eq 'process') { - if (ref($values{'linkprot'}{$id}) eq 'HASH') { - delete($values{'linkprot'}{$id}{'secret'}); - } - } - } - if ($linkprot{'lock'}) { - delete($linkprot{'lock'}); - } - foreach my $id (keys(%ltitools)) { - if (ref($ltitools{$id}) eq 'HASH') { - if (ref($ltitoolsenc{$id}) eq 'HASH') { - $values{'ltitools'}{$id} = { %{$ltitools{$id}}, %{$ltitoolsenc{$id}} }; - } else { - $values{'ltitools'}{$id} = $ltitools{$id}; - } - } - unless ($phase eq 'process') { - if (ref($values{'ltitools'}{$id}) eq 'HASH') { - delete($values{'ltitools'}{$id}{'secret'}); - } - } - } - if ($ltitools{'lock'}) { - delete($ltitools{'lock'}); - } my @prefs_order = ('courseinfo','localization','feedback','discussion', 'classlists','appearance','grading','printouts', - 'menuitems','ltitools','linkprot','spreadsheet', - 'bridgetasks','other'); + 'spreadsheet','bridgetasks','other'); + my %prefs = ( 'courseinfo' => { text => $lt{'gens'}, help => 'Course_Prefs_General', ordered => ['owner','co-owners','loncaparev','description', - 'clonedfrom','courseid','uniquecode','categories', - 'hidefromcat','syllabus','cloners','url', - 'rolenames'], + 'courseid','categories','hidefromcat', + 'externalsyllabus','cloners','url','rolenames'], itemtext => { 'owner' => $lt{'ownr'}, 'co-owners' => $lt{'cown'}, 'description' => $lt{'desc'}, 'courseid' => $lt{'idnu'}, - 'uniquecode' => $lt{'unco'}, 'categories' => $lt{'catg'}, 'hidefromcat' => $lt{'excc'}, 'cloners' => $lt{'clon'}, - 'syllabus' => 'Syllabus status', + 'externalsyllabus' => 'Syllabus status', 'url' => 'Top Level Map', 'rolenames' => $lt{'rept'}, 'loncaparev' => $lt{'lcrv'}, - 'clonedfrom' => 'Cloned from', }, }, 'localization' => @@ -474,7 +410,7 @@ sub handler { 'plc.users.denied' => 'No Chat room use', allow_limited_html_in_feedback => 'Allow limited HTML in discussion', allow_discussion_post_editing => 'Users can edit/delete own discussion posts', - discussion_post_fonts => 'Discussion post fonts based on likes/unlikes', + discussion_post_fonts => 'Discussion post fonts based on likes/unlikes', }, }, 'classlists' => @@ -508,18 +444,13 @@ sub handler { help => 'Course_Prefs_Display', ordered => ['default_xml_style','pageseparators', 'disable_receipt_display','texengine', - 'tthoptions','uselcmath','usejsme', - 'inline_chem','extresource'], + 'tthoptions'], itemtext => { default_xml_style => 'Default XML style file', pageseparators => 'Visibly Separate Items on Pages', disable_receipt_display => 'Disable display of problem receipts', texengine => 'Force use of a specific math rendering engine', 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', - extresource => 'Display of external resources', }, }, 'grading' => @@ -540,7 +471,7 @@ sub handler { help => 'Course_Prefs_Printouts', ordered => ['problem_stream_switch','suppress_tries', 'default_paper_size','print_header_format', - 'disableexampointprint'], + 'disableexampointprint','canuse_pdfforms'], itemtext => { problem_stream_switch => 'Allow problems to be split over pages', suppress_tries => 'Suppress number of tries in printing', @@ -574,37 +505,6 @@ sub handler { suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio', }, }, - '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', - }, - }, - 'linkprot' => - { - text => 'Link protection', - help => 'Course_Prefs_Linkprotection', - header => [{col1 => 'Item', - col2 => 'Settings', - }], - }, - 'ltitools' => - { - text => 'External tools', - help => 'Course_Prefs_ExternalTools', - header => [{col1 => 'Item', - col2 => 'Settings', - }], - }, 'other' => { text => 'Other settings', help => 'Course_Prefs_Other', @@ -613,62 +513,23 @@ sub handler { }], }, ); - if (($phase eq 'process') && ($parm_permission->{'process'})) { + if ($phase eq 'process') { my @allitems = &get_allitems(%prefs); - my $result = &Apache::lonconfigsettings::make_changes($r,$cdom,$phase,$context, - \@prefs_order,\%prefs,\%values, - $cnum,undef,\@allitems, - 'coursepref',$parm_permission); - if ((ref($result) eq 'HASH') && (keys(%{$result}))) { - $r->rflush(); - &devalidate_remote_courseprefs($cdom,$cnum,$result); - } - } elsif (($phase eq 'display') && ($parm_permission->{'display'})) { - my $noedit; - if (ref($parm_permission) eq 'HASH') { - unless ($parm_permission->{'process'}) { - $noedit = 1; - } - } - my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values,$noedit); + &Apache::lonconfigsettings::make_changes($r,$cdom,$phase,$context, + \@prefs_order,\%prefs,\%values, + $cnum,undef,\@allitems,'coursepref'); + } elsif ($phase eq 'display') { + my $jscript = &get_jscript($cid,$cdom,$phase,$crstype); my @allitems = &get_allitems(%prefs); &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, - \@prefs_order,\%prefs,\%values,$cnum,$jscript,\@allitems,$crstype, - 'coursepref',$parm_permission); + \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype,'coursepref'); } else { &Apache::lonconfigsettings::display_choices($r,$phase,$context, - \@prefs_order,\%prefs, - 'coursepref',$parm_permission); + \@prefs_order,\%prefs,'coursepref'); } 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 { my (%prefs) = @_; my @allitems; @@ -686,15 +547,9 @@ sub get_allitems { } sub print_config_box { - my ($r,$cdom,$cnum,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_; + my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype) = @_; my $ordered = $item->{'ordered'}; my $itemtext = $item->{'itemtext'}; - my $noedit; - if (ref($parm_permission) eq 'HASH') { - unless ($parm_permission->{'process'}) { - $noedit = 1; - } - } my $rowtotal = 0; my $output = ' @@ -707,7 +562,7 @@ sub print_config_box { } $output .= ''."\n". ''; - if (($action eq 'feedback') || ($action eq 'classlists') || ($action eq 'menuitems')) { + if (($action eq 'feedback') || ($action eq 'classlists')) { $output .= '
@@ -729,11 +584,9 @@ sub print_config_box { } $rowtotal ++; if ($action eq 'feedback') { - $output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); + $output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'classlists') { - $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 .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype); } $output .= '
@@ -754,7 +607,7 @@ sub print_config_box { $output .= &mt($item->{'header'}->[1]->{'col2'}).' '; if ($action eq 'classlists') { - $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit). + $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype). ' @@ -793,37 +646,27 @@ sub print_config_box { } $rowtotal ++; if ($action eq 'courseinfo') { - $output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); + $output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); } elsif ($action eq 'localization') { - $output .= &print_localization($cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); + $output .= &print_localization($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'feedback') { - $output .= &print_feedback('bottom',$cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); + $output .= &print_feedback('bottom',$cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'discussion') { - $output .= &print_discussion($cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit); + $output .= &print_discussion($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif (($action eq 'classlists') || ($action eq 'viewableroster')) { - $output .= &print_classlists('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); + $output .= &print_classlists('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype); } elsif ($action eq 'appearance') { - $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); + $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); } elsif ($action eq 'grading') { - $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); + $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); } elsif ($action eq 'printouts') { - $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); + $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); } elsif ($action eq 'spreadsheet') { - $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); + $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); } elsif ($action eq 'bridgetasks') { - $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit); - } elsif ($action eq 'ltitools') { - my $currtools = {}; - if ((ref($settings) eq 'HASH') && (ref($settings->{'ltitools'}))) { - $currtools = $settings->{'ltitools'}; - } - $output .= &print_ltitools($cdom,$cnum,$currtools,\$rowtotal,$crstype,$noedit,'course'); - } elsif ($action eq 'menuitems') { - $output .= &print_menuitems('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); - } elsif ($action eq 'linkprot') { - $output .= &print_linkprotection($cdom,$cnum,$settings,\$rowtotal,$crstype,$noedit,'course'); + $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); } elsif ($action eq 'other') { - $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit); + $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype); } $output .= ' @@ -834,8 +677,8 @@ sub print_config_box { } sub process_changes { - my ($cdom,$cnum,$action,$values,$item,$changes,$allitems,$disallowed,$crstype,$lastactref) = @_; - my (%newvalues,$errors); + my ($cdom,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_; + my %newvalues; if (ref($item) eq 'HASH') { if (ref($changes) eq 'HASH') { my @ordered; @@ -852,18 +695,6 @@ sub process_changes { } } } - } elsif (($action eq 'linkprot') || ($action eq 'ltitools')) { - if (ref($values->{$action}) eq 'HASH') { - foreach my $id (keys(%{$values->{$action}})) { - if ($id =~ /^\d+$/) { - push(@ordered,$id); - } - } - } - @ordered = sort { $a <=> $b } @ordered; - if (($env{'form.'.$action.'_add'}) && ($env{'form.'.$action.'_maxnum'} =~ /^\d+$/)) { - push(@ordered,$env{'form.'.$action.'_maxnum'}); - } } elsif (ref($item->{'ordered'}) eq 'ARRAY') { if ($action eq 'courseinfo') { my ($can_toggle_cat,$can_categorize) = @@ -874,9 +705,7 @@ sub process_changes { next if (($entry eq 'categories') && (!$can_categorize)); next if (($entry eq 'loncaparev') || - ($entry eq 'owner') || - ($entry eq 'clonedfrom') || - ($entry eq 'syllabus')); + ($entry eq 'owner')); push(@ordered,$entry); } } elsif ($action eq 'classlists') { @@ -926,91 +755,6 @@ sub process_changes { $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 ($currdef ne $possdef) { - $changes->{'menudefault'} = $possdef; - } - } elsif ($currdef) { - $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'} = ''; - } - } elsif ($action eq 'linkprot') { - if (ref($values) eq 'HASH') { - $errors = &process_linkprot($cdom,$cnum,$values->{$action},$changes,'course',$lastactref); - } - } elsif ($action eq 'ltitools') { - if (ref($values) eq 'HASH') { - my $switchserver = &check_switchserver($cdom,$cnum,'course','/adm/courseprefs'); - $errors = &process_ltitools('',$cdom,$cnum,$values->{$action},$changes,'course',$lastactref, - 'ok','','ok'); - } } else { foreach my $entry (@ordered) { if ($entry eq 'cloners') { @@ -1020,7 +764,7 @@ sub process_changes { my @clonedoms; if (exists($env{'form.cloners_activate'})) { my $actnum = $env{'form.cloners_activate'}; - if ($actnum ne '-1') { + if ($actnum ne '') { if ($env{'form.cloners_dom_'.$actnum} ne '') { my $clonedom = $env{'form.cloners_dom_'.$actnum}; if (&check_clone($clonedom,$disallowed) eq 'ok') { @@ -1038,7 +782,7 @@ sub process_changes { my $clonedom = $env{'form.cloners_dom_'.$i}; if (&check_clone($clonedom,$disallowed) eq 'ok') { if (!grep(/^\*:\Q$clonedom\E$/,@clonedoms)) { - push(@clonedoms,'*:'.$clonedom); + push (@clonedoms,'*:'.$clonedom); } } } @@ -1051,7 +795,7 @@ sub process_changes { my $clonedom = $env{'form.cloners_newdom'}; if (&check_clone($clonedom,$disallowed) eq 'ok') { my $newdom = '*:'.$env{'form.cloners_newdom'}; - if (@clonedoms) { + if (@clonedoms) { if (!grep(/^\Q$newdom\E$/,@clonedoms)) { $newvalues{$entry} .= ','.$newdom; } @@ -1084,37 +828,6 @@ 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->{'cloners'}) eq 'HASH') { @@ -1140,9 +853,7 @@ sub process_changes { $autocoowner = $domconf{'autoenroll'}{'co-owners'}; } } - if ($autocoowner) { - $newvalues{'co-owners'} = $values->{'internal.co-owners'}; - } else { + unless ($autocoowner) { my @keepcoowners = &Apache::loncommon::get_env_multiple('form.coowners'); my @pendingcoowners = &Apache::loncommon::get_env_multiple('form.pendingcoowners'); my @invitecoowners = &Apache::loncommon::get_env_multiple('form.invitecoowners'); @@ -1166,19 +877,19 @@ sub process_changes { my $udom = $env{'user.domain'}; my $pendingcoowners = $values->{'internal.pendingco-owners'}; my @pendingcoown = split(',',$pendingcoowners); - if ($env{'form.pending_coowner'}) { + if ($env{'form.pending_coowoner'}) { foreach my $item (@pendingcoown) { unless ($item eq $uname.':'.$udom) { push(@newpending,$item); } } @newcoown = @currcoown; - if ($env{'form.pending_coowner'} eq 'accept') { + if ($env{'form.pending_coowoner'} eq 'accept') { unless (grep(/^\Q$uname\E:\Q$udom\E$/,@currcoown)) { push(@newcoown,$uname.':'.$udom); } } - } elsif ($env{'form.remove_coowner'}) { + } elsif ($env{'form.remove_coowoner'}) { foreach my $item (@currcoown) { unless ($item eq $uname.':'.$udom) { push(@newcoown,$item); @@ -1187,8 +898,6 @@ sub process_changes { if ($pendingcoowners ne '') { @newpending = @pendingcoown; } - } else { - @newcoown = @currcoown; } $newvalues{'pendingco-owners'} = join(',',sort(@newpending)); $newvalues{'co-owners'} = join(',',sort(@newcoown)); @@ -1318,14 +1027,14 @@ sub process_changes { my ($classorder,$classtitles) = &discussion_vote_classes(); my $fontchange = 0; foreach my $class (@{$classorder}) { - my $ext_entry = $entry.'_'.$class; + 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; + $unit =~ s/,//g; $weight =~ s/,//g; $style =~ s/,//g; $other =~ s/[^\w;:\s\-\%.]//g; @@ -1333,7 +1042,7 @@ sub process_changes { $newvalues{$ext_entry} = join(',',($size.$unit,$weight,$style,$other)); my $current = $values->{$ext_entry}; if ($values->{$ext_entry} eq '') { - $current = ',,,'; + $current = ',,,'; } if ($newvalues{$ext_entry} ne $current) { $changes->{$ext_entry} = $newvalues{$ext_entry}; @@ -1342,7 +1051,7 @@ sub process_changes { } if ($fontchange) { $changes->{$entry} = 1; - } + } } elsif ($entry eq 'nothideprivileged') { my @curr_nothide; my @new_nothide; @@ -1417,7 +1126,7 @@ sub process_changes { my $newtext = $maxnum-1; $newhdr[$env{'form.printfmthdr_pos_'.$newtext}] = $env{'form.printfmthdr_text_'.$newtext}; $newvalues{$entry} = join('',@newhdr); - } elsif (($entry eq 'languages') || + } elsif (($entry eq 'languages') || ($entry eq 'checkforpriv')) { my $settings; my $total = $env{'form.'.$entry.'_total'}; @@ -1433,7 +1142,7 @@ sub process_changes { } if ($env{'form.'.$entry.'_'.$total} ne '') { my $new = $env{'form.'.$entry.'_'.$total}; - if ($entry eq 'languages') { + if ($entry eq 'languages') { my %langchoices = &get_lang_choices(); if ($langchoices{$new}) { $settings .= $new; @@ -1454,54 +1163,10 @@ sub process_changes { $settings =~ s/,$//; } $newvalues{$entry} = $settings; - } elsif ($entry eq 'extresource') { - if ($env{'form.'.$entry} =~ /^iframe|tab|window$/) { - $newvalues{$entry} = $env{'form.'.$entry}; - if ($env{'form.'.$entry} ne 'iframe') { - if ($env{'form.extwintabreuse'}) { - $newvalues{$entry} .= ':1'; - } else { - $newvalues{$entry} .= ':0'; - } - if ($env{'form.'.$entry} eq 'window') { - foreach my $dim ('width','height') { - $env{'form.extreswin'.$dim} =~ s/^\s+|\s+$//g; - if ($env{'form.extreswin'.$dim} =~ /^\d+$/) { - $newvalues{$entry} .= ':'.$env{'form.extreswin'.$dim}; - } else { - $newvalues{$entry} .= ':'; - } - } - } - } - } - unless (($newvalues{$entry} eq 'iframe') && ($values->{$entry} eq '')) { - if ($newvalues{$entry} ne $values->{$entry}) { - $changes->{$entry} = $newvalues{$entry}; - } - } - } elsif ($entry eq 'timezone') { - if ($env{'form.'.$entry}) { - $newvalues{$entry} = $env{'form.'.$entry}; - if ($newvalues{$entry} ne $values->{$entry}) { - $changes->{$entry} = $newvalues{$entry}; - } - if ($env{'form.tzover'}) { - $newvalues{'tzover'} = $env{'form.tzover'}; - if ($newvalues{'tzover'} ne $values->{'tzover'}) { - $changes->{'tzover'} = $newvalues{'tzover'}; - } - } elsif ($values->{'tzover'}) { - $changes->{'tzover'} = ''; - } - } elsif ($values->{$entry}) { - $changes->{$entry} = ''; - } } else { $newvalues{$entry} = $env{'form.'.$entry}; } - unless (($entry eq 'co-owners') || ($entry eq 'discussion_post_fonts') || - ($entry eq 'extresource') || ($entry eq 'timezone')) { + unless (($entry eq 'co-owners') || ($entry eq 'discussion_post_fonts')) { if ($newvalues{$entry} ne $values->{$entry}) { $changes->{$entry} = $newvalues{$entry}; } @@ -1511,954 +1176,7 @@ sub process_changes { } } } - return $errors; -} - -sub process_linkprot { - my ($cdom,$cnum,$values,$changes,$context,$lastactref) = @_; - my ($dest,$ltiauth,$privnum,$cipher,$errors,%linkprot); - if (ref($values) eq 'HASH') { - foreach my $id (keys(%{$values})) { - if ($id =~ /^\d+$/) { - unless (ref($values->{$id}) eq 'HASH') { - $linkprot{$id} = ''; - } - } - } - } - ($cipher,$privnum) = &get_credentials($cdom,$cnum,'lti',$context); - if ($context eq 'domain') { - $dest = '/adm/domainprefs'; - $ltiauth = 1; - } else { - $dest = '/adm/courseprefs'; - if (exists($env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'})) { - $ltiauth = $env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'}; - } else { - my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); - $ltiauth = $domdefs{'crsltiauth'}; - } - } - my $switchserver = &check_switchserver($cdom,$cnum,$context,$dest); - my (@items,%deletions,%itemids,%haschanges); - if ($env{'form.linkprot_add'}) { - my $name = $env{'form.linkprot_name_add'}; - $name =~ s/(`)/'/g; - my ($newid,$error) = &get_linkprot_id($cdom,$cnum,$name,$context); - if ($newid) { - $itemids{'add'} = $newid; - push(@items,'add'); - $haschanges{$newid} = 1; - } else { - $errors .= ''. - &mt('Failed to acquire unique ID for link protection'). - ''; - } - } - if (ref($values) eq 'HASH') { - my @todelete = &Apache::loncommon::get_env_multiple('form.linkprot_del'); - my $maxnum = $env{'form.linkprot_maxnum'}; - for (my $i=0; $i<$maxnum; $i++) { - my $itemid = $env{'form.linkprot_id_'.$i}; - $itemid =~ s/\D+//g; - if ($itemid) { - if (ref($values->{$itemid}) eq 'HASH') { - push(@items,$i); - $itemids{$i} = $itemid; - if ((@todelete > 0) && (grep(/^$i$/,@todelete))) { - $deletions{$itemid} = $values->{$itemid}->{'name'}; - } - } - } - } - } - foreach my $idx (@items) { - my $itemid = $itemids{$idx}; - next unless ($itemid); - if (exists($deletions{$itemid})) { - $linkprot{$itemid} = $deletions{$itemid}; - $haschanges{$itemid} = 1; - next; - } - my %current; - if (ref($values) eq 'HASH') { - if (ref($values->{$itemid}) eq 'HASH') { - foreach my $key (keys(%{$values->{$itemid}})) { - $current{$key} = $values->{$itemid}->{$key}; - } - } - } - foreach my $inner ('name','lifetime','version') { - my $formitem = 'form.linkprot_'.$inner.'_'.$idx; - $env{$formitem} =~ s/(`)/'/g; - if ($inner eq 'lifetime') { - $env{$formitem} =~ s/[^\d.]//g; - } - unless ($idx eq 'add') { - if ($current{$inner} ne $env{$formitem}) { - $haschanges{$itemid} = 1; - } - } - if ($env{$formitem} ne '') { - $linkprot{$itemid}{$inner} = $env{$formitem}; - } - } - my $urlitem = 'form.linkprot_returnurl_'.$idx; - my $urlparamname = 'form.linkprot_urlparam_'.$idx; - if ($env{$urlitem} == 1) { - $env{$urlparamname} =~ s/(`)/'/g; - } elsif (exists($env{$urlparamname})) { - $env{$urlparamname} = ''; - } - my $passback = 'form.linkprot_passback_'.$idx; - my $passbackparamname = 'form.linkprot_passbackformat_'.$idx; - if ($env{$passback} == 1) { - unless ($env{$passbackparamname} =~ /^1\.(0|1)$/) { - $env{$passbackparamname} = ''; - } - } elsif (exists($env{$passbackparamname})) { - $env{$passbackparamname} = ''; - } - unless ($idx eq 'add') { - if ((!$current{'returnurl'} && ($env{$urlparamname} ne '')) || - ($current{'returnurl'} && ($env{$urlparamname} eq ''))) { - $haschanges{$itemid} = 1; - } - if ((!$current{'passback'} && ($env{$passbackparamname} ne '')) || - ($current{'passback'} && ($env{$passbackparamname} eq ''))) { - $haschanges{$itemid} = 1; - } - } - if ($env{$urlparamname} ne '') { - $linkprot{$itemid}{'returnurl'} = $env{$urlparamname}; - } - if ($env{$passbackparamname} ne '') { - $linkprot{$itemid}{'passback'} = 1; - $linkprot{$itemid}{'passbackformat'} = $env{$passbackparamname}; - } - if ($ltiauth) { - my $reqitem = 'form.linkprot_requser_'.$idx; - $env{$reqitem} =~ s/(`)/'/g; - unless ($idx eq 'add') { - if ((!$current{'requser'} && $env{$reqitem}) || - ($current{'requser'} && !$env{$reqitem})) { - $haschanges{$itemid} = 1; - } - } - if ($env{$reqitem} == 1) { - $linkprot{$itemid}{'requser'} = $env{$reqitem}; - foreach my $inner ('mapuser','notstudent') { - my $formitem = 'form.linkprot_'.$inner.'_'.$idx; - $env{$formitem} =~ s/(`)/'/g; - if ($inner eq 'mapuser') { - if ($env{$formitem} eq 'other') { - my $mapuser = $env{'form.linkprot_customuser_'.$idx}; - $mapuser =~ s/(`)/'/g; - $mapuser =~ s/^\s+|\s+$//g; - if ($mapuser ne '') { - $linkprot{$itemid}{$inner} = $mapuser; - } else { - delete($linkprot{$itemid}{'requser'}); - last; - } - } elsif ($env{$formitem} eq 'sourcedid') { - $linkprot{$itemid}{$inner} = 'lis_person_sourcedid'; - } elsif ($env{$formitem} eq 'email') { - $linkprot{$itemid}{$inner} = 'lis_person_contact_email_primary'; - } - } else { - $linkprot{$itemid}{$inner} = $env{$formitem}; - } - unless ($idx eq 'add') { - if ($current{$inner} ne $linkprot{$itemid}{$inner}) { - $haschanges{$itemid} = 1; - } - } - } - } - } - unless ($switchserver) { - my $keyitem = 'form.linkprot_key_'.$idx; - $env{$keyitem} =~ s/(`)/'/g; - unless ($idx eq 'add') { - if ($current{'key'} ne $env{$keyitem}) { - $haschanges{$itemid} = 1; - } - } - if ($env{$keyitem} ne '') { - $linkprot{$itemid}{'key'} = $env{$keyitem}; - } - my $secretitem = 'form.linkprot_secret_'.$idx; - $env{$secretitem} =~ s/(`)/'/g; - if ($current{'usable'}) { - if ($env{'form.linkprot_changesecret_'.$idx}) { - if ($env{$secretitem} ne '') { - if ($privnum && $cipher) { - $linkprot{$itemid}{'secret'} = $cipher->encrypt_hex($env{$secretitem}); - $linkprot{$itemid}{'cipher'} = $privnum; - } else { - $linkprot{$itemid}{'secret'} = $env{$secretitem}; - } - $haschanges{$itemid} = 1; - } - } else { - $linkprot{$itemid}{'secret'} = $current{'secret'}; - $linkprot{$itemid}{'cipher'} = $current{'cipher'}; - } - } elsif ($env{$secretitem} ne '') { - if ($privnum && $cipher) { - $linkprot{$itemid}{'secret'} = $cipher->encrypt_hex($env{$secretitem}); - $linkprot{$itemid}{'cipher'} = $privnum; - } else { - $linkprot{$itemid}{'secret'} = $env{$secretitem}; - } - $haschanges{$itemid} = 1; - } - } - } - if (keys(%haschanges)) { - foreach my $entry (keys(%haschanges)) { - $changes->{$entry} = $linkprot{$entry}; - } - if (ref($lastactref) eq 'HASH') { - $lastactref->{'courselti'} = 1; - } - } - return $errors; -} - -sub get_linkprot_id { - my ($cdom,$cnum,$name,$context) = @_; - # get lock on lti db in course or linkprot db in domain - my $lockhash = { - lock => $env{'user.name'}. - ':'.$env{'user.domain'}, - }; - my $tries = 0; - my $gotlock; - if ($context eq 'domain') { - $gotlock = &Apache::lonnet::newput_dom('linkprot',$lockhash,$cdom); - } else { - $gotlock = &Apache::lonnet::newput('lti',$lockhash,$cdom,$cnum); - } - my ($id,$error); - while (($gotlock ne 'ok') && ($tries<10)) { - $tries ++; - sleep (0.1); - if ($context eq 'domain') { - $gotlock = &Apache::lonnet::newput_dom('linkprot',$lockhash,$cdom); - } else { - $gotlock = &Apache::lonnet::newput('lti',$lockhash,$cdom,$cnum); - } - } - if ($gotlock eq 'ok') { - my %currids; - if ($context eq 'domain') { - %currids = &Apache::lonnet::dump_dom('linkprot',$cdom); - } else { - %currids = &Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1); - } - if ($currids{'lock'}) { - delete($currids{'lock'}); - if (keys(%currids)) { - my @curr = sort { $a <=> $b } keys(%currids); - if ($curr[-1] =~ /^\d+$/) { - $id = 1 + $curr[-1]; - } else { - $id = 1; - } - } else { - $id = 1; - } - if ($id) { - if ($context eq 'domain') { - unless (&Apache::lonnet::newput_dom('linkprot',{ $id => $name },$cdom) eq 'ok') { - $error = 'nostore'; - } - } else { - unless (&Apache::lonnet::newput('lti',{ $id => $name },$cdom,$cnum) eq 'ok') { - $error = 'nostore'; - } - } - } else { - $error = 'nonumber'; - } - } - my $dellockoutcome; - if ($context eq 'domain') { - $dellockoutcome = &Apache::lonnet::del_dom('linkprot',['lock'],$cdom); - } else { - $dellockoutcome = &Apache::lonnet::del('lti',['lock'],$cdom,$cnum); - } - } else { - $error = 'nolock'; - } - return ($id,$error); -} - -sub get_credentials { - my ($cdom,$cnum,$type,$context) = @_; - my ($cipher,$privnum,$home); - my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); - my @ids=&Apache::lonnet::current_machine_ids(); - if ($context eq 'domain') { - $home = &Apache::lonnet::domain($cdom,'primary'); - } else { - $home = &Apache::lonnet::homeserver($cnum,$cdom); - } - my ($hostskey,$domkey,$crskey); - if ($type eq 'ltitools') { - $hostskey = 'toolprivhosts'; - $domkey = 'toolenc_dom'; - $crskey = 'toolenc_crs'; - } else { - $hostskey = 'ltiprivhosts'; - $domkey = 'linkprotenc_dom'; - $crskey = 'linkprotenc_crs'; - } - if ((($context eq 'domain') && ($domdefs{$domkey})) || - (($context eq 'course') && ($domdefs{$crskey}))) { - unless (($home eq 'no_host') || ($home eq '')) { - if (grep(/^\Q$home\E$/,@ids)) { - if (ref($domdefs{$hostskey}) eq 'ARRAY') { - if (grep(/^\Q$home\E$/,@{$domdefs{$hostskey}})) { - my %privhash = &Apache::lonnet::restore_dom($type,'private',$cdom,$home,1); - my $privkey = $privhash{'key'}; - $privnum = $privhash{'version'}; - if (($privnum) && ($privkey ne '')) { - $cipher = Crypt::CBC->new({'key' => $privkey, - 'cipher' => 'DES'}); - } - } - } - } - } - } - return ($cipher,$privnum); -} - -sub process_ltitools { - my ($r,$cdom,$cnum,$values,$changes,$context,$lastactref,$configuserok,$lonhost, - $author_ok,$confname) = @_; - my (%currconfig,$newid,@allpos,%changes,%ltitools,$errors); - - my (%posslti,%possfield); - my @courseroles = ('cc','in','ta','ep','st'); - my @ltiroles = qw(Instructor ContentDeveloper TeachingAssistant Learner); - map { $posslti{$_} = 1; } @ltiroles; - my @allfields = ('fullname','firstname','lastname','email','user','roles'); - map { $possfield{$_} = 1; } @allfields; - - my ($dest,$privnum,$cipher); - - ($cipher,$privnum) = &get_credentials($cdom,$cnum,'ltitools',$context); - if ($context eq 'domain') { - $dest = '/adm/domainprefs'; - } else { - $dest = '/adm/courseprefs'; - } - my $switchserver = &check_switchserver($cdom,$cnum,$context,$dest); - - my (@allpos,@items,%deletions,%itemids,%haschanges); - if ($env{'form.ltitools_add'}) { - my $title = $env{'form.ltitools_add_title'}; - $title =~ s/(`)/'/g; - my ($newid,$error) = &get_ltitools_id($context,$cdom,$cnum,$title); - if ($newid) { - my $position = $env{'form.ltitools_add_pos'}; - $position =~ s/\D+//g; - if ($position ne '') { - $allpos[$position] = $newid; - } - $haschanges{$newid} = 1; - foreach my $item ('title','url','lifetime') { - $env{'form.ltitools_add_'.$item} =~ s/(`)/'/g; - if ($item eq 'lifetime') { - $env{'form.ltitools_add_'.$item} =~ s/[^\d.]//g; - } - if ($env{'form.ltitools_add_'.$item}) { - $ltitools{$newid}{$item} = $env{'form.ltitools_add_'.$item}; - } - } - if ($env{'form.ltitools_add_version'} eq 'LTI-1p0') { - $ltitools{$newid}{'version'} = $env{'form.ltitools_add_version'}; - } - if ($env{'form.ltitools_add_msgtype'} eq 'basic-lti-launch-request') { - $ltitools{$newid}{'msgtype'} = $env{'form.ltitools_add_msgtype'}; - } - if ($env{'form.ltitools_add_sigmethod'} eq 'HMAC-SHA256') { - $ltitools{$newid}{'sigmethod'} = $env{'form.ltitools_add_sigmethod'}; - } else { - $ltitools{$newid}{'sigmethod'} = 'HMAC-SHA1'; - } - foreach my $item ('width','height','linktext','explanation') { - $env{'form.ltitools_add_'.$item} =~ s/^\s+//; - $env{'form.ltitools_add_'.$item} =~ s/\s+$//; - if (($item eq 'width') || ($item eq 'height')) { - if ($env{'form.ltitools_add_'.$item} =~ /^\d+$/) { - $ltitools{$newid}{'display'}{$item} = $env{'form.ltitools_add_'.$item}; - } - } else { - if ($env{'form.ltitools_add_'.$item} ne '') { - $ltitools{$newid}{'display'}{$item} = $env{'form.ltitools_add_'.$item}; - } - } - } - if ($env{'form.ltitools_add_target'} eq 'window') { - $ltitools{$newid}{'display'}{'target'} = $env{'form.ltitools_add_target'}; - } elsif ($env{'form.ltitools_add_target'} eq 'tab') { - $ltitools{$newid}{'display'}{'target'} = $env{'form.ltitools_add_target'}; - } else { - $ltitools{$newid}{'display'}{'target'} = 'iframe'; - } - foreach my $item ('passback','roster') { - if ($env{'form.ltitools_'.$item.'_add'}) { - $ltitools{$newid}{$item} = 1; - if ($env{'form.ltitools_'.$item.'valid_add'} ne '') { - my $lifetime = $env{'form.ltitools_'.$item.'valid_add'}; - $lifetime =~ s/^\s+|\s+$//g; - if ($lifetime =~ /^\d+\.?\d*$/) { - $ltitools{$newid}{$item.'valid'} = $lifetime; - } - } - } - } - if ($env{'form.ltitools_add_image.filename'} ne '') { - my ($imageurl,$error) = - &process_ltitools_image($r,$context,$cdom,$cnum,$confname,'ltitools_add_image', - $newid,$configuserok,$lonhost,$author_ok); - if ($imageurl) { - $ltitools{$newid}{'image'} = $imageurl; - } - if ($error) { - &Apache::lonnet::logthis($error); - $errors .= '
  • '.$error.'
  • '; - } - } - my @fields = &Apache::loncommon::get_env_multiple('form.ltitools_add_fields'); - foreach my $field (@fields) { - if ($possfield{$field}) { - if ($field eq 'roles') { - foreach my $role (@courseroles) { - my $choice = $env{'form.ltitools_add_roles_'.$role}; - if (($choice ne '') && ($posslti{$choice})) { - $ltitools{$newid}{'roles'}{$role} = $choice; - if ($role eq 'cc') { - $ltitools{$newid}{'roles'}{'co'} = $choice; - } - } - } - } else { - $ltitools{$newid}{'fields'}{$field} = 1; - } - } - } - if (ref($ltitools{$newid}{'fields'}) eq 'HASH') { - if ($ltitools{$newid}{'fields'}{'user'}) { - if ($env{'form.ltitools_add_userincdom'}) { - $ltitools{$newid}{'incdom'} = 1; - } - } - } - my @courseconfig = &Apache::loncommon::get_env_multiple('form.ltitools_add_courseconfig'); - foreach my $item (@courseconfig) { - $ltitools{$newid}{'crsconf'}{$item} = 1; - } - if ($env{'form.ltitools_add_custom'}) { - my $name = $env{'form.ltitools_add_custom_name'}; - my $value = $env{'form.ltitools_add_custom_value'}; - $value =~ s/(`)/'/g; - $name =~ s/(`)/'/g; - $ltitools{$newid}{'custom'}{$name} = $value; - } - unless ($switchserver) { - my $keyitem = 'form.ltitools_add_key'; - $env{$keyitem} =~ s/(`)/'/g; - if ($env{$keyitem} ne '') { - $ltitools{$newid}{'key'} = $env{$keyitem}; - } - my $secretitem = 'form.ltitools_secret_add'; - $env{$secretitem} =~ s/(`)/'/g; - if ($env{$secretitem} ne '') { - if ($privnum && $cipher) { - $ltitools{$newid}{'secret'} = $cipher->encrypt_hex($env{$secretitem}); - $ltitools{$newid}{'cipher'} = $privnum; - } else { - $ltitools{$newid}{'secret'} = $env{$secretitem}; - } - } - } - } else { - $errors .= '
  • '. - &mt('Failed to acquire unique ID for new external tool'). - '
  • '; - } - } - if (ref($values) eq 'HASH') { - my %deletions; - my @todelete = &Apache::loncommon::get_env_multiple('form.ltitools_del'); - if (@todelete) { - map { $deletions{$_} = 1; } @todelete; - } - my %customadds; - my @newcustom = &Apache::loncommon::get_env_multiple('form.ltitools_customadd'); - if (@newcustom) { - map { $customadds{$_} = 1; } @newcustom; - } - my %imgdeletions; - my @todeleteimages = &Apache::loncommon::get_env_multiple('form.ltitools_image_del'); - if (@todeleteimages) { - map { $imgdeletions{$_} = 1; } @todeleteimages; - } - my $maxnum = $env{'form.ltitools_maxnum'}; - for (my $i=0; $i<=$maxnum; $i++) { - my $itemid = $env{'form.ltitools_id_'.$i}; - $itemid =~ s/\D+//g; - if (ref($values->{$itemid}) eq 'HASH') { - if ($deletions{$itemid}) { - if ($values->{$itemid}{'image'}) { - #FIXME need to obsolete item in RES space - } - $haschanges{$itemid} = $values->{$itemid}{'title'}; - next; - } else { - my $newpos = $env{'form.ltitools_'.$itemid}; - $newpos =~ s/\D+//g; - foreach my $item ('title','url','lifetime') { - $ltitools{$itemid}{$item} = $env{'form.ltitools_'.$item.'_'.$i}; - if ($values->{$itemid}{$item} ne $ltitools{$itemid}{$item}) { - $haschanges{$itemid} = 1; - } - } - if ($env{'form.ltitools_version_'.$i} eq 'LTI-1p0') { - $ltitools{$itemid}{'version'} = $env{'form.ltitools_version_'.$i}; - } - if ($env{'form.ltitools_msgtype_'.$i} eq 'basic-lti-launch-request') { - $ltitools{$itemid}{'msgtype'} = $env{'form.ltitools_msgtype_'.$i}; - } - if ($env{'form.ltitools_sigmethod_'.$i} eq 'HMAC-SHA256') { - $ltitools{$itemid}{'sigmethod'} = $env{'form.ltitools_sigmethod_'.$i}; - } else { - $ltitools{$itemid}{'sigmethod'} = 'HMAC-SHA1'; - } - if ($values->{$itemid}{'sigmethod'} eq '') { - if ($ltitools{$itemid}{'sigmethod'} ne 'HMAC-SHA1') { - $haschanges{$itemid} = 1; - } - } elsif ($values->{$itemid}{'sigmethod'} ne $ltitools{$itemid}{'sigmethod'}) { - $haschanges{$itemid} = 1; - } - foreach my $size ('width','height') { - $env{'form.ltitools_'.$size.'_'.$i} =~ s/^\s+//; - $env{'form.ltitools_'.$size.'_'.$i} =~ s/\s+$//; - if ($env{'form.ltitools_'.$size.'_'.$i} =~ /^\d+$/) { - $ltitools{$itemid}{'display'}{$size} = $env{'form.ltitools_'.$size.'_'.$i}; - if (ref($values->{$itemid}{'display'}) eq 'HASH') { - if ($values->{$itemid}{'display'}{$size} ne $ltitools{$itemid}{'display'}{$size}) { - $haschanges{$itemid} = 1; - } - } else { - $haschanges{$itemid} = 1; - } - } elsif (ref($values->{$itemid}{'display'}) eq 'HASH') { - if ($values->{$itemid}{'display'}{$size} ne '') { - $haschanges{$itemid} = 1; - } - } - } - foreach my $item ('linktext','explanation') { - $env{'form.ltitools_'.$item.'_'.$i} =~ s/^\s+//; - $env{'form.ltitools_'.$item.'_'.$i} =~ s/\s+$//; - if ($env{'form.ltitools_'.$item.'_'.$i} ne '') { - $ltitools{$itemid}{'display'}{$item} = $env{'form.ltitools_'.$item.'_'.$i}; - if (ref($values->{$itemid}{'display'}) eq 'HASH') { - if ($values->{$itemid}{'display'}{$item} ne $ltitools{$itemid}{'display'}{$item}) { - $haschanges{$itemid} = 1; - } - } else { - $haschanges{$itemid} = 1; - } - } elsif (ref($values->{$itemid}{'display'}) eq 'HASH') { - if ($values->{$itemid}{'display'}{$item} ne '') { - $haschanges{$itemid} = 1; - } - } - } - if ($env{'form.ltitools_target_'.$i} eq 'window') { - $ltitools{$itemid}{'display'}{'target'} = $env{'form.ltitools_target_'.$i}; - } elsif ($env{'form.ltitools_target_'.$i} eq 'tab') { - $ltitools{$itemid}{'display'}{'target'} = $env{'form.ltitools_target_'.$i}; - } else { - $ltitools{$itemid}{'display'}{'target'} = 'iframe'; - } - if (ref($values->{$itemid}{'display'}) eq 'HASH') { - if ($values->{$itemid}{'display'}{'target'} ne $ltitools{$itemid}{'display'}{'target'}) { - $haschanges{$itemid} = 1; - } - } else { - $haschanges{$itemid} = 1; - } - foreach my $extra ('passback','roster') { - if ($env{'form.ltitools_'.$extra.'_'.$i}) { - $ltitools{$itemid}{$extra} = 1; - if ($env{'form.ltitools_'.$extra.'valid_'.$i} ne '') { - my $lifetime = $env{'form.ltitools_'.$extra.'valid_'.$i}; - $lifetime =~ s/^\s+|\s+$//g; - if ($lifetime =~ /^\d+\.?\d*$/) { - $ltitools{$itemid}{$extra.'valid'} = $lifetime; - } - } - } - if ($values->{$itemid}{$extra} ne $ltitools{$itemid}{$extra}) { - $haschanges{$itemid} = 1; - } - if ($values->{$itemid}{$extra.'valid'} ne $ltitools{$itemid}{$extra.'valid'}) { - $haschanges{$itemid} = 1; - } - } - my @courseconfig = &Apache::loncommon::get_env_multiple('form.ltitools_courseconfig_'.$i); - foreach my $item ('label','title','target','linktext','explanation','append') { - if (grep(/^\Q$item\E$/,@courseconfig)) { - $ltitools{$itemid}{'crsconf'}{$item} = 1; - if (ref($values->{$itemid}{'crsconf'}) eq 'HASH') { - if ($values->{$itemid}{'crsconf'}{$item} ne $ltitools{$itemid}{'crsconf'}{$item}) { - $haschanges{$itemid} = 1; - } - } else { - $haschanges{$itemid} = 1; - } - } - } - my @fields = &Apache::loncommon::get_env_multiple('form.ltitools_fields_'.$i); - foreach my $field (@fields) { - if ($possfield{$field}) { - if ($field eq 'roles') { - foreach my $role (@courseroles) { - my $choice = $env{'form.ltitools_roles_'.$role.'_'.$i}; - if (($choice ne '') && ($posslti{$choice})) { - $ltitools{$itemid}{'roles'}{$role} = $choice; - if ($role eq 'cc') { - $ltitools{$itemid}{'roles'}{'co'} = $choice; - } - } - if (ref($values->{$itemid}{'roles'}) eq 'HASH') { - if ($values->{$itemid}{'roles'}{$role} ne $ltitools{$itemid}{'roles'}{$role}) { - $haschanges{$itemid} = 1; - } - } elsif ($ltitools{$itemid}{'roles'}{$role}) { - $haschanges{$itemid} = 1; - } - } - } else { - $ltitools{$itemid}{'fields'}{$field} = 1; - if (ref($values->{$itemid}{'fields'}) eq 'HASH') { - if ($values->{$itemid}{'fields'}{$field} ne $ltitools{$itemid}{'fields'}{$field}) { - $haschanges{$itemid} = 1; - } - } else { - $haschanges{$itemid} = 1; - } - } - } - } - if (ref($ltitools{$itemid}{'fields'}) eq 'HASH') { - if ($ltitools{$itemid}{'fields'}{'user'}) { - if ($env{'form.ltitools_userincdom_'.$i}) { - $ltitools{$itemid}{'incdom'} = 1; - } - if ($values->{$itemid}{'incdom'} ne $ltitools{$itemid}{'incdom'}) { - $haschanges{$itemid} = 1; - } - } - } - $allpos[$newpos] = $itemid; - } - if ($imgdeletions{$itemid}) { - $haschanges{$itemid} = 1; - if ($context eq 'course') { - my $currimgurl = $values->{$itemid}{'image'}; - if ($currimgurl =~ m{^(\Q/uploaded/$cdom/$cnum/toollogo/$itemid\E)/([^/]+)$}) { - my ($path,$imagefile) = ($1,$2); - if ($imagefile =~ /^tn\-(.+)$/) { - my $origimg = $1; - &Apache::lonnet::removeuploadedurl("$path/$origimg"); - } - &Apache::lonnet::removeuploadedurl($currimgurl); - } - } - #FIXME need to obsolete item in RES space - } elsif ($env{'form.ltitools_image_'.$i.'.filename'}) { - my $currimgurl = $values->{$itemid}{'image'}; - my ($imgurl,$error) = &process_ltitools_image($r,$context,$cdom,$cnum,$confname,'ltitools_image_'.$i, - $itemid,$configuserok,$lonhost,$author_ok,$currimgurl); - if ($imgurl) { - $ltitools{$itemid}{'image'} = $imgurl; - $haschanges{$itemid} = 1; - } - if ($error) { - &Apache::lonnet::logthis($error); - $errors .= '
  • '.$error.'
  • '; - } - } elsif ($values->{$itemid}{'image'}) { - $ltitools{$itemid}{'image'} = $values->{$itemid}{'image'}; - } - if ($customadds{$i}) { - my $name = $env{'form.ltitools_custom_name_'.$i}; - $name =~ s/(`)/'/g; - $name =~ s/^\s+//; - $name =~ s/\s+$//; - my $value = $env{'form.ltitools_custom_value_'.$i}; - $value =~ s/(`)/'/g; - $value =~ s/^\s+//; - $value =~ s/\s+$//; - if ($name ne '') { - $ltitools{$itemid}{'custom'}{$name} = $value; - $haschanges{$itemid} = 1; - } - } - my %customdels; - my @customdeletions = &Apache::loncommon::get_env_multiple('form.ltitools_customdel_'.$i); - if (@customdeletions) { - $haschanges{$itemid} = 1; - } - map { $customdels{$_} = 1; } @customdeletions; - if (ref($values->{$itemid}{'custom'}) eq 'HASH') { - foreach my $key (keys(%{$values->{$itemid}{'custom'}})) { - unless ($customdels{$key}) { - if ($env{'form.ltitools_customval_'.$key.'_'.$i} ne '') { - $ltitools{$itemid}{'custom'}{$key} = $env{'form.ltitools_customval_'.$key.'_'.$i}; - } - if ($values->{$itemid}{'custom'}{$key} ne $env{'form.ltitools_customval_'.$key.'_'.$i}) { - $haschanges{$itemid} = 1; - } - } - } - } - unless ($switchserver) { - my $keyitem = 'form.ltitools_key_'.$i; - $env{$keyitem} =~ s/(`)/'/g; - if ($values->{$itemid}{'key'} ne $env{$keyitem}) { - $haschanges{$itemid} = 1; - } - if ($env{$keyitem} ne '') { - $ltitools{$itemid}{'key'} = $env{$keyitem}; - } - my $secretitem = 'form.ltitools_secret_'.$i; - $env{$secretitem} =~ s/(`)/'/g; - if ($values->{$itemid}{'usable'}) { - if ($env{'form.ltitools_changesecret_'.$i}) { - if ($env{$secretitem} ne '') { - if ($privnum && $cipher) { - $ltitools{$itemid}{'secret'} = $cipher->encrypt_hex($env{$secretitem}); - $ltitools{$itemid}{'cipher'} = $privnum; - } else { - $ltitools{$itemid}{'secret'} = $env{$secretitem}; - } - $haschanges{$itemid} = 1; - } - } else { - $ltitools{$itemid}{'secret'} = $values->{$itemid}{'secret'}; - $ltitools{$itemid}{'cipher'} = $values->{$itemid}{'cipher'}; - } - } elsif ($env{$secretitem} ne '') { - if ($privnum && $cipher) { - $ltitools{$itemid}{'secret'} = $cipher->encrypt_hex($env{$secretitem}); - $ltitools{$itemid}{'cipher'} = $privnum; - } else { - $ltitools{$itemid}{'secret'} = $env{$secretitem}; - } - $haschanges{$itemid} = 1; - } - } - unless ($haschanges{$itemid}) { - foreach my $key (keys(%{$values->{$itemid}})) { - if (ref($values->{$itemid}{$key}) eq 'HASH') { - if (ref($ltitools{$itemid}{$key}) eq 'HASH') { - foreach my $innerkey (keys(%{$values->{$itemid}{$key}})) { - unless (exists($ltitools{$itemid}{$key}{$innerkey})) { - $haschanges{$itemid} = 1; - last; - } - } - } elsif (keys(%{$values->{$itemid}{$key}}) > 0) { - $haschanges{$itemid} = 1; - } - } - last if ($haschanges{$itemid}); - } - } - } - } - } - if (@allpos > 0) { - my $idx = 0; - foreach my $itemid (@allpos) { - if ($itemid ne '') { - $ltitools{$itemid}{'order'} = $idx; - if (ref($values) eq 'HASH') { - if (ref($values->{$itemid}) eq 'HASH') { - if ($values->{$itemid}{'order'} ne $idx) { - $haschanges{$itemid} = 1; - } - } - } - $idx ++; - } - } - } - if (keys(%haschanges)) { - foreach my $entry (keys(%haschanges)) { - $changes->{$entry} = $ltitools{$entry}; - } - if (ref($lastactref) eq 'HASH') { - $lastactref->{'courseltitools'} = 1; - } - } - return $errors; -} - -sub get_ltitools_id { - my ($context,$cdom,$cnum,$title) = @_; - my ($lockhash,$tries,$gotlock,$id,$error); - - # get lock on ltitools db - $lockhash = { - lock => $env{'user.name'}. - ':'.$env{'user.domain'}, - }; - $tries = 0; - if ($context eq 'domain') { - $gotlock = &Apache::lonnet::newput_dom('ltitools',$lockhash,$cdom); - } else { - $gotlock = &Apache::lonnet::newput('ltitools',$lockhash,$cdom,$cnum); - } - while (($gotlock ne 'ok') && ($tries<10)) { - $tries ++; - sleep (0.1); - if ($context eq 'domain') { - $gotlock = &Apache::lonnet::newput_dom('ltitools',$lockhash,$cdom); - } else { - $gotlock = &Apache::lonnet::newput('ltitools',$lockhash,$cdom,$cnum); - } - } - if ($gotlock eq 'ok') { - my %currids; - if ($context eq 'domain') { - %currids = &Apache::lonnet::dump_dom('ltitools',$cdom); - } else { - %currids = &Apache::lonnet::dump('ltitools',$cdom,$cnum); - } - if ($currids{'lock'}) { - delete($currids{'lock'}); - if (keys(%currids)) { - my @curr = sort { $a <=> $b } keys(%currids); - if ($curr[-1] =~ /^\d+$/) { - $id = 1 + $curr[-1]; - } - } else { - $id = 1; - } - if ($id) { - if ($context eq 'domain') { - unless (&Apache::lonnet::newput_dom('ltitools',{ $id => $title },$cdom) eq 'ok') { - $error = 'nostore'; - } - } else { - unless (&Apache::lonnet::newput('ltitools',{ $id => $title },$cdom,$cnum) eq 'ok') { - $error = 'nostore'; - } - } - } else { - $error = 'nonumber'; - } - } - my $dellockoutcome; - if ($context eq 'domain') { - $dellockoutcome = &Apache::lonnet::del_dom('ltitools',['lock'],$cdom); - } else { - $dellockoutcome = &Apache::lonnet::del('ltitools',['lock'],$cdom,$cnum); - } - } else { - $error = 'nolock'; - } - return ($id,$error); -} - -sub process_ltitools_image { - my ($r,$context,$dom,$cnum,$confname,$caller,$itemid,$configuserok,$switch,$author_ok,$currimg) = @_; - my $filename = $env{'form.'.$caller.'.filename'}; - my ($error,$url); - my ($width,$height) = (21,21); - if ($configuserok eq 'ok') { - if ($switch) { - $error = &mt('Upload of Tool Provider (LTI) icon is not permitted to this server: [_1]', - $switch); - } elsif ($author_ok eq 'ok') { - my ($result,$imageurl,$madethumb); - if ($context eq 'domain') { - ($result,$imageurl,$madethumb) = - &Apache::lonconfigsettings::publishlogo($r,'upload',$caller,$dom,$confname, - "ltitools/$itemid/icon",$width,$height); - } else { - ($result,$imageurl,$madethumb) = &processlogo($dom,$cnum,$caller,$currimg,$itemid,$width,$height); - } - if ($result eq 'ok') { - if ($madethumb) { - my ($path,$imagefile) = ($imageurl =~ m{^(.+)/([^/]+)$}); - my $imagethumb = "$path/tn-".$imagefile; - $url = $imagethumb; - } else { - $url = $imageurl; - } - } else { - if ($context eq 'domain') { - $error = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",$filename,$result); - } else { - $error = &mt("Upload of [_1] failed because an error occurred. Error was: [_2].",$filename,$result); - } - } - } else { - $error = &mt("Upload of [_1] failed because an author role could not be assigned to a Domain Configuration user ([_2]) in domain: [_3]. Error was: [_4].",$filename,$confname,$dom,$author_ok); - } - } else { - $error = &mt("Upload of [_1] failed because a Domain Configuration user ([_2]) could not be created in domain: [_3]. Error was: [_4].",$filename,$confname,$dom,$configuserok); - } - return ($url,$error); -} - -sub processlogo { - my ($dom,$cnum,$caller,$currimg,$itemid,$width,$height) = @_; - my ($result,$imageurl,$madethumb); - if ($env{"form.$caller.filename"} ne '') { - unless ($caller eq 'ltitools_add_image') { - if ($currimg =~ m{^(\Q/uploaded/$dom/$cnum/toollogo/$itemid\E)/([^/]+)$}) { - my ($path,$imagefile) = ($1,$2); - if ($imagefile =~ /^tn\-(.+)$/) { - my $origimg = $1; - &Apache::lonnet::removeuploadedurl("$path/$origimg"); - } - &Apache::lonnet::removeuploadedurl($currimg); - } - } - $imageurl = &Apache::lonnet::userfileupload($caller,'toollogo',"toollogo/$itemid", - '','','',$cnum,$dom,$width,$height); - if ($imageurl =~ m{^(\Q/uploaded/$dom/$cnum/toollogo/$itemid\E)/([^/]+)$}) { - my ($path,$imagefile) = ($1,$2); - $result = 'ok'; - my $thumburl = "$path/tn-".$imagefile; - my ($rtncode,$info); - my $res = &Apache::lonnet::getuploaded('HEAD',$thumburl,$dom,$cnum,\$info,\$rtncode); - if ($res eq 'ok') { - $madethumb = 1; - } - } elsif ($imageurl eq '/adm/notfound.html') { - undef($imageurl); - $result = 'store failed'; - } elsif ($imageurl =~ /^error: (.+)$/) { - $result = $1; - } - } - return ($result,$imageurl,$madethumb); + return; } sub get_sec_str { @@ -2503,15 +1221,8 @@ sub check_clone { sub store_changes { my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_; my ($chome,$output); - my (%storehash,@delkeys,@need_env_update,@oldcloner,%oldlinkprot,%oldltitools); + my (%storehash,@delkeys,@need_env_update,@oldcloner); if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) { - if (ref($values->{'linkprot'}) eq 'HASH') { - %oldlinkprot = %{$values->{'linkprot'}}; - } - delete($values->{'linkprot'}); - if (ref($values->{'ltitools'}) eq 'HASH') { - %oldltitools = %{$values->{'ltitools'}}; - } %storehash = %{$values}; } else { if ($crstype eq 'Community') { @@ -2521,22 +1232,6 @@ sub store_changes { } return $output; } - my ($numchanges,$skipstore); - if (ref($changes) eq 'HASH') { - $numchanges = scalar(keys(%{$changes})); - if (($numchanges == 1) && (exists($changes->{'linkprot'}))) { - $skipstore = 1; - } elsif (($numchanges == 1) && (exists($changes->{'ltitools'}))) { - $skipstore = 1; - } elsif (!$numchanges) { - if ($crstype eq 'Community') { - $output = &mt('No changes made to community settings.'); - } else { - $output = &mt('No changes made to course settings.'); - } - return $output; - } - } my %yesno = ( hidefromcat => '1', problem_stream_switch => '1', @@ -2562,10 +1257,6 @@ sub store_changes { "'$storehash{$key}'")).''; } } - } elsif ($item eq 'linkprot') { - $output .= &store_linkprot($cdom,$cnum,'course',$changes->{$item},\%oldlinkprot); - } elsif ($item eq 'ltitools') { - $output .= &store_ltitools($cdom,$cnum,'course',$changes->{$item},\%oldltitools); } else { if (ref($prefs->{$item}->{'ordered'}) eq 'ARRAY') { my @settings = @{$prefs->{$item}->{'ordered'}}; @@ -2597,52 +1288,12 @@ sub store_changes { if ($msg ne '') { $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt($displayname)).'
  • '; } - } elsif ($key eq 'timezone') { - next unless ((exists($changes->{$item}{$key})) || (exists($changes->{$item}{'tzover'}))); - my ($displayname,$text); - $text = $prefs->{$item}->{'itemtext'}{$key}; - my $displayval; - if (exists($changes->{$item}{$key})) { - $displayname = &mt($text); - $storehash{$key} = $changes->{$item}{$key}; - if ($changes->{$item}{$key} ne '') { - $displayval = ''.$changes->{$item}{$key}.''; - } else { - push(@delkeys,$key); - if (exists($values->{'tzover'})) { - push(@delkeys,'tzover'); - } - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', - ''.$displayname.'')).'
  • '; - } - } - unless (grep(/^\Q$key\E$/,@delkeys)) { - if (exists($changes->{$item}{'tzover'})) { - $storehash{'tzover'} = $changes->{$item}{'tzover'}; - my $tzovertext; - if ($changes->{$item}{'tzover'} ne '') { - $tzovertext = &mt('Course Time Zone overrides individual user preference'); - } else { - push(@delkeys,'tzover'); - $tzovertext = &mt('Course Time Zone does not override individual user preference'); - } - if ($displayval eq '') { - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success($tzovertext).'
  • '; - } else { - $displayval .= '
    '.(' 'x5).$tzovertext; - } - } - if ($displayval ne '') { - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', - ''.$displayname.'',$displayval)).'
  • '; - } - } } else { next if (!exists($changes->{$item}{$key})); my ($displayname,$text); $text = $prefs->{$item}->{'itemtext'}{$key}; my $displayval; - unless (($key eq 'co-owners') || ($key eq 'discussion_post_fonts') || ($key eq 'extresource')) { + unless (($key eq 'co-owners') || ($key eq 'discussion_post_fonts')) { $displayval = $changes->{$item}{$key}; } if ($item eq 'feedback') { @@ -2722,16 +1373,6 @@ sub store_changes { } } $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 { $displayname = &mt($text); } @@ -2744,44 +1385,12 @@ sub store_changes { $displayval = &Apache::lonlocal::locallocaltime($displayval); } elsif ($key eq 'categories') { $displayval = $env{'form.categories_display'}; - } elsif (($key eq 'canuse_pdfforms') || ($key eq 'usejsme') || - ($key eq 'uselcmath') || ($key eq 'inline_chem')) { + } elsif ($key eq 'canuse_pdfforms') { if ($changes->{$item}{$key} eq '1') { $displayval = &mt('Yes'); } elsif ($changes->{$item}{$key} eq '0') { $displayval = &mt('No'); } - } elsif ($key eq 'extresource') { - if ($changes->{$item}{$key} eq 'iframe') { - $displayval = &mt('In iframe'); - } else { - my ($selected,$reuse,$width,$height) = split(/:/,$changes->{$item}{$key}); - if ($selected eq 'tab') { - if ($reuse) { - $displayval = &mt('[_1]In tab[_2],[_3] and tab re-used for different external resources in course', - "'","'",'
    '); - } else { - $displayval = &mt('[_1]In tab[_2],[_3] with new tab for each external resource in course', - "'","'",'
    '); - } - } elsif ($selected eq 'window') { - if ($reuse) { - $displayval = &mt('[_1]In pop-up window[_2],[_3] and window re-used for different external resources in course', - "'","'",'
    '); - } else { - $displayval = &mt('[_1]In pop-up window[_2],[_3] with new window for each external resource in course', - "'","'",'
    '); - } - if (($width ne '') || ($height ne '')) { - if ($width ne '') { - $displayval .= '
    '.&mt('Window width: [_1]px',$width); - } - if ($height ne '') { - $displayval .= '
    '.&mt('Window height: [_1]px',$height); - } - } - } - } } if ($key eq 'co-owners') { if (ref($changes->{$item}{$key}) eq 'HASH') { @@ -2808,12 +1417,12 @@ sub store_changes { } } unless (&Apache::lonnet::is_course_owner($cdom,$cnum)) { - if ($env{'form.pending_coowner'} eq 'accept') { + if ($env{'form.pending_coowoner'} eq 'accept') { $displayval = &mt('on'); - } elsif ($env{'form.pending_coowner'} eq 'decline') { + } elsif ($env{'form.pending_coowoner'} eq 'decline') { $displayval = ''; $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Invitation to be co-owner declined')).'
  • '; - } elsif ($env{'form.remove_coowner'}) { + } elsif ($env{'form.remove_coowoner'}) { $displayval = &mt('off'); } if ($displayval) { @@ -2826,25 +1435,12 @@ sub store_changes { } } elsif ($changes->{$item}{$key} eq '') { push(@delkeys,$key); - if ($item eq 'menuitems') { - if ($key eq 'menudefault') { - $output .= '
  • '.&mt("Default collection of menu items set to: 'Standard' (all menus shown)").'
  • '; - } elsif ($key eq 'menucollections') { - $output .= '
  • '.&mt('Specific collections of menus no longer available').'
  • '; - } - } else { - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', - ''.$displayname.'')).'
  • '; - } - } elsif ($key eq 'menucollections') { - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Numbered menu collections:')).'
    '. - $displayval.'
  • '; + $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', + ''.$displayname.'')).'
  • '; } else { - unless (($key eq 'extresource') && ($changes->{$item}{$key} ne 'iframe')) { - $displayval = "'$displayval'"; - } $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', - ''.$displayname.'',$displayval)); + ''.$displayname.'', + "'$displayval'")); if ($key eq 'url') { my $bkuptime=time; $output .= (' 'x2).&mt('(Previous URL backed up)').': '. @@ -2896,9 +1492,6 @@ sub store_changes { } } } - if ($skipstore) { - return $output; - } if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') { if (ref($changes) eq 'HASH') { if (ref($changes->{'courseinfo'}) eq 'HASH') { @@ -2941,378 +1534,6 @@ sub store_changes { return $output; } -sub store_linkprot { - my ($cdom,$cnum,$context,$changes,$oldlinkprot) = @_; - my ($ltiauth,$home,$lti_save_error,$output,$error,%ltienc,@deletions); - if ($context eq 'domain') { - $ltiauth = 1; - $home = &Apache::lonnet::domain($cdom,'primary'); - } else { - $home = &Apache::lonnet::homeserver($cnum,$cdom); - if (exists($env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'})) { - $ltiauth = $env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'}; - } else { - my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); - $ltiauth = $domdefs{'crsltiauth'}; - } - } - if (ref($changes) eq 'HASH') { - foreach my $id (sort { $a <=> $b } keys(%{$changes})) { - if (ref($changes->{$id}) eq 'HASH') { - if (exists($changes->{$id}->{'key'})) { - $ltienc{$id}{'key'} = $changes->{$id}->{'key'}; - delete($changes->{$id}->{'key'}); - } - if (exists($changes->{$id}->{'secret'})) { - $ltienc{$id}{'secret'} = $changes->{$id}->{'secret'}; - delete($changes->{$id}->{'secret'}); - } elsif (ref($oldlinkprot->{$id}) eq 'HASH') { - if (exists($oldlinkprot->{$id}{'usable'})) { - $changes->{$id}->{'usable'} = 1; - } - if (exists($oldlinkprot->{$id}{'cipher'})) { - $changes->{$id}->{'cipher'} = $oldlinkprot->{$id}{'cipher'}; - } - } - } - } - } - my @ids=&Apache::lonnet::current_machine_ids(); - if (keys(%ltienc) > 0) { - if ($context eq 'domain') { - foreach my $id (keys(%ltienc)) { - if (exists($ltienc{$id}{'secret'})) { - $changes->{$id}->{'usable'} = 1; - } - } - } else { - unless (($home eq 'no_host') || ($home eq '')) { - my $allowed; - foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } - if ($allowed) { - if (&Apache::lonnet::put('nohist_ltienc',\%ltienc,$cdom,$cnum,1) eq 'ok') { - foreach my $id (keys(%ltienc)) { - if (exists($ltienc{$id}{'secret'})) { - $changes->{$id}->{'usable'} = 1; - } - } - } else { - $lti_save_error = 1; - } - } - } - } - } - unless ($lti_save_error) { - if ($context eq 'course') { - if (&Apache::lonnet::put('lti',$changes,$cdom,$cnum,1) eq 'ok') { - my $hashid=$cdom.'_'.$cnum; - &Apache::lonnet::devalidate_cache_new('courselti',$hashid); - unless (($home eq 'no_host') || ($home eq '')) { - if (grep(/^\Q$home\E$/,@ids)) { - &Apache::lonnet::devalidate_cache_new('courseltienc',$hashid); - } - } - } else { - $lti_save_error = 1; - } - } - unless ($lti_save_error) { - foreach my $id (sort { $a <=> $b } %{$changes}) { - if (ref($changes->{$id}) eq 'HASH') { - my %values = %{$changes->{$id}}; - my %desc = &linkprot_names(); - my $display; - foreach my $title ('name','lifetime','version','key','secret','returnurl','passbackformat') { - if (($title eq 'key') || ($title eq 'secret')) { - if (ref($ltienc{$id}) eq 'HASH') { - if (exists($ltienc{$id}{$title})) { - if ($title eq 'secret') { - my $length = length($ltienc{$id}{$title}); - $display .= $desc{$title}.': ['.&mt('not shown').'], '; - } else { - $display .= $desc{$title}.': '.$ltienc{$id}{$title}.', '; - } - } - } - } elsif ($title eq 'version') { - if ($values{$title} eq 'LTI-1p0') { - $display .= $desc{$title}.': 1.1, '; - } - } elsif ($title eq 'returnurl') { - if ($values{$title}) { - $display .= &mt('Return URL parameter').': '.$values{$title}.', '; - } - } elsif ($title eq 'passbackformat') { - if ($values{$title} eq '1.0') { - $display .= &mt('Can return grades to Launcher with Outcomes Service 1.0 format').', '; - } elsif ($values{$title} eq '1.1') { - $display .= &mt('Can return grades to Launcher with Outcomes Service 1.1 format').', '; - } - } else { - $display .= $desc{$title}.': '.$values{$title}.', '; - } - } - if ($ltiauth) { - if (($values{'requser'}) && ($values{'mapuser'} ne '')) { - if ($values{'mapuser'} eq 'lis_person_contact_email_primary') { - $display .= &mt('Source of username: Email address [_1]', - '(lis_person_contact_email_primary)').', '; - } elsif ($values{'mapuser'} eq 'lis_person_sourcedid') { - $display .= &mt('Source of username: User ID [_1]', - '(lis_person_sourcedid)').', '; - } else { - $display .= &mt('Source of username: [_1]',$values{'mapuser'}).', '; - } - if ($values{'notstudent'} eq 'auth') { - $display .= &mt('Display LON-CAPA login page if no match').', '; - } elsif ($values{'notstudent'} eq 'reject') { - $display .= &mt('Discontinue launch if no match').', '; - } - } - } - $display =~ s/, $//; - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',''.$id.'', - "'$display'")).'
  • '; - } elsif (ref($oldlinkprot->{$id}) eq 'HASH') { - my $oldname = $oldlinkprot->{$id}{'name'}; - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',''."$id ($oldname)".'')).'
  • '; - } - } - } else { - $lti_save_error = 1; - } - } - unless ($lti_save_error) { - foreach my $id (sort { $a <=> $b } keys(%{$changes})) { - unless (ref($changes->{$id}) eq 'HASH') { - push(@deletions,$id); - } - } - if (@deletions) { - if ($context eq 'course') { - &Apache::lonnet::del('nohist_ltienc',\@deletions,$cdom,$cnum); - } - } - } - if ($lti_save_error) { - $output .= '
  • '. - ''. - &mt('An error occurred when saving changes to link protection settings, which remain unchanged.'). - ''. - '
  • '; - } - return $output; -} - -sub store_ltitools { - my ($cdom,$cnum,$context,$changes,$oldltitools) = @_; - my ($home,$ltitools_save_error,$output,$error,%toolsenc,@deletions); - my %lt = <itools_names(); - my @courseroles = ('cc','in','ta','ep','st'); - my @allfields = ('fullname','firstname','lastname','email','user','roles'); - if ($context eq 'domain') { - $home = &Apache::lonnet::domain($cdom,'primary'); - } else { - $home = &Apache::lonnet::homeserver($cnum,$cdom); - } - if (ref($changes) eq 'HASH') { - foreach my $id (sort { $a <=> $b } keys(%{$changes})) { - if (ref($changes->{$id}) eq 'HASH') { - if (exists($changes->{$id}->{'key'})) { - $toolsenc{$id}{'key'} = $changes->{$id}->{'key'}; - delete($changes->{$id}->{'key'}); - } - if (exists($changes->{$id}->{'secret'})) { - $toolsenc{$id}{'secret'} = $changes->{$id}->{'secret'}; - delete($changes->{$id}->{'secret'}); - } elsif (ref($oldltitools->{$id}) eq 'HASH') { - if (exists($oldltitools->{$id}{'usable'})) { - $changes->{$id}->{'usable'} = 1; - } - if (exists($oldltitools->{$id}{'cipher'})) { - $changes->{$id}->{'cipher'} = $oldltitools->{$id}{'cipher'}; - } - } - } - } - } - my @ids=&Apache::lonnet::current_machine_ids(); - if (keys(%toolsenc) > 0) { - unless (($home eq 'no_host') || ($home eq '')) { - my $allowed; - foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } - if ($allowed) { - if (($context eq 'domain') || - (($context eq 'course') && - (&Apache::lonnet::put('nohist_toolsenc',\%toolsenc,$cdom,$cnum,1) eq 'ok'))) { - foreach my $id (keys(%toolsenc)) { - if (exists($toolsenc{$id}{'secret'})) { - $changes->{$id}->{'usable'} = 1; - } - } - } else { - $ltitools_save_error = 1; - } - } - } - } - unless ($ltitools_save_error) { - if ($context eq 'course') { - if (&Apache::lonnet::put('ltitools',$changes,$cdom,$cnum,1) eq 'ok') { - my $hashid=$cdom.'_'.$cnum; - &Apache::lonnet::devalidate_cache_new('courseltitools',$hashid); - unless (($home eq 'no_host') || ($home eq '')) { - if (grep(/^\Q$home\E$/,@ids)) { - &Apache::lonnet::devalidate_cache_new('crsltitoolsenc',$hashid); - } - } - } else { - $ltitools_save_error = 1; - } - } - unless ($ltitools_save_error) { - my %bynum; - foreach my $itemid (sort(keys(%{$changes}))) { - my $position = $changes->{$itemid}{'order'}; - $bynum{$position} = $itemid; - } - foreach my $pos (sort { $a <=> $b } keys(%bynum)) { - my $itemid = $bynum{$pos}; - if (ref($changes->{$itemid}) ne 'HASH') { - $output .= '
  • '.&mt('Deleted: [_1]',$changes->{$itemid}).'
  • '; - } else { - $output .= '
  • '.$changes->{$itemid}{'title'}.''; - if ($changes->{$itemid}{'image'}) { - $output .= ' '. - ''.&mt('Tool Provider icon').''; - } - $output .= '
  • '; - } - } - } - } - return $output; -} - sub update_env { my ($cnum,$cdom,$chome,$need_env_update,$storehash) = @_; my $count = 0; @@ -3436,103 +1657,16 @@ sub get_course { } my $cdom=$env{'course.'.$courseid.'.domain'}; my $cnum=$env{'course.'.$courseid.'.num'}; - my $chome=$env{'course.'.$courseid.'.home'}; - return ($cnum,$cdom,$chome); + return ($cnum,$cdom); } sub get_jscript { - my ($cid,$cdom,$phase,$crstype,$settings,$noedit) = @_; + my ($cid,$cdom,$phase,$crstype) = @_; my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); - my ($jscript,$categorize_js,$loncaparev_js,$instcode_js,$extresource_js,$localization_js); + my ($jscript,$categorize_js,$loncaparev_js); my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); my $cloners_js = &cloners_javascript($phase); - my $currltitools; - if (ref($settings) eq 'HASH') { - $currltitools = $settings->{'ltitools'}; - } - my $ltitools_js = &Apache::lonconfigsettings::ltitools_javascript($currltitools); - 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 .= <{'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 = <'."\n". - ''."\n".$stubrowse_js."\n".$ltitools_js."\n"; + $cloners_js."\n". + $syllabus_js."\n".'//]]>'."\n". + ''."\n".$stubrowse_js."\n"; return $jscript; } @@ -3737,7 +1745,7 @@ function update_cloners(caller,num) { if (document.$formname.cloners_activate[i].value == '0') { document.$formname.cloners_activate[i].checked = false; } - if (document.$formname.cloners_activate[i].value == '-1') { + if (document.$formname.cloners_activate[i].value == '') { document.$formname.cloners_activate[i].checked = true; } } @@ -3788,112 +1796,30 @@ function getIndexByName(item) { ENDSCRIPT } -sub linkprot_javascript { - return <<"ENDSCRIPT"; -function toggleLinkProtExtra(form,item,extra,valon,styleon,num) { - if (document.getElementById('linkprot_'+extra+'_'+num)) { - var extraid = document.getElementById('linkprot_'+extra+'_'+num); - var itemname = form.elements['linkprot_'+item+'_'+num]; - if (itemname) { - if (itemname.length > 0) { - var setvis; - for (var i=0; i{'categories'},$crstype,$disabled)."\n"; + $settings->{'categories'},$crstype)."\n"; } } if (ref($domconf{'autoenroll'}) eq 'HASH') { $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.', - '"'.$codestr.'"').'
    '; - } - } - } - } elsif ($canclone eq 'domain') { - $clonedefaults = &mt('Default is for any course requester in [_1] domain to be able to clone.', - ''.$cdom.'').'
    '; - $currcanclone = 'domain'; - } - if ($clonedefaults) { - if ($settings->{'cloners'} ne '') { - $clonedefaults .= '
    '.&mt('Default does [_1]not[_2] currently apply because values have been set in the course.','',''); - } else { - $clonedefaults .= &mt('Default is disregarded if [_1]any[_2] values are set here in the course.','',''); - } - $clonedefaults = '

    '.$clonedefaults; - } - } if (!defined($categoriesform)) { $categoriesform = &mt('No categories defined in this domain.'); } + my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; @@ -3903,20 +1829,14 @@ sub print_courseinfo { } else { $replace = &mt('To replace the standard title for a course role, enter a title, otherwise leave blank'); } - my ($editmap,$editsyllabus); - unless ($noedit) { - $editmap = (' 'x2). - '". - &mt('Select Map').'
    '. - &mt('Modification may make assessment data inaccessible!'). - ''; - $editsyllabus = &mt('[_1]Edit[_2]','', - ''); - } my %items = ( 'url' => { - text => ''.&mt($itemtext->{'url'}).''.$editmap, + text => ''.&mt($itemtext->{'url'}).''.(' 'x2). + '". + &mt('Select Map').'
    '. + &mt('Modification may make assessment data inaccessible!'). + '', input => 'textbox', size => '55', advanced => 1 @@ -3932,22 +1852,15 @@ sub print_courseinfo { 'co-owners' => { text => ''.&mt($itemtext->{'co-owners'}).'', }, - 'clonedfrom' => { - text => ''.&mt($itemtext->{'clonedfrom'}).'', - }, 'courseid' => { text => ''.&mt($itemtext->{'courseid'}).'
    '.'('. &mt('internal, optional').')', input => 'textbox', size => '25', }, - 'uniquecode' => { - text => ''.&mt($itemtext->{'uniquecode'}).'', - }, 'cloners' => { text => ''.&mt($itemtext->{'cloners'}).'
    '. - &mt('Owner and Coordinators included automatically'). - $clonedefaults, + &mt('Owner and Coordinators included automatically'), input => 'textbox', size => '40' }, @@ -3958,10 +1871,11 @@ sub print_courseinfo { size => '20', advanced => 1 }, - 'syllabus' => { - text => ''.&mt($itemtext->{'syllabus'}).'
    '. + 'externalsyllabus' => { + text => ''.&mt($itemtext->{'externalsyllabus'}).'
    '. &mt('(Syllabus type in use)').(' ' x2). - $editsyllabus, + &mt('[_1]Edit[_2]','', + ''), }, 'hidefromcat' => { text => ''.&mt($itemtext->{'hidefromcat'}).'
    '. @@ -3989,11 +1903,9 @@ sub print_courseinfo { next if (!$can_toggle_cat); } elsif ($item eq 'categories') { 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; + $colspan = 2; } $count ++; if (exists $items{$item}{advanced} && $items{$item}{advanced} == 1) { @@ -4002,7 +1914,7 @@ sub print_courseinfo { $datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); } if ($items{$item}{input} eq 'radio') { - $datatable .= &yesno_radio($item,$settings,undef,undef,undef,$noedit); + $datatable .= &yesno_radio($item,$settings); } elsif ($item eq 'cloners') { my $includeempty = 1; my $num = 0; @@ -4016,14 +1928,13 @@ sub print_courseinfo { $datatable .= ' checked="checked" '; } $datatable .= 'onchange="javascript:update_cloners('. - "'cloners_all'".');"'.$disabled.' />'.&mt('Yes').''. - (' 'x2).''. + (' 'x2).'{$item} ne '*') { $datatable .= ' checked="checked" '; } $datatable .= ' onchange="javascript:update_cloners('. - "'cloners_all'".');"'.$disabled.' />'.&mt('No').''. + "'cloners_all'".');"/>'.&mt('No').''. &Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table(). ''. &Apache::loncommon::end_data_table_row(); $num ++; @@ -4081,8 +1986,7 @@ sub print_courseinfo { ''.&Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table(). @@ -4094,40 +1998,9 @@ sub print_courseinfo { &mt('Specific users').' ('. &mt('user:domain,user:domain').')
    '. &Apache::lonhtmlcommon::textbox($item,$cloners_str, - $items{$item}{'size'},$disabled). + $items{$item}{'size'}). ''.&Apache::loncommon::end_data_table_row(). &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 .= '
    '.&mt('Or'). @@ -4031,13 +1942,7 @@ sub print_courseinfo { &Apache::loncommon::start_data_table(); my @cloners; if ($settings->{$item} eq '') { - unless ($noedit) { - my $default; - if ($currcanclone eq 'domain') { - $default = '0'; - } - $datatable .= &new_cloners_dom_row($cdom,'0',$default); - } + $datatable .= &new_cloners_dom_row($cdom,'0'); } elsif ($settings->{$item} ne '*') { my @entries = split(/,/,$settings->{$item}); if (@entries > 0) { @@ -4058,7 +1963,7 @@ sub print_courseinfo { '
    '. '
    '. $add_domtitle.'
    '. &Apache::loncommon::select_dom_form('','cloners_newdom', - $includeempty,undef,undef, - undef,undef,$noedit). + $includeempty). ''. '
    '.&mt('And'). - '
    '. - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_row(). - ''. - &mt('Cloning by official course(s) based on course category').(' 'x2). - ''. - (' '). - ''. - &Apache::courseclassifier::build_instcode_selectors($numtitles, - $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order, - $showncodes,'LC_cloners_instcodes','LC_cloners_instcode',$noedit). - ''.&Apache::loncommon::end_data_table_row(). - &Apache::loncommon::end_data_table(); - } } elsif ($item eq 'rolenames') { $datatable .= ''. &Apache::loncommon::start_data_table(); @@ -4145,17 +2018,12 @@ sub print_courseinfo { ''. &Apache::lonhtmlcommon::textbox('rolenames_'.$role, $settings->{$role.'.plaintext'}, - $items{$item}{size},$disabled).''. + $items{$item}{size}).''. &Apache::loncommon::end_data_table_row(); } $datatable .= &Apache::loncommon::end_data_table().''; } elsif ($item eq 'categories') { - my $launcher; - if ($noedit) { - $launcher = $disabled; - } else { - $launcher = 'onfocus="this.blur();javascript:catsbrowser();"'; - } + my $launcher = 'onfocus="this.blur();javascript:catsbrowser();"'; $datatable .= ''. &Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item}, $items{$item}{size},$launcher); @@ -4170,21 +2038,6 @@ sub print_courseinfo { $owner = &mt('None specified'); } $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') { my $coowners = $env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}; my @currcoown; @@ -4195,16 +2048,16 @@ sub print_courseinfo { if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { $datatable .= &show_autocoowners(@currcoown); } else { - $datatable .= &coowner_invitations($cnum,$cdom,\@currcoown,$noedit); + $datatable .= &coowner_invitations($cnum,$cdom,@currcoown); } } else { if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { $datatable .= &show_autocoowners(@currcoown); } else { - $datatable .= &manage_coownership($cnum,$cdom,\@currcoown,$noedit); + $datatable .= &manage_coownership($cnum,$cdom,@currcoown); } } - } elsif ($item eq 'syllabus') { + } elsif ($item eq 'externalsyllabus') { 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'}; @@ -4228,12 +2081,12 @@ sub print_courseinfo { } elsif ($uploaded) { $datatable .= &mt('Uploaded file'); } else { - $datatable .= &mt('Standard template'); + $datatable .= &mt('Standard template'); } $datatable .= (' ' x 2). &mt('[_1]View[_2]', '', - ''); + ''); } elsif ($item eq 'loncaparev') { my $loncaparev = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; my $showreqd; @@ -4245,7 +2098,7 @@ sub print_courseinfo { } $datatable .= $showreqd; } else { - $datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size},$disabled); + $datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size}); } $datatable .= &item_table_row_end(); } @@ -4254,24 +2107,19 @@ sub print_courseinfo { } sub new_cloners_dom_row { - my ($newdom,$num,$default) = @_; - my ($output,$checkedon,$checkedoff); + my ($newdom,$num) = @_; + my $output; if ($newdom ne '') { - if ($num eq $default) { - $checkedon = 'checked="checked" '; - } else { - $checkedoff = 'checked="checked" '; - } $output .= &Apache::loncommon::start_data_table_row(). ''. &mt('Any user in domain:').' '.$newdom.''. (' 'x2).''.(' 'x2). ' @@ -4409,7 +2256,6 @@ ENDSCRIPT 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'}; @@ -4419,22 +2265,22 @@ sub display_loncaparev_constraints { 'section/group' => 'section/group', 'user' => 'user', ); - &Apache::lonrelrequtils::init_global_hashes(); - if (defined($Apache::lonrelrequtils::checkcrstypes{$crstype})) { - ($reqdmajor,$reqdminor) = split(/\./,$Apache::lonrelrequtils::checkcrstypes{$crstype}); + my (%checkparms,%checkresponsetypes,%checkcrstypes,%anonsurvey,%randomizetry); + &Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes, + \%checkcrstypes,\%anonsurvey,\%randomizetry); + if (defined($checkcrstypes{$crstype})) { $output .= '

    '.&mt('Course type: [_1] requires [_2] or newer',$crstype, - $Apache::lonrelrequtils::checkcrstypes{$crstype}).'

    '; + $checkcrstypes{$crstype}).''; } my (%fromparam,%rowspan,%bymap,%byresource,@scopeorder,%toshow,%allmaps, - %byresponsetype,%bysubmission,%fromblocks); + %byresponsetype,%bysubmission); @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)) { + foreach my $item (keys(%checkparms)) { if ($key =~ /(\Q$item\E)$/) { - if (ref($Apache::lonrelrequtils::checkparms{$item}) eq 'ARRAY') { + if (ref($checkparms{$item}) eq 'ARRAY') { my $value = $resourcedata->{$key}; if ($item eq 'examcode') { if (&Apache::lonnet::validCODE($value)) { @@ -4442,22 +2288,9 @@ sub display_loncaparev_constraints { } 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}})) { + if (grep(/^\Q$value\E$/,@{$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); @@ -4549,9 +2382,6 @@ sub display_loncaparev_constraints { ''.&mt('Extent').''.&mt('Setting').''. &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(). ''.$rev.''; my $newrow; @@ -4582,75 +2412,6 @@ sub display_loncaparev_constraints { } } - 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 .= '

    '.&mt('Requirements from exam blocking').'

    '. - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(). - ''.&mt('Release').''.&mt('Setting').''. - ''.&mt('Event(s)').''. - &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(). - ''.$rev.''.$lt{$type}.''; - foreach my $event (sort(@{$fromblocks{$type}{$rev}})) { - $output .= $event.'
    '; - } - $output =~ s{\Q
    \E$}{}; - $output .= ''.&Apache::loncommon::end_data_table_row(); - } - } - } - $output .= &Apache::loncommon::end_data_table().'
    '; - } - } - if (defined($navmap)) { my %anonsubms=&Apache::lonnet::dump('nohist_anonsurveys',$cdom,$cnum); my $rev_anonsurv=$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'}; @@ -4660,7 +2421,7 @@ sub display_loncaparev_constraints { 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(); @@ -4677,13 +2438,6 @@ sub display_loncaparev_constraints { 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; @@ -4696,27 +2450,12 @@ sub display_loncaparev_constraints { 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); + if (exists($checkresponsetypes{$key})) { + push(@{$byresponsetype{$symb}{$checkresponsetypes{$key}}},$key); $allmaps{$enclosing_map} = 1; } } @@ -4734,9 +2473,9 @@ sub display_loncaparev_constraints { } foreach my $map (keys(%allmaps)) { my $mapres = $navmap->getResourceByUrl($map); + my $mapsymb = $mapres->symb(); + $toshow{$mapsymb} = 1; if (ref($mapres)) { - my $mapsymb = $mapres->symb(); - $toshow{$mapsymb} = 1; my $pcslist = $mapres->map_hierarchy(); if ($pcslist ne '') { foreach my $pc (split(/,/,$pcslist)) { @@ -4777,10 +2516,6 @@ sub display_loncaparev_constraints { '

    '); } $r->print(&Apache::loncommon::end_page()); - my ($currmajor,$currminor) = split(/\./,$loncaparev); - if (($currmajor != $reqdmajor) || ($currminor != $reqdminor)) { - return 1; - } return; } @@ -4922,19 +2657,13 @@ sub show_contents_view { } $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(''.$rev.''); if (ref($bymap->{$url}{$rev}) eq 'HASH') { $r->print(''); @@ -4956,7 +2685,6 @@ sub releases_by_map { $r->print('
    '); } $r->print(''); - $newrow = 1; } } else { $r->print(' '); @@ -4982,24 +2710,6 @@ sub get_param_description { 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 { my (@currcoown) = @_; my $output = ''.&mt('Co-ownership is set automatically when a Course Coordinator role[_1] is assigned to official course personnel (from institutional data).','
    ').'
    '; @@ -5013,20 +2723,13 @@ sub show_autocoowners { } sub coowner_invitations { - my ($cnum,$cdom,$currcoownref,$noedit) = @_; - my ($output,@pendingcoown,@othercoords,@currcoown); + my ($cnum,$cdom,@currcoown) = @_; + my ($output,@pendingcoown,@othercoords); my $pendingcoowners = $env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; if ($pendingcoowners) { @pendingcoown = split(',',$pendingcoowners); } - if (ref($currcoownref) eq 'ARRAY') { - @currcoown = @{$currcoownref}; - } - my $disabled; - if ($noedit) { - $disabled = ' disabled="disabled"'; - } my $ccrole = 'cc'; my %ccroles = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,[$ccrole]); foreach my $key (sort(keys(%ccroles))) { @@ -5044,7 +2747,7 @@ sub coowner_invitations { ''.&mt('Current co-owners').''; foreach my $person (@currcoown) { my ($co_uname,$co_dom) = split(':',$person); - $output .= ''.(' 'x2).' '; + $output .= ''.(' 'x2).' '; } $output .= ''. &Apache::loncommon::end_data_table_row(); @@ -5054,7 +2757,7 @@ sub coowner_invitations { ''.&mt('Invited as co-owners [_1](agreement pending)','
    ').'
    '; foreach my $person (@pendingcoown) { my ($co_uname,$co_dom) = split(':',$person); - $output .= ''.(' 'x2).' '; + $output .= ''.(' 'x2).' '; } $output .= ''. &Apache::loncommon::end_data_table_row(); @@ -5064,7 +2767,7 @@ sub coowner_invitations { ''.&mt('Invite other Coordinators [_1]to become co-owners','
    ').'
    '; foreach my $person (@othercoords) { my ($co_uname,$co_dom) = split(':',$person); - $output .= ''.(' 'x2).' '; + $output .= ''.(' 'x2).' '; } $output .= ''. &Apache::loncommon::end_data_table_row(); @@ -5077,20 +2780,13 @@ sub coowner_invitations { } sub manage_coownership { - my ($cnum,$cdom,$currcoownref,$noedit) = @_; - my (@pendingcoown,@currcoown); + my ($cnum,$cdom,@currcoown) = @_; + my (@pendingcoown); my $pendingcoowners = $env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; if ($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 $uname = $env{'user.name'}; my $udom = $env{'user.domain'}; @@ -5120,10 +2816,10 @@ sub manage_coownership { } $output .= ''; if ($is_coowner) { - $output .= &mt('You are currently a co-owner:').' '; + $output .= &mt('You are currently a co-owner:').' '; } else { - $output .= &mt('The course owner has invited you to become a co-owner:').' '.(' 'x2). - ''; + $output .= &mt('The course owner has invited you to become a co-owner:').' '.(' 'x2). + ''; } $output .= ''; if (@currcoown) { @@ -5137,7 +2833,7 @@ sub manage_coownership { } sub print_localization { - my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$noedit) = @_; + my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -5156,38 +2852,21 @@ sub print_localization { input => 'selectbox', }, ); - my ($datatable,$disabled); + my $datatable; my $count = 0; - if ($noedit) { - $disabled = ' disabled="disabled"'; - } foreach my $item (@{$ordered}) { $count ++; my $colspan; unless ($item eq 'languages') { - $colspan = 2; + $colspan = 2; } $datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); if ($item eq 'timezone') { my $includeempty = 1; my $timezone = &Apache::lonlocal::gettimezone(); - my $onchange; - unless ($noedit) { - $onchange = ' onchange="javascript:toggleTimeZone();"'; - } - my $id = ' id="LC_set_timezone"'; $datatable .= - &Apache::loncommon::select_timezone($item,$timezone,$onchange, - $includeempty,$id,$disabled); - my $tzsty = 'none'; - if ($timezone ne '') { - $tzsty = 'block'; - } - $datatable .= '
    '. - ''. - &mt('Override individual user preference?'). - &yesno_radio('tzover',$settings,undef,1,'',$noedit). - '
    '; + &Apache::loncommon::select_timezone($item,$timezone,undef, + $includeempty); } elsif ($item eq 'datelocale') { my $includeempty = 1; my $locale_obj = &Apache::lonlocal::getdatelocale(); @@ -5197,13 +2876,11 @@ sub print_localization { } $datatable .= &Apache::loncommon::select_datelocale($item,$currdatelocale, - undef,$includeempty,$disabled); + undef,$includeempty); } else { if ($settings->{$item} eq '') { - unless ($noedit) { - $datatable .= ''. - &Apache::loncommon::select_language('languages_0','',1); - } + $datatable .= ''. + &Apache::loncommon::select_language('languages_0','',1); } else { my $num = 0; my @languages = split(/\s*[,;:]\s*/,$settings->{$item}); @@ -5223,22 +2900,19 @@ sub print_localization { '

    '. ''. &Apache::loncommon::end_data_table_row(); $num ++; } } - unless ($noedit) { - $datatable .= - &Apache::loncommon::start_data_table_row(). + $datatable .= &Apache::loncommon::start_data_table_row(). ''. &mt('Additional language:'). '
    '. &Apache::loncommon::select_language('languages_'.$num,'',1). ''. - ''.&Apache::loncommon::end_data_table_row(); - } - $datatable .= &Apache::loncommon::end_data_table().'
    '; + ''.&Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table().'
    '; } } $datatable .= &item_table_row_end(); @@ -5259,7 +2933,7 @@ sub get_lang_choices { } sub print_feedback { - my ($position,$cdom,$settings,$ordered,$itemtext,$rowtotal,$noedit) = @_; + my ($position,$cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -5294,10 +2968,7 @@ sub print_feedback { del => 'Delete?', sec => 'Sections:', ); - my $disabled; - if ($noedit) { - $disabled = ' disabled="disabled"'; - } + foreach my $item (@{$ordered}) { $count ++; if ($position eq 'top') { @@ -5307,12 +2978,12 @@ sub print_feedback { } if ($position eq 'top') { my $includeempty = 0; - $datatable .= ''. - &user_table($cdom,$item,\@sections, - $settings->{$item},\%lt,$noedit); + $datatable .= ''. + &user_table($cdom,$item,\@sections, + $settings->{$item},\%lt); } else { $datatable .= &Apache::lonhtmlcommon::textbox($item.'.text', - $settings->{$item.'.text'},$items{$item}{size},$disabled); + $settings->{$item.'.text'},$items{$item}{size}); } $datatable .= &item_table_row_end(); } @@ -5321,21 +2992,15 @@ sub print_feedback { } sub user_table { - my ($cdom,$item,$sections,$currvalue,$lt,$noedit) = @_; + my ($cdom,$item,$sections,$currvalue,$lt) = @_; my $output; if ($currvalue eq '') { - unless ($noedit) { - $output .= &select_recipient($item,'0',$cdom,$sections); - } + $output .= &select_recipient($item,'0',$cdom,$sections); } else { my $num = 0; my @curr = split(/,/,$currvalue); $output .= ''; my ($currusers); - my $disabled; - if ($noedit) { - $disabled = ' disabled="disabled"'; - } foreach my $val (@curr) { next if ($val eq ''); my ($uname,$udom,$seclist) = ($val =~ /^($match_username):($match_domain)(\(?[^\)]*\)?)$/); @@ -5347,7 +3012,7 @@ sub user_table { $currusers .= ''. ''; @@ -5376,16 +3041,12 @@ sub user_table { '
    '. ''. ''.(' 'x2). @@ -5358,7 +3023,7 @@ sub user_table { if (@{$sections}) { $currusers.= (' 'x3).$lt->{'sec'}.' '. &select_sections($item,$num,$sections, - \@selsec,$noedit); + \@selsec); } } $currusers .= '
    '.$currusers.'
    '. ''; } - unless ($noedit) { - $output .= - ''. + $output .= ''. ''. $lt->{'add'}.'
    '. &select_recipient($item,$num,$cdom,$sections). ''. - ''; - } - $output .= ''; + ''; } return $output; } @@ -5395,7 +3056,7 @@ sub select_recipient { my $domform = &Apache::loncommon::select_dom_form($cdom,$item.'_udom_'.$num,$includeempty); my $selectlink = &Apache::loncommon::selectstudent_link('display',$item.'_uname_'.$num, - $item.'_udom_'.$num,'only'); + $item.'_udom_'.$num,1); my $output = ''. @@ -5412,17 +3073,14 @@ sub select_recipient { } sub select_sections { - my ($item,$num,$sections,$selected,$noedit) = @_; - my ($output,@currsecs,$allsec,$disabled); + my ($item,$num,$sections,$selected) = @_; + my ($output,@currsecs,$allsec); if (ref($selected) eq 'ARRAY') { @currsecs = @{$selected}; } if (!@currsecs) { $allsec = ' selected="selected"'; } - if ($noedit) { - $disabled = ' disabled="disabled"'; - } if (ref($sections) eq 'ARRAY') { if (@{$sections}) { my $mult; @@ -5432,7 +3090,7 @@ sub select_sections { $mult .= ' size="4"'; } } - $output = ''. ' '; foreach my $sec (@{$sections}) { my $is_sel; @@ -5448,7 +3106,7 @@ sub select_sections { } sub print_discussion { - my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$noedit) = @_; + my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -5510,26 +3168,26 @@ sub print_discussion { 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') { $datatable .= ''. &Apache::loncommon::end_data_table_row(). - &role_checkboxes($cdom,$cnum,$item,$settings,1,undef,$noedit). + &role_checkboxes($cdom,$cnum,$item,$settings,1). &Apache::loncommon::end_data_table().'
    '; } elsif ($item eq 'discussion_post_fonts') { $datatable .= ''. ''. ''. - ''. + ''. &Apache::loncommon::end_data_table_row(). - &set_discussion_fonts($cdom,$cnum,$item,$settings,$noedit). + &set_discussion_fonts($cdom,$cnum,$item,$settings). &Apache::loncommon::end_data_table().'
    '; } $datatable .= &item_table_row_end(); @@ -5559,7 +3217,7 @@ sub print_discussion { } sub role_checkboxes { - my ($cdom,$cnum,$item,$settings,$showsections,$crstype,$noedit) = @_; + my ($cdom,$cnum,$item,$settings,$showsections,$crstype) = @_; my @roles = ('st','ad','ta','ep','in'); if ($crstype eq 'Community') { push(@roles,'co'); @@ -5597,10 +3255,6 @@ sub role_checkboxes { } my $numinrow = 3; my $count = 0; - my $disabled; - if ($noedit) { - $disabled = ' disabled="disabled"'; - } foreach my $role (@roles) { my $checked = ''; if (grep(/^\Q$role\E$/,@current)) { @@ -5619,11 +3273,11 @@ sub role_checkboxes { } } $output .= ''; if ($showsections) { $output .= ''; } $count ++; @@ -5651,11 +3305,11 @@ sub role_checkboxes { } } $output .= ''; if ($showsections) { $output .= ''.&Apache::loncommon::end_data_table_row(); } $total ++; @@ -5677,15 +3331,11 @@ sub role_checkboxes { } sub set_discussion_fonts { - my ($cdom,$cnum,$item,$settings,$noedit) = @_; + my ($cdom,$cnum,$item,$settings) = @_; 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'}) = @@ -5702,12 +3352,12 @@ sub set_discussion_fonts { ($currsize,$currunit) = ($1,$2); $curr{'size'} = $currunit; } - $output .= ''. + $output .= ''. ' '; $selitem = 'unit'; } if ((ref($styleitems) eq 'HASH') && (ref($styleitems->{$item}) eq 'ARRAY')) { - $output .= ''; foreach my $val (@{$styleitems->{$item}}) { my $sel; if ($val eq $curr{$item}) { @@ -5718,7 +3368,7 @@ sub set_discussion_fonts { } } } - $output .= ''; + $output .= ''; } $output .= &Apache::loncommon::end_data_table_row(); } @@ -5727,7 +3377,7 @@ sub set_discussion_fonts { sub discussion_vote_classes { my $classorder = ['twoplus','oneplus','zero','oneminus','twominus']; - my %classtitles = &Apache::lonlocal::texthash( + my %classtitles = &Apache::lonlocal::texthash( 'twoplus' => 'Two sigma above mean', 'oneplus' => 'One sigma above mean', 'zero' => 'Within one sigma of mean', @@ -5750,7 +3400,7 @@ sub discussion_vote_styles { } sub print_classlists { - my ($position,$cdom,$settings,$itemtext,$rowtotal,$crstype,$noedit) = @_; + my ($position,$cdom,$settings,$itemtext,$rowtotal,$crstype) = @_; my @ordered; if ($position eq 'top') { @ordered = ('default_enrollment_start_date', @@ -5793,7 +3443,7 @@ sub print_classlists { 'defaultcredits' => { text => ''.&mt($itemtext->{'defaultcredits'}).'', }, - + 'nothideprivileged' => { text => ''.&mt($itemtext->{'nothideprivileged'}).'', input => 'checkbox', @@ -5824,11 +3474,11 @@ sub print_classlists { ($settings->{'student_classlist_view'} eq 'section')) { $settings->{'student_classlist_view'} = 'disabled'; } - return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'classlists',$noedit); + return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'classlists'); } sub print_appearance { - my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -5860,11 +3510,11 @@ sub print_appearance { text => ''.&mt($itemtext->{'texengine'}).'', input => 'selectbox', options => { - MathJax => 'MathJax', + jsMath => 'jsMath', mimetex => &mt('Convert to Images'), tth => &mt('TeX to HTML'), }, - order => ['MathJax','mimetex','tth'], + order => ['jsMath','mimetex','tth'], nullval => $mathdef, }, 'tthoptions' => { @@ -5872,34 +3522,12 @@ sub print_appearance { input => 'textbox', size => 40, }, - 'uselcmath' => { - text => ''.&mt($itemtext->{'uselcmath'}).'', - input => 'radio', - }, - 'usejsme' => { - text => ''.&mt($itemtext->{'usejsme'}).'', - input => 'radio', - }, - 'inline_chem' => { - text => ''.&mt($itemtext->{'inline_chem'}).'', - input => 'radio', - }, - 'extresource' => { - text => ''.&mt($itemtext->{'extresource'}).'', - input => 'selectbox', - options => { - iframe => 'In iframe', - tab => 'In new tab', - window => 'In pop-up window', - }, - order => ['iframe','tab','window'], - }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'appearance',$noedit); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'appearance'); } sub print_grading { - my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -5910,11 +3538,12 @@ sub print_grading { input => 'selectbox', options => { standard => &mt('Standard: shows points'), + categories => &mt('Categories: shows points according to categories'), external => &mt('External: shows number of completed parts and totals'), externalnototals => &mt('External: shows only number of completed parts'), spreadsheet => &mt('Spreadsheet: (with link to detailed scores)'), }, - order => ['standard','external','externalnototals','spreadsheet'], + order => ['standard','categories','external','externalnototals','spreadsheet'], }, 'rndseed' => { text => ''.&mt($itemtext->{'rndseed'}).''. @@ -5950,11 +3579,11 @@ sub print_grading { input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'grading',$noedit); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'grading'); } sub print_printouts { - my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -6003,11 +3632,11 @@ sub print_printouts { nullval => &mt('None specified - use domain default'), } ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'printouts',$noedit); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'printouts'); } sub print_spreadsheet { - my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -6039,11 +3668,11 @@ sub print_spreadsheet { input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'spreadsheet',$noedit); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'spreadsheet'); } sub print_bridgetasks { - my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_; + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } @@ -6081,1250 +3710,11 @@ sub print_bridgetasks { input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks',$noedit); -} - -sub print_ltitools { - my ($cdom,$cnum,$settings,$rowtotal,$crstype,$noedit,$context) = @_; - my ($datatable,$disabled,$css_class,$dest); - if ($noedit) { - $disabled = ' disabled="disabled"'; - } - my $itemcount = 1; - unless ($context eq 'domain') { - my %tooltypes = &Apache::loncommon::usable_exttools(); - unless ($tooltypes{'crs'}) { - my $showtype = 'course'; - if ($crstype eq 'Community') { - $showtype = lc($crstype); - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - $datatable = ''; - $itemcount ++; - return $datatable; - } - } - my %lt = <itools_names(); - my $maxnum = 0; - my %ordered; - if (ref($settings) eq 'HASH') { - foreach my $item (keys(%{$settings})) { - if (ref($settings->{$item}) eq 'HASH') { - my $num = $settings->{$item}{'order'}; - $ordered{$num} = $item; - } - } - } - - if ($context eq 'domain') { - $dest = '/adm/domainprefs'; - } else { - $dest = '/adm/courseprefs'; - } - my ($switchserver,$switchmessage); - $switchserver = &check_switchserver($cdom,$cnum,$context,$dest); - if ($switchserver) { - if ($context eq 'domain') { - $switchmessage = &mt("submit from domain's primary library server: [_1].",$switchserver); - } elsif ($crstype eq 'Community') { - $switchmessage = &mt("submit from community's home server: [_1].",$switchserver); - } else { - $switchmessage = &mt("submit from course's home server: [_1].",$switchserver); - } - } - my $maxnum = scalar(keys(%ordered)); - my @courseroles = ('cc','in','ta','ep','st'); - my @ltiroles = qw(Instructor ContentDeveloper TeachingAssistant Learner); - my @fields = ('fullname','firstname','lastname','email','roles','user'); - if (keys(%ordered)) { - my @items = sort { $a <=> $b } keys(%ordered); - for (my $i=0; $i<@items; $i++) { - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $item = $ordered{$items[$i]}; - my ($title,$key,$url,$usable,$lifetime,$imgsrc,%sigsel); - if (ref($settings->{$item}) eq 'HASH') { - $title = $settings->{$item}->{'title'}; - $url = $settings->{$item}->{'url'}; - $key = $settings->{$item}->{'key'}; - $usable = $settings->{$item}->{'usable'}; - $lifetime = $settings->{$item}->{'lifetime'}; - my $image = $settings->{$item}->{'image'}; - if ($image ne '') { - $imgsrc = ''.&mt('Tool Provider icon').''; - } - if ($settings->{$item}->{'sigmethod'} eq 'HMAC-256') { - $sigsel{'HMAC-256'} = ' selected="selected"'; - } else { - $sigsel{'HMAC-SHA1'} = ' selected="selected"'; - } - } - my $chgstr = ' onchange="javascript:reorderLTITools(this.form,'."'ltitools_".$item."'".');"'; - $datatable .= ''. - ''."\n"; - $itemcount ++; - } - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $chgstr = ' onchange="javascript:reorderLTITools(this.form,'."'ltitools_add_pos'".');"'; - $datatable .= ''."\n". - ''."\n". - ''."\n"; - $itemcount ++; - return $datatable; -} - -sub ltitools_names { - my %lt = &Apache::lonlocal::texthash( - 'title' => 'Title', - 'version' => 'Version', - 'msgtype' => 'Message Type', - 'sigmethod' => 'Signature Method', - 'url' => 'URL', - 'key' => 'Key', - 'lifetime' => 'Nonce lifetime (s)', - 'secret' => 'Secret', - 'icon' => 'Icon', - 'user' => 'User', - 'fullname' => 'Full Name', - 'firstname' => 'First Name', - 'lastname' => 'Last Name', - 'email' => 'E-mail', - 'roles' => 'Role', - 'window' => 'Window', - 'tab' => 'Tab', - 'iframe' => 'iFrame', - 'height' => 'Height', - 'width' => 'Width', - 'linktext' => 'Default Link Text', - 'explanation' => 'Default Explanation', - 'passback' => 'Tool can return grades:', - 'roster' => 'Tool can retrieve roster:', - 'crstarget' => 'Display target', - 'crslabel' => 'Course label', - 'crstitle' => 'Course title', - 'crslinktext' => 'Link Text', - 'crsexplanation' => 'Explanation', - 'crsappend' => 'Provider URL', - ); - return %lt; -} - -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 => ''.&mt($itemtext->{'menudefault'}).'
    '. - &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 'foot') || ($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(''.$num.'',$count,'','','','LC_left_item'); - foreach my $category (@order) { - if ((ref($categories{$category}) eq 'ARRAY') && (@{$categories{$category}} > 0)) { - $datatable .= '
    '.$menutitles{$category}.''."\n"; - if ($category eq 'text') { - $datatable .= ''.&mt('Header').'
    '; - } - foreach my $field (@{$categories{$category}}) { - if ($field eq 'disc') { - $datatable .= '
    '.&mt('Footer').'
    '; - } - $datatable .= '
    '; - } - $datatable .= '
    '; - } - } - $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 = ''; - $datatable .= &item_table_row_start($add,$count,'','','','LC_left_item'); - foreach my $category (@order) { - if ((ref($categories{$category}) eq 'ARRAY') && (@{$categories{$category}} > 0)) { - $datatable .= ''; - } - } - $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','foot','main'], - text => ['name','role','crs','disc','fdbk'], - links => ['pers','logo','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 => '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', - foot => 'Display footer', - main => 'Access to main menu', - pers => 'Personal', - logo => 'LON-CAPA', - comm => 'Messages', - roles => 'Roles/Courses', - help => 'Help', - logout => 'Logout', - name => 'Fullname', - crs => 'Course Title', - role => 'Current Role', - disc => 'Discussion', - fdbk => 'Feedback', - 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 'foot') || ($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 .= '
    '.&mt('Collection [_1]',$num).''; - foreach my $category (@order) { - if ((ref($categories{$category}) eq 'ARRAY') && (@{$categories{$category}} > 0)) { - $output .= '
    '. - ''.$menutitles{$category}.''."\n"; - if ($category eq 'text') { - $output .= ''.&mt('Header Text').'

    '; - } - foreach my $field (@{$categories{$category}}) { - if ($field eq 'disc') { - $output .= '
    '.&mt('Footer Text').'

    '; - } - if ($checked{$field}) { - $output .= &Apache::lonhtmlcommon::confirm_success($menufields{$field}); - } else { - $output .= &Apache::lonhtmlcommon::confirm_success($menufields{$field},1); - } - $output .= '
    '; - } - $output .= '
    '; - } - } - $output .= '
    '; - } - } - } - return $output; -} - -sub print_linkprotection { - my ($cdom,$cnum,$settings,$rowtotal,$crstype,$noedit,$context) = @_; - - my %linkprotection; - my $count = 0; - my $next = 1; - my ($datatable,$disabled,$css_class,$dest); - if ($noedit) { - $disabled = ' disabled="disabled"'; - } - my %desc = &linkprot_names(); - my %lt = &Apache::lonlocal::texthash ( - 'requ' => 'Required settings', - 'opti' => 'Optional settings', - ); - my $itemcount = 0; - - my $ltiauth; - if ($context eq 'domain') { - $ltiauth = 1; - } else { - if (exists($env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'})) { - $ltiauth = $env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'}; - } else { - my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); - $ltiauth = $domdefs{'crsltiauth'}; - } - } - if ($context eq 'domain') { - $dest = '/adm/domainprefs'; - } else { - $dest = '/adm/courseprefs'; - } - - my ($switchserver,$switchmessage); - $switchserver = &check_switchserver($cdom,$cnum,$context,$dest); - if ($switchserver) { - if ($context eq 'domain') { - $switchmessage = &mt("submit from domain's primary library server: [_1].",$switchserver); - } elsif ($crstype eq 'Community') { - $switchmessage = &mt("submit from community's home server: [_1].",$switchserver); - } else { - $switchmessage = &mt("submit from course's home server: [_1].",$switchserver); - } - } - - if ((ref($settings) eq 'HASH') && (ref($settings->{'linkprot'}) eq 'HASH')) { - if (keys(%{$settings->{'linkprot'}})) { - my @current = sort { $a <=> $b } keys(%{$settings->{'linkprot'}}); - $next += $current[-1]; - for (my $i=0; $i<@current; $i++) { - my $num = $current[$i]; - my %values; - if (ref($settings->{'linkprot'}->{$num}) eq 'HASH') { - %values = %{$settings->{'linkprot'}->{$num}}; - } else { - next; - } - my $selected; - if (($values{'version'} eq 'LTI-1p0') || ($values{'version'} eq '')) { - $selected = ' selected="selected"'; - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - $datatable .= - ''; - $itemcount ++; - } - } - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - $datatable .= ''."\n". - ''; - $$rowtotal ++; - return $datatable; -} - -sub linkprot_names { - return &Apache::lonlocal::texthash( - 'version' => 'LTI Version', - 'key' => 'Key', - 'lifetime' => 'Nonce lifetime (s)', - 'name' => 'Launcher Application', - 'secret' => 'Secret', - 'passback' => 'Can return grades to Launcher', - 'returnurl' => 'Launcher return URL', - 'requser' => 'Use identity', - 'email' => 'Email address', - 'sourcedid' => 'User ID', - 'other' => 'Other', - 'auth' => 'Display LON-CAPA login page', - 'reject' => 'Discontinue launch process', - ); -} - -sub check_switchserver { - my ($cdom,$cnum,$context,$dest) = @_; - my ($allowed,$switchserver,$home); - if ($context eq 'domain') { - $home = &Apache::lonnet::domain($cdom,'primary'); - } else { - $home = &Apache::lonnet::homeserver($cnum,$cdom); - } - unless (($home eq 'no_host') || ($home eq '')) { - my @ids=&Apache::lonnet::current_machine_ids(); - foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } - if (!$allowed) { - $switchserver=''.&mt('Switch Server').''; - } - } - return $switchserver; -} - -sub linkprot_options { - my ($num,$itemcount,$disabled,$current,$desc) = @_; - my %lt; - if (ref($desc) eq 'HASH') { - %lt = %{$desc}; - } - my $userfieldsty = 'none'; - my (%checked,$userfield); - $checked{'sourcedid'} = ' checked="checked"'; - $checked{'reject'} = ' checked="checked"'; - if (ref($current) eq 'HASH') { - if (($current->{'mapuser'} ne '') && ($current->{'mapuser'} ne 'lis_person_sourcedid')) { - $checked{'sourcedid'} = ''; - if ($current->{'mapuser'} eq 'lis_person_contact_email_primary') { - $checked{'email'} = ' checked="checked"'; - } else { - $checked{'other'} = ' checked="checked"'; - $userfield = $current->{'mapuser'}; - $userfieldsty = 'inline-block'; - } - } - if (($current->{'notstudent'} ne '') && ($current->{'notstudent'} ne 'reject')) { - $checked{'reject'} = ''; - $checked{'auth'} = ' checked="checked"'; - } - } - my $onclickuser = ' onclick="toggleLinkProtExtra(this.form,'."'mapuser','userfield','other','inline-block','$num'".');"'; - my $output = '
    '. - &mt('Source of LON-CAPA username in LTI request').': '; - foreach my $option ('sourcedid','email','other') { - $output .= ''. - ($option eq 'other' ? '' : (' 'x2) ); - } - $output .= '
    '. - '
    '. - '
    '; - $output .= '
    '. - '
    '. - &mt('Action when username is not for an enrolled student').': '; - foreach my $option ('reject','auth') { - $output .= ''. - ($option eq 'auth' ? '' : (' 'x2) ); - } - $output .= '
    '; - return $output; -} - -sub print_extresource_row { - my ($item,$config,$curr,$noedit) = @_; - my $onchange; - unless ($noedit) { - $onchange = ' onchange="javascript:toggleExtRes();"'; - } - my $id = 'LC_'.$item; - my ($selected,$reuse,$width,$height) = split(/:/,$curr); - my $output = &select_from_options($item,$config->{'order'}, - $config->{'options'},$selected, - $config->{'nullval'}, - undef,undef,$onchange,$noedit,$id); - my ($checked,$reusesty,$sizesty); - if ($reuse) { - $checked = ' checked="checked"'; - } - $reusesty = 'none'; - $sizesty = 'none'; - if (($selected eq 'window') || ($selected eq 'tab')) { - $reusesty = 'inline-block'; - if ($selected eq 'window') { - $sizesty = 'inline-block'; - } - } - $output .= '
    '. - ''. - ''. - '
    '. - '
    '. - ''.&mt('Window size (optional)').''. - ''. - &mt('width').':px'. - (' ' x 3). - &mt('height').':px'. - '
    '; - return $output; + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks'); } sub print_other { - my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_; + my ($cdom,$settings,$allitems,$rowtotal,$crstype) = @_; unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) { return; } @@ -7345,7 +3735,7 @@ sub print_other { input => 'textbox', size => '30', }; - return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'other',$noedit); + my $output = &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'other'); } sub get_other_items { @@ -7363,9 +3753,7 @@ sub get_other_items { ($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) || ($parameter eq 'type') || ($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')) { + || ($parameter =~ m/^discussion_post_fonts/)) { push(@ordered,$parameter); } } @@ -7374,23 +3762,17 @@ sub get_other_items { } sub item_table_row_start { - my ($text,$count,$add_class,$colspan,$leftclass,$rightclass) = @_; + my ($text,$count,$add_class,$colspan) = @_; my $output; my $css_class = ($count % 2) ? 'LC_odd_row' : 'LC_even_row'; $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 .= ''."\n". - ''; - if ($colspan > 1) { - $output .= ''. &Apache::loncommon::end_data_table_row(); $num ++; - unless (grep(/^\Q$currdom\E$/,@excdoms)) { + unless (grep(/^\Q$currdom\E$/,@excdoms)) { push(@excdoms,$currdom); } } } if ((scalar(keys(%domains)) - scalar(@excdoms)) > 0) { - $datatable .= + $datatable .= &Apache::loncommon::start_data_table_row(). ''.&Apache::loncommon::end_data_table_row(); } $datatable .= &Apache::loncommon::end_data_table(). @@ -7710,7 +4030,7 @@ sub checkforpriv_row { } sub print_hdrfmt_row { - my ($item,$settings,$noedit) = @_; + my ($item,$settings) = @_; my @curr; my $currnum = 0; my $maxnum = 2; @@ -7783,43 +4103,36 @@ function getIndexByName(item) { ENDJS $output .= ''. + '
    '.&mt('Username').'
    '. '
    '. - ''.&role_checkboxes($cdom,$cnum,$item,$settings,undef,undef,$noedit). + '
    '.&role_checkboxes($cdom,$cnum,$item,$settings). '
    '; } elsif ($item eq 'plc.users.denied') { - $datatable .= '
    '. - &user_table($cdom,$item,undef, - $settings->{$item},\%lt,$noedit); + $datatable .= ''. + &user_table($cdom,$item,undef, + $settings->{$item},\%lt); } elsif ($item eq 'pch.roles.denied') { $datatable .= ''. - ''.&role_checkboxes($cdom,$cnum,$item,$settings,undef,undef,$noedit). + '
    '.&role_checkboxes($cdom,$cnum,$item,$settings). '
    '; } elsif ($item eq 'pch.users.denied') { $datatable .= '
    '. &user_table($cdom,$item,undef, - $settings->{$item},\%lt,$noedit); + $settings->{$item},\%lt); } elsif ($item eq 'allow_limited_html_in_feedback') { - $datatable .= &yesno_radio($item,$settings,undef,undef,undef,$noedit); + $datatable .= &yesno_radio($item,$settings); } elsif ($item eq 'allow_discussion_post_editing') { $datatable .= '
    '. &Apache::loncommon::start_data_table(). @@ -5537,7 +3195,7 @@ sub print_discussion { '
    '.&mt('Role').''. &mt('Sections').'
    '. @@ -5547,9 +3205,9 @@ sub print_discussion { '
    '.&mt('font-size').''.&mt('font-weight').''.&mt('font-style').''.&mt('Other css').''.&mt('Other css').''. - &select_sections($item,$role,\@sections,$currsec{$role},$noedit). + &select_sections($item,$role,\@sections,$currsec{$role}). '
    '. - &select_sections($item,$role,\@sections,$currsec{$role},$noedit). + &select_sections($item,$role,\@sections,$currsec{$role}). '
    '. - &mt("Definition of external tools is not enabled for this $showtype.").'
    '; - if ($tooltypes{'dom'}) { - $datatable .= &mt("Contact an administrator for the $showtype domain ([_1]) to request this feature be enabled.", - ''.$cdom.''). - '

    '. - &mt("Use of external tools defined at a domain level is enabled, so the $showtype editor can be used to add tool(s), if any have been defined."); - } else { - $datatable .= &mt("Use of external tools defined at a domain level is not enabled, either, for this $showtype."). - '

    '. - &mt("Contact an administrator for the $showtype domain ([_1]) to request changes.", - ''.$cdom.''); - - } - $datatable .= '
    ' - .''.(' 'x2). - ''. - '
    '.&mt('Required settings').''. - ''.$lt{'title'}.': '. - (' 'x2). - ''.$lt{'version'}.': '. - (' 'x2). - ''.$lt{'msgtype'}.': '. - (' 'x2). - ''.$lt{'sigmethod'}.':'. - '

    '. - ''.$lt{'url'}.':'. - (' 'x2). - ''.$lt{'lifetime'}.':'. - '

    '; - if ($key ne '') { - $datatable .= ''.$lt{'key'}; - if ($noedit) { - $datatable .= ': ['.&mt('not shown').']'; - } elsif ($switchserver) { - $datatable .= ': ['.&mt('[_1] to view/edit',$switchserver).']'; - } else { - $datatable .= ':'; - } - $datatable .= ' '.(' 'x2); - } elsif (!$switchserver) { - $datatable .= ''.$lt{'key'}.':'. - ''. - ' '.(' 'x2); - } - if ($switchserver) { - if ($usable ne '') { - $datatable .= '
    '. - $lt{'secret'}.': ['.&mt('not shown').'] '.(' 'x2).'
    '. - ''.&mt('Change secret?'). - ''. - (' 'x2). - ''.(' 'x2). - ''; - } elsif ($key eq '') { - $datatable .= ''.&mt('Key and Secret are required').' - '.$switchmessage.''."\n"; - } else { - $datatable .= ''.&mt('Secret required').' - '.$switchmessage.''."\n"; - } - $datatable .= ''; - } else { - if ($usable ne '') { - $datatable .= '
    '. - $lt{'secret'}.': ['.&mt('not shown').'] '.(' 'x2).'
    '. - ''.&mt('Change?'). - ''. - (' 'x2). - '  '; - } else { - $datatable .= - ''.$lt{'secret'}.':'. - ''. - ''. - ''; - } - } - $datatable .= '
    '. - '
    '.&mt('Optional settings').''. - ''.&mt('Display target:'); - my %currdisp; - if (ref($settings->{$item}->{'display'}) eq 'HASH') { - if ($settings->{$item}->{'display'}->{'target'} eq 'window') { - $currdisp{'window'} = ' checked="checked"'; - } elsif ($settings->{$item}->{'display'}->{'target'} eq 'tab') { - $currdisp{'tab'} = ' checked="checked"'; - } else { - $currdisp{'iframe'} = ' checked="checked"'; - } - if ($settings->{$item}->{'display'}->{'width'} =~ /^(\d+)$/) { - $currdisp{'width'} = $1; - } - if ($settings->{$item}->{'display'}->{'height'} =~ /^(\d+)$/) { - $currdisp{'height'} = $1; - } - $currdisp{'linktext'} = $settings->{$item}->{'display'}->{'linktext'}; - $currdisp{'explanation'} = $settings->{$item}->{'display'}->{'explanation'}; - } else { - $currdisp{'iframe'} = ' checked="checked"'; - } - foreach my $disp ('iframe','tab','window') { - $datatable .= ''.(' 'x2); - } - $datatable .= (' 'x4); - foreach my $dimen ('width','height') { - $datatable .= ''. - (' 'x2); - } - $datatable .= '
    '. - '
    '.$lt{'linktext'}.'
    '. - '
    '. - '
    '.$lt{'explanation'}.'
    '. - '

    '; - my %units = ( - 'passback' => 'days', - 'roster' => 'seconds', - ); - foreach my $extra ('passback','roster') { - my $validsty = 'none'; - my $currvalid; - my $checkedon = ''; - my $checkedoff = ' checked="checked"'; - if ($settings->{$item}->{$extra}) { - $checkedon = $checkedoff; - $checkedoff = ''; - $validsty = 'inline-block'; - if ($settings->{$item}->{$extra.'valid'} =~ /^\d+\.?\d*$/) { - $currvalid = $settings->{$item}->{$extra.'valid'}; - } - } - my $onclick = ' onclick="toggleLTITools(this.form,'."'$extra','$i'".');"'; - $datatable .= '
    '.$lt{$extra}.' '. - ''.(' 'x2). - '
    '. - '
    '. - ''. - &mt("until at least [_1] $units{$extra} after launch", - ''). - '
    '; - } - $datatable .= ''.$lt{'icon'}.': '; - if ($imgsrc) { - $datatable .= $imgsrc. - ' '. - ' '.&mt('Replace:').' '; - } else { - $datatable .= '('.&mt('if larger than 21x21 pixels, image will be scaled').') '; - } - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); - } else { - $datatable .= ''; - } - $datatable .= '
    '; - my (%checkedfields,%rolemaps,$userincdom); - if (ref($settings->{$item}) eq 'HASH') { - if (ref($settings->{$item}->{'fields'}) eq 'HASH') { - %checkedfields = %{$settings->{$item}->{'fields'}}; - } - $userincdom = $settings->{$item}->{'incdom'}; - if (ref($settings->{$item}->{'roles'}) eq 'HASH') { - %rolemaps = %{$settings->{$item}->{'roles'}}; - $checkedfields{'roles'} = 1; - } - } - $datatable .= '
    '.&mt('User data sent on launch').''. - ''; - my $userfieldstyle = 'display:none;'; - my $seluserdom = ''; - my $unseluserdom = ' selected="selected"'; - foreach my $field (@fields) { - my ($checked,$onclick,$id,$spacer); - if ($checkedfields{$field}) { - $checked = ' checked="checked"'; - } - if ($field eq 'user') { - $id = ' id="ltitools_user_field_'.$i.'"'; - $onclick = ' onclick="toggleLTITools(this.form,'."'$field','$i'".')"'; - if ($checked) { - $userfieldstyle = 'display:inline-block'; - if ($userincdom) { - $seluserdom = $unseluserdom; - $unseluserdom = ''; - } - } - } else { - $spacer = (' ' x2); - } - $datatable .= ''.$spacer; - } - $datatable .= ''; - $datatable .= '
    '. - ' : '. - '
    '; - $datatable .= '
    '. - '
    '.&mt('Role mapping').''; - foreach my $role (@courseroles) { - my ($selected,$selectnone); - if (!$rolemaps{$role}) { - $selectnone = ' selected="selected"'; - } - $datatable .= ''; - } - $datatable .= '
    '. - &Apache::lonnet::plaintext($role,'Course').'
    '. - '
    '; - my %courseconfig; - if (ref($settings->{$item}) eq 'HASH') { - if (ref($settings->{$item}->{'crsconf'}) eq 'HASH') { - %courseconfig = %{$settings->{$item}->{'crsconf'}}; - } - } - $datatable .= '
    '.&mt('Configurable in course').''; - foreach my $item ('label','title','target','linktext','explanation','append') { - my $checked; - if ($courseconfig{$item}) { - $checked = ' checked="checked"'; - } - $datatable .= '  '."\n"; - } - $datatable .= '
    '. - '
    '.&mt('Custom items sent on launch').''. - ''; - if (ref($settings->{$item}->{'custom'}) eq 'HASH') { - my %custom = %{$settings->{$item}->{'custom'}}; - if (keys(%custom) > 0) { - foreach my $key (sort(keys(%custom))) { - $datatable .= ''. - ''; - } - } - } - $datatable .= ''; - $datatable .= '
    '.&mt('Action').''.&mt('Name').''.&mt('Value').'
    '. - ''.$key.'
    '. - ''. - '
    '."\n". - ''."\n". - ' '."\n". - ''.&mt('Add').''. - '
    '.&mt('Required settings').''. - ''.$lt{'title'}.': '."\n". - (' 'x2). - ''.$lt{'version'}.': '."\n". - (' 'x2). - ''.$lt{'msgtype'}.': '. - ''.$lt{'sigmethod'}.':'. - '
    '. - ''.$lt{'url'}.': '."\n". - (' 'x2). - ''.$lt{'lifetime'}.':
    '; - if ($switchserver) { - $datatable .= ''.&mt('Key and Secret are required').' - '.$switchmessage.''."\n"; - } else { - $datatable .= ''.$lt{'key'}.': '."\n". - (' 'x2). - ''.$lt{'secret'}.':'. - ' '."\n"; - } - $datatable .= '

    '. - '
    '. - '
    '.&mt('Optional settings').''. - ''.&mt('Display target:'); - my %defaultdisp; - $defaultdisp{'iframe'} = ' checked="checked"'; - foreach my $disp ('iframe','tab','window') { - $datatable .= ''.(' 'x2); - } - $datatable .= (' 'x4); - foreach my $dimen ('width','height') { - $datatable .= ''. - (' 'x2); - } - $datatable .= '
    '. - '
    '.$lt{'linktext'}.'
    '. - '
    '. - '
    '.$lt{'explanation'}.'
    '. - ''. - '

    '; - my %units = ( - 'passback' => 'days', - 'roster' => 'seconds', - ); - my %defaulttimes = ( - 'passback' => '7', - 'roster' => '300', - ); - foreach my $extra ('passback','roster') { - my $onclick = ' onclick="toggleLTITools(this.form,'."'$extra','add'".');"'; - $datatable .= '
    '.$lt{$extra}.' '. - ''.(' 'x2).''. - '
    '. - '
    '; - } - $datatable .= ''.$lt{'icon'}.': '. - '('.&mt('if larger than 21x21 pixels, image will be scaled').') '; - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); - } else { - $datatable .= ''; - } - $datatable .= '
    '. - '
    '.&mt('User data sent on launch').''. - ''; - foreach my $field (@fields) { - my ($id,$onclick,$spacer); - if ($field eq 'user') { - $id = ' id="ltitools_user_field_add"'; - $onclick = ' onclick="toggleLTITools(this.form,'."'$field','add'".')"'; - } else { - $spacer = (' ' x2); - } - $datatable .= ''.$spacer; - } - $datatable .= ''. - '
    '; - $datatable .= '
    '.&mt('Role mapping').''; - foreach my $role (@courseroles) { - my ($checked,$checkednone); - $datatable .= ''; - } - $datatable .= '
    '. - &Apache::lonnet::plaintext($role,'Course').'
    '. - '
    '. - '
    '.&mt('Configurable in course').''; - foreach my $item ('label','title','target','linktext','explanation','append') { - $datatable .= ''.(' ' x2)."\n"; - } - $datatable .= '
    '. - '
    '.&mt('Custom items sent on launch').''. - ''. - ''. - '
    '.&mt('Action').''.&mt('Name').''.&mt('Value').'
    '. - ''. - '
    '."\n". - '
    '. - ''; - my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl, - $onclickpassback,%checkedpassback,$passbacksty,%checkedpassbackfmt); - $passbacksty = 'none'; - $onclickpassback = ' onclick="toggleLinkProtExtra(this.form,'."'passback','passbackparam','1','inline-block','$i'".');"'; - %checkedpassback = ( - 'no' => ' checked="checked"', - 'yes' => '', - ); - %checkedpassbackfmt = ( - '1p1' => ' checked="checked"', - '1p0' => '', - ); - if ($values{'passback'} ne '') { - $passbacksty = 'inline-block'; - $checkedpassback{'yes'} = ' checked="checked"'; - $checkedpassback{'no'} = ''; - if ($values{'passbackformat'} eq '1.0') { - $checkedpassbackfmt{'1p0'} = ' checked="checked"'; - $checkedpassbackfmt{'1p1'} = ''; - } - } - if ($ltiauth) { - $usersty = 'display:none'; - $onclickrequser = ' onclick="toggleLinkProtExtra(this.form,'."'requser','optional','1','block','$i'".');"'; - %checkedrequser = ( - no => ' checked="checked"', - yes => '', - ); - if ($values{'requser'}) { - $checkedrequser{'yes'} = $checkedrequser{'no'}; - $checkedrequser{'no'} = ''; - } - $datatable .= '
    '.$lt{'requ'}.''; - if ($values{'requser'}) { - $usersty = 'display:inline-block'; - } - } - $onclickreturnurl = ' onclick="toggleLinkProtExtra(this.form,'."'returnurl','divurlparam','1','inline-block','$i'".');"'; - %checkedreturnurl = ( - no => ' checked="checked"', - yes => '', - ); - if ($values{'returnurl'} ne '') { - $checkedreturnurl{'yes'} = $checkedreturnurl{'no'}; - $checkedreturnurl{'no'} = ''; - } - $datatable .= - ''.$desc{'name'}. - ': '. - (' 'x2). - ''.$desc{'version'}.': '."\n". - (' 'x2). - ''.$desc{'lifetime'}.':

    '; - if ($values{'key'} ne '') { - $datatable .= ''.$desc{'key'}; - if ($noedit) { - $datatable .= ': ['.&mt('not shown').']'; - } elsif ($switchserver) { - $datatable .= ': ['.&mt('[_1] to view/edit',$switchserver).']'; - } else { - $datatable .= ':'; - } - $datatable .= ' '.(' 'x2); - } elsif (!$switchserver) { - $datatable .= ''.$desc{'key'}.':'. - ''. - ' '.(' 'x2); - } - if ($switchserver) { - if ($values{'usable'} ne '') { - $datatable .= '
    '. - $desc{'secret'}.': ['.&mt('not shown').'] '.(' 'x2).'
    '. - ''.&mt('Change secret?'). - ''. - (' 'x2). - ''.(' 'x2). - ''; - } elsif ($values{'key'} eq '') { - $datatable .= ''.&mt('Key and Secret are required').' - '.$switchmessage.''."\n"; - } else { - $datatable .= ''.&mt('Secret required').' - '.$switchmessage.''."\n"; - } - $datatable .= ''; - } else { - if ($values{'usable'} ne '') { - $datatable .= '
    '. - $desc{'secret'}.': ['.&mt('not shown').'] '.(' 'x2).'
    '. - ''.&mt('Change?'). - ''. - (' 'x2). - '  '; - } else { - $datatable .= - ''.$desc{'secret'}.':'. - ''. - ''. - ''; - } - } - $datatable .= '

    '. - ''.$desc{'passback'}.'?'. - ' '. - '
    '. - '
    '. - ''.&mt('Grade format'). - ''.(' 'x2). - '
    '. - '
    '. - '
    '. - ''.$desc{'returnurl'}.'?'. - ' '. - ''. - '   '; - if ($ltiauth) { - $datatable .= (' 'x2).''.$desc{'requser'}.'?'. - ' '. - ''. - '
    '. - '
    '.$lt{'opti'}.''. - &linkprot_options($i,$itemcount,$disabled,\%values,\%desc). - '
    '; - } - $datatable .= '
    '."\n". - ''."\n". - ''.&mt('Add').''; - my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl, - $onclickpassback,%checkedpassback,%checkedpassbackfmt); - if ($ltiauth) { - $usersty = 'display:none'; - $onclickrequser = ' onclick="toggleLinkProtExtra(this.form,'."'requser','optional','1','block','add'".');"'; - %checkedrequser = ( - no => ' checked="checked"', - yes => '', - ); - $datatable .= '
    '.$lt{'requ'}.''; - } - $onclickpassback = ' onclick="toggleLinkProtExtra(this.form,'."'passback','passbackparam','1','inline-block','add'".');"'; - %checkedpassback = ( - 'no' => ' checked="checked"', - 'yes' => '', - ); - %checkedpassbackfmt = ( - '1p1' => ' checked="checked"', - '1p0' => '', - ); - $onclickreturnurl = ' onclick="toggleLinkProtExtra(this.form,'."'returnurl','divurlparam','1','inline-block','add'".');"'; - %checkedreturnurl = ( - no => ' checked="checked"', - yes => '', - ); - $datatable .= ''.$desc{'name'}. - ': '."\n". - (' 'x2). - ''.$desc{'version'}.': '."\n". - (' 'x2). - ''.$desc{'lifetime'}.': '."\n". - '

    '; - if ($switchserver) { - $datatable .= ''.&mt('Key and Secret are required').' - '.$switchmessage.''."\n"; - } else { - $datatable .= ''.$desc{'key'}.': '."\n". - (' 'x2). - ''.$desc{'secret'}.':'. - ' '."\n"; - } - $datatable .= '

    '. - ''.$desc{'passback'}.'?'. - ' '. - ''. - '
    '. - '
    '. - '
    '. - ''.$desc{'returnurl'}.'?'. - ' '. - ''. - '   '; - if ($ltiauth) { - $datatable .= (' 'x2).''.$desc{'requser'}.'?'. - ' '. - ''. - '
    '. - '
    '.$lt{'opti'}.''. - &linkprot_options('add',$itemcount,$disabled,{},\%desc). - '
    '; - } - $datatable .= '
    '.$text. + ''.$text. ''; + if ($colspan) { + $output .= ''; } else { - $output .= ''; + $output .= ''; } return $output; } @@ -7400,43 +3782,25 @@ sub item_table_row_end { } sub yesno_radio { - my ($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit) = @_; + my ($item,$settings) = @_; my $itemon = ' '; my $itemoff = ' checked="checked" '; - if (($valueyes eq '') && ($valueno eq '')) { - $valueyes = 'yes'; - $valueno = ''; - } if (ref($settings) eq 'HASH') { - if ($settings->{$item} eq $valueyes) { + if ($settings->{$item} eq 'yes') { $itemon = $itemoff; $itemoff = ' '; } - unless (exists($settings->{$item})) { - if ($unsetdefault eq $valueyes) { - $itemon = $itemoff; - $itemoff = ' '; - } - } - } - my $disabled; - if ($noedit) { - $disabled = ' disabled="disabled"'; } return ' '. + $itemon.' value="yes" />'.&mt('Yes').' '. ''; + $itemoff.' value="" />'.&mt('No').''; } sub select_from_options { - my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange,$noedit,$id) = @_; + my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange) = @_; my $output; - my $disabled; - if ($noedit) { - $disabled = ' disabled=disabled"'; - } if ((ref($order) eq 'ARRAY') && (ref($options) eq 'HASH')) { $output=''; foreach my $user (sort(@privusers)) { my $hideon = ' checked="checked" '; @@ -7629,9 +3955,8 @@ sub nothidepriv_row { ''. + $hideon.' value="" />'.&mt('Hidden').' '. + ''. ''; } $datatable .= '
    '. ' '. - '
    '; @@ -7646,7 +3971,7 @@ sub nothidepriv_row { } sub checkforpriv_row { - my ($cdom,$item,$settings,$crstype,$noedit) = @_; + my ($cdom,$item,$settings,$crstype) = @_; my $datatable; my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); if (keys(%domains) == 1) { @@ -7659,24 +3984,19 @@ sub checkforpriv_row { if ($settings->{$item} eq '') { $datatable = '
    '. &Apache::loncommon::select_dom_form('','checkforpriv_'.$num, - 1,1,undef,undef,\@excdoms, - $noedit); + 1,1,undef,undef,\@excdoms); } else { my @privdoms = split(/,/,$settings->{$item}); my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); $datatable = '
    '. &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(). '
    '. @@ -7684,22 +4004,22 @@ sub checkforpriv_row { '
    '. '
    '. &mt('Additional domain:'). '
    '. &Apache::loncommon::select_dom_form('','checkforpriv_'.$num,1, - 1,undef,undef,\@excdoms,$noedit). + 1,undef,undef,\@excdoms). '

    '. $currstr.''; - my $disabled; - if ($noedit) { - $disabled = ' disabled="disabled"'; - } if (@curr > 0) { for (my $i=0; $i<@curr; $i++) { my $pos = $i+1; $output .= ''. ''; + '" />'; if ($curr[$i] =~ /^%\d*[nca]$/) { my ($limit,$subst) = ($curr[$i] =~ /^%(\d*)([nca])$/); $output .= ''; + &substitution_selector($i,$subst,$limit).''; } else { $output .= ''; + ' value="'.$curr[$i].'" size="25" />'; } $output .= ''; } } - my $pos = $currnum+1; - unless ($noedit) { - $output .= - ''. + my $pos = $currnum+1; + $output .= ''. ''. ''; - $pos ++; - $currnum ++; - $output .= - ''. + $pos ++; + $currnum ++; + $output .= ''. ''. @@ -7828,15 +4141,14 @@ ENDJS '" value="" size ="25" />'. ''. - ''; - } - $output .= '
    '. - &position_selector($pos,$i,$maxnum,$disabled).&mt('Delete:'). + &position_selector($pos,$i,$maxnum).&mt('Delete:'). ''. - &substitution_selector($i,$subst,$limit,$disabled).''.&mt('Text').'
    '. '
    '. &position_selector($pos,$currnum,$maxnum). ''.&mt('New').''. &substitution_selector($currnum).'
    '. &position_selector($pos,$currnum,$maxnum). ''.&mt('New').'

    '; + '

    '; return $output; } sub position_selector { - my ($pos,$num,$maxnum,$disabled) = @_; - my $output = ''; for (my $j=1; $j<=$maxnum; $j++) { my $sel = ''; if ($pos == $j) { @@ -7850,7 +4162,7 @@ sub position_selector { } sub substitution_selector { - my ($num,$subst,$limit,$crstype,$disabled) = @_; + my ($num,$subst,$limit,$crstype) = @_; my ($stunametxt,$crsidtxt); if ($crstype eq 'Community') { $stunametxt = 'member name'; @@ -7865,7 +4177,7 @@ sub substitution_selector { a => 'assignment note', ); my $output .= &mt('Substitution').'
    '. - ''; if ($subst eq '') { $output .= ''; } @@ -7879,7 +4191,7 @@ sub substitution_selector { } $output .= ''.&mt('Size limit').'
    '. ''; + '" value="'.$limit.'" size="5" />'; return $output; } @@ -7897,19 +4209,17 @@ sub change_clone { foreach my $currclone (@allowclone) { if (!grep(/^$currclone$/,@$oldcloner)) { if ($currclone ne '*') { - if ($currclone =~ /:/) { - my ($uname,$udom) = split(/:/,$currclone); - if ($uname && $udom && $uname ne '*') { - if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { - my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); - if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { - if ($currclonecrs{'cloneable'} eq '') { - $currclonecrs{'cloneable'} = $clone_crs; - } else { - $currclonecrs{'cloneable'} .= ','.$clone_crs; - } - &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); + my ($uname,$udom) = split(/:/,$currclone); + if ($uname && $udom && $uname ne '*') { + if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { + my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); + if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { + if ($currclonecrs{'cloneable'} eq '') { + $currclonecrs{'cloneable'} = $clone_crs; + } else { + $currclonecrs{'cloneable'} .= ','.$clone_crs; } + &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); } } } @@ -7919,26 +4229,24 @@ sub change_clone { foreach my $oldclone (@$oldcloner) { if (!grep(/^\Q$oldclone\E$/,@allowclone)) { if ($oldclone ne '*') { - if ($oldclone =~ /:/) { - my ($uname,$udom) = split(/:/,$oldclone); - if ($uname && $udom && $uname ne '*' ) { - if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { - my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); - my %newclonecrs = (); - if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { - if ($currclonecrs{'cloneable'} =~ /,/) { - my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; - foreach my $crs (@currclonecrs) { - if ($crs ne $clone_crs) { - $newclonecrs{'cloneable'} .= $crs.','; - } + my ($uname,$udom) = split(/:/,$oldclone); + if ($uname && $udom && $uname ne '*' ) { + if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { + my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); + my %newclonecrs = (); + if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { + if ($currclonecrs{'cloneable'} =~ /,/) { + my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; + foreach my $crs (@currclonecrs) { + if ($crs ne $clone_crs) { + $newclonecrs{'cloneable'} .= $crs.','; } - $newclonecrs{'cloneable'} =~ s/,$//; - } else { - $newclonecrs{'cloneable'} = ''; } - &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); + $newclonecrs{'cloneable'} =~ s/,$//; + } else { + $newclonecrs{'cloneable'} = ''; } + &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); } } } @@ -7946,30 +4254,6 @@ sub change_clone { } } } - return; -} - -sub devalidate_remote_courseprefs { - my ($cdom,$cnum,$cachekeys) = @_; - return unless (ref($cachekeys) eq 'HASH'); - my %servers = &Apache::lonnet::internet_dom_servers($cdom); - my %thismachine; - map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); - my @posscached = ('courselti','courseltitools'); - if (keys(%servers)) { - foreach my $server (keys(%servers)) { - next if ($thismachine{$server}); - my @cached; - foreach my $name (@posscached) { - if ($cachekeys->{$name}) { - push(@cached,&escape($name).':'.&escape($cdom.'_'.$cnum)); - } - } - if (@cached) { - &Apache::lonnet::remote_devalidate_cache($server,\@cached); - } - } - } return; }