--- loncom/interface/loncreateuser.pm 2012/02/06 04:50:52 1.358.4.1 +++ loncom/interface/loncreateuser.pm 2012/08/14 15:45:06 1.362 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.358.4.1 2012/02/06 04:50:52 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.362 2012/08/14 15:45:06 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -223,6 +223,7 @@ sub build_tools_display { my %lt = &Apache::lonlocal::texthash ( 'blog' => "Personal User Blog", 'aboutme' => "Personal Information Page", + 'webdav' => "WebDAV access to authoring spaces (if SSL and author/co-author)", 'portfolio' => "Personal User Portfolio", 'avai' => "Available", 'cusa' => "availability", @@ -232,6 +233,7 @@ sub build_tools_display { 'official' => 'Can request creation of official courses', 'unofficial' => 'Can request creation of unofficial courses', 'community' => 'Can request creation of communities', + 'requestauthor' => 'Can request author space', ); if ($context eq 'requestcourses') { %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, @@ -246,10 +248,21 @@ sub build_tools_display { %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$ccdomain); $isadv = &Apache::lonnet::is_advanced_user($ccuname,$ccdomain); + } elsif ($context eq 'requestauthor') { + %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, + 'requestauthor'); + @usertools = ('requestauthor'); + @options =('norequest','approval','automatic'); + %reqtitles = &requestauthor_titles(); + %reqdisplay = &requestauthor_display(); + $colspan = ' colspan="2"'; + %domconfig = + &Apache::lonnet::get_dom('configuration',['requestauthor'],$ccdomain); } else { %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, - 'tools.aboutme','tools.portfolio','tools.blog'); - @usertools = ('aboutme','blog','portfolio'); + 'tools.aboutme','tools.portfolio','tools.blog', + 'tools.webdav'); + @usertools = ('aboutme','blog','webdav','portfolio'); } foreach my $item (@usertools) { my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off, @@ -259,7 +272,12 @@ sub build_tools_display { $curr_access = &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef, $context); - if ($userenv{$context.'.'.$item} ne '') { + if ($context eq 'requestauthor') { + if ($userenv{$context} ne '') { + $cust_on = ' checked="checked" '; + $cust_off = ''; + } + } elsif ($userenv{$context.'.'.$item} ne '') { $cust_on = ' checked="checked" '; $cust_off = ''; } @@ -269,6 +287,12 @@ sub build_tools_display { } else { $custom_access = &mt('Currently from custom setting.'); } + } elsif ($context eq 'requestauthor') { + if ($userenv{$context} eq '') { + $custom_access = &mt('Currently from default setting.'); + } else { + $custom_access = &mt('Currently from custom setting.'); + } } else { if ($userenv{$context.'.'.$item} eq '') { $custom_access = @@ -290,15 +314,27 @@ sub build_tools_display { ' <td'.$colspan.'>'.$lt{$item}.'</td>'."\n". ' </tr>'."\n". &Apache::loncommon::start_data_table_row()."\n"; - if ($context eq 'requestcourses') { + if (($context eq 'requestcourses') || ($context eq 'requestauthor')) { my ($curroption,$currlimit); - if ($userenv{$context.'.'.$item} ne '') { - $curroption = $userenv{$context.'.'.$item}; + my $envkey = $context.'.'.$item; + if ($context eq 'requestauthor') { + $envkey = $context; + } + if ($userenv{$envkey} ne '') { + $curroption = $userenv{$envkey}; } else { my (@inststatuses); - $curroption = - &Apache::loncoursequeueadmin::get_processtype($ccuname,$ccdomain,$isadv,$ccdomain, - $item,\@inststatuses,\%domconfig); + if ($context eq 'requestcourses') { + $curroption = + &Apache::loncoursequeueadmin::get_processtype('course',$ccuname,$ccdomain, + $isadv,$ccdomain,$item, + \@inststatuses,\%domconfig); + } else { + $curroption = + &Apache::loncoursequeueadmin::get_processtype('requestauthor',$ccuname,$ccdomain, + $isadv,$ccdomain,undef, + \@inststatuses,\%domconfig); + } } if (!$curroption) { $curroption = 'norequest'; @@ -336,28 +372,36 @@ sub build_tools_display { $checked = ' checked="checked"'; } } + my $name = 'crsreq_'.$item; + if ($context eq 'requestauthor') { + $name = $item; + } $custdisp .= '<tr><td><span class="LC_nobreak"><label>'. - '<input type="radio" name="crsreq_'.$item. - '" value="'.$val.'"'.$checked.' />'. + '<input type="radio" name="'.$name.'" '. + 'value="'.$val.'"'.$checked.' />'. $reqtitles{$option}.'</label> '; if ($option eq 'autolimit') { - $custdisp .= '<input type="text" name="crsreq_'. - $item.'_limit" size="1" '. + $custdisp .= '<input type="text" name="'.$name. + '_limit" size="1" '. 'value="'.$currlimit.'" /></span><br />'. $reqtitles{'unlimited'}; - } else { - $custdisp .= '</span>'; - } - $custdisp .= '</td></tr>'; + } else { + $custdisp .= '</span>'; + } + $custdisp .= '</td></tr>'; } $custdisp .= '</table>'; $custradio = '</span></td><td>'.&mt('Custom setting').'<br />'.$custdisp; } else { $currdisp = ($curr_access?&mt('Yes'):&mt('No')); + my $name = $context.'_'.$item; + if ($context eq 'requestauthor') { + $name = $context; + } $custdisp = '<span class="LC_nobreak"><label>'. - '<input type="radio" name="'.$context.'_'.$item.'"'. - ' value="1"'. $tool_on.'/>'.&mt('On').'</label> <label>'. - '<input type="radio" name="'.$context.'_'.$item.'" value="0" '. + '<input type="radio" name="'.$name.'"'. + ' value="1" '.$tool_on.'/>'.&mt('On').'</label> <label>'. + '<input type="radio" name="'.$name.'" value="0" '. $tool_off.'/>'.&mt('Off').'</label></span>'; $custradio = (' 'x2).'--'.$lt{'cusa'}.': '.$custdisp. '</span>'; @@ -453,6 +497,17 @@ sub coursereq_externaluser { return $output; } +sub domainrole_req { + my ($ccuname,$ccdomain) = @_; + return '<br /><h3>'. + &mt('User Can Request Assignment of Domain Roles?'). + '</h3>'."\n". + &Apache::loncommon::start_data_table(). + &build_tools_display($ccuname,$ccdomain, + 'requestauthor'). + &Apache::loncommon::end_data_table(); +} + sub courserequest_titles { my %titles = &Apache::lonlocal::texthash ( official => 'Official', @@ -476,6 +531,80 @@ sub courserequest_display { return %titles; } +sub requestauthor_titles { + my %titles = &Apache::lonlocal::texthash ( + norequest => 'Not allowed', + approval => 'Approval by Dom. Coord.', + automatic => 'Automatic approval', + ); + return %titles; + +} + +sub requestauthor_display { + my %titles = &Apache::lonlocal::texthash ( + approval => 'Yes, need approval', + automatic => 'Yes, automatic approval', + norequest => 'No', + ); + return %titles; +} + +sub curr_requestauthor { + my ($uname,$udom,$isadv,$inststatuses,$domconfig) = @_; + return unless ((ref($inststatuses) eq 'ARRAY') && (ref($domconfig) eq 'HASH')); + if ($uname eq '' || $udom eq '') { + $uname = $env{'user.name'}; + $udom = $env{'user.domain'}; + $isadv = $env{'user.adv'}; + } + my (%userenv,%settings,$val); + my @options = ('automatic','approval'); + %userenv = + &Apache::lonnet::userenvironment($udom,$uname,'requestauthor','inststatus'); + if ($userenv{'requestauthor'}) { + $val = $userenv{'requestauthor'}; + @{$inststatuses} = ('_custom_'); + } else { + my %alltasks; + if (ref($domconfig->{'requestauthor'}) eq 'HASH') { + %settings = %{$domconfig->{'requestauthor'}}; + if (($isadv) && ($settings{'_LC_adv'} ne '')) { + $val = $settings{'_LC_adv'}; + @{$inststatuses} = ('_LC_adv_'); + } else { + if ($userenv{'inststatus'} ne '') { + @{$inststatuses} = split(',',$userenv{'inststatus'}); + } else { + @{$inststatuses} = ('default'); + } + foreach my $status (@{$inststatuses}) { + if (exists($settings{$status})) { + my $value = $settings{$status}; + next unless ($value); + unless (exists($alltasks{$value})) { + if (ref($alltasks{$value}) eq 'ARRAY') { + unless(grep(/^\Q$status\E$/,@{$alltasks{$value}})) { + push(@{$alltasks{$value}},$status); + } + } else { + @{$alltasks{$value}} = ($status); + } + } + } + } + foreach my $option (@options) { + if ($alltasks{$option}) { + $val = $option; + last; + } + } + } + } + } + return $val; +} + # =================================================================== Phase one sub print_username_entry_form { @@ -674,7 +803,7 @@ $userpicker ENDBLOCK if ($env{'form.phase'} eq '') { my $defdom=$env{'request.role.domain'}; - my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain','',1); + my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain'); my %lt=&Apache::lonlocal::texthash( 'enro' => 'Enroll one student', 'enrm' => 'Enroll one member', @@ -723,7 +852,7 @@ $showresponse <table> <tr> <td>$lt{'usr'}:</td> - <td><input type="text" size="25" name="srchterm" /></td> + <td><input type="text" size="15" name="srchterm" /></td> <td> $lt{'dom'}:</td><td>$domform</td> <td> $sellink </td> <td> <input name="userrole" type="submit" value="$buttontext" /></td> @@ -742,19 +871,13 @@ sub user_modification_js { <script type="text/javascript" language="Javascript"> // <![CDATA[ - function pclose() { - parmwin=window.open("/adm/rat/empty.html","LONCAPAparms", - "height=350,width=350,scrollbars=no,menubar=no"); - parmwin.close(); - } - $pjump_def $dc_setcourse_code function dateset() { eval("document.cu."+document.cu.pres_marker.value+ ".value=document.cu.pres_value.value"); - pclose(); + modalWindow.close(); } $nondc_setsection_code @@ -938,18 +1061,12 @@ sub print_user_modification_page { my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules); my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain); if ($uhome eq 'no_host') { - my $lc_ccuname = lc($ccuname); - if ($lc_ccuname ne $ccuname) { - $uhome = &Apache::lonnet::homeserver($lc_ccuname,$ccdomain); - $ccuname = $lc_ccuname; - } - } - if ($uhome eq 'no_host') { + my $usertype; my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($ccdomain,'username'); - my $usertype = - &Apache::lonuserutils::check_usertype($ccdomain,$ccuname,$rules, - \%curr_rules,\%got_rules); + $usertype = + &Apache::lonuserutils::check_usertype($ccdomain,$ccuname,$rules, + \%curr_rules,\%got_rules); my $cancreate = &Apache::lonuserutils::can_create_user($ccdomain,$context, $usertype); @@ -961,7 +1078,9 @@ sub print_user_modification_page { ); my $response; if ($env{'form.origform'} eq 'crtusername') { - $response = '<span class="LC_warning">'.&mt('No match found for the username [_1] in LON-CAPA domain: [_2]','<b>'.$ccuname.'</b>',$ccdomain). + $response = '<span class="LC_warning">'. + &mt('No match found for the username [_1] in LON-CAPA domain: [_2]', + '<b>'.$ccuname.'</b>',$ccdomain). '</span><br />'; } $response .= '<p class="LC_warning">' @@ -1078,12 +1197,15 @@ ENDFORMINFO } } if ($newuser) { - my $portfolioform; + my ($portfolioform,$domroleform); if ((&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) || (&Apache::lonnet::allowed('mut',$env{'request.role.domain'}))) { # Current user has quota or user tools modification privileges $portfolioform = '<br />'.&portfolio_quota($ccuname,$ccdomain); } + if (&Apache::lonnet::allowed('cau',$env{'request.role.domain'})) { + $domroleform = '<br />'.&domainrole_req($ccuname,$ccdomain); + } &initialize_authen_forms($ccdomain,$formname); my %lt=&Apache::lonlocal::texthash( 'cnu' => 'Create New User', @@ -1129,7 +1251,8 @@ $lt{'hs'}: $home_server_pick $r->print($home_server_pick); } if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { - $r->print('<br /><h3>'.&mt('User Can Request Creation of Courses/Communities in this Domain?').'</h3>'. + $r->print('<br /><h3>'. + &mt('User Can Request Creation of Courses/Communities in this Domain?').'</h3>'. &Apache::loncommon::start_data_table(). &build_tools_display($ccuname,$ccdomain, 'requestcourses'). @@ -1193,7 +1316,7 @@ ENDAUTH } else { $r->print(&Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc)); } - $r->print($portfolioform); + $r->print($portfolioform.$domroleform); if ($env{'form.action'} eq 'singlestudent') { $r->print(&date_sections_select($context,$newuser,$formname, $permission)); @@ -1227,10 +1350,10 @@ ENDCHANGEUSER $inst_results{$ccuname.':'.$ccdomain}); $r->print($personal_table); if ($showforceid) { - $r->print(&Apache::lonuserutils::forceid_change($context)); + $r->print('<table>'.&Apache::lonuserutils::forceid_change($context).'</table>'); } if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { - $r->print('<h3>'.&mt('User Can Request Creation of Courses/Communities in this Domain?').'</h3>'. + $r->print('<br /><h3>'.&mt('User Can Request Creation of Courses/Communities in this Domain?').'</h3>'. &Apache::loncommon::start_data_table()); if ($env{'request.role.domain'} eq $ccdomain) { $r->print(&build_tools_display($ccuname,$ccdomain,'requestcourses')); @@ -1241,12 +1364,19 @@ ENDCHANGEUSER $r->print(&Apache::loncommon::end_data_table()); } $r->print('</div>'); - my $user_auth_text = &user_authentication($ccuname,$ccdomain,$formname); - my ($user_quota_text,$user_tools_text,$user_reqcrs_text); + my @order = ('auth','quota','tools','requestauthor'); + my %user_text; + my ($isadv,$isauthor) = + &Apache::lonnet::is_advanced_user($ccuname,$ccdomain); + if ((!$isauthor) && + (&Apache::lonnet::allowed('cau',$env{'request.role.domain'}))) { + $user_text{'requestauthor'} = &domainrole_req($ccuname,$ccdomain); + } + $user_text{'auth'} = &user_authentication($ccuname,$ccdomain,$formname); if ((&Apache::lonnet::allowed('mpq',$ccdomain)) || (&Apache::lonnet::allowed('mut',$ccdomain))) { # Current user has quota modification privileges - $user_quota_text = &portfolio_quota($ccuname,$ccdomain); + $user_text{'quota'} = &portfolio_quota($ccuname,$ccdomain); } if (!&Apache::lonnet::allowed('mpq',$ccdomain)) { if (&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) { @@ -1258,7 +1388,7 @@ ENDCHANGEUSER 'youd' => "You do not have privileges to modify the portfolio quota for this user.", 'ichr' => "If a change is required, contact a domain coordinator for the domain", ); - $user_quota_text = <<ENDNOPORTPRIV; + $user_text{'quota'} = <<ENDNOPORTPRIV; <h3>$lt{'dska'}</h3> $lt{'youd'} $lt{'ichr'}: $ccdomain ENDNOPORTPRIV @@ -1268,46 +1398,34 @@ ENDNOPORTPRIV if (&Apache::lonnet::allowed('mut',$env{'request.role.domain'})) { my %lt=&Apache::lonlocal::texthash( 'utav' => "User Tools Availability", - 'yodo' => "You do not have privileges to modify Portfolio, Blog or Personal Information Page settings for this user.", + 'yodo' => "You do not have privileges to modify Portfolio, Blog, WebDAV, or Personal Information Page settings for this user.", 'ifch' => "If a change is required, contact a domain coordinator for the domain", ); - $user_tools_text = <<ENDNOTOOLSPRIV; + $user_text{'tools'} = <<ENDNOTOOLSPRIV; <h3>$lt{'utav'}</h3> $lt{'yodo'} $lt{'ifch'}: $ccdomain ENDNOTOOLSPRIV } } - if ($user_auth_text ne '') { - $r->print('<div class="LC_left_float">'.$user_auth_text); - if ($user_quota_text ne '') { - $r->print($user_quota_text); - } - if ($user_tools_text ne '') { - $r->print($user_tools_text); - } - if ($env{'form.action'} eq 'singlestudent') { - $r->print(&date_sections_select($context,$newuser,$formname)); - } - } elsif ($user_quota_text ne '') { - $r->print('<div class="LC_left_float">'.$user_quota_text); - if ($user_tools_text ne '') { - $r->print($user_tools_text); - } - if ($env{'form.action'} eq 'singlestudent') { - $r->print(&date_sections_select($context,$newuser,$formname)); - } - } elsif ($user_tools_text ne '') { - $r->print('<div class="LC_left_float">'.$user_tools_text); - if ($env{'form.action'} eq 'singlestudent') { - $r->print(&date_sections_select($context,$newuser,$formname)); - } - } else { - if ($env{'form.action'} eq 'singlestudent') { - $r->print('<div class="LC_left_float">'. - &date_sections_select($context,$newuser,$formname)); + my $gotdiv = 0; + foreach my $item (@order) { + if ($user_text{$item} ne '') { + unless ($gotdiv) { + $r->print('<div class="LC_left_float">'); + $gotdiv = 1; + } + $r->print('<br />'.$user_text{$item}); } } - $r->print('</div><div class="LC_clear_float_footer"></div>'); + if ($env{'form.action'} eq 'singlestudent') { + unless ($gotdiv) { + $r->print('<div class="LC_left_float">'); + } + $r->print(&date_sections_select($context,$newuser,$formname)); + } + if ($gotdiv) { + $r->print('</div><div class="LC_clear_float_footer"></div>'); + } if ($env{'form.action'} ne 'singlestudent') { &display_existing_roles($r,$ccuname,$ccdomain,\%inccourses,$context, $roledom,$crstype); @@ -1477,8 +1595,7 @@ sub display_existing_roles { $rolesdump{$newkey} = $newvalue; } } else { - my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1}); - %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname,'.',undef,$extra); + %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname); } # Build up table of user roles to allow revocation and re-enabling of roles. my ($tmp) = keys(%rolesdump); @@ -2325,8 +2442,9 @@ sub update_user_data { my (%alerts,%rulematch,%inst_results,%curr_rules); my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id'); - my @usertools = ('aboutme','blog','portfolio'); + my @usertools = ('aboutme','blog','webdav','portfolio'); my @requestcourses = ('official','unofficial','community'); + my @requestauthor = ('requestauthor'); my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($env{'form.ccdomain'}); my %canmodify_status = @@ -2423,6 +2541,12 @@ sub update_user_data { \%changeHash,'requestcourses'); } } + if ($env{'form.customrequestauthor'} == 1) { + $newcustom{'requestauthor'} = $env{'form.requestauthor'}; + $changed{'requestauthor'} = &tool_admin('requestauthor', + $newcustom{'requestauthor'}, + \%changeHash,'requestauthor'); + } } if ($canmodify_status{'inststatus'}) { if (exists($env{'form.inststatus'})) { @@ -2478,10 +2602,11 @@ sub update_user_data { my %userenv = &Apache::lonnet::get ('environment',['firstname','middlename','lastname','generation', 'id','permanentemail','portfolioquota','inststatus','tools.aboutme', - 'tools.blog','tools.portfolio','requestcourses.official', - 'requestcourses.unofficial','requestcourses.community', - 'reqcrsotherdom.official','reqcrsotherdom.unofficial', - 'reqcrsotherdom.community'], + 'tools.blog','tools.webdav','tools.portfolio', + 'requestcourses.official','requestcourses.unofficial', + 'requestcourses.community','reqcrsotherdom.official', + 'reqcrsotherdom.unofficial','reqcrsotherdom.community', + 'requestauthor'], $env{'form.ccdomain'},$env{'form.ccuname'}); my ($tmp) = keys(%userenv); if ($tmp =~ /^(con_lost|error)/i) { @@ -2609,7 +2734,7 @@ sub update_user_data { $olddefquota,$oldsettingstatus,$newdefquota,$newsettingstatus); @disporder = ('inststatus'); if ($env{'request.role.domain'} eq $env{'form.ccdomain'}) { - push(@disporder,'requestcourses'); + push(@disporder,'requestcourses','requestauthor'); } else { push(@disporder,'reqcrsotherdom'); } @@ -2633,6 +2758,9 @@ sub update_user_data { if (&Apache::lonnet::allowed('mau',$env{'form.ccdomain'})) { $canshow{'inststatus'} = 1; } + if (&Apache::lonnet::allowed('cau',$env{'form.ccdomain'})) { + $canshow{'requestauthor'} = 1; + } my (%changeHash,%changed); if ($oldinststatus eq '') { $oldsettings{'inststatus'} = $othertitle; @@ -2722,6 +2850,7 @@ sub update_user_data { if ($env{'form.ccdomain'} eq $env{'request.role.domain'}) { &tool_changes('requestcourses',\@requestcourses,\%oldsettings,\%oldsettingstext, \%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext); + &tool_changes('requestauthor',\@requestauthor,\%oldsettings,\%oldsettingstext,\%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext); } else { &tool_changes('reqcrsotherdom',\@requestcourses,\%oldsettings,\%oldsettingstext, \%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext); @@ -2749,13 +2878,22 @@ sub update_user_data { || ($key eq 'community')) { $newenvhash{'environment.requestcourses.'.$key} = $changeHash{'requestcourses.'.$key}; - if ($changeHash{'requestcourses.'.$key} ne '') { + if ($changeHash{'requestcourses.'.$key}) { $newenvhash{'environment.canrequest.'.$key} = 1; } else { $newenvhash{'environment.canrequest.'.$key} = &Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'}, $key,'reload','requestcourses'); } + } elsif ($key eq 'requestauthor') { + $newenvhash{'environment.'.$key} = $changeHash{$key}; + if ($changeHash{$key}) { + $newenvhash{'environment.canrequest.author'} = 1; + } else { + $newenvhash{'environment.canrequest.author'} = + &Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'}, + $key,'reload','requestauthor'); + } } elsif ($key ne 'quota') { $newenvhash{'environment.tools.'.$key} = $changeHash{'tools.'.$key}; @@ -2797,7 +2935,7 @@ sub update_user_data { ((keys(%changed) > 0) && $chgresult eq 'ok')) { # Tell the user we changed the name &display_userinfo($r,1,\@disporder,\%canshow,\@requestcourses, - \@usertools,\%userenv,\%changed,\%namechanged, + \@usertools,\@requestauthor,\%userenv,\%changed,\%namechanged, \%oldsettings, \%oldsettingstext,\%newsettings, \%newsettingstext); if ($env{'form.cid'} ne $userenv{'id'}) { @@ -2830,7 +2968,7 @@ sub update_user_data { # or ability to request creation of courses, # but we can still tell them what the name and quota and availabilities are &display_userinfo($r,undef,\@disporder,\%canshow,\@requestcourses, - \@usertools,\%userenv,\%changed,\%namechanged,\%oldsettings, + \@usertools,\@requestauthor,\%userenv,\%changed,\%namechanged,\%oldsettings, \%oldsettingstext,\%newsettings,\%newsettingstext); } if (@mod_disallowed) { @@ -2907,12 +3045,13 @@ sub update_user_data { } sub display_userinfo { - my ($r,$changed,$order,$canshow,$requestcourses,$usertools,$userenv, - $changedhash,$namechangedhash,$oldsetting,$oldsettingtext, + my ($r,$changed,$order,$canshow,$requestcourses,$usertools,$requestauthor, + $userenv,$changedhash,$namechangedhash,$oldsetting,$oldsettingtext, $newsetting,$newsettingtext) = @_; return unless (ref($order) eq 'ARRAY' && ref($canshow) eq 'HASH' && ref($requestcourses) eq 'ARRAY' && + ref($requestauthor) eq 'ARRAY' && ref($usertools) eq 'ARRAY' && ref($userenv) eq 'HASH' && ref($changedhash) eq 'HASH' && @@ -2931,11 +3070,13 @@ sub display_userinfo { 'permanentemail' => 'Permanent e-mail address', 'quota' => 'Disk space allocated to portfolio files', 'blog' => 'Blog Availability', + 'webdav' => 'WebDAV Availability', 'aboutme' => 'Personal Information Page Availability', 'portfolio' => 'Portfolio Availability', 'official' => 'Can Request Official Courses', 'unofficial' => 'Can Request Unofficial Courses', 'community' => 'Can Request Communities', + 'requestauthor' => 'Can Request Author Role', 'inststatus' => "Affiliation", 'prvs' => 'Previous Value:', 'chto' => 'Changed To:' @@ -3131,25 +3272,29 @@ sub tool_changes { return; } foreach my $tool (@{$usertools}) { - my $newval; + my ($newval,$envkey); + $envkey = $context.'.'.$tool; if ($context eq 'requestcourses') { $newval = $env{'form.crsreq_'.$tool}; if ($newval eq 'autolimit') { $newval .= '='.$env{'form.crsreq_'.$tool.'_limit'}; } + } elsif ($context eq 'requestauthor') { + $newval = $env{'form.'.$context}; + $envkey = $context; } else { $newval = $env{'form.'.$context.'_'.$tool}; } - if ($userenv->{$context.'.'.$tool} ne '') { + if ($userenv->{$envkey} ne '') { $oldaccess->{$tool} = &mt('custom'); - if ($userenv->{$context.'.'.$tool}) { + if ($userenv->{$envkey}) { $oldaccesstext->{$tool} = &mt("availability set to 'on'"); } else { $oldaccesstext->{$tool} = &mt("availability set to 'off'"); } - $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool}; + $changeHash->{$envkey} = $userenv->{$envkey}; if ($env{'form.custom'.$tool} == 1) { - if ($newval ne $userenv->{$context.'.'.$tool}) { + if ($newval ne $userenv->{$envkey}) { $changed->{$tool} = &tool_admin($tool,$newval,$changeHash, $context); if ($changed->{$tool}) { @@ -3593,6 +3738,10 @@ sub tool_admin { if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { $canchange = 1; } + } elsif ($context eq 'requestauthor') { + if (&Apache::lonnet::allowed('cau',$env{'request.role.domain'})) { + $canchange = 1; + } } elsif (&Apache::lonnet::allowed('mut',$env{'form.ccdomain'})) { # Current user has quota modification privileges $canchange = 1; @@ -3601,7 +3750,11 @@ sub tool_admin { if ($canchange) { if (ref($changeHash) eq 'HASH') { $toolchanged = 1; - $changeHash->{$context.'.'.$tool} = $settool; + if ($tool eq 'requestauthor') { + $changeHash->{$context} = $settool; + } else { + $changeHash->{$context.'.'.$tool} = $settool; + } } } return $toolchanged; @@ -4106,9 +4259,7 @@ sub handler { if ($env{'form.phase'} eq 'createnewuser') { my $response; if ($env{'form.srchterm'} !~ /^$match_username$/) { - my $response = '<p class="LC_warning">'. - &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @'). - '</p>'; + my $response = &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @'); $env{'form.phase'} = ''; &print_username_entry_form($r,$context,$response,$srch,undef,$crstype,$brcrum); } else { @@ -4172,6 +4323,32 @@ sub handler { } else { &custom_role_editor($r,$brcrum); } + } elsif (($env{'form.action'} eq 'processauthorreq') && + ($permission->{'cusr'}) && + (&Apache::lonnet::allowed('cau',$env{'request.role.domain'}))) { + push(@{$brcrum}, + {href => '/adm/createuser?action=processauthorreq', + text => 'Authoring space requests', + help => 'Domain_Role_Approvals'}); + $bread_crumbs_component = 'Authoring requests'; + if ($env{'form.state'} eq 'done') { + push(@{$brcrum}, + {href => '/adm/createuser?action=authorreqqueue', + text => 'Result', + help => 'Domain_Role_Approvals'}); + $bread_crumbs_component = 'Authoring request result'; + } + $args = { bread_crumbs => $brcrum, + bread_crumbs_component => $bread_crumbs_component}; + $r->print(&header(undef,$args)); + if (!exists($env{'form.state'})) { + $r->print(&Apache::loncoursequeueadmin::display_queued_requests('requestauthor', + $env{'request.role.domain'})); + } elsif ($env{'form.state'} eq 'done') { + $r->print('<h3>'.&mt('Authoring request processing').'</h3>'."\n"); + $r->print(&Apache::loncoursequeueadmin::update_request_queue('requestauthor', + $env{'request.role.domain'})); + } } elsif (($env{'form.action'} eq 'listusers') && ($permission->{'view'} || $permission->{'cusr'})) { if ($env{'form.phase'} eq 'bulkchange') { @@ -4474,6 +4651,14 @@ sub print_main_menu { permission => $permission->{'custom'}, linktitle => 'Configure a custom role.', }, + { + linktext => 'Authoring Space Requests', + icon => 'selfenrl-queue.png', + #help => 'Domain_Role_Approvals', + url => '/adm/createuser?action=processauthorreq', + permission => $permission->{'cusr'}, + linktitle => 'Approve or reject author role requests', + }, ); }elsif ($context eq 'course'){ @@ -5622,9 +5807,7 @@ sub user_search_result { if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'instd')) { if (($srch->{'srchdomain'} eq '') || ! (&Apache::lonnet::domain($srch->{'srchdomain'}))) { - $response = '<p class="LC_warning">'. - &mt('You must specify a valid domain when searching in a domain or institutional directory.'). - '</p>'; + $response = &mt('You must specify a valid domain when searching in a domain or institutional directory.') } } if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'crs') || @@ -5637,9 +5820,7 @@ sub user_search_result { } } if ($unamecheck !~ /^$match_username$/) { - $response = '<p class="LC_warning">'. - &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @'). - '</p>'; + $response = &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @'); } } } @@ -5814,8 +5995,7 @@ sub user_search_result { ($currstate,$response,$forcenewuser) = &build_search_response($context,$srch,%srch_results); } else { - my $showdom = &display_domain_info($srch->{'srchdomain'}); - $response = '<span class="LC_warning">'. + my $showdom = &display_domain_info($srch->{'srchdomain'}); $response = '<span class="LC_warning">'. &mt('Institutional directory search is not available in domain: [_1]',$showdom). '</span><br />'. &mt('You may want to search in the LON-CAPA domain instead of the institutional directory.').