--- loncom/interface/londocs.pm 2022/10/29 18:13:28 1.688 +++ loncom/interface/londocs.pm 2022/12/17 18:07:47 1.689 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.688 2022/10/29 18:13:28 raeburn Exp $ +# $Id: londocs.pm,v 1.689 2022/12/17 18:07:47 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -6135,6 +6135,7 @@ sub handler { 'stpr' => 'Standard Problem', 'news' => 'New sub-directory', 'crpr' => 'Create Problem', + 'swit' => 'Switch Server', 'drbx' => 'Drop Box', 'scuf' => 'External Scores (handgrade, upload, clicker)', 'bull' => 'Discussion Board', @@ -6531,9 +6532,10 @@ NROSTFORM NWEBFORM my @ids=&Apache::lonnet::current_machine_ids(); - my %select_menus; + my (%select_menus,$rolehomes); my $numauthor = 0; my $numcrsdirs = 0; + my ($showstdprob,$showswitch,$switchlink); my $toppath = "/priv/$env{'user.domain'}/$env{'user.name'}"; if ($env{'user.author'}) { $numauthor ++; @@ -6550,16 +6552,19 @@ NWEBFORM push(@ordered,$relpath); } $select_menus{'author'}->{'order'} = \@ordered; + $showstdprob = 'block'; } else { + $rolehomes = ''."\n"; $select_menus{'author'}->{'select2'}->{'switch'} = &mt('Switch server required'); $select_menus{'author'}->{'default'} = 'switch'; $select_menus{'author'}->{'order'} = ['switch']; + $showstdprob = 'none'; } } my %roleshash = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles', ['active'],['ca','aa']); my $crshome = $env{'course.'.$env{'request.course.id'}.'.home'}; - my %by_roletype; + my (%by_roletype,%at_home); if (keys(%roleshash)) { foreach my $entry (keys(%roleshash)) { my ($auname,$audom,$roletype) = split(/:/,$entry); @@ -6569,6 +6574,7 @@ NWEBFORM $select_menus{$key}->{'text'} = &Apache::lonnet::plaintext($roletype)." ($audom/$auname)"; my $rolehome = &Apache::lonnet::homeserver($auname,$audom); if (grep(/^\Q$rolehome\E$/,@ids)) { + $at_home{$auname.'___'.$audom} = 1; my $is_home = 1; my (%subdirs,@ordered); my $toppath="/priv/$audom/$auname"; @@ -6582,6 +6588,7 @@ NWEBFORM } $select_menus{$key}->{'order'} = \@ordered; } else { + $rolehomes .= ''."\n"; $select_menus{$key}->{'select2'}->{'switch'} = &mt('Switch server required'); $select_menus{$key}->{'default'} = 'switch'; $select_menus{$key}->{'order'} = ['switch']; @@ -6603,6 +6610,11 @@ NWEBFORM foreach my $author (sort { lc($a) cmp lc($b) } (keys(%{$by_roletype{$possrole}}))) { unless ($defrole) { $defrole = $author; + if ($at_home{$author}) { + $showstdprob = 'block'; + } else { + $showstdprob = 'none'; + } } push(@order,$author.'___'.$possrole); } @@ -6625,6 +6637,7 @@ NWEBFORM } $select_menus{'course'}->{'order'} = \@ordered; } else { + $rolehomes .= ''."\n"; $select_menus{'course'}->{'select2'}->{'switch'} = &mt('Switch server required'); $select_menus{'course'}->{'default'} = 'switch'; $select_menus{'course'}->{'order'} = ['switch']; @@ -6641,13 +6654,14 @@ NWEBFORM $showtitle = 'inline'; if (grep(/^\Q$crshome\E$/,@ids)) { $is_home = 1; + $showstdprob = 'block'; $pickdir .= ''; my $toppath="/priv/$coursedom/$coursenum'}"; my %subdirs; &Apache::lonnet::recursedirs($is_home,'priv',$londocroot,$toppath,'',\%subdirs); $numcrsdirs = keys(%subdirs); if ($numcrsdirs) { - $pickdir .= &mt('Directory: ').''."\n". ''."\n"; foreach my $key (sort { lc($a) cmp lc($b) } (keys(%subdirs))) { $pickdir .= ''."\n"; @@ -6656,8 +6670,30 @@ NWEBFORM } else { $pickdir .= ''."\n"; } + } else { + $showstdprob = 'none'; + $rolehomes .= ''."\n"; + my @order; + $select_menus{'course'}->{'text'} = &mt('Course Resource'); + $select_menus{'course'}->{'select2'}->{'switch'} = &mt('Switch server required'); + $select_menus{'course'}->{'default'} = 'switch'; + $select_menus{'course'}->{'order'} = ['switch']; + push(@order,'course'); + my $defrole; + $pickdir = $lt{'loca'}. + &Apache::loncommon::linked_select_forms('courseresform','
'.$lt{'dire'}, + $defrole,'authorrole','authorpath', + \%select_menus,\@order,'toggleCrsResTitle();', + '','priv').'
'; + $showtitle = 'none'; + } } + if ($showstdprob eq 'none') { + $showswitch = 'block'; + } else { + $showswitch = 'none'; + } my %seltemplate_menus; my @files = &Apache::lonhomework::get_template_list('problem'); @@ -6708,6 +6744,7 @@ NWEBFORM

$pickdir +

$lt{'news'}?    @@ -6743,6 +6780,11 @@ NWEBFORM +
+
+ $rolehomes + +
@@ -7921,7 +7963,20 @@ function toggleCrsResTitle() { } else { document.getElementById('newresource').style.display = 'none'; } - } + } + if (document.getElementById('newstdproblem')) { + if (document.courseresform.authorpath.options[document.courseresform.authorpath.selectedIndex].value == 'switch') { + document.getElementById('newstdproblem').style.display = 'none'; + if (document.getElementById('stdprobswitch')) { + document.getElementById('stdprobswitch').style.display = 'block'; + } + } else { + document.getElementById('newstdproblem').style.display = 'block'; + if (document.getElementById('stdprobswitch')) { + document.getElementById('stdprobswitch').style.display = 'none'; + } + } + } } function toggleNewInCourse(form) { @@ -8019,6 +8074,56 @@ function toggleImportCrsres(caller,dirco } return; } + +function switchForProb() { + if (document.courseresform.authorpath.options[document.courseresform.authorpath.selectedIndex].value == 'switch') { + var url = '/adm/switchserver?otherserver='; + var newhostid = ''; + var role = ''; + var selloc = document.courseresform.authorrole.options[document.courseresform.authorrole.selectedIndex].value; + if (selloc == 'author') { + newhostid = document.courseresform.rolehome_author.value; + role = "au./&js_escape($env{'user.domain'})/"; + } else if (selloc == 'course') { + newhostid = document.courseresform.rolehome_course.value; + role = "&js_escape($env{'request.role'})"; + } else { + var items = new Array(); + items = selloc.split('___'); + var len = document.courseresform.rolehome_coauthor.length; + if (null == len) { + var currval = document.courseresform.rolehome_coauthor.value; + if (null != currval) { + var info = new Array(); + info = currval.split('='); + newhostid = info[2]; + role = info[0]+'./'+info[1]; + } + } else { + for (var i=0; i