--- loncom/interface/loncreateuser.pm 2008/12/06 12:49:18 1.266 +++ loncom/interface/loncreateuser.pm 2008/12/08 22:46:28 1.267 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.266 2008/12/06 12:49:18 bisitz Exp $ +# $Id: loncreateuser.pm,v 1.267 2008/12/08 22:46:28 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -122,11 +122,20 @@ sub auth_abbrev { sub portfolio_quota { my ($ccuname,$ccdomain) = @_; my %lt = &Apache::lonlocal::texthash( - 'disk' => "Disk space allocated to user's portfolio files", - 'cuqu' => "Current quota", - 'cust' => "Custom quota", - 'defa' => "Default", - 'chqu' => "Change quota", + 'usrt' => "User Tools", + 'blog' => "Personal User Blog", + 'aboutme' => "Personal Information Page", + 'portfolio' => "Personal User Portfolio", + 'avai' => "Available", + 'cusa' => "availability", + 'chse' => "Change setting", + 'disk' => "Disk space allocated to user's portfolio files", + 'cuqu' => "Current quota", + 'cust' => "Custom quota", + 'defa' => "Default", + 'usde' => "Use default", + 'uscu' => "Use custom", + 'chqu' => "Change quota", ); my ($currquota,$quotatype,$inststatus,$defquota) = &Apache::loncommon::get_user_quota($ccuname,$ccdomain); @@ -175,27 +184,82 @@ END_SCRIPT " affiliation ([_2]).",$defquota,$longinsttype); } } - my $output = $quota_javascript. - '

'.$lt{'disk'}.'

'. - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_row(). - ''.$lt{'cuqu'}.': '.$currquota.' Mb.  '. - $defaultinfo.''. - &Apache::loncommon::end_data_table_row(). - &Apache::loncommon::start_data_table_row(). - ''.$lt{'chqu'}. - ':  '. - '  '. - ' Mb'. - &Apache::loncommon::end_data_table_row(). - &Apache::loncommon::end_data_table(); + + my $output = $quota_javascript."\n". + '

'.$lt{'usrt'}.'

'."\n". + &Apache::loncommon::start_data_table(); + + if (&Apache::lonnet::allowed('mut',$ccdomain)) { + my %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, + 'tools.aboutme','tools.portfolio','tools.blog'); + my @usertools = ('aboutme','blog','portfolio'); + foreach my $item (@usertools) { + my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off); + $cust_off = 'checked="checked" '; + $tool_on = 'checked="checked" '; + $curr_access = &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item); + if ($userenv{'tools.'.$item} eq '') { + $custom_access = 'default'; + if (!$curr_access) { + $tool_off = 'checked="checked" '; + $tool_on = ''; + } + } else { + $custom_access = 'custom'; + $cust_on = ' checked="checked" '; + $cust_off = ''; + if ($userenv{'tools.'.$item} == 0) { + $tool_off = 'checked="checked" '; + $tool_on = ''; + } + } + $curr_access = &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item); + $output .= ' '."\n". + ' '.$lt{$item}.''."\n". + ' '."\n". + &Apache::loncommon::start_data_table_row()."\n". + ' '.&mt('Availability determined currently from [_1] setting.',$custom_access). + '     '.$lt{'avai'}.': '. + ($curr_access?&mt('Yes'):&mt('No')).''."\n". + &Apache::loncommon::end_data_table_row()."\n". + &Apache::loncommon::start_data_table_row()."\n". + ' '.$lt{'chse'}.':    '. + '  --  '. + $lt{'cusa'}.':  '."\n". + &Apache::loncommon::end_data_table_row()."\n"; + } + } + if (&Apache::lonnet::allowed('mpq',$ccdomain)) { + $output .= ''."\n". + ' '.$lt{'disk'}.''."\n". + ' '."\n". + &Apache::loncommon::start_data_table_row()."\n". + ' '.$lt{'cuqu'}.': '. + $currquota.' Mb.  '. + $defaultinfo.''."\n". + &Apache::loncommon::end_data_table_row()."\n". + &Apache::loncommon::start_data_table_row()."\n". + ' '.$lt{'chqu'}. + ':  '. + '  '. + ' Mb'."\n". + &Apache::loncommon::end_data_table_row()."\n"; + } + $output .= &Apache::loncommon::end_data_table(); return $output; } @@ -651,8 +715,9 @@ ENDFORMINFO } if ($newuser) { my $portfolioform; - if (&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) { - # Current user has quota modification privileges + 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 = '
'.&portfolio_quota($ccuname,$ccdomain); } &initialize_authen_forms($ccdomain,$formname); @@ -777,35 +842,62 @@ ENDCHANGEUSER } $r->print(''); my $user_auth_text = &user_authentication($ccuname,$ccdomain,$formname); - my $user_quota_text; - if (&Apache::lonnet::allowed('mpq',$ccdomain)) { + my ($user_quota_text,$user_tools_text); + if ((&Apache::lonnet::allowed('mpq',$ccdomain)) || + (&Apache::lonnet::allowed('mut',$ccdomain))) { # Current user has quota modification privileges $user_quota_text = &portfolio_quota($ccuname,$ccdomain); - } elsif (&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) { - # Get the user's portfolio information - my %portq = &Apache::lonnet::get('environment',['portfolioquota'], - $ccdomain,$ccuname); - - my %lt=&Apache::lonlocal::texthash( - 'dska' => "Disk space allocated to user's portfolio files", - '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 = < "Disk space allocated to user's portfolio files", + '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 = <$lt{'dska'} $lt{'youd'} $lt{'ichr'}: $ccdomain ENDNOPORTPRIV + } + } + if (!&Apache::lonnet::allowed('mut',$ccdomain)) { + 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 Home Page settings for this user.", + 'ifch' => "If a change is required, contact a domain coordinator for the domain", + ); + $user_tools_text = <$lt{'utav'} +$lt{'yodo'} $lt{'ifch'}: $ccdomain +ENDNOTOOLSPRIV + } } if ($user_auth_text ne '') { $r->print('
'.$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('
'.$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('
'.$user_tools_text); if ($env{'form.action'} eq 'singlestudent') { $r->print(&date_sections_select($context,$newuser,$formname)); } @@ -1647,6 +1739,7 @@ sub update_user_data { $r->print('

'.&mt('User [_1] in domain [_2]', $env{'form.ccuname'}, $env{'form.ccdomain'}).'

'); my (%alerts,%rulematch,%inst_results,%curr_rules); + my @usertools = ('aboutme','blog','portfolio'); if ($env{'form.makeuser'}) { $r->print('

'.&mt('Creating new account.').'

'); # Check for the authentication mode and password @@ -1706,26 +1799,34 @@ sub update_user_data { $r->print(&mt('Generating user').': '.$result); $uhome = &Apache::lonnet::homeserver($env{'form.ccuname'}, $env{'form.ccdomain'}); - if (($uhome ne 'no_host') && ($env{'form.customquota'} == 1)) { - my (%changeHash,$newportfolioquota); - if ($env{'form.portfolioquota'} eq '') { - $newportfolioquota = 0; - } else { - $newportfolioquota = $env{'form.portfolioquota'}; - $newportfolioquota =~ s/[^\d\.]//g; + my (%changeHash,%newcustom,%changed); + if ($uhome ne 'no_host') { + if ($env{'form.customquota'} == 1) { + if ($env{'form.portfolioquota'} eq '') { + $newcustom{'quota'} = 0; + } else { + $newcustom{'quota'} = $env{'form.portfolioquota'}; + $newcustom{'quota'} =~ s/[^\d\.]//g; + } + $changed{'quota'} = "a_admin($newcustom{'quota'},\%changeHash); } - my $quotachanged = "a_admin($newportfolioquota,\%changeHash); - if ($quotachanged) { + foreach my $item (@usertools) { + if ($env{'form.custom'.$item} == 1) { + $newcustom{$item} = $env{'form.tools_'.$item}; + $changed{$item} = &tool_admin($item,$newcustom{$item},\%changeHash); + } + } + if (keys(%changed)) { $changeHash{'firstname'} = $env{'form.cfirstname'}; $changeHash{'middlename'} = $env{'form.cmiddlename'}; $changeHash{'lastname'} = $env{'form.clastname'}; $changeHash{'generation'} = $env{'form.cgeneration'}; $changeHash{'id'} = $env{'form.cid'}; $changeHash{'permanentemail'} = $env{'form.cpermanentemail'}; - my $quotachgresult = - &Apache::lonnet::put('environment',\%changeHash, - $env{'form.ccdomain'},$env{'form.ccuname'}); - } + my $chgresult = + &Apache::lonnet::put('environment',\%changeHash, + $env{'form.ccdomain'},$env{'form.ccuname'}); + } } $r->print('
'.&mt('Home server').': '.$uhome.' '. &Apache::lonnet::hostname($uhome)); @@ -1758,7 +1859,8 @@ sub update_user_data { # Check for need to change my %userenv = &Apache::lonnet::get ('environment',['firstname','middlename','lastname','generation', - 'id','permanentemail','portfolioquota','inststatus'], + 'id','permanentemail','portfolioquota','inststatus','tools.aboutme', + 'tools.blog','tools.portfolio'], $env{'form.ccdomain'},$env{'form.ccuname'}); my ($tmp) = keys(%userenv); if ($tmp =~ /^(con_lost|error)/i) { @@ -1883,14 +1985,17 @@ sub update_user_data { } my ($quotachanged,$oldportfolioquota,$newportfolioquota, $inststatus,$oldisdefault,$newisdefault,$olddefquotatext, - $newdefquotatext); + $newdefquotatext,%oldaccess,%oldaccesstext,%newaccess,%newaccesstext); my ($defquota,$settingstatus) = &Apache::loncommon::default_quota($env{'form.ccdomain'},$inststatus); - my $showquota; + my ($showquota,$showtools); if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) { $showquota = 1; } - my %changeHash; + if (&Apache::lonnet::allowed('mut',$env{'form.ccdomain'})) { + $showtools = 1; + } + my (%changeHash,%changed); $changeHash{'portfolioquota'} = $userenv{'portfolioquota'}; if ($userenv{'portfolioquota'} ne '') { $oldportfolioquota = $userenv{'portfolioquota'}; @@ -1902,10 +2007,10 @@ sub update_user_data { $newportfolioquota =~ s/[^\d\.]//g; } if ($newportfolioquota != $oldportfolioquota) { - $quotachanged = "a_admin($newportfolioquota,\%changeHash); + $changed{'quota'} = "a_admin($newportfolioquota,\%changeHash); } } else { - $quotachanged = "a_admin('',\%changeHash); + $changed{'quota'} = "a_admin('',\%changeHash); $newportfolioquota = $defquota; $newisdefault = 1; } @@ -1919,7 +2024,7 @@ sub update_user_data { $newportfolioquota = $env{'form.portfolioquota'}; $newportfolioquota =~ s/[^\d\.]//g; } - $quotachanged = "a_admin($newportfolioquota,\%changeHash); + $changed{'quota'} = "a_admin($newportfolioquota,\%changeHash); } else { $newportfolioquota = $defquota; $newisdefault = 1; @@ -1931,6 +2036,74 @@ sub update_user_data { if ($newisdefault) { $newdefquotatext = &get_defaultquota_text($settingstatus); } + + foreach my $tool (@usertools) { + if ($userenv{'tools.'.$tool} ne '') { + $oldaccess{$tool} = &mt('custom'); + if ($userenv{'tools_'.$tool}) { + $oldaccesstext{$tool} = &mt("availability set to 'on'"); + } else { + $oldaccesstext{$tool} = &mt("availability set to 'off'"); + } + $changeHash{'tools.'.$tool} = $userenv{'tools.'.$tool}; + if ($env{'form.custom'.$tool} == 1) { + if ($env{'form.tools_'.$tool} ne $userenv{'tools.'.$tool}) { + $changed{$tool} = &tool_admin($tool,$env{'form.tools_'.$tool}, + \%changeHash); + if ($changed{$tool}) { + $newaccess{$tool} = &mt('custom'); + if ($env{'form.tools_'.$tool}) { + $newaccesstext{$tool} = &mt("availability set to 'on'"); + } else { + $newaccesstext{$tool} = &mt("availability set to 'off'"); + } + } else { + $newaccess{$tool} = $oldaccess{$tool}; + if ($userenv{'tools.'.$tool}) { + $newaccesstext{$tool} = &mt("availability set to 'on'"); + } else { + $newaccesstext{$tool} = &mt("availability set to 'off'"); + } + } + } else { + $newaccess{$tool} = $oldaccess{$tool}; + $newaccesstext{$tool} = $oldaccesstext{$tool}; + } + } else { + $changed{$tool} = &tool_admin($tool,'',\%changeHash); + print STDERR "for $tool - changed is $changed{$tool}\n"; + if ($changed{$tool}) { + $newaccess{$tool} = &mt('default'); + } else { + $newaccess{$tool} = $oldaccess{$tool}; + if ($userenv{'tools.'.$tool}) { + $newaccesstext{$tool} = &mt("availability set to 'on'"); + } else { + $newaccesstext{$tool} = &mt("availability set to 'off'"); + } + } + } + } else { + $oldaccess{$tool} = &mt('default'); + if ($env{'form.custom'.$tool} == 1) { + $changed{$tool} = &tool_admin($tool,$env{'form.tools_'.$tool}, + \%changeHash); + if ($changed{$tool}) { + $newaccess{$tool} = &mt('custom'); + if ($env{'form.tools_'.$tool}) { + $newaccesstext{$tool} = &mt("availability set to 'on'"); + } else { + $newaccesstext{$tool} = &mt("availability set to 'off'"); + } + } else { + $newaccess{$tool} = $oldaccess{$tool}; + } + } else { + $newaccess{$tool} = $oldaccess{$tool}; + } + } + } + if ($env{'form.cfirstname'} ne $userenv{'firstname'} || $env{'form.cmiddlename'} ne $userenv{'middlename'} || $env{'form.clastname'} ne $userenv{'lastname'} || @@ -1939,18 +2112,33 @@ sub update_user_data { $env{'form.cpermanentemail'} ne $userenv{'permanentemail'} ) { $namechanged = 1; } - if ($namechanged || $quotachanged) { + if (($namechanged) || (keys(%changed) > 0)) { $changeHash{'firstname'} = $env{'form.cfirstname'}; $changeHash{'middlename'} = $env{'form.cmiddlename'}; $changeHash{'lastname'} = $env{'form.clastname'}; $changeHash{'generation'} = $env{'form.cgeneration'}; $changeHash{'id'} = $env{'form.cid'}; $changeHash{'permanentemail'} = $env{'form.cpermanentemail'}; - my ($quotachgresult,$namechgresult); - if ($quotachanged) { - $quotachgresult = + my ($chgresult,$namechgresult); + if (keys(%changed) > 0) { + $chgresult = &Apache::lonnet::put('environment',\%changeHash, $env{'form.ccdomain'},$env{'form.ccuname'}); + if ($chgresult eq 'ok') { + my %newenvhash; + my $hashid="$env{'form.ccuname'}:$env{'form.ccdomain'}"; + foreach my $key (keys(%changed)) { + if ($key ne 'quota') { + &Apache::lonnet::devalidate_cache_new('usertools.'.$key,$hashid); + $newenvhash{'environment.tools.'.$key} = + $changeHash{'tools.'.$key}; + } + } + if (($env{'user.name'} eq $env{'form.ccuname'}) && + ($env{'user.domain'} eq $env{'form.ccdomain'})) { + &Apache::lonnet::appenv(\%newenvhash); + } + } } if ($namechanged) { # Make the change @@ -1969,19 +2157,22 @@ sub update_user_data { ); } if (($namechanged && $namechgresult eq 'ok') || - ($quotachanged && $quotachgresult eq 'ok')) { + ((keys(%changed) > 0) && $chgresult eq 'ok')) { # Tell the user we changed the name my %lt=&Apache::lonlocal::texthash( - 'uic' => "User Information Changed", - 'frst' => "first", - 'mddl' => "middle", - 'lst' => "last", - 'gen' => "generation", - 'id' => "Student/Employee ID", - 'mail' => "permanent e-mail", - 'disk' => "disk space allocated to portfolio files", - 'prvs' => "Previous", - 'chto' => "Changed To" + 'uic' => "User Information Changed", + 'frst' => "First", + 'mddl' => "Middle", + 'lst' => "Last", + 'gen' => "Generation", + 'id' => "Student/Employee ID", + 'mail' => "Permanent E-mail", + 'disk' => "Disk space allocated to portfolio files", + 'blog' => "Blog Availability", + 'aboutme' => "Home Page Availability", + 'portfolio' => "Portfolio Availability", + 'prvs' => "Previous", + 'chto' => "Changed To" ); $r->print('

'.$lt{'uic'}.'

'. &Apache::loncommon::start_data_table(). @@ -1999,6 +2190,12 @@ END $r->print(" $lt{'disk'}\n"); } + if ($showtools) { + foreach my $item (@usertools) { + $r->print(" + $lt{$item}\n"); + } + } $r->print(&Apache::loncommon::end_data_table_header_row(). &Apache::loncommon::start_data_table_row()); $r->print(<<"END"); @@ -2014,10 +2211,16 @@ END $r->print(" $oldportfolioquota Mb $olddefquotatext \n"); } + if ($showtools) { + foreach my $item (@usertools) { + $r->print(" + $oldaccess{$item} $oldaccesstext{$item} \n"); + } + } $r->print(&Apache::loncommon::end_data_table_row(). &Apache::loncommon::start_data_table_row()); $r->print(<<"END"); - $lt{'chto'} + $lt{'chto'} $env{'form.cfirstname'} $env{'form.cmiddlename'} $env{'form.clastname'} @@ -2029,6 +2232,12 @@ END $r->print(" $newportfolioquota Mb $newdefquotatext \n"); } + if ($showtools) { + foreach my $item (@usertools) { + $r->print(" + $newaccess{$item} $newaccesstext{$item} \n"); + } + } $r->print(&Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table().'
'); if ($env{'form.cid'} ne $userenv{'id'}) { @@ -2057,12 +2266,15 @@ END $env{'form.ccdomain'}.'
'); } } else { # End of if ($env ... ) logic - # They did not want to change the users name or quota but we can - # still tell them what the name and quota are + # They did not want to change the users name, quota or tool availability, + # but we can still tell them what the name and quota and availabilities are my %lt=&Apache::lonlocal::texthash( - 'id' => "Student/Employee ID", - 'mail' => "Permanent e-mail", - 'disk' => "Disk space allocated to user's portfolio files", + 'id' => "Student/Employee ID", + 'mail' => "Permanent e-mail", + 'disk' => "Disk space allocated to user's portfolio files", + 'blog' => "Blog Availability", + 'aboutme' => "Home Page Availability", + 'portfolio' => "Portfolio Availability", ); $r->print(<<"END");

$userenv{'firstname'} $userenv{'middlename'} $userenv{'lastname'} $userenv{'generation'} @@ -2071,8 +2283,14 @@ END $r->print('
['.$lt{'mail'}.': '. $userenv{'permanentemail'}.']'); } + if ($showtools) { + foreach my $item (@usertools) { + $r->print('
['.$lt{$item}.': '.$newaccess{$item}.' '. + $newaccesstext{$item}.']'."\n"); + } + } if ($showquota) { - $r->print('
['.$lt{'disk'}.': '.$oldportfolioquota.' Mb '. + $r->print('
['.$lt{'disk'}.': '.$oldportfolioquota.' Mb '. $olddefquotatext.']'); } $r->print('

'); @@ -2492,12 +2710,27 @@ sub quota_admin { my $quotachanged; if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) { # Current user has quota modification privileges - $quotachanged = 1; - $changeHash->{'portfolioquota'} = $setquota; + if (ref($changeHash) eq 'HASH') { + $quotachanged = 1; + $changeHash->{'portfolioquota'} = $setquota; + } } return $quotachanged; } +sub tool_admin { + my ($tool,$settool,$changeHash) = @_; + my $toolchanged; + if (&Apache::lonnet::allowed('mut',$env{'form.ccdomain'})) { + # Current user has quota modification privileges + if (ref($changeHash) eq 'HASH') { + $toolchanged = 1; + $changeHash->{'tools.'.$tool} = $settool; + } + } + return $toolchanged; +} + sub build_roles { my ($sectionstr,$sections,$role) = @_; my $num_sections = 0;