version 1.80.2.2, 2008/12/16 23:19:19
|
version 1.123, 2014/02/11 17:09:30
|
Line 31 use strict;
|
Line 31 use strict;
|
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
|
use Apache::lonhtmlgateway; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonnavmaps(); |
use Apache::lonnavmaps(); |
use Apache::longroup(); |
use Apache::longroup(); |
Line 54 sub handler {
|
Line 55 sub handler {
|
if (! ($env{'request.course.fn'})) { |
if (! ($env{'request.course.fn'})) { |
# Not in a course |
# Not in a course |
$env{'user.error.msg'}= |
$env{'user.error.msg'}= |
"/adm/coursegroups:mdg:0:0:Cannot edit or view course groups"; |
"/adm/coursegroups:mdg:0:0:Cannot edit or view course/community groups"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
|
|
Line 75 sub handler {
|
Line 76 sub handler {
|
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
|
|
my %functions = ( |
my %functions = ( |
email => 'E-mail', |
email => 'Send Messages', |
discussion => 'Discussion boards', |
discussion => 'Discussion Boards', |
chat => 'Chat', |
chat => 'Chat Room', |
files => 'File repository', |
files => 'Group Portfolio', |
roster => 'Membership roster', |
roster => 'Membership Roster', |
homepage => $ucgpterm.' home page', |
homepage => $ucgpterm.' home page', |
); |
); |
|
|
Line 135 function changeSort(caller) {
|
Line 136 function changeSort(caller) {
|
function openGroupRoster(group,status) { |
function openGroupRoster(group,status) { |
var url = '/adm/grouproster?'; |
var url = '/adm/grouproster?'; |
url += 'group='+group+'&status='+status+'&ref=popup'; |
url += 'group='+group+'&status='+status+'&ref=popup'; |
var title = 'Group Membership'; |
var title = 'Group_Membership'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
options += ',width=700,height=600'; |
options += ',width=700,height=600'; |
rosterbrowser = open(url,title,options,'1'); |
rosterbrowser = open(url,title,options,'1'); |
rosterbrowser.focus(); |
rosterbrowser.focus(); |
}\n|; |
}\n|; |
$r->print(&header('Groups',$jscript,$action,$state)); |
$r->print(&header('My Space',$jscript,$action,$state)); |
if ($env{'form.refpage'} eq 'cusr') { |
if ($env{'form.refpage'} eq 'cusr') { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/createuser", |
({href=>"/adm/createuser", |
Line 170 sub display_groups {
|
Line 171 sub display_groups {
|
my %actionlinks = ( |
my %actionlinks = ( |
modify => '<a href="/adm/coursegroups?action=modify&refpage='. |
modify => '<a href="/adm/coursegroups?action=modify&refpage='. |
$env{'form.refpage'}.'&state=pick_task&groupname=', |
$env{'form.refpage'}.'&state=pick_task&groupname=', |
view => '<a href="/adm/'.$cdom.'/'.$cnum.'/', |
view => '<a href="', |
delete => '<a href="/adm/coursegroups?action=delete&refpage='. |
delete => '<a href="/adm/coursegroups?action=delete&refpage='. |
$env{'form.refpage'}.'&state=verify&groupname=', |
$env{'form.refpage'}.'&state=verify&groupname=', |
reenable => '<a href="/adm/coursegroups?action=reenable&refpage='. |
reenable => '<a href="/adm/coursegroups?action=reenable&refpage='. |
Line 188 sub display_groups {
|
Line 189 sub display_groups {
|
crtd => 'Created', |
crtd => 'Created', |
last => 'Last Modified', |
last => 'Last Modified', |
func => 'Collaborative Tools', |
func => 'Collaborative Tools', |
quot => 'Quota (Mb)', |
quot => 'Quota (MB)', |
memb => 'Members', |
memb => 'Members', |
file => 'Files', |
file => 'Files', |
dibd => 'Discussion Boards', |
dibd => 'Discussion Boards', |
Line 221 sub display_groups {
|
Line 222 sub display_groups {
|
$status); |
$status); |
|
|
if (%curr_groups) { |
if (%curr_groups) { |
|
my $navmap=Apache::lonnavmaps::navmap->new(); |
|
if (!defined($navmap)) { |
|
$r->print('<div class="LC_error">'. |
|
&mt('An error occurred retrieving information about resources in the course.').'<br />'. |
|
&mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','<a href="/adm/roles?selectrole=1&newrole='.$env{'request.role'}.'&orgurl=%2fadm%2fcoursegroups">','</a>'). |
|
'</div>'); |
|
return; |
|
} |
if ($manage_permission) { |
if ($manage_permission) { |
if ($action ne 'reenable') { |
if ($action ne 'reenable') { |
$r->print('<br /><a href="/adm/coursegroups?action=create&refpage='.$env{'form.refpage'}.'">'.$lt{'crng'}.'</a>'); |
$r->print('<br /><a href="/adm/coursegroups?action=create&refpage='.$env{'form.refpage'}.'">'.$lt{'crng'}.'</a>'); |
Line 324 END
|
Line 333 END
|
$action eq 'reenable') { |
$action eq 'reenable') { |
$link .= $group; |
$link .= $group; |
} else { |
} else { |
$link .= $group.'/smppg?ref=grouplist'; |
$link .= |
|
&Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap); |
|
$link .= (($link=~/\?/)?'&':'?').'ref=grouplist'; |
if (exists($env{'form.refpage'})) { |
if (exists($env{'form.refpage'})) { |
$link .= '&refpage='.$env{'form.refpage'}; |
$link .= '&refpage='.$env{'form.refpage'}; |
} |
} |
Line 349 END
|
Line 360 END
|
'<td align="right">'.$quota.'</td>'. |
'<td align="right">'.$quota.'</td>'. |
'<td align="right">'.$totalmembers.'</td>'. |
'<td align="right">'.$totalmembers.'</td>'. |
'<td align="right">'. |
'<td align="right">'. |
'<div class="LC_nobreak">'.&mt('Files: [_1]',$totalfiles).'</div>'. |
'<span class="LC_nobreak">'.&mt('Files: [_1]',$totalfiles).'</span><br />'. |
'<div class="LC_nobreak">'.&mt('Folders: [_1]',$totaldirs).'</div>'. |
'<span class="LC_nobreak">'.&mt('Folders: [_1]',$totaldirs).'</span>'. |
'</td>'. |
'</td>'. |
'<td align="right">'.$boards.'</td>'. |
'<td align="right">'.$boards.'</td>'. |
'<td align="right">'.$diskuse.'</td>'. |
'<td align="right">'.$diskuse.'</td>'. |
Line 386 END
|
Line 397 END
|
$r->print('<br /><br />'); |
$r->print('<br /><br />'); |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
if (%curr_groups) { |
if (%curr_groups) { |
|
my $navmap=Apache::lonnavmaps::navmap->new(); |
|
if (!defined($navmap)) { |
|
$r->print('<div class="LC_error">'. |
|
&mt('An error occurred retrieving information about resources in the course.').'<br />'. |
|
&mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','<a href="/adm/roles?selectrole=1&newrole='.$env{'request.role'}.'&orgurl=%2fadm%2fcoursegroups">','</a>'). |
|
'</div>'); |
|
return; |
|
} |
foreach my $group (@coursegroups) { |
foreach my $group (@coursegroups) { |
my %group_info = &Apache::longroup::get_group_settings( |
my %group_info = &Apache::longroup::get_group_settings( |
$curr_groups{$group}); |
$curr_groups{$group}); |
my $description = &unescape( |
my $description = &unescape( |
$group_info{description}); |
$group_info{description}); |
$r->print('<font size="+1"><a href="/adm/'.$cdom.'/'.$cnum.'/'.$group.'/smppg?ref=grouplist">'.$group,'</a><font><br /><small>'.$description.'</small><br /><br />'); |
my $link = |
|
&Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap). |
|
'&ref=grouplist'; |
|
$r->print('<span style="font-size: larger"><a href="'.$link.'">'.$group,'</a></span><br /><small>'.$description.'</small><br /><br />'); |
} |
} |
} |
} |
} else { |
} else { |
$r->print(&mt('You are not currently a member of any active '.$gpterm.'s in this '.lc($crstype).'.')); |
$r->print( |
|
'<p class="LC_info">' |
|
.&mt('You are not currently a member of any active '.$gpterm.'s' |
|
.' in this '.lc($crstype).'.') |
|
.'</p>' |
|
); |
} |
} |
} |
} |
return; |
return; |
Line 537 sub group_administration {
|
Line 564 sub group_administration {
|
|
|
if (ref($stored{'autorole'}) eq 'ARRAY') { |
if (ref($stored{'autorole'}) eq 'ARRAY') { |
foreach my $role (@{$stored{'autorole'}}) { |
foreach my $role (@{$stored{'autorole'}}) { |
unless ($role eq 'cc') { |
unless (($role eq 'cc') || ($role eq 'co')) { |
$elements{'modify'}{'change_settings'}{'sec_'.$role} = |
$elements{'modify'}{'change_settings'}{'sec_'.$role} = |
'selectbox'; |
'selectbox'; |
} |
} |
Line 785 sub group_administration {
|
Line 812 sub group_administration {
|
} |
} |
var maxposs = '.sprintf("%.2f",$maxposs).'; |
var maxposs = '.sprintf("%.2f",$maxposs).'; |
if (newquota > maxposs) { |
if (newquota > maxposs) { |
alert("The file repository quota you entered for this group ("+newquota+" Mb) exceeds the maximum possible ("+maxposs+" Mb). Please enter a smaller number."); |
alert("The group portfolio quota you entered for this group ("+newquota+" MB) exceeds the maximum possible ("+maxposs+" MB). Please enter a smaller number."); |
return; |
return; |
} |
} |
var re_quota = '.$float_check.'; |
var re_quota = '.$float_check.'; |
Line 804 sub group_administration {
|
Line 831 sub group_administration {
|
} |
} |
} |
} |
if (warn_zero == 1) { |
if (warn_zero == 1) { |
alert("You have indicated that the file repository should be enabled, but you have set the respository quota to 0 Mb.\nThis will prevent any upload of files.\nPlease set a value or disable the repository feature."); |
alert("You have indicated that the group portfolio should be enabled, but you have set the respository quota to 0 MB.\nThis will prevent any upload of files.\nPlease set a value or disable the repository feature."); |
return; |
return; |
} |
} |
} |
} |
Line 915 function changeSort(caller) {
|
Line 942 function changeSort(caller) {
|
result => 'Re-enabled' |
result => 'Re-enabled' |
); |
); |
my %navbuttons = &Apache::lonlocal::texthash( |
my %navbuttons = &Apache::lonlocal::texthash( |
gtns => 'Go to next step', |
gtns => 'Next',#'Go to next step', |
gtps => 'Go to previous step', |
gtps => 'Back',#'Go to previous step', |
crgr => 'Create '.$gpterm, |
crgr => 'Create '.$gpterm, |
mose => 'Modify settings', |
mose => 'Save',#'Modify settings', |
gtpp => 'Go to previous page', |
gtpp => 'Back',#'Go to previous page', |
adme => 'Add members', |
adme => 'Add members', |
); |
); |
if ((($action eq 'create') || ($action eq 'modify') || ($action eq 'delete') || ($action eq 'reenable')) && |
if ((($action eq 'create') || ($action eq 'modify') || ($action eq 'delete') || ($action eq 'reenable')) && |
Line 1086 sub display_control {
|
Line 1113 sub display_control {
|
&add_members_form($r,$cdom,$cnum,$action,$state,$page,$startdate, |
&add_members_form($r,$cdom,$cnum,$action,$state,$page,$startdate, |
$enddate,$groupname,$description,$granularity, |
$enddate,$groupname,$description,$granularity, |
$quota,$sectioncount,$tools,$functions,$stored, |
$quota,$sectioncount,$tools,$functions,$stored, |
$states,$navbuttons,$gpterm,$ucgpterm); |
$states,$navbuttons,$gpterm,$ucgpterm,$crstype); |
} elsif ($state eq 'pick_members') { |
} elsif ($state eq 'pick_members') { |
&choose_members_form($r,$cdom,$cnum,$action,$state,$page, |
&choose_members_form($r,$cdom,$cnum,$action,$state,$page, |
$groupname,$description,$granularity,$quota, |
$groupname,$description,$granularity,$quota, |
Line 1119 sub display_control {
|
Line 1146 sub display_control {
|
my %stored = &retrieve_settings($cdom,$cnum,$groupname,$action); |
my %stored = &retrieve_settings($cdom,$cnum,$groupname,$action); |
if ($state eq 'verify') { |
if ($state eq 'verify') { |
&verify_delete($r,$groupname,$state,$action,$page,$states, |
&verify_delete($r,$groupname,$state,$action,$page,$states, |
\%stored); |
\%stored,$crstype); |
} elsif ($state eq 'result') { |
} elsif ($state eq 'result') { |
&delete_group($r,$cdom,$cnum,$groupname); |
&delete_group($r,$cdom,$cnum,$groupname,$crstype); |
} |
} |
} elsif ($action eq 'reenable') { |
} elsif ($action eq 'reenable') { |
my %stored = &retrieve_settings($cdom,$cnum,$groupname,$action); |
my %stored = &retrieve_settings($cdom,$cnum,$groupname,$action); |
if ($state eq 'verify') { |
if ($state eq 'verify') { |
&verify_reenable($r,$groupname,$state,$action,$page,$states, |
&verify_reenable($r,$groupname,$state,$action,$page,$states, |
\%stored); |
\%stored,$crstype); |
} elsif ($state eq 'result') { |
} elsif ($state eq 'result') { |
&reenable_group($r,$cdom,$cnum,$groupname); |
&reenable_group($r,$cdom,$cnum,$groupname,$crstype); |
} |
} |
} |
} |
} |
} |
|
|
sub verify_delete { |
sub verify_delete { |
my ($r,$groupname,$formname,$action,$page,$states,$stored) = @_; |
my ($r,$groupname,$formname,$action,$page,$states,$stored,$crstype) = @_; |
$r->print(&Apache::lonhtmlcommon::echo_form_input([])); |
$r->print(&Apache::lonhtmlcommon::echo_form_input([])); |
$r->print(&mt('You have requested deletion of the group [_1].' |
$r->print(&mt('You have requested deletion of the group [_1].' |
,'<i>'.$stored->{'description'}.'</i>'). |
,'<i>'.$stored->{'description'}.'</i>'). |
'<br /><br />'.&mt('When a group is deleted the following occurs:').'<ul>'. |
'<br /><br />'.&mt('When a group is deleted the following occurs:').'<ul>'. |
'<li>'.&mt('All group membership is terminated.').'</li>'. |
'<li>'.&mt('All group membership is terminated.').'</li>'. |
'<li>'.&mt('The group ceases to be available either for viewing or for modification of group settings and membership.').'</li>'. |
'<li>'.&mt('The group ceases to be available either for viewing or for modification of group settings and membership.').'</li>'); |
'<li>'.&mt('The group folder is removed from the folder containing it - normally this is the "Course Groups" folder which contains folders for all groups in the course.').'</li>'. |
if ($crstype eq 'Community') { |
'</ul>'.&mt('Although a deleted group is no longer accessible, the group name used for the group will be reserved, and will not be available for assignment to a new group in the same course in the future.')); |
$r->print( '<li>'.&mt("The group folder is removed from the folder containing it - normally this is the 'Community Groups' folder which contains folders for all groups in the community.").'</li>'. |
|
'</ul>'.&mt("Although a deleted group is no longer accessible, the group name used for the group will be reserved, and will not be available for assignment to a new group in the same community in the future.")); |
|
} else { |
|
$r->print( '<li>'.&mt("The group folder is removed from the folder containing it - normally this is the 'Course Groups' folder which contains folders for all groups in the course.").'</li>'. |
|
'</ul>'.&mt("Although a deleted group is no longer accessible, the group name used for the group will be reserved, and will not be available for assignment to a new group in the same course in the future.")); |
|
} |
my $prevtext = &mt('Go back'); |
my $prevtext = &mt('Go back'); |
my $nexttext = &mt('Delete group'); |
my $nexttext = &mt('Delete group'); |
my $prev; |
my $prev; |
Line 1156 sub verify_delete {
|
Line 1188 sub verify_delete {
|
} |
} |
|
|
sub delete_group { |
sub delete_group { |
my ($r,$cdom,$cnum,$groupname) = @_; |
my ($r,$cdom,$cnum,$groupname,$crstype) = @_; |
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, |
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, |
$groupname); |
$groupname); |
my $now = time; |
my $now = time; |
Line 1198 sub delete_group {
|
Line 1230 sub delete_group {
|
.&mt('Group deletion failed because deletion of [_1] out of [_2] members failed.' |
.&mt('Group deletion failed because deletion of [_1] out of [_2] members failed.' |
,$num_fail,$num_users) |
,$num_fail,$num_users) |
.'</div>'); |
.'</div>'); |
|
|
} else { |
} else { |
my ($result,$message) = |
my ($result,$message) = |
&Apache::lonnet::toggle_coursegroup_status($cdom,$cnum, |
&Apache::lonnet::toggle_coursegroup_status($cdom,$cnum, |
$groupname,'delete'); |
$groupname,'delete'); |
if ($result eq 'ok') { |
if ($result eq 'ok') { |
my $outcome = &modify_folders($cdom,$cnum,$groupname); |
my $outcome = &modify_folders($cdom,$cnum,$groupname,$crstype); |
if ($outcome eq '') { |
if ($outcome eq '') { |
$r->print('<div class="LC_success">' |
my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Group successfully deleted.')); |
.&mt('Group successfully deleted.') |
$message = &Apache::loncommon::confirmwrapper($message); |
.'</div>'); |
$r->print($message); |
} else { |
} else { |
$r->print('<div class="LC_error">' |
$r->print('<div class="LC_error">'); |
.&mt("Although the group was deleted, an error occurred when removing" |
if ($crstype eq 'Community') { |
." the group's folder from the 'Course Groups' folder: [_1]",$outcome) |
$r->print(&mt("Although the group was deleted, an error occurred when removing the group's folder from the 'Community Groups' folder: [_1]",$outcome)); |
.'</div>'); |
} else { |
|
$r->print(&mt("Although the group was deleted, an error occurred when removing the group's folder from the 'Course Groups' folder: [_1]",$outcome)); |
|
} |
|
$r->print('</div>'); |
} |
} |
} else { |
} else { |
$r->print('<div class="LC_error">' |
my $msg = &Apache::lonhtmlcommon::confirm_success(&mt('Group deletion failed.'),1); |
.&mt('Group deletion failed.') |
$msg = &Apache::loncommon::confirmwrapper($msg); |
.'</div>'); |
$r->print($msg); |
} |
} |
} |
} |
return; |
return; |
} |
} |
|
|
sub reenable_folder { |
sub reenable_folder { |
my ($cdom,$cnum,$groupname,$description) = @_; |
my ($cdom,$cnum,$groupname,$description,$crstype) = @_; |
my $outcome; |
my $outcome; |
my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; |
my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; |
my $allgrpsmap = $crspath.'group_allfolders.sequence'; |
my $allgrpsmap = $crspath.'group_allfolders.sequence'; |
my $foldertitle = &mt('Course Folder -[_1]',$description); |
my $foldertitle; |
|
if ($crstype eq 'Community') { |
|
$foldertitle = &mt("Community Folder -[_1]",$description); |
|
} else { |
|
$foldertitle = &mt("Course Folder -[_1]",$description); |
|
} |
my $mapurl = $crspath.'group_folder_'. |
my $mapurl = $crspath.'group_folder_'. |
$groupname.'.sequence'; |
$groupname.'.sequence'; |
my ($errtext,$fatal)=&LONCAPA::map::mapread($allgrpsmap); |
my ($errtext,$fatal)=&LONCAPA::map::mapread($allgrpsmap); |
Line 1243 sub reenable_folder {
|
Line 1282 sub reenable_folder {
|
$LONCAPA::map::resources[$idx] = $foldertitle.':'.$mapurl. |
$LONCAPA::map::resources[$idx] = $foldertitle.':'.$mapurl. |
':false:normal:res'; |
':false:normal:res'; |
$LONCAPA::map::order[1+$#LONCAPA::map::order]=$idx; |
$LONCAPA::map::order[1+$#LONCAPA::map::order]=$idx; |
my ($outtext,$errtext) = &LONCAPA::map::storemap($allgrpsmap,1); |
my ($outtext,$errtext) = &LONCAPA::map::storemap($allgrpsmap,1,1); |
if ($errtext) { |
if ($errtext) { |
$outcome='<div class="LC_error">' |
$outcome='<div class="LC_error">' |
.&mt('An error occurred when saving updated parent folder to group:' |
.&mt('An error occurred when saving updated parent folder to group:' |
Line 1258 sub reenable_folder {
|
Line 1297 sub reenable_folder {
|
} |
} |
|
|
sub modify_folders { |
sub modify_folders { |
my ($cdom,$cnum,$groupname) = @_; |
my ($cdom,$cnum,$groupname,$crstype) = @_; |
my $outcome; |
my ($outcome,$groupmap,$groupmapres,$map,$id,$src); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $groupmap = '/uploaded/'.$cdom.'/'.$cnum.'/'.'group_folder_'. |
if (!defined($navmap)) { |
|
$outcome = '<div class="LC_error">'; |
|
if ($crstype eq 'Community') { |
|
$outcome .= &mt("Error reading community contents.").' '. |
|
&mt("You need to re-initialize the community."); |
|
} else { |
|
$outcome .= &mt("Error reading course contents.").' '. |
|
&mt("You need to re-initialize the course."); |
|
} |
|
$outcome .= '</div>'; |
|
return $outcome; |
|
} |
|
$groupmap = '/uploaded/'.$cdom.'/'.$cnum.'/'.'group_folder_'. |
$groupname.'.sequence'; |
$groupname.'.sequence'; |
my $groupmapres = $navmap->getResourceByUrl($groupmap); |
$groupmapres = $navmap->getResourceByUrl($groupmap); |
my ($map,$id,$src); |
|
if ($groupmapres) { |
if ($groupmapres) { |
($map,$id,$src)=&Apache::lonnet::decode_symb($groupmapres->symb()); |
($map,$id,$src)=&Apache::lonnet::decode_symb($groupmapres->symb()); |
} |
} |
Line 1297 sub modify_folders {
|
Line 1347 sub modify_folders {
|
$LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; |
$LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; |
} |
} |
$#LONCAPA::map::order--; |
$#LONCAPA::map::order--; |
my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1); |
my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1,1); |
if ($errtext) { |
if ($errtext) { |
$outcome='<div class="LC_error">' |
$outcome='<div class="LC_error">' |
.&mt('An error occurred when saving updated parent folder to group:') |
.&mt('An error occurred when saving updated parent folder to group:') |
Line 1314 sub modify_folders {
|
Line 1364 sub modify_folders {
|
} |
} |
|
|
sub verify_reenable { |
sub verify_reenable { |
my ($r,$groupname,$formname,$action,$page,$states,$stored) = @_; |
my ($r,$groupname,$formname,$action,$page,$states,$stored,$crstype) = @_; |
$r->print(&Apache::lonhtmlcommon::echo_form_input([])); |
$r->print(&Apache::lonhtmlcommon::echo_form_input([])); |
$r->print(&mt('You have requested enabling the previously deleted group [_1].' |
$r->print(&mt('You have requested enabling the previously deleted group [_1].' |
,'<i>'.$stored->{'description'}.'</i>'). |
,'<i>'.$stored->{'description'}.'</i>'). |
'<br /><br />'.&mt('When a deleted group is re-enabled the following occurs:').'<ul>'. |
'<br /><br />'.&mt('When a deleted group is re-enabled the following occurs:').'<ul>'. |
'<li>'.&mt('Group settings and membership at the time the group was deleted are reinstated.').'</li>'. |
'<li>'.&mt('Group settings and membership at the time the group was deleted are reinstated.').'</li><li>'); |
'<li>'.&mt('A group folder is added to the "Course Groups" folder which contains folders for all groups in the course.').'</li></ul>'); |
if ($crstype eq 'Community') { |
|
$r->print(&mt("A group folder is added to the 'Community Groups' folder which contains folders for all groups in the community.")); |
|
} else { |
|
$r->print(&mt("A group folder is added to the 'Course Groups' folder which contains folders for all groups in the course.")); |
|
} |
|
$r->print('</li></ul>'); |
my $prevtext = &mt('Go back'); |
my $prevtext = &mt('Go back'); |
my $nexttext = &mt('Reenable group'); |
my $nexttext = &mt('Reenable group'); |
my $prev; |
my $prev; |
Line 1333 sub verify_reenable {
|
Line 1388 sub verify_reenable {
|
} |
} |
|
|
sub reenable_group { |
sub reenable_group { |
my ($r,$cdom,$cnum,$groupname) = @_; |
my ($r,$cdom,$cnum,$groupname,$crstype) = @_; |
my %groups = |
my %groups = |
&Apache::longroup::coursegroups($cdom,$cnum,$groupname, |
&Apache::longroup::coursegroups($cdom,$cnum,$groupname, |
'deleted_groups'); |
'deleted_groups'); |
Line 1407 $context) eq 'ok') {
|
Line 1462 $context) eq 'ok') {
|
.&mt('There were no group members to reinstate, as none were removed when the group was deleted.') |
.&mt('There were no group members to reinstate, as none were removed when the group was deleted.') |
.'</div>'); |
.'</div>'); |
} |
} |
my $outcome = &reenable_folder($cdom,$cnum,$groupname,$description); |
my $outcome = &reenable_folder($cdom,$cnum,$groupname,$description,$crstype); |
if ($outcome eq '') { |
if ($outcome eq '') { |
$r->print('<div class="LC_success">' |
my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Group successfully re-enabled.')); |
.&mt('Group successfully re-enabled.') |
$message = &Apache::loncommon::confirmwrapper($message); |
.'</div>'); |
$r->print($message); |
} else { |
} else { |
$r->print('<div class="LC_error">' |
$r->print('<div class="LC_error">'); |
.&mt("Although the group was re-enabled, an error occurred when adding the group's folder to the 'Course Groups' folder: [_1]",$outcome) |
if ($crstype eq 'Community') { |
.'</div>'); |
$r->print(&mt("Although the group was re-enabled, an error occurred when adding the group's folder to the 'Community Groups' folder: [_1]",$outcome)); |
|
} else { |
|
$r->print(&mt("Although the group was re-enabled, an error occurred when adding the group's folder to the 'Course Groups' folder: [_1]",$outcome)); |
|
} |
|
$r->print('</div>'); |
} |
} |
} else { |
} else { |
$r->print('<div class="LC_error">' |
my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Re-enabling group failed.'),1); |
.&mt('Re-enabling group failed.') |
$message = &Apache::loncommon::confirmwrapper($message); |
.'</div>'); |
$r->print($message); |
} |
} |
return; |
return; |
} |
} |
Line 1434 sub header {
|
Line 1493 sub header {
|
{'add_entries' => $loaditems,}); |
{'add_entries' => $loaditems,}); |
my $output = <<"END"; |
my $output = <<"END"; |
$start_page |
$start_page |
<form method="POST" name="$state"> |
<form method="post" name="$state" action=""> |
|
|
END |
END |
if ($action eq 'create' || $action eq 'modify') { |
if ($action eq 'create' || $action eq 'modify') { |
Line 1494 sub build_members_list {
|
Line 1553 sub build_members_list {
|
sub group_files { |
sub group_files { |
my ($group,$portpath,$numfiles,$numdirs) = @_; |
my ($group,$portpath,$numfiles,$numdirs) = @_; |
my $dirptr=16384; |
my $dirptr=16384; |
my @dir_list=&Apache::portfolio::get_dir_list($portpath,undef,$group); |
my ($dirlistref,$listerror) = |
foreach my $line (@dir_list) { |
&Apache::portfolio::get_dir_list($portpath,undef,$group); |
my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); |
if (ref($dirlistref) eq 'ARRAY') { |
if (($filename !~ /^\.\.?$/) && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/) && ($filename ne 'no_such_dir')) { |
foreach my $line (@{$dirlistref}) { |
if ($dirptr&$testdir) { |
my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); |
$portpath .= '/'.$filename; |
if (($filename !~ /^\.\.?$/) && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/) && ($filename ne 'no_such_dir')) { |
$$numdirs ++; |
if ($dirptr&$testdir) { |
&group_files($group,$portpath,$numfiles,$numdirs) |
$portpath .= '/'.$filename; |
} else { |
$$numdirs ++; |
$$numfiles ++; |
&group_files($group,$portpath,$numfiles,$numdirs) |
|
} else { |
|
$$numfiles ++; |
|
} |
} |
} |
} |
} |
} |
} |
Line 1573 sub general_settings_form {
|
Line 1635 sub general_settings_form {
|
&access_date_settings($r,$action,$formname,$stored,2,$gpterm,$ucgpterm); |
&access_date_settings($r,$action,$formname,$stored,2,$gpterm,$ucgpterm); |
if ($action eq 'create') { |
if ($action eq 'create') { |
&membership_options($r,$cdom,$cnum,$action,$formname,$sectioncount,3, |
&membership_options($r,$cdom,$cnum,$action,$formname,$sectioncount,3, |
$gpterm,$ucgpterm); |
$gpterm,$ucgpterm,$crstype); |
$nexttext = $$navbuttons{'gtns'}; |
$nexttext = $$navbuttons{'gtns'}; |
} else { |
} else { |
my @available = (); |
my @available = (); |
Line 1582 sub general_settings_form {
|
Line 1644 sub general_settings_form {
|
@{$tools} = sort(keys(%{$functions})); |
@{$tools} = sort(keys(%{$functions})); |
&privilege_specificity($r,$action,3,$tools,$stored,$toolprivs, |
&privilege_specificity($r,$action,3,$tools,$stored,$toolprivs, |
$fixedprivs,\@available,$formname, |
$fixedprivs,\@available,$formname, |
$gpterm,$ucgpterm); |
$gpterm,$ucgpterm,$functions,$crstype); |
&mapping_options($r,$action,$formname,$page,$sectioncount, |
&mapping_options($r,$action,$formname,$page,$sectioncount, |
$states,$stored,$navbuttons,4,5, |
$states,$stored,$navbuttons,4,5, |
$gpterm,$ucgpterm,$crstype,$cdom,$cnum); |
$gpterm,$ucgpterm,$crstype,$cdom,$cnum); |
Line 1606 sub groupsettings_options {
|
Line 1668 sub groupsettings_options {
|
'lett' => 'Letters, numbers and underscore only', |
'lett' => 'Letters, numbers and underscore only', |
'doyo' => 'Different subsets of the chosen collaborative tools '. |
'doyo' => 'Different subsets of the chosen collaborative tools '. |
'for different group members?', |
'for different group members?', |
|
'gran' => 'Granularity', |
|
'dquo' => 'Disk quota', |
); |
); |
my ($crsquota,$freespace,$maxposs) = &get_quota_constraints($action,$stored); |
my ($crsquota,$freespace,$maxposs) = &get_quota_constraints($action,$stored); |
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'gnde'}).' |
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'gnde'})); |
<table class="LC_descriptive_input"> |
|
<tr> |
# Group Name |
<td class="LC_description">'.$lt{'gnam'}.':</td> |
$r->print(&Apache::lonhtmlcommon::start_pick_box() |
<td colspan="5"> |
.&Apache::lonhtmlcommon::row_title($lt{'gnam'}) |
'); |
); |
if ($action eq 'create') { |
if ($action eq 'create') { |
$r->print('<input type="text" name="groupname" size="25" /> ('. |
$r->print('<input type="text" name="groupname" size="25" />' |
$lt{'lett'}.')'); |
.' <span class="LC_nobreak">(' |
|
.$lt{'lett'}.')</span>' |
|
); |
} else { |
} else { |
$r->print('<input type="hidden" name="groupname" value="'. |
$r->print('<input type="hidden" name="groupname" value="'. |
$env{'form.groupname'}.'" />'.$env{'form.groupname'}); |
$env{'form.groupname'}.'" />'.$env{'form.groupname'}); |
} |
} |
$r->print(<<"END"); |
$r->print(&Apache::lonhtmlcommon::row_closure()); |
</td> |
|
<tr> |
# Group Title |
<tr> |
$r->print(&Apache::lonhtmlcommon::row_title($lt{'desc'}) |
<td class="LC_description">$lt{'desc'}:</td> |
.'<input type="text" name="description" size="40" value="" />' |
<td colspan="5"><input type="text" name="description" size="40" |
.&Apache::lonhtmlcommon::row_closure() |
value="" /> |
); |
</td> |
|
<tr> |
# Collaborative Tools |
<tr> |
|
<td class="LC_description">$lt{'func'}:</td> |
|
END |
|
my $numitems = keys(%{$functions}); |
my $numitems = keys(%{$functions}); |
my $halfnum = int($numitems/2); |
my $halfnum = int($numitems/2); |
my $remnum = $numitems%2; |
my $remnum = $numitems%2; |
Line 1640 END
|
Line 1703 END
|
$halfnum ++; |
$halfnum ++; |
} |
} |
my @allfunctions = sort(keys (%{$functions})); |
my @allfunctions = sort(keys (%{$functions})); |
for (my $i=0; $i<$halfnum; $i++) { |
|
$r->print('<td><label><input type="checkbox" name="tool" value="'. |
$r->print(&Apache::lonhtmlcommon::row_title($lt{'func'}) |
$allfunctions[$i].'" /> '. |
.'<div>' |
$$functions{$allfunctions[$i]}.'</label></td> |
.'<input type="button" value="'.&mt('check all').'"' |
<td> </td><td> </td>'); |
.' onclick="javascript:checkAll(document.'.$formname.'.tool)" />' |
} |
.' <input type="button" value="'.&mt('uncheck all').'"' |
$r->print('<td><input type="button" value="'.&mt('check all').'" '. |
.' onclick="javascript:uncheckAll(document.'.$formname.'.tool)" />' |
'onclick="javascript:checkAll(document.'.$formname.'.tool)" />'. |
.'</div>' |
'</td></tr><tr><td> </td>'); |
.'<table cellpadding="5px"><tr>' # FIXME Get rid of inflexible table (-> float) |
for (my $j=$halfnum; $j<@allfunctions; $j++) { |
); |
$r->print('<td><label><input type="checkbox" name="tool" value="'. |
for (my $i=0; $i<@allfunctions; $i++) { |
$allfunctions[$j].'" /> '. |
$r->print('<td><label><span class="LC_nobreak">' |
$$functions{$allfunctions[$j]}.'</label></td> |
.'<input type="checkbox" name="tool" value="' |
<td> </td><td> </td>'); |
.$allfunctions[$i].'" /> ' |
} |
.&mt($$functions{$allfunctions[$i]}) |
if ($remnum) { |
.'</span></label></td>' |
$r->print('<td> </td>'); |
); |
|
if ($i == $halfnum - 1) { |
|
$r->print('</tr><tr>'); |
|
} |
} |
} |
$r->print(' |
$r->print('</tr></table>' |
<td> |
.&Apache::lonhtmlcommon::row_closure() |
<input type="button" value="'.&mt('uncheck all').'" |
); |
onclick="javascript:uncheckAll(document.'.$formname.'.tool)" /> |
|
</td> |
# Granularity |
</tr> |
$r->print(&Apache::lonhtmlcommon::row_title($lt{'gran'}) |
<tr> |
.$lt{'doyo'}.'<br />' |
<td class="LC_description">'.&mt('Granularity:').'</td> |
.'<label>' |
<td colspan="10">'.$lt{'doyo'}.' <label><input type="radio" name="granularity" value="Yes" />'.&mt('Yes').'</label> <label><input type="radio" name="granularity" value="No" checked="checked" />'.&mt('No').'</label>'); |
.'<input type="radio" name="granularity" value="Yes" />'.&mt('Yes') |
|
.'</label> <label>' |
|
.'<input type="radio" name="granularity" value="No" checked="checked" />'.&mt('No') |
|
.'</label>' |
|
); |
if ($action eq 'modify') { |
if ($action eq 'modify') { |
$r->print(' ('.&mt('Currently set to "[_1]"', |
$r->print(' <span class="LC_nobreak">(' |
&mt($$stored{'granularity'})).')'); |
.&mt('Currently set to [_1].' |
|
,'"'.&mt($$stored{'granularity'}).'"') |
|
.')</span>' |
|
); |
} |
} |
$r->print(' |
$r->print(&Apache::lonhtmlcommon::row_closure()); |
</td> |
|
</tr> |
# Disk Quota |
<tr> |
$r->print(&Apache::lonhtmlcommon::row_title($lt{'dquo'})); |
<td class="LC_description">'.&mt('Disk quota: ').'</td><td colspan="10">'); |
|
if ($action eq 'create') { |
if ($action eq 'create') { |
$r->print(&mt('If you enable the file repository for the '.$gpterm.', allocate a disk quota.')); |
$r->print('<span class="LC_info">' |
|
.&mt('If you enable the group portfolio for the '.$gpterm |
|
.', allocate a disk quota.') |
|
.'</span>' |
|
); |
} else { |
} else { |
$r->print(&mt('Quota allocated to file repository:')); |
$r->print(&mt('Quota allocated to group portfolio:')); |
} |
} |
$r->print(' '.&mt('[_1] Mb','<input type="text" name="quota" size="4" />')); |
$r->print(' '.&mt('[_1] MB','<input type="text" name="quota" size="4" />')); |
if ($action eq 'create') { |
if ($action eq 'create') { |
$r->print('<br />' |
$r->print('<br />' |
.&mt('A total of [_1] Mb can be divided amongst all '.$gpterm.'s in the ' |
.&mt('A total of [_1] MB can be divided amongst all '.$gpterm.'s in the ' |
.lc($crstype).', and [_2] Mb are currently unallocated.' |
.lc($crstype).', and [_2] MB are currently unallocated.' |
,$crsquota,sprintf("%.2f",$freespace)) |
,$crsquota,sprintf("%.2f",$freespace)) |
); |
); |
} else { |
} else { |
$r->print(' ('.&mt('The quota is currently [_1] Mb', |
$r->print(' ('.&mt('The quota is currently [_1] MB', |
$$stored{'quota'}).').'); |
$$stored{'quota'}).').'); |
|
|
$r->print('<br />' |
$r->print('<br />' |
.&mt('The quota can be increased to [_1] Mb, ' |
.&mt('The quota can be increased to [_1] MB, ' |
.'by adding all unallocated space for '.$gpterm.'s in the '.lc($crstype).'.' |
.'by adding all unallocated space for '.$gpterm.'s in the '.lc($crstype).'.' |
,sprintf("%.2f",$maxposs))); |
,sprintf("%.2f",$maxposs))); |
} |
} |
$r->print(' |
$r->print(&Apache::lonhtmlcommon::row_closure(1)); |
</td> |
|
</tr> |
$r->print(&Apache::lonhtmlcommon::end_pick_box()); |
</table> |
|
'); |
|
return; |
return; |
} |
} |
|
|
Line 1722 sub get_quota_constraints {
|
Line 1797 sub get_quota_constraints {
|
} |
} |
|
|
sub membership_options { |
sub membership_options { |
my ($r,$cdom,$cnum,$action,$state,$sectioncount,$image,$gpterm,$ucgpterm)=@_; |
my ($r,$cdom,$cnum,$action,$state,$sectioncount,$image,$gpterm,$ucgpterm,$crstype)=@_; |
my $crstype = &Apache::loncommon::course_type(); |
|
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'pipa' => 'Build a list of users for selection of group members', |
'pipa' => 'Build a list of users for selection of group members', |
'gmem' => "Group membership selection list criteria:", |
'gmem' => 'Group membership selection list criteria:', |
'picr' => 'Pick the criteria to use to build a list of '. |
'picr' => 'Pick the criteria to use to build a list of course users from which you will select members of the new group.', |
lc($crstype).' users from which you will select ', |
'pica' => 'Pick the criteria to use to build a list of course users from which you will select additional members of the group.', |
'meof' => "members of the new group.", |
'ifno' => 'If you do not wish to add members when you first create the group, there is no need to pick any criteria.', |
'admg' => "additional members of the group.", |
|
'ifno' => "If you do not wish to add members when you first ". |
|
"create the group, there is no need to pick any criteria.", |
|
'asub' => "A subsequent step will also allow you to specify automatic adding/dropping of group members triggered by specified user role and section <i>changes</i> in the course.", |
|
'acty' => 'Access types', |
'acty' => 'Access types', |
'coro' => $crstype.' roles', |
'coro' => 'Course roles', |
'cose' => $crstype.' sections', |
'cose' => 'Course sections', |
); |
); |
|
if ($crstype eq 'Community') { |
|
$lt{'picr'} = &mt('Pick the criteria to use to build a list of community participants from which you will select '); |
|
$lt{'asub'} = &mt('A subsequent step will also allow you to specify automatic adding/dropping of group members triggered by specified user role and section [_1]changes[_2] in the course.','<i>','</i>'); |
|
$lt{'coro'} = &mt('Community roles'); |
|
$lt{'cose'} = &mt('Community sections'); |
|
} else { |
|
$lt{'asub'} = &mt('A subsequent step will also allow you to specify automatic adding/dropping of group members triggered by specified user role and section [_1]changes[_2] in the course.','<i>','</i>'); |
|
} |
my %status_types = ( |
my %status_types = ( |
active => &mt('Currently has access'), |
active => &mt('Currently has access'), |
previous => &mt('Previously had access'), |
previous => &mt('Previously had access'), |
future => &mt('Will have future access'), |
future => &mt('Will have future access'), |
); |
); |
|
|
my @roles = ('st','cc','in','ta','ep','cr'); |
my @roles = ('st'); |
|
if ($crstype eq 'Community') { |
|
push(@roles,'co'); |
|
} else { |
|
push(@roles,'cc'); |
|
} |
|
push (@roles,('in','ta','ep','ad','cr')); |
|
|
my @sections = keys(%{$sectioncount}); |
my @sections = keys(%{$sectioncount}); |
|
|
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'pipa'}).' |
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'pipa'}).' |
<b>'.$lt{'gmem'}.'</b><br />'.$lt{'picr'}); |
<b>'.$lt{'gmem'}.'</b><br />'); |
if ($action eq 'create') { |
if ($action eq 'create') { |
$r->print($lt{'meof'}.'<br />'.$lt{'ifno'}.'<br />'.$lt{'asub'}); |
$r->print($lt{'picr'}.'<br />'.$lt{'ifno'}.'<br />'.$lt{'asub'}); |
} else { |
} else { |
$r->print($lt{'admg'}); |
$r->print($lt{'pica'}); |
} |
} |
$r->print(' |
$r->print(' |
<br /> |
<br /> |
Line 1798 sub sections_selection {
|
Line 1882 sub sections_selection {
|
} |
} |
} |
} |
my $output = ' |
my $output = ' |
<select name="'.$elementname.'" multiple="true" size="'.$numvisible.'"> |
<select name="'.$elementname.'" multiple="multiple" size="'.$numvisible.'"> |
'.$section_sel.' |
'.$section_sel.' |
</select>'; |
</select>'; |
return $output; |
return $output; |
Line 1869 sub choose_members_form {
|
Line 1953 sub choose_members_form {
|
} |
} |
} |
} |
&privilege_specificity($r,$action,$specimg,$tools,$stored,$toolprivs, |
&privilege_specificity($r,$action,$specimg,$tools,$stored,$toolprivs, |
$fixedprivs,\@available,$formname,$gpterm,$ucgpterm); |
$fixedprivs,\@available,$formname,$gpterm,$ucgpterm, |
|
$functions,$crstype); |
my $newusers = &pick_new_members($r,$action,$formname,\@available,$idx, |
my $newusers = &pick_new_members($r,$action,$formname,\@available,$idx, |
$stored,$memimg,$users,$userdata, |
$stored,$memimg,$users,$userdata, |
$granularity,\%origmembers,$gpterm, |
$granularity,\%origmembers,$gpterm, |
Line 1932 sub print_current_settings {
|
Line 2017 sub print_current_settings {
|
dfac => 'Default access dates', |
dfac => 'Default access dates', |
ygrs => "Your group selections - ", |
ygrs => "Your group selections - ", |
tfwa => "The following settings will apply to the group:", |
tfwa => "The following settings will apply to the group:", |
difn => 'Different collaborative tools<br />for different members:', |
|
stda => 'Start date:', |
stda => 'Start date:', |
enda => 'End date:', |
enda => 'End date:', |
); |
); |
|
$lt{'difn'} = &mt('Different collaborative tools[_1]for different members:','<br />'); |
my $showstart = &Apache::lonlocal::locallocaltime($startdate); |
my $showstart = &Apache::lonlocal::locallocaltime($startdate); |
my $showend; |
my $showend; |
if ($enddate == 0) { |
if ($enddate == 0) { |
Line 1966 sub print_current_settings {
|
Line 2051 sub print_current_settings {
|
<td valign="top">'.$description.'</td> |
<td valign="top">'.$description.'</td> |
<td> |
<td> |
'); |
'); |
|
|
if (@{$available} > 0) { |
if (@{$available} > 0) { |
$r->print('<b>'.&mt('Available for assignment to members:').'</b>'. |
$r->print('<b>'.&mt('Available for assignment to members:').'</b>'); |
'<table class="LC_group_priv"><tr>'); |
$r->print('<ul>'); |
my $rowcell = int(@{$available}/2) + @{$available}%2; |
|
for (my $i=0; $i<@{$available}; $i++) { |
for (my $i=0; $i<@{$available}; $i++) { |
if (@{$available} > 3) { |
$r->print('<li>'.&mt($$functions{$$available[$i]}).'</li>'); |
if ($i==$rowcell) { |
|
$r->print('</tr><tr>'); |
|
} |
|
} |
|
$r->print('<td>'.$$functions{$$available[$i]}. |
|
'</td><td> </td>'); |
|
} |
|
if ((@{$available} > 3) && (@{$available}%2)) { |
|
$r->print('<td> </td><td> </td>'); |
|
} |
} |
$r->print('</tr></table><br />'); |
$r->print('</ul>'); |
} |
} |
|
|
if (@{$unavailable} > 0) { |
if (@{$unavailable} > 0) { |
$r->print('<b>'.&mt('Unavailable for assignment:').'</b>'. |
$r->print('<b>'.&mt('Unavailable for assignment:').'</b>'); |
'<table class="LC_group_priv"><tr>'); |
$r->print('<ul>'); |
my $rowcell = int(@{$unavailable}/2) + @{$unavailable}%2; |
for (my $i=0; $i<@{$unavailable}; $i++) { |
for (my $j=0; $j<@{$unavailable}; $j++) { |
$r->print('<li>'.&mt($$functions{$$unavailable[$i]}).'</li>'); |
if (@{$unavailable} > 3) { |
|
if ($j==$rowcell) { |
|
$r->print('</tr><tr>'); |
|
} |
|
} |
|
$r->print('<td>'.$$functions{$$unavailable[$j]}. |
|
'</td><td> </td>'); |
|
} |
|
if ((@{$unavailable} > 3) && (@{$unavailable}%2)) { |
|
$r->print('<td> </td><td> </td>'); |
|
} |
} |
$r->print('</tr></table>'); |
$r->print('</ul>'); |
} |
} |
my $quota_text=&mt('[_1] Mb',$quota); |
|
|
my $quota_text=&mt('[_1] MB',$quota); |
my $granu_text=&mt($granularity); |
my $granu_text=&mt($granularity); |
$r->print(<<"END"); |
$r->print(<<"END"); |
</td> |
</td> |
Line 2064 sub pick_new_members {
|
Line 2132 sub pick_new_members {
|
&check_uncheck_buttons($r,$formname,'member',$lt{'addm'}); |
&check_uncheck_buttons($r,$formname,'member',$lt{'addm'}); |
if (@{$available} > 0 && $granularity eq 'Yes') { |
if (@{$available} > 0 && $granularity eq 'Yes') { |
$r->print('<td> |
$r->print('<td> |
<fieldset><legend><b>'.$lt{'setf'}.'</b></legend> |
<fieldset><legend>'.$lt{'setf'}.'</legend> |
<span class="LC_nobreak"> |
<span class="LC_nobreak"> |
<input type="button" value="'.&mt('check all').'" |
<input type="button" value="'.&mt('check all').'" |
onclick="javascript:checkAllTools(document.'.$formname.')" /> |
onclick="javascript:checkAllTools(document.'.$formname.')" /> |
Line 2163 sub pick_new_members {
|
Line 2231 sub pick_new_members {
|
|
|
sub privilege_specificity { |
sub privilege_specificity { |
my ($r,$action,$img,$tools,$stored,$toolprivs,$fixedprivs,$available, |
my ($r,$action,$img,$tools,$stored,$toolprivs,$fixedprivs,$available, |
$formname,$gpterm,$ucgpterm) = @_; |
$formname,$gpterm,$ucgpterm,$functions,$crstype) = @_; |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
'uprv' => 'User privileges for collaborative tools', |
'uprv' => 'User privileges for collaborative tools', |
'frty' => 'For each collaborative tool you have chosen to include, '. |
'frty' => 'For each collaborative tool you have chosen to include, '. |
Line 2192 sub privilege_specificity {
|
Line 2260 sub privilege_specificity {
|
"for users who receive specific sections/roles in the course ", |
"for users who receive specific sections/roles in the course ", |
'asyo' => "As you have chosen not to include any collaborative tools ". |
'asyo' => "As you have chosen not to include any collaborative tools ". |
"in the group, no default optional privileges need to be set.", |
"in the group, no default optional privileges need to be set.", |
'plin' => 'Indicate which <b>optional</b> privileges members '. |
|
'will receive by default for a specific tool.', |
'will receive by default for a specific tool.', |
'oppr' => 'Optional privileges', |
'oppr' => 'Optional privileges', |
'defp' => 'The default privileges new members will receive are:', |
'defp' => 'The default privileges new members will receive are:', |
); |
); |
|
$lt{'plin'} = &mt('Indicate which [_1]optional[_2] privileges members '. |
|
'will receive by default for a specific tool.','<b>','</b>'); |
|
if ($crstype eq 'Community') { |
|
$lt{'thes'} = &mt('These will be the privileges given to members assigned in the future via automatic group assignment for users who receive specific sections/roles in the community '); |
|
} |
my $totaloptionalprivs = 0; |
my $totaloptionalprivs = 0; |
foreach my $tool (@{$tools}) { |
foreach my $tool (@{$tools}) { |
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) { |
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) { |
Line 2260 sub privilege_specificity {
|
Line 2332 sub privilege_specificity {
|
$r->print($lt{'algm'}.'<br /><br />'); |
$r->print($lt{'algm'}.'<br /><br />'); |
} |
} |
&default_privileges($r,$action,$tools,$toolprivs,$fixedprivs, |
&default_privileges($r,$action,$tools,$toolprivs,$fixedprivs, |
$available); |
$available,$functions); |
} else { |
} else { |
if ($action eq 'create') { |
if ($action eq 'create') { |
$r->print($lt{'asyo'}); |
$r->print($lt{'asyo'}); |
Line 2284 sub privilege_specificity {
|
Line 2356 sub privilege_specificity {
|
} |
} |
|
|
sub default_privileges { |
sub default_privileges { |
my ($r,$action,$tools,$toolprivs,$fixedprivs,$available) = @_; |
my ($r,$action,$tools,$toolprivs,$fixedprivs,$available,$functions) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'addp' => 'Additional privileges', |
'addp' => 'Additional privileges', |
'fixp' => 'Fixed privileges', |
'fixp' => 'Fixed privileges', |
Line 2293 sub default_privileges {
|
Line 2365 sub default_privileges {
|
); |
); |
$r->print(&Apache::lonhtmlcommon::start_pick_box('LC_group_priv_box'). |
$r->print(&Apache::lonhtmlcommon::start_pick_box('LC_group_priv_box'). |
&Apache::lonhtmlcommon::row_title($lt{'func'},undef, |
&Apache::lonhtmlcommon::row_title($lt{'func'},undef, |
'LC_groups_functionality')); |
'LC_groups_functionality')); |
$r->print(join('</td><td class="LC_groups_functionality">',@{$tools})); |
my @tableHeader; |
|
if ((ref($functions) eq 'HASH') && (ref($tools) eq 'ARRAY')) { |
|
@tableHeader = map { $functions->{$_}; } @{$tools}; |
|
} |
|
$r->print(join('</td><td class="LC_groups_functionality">', @tableHeader)); |
$r->print(&Apache::lonhtmlcommon::row_closure(1)); |
$r->print(&Apache::lonhtmlcommon::row_closure(1)); |
my $fixed = ''; |
my $fixed = ''; |
my $dynamic = ''; |
my $dynamic = ''; |
Line 2310 sub default_privileges {
|
Line 2386 sub default_privileges {
|
$fixed .= '</td><td class="LC_groups_fixed">'; |
$fixed .= '</td><td class="LC_groups_fixed">'; |
} |
} |
$fixed .= '<input type="hidden" name="defpriv" value="'.$priv.'" />' |
$fixed .= '<input type="hidden" name="defpriv" value="'.$priv.'" />' |
.'<span class="LC_nobreak">'.$$toolprivs{$tool}{$priv}.' '; |
.'<span class="LC_nobreak">'.&mt($$toolprivs{$tool}{$priv}).' '; |
if ($action eq 'modify') { |
if ($action eq 'modify') { |
if (grep(/^$tool$/,@{$available})) { |
if (grep(/^$tool$/,@{$available})) { |
$fixed .= '<small>'.&mt('(on)').'<small> '; |
$fixed .= '<small>'.&mt('(on)').'<small> '; |
Line 2325 sub default_privileges {
|
Line 2401 sub default_privileges {
|
$dynamic .= '</tr> |
$dynamic .= '</tr> |
<tr>'."\n"; |
<tr>'."\n"; |
} |
} |
$dynamic .= '<td><span class="LC_nobreak"><label><input type="checkbox" name="defpriv" value="'.$priv.'" />'.$$toolprivs{$tool}{$priv}.'</label></span></td>'."\n"; |
$dynamic .= '<td><span class="LC_nobreak"><label><input type="checkbox" name="defpriv" value="'.$priv.'" />'.&mt($$toolprivs{$tool}{$priv}).'</label></span></td>'."\n"; |
} |
} |
} |
} |
if ($privcount == 0) { |
if ($privcount == 0) { |
Line 2473 sub current_membership {
|
Line 2549 sub current_membership {
|
'actn' => 'Action?', |
'actn' => 'Action?', |
'name' => 'Name', |
'name' => 'Name', |
'usnm' => 'Username', |
'usnm' => 'Username', |
|
'stid' => 'ID', |
'doma' => 'Domain', |
'doma' => 'Domain', |
'stda' => 'Start Date', |
'stda' => 'Start Date', |
'enda' => 'End Date', |
'enda' => 'End Date', |
Line 2510 sub current_membership {
|
Line 2587 sub current_membership {
|
$r->print(' |
$r->print(' |
<td> |
<td> |
<span class="LC_nobreak"> |
<span class="LC_nobreak"> |
<fieldset><legend><b>'.$lt{'curf'}.'</b></legend> |
<fieldset><legend>'.$lt{'curf'}.'</legend> |
<input type="button" value="'.&mt('check all').'" |
<input type="button" value="'.&mt('check all').'" |
onclick="javascript:checkAllTools(document.'.$formname.')" /> |
onclick="javascript:checkAllTools(document.'.$formname.')" /> |
|
|
Line 2534 END
|
Line 2611 END
|
<th><a href="javascript:changeSort('fullname')">$lt{'name'}</a></th> |
<th><a href="javascript:changeSort('fullname')">$lt{'name'}</a></th> |
<th><a href="javascript:changeSort('username')">$lt{'usnm'}</a></th> |
<th><a href="javascript:changeSort('username')">$lt{'usnm'}</a></th> |
<th><a href="javascript:changeSort('domain')">$lt{'doma'}</a></th> |
<th><a href="javascript:changeSort('domain')">$lt{'doma'}</a></th> |
<th><a href="javascript:changeSort('id')">ID</a></th> |
<th><a href="javascript:changeSort('id')">$lt{'ID'}</a></th> |
<th><a href="javascript:changeSort('start')">$lt{'stda'}</a></th> |
<th><a href="javascript:changeSort('start')">$lt{'stda'}</a></th> |
<th><a href="javascript:changeSort('end')">$lt{'enda'}</a></th> |
<th><a href="javascript:changeSort('end')">$lt{'enda'}</a></th> |
END |
END |
Line 2658 END
|
Line 2735 END
|
} |
} |
$r->print(&Apache::loncommon::end_data_table()); |
$r->print(&Apache::loncommon::end_data_table()); |
} else { |
} else { |
$r->print(&mt('There are no active, future or previous group members to modify.')); |
$r->print( |
|
'<p class="LC_info">' |
|
.&mt('There are no active, future or previous group members to modify.') |
|
.'</p>'); |
} |
} |
return $numcurrent; |
return $numcurrent; |
} |
} |
Line 2668 sub check_uncheck_buttons {
|
Line 2748 sub check_uncheck_buttons {
|
$r->print(' |
$r->print(' |
<td '.$colspan.'> |
<td '.$colspan.'> |
<fieldset> |
<fieldset> |
<legend><b>'.$title.'</b></legend> |
<legend>'.$title.'</legend> |
<span class="LC_nobreak"> |
<span class="LC_nobreak"> |
<input type="button" value="'.&mt('check all').'" |
<input type="button" value="'.&mt('check all').'" |
onclick="javascript:checkAll(document.'.$formname.'.'.$field.')" /> |
onclick="javascript:checkAll(document.'.$formname.'.'.$field.')" /> |
Line 2726 sub change_privs_form {
|
Line 2806 sub change_privs_form {
|
} |
} |
} |
} |
if (!$exp_or_del) { |
if (!$exp_or_del) { |
$r->print($lt{'nome'}.'<br />'); |
$r->print('<p class="LC_info">'.$lt{'nome'}.'</p>'); |
} |
} |
|
|
$r->print(&Apache::lonhtmlcommon::topic_bar(4,&mt('Setting optional privileges for specific group members'))); |
$r->print(&Apache::lonhtmlcommon::topic_bar(4,&mt('Setting optional privileges for specific group members'))); |
Line 2748 sub change_privs_form {
|
Line 2828 sub change_privs_form {
|
sub add_members_form { |
sub add_members_form { |
my ($r,$cdom,$cnum,$action,$formname,$page,$startdate,$enddate,$groupname, |
my ($r,$cdom,$cnum,$action,$formname,$page,$startdate,$enddate,$groupname, |
$description,$granularity,$quota,$sectioncount,$tools,$functions, |
$description,$granularity,$quota,$sectioncount,$tools,$functions, |
$stored,$states,$navbuttons,$gpterm,$ucgpterm)=@_; |
$stored,$states,$navbuttons,$gpterm,$ucgpterm,$crstype)=@_; |
$r->print(' <br />'); |
$r->print(' <br />'); |
my @available = (); |
my @available = (); |
my @unavailable = (); |
my @unavailable = (); |
Line 2757 sub add_members_form {
|
Line 2837 sub add_members_form {
|
$groupname,$description,$granularity,$quota, |
$groupname,$description,$granularity,$quota, |
\@available,\@unavailable,$gpterm,$ucgpterm); |
\@available,\@unavailable,$gpterm,$ucgpterm); |
&membership_options($r,$cdom,$cnum,$action,$formname,$sectioncount,1,$gpterm, |
&membership_options($r,$cdom,$cnum,$action,$formname,$sectioncount,1,$gpterm, |
$ucgpterm); |
$ucgpterm,$crstype); |
my $nexttext = $$navbuttons{'gtns'}; |
my $nexttext = $$navbuttons{'gtns'}; |
my $prevtext = $$navbuttons{'gtpp'}; |
my $prevtext = $$navbuttons{'gtpp'}; |
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext, |
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext, |
Line 2952 sub member_privileges_form {
|
Line 3032 sub member_privileges_form {
|
foreach my $tool (@{$tools}) { |
foreach my $tool (@{$tools}) { |
if (@{$showboxes{$tool}} > 0) { |
if (@{$showboxes{$tool}} > 0) { |
$r->print('<td valign="top">'); |
$r->print('<td valign="top">'); |
$r->print('<table class="thinborder"><tr>'. |
$r->print('<fieldset><legend>'.&mt($tool).'</legend>'); |
'<th colspan="'.$colspan.'">'. |
$r->print('<table><tr>'); |
&mt($tool).'</th></tr><tr>'); |
|
my $privcount = 0; |
my $privcount = 0; |
foreach my $priv (@{$showboxes{$tool}}) { |
foreach my $priv (@{$showboxes{$tool}}) { |
$privcount ++; |
$privcount ++; |
Line 2969 sub member_privileges_form {
|
Line 3048 sub member_privileges_form {
|
$r->print('<td>'); |
$r->print('<td>'); |
} |
} |
$r->print( |
$r->print( |
'<fieldset><legend><b>'.&mt($$toolprivs{$tool}{$priv}).'</b></legend>' |
'<fieldset><legend>'.&mt($$toolprivs{$tool}{$priv}).'</legend>' |
.'<span class="LC_nobreak">' |
.'<span class="LC_nobreak">' |
.' <input type="button" value="'.&mt('check all').'"' |
.' <input type="button" value="'.&mt('check all').'"' |
.' onclick="javascript:checkAll(document.'.$formname.'.userpriv_'.$priv.')" />' |
.' onclick="javascript:checkAll(document.'.$formname.'.userpriv_'.$priv.')" />' |
Line 2989 sub member_privileges_form {
|
Line 3068 sub member_privileges_form {
|
} |
} |
} |
} |
} |
} |
$r->print('</tr></table></td><td> </td>'); |
$r->print('</tr></table></fieldset></td><td> </td>'); |
} |
} |
} |
} |
$r->print('</tr></table>'); |
$r->print('</tr></table>'); |
Line 3089 sub process_request {
|
Line 3168 sub process_request {
|
&process_membership($r,$cdom,$cnum,$action,$state,$groupname,$tools, |
&process_membership($r,$cdom,$cnum,$action,$state,$groupname,$tools, |
$enddate,$startdate,$userdata,$idx,$toolprivs, |
$enddate,$startdate,$userdata,$idx,$toolprivs, |
$usertools,$specificity,\@defprivs,$memchg,$gpterm, |
$usertools,$specificity,\@defprivs,$memchg,$gpterm, |
$ucgpterm); |
$ucgpterm,$crstype); |
} |
} |
return; |
return; |
} |
} |
Line 3122 sub write_group_data {
|
Line 3201 sub write_group_data {
|
if ($quota !~ /^\d*\.?\d*$/) { |
if ($quota !~ /^\d*\.?\d*$/) { |
$quota = 0; |
$quota = 0; |
$r->print('<div class="LC_warning">' |
$r->print('<div class="LC_warning">' |
.&mt('The value you entered for the quota for the file repository in this '.$gpterm |
.&mt('The value you entered for the quota for the group portfolio in this '.$gpterm |
.' contained invalid characters, so it has been set to 0 Mb. You can change this by' |
.' contained invalid characters, so it has been set to 0 MB. You can change this by' |
.' modifying the '.$gpterm.' settings.') |
.' modifying the '.$gpterm.' settings.') |
.'</div>'); |
.'</div>'); |
} |
} |
if ($quota > $maxposs) { |
if ($quota > $maxposs) { |
$quota = $maxposs; |
$quota = $maxposs; |
$r->print('<div class="LC_warning">' |
$r->print('<div class="LC_warning">' |
.&mt('The value you entered for the quota for the file repository in this '.$gpterm |
.&mt('The value you entered for the quota for the group portfolio in this '.$gpterm |
.' exceeded the maximum possible value, so it has been set to [_1] Mb ' |
.' exceeded the maximum possible value, so it has been set to [_1] MB ' |
.'(the maximum possible value).',sprintf("%.2f",$maxposs)) |
.'(the maximum possible value).',sprintf("%.2f",$maxposs)) |
.'</div>'); |
.'</div>'); |
} |
} |
Line 3199 sub write_group_data {
|
Line 3278 sub write_group_data {
|
$description,$tools,\%groupinfo, |
$description,$tools,\%groupinfo, |
$gpterm,$ucgpterm,$crstype); |
$gpterm,$ucgpterm,$crstype); |
if ($result eq 'ok') { |
if ($result eq 'ok') { |
$r->print('<div class="LC_success">' |
my $msg = &Apache::lonhtmlcommon::confirm_success(&mt($ucgpterm.' [_1] was created.','<i>'.$groupname.'</i>')); |
.&mt($ucgpterm.' [_1] was created.','<i>'.$groupname.'</i>') |
$msg = &Apache::loncommon::confirmwrapper($msg); |
.'</div>'); |
$r->print($msg); |
} else { |
} else { |
$r->print('<div class="LC_error">' |
my $msg = &Apache::lonhtmlcommon::confirm_success(&mt('A problem occurred when creating folders for the new '.$gpterm.' [_1]:' |
.&mt('A problem occurred when creating folders for the new '.$gpterm.' [_1]:' |
,'<i>'.$groupname.'</i>') |
,'<i>'.$groupname.'</i>') |
.'<br />'.$result,1); |
.'<br />'.$result |
$msg = &Apache::loncommon::confirmwrapper($msg); |
.'</div>'); |
$r->print($msg); |
} |
} |
} elsif ($action eq 'modify') { |
} elsif ($action eq 'modify') { |
my (@oldtools,@newtools); |
my (@oldtools,@newtools); |
Line 3222 sub write_group_data {
|
Line 3301 sub write_group_data {
|
my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; |
my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; |
my $boardsmap = $crspath.'group_boards_'.$groupname.'.sequence'; |
my $boardsmap = $crspath.'group_boards_'.$groupname.'.sequence'; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $bbmapres = $navmap->getResourceByUrl($boardsmap); |
my ($bbmapres,$error); |
undef($navmap); |
if (defined($navmap)) { |
if (!$bbmapres) { |
$bbmapres = $navmap->getResourceByUrl($boardsmap); |
my $grpmap = $crspath.'group_folder_'.$groupname.'.sequence'; |
undef($navmap); |
my $disctitle = &mt('Discussion Boards'); |
if (!$bbmapres) { |
my $outcome = &map_updater($cdom,$cnum,'group_boards_'. |
my $grpmap = $crspath.'group_folder_'.$groupname.'.sequence'; |
$groupname.'.sequence','bbseq', |
my $disctitle = &mt('Discussion Boards'); |
$disctitle,$grpmap); |
my $outcome = &map_updater($cdom,$cnum,'group_boards_'. |
my ($furl,$ferr) = |
$groupname.'.sequence','bbseq', |
&Apache::lonuserstate::readmap($cdom.'/'.$cnum); |
$disctitle,$grpmap); |
$navmap = Apache::lonnavmaps::navmap->new(); |
my ($furl,$ferr) = |
# modify parameter |
&Apache::lonuserstate::readmap($cdom.'/'.$cnum); |
if ($outcome eq 'ok') { |
# modify parameter |
my $parm_result = &parm_setter($navmap,$cdom,$boardsmap, |
if ($outcome eq 'ok') { |
$groupname); |
$navmap = Apache::lonnavmaps::navmap->new(); |
if ($parm_result) { |
if (defined($navmap)) { |
$r->print('<div class="LC_error">' |
my $parm_result = &parm_setter($navmap,$cdom,$boardsmap, |
.&mt('An error occurred while setting parameters ' |
$groupname); |
.'for Discussion Boards folder: ' |
if ($parm_result) { |
.'[_1]',$parm_result) |
$error = &mt('An error occurred while setting parameters ' |
.'</div>'); |
.'for Discussion Boards folder: ' |
|
.'[_1]',$parm_result); |
|
} else { |
|
$r->print('<div class="LC_success">'. |
|
&mt('Discussion Boards Folder created.') |
|
.'</div>'); |
|
} |
|
undef($navmap); |
|
} else { |
|
if ($crstype eq 'Community') { |
|
$error = &mt("An error occurred while setting parameters '. |
|
'for Discussion Boards folder: '. |
|
'Could not retrieve community information"); |
|
} else { |
|
$error = &mt("An error occurred while setting parameters '. |
|
'for Discussion Boards folder: '. |
|
'Could not retrieve course information"); |
|
} |
|
} |
} else { |
} else { |
$r->print('<div class="LC_success">' |
$r->print($outcome); |
.&mt('Discussion Boards Folder created.') |
|
.'</div>'); |
|
} |
} |
|
} |
|
} else { |
|
$error = &mt("An error occurred while retrieving the contents of the group's folder.").'<br />'; |
|
if ($crstype eq 'Community') { |
|
$error .= &mt("You need to re-initialize the community."); |
|
|
} else { |
} else { |
$r->print($outcome); |
$error .= &mt("You need to re-initialize the course."); |
} |
} |
undef($navmap); |
} |
|
if ($error ne '') { |
|
$r->print('<div class="LC_error">'.$error.'</div>'); |
} |
} |
} |
} |
$r->print('<div class="LC_success">' |
my $message = &Apache::lonhtmlcommon::confirm_success(&mt($ucgpterm.' [_1] was updated.','<i>'.$groupname.'</i>')); |
.&mt($ucgpterm.' [_1] was updated.','<i>'.$groupname.'</i>') |
$message = &Apache::loncommon::confirmwrapper($message); |
.'</div>'); |
$r->print($message); |
} |
} |
} else { |
} else { |
my %actiontype = ( |
my %actiontype = ( |
Line 3266 sub write_group_data {
|
Line 3369 sub write_group_data {
|
&Apache::lonnet::logthis("Failed to store $gpterm $groupname ". |
&Apache::lonnet::logthis("Failed to store $gpterm $groupname ". |
'in '.lc($crstype).': '.$cnum. |
'in '.lc($crstype).': '.$cnum. |
' in domain: '.$cdom); |
' in domain: '.$cdom); |
$r->print('<div class="LC_error">' |
$r->print('<p class="LC_error">' |
.&mt('An error occurred when [_1] the '.$gpterm.'. ' |
.&mt('An error occurred when '.$actiontype{$action}.' the '.$gpterm.'. ' |
.'Please try again.',$actiontype{$action}) |
.'Please try again.') |
.'</div>'); |
.'</p'); |
} |
} |
return $result; |
return $result; |
} |
} |
Line 3277 sub write_group_data {
|
Line 3380 sub write_group_data {
|
sub process_membership { |
sub process_membership { |
my ($r,$cdom,$cnum,$action,$state,$groupname,$tools,$enddate,$startdate, |
my ($r,$cdom,$cnum,$action,$state,$groupname,$tools,$enddate,$startdate, |
$userdata,$idx,$toolprivs,$usertools,$specificity,$defprivs,$memchg, |
$userdata,$idx,$toolprivs,$usertools,$specificity,$defprivs,$memchg, |
$gpterm,$ucgpterm)=@_; |
$gpterm,$ucgpterm,$crstype)=@_; |
my %usersettings = (); |
my %usersettings = (); |
my %added= (); |
my %added= (); |
my %failed = (); |
my %failed = (); |
Line 3434 sub process_membership {
|
Line 3537 sub process_membership {
|
my $roster_result = &Apache::lonnet::modify_coursegroup_membership($cdom, |
my $roster_result = &Apache::lonnet::modify_coursegroup_membership($cdom, |
$cnum,\%usersettings); |
$cnum,\%usersettings); |
if ($num_ok) { |
if ($num_ok) { |
foreach my $type (sort(keys(%added))) { |
my $msgall =''; |
$r->print(&mt('The following users were successfully [_1]',$type)); |
foreach my $type (sort(keys(%added))) { |
|
my $message; |
|
my $tmsg = "The following users were successfully $type"; |
if (!($type eq 'deleted' || $type eq 'expired')) { |
if (!($type eq 'deleted' || $type eq 'expired')) { |
$r->print(&mt(' with the following privileges')); |
$tmsg .= ' with the following privileges'; |
|
} else { |
|
$tmsg .= ' with the following privileges'; |
} |
} |
$r->print(':<br />'); |
$message .= &mt($tmsg.':').'<br/>'; |
foreach my $user (@{$added{$type}}) { |
foreach my $user (@{$added{$type}}) { |
my $privlist = ''; |
my $privlist = ''; |
if (!($type eq 'deleted' || $type eq 'expired')) { |
if (!($type eq 'deleted' || $type eq 'expired')) { |
Line 3455 sub process_membership {
|
Line 3562 sub process_membership {
|
} |
} |
$privlist =~ s/, $//; |
$privlist =~ s/, $//; |
} |
} |
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.'<br />'); |
$message .= $$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.'<br />'; |
} |
} |
$r->print('<br />'); |
$message .= '<br/>'; |
|
$message = &Apache::lonhtmlcommon::confirm_success($message); |
|
$msgall .= $message; |
} |
} |
|
$msgall = &Apache::loncommon::confirmwrapper($msgall); |
|
$r->print($msgall); |
} |
} |
if ($num_fail) { |
if ($num_fail) { |
foreach my $type (sort(keys(%failed))) { |
foreach my $type (sort(keys(%failed))) { |
Line 3471 sub process_membership {
|
Line 3582 sub process_membership {
|
} |
} |
$r->print('<br />'); |
$r->print('<br />'); |
} |
} |
if (@unchanged > 0) { |
# Is that really needed? |
$r->print(&mt('No change occurred for the following users:').'<br />'); |
# |
foreach my $user (sort(@unchanged)) { |
# if (@unchanged > 0) { |
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'<br />'); |
# $r->print(&mt('No change occurred for the following users:').'<br />'); |
} |
# foreach my $user (sort(@unchanged)) { |
$r->print('<br />'); |
# $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'<br />'); |
} |
# } |
|
# $r->print('<br />'); |
|
# } |
if ($roster_result eq 'ok') { |
if ($roster_result eq 'ok') { |
$r->print('<div class="LC_success">' |
$r->print('<div class="LC_success">' |
.&mt($ucgpterm.' membership list updated.') |
.&mt($ucgpterm.' membership list updated.') |
.'</div>'); |
.'</div>'); |
$r->print('<p class="LC_info">' |
$r->print('<p class="LC_info">'); |
.&mt('Any currently logged in course users affected by the changes you made' |
if ($crstype eq 'Community') { |
|
$r->print(&mt("Any currently logged in community users affected by the changes you made" |
.' to group membership or privileges for the [_1] group will need to log out' |
.' to group membership or privileges for the [_1] group will need to log out' |
.' and log back in for their LON-CAPA sessions to reflect these changes.' |
.' and log back in for their LON-CAPA sessions to reflect these changes.' |
,'<i>'.$groupname.'</i>') |
,'<i>'.$groupname.'</i>')); |
.'</p>' |
|
); |
} else { |
|
$r->print(&mt("Any currently logged in course users affected by the changes you made" |
|
.' to group membership or privileges for the [_1] group will need to log out' |
|
.' and log back in for their LON-CAPA sessions to reflect these changes.' |
|
,'<i>'.$groupname.'</i>')); |
|
} |
|
$r->print('</p>'); |
} else { |
} else { |
$r->print('<div class="LC_error">' |
$r->print('<div class="LC_error">' |
.&mt("An error occurred while updating the $gpterm membership list:") |
.&mt("An error occurred while updating the $gpterm membership list:") |
Line 3509 sub mapping_options {
|
Line 3629 sub mapping_options {
|
'adds' => "If automatic $gpterm enrollment is enabled, when a user is newly assigned a ".lc($crstype)."-wide or section-specific role, he/she will automatically be added as a member of the $gpterm, with start and end access dates defined by the default dates set for the $gpterm, unless he/she is already a $gpterm member, with access dates that permit either current or future $gpterm access.", |
'adds' => "If automatic $gpterm enrollment is enabled, when a user is newly assigned a ".lc($crstype)."-wide or section-specific role, he/she will automatically be added as a member of the $gpterm, with start and end access dates defined by the default dates set for the $gpterm, unless he/she is already a $gpterm member, with access dates that permit either current or future $gpterm access.", |
'drops' => "If automatic $gpterm disenrollment is enabled, when a user's role is expired, access to the $gpterm will be terminated unless the user continues to have other ".lc($crstype)."-wide or section-specific active or future roles which receive automatic membership in the $gpterm.", |
'drops' => "If automatic $gpterm disenrollment is enabled, when a user's role is expired, access to the $gpterm will be terminated unless the user continues to have other ".lc($crstype)."-wide or section-specific active or future roles which receive automatic membership in the $gpterm.", |
'pirs' => "Pick roles and sections for automatic $gpterm enrollment", |
'pirs' => "Pick roles and sections for automatic $gpterm enrollment", |
'curr' => 'Currently set to', |
|
'on' => 'on', |
'on' => 'on', |
'off' => 'off', |
'off' => 'off', |
'auad' => "Automatically enable $gpterm membership when roles are added?", |
'auad' => "Automatically enable $gpterm membership when roles are added?", |
Line 3537 sub automapping {
|
Line 3656 sub automapping {
|
<span class="LC_nobreak">'.$$lt{'auad'}.': |
<span class="LC_nobreak">'.$$lt{'auad'}.': |
<label><input type="radio" name="autoadd" value="on" />'.&mt('on').' </label><label><input type="radio" name="autoadd" value="off" checked="checked" />'.&mt('off').'</label>'); |
<label><input type="radio" name="autoadd" value="on" />'.&mt('on').' </label><label><input type="radio" name="autoadd" value="off" checked="checked" />'.&mt('off').'</label>'); |
if ($action eq 'modify') { |
if ($action eq 'modify') { |
$r->print(' ('.$$lt{'curr'}.' <b>'.$$lt{$add}.'</b>)'); |
$r->print(' ('.&mt('Currently set to [_1].','<b>'.$$lt{$add}.'</b>').')'); |
} |
} |
$r->print(' |
$r->print(' |
</span><br /> |
</span><br /> |
<span class="LC_nobreak">'.$$lt{'auex'}.': |
<span class="LC_nobreak">'.$$lt{'auex'}.': |
<label><input type="radio" name="autodrop" value="on" />'.&mt('on').' </label><label><input type="radio" name="autodrop" value="off" checked="checked" />'.&mt('off').'</label>'); |
<label><input type="radio" name="autodrop" value="on" />'.&mt('on').' </label><label><input type="radio" name="autodrop" value="off" checked="checked" />'.&mt('off').'</label>'); |
if ($action eq 'modify') { |
if ($action eq 'modify') { |
$r->print(' ('.$$lt{'curr'}.' <b>'.$$lt{$drop}.'</b>)'); |
$r->print(' ('.&mt('Currently set to [_1].','<b>'.$$lt{$drop}.'</b>').')'); |
} |
} |
$r->print('</span><br /><br />'.$$lt{'mapr'}); |
$r->print('</span><br /><br />'.$$lt{'mapr'}); |
} |
} |
Line 3560 sub mapping_settings {
|
Line 3679 sub mapping_settings {
|
@sections = ('all','none'); |
@sections = ('all','none'); |
} |
} |
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$$lt{'pirs'})); |
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$$lt{'pirs'})); |
my @roles = &standard_roles(); |
my @roles = &standard_roles($crstype); |
my %customroles = &Apache::lonhtmlcommon::course_custom_roles($cdom,$cnum); |
my %customroles = &Apache::lonhtmlcommon::course_custom_roles($cdom,$cnum); |
$r->print(&Apache::loncommon::start_data_table(). |
$r->print(&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row()); |
&Apache::loncommon::start_data_table_header_row()); |
Line 3603 sub print_autorole_item {
|
Line 3722 sub print_autorole_item {
|
my ($role,$roletitle,$sections) = @_; |
my ($role,$roletitle,$sections) = @_; |
my $sections_sel; |
my $sections_sel; |
if (@{$sections} > 0) { |
if (@{$sections} > 0) { |
if ($role eq 'cc') { |
if (($role eq 'cc') || ($role eq 'co')) { |
$sections_sel = '<td align="right">'. |
$sections_sel = '<td align="right">'. |
&mt('all sections').'<input type="hidden" '. |
&mt('all sections').'<input type="hidden" '. |
'name="sec_cc" value="all" /></td>'; |
'name="sec_'.$role.'" value="all" /></td>'; |
} else { |
} else { |
$sections_sel='<td align="right">'. |
$sections_sel='<td align="right">'. |
§ions_selection($sections,'sec_'.$role). |
§ions_selection($sections,'sec_'.$role). |
Line 3622 sub print_autorole_item {
|
Line 3741 sub print_autorole_item {
|
} |
} |
|
|
sub standard_roles { |
sub standard_roles { |
my @roles = ('cc','in','ta','ep','st'); |
my ($crstype) = @_; |
|
my @roles = qw(in ta ep ad st); |
|
if ($crstype eq 'Community') { |
|
unshift(@roles,'co'); |
|
} else { |
|
unshift(@roles,'cc'); |
|
} |
return @roles; |
return @roles; |
} |
} |
|
|
sub modify_menu { |
sub modify_menu { |
my ($r,$groupname,$page,$gpterm) = @_; |
my ($r,$groupname,$page,$gpterm) = @_; |
my @menu = |
my @menu = |
( |
( { categorytitle =>'Group Actions', |
{ text => "Modify default $gpterm settings", |
items => [ |
help => 'Course_Modify_Group', |
|
state => 'change_settings', |
{ linktext => "Modify default $gpterm settings", |
branch => 'settings', |
url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=change_settings&branch=settings', |
|
icon => 'grp_settings.png', |
|
alttext => "Modify default $gpterm settings", |
|
permission => '1', |
|
help => 'Course_Modify_Group', |
}, |
}, |
{ text => 'Modify access, tools and/or privileges for previous, '. |
{ linktext => 'Modify access, tools and privileges for members', |
'future, or current members', |
url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=change_members&branch=members', |
|
icon => 'grp_tools.png', |
|
alttext => 'Modify access, tools and privileges for members', |
|
permission => '1', |
help => 'Course_Modify_Group_Membership', |
help => 'Course_Modify_Group_Membership', |
state => 'change_members', |
|
branch => 'members', |
|
}, |
}, |
{ text => "Add member(s) to the $gpterm", |
{ linktext => "Add member(s) to the $gpterm", |
|
url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=add_members&branch=adds', |
|
icon => 'grp_add.png', |
|
alttext => "Add member(s) to the $gpterm", |
|
permission => '1', |
help => 'Course_Group_Add_Members', |
help => 'Course_Group_Add_Members', |
state => 'add_members', |
}]} |
branch => 'adds', |
); |
}, |
$r->print(&Apache::lonhtmlcommon::generate_menu(@menu)); |
); |
|
my $menu_html = ''; |
|
foreach my $menu_item (@menu) { |
|
$menu_html .= |
|
'<p><font size="+1"><a href="/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state='.$menu_item->{'state'}.'&branch='.$menu_item->{'branch'}.'">'; |
|
$menu_html.= &mt($menu_item->{'text'}).'</a></font>'; |
|
if (exists($menu_item->{'help'})) { |
|
$menu_html.= |
|
&Apache::loncommon::help_open_topic($menu_item->{'help'}); |
|
} |
|
$menu_html.='</p>'.$/; |
|
} |
|
$r->print($menu_html); |
|
return; |
return; |
} |
} |
|
|
Line 3741 sub date_setting_table {
|
Line 3862 sub date_setting_table {
|
'startdate',$starttime); |
'startdate',$starttime); |
my $endform = &Apache::lonhtmlcommon::date_setter($formname, |
my $endform = &Apache::lonhtmlcommon::date_setter($formname, |
'enddate',$endtime); |
'enddate',$endtime); |
my $perpetual = |
my $perpetual = ' <span class="LC_nobreak"><label>' |
'<span class="LC_nobreak"><label><input type="checkbox" name="no_end_date" />'. |
.'<input type="checkbox" name="no_end_date" />' |
&mt('None').'</label></span>'; |
.&mt('No end date') |
my $table = "<table class=\"LC_descriptive_input\">\n". |
.'</label></span>'; |
'<tr><td class="LC_description">'.&mt('Start:').'</td>'. |
my $table = &Apache::lonhtmlcommon::start_pick_box() |
'<td>'.$startform.'</td>'. |
.&Apache::lonhtmlcommon::row_title(&mt('Start Date')) |
'<td> </td>'."</tr>\n". |
.$startform |
'<tr><td class="LC_description">'.&mt('End:').'</td>'. |
.&Apache::lonhtmlcommon::row_closure() |
'<td>'.$endform.'</td>'. |
.&Apache::lonhtmlcommon::row_title(&mt('End Date')) |
'<td>'.$perpetual.'</td>'."</tr>\n". |
.$endform |
"</table>\n"; |
.$perpetual |
|
.&Apache::lonhtmlcommon::row_closure(1) |
|
.&Apache::lonhtmlcommon::end_pick_box(); |
return $table; |
return $table; |
} |
} |
|
|
Line 3759 sub add_group_folder {
|
Line 3882 sub add_group_folder {
|
my ($cdom,$cnum,$now,$groupname,$action,$description,$tools,$groupinfo, |
my ($cdom,$cnum,$now,$groupname,$action,$description,$tools,$groupinfo, |
$gpterm,$ucgpterm,$crstype) = @_; |
$gpterm,$ucgpterm,$crstype) = @_; |
if ($cdom eq '' || $cnum eq '') { |
if ($cdom eq '' || $cnum eq '') { |
return '<span class="LC_error">' |
my $error = '<span class="LC_error">'; |
.&mt('Error: invalid course domain or number - group folder creation failed.') |
if ($crstype eq 'Community') { |
.'</span>'; |
$error .= &mt("Error: invalid community domain or number - group folder creation failed."); |
|
} else { |
|
$error .= &mt("Error: invalid course domain or number - group folder creation failed."); |
|
} |
|
$error .= '</span>'; |
|
return $error; |
} |
} |
my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage,$warning); |
my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage,$warning); |
my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; |
my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; |
Line 3828 sub add_group_folder {
|
Line 3956 sub add_group_folder {
|
} |
} |
my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); |
my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (!defined($navmap)) { |
|
$warning .= '<span class="LC_error">'; |
|
if ($crstype eq 'Community') { |
|
$warning .= &mt("Error retrieving community contents"). |
|
' '.&mt("You need to re-initialize the community."); |
|
} else { |
|
$warning .= &mt("Error retrieving course contents"). |
|
' '.&mt("You need to re-initialize the course."); |
|
} |
|
$warning .= '</span>'; |
|
return $warning; |
|
} |
# modify parameters |
# modify parameters |
my $parm_result; |
my $parm_result; |
if ($action eq 'create') { |
if ($action eq 'create') { |
Line 3907 sub map_updater {
|
Line 4047 sub map_updater {
|
$LONCAPA::map::resources[$newidx] = $itemtitle.':'.$newmapurl. |
$LONCAPA::map::resources[$newidx] = $itemtitle.':'.$newmapurl. |
':false:normal:res'; |
':false:normal:res'; |
$LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx; |
$LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx; |
my ($outtext,$errtext) = &LONCAPA::map::storemap($parentmap,1); |
my ($outtext,$errtext) = &LONCAPA::map::storemap($parentmap,1,1); |
if ($errtext) { |
if ($errtext) { |
$outcome = '<div class="LC_error">' |
$outcome = '<div class="LC_error">' |
.&mt('Error saving updated parent folder.')." ($parentmap): $errtext" |
.&mt('Error saving updated parent folder.')." ($parentmap): $errtext" |
Line 3931 sub new_map {
|
Line 4071 sub new_map {
|
} |
} |
|
|
sub parm_setter { |
sub parm_setter { |
my ($navmap,$cdom,$url,$groupname) = @_; |
my ($navmap,$cdom,$url,$groupname,$crstype) = @_; |
my $allresults; |
if (!defined($navmap)) { |
|
my $allresults; |
|
if ($crstype eq 'Community') { |
|
$allresults = &mt("Parameters not set for [_1] because the contents of the community could not be retrieved.",$url).' '. |
|
&mt("You need to reinitialize the community."); |
|
} else { |
|
$allresults = &mt("Parameters not set for [_1] because the contents of the course could not be retrieved.",$url).' '. |
|
&mt("You need to reinitialize the course."); |
|
|
|
} |
|
return '<div class="LC_warning">'.$allresults.'</div>'; |
|
} |
my %hide_settings = ( |
my %hide_settings = ( |
'course' => { |
'course' => { |
'num' => 13, |
'num' => 13, |
Line 3945 sub parm_setter {
|
Line 4096 sub parm_setter {
|
}, |
}, |
); |
); |
my $res = $navmap->getResourceByUrl($url); |
my $res = $navmap->getResourceByUrl($url); |
|
my $allresults; |
if ($res) { |
if ($res) { |
my $symb = $res->symb(); |
my $symb = $res->symb(); |
foreach my $level (keys(%hide_settings)) { |
foreach my $level (keys(%hide_settings)) { |
Line 3961 sub parm_setter {
|
Line 4113 sub parm_setter {
|
} |
} |
} |
} |
} else { |
} else { |
$allresults = '<div class="LC_warning">' |
$allresults = '<div class="LC_warning">'; |
.&mt('Parameters not set for [_1] because the resource was not recognized' |
if ($crstype eq 'Community') { |
.' as part of the course.','<tt>'.$url.'</tt>') |
$allresults .= &mt("Parameters not set for [_1] because the resource was not recognized as part of the community.",'<tt>'.$url.'</tt>'); |
.'</div>'; |
} else { |
|
$allresults .= &mt('Parameters not set for [_1] because the resource was not recognized as part of the course.','<tt>'.$url.'</tt>'); |
|
} |
|
$allresults .= '</div>'; |
} |
} |
return $allresults; |
return $allresults; |
} |
} |
Line 3973 sub create_homepage {
|
Line 4128 sub create_homepage {
|
my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm,$now) = @_; |
my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm,$now) = @_; |
my $functionality = join(',',@{$tools}); |
my $functionality = join(',',@{$tools}); |
my $content = &unescape($$groupinfo{description}); |
my $content = &unescape($$groupinfo{description}); |
$content=~s/\s+$//s; |
chomp($content); |
$content=~s/^\s+//s; |
my $gateway = Apache::lonhtmlgateway->new(); |
$content=~s/\<br\s*\/*\>$//s; |
$content = $gateway->process_incoming_html($content,1); |
$content=&Apache::lonfeedback::clear_out_html($content,1); |
|
|
|
my %pageinfo = ( |
my %pageinfo = ( |
'aaa_title' => "$ucgpterm: $name", |
'aaa_title' => "$ucgpterm: $name", |
Line 4062 sub validate_groupname {
|
Line 4216 sub validate_groupname {
|
} |
} |
if ($action eq 'create') { |
if ($action eq 'create') { |
if (exists($curr_groups{$groupname})) { |
if (exists($curr_groups{$groupname})) { |
return $exitmsg.$lt{'cnnb'}.&mt('an existing [_1]',$gpterm). |
return $exitmsg.$lt{'cnnb'}.&mt("an existing $gpterm"). |
$lt{'inth'}.'.<br />'.$lt{'grna'}; |
$lt{'inth'}.'.<br />'.$lt{'grna'}; |
} elsif (exists($deleted_groups{$groupname})) { |
} elsif (exists($deleted_groups{$groupname})) { |
return $exitmsg.$lt{'cnnb'}.&mt('a [_1] which previously existed',$gpterm). |
return $exitmsg.$lt{'cnnb'}.&mt("a $gpterm which previously existed"). |
$lt{'inth'}.'.<br />'.$lt{'grna'}; |
$lt{'inth'}.'.<br />'.$lt{'grna'}; |
} |
} |
} elsif ($action eq 'modify') { |
} elsif ($action eq 'modify') { |
unless(exists($curr_groups{$groupname})) { |
unless(exists($curr_groups{$groupname})) { |
$earlyout = &mt('[_1] name:',$ucgpterm).' '.$groupname.$lt{'thgr'}. |
$earlyout = &mt("$ucgpterm name:").' '.$groupname.$lt{'thgr'}. |
$lt{'inth'}; |
$lt{'inth'}; |
return $earlyout; |
return $earlyout; |
} |
} |
Line 4117 sub check_changes {
|
Line 4271 sub check_changes {
|
} |
} |
|
|
1; |
1; |
|
|