--- loncom/interface/lonwhatsnew.pm	2016/10/16 23:19:59	1.119
+++ loncom/interface/lonwhatsnew.pm	2016/11/05 13:37:49	1.121
@@ -1,5 +1,5 @@
 #
-# $Id: lonwhatsnew.pm,v 1.119 2016/10/16 23:19:59 raeburn Exp $
+# $Id: lonwhatsnew.pm,v 1.121 2016/11/05 13:37:49 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -62,14 +62,32 @@ sub handler {
     my $command = $env{'form.command'};
     my $refpage = $env{'form.refpage'};
 
-    my %checkallowed = ( coursenormalmail => 1,
-			 coursecritmail => 1, );
+    my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+    my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+
+    my ($isadhoc,%checkallowed);
+
+    if ($env{'request.role'} =~ m{^(cc|co)/}) {
+        my $rolecode = $1;
+        if ($env{"environment.internal.$cdom.$crs.$env{'request.role'}.adhoc"}) {
+            $isadhoc = 1;
+        }
+    } elsif ($env{'request.role'} =~ m{^cr/$cdom/$cdom\-domainconfig/(\w+)\./}) {
+        my $rolename = $1;
+        if ($env{"environment.internal.$cdom.$crs.cr/$cdom/$cdom-domainconfig/$rolename.adhoc"}) {
+            $isadhoc = 1;
+        }
+    }
+    unless ($isadhoc) {
+        %checkallowed = ( coursenormalmail => 1,
+			  coursecritmail => 1,);
+    }
     foreach my $perm_check (['whn','whatsnew',1],
 			    ['pch','coursediscussion',1],
 			    ['mgr','handgrading',1],
 			    ['vgr','abovethreshold',1],
-			    ['opa','haserrors',1],
-			    ['mdc','versionchanges',0],
+			    ['vgr','haserrors',1],
+			    ['whn','versionchanges',0],
                             ['vcl','newroles',1],
                             ['vcl','oldroles',1],
                             ['whn','crslogin',1],
@@ -157,7 +175,7 @@ sub handler {
             ("What's New?",#'Course_Action_Items_Display'
 	     ));
     }
-    &display_main_box($r,$command,$refpage,\%checkallowed);
+    &display_main_box($r,$command,$refpage,\%checkallowed,$cdom,$crs);
     return OK;
 }
 
@@ -168,7 +186,7 @@ sub handler {
 #------------------------------
                                                                                 
 sub display_main_box {
-    my ($r,$command,$refpage,$checkallowed) = @_;
+    my ($r,$command,$refpage,$checkallowed,$cdom,$crs) = @_;
     my $domain=&Apache::loncommon::determinedomain();
     my $function = &Apache::loncommon::get_users_function();
     my $lctype = lc(&Apache::loncommon::course_type());
@@ -215,13 +233,10 @@ sub display_main_box {
                      userpref => 'your general user preferences',
                      coursespecific => "specific setting for this $lctype",
                    );
-    my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
-    my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
 
     if (($command eq 'chgthreshold') 
 	&& $checkallowed->{'abovethreshold'}) {
-        &display_threshold_config($r,$refpage,\%threshold_titles,
-                                                                   $cdom,$crs);
+        &display_threshold_config($r,$refpage,\%threshold_titles,$cdom,$crs);
     } elsif (($command eq 'chginterval') 
 	     && $checkallowed->{'versionchanges'}) {
         &display_interval_config($r,$refpage,\%interval_titles,'versions');
@@ -574,6 +589,18 @@ sub display_actions_box {
 	    '<br />',$threshold{'numstudents'});
 
     my @actionorder = ('handgrading','haserrors','abovethreshold','versionchanges','coursediscussion','coursenormalmail','coursecritmail','newroles','oldroles','crslogin');
+    my %actioncolumn = (
+                         handgrading      => 'left',
+                         haserrors        => 'left',
+                         abovethreshold   => 'left',
+                         versionchanges   => 'left',
+                         coursediscussion => 'right',
+                         coursenormalmail => 'right',
+                         coursecritmail   => 'right',
+                         newroles         => 'right',
+                         oldroles         => 'right',
+                         crslogin         => 'right',
+                       );
 
     foreach my $key (keys(%{$checkallowed})) {
 	if ($key =~ /_section$/) { next; }
@@ -639,12 +666,13 @@ sub display_actions_box {
             $totalboxes ++;
         }
     }
-    my $halfway = 4;
+    my $currcolumn = 'left';
 #    my $halfway = int($totalboxes/2) + $totalboxes%2;
     foreach my $actionitem (@actionorder) {
-        if ($$checkallowed{$actionitem}) {
-            if ($displayed == $halfway) {
+        if ($checkallowed->{$actionitem}) {
+            if (($actioncolumn{$actionitem} eq 'right') && ($currcolumn eq 'left')) {
                 $r->print('</td><td>&nbsp;</td><td class="LC_right_col" >');
+                $currcolumn = 'right'; 
             }
             &display_launcher($r,$actionitem,$refpage,$checkallowed,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,\%interval,$countunread,\%expired,$expirecount,\%activated,$activecount,$crstype,$itemserror,\%loggedin,$logincount,$classlist);
             $displayed ++; 
@@ -1145,8 +1173,8 @@ sub check_thresholds {
                      <td>'.$stats{$part}{attempts}.'</td>
                      <td>'.$stats{$part}{degdiff}.'</td>
                      <td>'.$lastreset{$part}.'</td>';
-                if ($checkallowed->{'resetcounters'}) {   
-                    $$triggered{$symb}{text}[$partcount] .= 
+                if ($checkallowed->{'resetcounters'}) {
+                    $$triggered{$symb}{text}[$partcount] .=
                         '<td><input type="checkbox" name="'.$resetname.'" />'.
                         '<input type="hidden" name="'.$resettitle.'" value="'.&escape($$triggered{$symb}{title}).'" /></td>';
                 }
@@ -1214,7 +1242,7 @@ sub process_reset {
     my ($dom,$crs,$checkallowed) = @_;
     if (!$checkallowed->{'resetcounters'}) {
         return '<b>'.&mt('You do not the required privileges to reset counters').
-               '</b><br />'; 
+               '</b><br />';
     }
     my $result = '<b>'.&mt('Counters reset for following problems (and parts):').
                            '</b><br />';
@@ -1741,7 +1769,7 @@ sub display_abovethreshold {
                 }
             }
         }
-        if ($checkallowed->{'resetcounters'}) { 
+        if ($checkallowed->{'resetcounters'}) {
             $r->print('<tr class="LC_info_row"><td colspan="7" class="LC_right_item"><br /><input type="button" name="counters" value="'.$lt{'rese'}.'" onclick="javascript:thresholdreset();" /></td></tr>');
         }
     } elsif ($itemserror) {