Annotation of loncom/interface/lonviewcoauthors.pm, revision 1.2

1.1       raeburn     1: # The LearningOnline Network with CAPA
                      2: # Handler to display the coauthors
                      3: #
1.2     ! raeburn     4: # $Id: lonviewcoauthors.pm,v 1.1 2023/11/03 01:12:15 raeburn Exp $
1.1       raeburn     5: #
                      6: # Copyright Michigan State University Board of Trustees
                      7: #
                      8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      9: #
                     10: # LON-CAPA is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either version 2 of the License, or
                     13: # (at your option) any later version.
                     14: #
                     15: # LON-CAPA is distributed in the hope that it will be useful,
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19: #
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with LON-CAPA; if not, write to the Free Software
                     22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     23: #
                     24: # /home/httpd/html/adm/gpl.txt
                     25: #
                     26: # http://www.lon-capa.org/
                     27: #
                     28: ###############################################################
                     29: ##############################################################
                     30: 
                     31: package Apache::lonviewcoauthors;
                     32: 
                     33: use strict;
                     34: use Apache::loncommon();
                     35: use Apache::lonhtmlcommon();
                     36: use Apache::Constants qw(:common :http REDIRECT);
                     37: use Apache::lonlocal;
                     38: use Apache::lonnet;
                     39: use LONCAPA qw(:DEFAULT :match);
                     40: 
                     41: ###################################################################
                     42: ###################################################################
                     43: 
                     44: ###################################################################
                     45: ###################################################################
                     46: 
                     47: =pod
                     48: 
                     49: =item &handler
                     50: 
                     51: The typical handler you see in all these modules.  Takes $r, the
                     52: http request, as an argument.
                     53: 
                     54: =cut
                     55: 
                     56: ###################################################################
                     57: ###################################################################
                     58: sub handler {
                     59:     my $r=shift;
                     60:     if ($r->header_only) {
                     61:         &Apache::loncommon::content_type($r,'text/html');
                     62:         $r->send_http_header;
                     63:         return OK;
                     64:     }
                     65:     my ($role,$audom,$auname,$canview,$canedit,$start_page);
                     66:     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                     67:                                             ['forceedit','state','action','caller']);
                     68: 
                     69:     # Get permissions
                     70:     ($role,$audom,$auname,$canview,$canedit) = &get_allowable();
                     71:     unless ($canview) {
                     72:         $env{'user.error.msg'}=
                     73:             "/adm/viewcoauthors:not in co-author role";
                     74:         return HTTP_NOT_ACCEPTABLE;
                     75:     }
                     76:     &Apache::loncommon::content_type($r,'text/html');
                     77:     $r->send_http_header;
                     78: 
                     79:     # Get view settings
                     80:     my %viewsettings = &retrieve_view_settings($auname,$audom,$role);
                     81: 
                     82:     # Get caller
                     83:     my $caller;
                     84:     if ($env{'form.caller'} eq '/adm/createuser') {
                     85:         $caller = $env{'form.caller'};
                     86:     } else {
                     87:         $caller = '/adm/viewcoauthors';
                     88:     }
                     89: 
                     90:     # Get breadcrumbs
                     91:     my $brcrum = [{'href' => $caller,
                     92:                    'text' => 'Co-author listing'},];
                     93:     if (($canedit) && ($env{'form.forceedit'})) {
                     94:         &get_editor_crumbs($brcrum,$caller);
                     95:     }
                     96: 
                     97:     # Print page header
                     98:     my $args = { 'bread_crumbs' => $brcrum };
                     99:     $r->print(&Apache::loncommon::start_page('Co-authors listing',undef,
                    100:                                              $args));
                    101: 
                    102:     if (($canedit) && ($env{'form.forceedit'})) {
                    103:         $r->print(&edit_settings($audom,$auname,$role,$caller,\%viewsettings));
                    104:     } elsif ($viewsettings{'show'} eq 'none') {
                    105:         $r->print('<h3>'.&mt('Coauthor-viewable listing').'</h3>'.
                    106:                   '<p class="LC_info">'.&mt('Listing of co-authors not enabled for this Authoring Space').'</p>');
                    107:     } else {
                    108:         &print_coauthors($r,$auname,$audom,$role,$caller,\%viewsettings);
                    109:     }
                    110: 
                    111:     # Print page footer
                    112:     $r->print(&Apache::loncommon::end_page());
                    113:     return OK;
                    114: }
                    115: 
                    116: sub get_allowable {
                    117:     my ($role,$audom,$auname,$canview,$canedit);
                    118:     if ($env{'request.role'} =~ m{^(ca|aa)\./($match_domain)/($match_username)$}) {
                    119:         ($role,$audom,$auname) = ($1,$2,$3);
                    120:         if ((&Apache::lonnet::allowed('vca',"$audom/$auname")) ||
                    121:             (&Apache::lonnet::allowed('vaa',"$audom/$auname"))) {
                    122:             if ($env{"environment.internal.manager./$audom/$auname"}) {
                    123:                 $canedit = 1;
                    124:             }
                    125:         }
                    126:         $canview = 1;
                    127:     } elsif ($env{'request.role'} eq "au./$env{'user.domain'}/") {
                    128:         $role = 'au';
                    129:         $auname = $env{'user.name'};
                    130:         $audom = $env{'user.domain'};
                    131:         if ((&Apache::lonnet::allowed('cca',"$audom/$auname")) ||
                    132:             (&Apache::lonnet::allowed('caa',"$audom/$auname"))) {
                    133:             $canedit = 1;
                    134:         }
                    135:         $canview = 1;
                    136:     }
                    137:     return ($role,$audom,$auname,$canview,$canedit);
                    138: }
                    139: 
                    140: sub retrieve_view_settings {
                    141:     my ($auname,$audom,$role) = @_;
                    142:     my %viewsettings;
                    143:     if (($auname ne '') & ($audom ne '')) {
                    144:         if ($role eq 'au') {
                    145:             if (exists($env{'environment.coauthorlist'})) {
                    146:                 $viewsettings{'show'} = $env{'environment.coauthorlist'};
                    147:             }
                    148:             if (exists($env{'environment.coauthoroptin'})) {
                    149:                 $viewsettings{'optin'} = $env{'environment.coauthoroptin'};
                    150:             }
                    151:         } elsif ($env{"environment.internal.coauthorlist./$audom/$auname"} =~ /^(role|all|none)$/) {
                    152:             $viewsettings{'show'} = $env{"environment.internal.coauthorlist./$audom/$auname"};
                    153:             $viewsettings{'optin'} = $env{"environment.internal.coauthoroptin./$audom/$auname"};
                    154:         }
                    155:     }
                    156:     unless ((exists($viewsettings{'show'})) && (exists($viewsettings{'optin'}))) {
                    157:         if ($audom ne '') {
                    158:             my %domconfig =
                    159:                 &Apache::lonnet::get_dom('configuration',['authordefaults'],$audom);
                    160:             my %domdefs;
                    161:             if (ref($domconfig{'authordefaults'}) eq 'HASH') {
                    162:                 if (exists($domconfig{'authordefaults'}{'coauthorlist'})) {
                    163:                     $domdefs{'show'} = $domconfig{'authordefaults'}{'coauthorlist'};
                    164:                 }
                    165:                 if (exists($domconfig{'authordefaults'}{'coauthoroptin'})) {
                    166:                     $domdefs{'optin'} = $domconfig{'authordefaults'}{'coauthoroptin'};
                    167:                 }
                    168:             }
                    169:             unless (exists($viewsettings{'show'})) {
                    170:                 if (exists($domdefs{'show'})) {
                    171:                     $viewsettings{'show'} = $domdefs{'show'};
                    172:                 }
                    173:             }
                    174:             unless (exists($viewsettings{'optin'})) {
                    175:                 if (exists($domdefs{'optin'})) {
                    176:                     $viewsettings{'optin'} = $domdefs{'optin'};
                    177:                 }
                    178:             }
                    179:         }
                    180:     }
                    181:     unless (exists($viewsettings{'show'})) {
                    182:         $viewsettings{'show'} = 'none';
                    183:     }
                    184:     unless (exists($viewsettings{'optin'})) {
                    185:         $viewsettings{'optin'} = '0';
                    186:     }
                    187:     return %viewsettings;
                    188: }
                    189: 
                    190: sub get_editor_crumbs {
                    191:     my ($brcrum,$caller) = @_;
                    192:     my $querystr = '?forceedit=1';
                    193:     if ($caller eq '/adm/createuser') {
                    194:         $querystr .= '&action=calist';
                    195:     }
                    196:     if (ref($brcrum) eq 'ARRAY') {
                    197:         push(@{$brcrum},
                    198:                {'href' => $caller.$querystr,
                    199:                 'text' => 'Configure co-author listing'});
                    200:         if ($env{'form.state'} eq 'setconfig')  {
                    201:             push(@{$brcrum},
                    202:                    {'href' => $caller.$querystr,
                    203:                     'text' => 'Result'});
                    204:         }
                    205:     }
                    206:     return;
                    207: }
                    208: 
                    209: sub edit_settings {
                    210:     my ($audom,$auname,$role,$caller,$settingsref) = @_;
                    211:     my %viewsettings;
                    212:     if (ref($settingsref) eq 'HASH') {
                    213:         %viewsettings = %{$settingsref};
                    214:     } else {
                    215:         %viewsettings = &retrieve_view_settings($auname,$audom,$role);
                    216:     }
                    217:     my %userenv = &Apache::lonnet::userenvironment($audom,$auname,'',
                    218:                                                    'coauthorlist','coauthoroptin');
                    219:     my %titles = &Apache::lonlocal::texthash (
                    220:                    coauthorlist => 'List availability',
                    221:                    coauthoroptin => 'User agreement needed for listing',
                    222:                  );
                    223:     my %options = &Apache::lonlocal::texthash (
                    224:                     role => "List only same type of co-author role as viewer",
                    225:                     all => "List both co-author(s) and assistant co-author(s)",
                    226:                     none => "No listing",
                    227:                   );
                    228:     my %lt = &Apache::lonlocal::texthash (
                    229:                  yes   => 'Yes',
                    230:                  no    => 'No',
                    231:                  slcc  => 'Settings for listing of co-authors changed',
                    232:                  ncms  => 'No changes made to settings for listing of co-authors',
                    233:                  apos  => 'A problem occurred saving your changes.',
                    234:                  cloc  => 'Configure listing of co-authors',
                    235:                  set   => 'Setting',
                    236:                  vale  => 'Value',
                    237:                  sav   => 'Save changes'
                    238:              );
                    239:     my $output;
                    240:     if ($env{'form.state'} eq 'setconfig')  {
                    241:         my (%changed,$message);
                    242:         my ($numchanged,%changes,%disallowed);
                    243:         foreach my $key ('coauthorlist','coauthoroptin') {
                    244:             if ($key eq 'coauthorlist') {
                    245:                 next unless ($env{'form.'.$key} =~ /^all|role|none$/);
                    246:             } elsif ($key eq 'coauthoroptin') {
                    247:                 next unless ($env{'form.'.$key} =~ /^0|1$/);
                    248:             }
                    249:             if ($userenv{$key} ne $env{'form.'.$key}) {
                    250:                 $changed{$key} = $env{'form.'.$key};
                    251:             }
                    252:         }
                    253:         if (keys(%changed)) {
                    254:             my $putres = &Apache::lonnet::put('environment',\%changed,
                    255:                                               $audom,$auname);
                    256:             if ($putres eq 'ok') {
                    257:                 my $author;
                    258:                 if (($audom eq $env{'user.domain'}) && ($auname eq $env{'user.name'})) {
                    259:                     $author = 1;
                    260:                 }
                    261:                 my (%envhash,%newvaltext);
                    262:                 foreach my $key (keys(%changed)) {
                    263:                     if ($author) {
                    264:                         $envhash{"environment.$key"} = $changed{$key};
                    265:                     } else {
                    266:                         $envhash{"environment.internal.$key./$audom/$auname"} = $changed{$key};
                    267:                     }
                    268:                     if ($key eq 'coauthorlist') {
                    269:                         $newvaltext{$key} = $options{$changed{$key}};
                    270:                     } elsif ($key eq 'coauthoroptin') {
                    271:                         $newvaltext{$key} = ($changed{$key}? $lt{'yes'} : $lt{'no'});
                    272:                     }
                    273:                 }
                    274:                 &Apache::lonnet::appenv(\%envhash);
                    275:                 $output = '<h3>'.$lt{'slcc'}.'</h3><ul>';
                    276:                 foreach my $key ('coauthorlist','coauthoroptin') {
                    277:                     if (exists($changed{$key})) {
                    278:                         $output .= '<li>'.
                    279:                                    &mt('[_1] set to "[_2]"',
                    280:                                        $titles{$key},$newvaltext{$key}).
                    281:                                    '</li>';
                    282:                     }
                    283:                 }
                    284:                 $output .= '</ul>';
                    285:             } else {
                    286:                 $output = '<h3>'.$lt{'ncms'}.'</h3>'.
                    287:                           '<p class="LC_warning">'.$lt{'apos'}.'</p>';
                    288:             }
                    289:         } else {
                    290:             $output = '<h3>'.$lt{'ncms'}.'</h3>';
                    291:         }
                    292:     } else {
                    293:         my %sel;
                    294:         foreach my $option (keys(%options)) {
                    295:             if ($option eq $viewsettings{'show'}) {
                    296:                 $sel{$option} = ' selected="selected"';
                    297:             } else {
                    298:                 $sel{$option} = '';
                    299:             }
                    300:         }
                    301:         my ($checkedon,$checkedoff);
                    302:         if ($viewsettings{'optin'}) {
                    303:             $checkedon = ' checked="checked"';
                    304:         } else {
                    305:             $checkedoff = ' checked="checked"';
                    306:         }
                    307:         my $forceedit;
                    308:         if ($env{'form.forceedit'}) {
1.2     ! raeburn   309:             $forceedit = 1;
1.1       raeburn   310:         }
                    311:         my $hiddenaction;
                    312:         if ($caller eq '/adm/createuser') {
                    313:             $hiddenaction = '<input type="hidden" name="action" value="calist" />'."\n";
                    314:         }
                    315:         $output = '<h3>'.$lt{'cloc'}.'</h3>'."\n".
                    316:                   '<form method="post" name="display" action="'.$caller.'">'."\n".
                    317:                   '<input type="hidden" name="caller" value="'.$caller.'" />'."\n".
                    318:                   '<input type="hidden" name="state" value="setconfig" />'."\n".
                    319:                   '<input type="hidden" name="forceedit" value="'.$forceedit.'" />'."\n".
1.2     ! raeburn   320:                   $hiddenaction.
1.1       raeburn   321:                   &Apache::loncommon::start_data_table().
                    322:                   &Apache::loncommon::start_data_table_header_row().
                    323:                   '<th>'.$lt{'set'}.'</th><th>'.$lt{'val'}.'</th>'.
                    324:                   &Apache::loncommon::end_data_table_header_row().
                    325:                   &Apache::loncommon::start_data_table_row().
                    326:                   '<td>'.
                    327:                   $titles{'coauthorlist'}.'</td>'.
                    328:                   '<td><select name="coauthorlist">'.
                    329:                   '<option value="none"'.$sel{'none'}.'>'.$options{'none'}.'</option>'.
                    330:                   '<option value="role"'.$sel{'role'}.'>'.$options{'role'}.'</option>'.
                    331:                   '<option value="all"'.$sel{'all'}.'>'.$options{'all'}.'</option>'.
                    332:                   '</select></td>'.
                    333:                   &Apache::loncommon::end_data_table_row().
                    334:                   &Apache::loncommon::start_data_table_row().
                    335:                   '<td>'.$titles{'coauthoroptin'}.'</td>'.
                    336:                   '<td><span class="LC_nobreak">'.
                    337:                   '<label><input type="radio" name="coauthoroptin" value="0" '.
                    338:                   $checkedoff.' />'.$lt{'no'}.'</label>&nbsp;&nbsp;'.
                    339:                   '<label><input type="radio" name="coauthoroptin" value="1" '.
                    340:                   $checkedon.' />'.$lt{'yes'}.'</label>'.
                    341:                   '</span></td>'.
                    342:                   &Apache::loncommon::end_data_table_row().
                    343:                   &Apache::loncommon::end_data_table().
                    344:                   '<br clear="all" />'.
                    345:                   '<input type="submit" value="'.$lt{'sav'}.'" />'.
                    346:                   '</form>';
                    347:     }
                    348:     return $output;
                    349: }
                    350: 
                    351: sub print_coauthors {
                    352:     my ($r,$auname,$audom,$role,$caller,$settingsref) = @_;
                    353:     my %viewsettings;
1.2     ! raeburn   354:     if (ref($settingsref) eq 'HASH') {
1.1       raeburn   355:         %viewsettings = %{$settingsref};
                    356:     } else {
                    357:         %viewsettings =
                    358:             &Apache::lonviewcoauthors::&retrieve_view_settings($auname,$audom,$role);
                    359:     }
                    360:     my %lt = &Apache::lonlocal::texthash (
                    361:                  cvl => 'Coauthor-viewable listing',
                    362:                  nam => 'Name',
                    363:                  usr => 'Username:Domain',
                    364:                  rol => 'Role(s)',
                    365:                  and => 'and',
                    366:                  utd => 'Unable to determine Authoring Space context',
1.2     ! raeburn   367:              );
1.1       raeburn   368:     if (($auname ne '') && ($audom ne '')) {
                    369:         my (%shownstatus,%coauthors);
                    370:         $r->print("<h3>$lt{'cvl'}</h3>");
                    371:         if ($env{'form.action'} eq 'setenv') {
                    372:             $r->print(&process_coauthor_prefs($auname,$audom,$caller));
                    373:         }
                    374:         if ($viewsettings{'optin'}) {
                    375:             if ($env{'request.role'} =~ /^(ca|aa)/)  {
                    376:                 $r->print(&coauthor_listing_form($auname,$audom,$caller));
                    377:             }
                    378:             %shownstatus = &Apache::lonnet::dump('showncoauthors',$audom,$auname);
                    379:         }
                    380:         my $fullcount = 0;
                    381:         my $viewablecount = 0;
                    382:         my $displaycount = 0;
                    383:         my ($output,$roletype);
                    384:         my @showroles;
                    385:         if ($env{'request.role'} eq "au./$env{'user.domain'}/") {
1.2     ! raeburn   386:             @showroles = ('ca','aa');
1.1       raeburn   387:         } elsif ($viewsettings{'show'} eq 'role') {
                    388:             ($roletype) = ($env{'request.role'} =~ m{^(ca|aa)\./$audom/$auname$});
                    389:             if ($roletype ne '') {
                    390:                 @showroles = ($roletype);
                    391:             }
                    392:         } else {
                    393:             @showroles = ('ca','aa');
                    394:         }
                    395:         my %coauthors = &Apache::lonnet::get_my_roles($auname,$audom,undef,undef,
                    396:                                                       \@showroles,[$audom]);
                    397:         my (%userinfo,%showuser);
                    398:         foreach my $item (keys(%coauthors)) {
                    399:             my ($username,$domain,$userrole) = split(/:/,$item);
                    400:             my ($start,$end) = split(/:/,$coauthors{$item});
                    401:             next if ($start eq '-1' && $end eq '-1');
                    402:             if (ref($userinfo{$username.':'.$domain}) eq 'HASH') {
                    403:                 if (ref($userinfo{$username.':'.$domain}{roles}) eq 'ARRAY') {
                    404:                     unless (grep(/^$userrole$/,@{$userinfo{$username.':'.$domain}{roles}})) {
                    405:                         push(@{$userinfo{$username.':'.$domain}{roles}},$userrole);
                    406:                     }
                    407:                 } else {
                    408:                     $userinfo{$username.':'.$domain}{roles} = [$userrole];
                    409:                 }
                    410:             } else {
1.2     ! raeburn   411:                 $userinfo{$username.':'.$domain}{fullname} =
1.1       raeburn   412:                     &Apache::loncommon::plainname($username,$domain,'lastname');
                    413:                 $userinfo{$username.':'.$domain}{roles} = [$userrole];
                    414:             }
                    415:             if ($viewsettings{'optin'}) {
                    416:                 if ($shownstatus{$username.':'.$domain}) {
                    417:                     $showuser{$username.':'.$domain} = $userinfo{$username.':'.$domain};
                    418:                 }
                    419:             } else {
                    420:                 $showuser{$username.':'.$domain} = $userinfo{$username.':'.$domain};
                    421:             }
                    422:         }
                    423:         $fullcount = scalar(keys(%userinfo));
                    424:         $viewablecount = scalar(keys(%showuser));
                    425:         my @rolenames = map { &Apache::lonnet::plaintext($_); } ('ca','aa');
                    426:         if ($viewsettings{'optin'}) {
                    427:             $displaycount = $viewablecount;
                    428:             if ($fullcount > $viewablecount) {
                    429:                 if ($viewablecount) {
                    430:                     $output = &mt('Only users who have opted to be listed ([_1] out of [_2] users) are shown.',
                    431:                                   $viewablecount,$fullcount).'<br />';
                    432:                 } else {
                    433:                     if ($fullcount == 1) {
                    434:                         if ($roletype) {
                    435:                             $output = &mt('The one user with a [_1] role has opted not to be listed.',
                    436:                                           &Apache::lonnet::plaintext($roletype));
                    437:                         } else {
                    438:                             $output = &mt('The one user with a [_1] or [_2] role has opted not to be listed.',
1.2     ! raeburn   439:                                           $rolenames[0],$rolenames[1]);
1.1       raeburn   440:                         }
                    441:                     } else {
                    442:                         if ($roletype) {
                    443:                             $output = &mt('None of the [_1] users with a [_2] role have opted to be listed.',
                    444:                                           $fullcount,&Apache::lonnet::plaintext($roletype));
                    445:                         } else {
                    446:                             $output = &mt('None of the [_1] users with a [_2] or [_3] role have opted to be listed.',
                    447:                                           $fullcount,$rolenames[0],$rolenames[1]);
                    448:                         }
                    449:                     }
                    450:                 }
                    451:             } else {
                    452:                 if ($fullcount > 1) {
                    453:                     if ($roletype) {
                    454:                         $output = &mt('All [_1] users with a [_2] role have opted to be listed.',
                    455:                                       $fullcount,&Apache::lonnet::plaintext($roletype));
                    456:                     } else {
                    457:                         $output = &mt('All [_1] users with a [_2] or [_3] role have opted to be listed.',
1.2     ! raeburn   458:                                       $fullcount,$rolenames[0],$rolenames[1]);
1.1       raeburn   459:                     }
                    460:                 } elsif ($fullcount == 1) {
                    461:                     if ($roletype) {
                    462:                         $output = &mt('The one user with a [_1] role has opted to be listed.',
                    463:                                        &Apache::lonnet::plaintext($roletype));
                    464:                     } else {
                    465:                         $output = &mt('The one user with a [_1] or [_2] role has opted to be listed.',
                    466:                                       $rolenames[0],$rolenames[1]);
                    467:                     }
                    468:                 } else {
                    469:                     if ($roletype) {
                    470:                         $output = &mt('There are no users with a [_1] role.',
                    471:                                       &Apache::lonnet::plaintext($roletype));
                    472:                     } else {
                    473:                         $output = &mt('There are no users with a [_1] or [_2] role.',
                    474:                                       $rolenames[0],$rolenames[1]);
                    475:                     }
                    476:                 }
                    477:             }
                    478:         } else {
                    479:             $displaycount = $fullcount;
                    480:             if ($fullcount > 1) {
                    481:                 if ($roletype) {
                    482:                     $output = &mt('All [_1] users with a [_2] role are shown.',
                    483:                                   $fullcount,&Apache::lonnet::plaintext($roletype));
                    484:                 } else {
                    485:                     $output = &mt('All [_1] users with a [_2] or [_3] role are shown.',
                    486:                                   $fullcount,$rolenames[0],$rolenames[1]);
                    487:                 }
                    488:             } elsif ($fullcount == 1) {
                    489:                 if ($roletype) {
                    490:                     $output = &mt('The one user with a [_1] role is shown.',
                    491:                                   &Apache::lonnet::plaintext($roletype));
                    492:                 } else {
                    493:                     $output = &mt('The one user with a [_1] or [_2] role is shown.',
                    494:                                   $rolenames[0],$rolenames[1]);
                    495:                 }
                    496:             } else {
                    497:                 if ($roletype) {
                    498:                     $output = &mt('There are no users with a [_1] role.',
                    499:                                   &Apache::lonnet::plaintext($roletype));
                    500:                 } else {
                    501:                     $output = &mt('There are no users with a [_1] or [_2] role.',
                    502:                                   $rolenames[0],$rolenames[1]);
                    503:                 }
                    504:             }
                    505:         }
                    506:         if ($displaycount) {
                    507:             $r->print('<h4>'.$output.'</h4>');
                    508:             my $table = '<br />'.&Apache::loncommon::start_data_table()."\n".
                    509:                         &Apache::loncommon::start_data_table_header_row()."\n".
                    510:                         '<th></th>'. # for the count
                    511:                         '<th>'.$lt{'nam'}.'</th>'.
                    512:                         '<th>'.$lt{'usr'}.'</th>';
                    513:             unless ($roletype) {
                    514:                 $table .= '<th>'.$lt{'rol'}.'</th>';
                    515:             }
                    516:             $table .= &Apache::loncommon::end_data_table_header_row()."\n";
                    517:             my $count = 0;
                    518:             my @sorted = sort {
                    519:                 lc($showuser{$a}{fullname}) cmp lc($showuser{$b}{fullname})
                    520:             } (keys(%showuser));
                    521:             foreach my $user (@sorted) {
                    522:                 my ($username,$domain) = split(/:/,$user);
1.2     ! raeburn   523:                 $count ++;
1.1       raeburn   524:                 $table .= &Apache::loncommon::start_data_table_row()."\n".
                    525:                           '<td>'.$count.'</td>'.
                    526:                           '<td>'.&Apache::loncommon::aboutmewrapper($showuser{$user}{fullname},
                    527:                                                                     $username,$domain).
                    528:                           '</td>'.
                    529:                           '<td>'.&Apache::loncommon::messagewrapper
                    530:                                 ('<img src="/adm/lonIcons/mailto.gif" border="0" />&nbsp;'.
                    531:                                  $user,$username,$domain).
                    532:                           '</td>';
                    533:                 unless ($roletype) {
                    534:                     $table .= '<td>'.
1.2     ! raeburn   535:                               join(" $lt{'and'} ", map { &Apache::lonnet::plaintext($_); }
1.1       raeburn   536:                                    @{$showuser{$user}{roles}}).
                    537:                               '</td>';
                    538:                 }
                    539:                 $table .= &Apache::loncommon::end_data_table_row()."\n";
                    540:             }
                    541:             $table .= &Apache::loncommon::end_data_table()."\n";
                    542:             $r->print($table);
                    543:         } else {
                    544:             $r->print('<div class="LC_info">'.$output.'</div>');
                    545:         }
                    546:     } else {
                    547:         $r->print('<div class="LC_warning"'.$lt{'utd'}.'</div>');
                    548:     }
                    549:     return;
                    550: }
                    551: 
                    552: sub coauthor_listing_form {
                    553:     my ($auname,$audom,$caller) = @_;
                    554:     my $showinlist = $env{"environment.internal.showinlist./$audom/$auname"};
                    555:     my ($showoff,$showon);
                    556:     if ($showinlist) {
                    557:         $showon = ' checked="checked" ';
                    558:         $showoff = ' ';
                    559:     } else {
                    560:         $showoff = ' checked="checked" ';
                    561:         $showon = ' ';
                    562:     }
                    563:     my %lt = &Apache::lonlocal::texthash (
                    564:                  yls => 'Your listing status',
                    565:                  yci => 'You are currently included in the coauthor-viewable listing.',
                    566:                  iyl => 'Include yourself in the listing?',
                    567:                  y   => 'Yes',
                    568:                  n   => 'No',
                    569:                  sav => 'Save changes',
                    570:     );
                    571:     my $output =
                    572:         '<div class="LC_left_float">'
                    573:        .'<fieldset><legend>'.$lt{'yls'}.'</legend>';
                    574:     if ($showinlist) {
                    575:         $output .= $lt{'yci'};
                    576:     } else {
                    577:         $output .=  &mt('You are currently [_1]not[_2] included in the coauthor-viewable listing.','<b>','</b>');
                    578:     }
                    579:     $output .= '<br />'.$lt{'iyl'}.'&nbsp;&nbsp;'.
                    580:         '<form name="coauthorparm" method="post" action="'.$caller.'">'.
                    581:         '<span class="LC_nobreak">'.
                    582:         '<label><input type="radio" name="showinlist" value="1"'.$showon.'/>'.$lt{'y'}.'</label>&nbsp;&nbsp;<label>'.
                    583:         '<input type="radio" name="showinlist" value="0"'.$showoff.'/>'.$lt{'n'}.
                    584:         '</label></span><br /><br />'.
                    585:         '<input type="hidden" name="action" value="setenv" />'.
                    586:         '<input type="submit" name="coauthorsubmit" value="'.$lt{'sav'}.'" />'.
                    587:         '</form></fieldset></div><br clear="all" />';
                    588:     return $output;
                    589: }
                    590: 
                    591: sub process_coauthor_prefs {
                    592:     my ($auname,$audom,$caller) = @_;
                    593:     my $uname = $env{'user.name'};
                    594:     my $udom = $env{'user.domain'};
                    595:     my $user = $uname.':'.$udom;
                    596:     my %shown = &Apache::lonnet::get('showncoauthors',[$user],$audom,$auname);
                    597:     my %lt = &Apache::lonlocal::texthash (
                    598:                  on  => 'on',
                    599:                  off => 'off',
                    600:                  err => 'Error occurred saving display setting.',
                    601:     );
                    602:     my $visibility = $lt{'off'};
                    603:     my $showinlist = $env{'form.showinlist'};
                    604:     if ($showinlist) {
                    605:         $visibility = $lt{'on'};
                    606:     }
                    607:     my $listed = 0;
                    608:     if ($shown{$user}) {
                    609:         $listed = 1;
                    610:     }
                    611: 
                    612:     my $output;
                    613:     if ($listed ne $showinlist) {
                    614:         my %changeHash = (
                    615:             "internal.showinlist./$audom/$auname" => $showinlist,
                    616:         );
                    617:         my $putresult = &Apache::lonnet::put('environment',
                    618:                                              \%changeHash,$udom,$uname);
                    619:         if ($putresult eq 'ok') {
                    620:             &Apache::lonnet::appenv({"environment.internal.showinlist./$audom/$auname" => $showinlist});
                    621:             my $result = &Apache::lonnet::put('showncoauthors',{$user => $showinlist,},$audom,$auname);
                    622:             if ($result eq 'ok') {
                    623:                 $output .=
                    624:                     &Apache::lonhtmlcommon::confirm_success(
                    625:                         &mt("Display of your name in the coauthor-viewable listing set to [_1].",'<b>'.$visibility.'</b>'));
                    626:             } else {
                    627:                 $output .= &Apache::lonhtmlcommon::confirm_success($lt{'err'},1);
                    628:             }
                    629:         } else {
                    630:             $output .= &Apache::lonhtmlcommon::confirm_success($lt{'err'},1);
                    631:         }
                    632:     } else {
                    633:         $output .=
                    634:             &Apache::lonhtmlcommon::confirm_success(
                    635:                 &mt("Display of your name in the coauthor-viewable listing unchanged (set to [_1]).",'<b>'.$visibility.'</b>'));
                    636:     }
                    637:     $output = &Apache::loncommon::confirmwrapper($output);
                    638:     return $output;
                    639: }
                    640: 
                    641: 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>