--- loncom/interface/lonuserutils.pm	2012/08/21 01:50:34	1.140
+++ loncom/interface/lonuserutils.pm	2012/08/21 15:43:27	1.141
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.140 2012/08/21 01:50:34 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.141 2012/08/21 15:43:27 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2539,6 +2539,12 @@ END
                             if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
                                 $canchangesec{$role} = $env{'request.course.sec'};
                             }
+                        } elsif ((($role eq 'co') && ($crstype eq 'Community')) ||
+                                 (($role eq 'cc') && ($crstype eq 'Course'))) {
+                            if (&is_courseowner($env{'request.course.id'},
+                                                $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'})) {
+                                $canchange{$role} = 1;
+                            }
                         }
                     }
                 }
@@ -2854,17 +2860,26 @@ END
                     if ($showcheckbox) {
                         $checkval = $user; 
                         if ($context eq 'course') {
-                            if ($role eq 'st') {
-                                $checkval .= ':st';
-                            }
-                            $checkval .= ':'.$in{'section'};
-                            if ($role eq 'st') {
-                                $checkval .= ':'.$in{'type'}.':'.
-                                             $in{'lockedtype'};
-                            }
+                            if (($role eq 'co' || $role eq 'cc') &&
+                                ($user =~ /^\Q$env{'user.name'}:$env{'user.domain'}:$role\E/)) {
+                                $showcheckbox = 0;
+                            } else {
+                                if ($role eq 'st') {
+                                    $checkval .= ':st';
+                                }
+                                $checkval .= ':'.$in{'section'};
+                                if ($role eq 'st') {
+                                    $checkval .= ':'.$in{'type'}.':'.
+                                                 $in{'lockedtype'};
+                                }
+                             }
+                        }
+                        if ($showcheckbox) {
+                            $r->print('<td><input type="checkbox" name="'.
+                                      'actionlist" value="'.$checkval.'" /></td>');
+                        } else {
+                            $r->print('<td>&nbsp;</td>');
                         }
-                        $r->print('<td><input type="checkbox" name="'.
-                                  'actionlist" value="'.$checkval.'" /></td>');
                     } else {
                         $r->print('<td>&nbsp;</td>');
                     }
@@ -3110,15 +3125,20 @@ sub select_actions {
     }
     if ($context eq 'course') {
         if ($env{'form.showrole'} ne 'Any') {
-             if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'},
-                                           $env{'request.course.id'})) {
-                 if ($env{'request.course.sec'} eq '') {
-                     return;
-                 } else {
-                     if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'},$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
-                         return;
-                     }
-                 }
+            my $showactions;
+            if (&Apache::lonnet::allowed('c'.$env{'form.showrole'},
+                                          $env{'request.course.id'})) {
+                $showactions = 1;  
+            } elsif ($env{'request.course.sec'} ne '') {
+                if (&Apache::lonnet::allowed('c'.$env{'form.showrole'},$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
+                    $showactions = 1;
+                }
+            }
+            unless ($showactions) {
+                unless (&is_courseowner($env{'request.course.id'},
+                                       $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'})) {
+                    return; 
+                }
             }
         }
     }
@@ -5751,5 +5771,20 @@ sub authcheck_alerts {
     return %alerts;
 }
 
+sub is_courseowner {
+    my ($thiscourse,$courseowner) = @_;
+    if ($courseowner eq '') {
+        if ($env{'request.course.id'} eq $thiscourse) {
+            $courseowner = $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'};
+        }
+    }
+    if ($courseowner ne '') {
+        if ($courseowner eq $env{'user.name'}.':'.$env{'user.domain'}) {
+            return 1;
+        }
+    }
+    return;
+}
+
 1;