--- loncom/interface/loncreateuser.pm 2009/05/21 05:45:59 1.295.2.1 +++ loncom/interface/loncreateuser.pm 2009/07/27 14:09:14 1.300 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.295.2.1 2009/05/21 05:45:59 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.300 2009/07/27 14:09:14 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -225,12 +225,14 @@ sub build_tools_display { 'usde' => "Use default", 'uscu' => "Use custom", 'official' => 'Can request creation of official courses', - 'unofficial' => 'Can request creation of unofficial courses', + 'unofficial' => 'Can request creation of unofficial courses', + 'community' => 'Can request creation of communities', ); if ($context eq 'requestcourses') { %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, - 'requestcourses.official','requestcourses.unofficial'); - @usertools = ('official','unofficial'); + 'requestcourses.official','requestcourses.unofficial', + 'requestcourses.community'); + @usertools = ('official','unofficial','community'); } else { %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, 'tools.aboutme','tools.portfolio','tools.blog'); @@ -282,6 +284,40 @@ sub build_tools_display { return $output; } +sub coursereq_externaluser { + my ($ccuname,$ccdomain,$cdom) = @_; + my (@usertools,%userenv,$output); + my %lt = &Apache::lonlocal::texthash ( + 'official' => 'Can request creation of official courses', + 'unofficial' => 'Can request creation of unofficial courses', + 'community' => 'Can request creation of communities', + ); + + %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, + 'reqcrsotherdom.official','reqcrsotherdom.unofficial', + 'reqcrsotherdom.community'); + @usertools = ('official','unofficial','community'); + foreach my $item (@usertools) { + my ($tool_on,$tool_off); + $tool_off = 'checked="checked" '; + if ($userenv{'reqcrsotherdom.'.$item} ne '') { + my @curr = split(',',$userenv{'reqcrsotherdom.'.$item}); + if (grep(/^\Q$cdom\E$/,@curr)) { + $tool_on = 'checked="checked" '; + $tool_off = ''; + } + } + $output .= &Apache::loncommon::start_data_table_row()."\n". + ' '.$lt{$item}.':  '."\n". + &Apache::loncommon::end_data_table_row()."\n"; + } + return $output; +} + # =================================================================== Phase one sub print_username_entry_form { @@ -873,10 +909,15 @@ ENDCHANGEUSER $r->print(&Apache::lonuserutils::forceid_change($context)); } if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { - $r->print('

'.&mt('User Can Request Creation of Courses?').'

'. - &Apache::loncommon::start_data_table(). - &build_tools_display($ccuname,$ccdomain,'requestcourses'). - &Apache::loncommon::end_data_table()); + $r->print('

'.&mt('User Can Request Creation of Courses in this Domain?').'

'. + &Apache::loncommon::start_data_table()); + if ($env{'request.role.domain'} eq $ccdomain) { + $r->print(&build_tools_display($ccuname,$ccdomain,'requestcourses')); + } else { + $r->print(&coursereq_externaluser($ccuname,$ccdomain, + $env{'request.role.domain'})); + } + $r->print(&Apache::loncommon::end_data_table()); } $r->print(''); my $user_auth_text = &user_authentication($ccuname,$ccdomain,$formname); @@ -1861,7 +1902,7 @@ sub update_user_data { $env{'form.ccuname'}, $env{'form.ccdomain'}).''); my (%alerts,%rulematch,%inst_results,%curr_rules); my @usertools = ('aboutme','blog','portfolio'); - my @requestcourses = ('official','unofficial'); + my @requestcourses = ('official','unofficial','community'); my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($env{'form.ccdomain'}); if ($env{'form.makeuser'}) { @@ -1998,7 +2039,9 @@ sub update_user_data { ('environment',['firstname','middlename','lastname','generation', 'id','permanentemail','portfolioquota','inststatus','tools.aboutme', 'tools.blog','tools.portfolio','requestcourses.official', - 'requestcourses.unofficial'], + 'requestcourses.unofficial','requestcourses.community', + 'reqcrsotherdom.official','reqcrsotherdom.unofficial', + 'reqcrsotherdom.community'], $env{'form.ccdomain'},$env{'form.ccuname'}); my ($tmp) = keys(%userenv); if ($tmp =~ /^(con_lost|error)/i) { @@ -2127,7 +2170,7 @@ sub update_user_data { $oldinststatuses,$newinststatuses); my ($defquota,$settingstatus) = &Apache::loncommon::default_quota($env{'form.ccdomain'},$inststatus); - my ($showquota,$showtools,$showrequestcourses,$showinststatus); + my ($showquota,$showtools,$showrequestcourses,$showinststatus,$showreqotherdom); if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) { $showquota = 1; } @@ -2136,6 +2179,8 @@ sub update_user_data { } if (&Apache::lonnet::allowed('ccc',$env{'form.ccdomain'})) { $showrequestcourses = 1; + } elsif (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { + $showreqotherdom = 1; } if (&Apache::lonnet::allowed('mau',$env{'form.ccdomain'})) { $showinststatus = 1; @@ -2219,8 +2264,14 @@ sub update_user_data { } &tool_changes('tools',\@usertools,\%oldaccess,\%oldaccesstext,\%userenv, \%changeHash,\%changed,\%newaccess,\%newaccesstext); - &tool_changes('requestcourses',\@requestcourses,\%oldaccess,\%oldaccesstext, - \%userenv, \%changeHash,\%changed,\%newaccess,\%newaccesstext); + if ($env{'form.ccdomain'} eq $env{'request.role.domain'}) { + &tool_changes('requestcourses',\@requestcourses,\%oldaccess,\%oldaccesstext, + \%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext); + } else { + &tool_changes('reqcrsotherdom',\@requestcourses,\%oldaccess,\%oldaccesstext, + \%userenv, + \%changeHash,\%changed,\%newaccess,\%newaccesstext); + } if ($env{'form.cfirstname'} ne $userenv{'firstname'} || $env{'form.cmiddlename'} ne $userenv{'middlename'} || $env{'form.clastname'} ne $userenv{'lastname'} || @@ -2246,7 +2297,8 @@ sub update_user_data { ($env{'user.domain'} eq $env{'form.ccdomain'})) { my %newenvhash; foreach my $key (keys(%changed)) { - if (($key eq 'official') || ($key eq 'unofficial')) { + if (($key eq 'official') || ($key eq 'unofficial') + || ($key eq 'community')) { $newenvhash{'environment.requestcourses.'.$key} = $changeHash{'requestcourses.'.$key}; if ($changeHash{'requestcourses.'.$key} ne '') { @@ -2308,6 +2360,7 @@ sub update_user_data { 'portfolio' => 'Portfolio Availability', 'official' => 'Can Request Official Courses', 'unofficial' => 'Can Request Unofficial Courses', + 'community' => 'Can Request Communities', 'inststatus' => "Affiliation", 'prvs' => 'Previous Value:', 'chto' => 'Changed To:' @@ -2333,6 +2386,11 @@ END $r->print(" $lt{$item}\n"); } + } elsif ($showreqotherdom) { + foreach my $item (@requestcourses) { + $r->print(" + $lt{$item}\n"); + } } if ($showquota) { $r->print(" @@ -2364,6 +2422,11 @@ END $r->print(" $oldaccess{$item} $oldaccesstext{$item}\n"); } + } elsif ($showreqotherdom) { + foreach my $item (@requestcourses) { + $r->print(" + $oldaccess{$item} $oldaccesstext{$item}\n"); + } } if ($showquota) { $r->print(" @@ -2395,6 +2458,11 @@ END $r->print(" $newaccess{$item} $newaccesstext{$item} \n"); } + } elsif ($showreqotherdom) { + foreach my $item (@requestcourses) { + $r->print(" + $newaccess{$item} $newaccesstext{$item} \n"); + } } if ($showquota) { $r->print(" @@ -2445,7 +2513,8 @@ END 'aboutme' => "Personal Information Page Availability", 'portfolio' => "Portfolio Availability", 'official' => "Can Request Official Courses", - 'unofficial' => "Can Request Unofficial Course", + 'unofficial' => "Can Request Unofficial Courses", + 'community' => "Can Request Communities", 'inststatus' => "Affiliation", ); $r->print(<<"END"); @@ -2463,6 +2532,11 @@ END $r->print('
['.$lt{$item}.': '.$newaccess{$item}.' '. $newaccesstext{$item}.']'."\n"); } + } elsif ($showreqotherdom) { + foreach my $item (@requestcourses) { + $r->print('
['.$lt{$item}.': '.$newaccess{$item}.' '. + $newaccesstext{$item}.']'."\n"); + } } if ($showtools) { foreach my $item (@usertools) { @@ -2554,6 +2628,59 @@ sub tool_changes { (ref($newaccess) eq 'HASH') && (ref($newaccesstext) eq 'HASH'))) { return; } + if ($context eq 'reqcrsotherdom') { + my $cdom = $env{'request.role.domain'}; + foreach my $tool (@{$usertools}) { + $oldaccesstext->{$tool} = &mt('no'); + $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool}; + if ($userenv->{$context.'.'.$tool} eq '') { + if ($env{'form.'.$context.'_'.$tool}) { + $changed->{$tool}=&tool_admin($tool,$cdom, + $changeHash,$context); + if ($changed->{$tool}) { + $newaccesstext->{$tool} = &mt('yes'); + } else { + $newaccesstext->{$tool} = $oldaccesstext->{$tool}; + } + } + } else { + my @curr = split(',',$userenv->{$context.'.'.$tool}); + my @new; + my $changedoms; + if (grep(/^\Q$cdom\E$/,@curr)) { + $oldaccesstext->{$tool} = &mt('yes'); + unless ($env{'form.'.$context.'_'.$tool}) { + $changedoms = 1; + foreach my $dom (@curr) { + unless ($dom eq $cdom) { + push(@new,$dom); + } + } + } + } elsif ($env{'form.'.$context.'_'.$tool}) { + $changedoms = 1; + @new = sort(@curr,$cdom); + } + $newaccesstext->{$tool} = $oldaccesstext->{$tool}; + if ($changedoms) { + my $newdomstr; + if (@new) { + $newdomstr = join(',',@new); + } + $changed->{$tool}=&tool_admin($tool,$newdomstr,$changeHash, + $context); + if ($changed->{$tool}) { + if ($env{'form.'.$context.'_'.$tool}) { + $newaccesstext->{$tool} = &mt('yes'); + } else { + $newaccesstext->{$tool} = &mt('no'); + } + } + } + } + } + return; + } foreach my $tool (@{$usertools}) { if ($userenv->{$context.'.'.$tool} ne '') { $oldaccess->{$tool} = &mt('custom'); @@ -2593,9 +2720,9 @@ sub tool_changes { } else { $newaccess->{$tool} = $oldaccess->{$tool}; if ($userenv->{$context.'.'.$tool}) { - $newaccesstext->{$tool} = &mt("availability set to 'on'"); + $newaccesstext->{$tool} = &mt("availability set to 'on'"); } else { - $newaccesstext->{$tool} = &mt("availability set to 'off'"); + $newaccesstext->{$tool} = &mt("availability set to 'off'"); } } } @@ -2992,6 +3119,10 @@ sub tool_admin { if (&Apache::lonnet::allowed('ccc',$env{'form.ccdomain'})) { $canchange = 1; } + } elsif ($context eq 'reqcrsotherdom') { + if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { + $canchange = 1; + } } elsif (&Apache::lonnet::allowed('mut',$env{'form.ccdomain'})) { # Current user has quota modification privileges $canchange = 1; @@ -3655,113 +3786,167 @@ END sub print_main_menu { my ($permission,$context) = @_; my %links = ( - domain => { - upload => 'Upload a File of Users', - singleuser => 'Add/Modify a Single User', - listusers => 'Manage Multiple Users', - }, - author => { - upload => 'Upload a File of Co-authors', - singleuser => 'Add/Modify a Single Co-author', - listusers => 'Display Co-authors and Manage Multiple Users', - }, - course => { - upload => 'Upload a File of Course Users', - singleuser => 'Add/Modify a Single Course User', - listusers => 'Display Class Lists and Manage Multiple Users', - }, + domain => { + upload => 'Upload a File of Users', + singleuser => 'Add/Modify a User', + listusers => 'Manage Users', + }, + author => { + upload => 'Upload a File of Co-authors', + singleuser => 'Add/Modify a Co-author', + listusers => 'Manage Co-authors', + }, + course => { + upload => 'Upload a File of Course Users', + singleuser => 'Add/Modify a Course User', + listusers => 'Manage Course Users', + }, ); + my @menu = ( {categorytitle => 'Single Users', + items => + [ + { + linktext => $links{$context}{'singleuser'}, + icon => 'edit-redo.png', + #help => 'Course_Change_Privileges', + url => '/adm/createuser?action=singleuser', + permission => $permission->{'cusr'}, + linktitle => 'Add a user with a certain role to this course.', + }, + ]}, - my @menu = - ( - { text => $links{$context}{'upload'}, - help => 'Course_Create_Class_List', - action => 'upload', - permission => $permission->{'cusr'}, + {categorytitle => 'Multiple Users', + items => + [ + { + linktext => $links{$context}{'upload'}, + icon => 'sctr.png', + #help => 'Course_Create_Class_List', + url => '/adm/createuser?action=upload', + permission => $permission->{'cusr'}, + linktitle => 'Upload a CSV or a text file containing users.', + }, + { + linktext => $links{$context}{'listusers'}, + icon => 'edit-find.png', + #help => 'Course_View_Class_List', + url => '/adm/createuser?action=listusers', + permission => ($permission->{'view'} || $permission->{'cusr'}), + linktitle => 'Show and manage users of this course.', }, - { text => $links{$context}{'singleuser'}, - help => 'Course_Change_Privileges', - action => 'singleuser', - permission => $permission->{'cusr'}, + + ]}, + + {categorytitle => 'Administration', + items => [ ]}, + ); + + if ($context eq 'domain'){ + + push(@{ $menu[2]->{items} }, #Category: Administration + { + linktext => 'Custom Roles', + icon => 'emblem-photos.png', + #help => 'Course_Editing_Custom_Roles', + url => '/adm/createuser?action=custom', + permission => $permission->{'custom'}, + linktitle => 'Configure a custom role.', }, - { text => $links{$context}{'listusers'}, - help => 'Course_View_Class_List', - action => 'listusers', - permission => ($permission->{'view'} || $permission->{'cusr'}), - }, ); - if ($context eq 'domain' || $context eq 'course') { - my $customlink = { text => 'Edit Custom Roles', - help => 'Course_Editing_Custom_Roles', - action => 'custom', - permission => $permission->{'custom'}, - }; - push(@menu,$customlink); - } - if ($context eq 'course') { + + }elsif ($context eq 'course'){ my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity(); - my @courselinks = - ( - { text => 'Enroll a Single Student', - help => 'Course_Add_Student', - action => 'singlestudent', - permission => $permission->{'cusr'}, - }, - { text => 'Drop Students', - help => 'Course_Drop_Student', - action => 'drop', - permission => $permission->{'cusr'}, - }); - if (!exists($permission->{'cusr_section'})) { - push(@courselinks, - { text => 'Automated Enrollment Manager', - help => 'Course_Automated_Enrollment', + + push(@{ $menu[0]->{items} }, #Category: Single Users + { + linktext => 'Add/Modify a Student', + #help => 'Course_Add_Student', + icon => 'list-add.png', + url => '/adm/createuser?action=singlestudent', + permission => $permission->{'cusr'}, + linktitle => 'Add a user with the role student to this course.', + }, + ); + + push(@{ $menu[1]->{items} }, #Category: Multiple Users + { + linktext => 'Drop Students', + icon => 'edit-undo.png', + #help => 'Course_Drop_Student', + url => '/adm/createuser?action=drop', + permission => $permission->{'cusr'}, + linktitle =>'Remove a student from this course.', + }, + ); + push(@{ $menu[2]->{items} }, #Category: Administration + { + linktext => 'Custom Roles', + icon => 'emblem-photos.png', + #help => 'Course_Editing_Custom_Roles', + url => '/adm/createuser?action=custom', + permission => $permission->{'custom'}, + linktitle => 'Configure a custom role.', + }, + { + linktext => 'Course Groups', + icon => 'conf.png', + #help => 'Course_Manage_Group', + url => '/adm/coursegroups?refpage=cusr', + permission => $permission->{'grp_manage'}, + linktitle => 'Manage course groups.', + }, + { + linktext => 'Change Logs', + icon => 'document-properties.png', + #help => 'Course_User_Logs', + url => '/adm/createuser?action=changelogs', + permission => $permission->{'cusr'}, + linktitle => 'View change log.', + }, + ); + if ($env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_approval'}) { + push(@{ $menu[2]->{items} }, + { + linktext => 'Enrollment Requests', + icon => 'selfenrl-queue.png', + #help => 'Course_Approve_Selfenroll', + url => '/adm/createuser?action=selfenrollqueue', + permission => $permission->{'cusr'}, + linktitle =>'Approve or reject enrollment requests.', + }, + ); + } + + if (!exists($permission->{'cusr_section'})){ + + push(@{ $menu[2]->{items} }, + { + linktext => 'Automated Enrollment', + icon => 'roles.png', + #help => 'Course_Automated_Enrollment', permission => (&Apache::lonnet::auto_run($cnum,$cdom) - && $permission->{'cusr'}), + && $permission->{'cusr'}), url => '/adm/populate', - }, - { text => 'Configure User Self-enrollment', - help => 'Course_Self_Enrollment', - action => 'selfenroll', + linktitle => 'Automated enrollment manager.', + }, + { + linktext => 'User Self-Enrollment', + icon => 'cstr.png', + #help => 'Course_Self_Enrollment', + url => '/adm/createuser?action=selfenroll', permission => $permission->{'cusr'}, - }); + linktitle => 'Configure user self enrollment.', + }, + ); + } - push(@courselinks, - { text => 'Manage Course Groups', - help => 'Course_Manage_Group', - permission => $permission->{'grp_manage'}, - url => '/adm/coursegroups?refpage=cusr', - }, - { text => 'View Change Logs', - help => 'Course_User_Logs', - action => 'changelogs', - permission => $permission->{'cusr'}, - },); + }; +return Apache::lonhtmlcommon::generate_menu(@menu); # { text => 'View Log-in History', # help => 'Course_User_Logins', # action => 'logins', # permission => $permission->{'cusr'}, # }); - push(@menu,@courselinks); - } - my $menu_html = ''; - foreach my $menu_item (@menu) { - next if (! $menu_item->{'permission'}); - $menu_html.='

'; - if (exists($menu_item->{'help'})) { - $menu_html.= - &Apache::loncommon::help_open_topic($menu_item->{'help'}); - } - $menu_html.=''; - if (exists($menu_item->{'url'})) { - $menu_html.=qq{}; - } else { - $menu_html.= - qq{}; } - $menu_html.= &mt($menu_item->{'text'}).''; - $menu_html.='

'; - } - return $menu_html; } sub restore_prev_selections { @@ -3987,9 +4172,7 @@ ENDSCRIPT if (ref($lt) eq 'HASH') { $title = $lt->{$item}; } - $output .= - &Apache::lonhtmlcommon::row_title($title, - 'LC_selfenroll_pick_box_title','LC_oddrow_value')."\n"; + $output .= &Apache::lonhtmlcommon::row_title($title); if ($item eq 'types') { my $curr_types = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_types'}; my $showdomdesc = 1; @@ -4930,7 +5113,7 @@ sub role_display_filter { &mt('[_1]Note:[_2] Only changes made from servers running LON-CAPA 2.6.99.0 or later are displayed.'); if ($version) { $output .= ' '.&mt('This server is version [_3].','','',$version); } - $output .= '

'; + $output .= '

'; return $output; }