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

1.1     ! raeburn     1: # The LearningOnline Network with CAPA
        !             2: # Handler to display the coauthors
        !             3: #
        !             4: # $Id: lonviewcoauthors.pm,v 1.1 2023/11/02 20:00:00 raeburn Exp $
        !             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'}) {
        !           309:             $forceedit = 1; 
        !           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".
        !           320:                   $hiddenaction. 
        !           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;
        !           354:     if (ref($settingsref) eq 'HASH') { 
        !           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',
        !           367:              );  
        !           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'}/") {
        !           386:             @showroles = ('ca','aa'); 
        !           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 {
        !           411:                 $userinfo{$username.':'.$domain}{fullname} = 
        !           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.',
        !           439:                                           $rolenames[0],$rolenames[1]);  
        !           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.',
        !           458:                                       $fullcount,$rolenames[0],$rolenames[1]); 
        !           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);
        !           523:                 $count ++; 
        !           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>'.
        !           535:                               join(" $lt{'and'} ", map { &Apache::lonnet::plaintext($_); } 
        !           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>