version 1.153, 2011/08/15 05:16:30
|
version 1.163, 2012/08/14 15:45:06
|
Line 86 $dom,$settings,$rowtotal,$action.
|
Line 86 $dom,$settings,$rowtotal,$action.
|
|
|
$dom is the domain, $settings is a reference to a hash of current settings for |
$dom is the domain, $settings is a reference to a hash of current settings for |
the current context, $rowtotal is a reference to the scalar used to record the |
the current context, $rowtotal is a reference to the scalar used to record the |
number of rows displayed on the page, and $action is the context (either quotas |
number of rows displayed on the page, and $action is the context (quotas, |
or requestcourses). |
requestcourses or requestauthor). |
|
|
The print_quotas routine was orginally created to display/store information |
The print_quotas routine was orginally created to display/store information |
about default quota sizes for portfolio spaces for the different types of |
about default quota sizes for portfolio spaces for the different types of |
Line 171 use Locale::Language;
|
Line 171 use Locale::Language;
|
use DateTime::TimeZone; |
use DateTime::TimeZone; |
use DateTime::Locale; |
use DateTime::Locale; |
|
|
|
my $registered_cleanup; |
|
my $modified_urls; |
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
if ($r->header_only) { |
if ($r->header_only) { |
Line 190 sub handler {
|
Line 193 sub handler {
|
"/adm/domainprefs:mau:0:0:Cannot modify domain settings"; |
"/adm/domainprefs:mau:0:0:Cannot modify domain settings"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
|
|
|
$registered_cleanup=0; |
|
@{$modified_urls}=(); |
|
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['phase','actions']); |
['phase','actions']); |
Line 204 sub handler {
|
Line 211 sub handler {
|
'directorysrch','usercreation','usermodification', |
'directorysrch','usercreation','usermodification', |
'contacts','defaults','scantron','coursecategories', |
'contacts','defaults','scantron','coursecategories', |
'serverstatuses','requestcourses','helpsettings', |
'serverstatuses','requestcourses','helpsettings', |
'coursedefaults','usersessions','loadbalancing'],$dom); |
'coursedefaults','usersessions','loadbalancing', |
|
'requestauthor'],$dom); |
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', |
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', |
'autoupdate','autocreate','directorysrch','contacts', |
'autoupdate','autocreate','directorysrch','contacts', |
'usercreation','usermodification','scantron', |
'usercreation','usermodification','scantron', |
'requestcourses','coursecategories','serverstatuses','helpsettings', |
'requestcourses','requestauthor','coursecategories', |
|
'serverstatuses','helpsettings', |
'coursedefaults','usersessions'); |
'coursedefaults','usersessions'); |
if (keys(%servers) > 1) { |
if (keys(%servers) > 1) { |
push(@prefs_order,'loadbalancing'); |
push(@prefs_order,'loadbalancing'); |
Line 240 sub handler {
|
Line 249 sub handler {
|
col2 => 'Value'}], |
col2 => 'Value'}], |
}, |
}, |
'quotas' => |
'quotas' => |
{ text => 'User blogs, personal information pages, portfolios', |
{ text => 'Blogs, personal web pages, webDAV, portfolios', |
help => 'Domain_Configuration_Quotas', |
help => 'Domain_Configuration_Quotas', |
header => [{col1 => 'User affiliation', |
header => [{col1 => 'User affiliation', |
col2 => 'Available tools', |
col2 => 'Available tools', |
Line 316 sub handler {
|
Line 325 sub handler {
|
{col1 => 'Setting', |
{col1 => 'Setting', |
col2 => 'Value'}], |
col2 => 'Value'}], |
}, |
}, |
|
'requestauthor' => |
|
{text => 'Request authoring space', |
|
help => 'Domain_Configuration_Request_Author', |
|
header => [{col1 => 'User affiliation', |
|
col2 => 'Availability/Processing of requests',}, |
|
{col1 => 'Setting', |
|
col2 => 'Value'}], |
|
}, |
'coursecategories' => |
'coursecategories' => |
{ text => 'Cataloging of courses/communities', |
{ text => 'Cataloging of courses/communities', |
help => 'Domain_Configuration_Cataloging_Courses', |
help => 'Domain_Configuration_Cataloging_Courses', |
Line 480 sub process_changes {
|
Line 497 sub process_changes {
|
$output = &modify_serverstatuses($dom,%domconfig); |
$output = &modify_serverstatuses($dom,%domconfig); |
} elsif ($action eq 'requestcourses') { |
} elsif ($action eq 'requestcourses') { |
$output = &modify_quotas($dom,$action,%domconfig); |
$output = &modify_quotas($dom,$action,%domconfig); |
|
} elsif ($action eq 'requestauthor') { |
|
$output = &modify_quotas($dom,$action,%domconfig); |
} elsif ($action eq 'helpsettings') { |
} elsif ($action eq 'helpsettings') { |
$output = &modify_helpsettings($r,$dom,$confname,%domconfig); |
$output = &modify_helpsettings($r,$dom,$confname,%domconfig); |
} elsif ($action eq 'coursedefaults') { |
} elsif ($action eq 'coursedefaults') { |
Line 542 sub print_config_box {
|
Line 561 sub print_config_box {
|
$colspan = ' colspan="2"'; |
$colspan = ' colspan="2"'; |
} elsif ($action eq 'requestcourses') { |
} elsif ($action eq 'requestcourses') { |
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
|
} elsif ($action eq 'requestauthor') { |
|
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
} elsif ($action eq 'helpsettings') { |
} elsif ($action eq 'helpsettings') { |
$output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal); |
$output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal); |
} elsif ($action eq 'usersessions') { |
} elsif ($action eq 'usersessions') { |
Line 608 sub print_config_box {
|
Line 629 sub print_config_box {
|
} elsif ($action eq 'login') { |
} elsif ($action eq 'login') { |
$output .= &print_login('bottom',$dom,$confname,$phase,$settings,\$rowtotal); |
$output .= &print_login('bottom',$dom,$confname,$phase,$settings,\$rowtotal); |
} elsif ($action eq 'requestcourses') { |
} elsif ($action eq 'requestcourses') { |
$output .= &print_courserequestmail($dom,$settings,\$rowtotal); |
$output .= &print_requestmail($dom,$action,$settings,\$rowtotal); |
|
} elsif ($action eq 'requestauthor') { |
|
$output .= &print_requestmail($dom,$action,$settings,\$rowtotal); |
} elsif ($action eq 'helpsettings') { |
} elsif ($action eq 'helpsettings') { |
$output .= &print_helpsettings('bottom',$dom,$confname,$settings,\$rowtotal); |
$output .= &print_helpsettings('bottom',$dom,$confname,$settings,\$rowtotal); |
} elsif ($action eq 'usersessions') { |
} elsif ($action eq 'usersessions') { |
Line 1051 sub print_rolecolors {
|
Line 1074 sub print_rolecolors {
|
sub display_color_options { |
sub display_color_options { |
my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs, |
my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs, |
$images,$bgs,$links,$alt_text,$rowtotal,$logintext) = @_; |
$images,$bgs,$links,$alt_text,$rowtotal,$logintext) = @_; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
my $css_class = $itemcount%2?' class="LC_odd_row"':''; |
my $css_class = $itemcount%2?' class="LC_odd_row"':''; |
my $datatable = '<tr'.$css_class.'>'. |
my $datatable = '<tr'.$css_class.'>'. |
'<td>'.$choices->{'font'}.'</td>'; |
'<td>'.$choices->{'font'}.'</td>'; |
Line 1128 sub display_color_options {
|
Line 1152 sub display_color_options {
|
$showfile = $imgfile; |
$showfile = $imgfile; |
my $imgdir = $1; |
my $imgdir = $1; |
my $filename = $2; |
my $filename = $2; |
if (-e "/home/httpd/html/$imgdir/tn-".$filename) { |
if (-e "$londocroot/$imgdir/tn-".$filename) { |
$showfile = "/$imgdir/tn-".$filename; |
$showfile = "/$imgdir/tn-".$filename; |
} else { |
} else { |
my $input = "/home/httpd/html".$imgfile; |
my $input = $londocroot.$imgfile; |
my $output = '/home/httpd/html/'.$imgdir.'/tn-'.$filename; |
my $output = "$londocroot/$imgdir/tn-".$filename; |
if (!-e $output) { |
if (!-e $output) { |
my ($width,$height) = &thumb_dimensions(); |
my ($width,$height) = &thumb_dimensions(); |
my ($fullwidth,$fullheight) = &check_dimensions($input); |
my ($fullwidth,$fullheight) = &check_dimensions($input); |
Line 1140 sub display_color_options {
|
Line 1164 sub display_color_options {
|
if ($fullwidth > $width && $fullheight > $height) { |
if ($fullwidth > $width && $fullheight > $height) { |
my $size = $width.'x'.$height; |
my $size = $width.'x'.$height; |
system("convert -sample $size $input $output"); |
system("convert -sample $size $input $output"); |
$showfile = '/'.$imgdir.'/tn-'.$filename; |
$showfile = "/$imgdir/tn-".$filename; |
} |
} |
} |
} |
} |
} |
Line 1368 sub print_quotas {
|
Line 1392 sub print_quotas {
|
@options =('norequest','approval','validate','autolimit'); |
@options =('norequest','approval','validate','autolimit'); |
%validations = &Apache::lonnet::auto_courserequest_checks($dom); |
%validations = &Apache::lonnet::auto_courserequest_checks($dom); |
%titles = &courserequest_titles(); |
%titles = &courserequest_titles(); |
|
} elsif ($context eq 'requestauthor') { |
|
@usertools = ('author'); |
|
@options = ('norequest','approval','automatic'); |
|
%titles = &authorrequest_titles(); |
} else { |
} else { |
@usertools = ('aboutme','blog','portfolio'); |
@usertools = ('aboutme','blog','webdav','portfolio'); |
%titles = &tool_titles(); |
%titles = &tool_titles(); |
} |
} |
if (ref($types) eq 'ARRAY') { |
if (ref($types) eq 'ARRAY') { |
foreach my $type (@{$types}) { |
foreach my $type (@{$types}) { |
my $currdefquota; |
my $currdefquota; |
unless ($context eq 'requestcourses') { |
unless (($context eq 'requestcourses') || |
|
($context eq 'requestauthor')) { |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if (ref($settings->{defaultquota}) eq 'HASH') { |
if (ref($settings->{defaultquota}) eq 'HASH') { |
$currdefquota = $settings->{defaultquota}->{$type}; |
$currdefquota = $settings->{defaultquota}->{$type}; |
Line 1445 sub print_quotas {
|
Line 1474 sub print_quotas {
|
$cell{$item} .= $titles{'unlimited'}; |
$cell{$item} .= $titles{'unlimited'}; |
} |
} |
} |
} |
|
} elsif ($context eq 'requestauthor') { |
|
my $curroption; |
|
if (ref($settings) eq 'HASH') { |
|
$curroption = $settings->{$type}; |
|
} |
|
if (!$curroption) { |
|
$curroption = 'norequest'; |
|
} |
|
foreach my $option (@options) { |
|
my $val = $option; |
|
if ($option eq 'norequest') { |
|
$val = 0; |
|
} |
|
my $checked = ''; |
|
if ($option eq $curroption) { |
|
$checked = ' checked="checked"'; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="radio" name="authorreq_'.$type. |
|
'" value="'.$val.'"'.$checked.' />'. |
|
$titles{$option}.'</label></span> '; |
|
} |
} else { |
} else { |
my $checked = 'checked="checked" '; |
my $checked = 'checked="checked" '; |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
Line 1470 sub print_quotas {
|
Line 1521 sub print_quotas {
|
$datatable .= '</tr></table>'; |
$datatable .= '</tr></table>'; |
} |
} |
$datatable .= '</td>'; |
$datatable .= '</td>'; |
unless ($context eq 'requestcourses') { |
unless (($context eq 'requestcourses') || |
|
($context eq 'requestauthor')) { |
$datatable .= |
$datatable .= |
'<td class="LC_right_item"><span class="LC_nobreak">'. |
'<td class="LC_right_item"><span class="LC_nobreak">'. |
'<input type="text" name="quota_'.$type. |
'<input type="text" name="quota_'.$type. |
Line 1481 sub print_quotas {
|
Line 1533 sub print_quotas {
|
} |
} |
} |
} |
} |
} |
unless ($context eq 'requestcourses') { |
unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
$defaultquota = '20'; |
$defaultquota = '20'; |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if (ref($settings->{'defaultquota'}) eq 'HASH') { |
if (ref($settings->{'defaultquota'}) eq 'HASH') { |
Line 1551 sub print_quotas {
|
Line 1603 sub print_quotas {
|
$defcell{$item} .= $titles{'unlimited'}; |
$defcell{$item} .= $titles{'unlimited'}; |
} |
} |
} |
} |
|
} elsif ($context eq 'requestauthor') { |
|
my $curroption; |
|
if (ref($settings) eq 'HASH') { |
|
if (ref($settings->{'requestauthor'}) eq 'HASH') { |
|
$curroption = $settings->{'requestauthor'}; |
|
} |
|
} |
|
if (!$curroption) { |
|
$curroption = 'norequest'; |
|
} |
|
foreach my $option (@options) { |
|
my $val = $option; |
|
if ($option eq 'norequest') { |
|
$val = 0; |
|
} |
|
my $checked = ''; |
|
if ($option eq $curroption) { |
|
$checked = ' checked="checked"'; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="radio" name="authorreq_default"'. |
|
' value="'.$val.'"'.$checked.' />'. |
|
$titles{$option}.'</label></span> '; |
|
} |
} else { |
} else { |
my $checked = 'checked="checked" '; |
my $checked = 'checked="checked" '; |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
Line 1576 sub print_quotas {
|
Line 1652 sub print_quotas {
|
$datatable .= '</tr></table>'; |
$datatable .= '</tr></table>'; |
} |
} |
$datatable .= '</td>'; |
$datatable .= '</td>'; |
unless ($context eq 'requestcourses') { |
unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
$datatable .= '<td class="LC_right_item"><span class="LC_nobreak">'. |
$datatable .= '<td class="LC_right_item"><span class="LC_nobreak">'. |
'<input type="text" name="defaultquota" value="'. |
'<input type="text" name="defaultquota" value="'. |
$defaultquota.'" size="5" /> Mb</span></td>'; |
$defaultquota.'" size="5" /> Mb</span></td>'; |
Line 1654 sub print_quotas {
|
Line 1730 sub print_quotas {
|
$advcell{$item} .= $titles{'unlimited'}; |
$advcell{$item} .= $titles{'unlimited'}; |
} |
} |
} |
} |
|
} elsif ($context eq 'requestauthor') { |
|
my $curroption; |
|
if (ref($settings) eq 'HASH') { |
|
$curroption = $settings->{'_LC_adv'}; |
|
} |
|
my $checked = ''; |
|
if ($curroption eq '') { |
|
$checked = ' checked="checked"'; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="radio" name="authorreq__LC_adv"'. |
|
' value=""'.$checked.' />'. |
|
&mt('No override set').'</label></span> '; |
|
foreach my $option (@options) { |
|
my $val = $option; |
|
if ($option eq 'norequest') { |
|
$val = 0; |
|
} |
|
my $checked = ''; |
|
if ($val eq $curroption) { |
|
$checked = ' checked="checked"'; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="radio" name="crsreq_'.$item. |
|
'__LC_adv" value="'.$val.'"'.$checked.' />'. |
|
$titles{$option}.'</label></span> '; |
|
} |
} else { |
} else { |
my $checked = 'checked="checked" '; |
my $checked = 'checked="checked" '; |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
Line 1683 sub print_quotas {
|
Line 1786 sub print_quotas {
|
return $datatable; |
return $datatable; |
} |
} |
|
|
sub print_courserequestmail { |
sub print_requestmail { |
my ($dom,$settings,$rowtotal) = @_; |
my ($dom,$action,$settings,$rowtotal) = @_; |
my ($now,$datatable,%dompersonnel,@domcoord,@currapproval,$rows); |
my ($now,$datatable,%dompersonnel,@domcoord,@currapproval,$rows); |
$now = time; |
$now = time; |
$rows = 0; |
$rows = 0; |
Line 1715 sub print_courserequestmail {
|
Line 1818 sub print_courserequestmail {
|
my $numinrow = 4; |
my $numinrow = 4; |
my $numdc = @domcoord; |
my $numdc = @domcoord; |
my $css_class = 'class="LC_odd_row"'; |
my $css_class = 'class="LC_odd_row"'; |
$datatable = '<tr'.$css_class.'>'. |
my $text; |
' <td>'.&mt('Receive notification of course requests requiring approval.'). |
if ($action eq 'requestcourses') { |
' </td>'. |
$text = &mt('Receive notification of course requests requiring approval'); |
|
} else { |
|
$text = &mt('Receive notification of authoring space requests requiring approval') |
|
} |
|
$datatable = '<tr '.$css_class.'>'. |
|
' <td>'.$text.'</td>'. |
' <td class="LC_left_item">'; |
' <td class="LC_left_item">'; |
if (@domcoord > 0) { |
if (@domcoord > 0) { |
$datatable .= '<table>'; |
$datatable .= '<table>'; |
Line 2906 sub loadbalance_rule_row {
|
Line 3014 sub loadbalance_rule_row {
|
} else { |
} else { |
push(@rulenames,'specific'); |
push(@rulenames,'specific'); |
} |
} |
|
push(@rulenames,'none'); |
my $style = $targets_div_style; |
my $style = $targets_div_style; |
if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) { |
if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) { |
$style = $homedom_div_style; |
$style = $homedom_div_style; |
Line 2962 sub offloadtype_text {
|
Line 3071 sub offloadtype_text {
|
'homeserver' => "Offloads to user's home server", |
'homeserver' => "Offloads to user's home server", |
'externalbalancer' => "Offloads to Load Balancer in user's domain", |
'externalbalancer' => "Offloads to Load Balancer in user's domain", |
'specific' => 'Offloads to specific server', |
'specific' => 'Offloads to specific server', |
|
'none' => 'No offload', |
); |
); |
return %ruletitles; |
return %ruletitles; |
} |
} |
Line 2993 sub contact_titles {
|
Line 3103 sub contact_titles {
|
|
|
sub tool_titles { |
sub tool_titles { |
my %titles = &Apache::lonlocal::texthash ( |
my %titles = &Apache::lonlocal::texthash ( |
aboutme => 'Personal Information Page', |
aboutme => 'Personal web page', |
blog => 'Blog', |
blog => 'Blog', |
|
webdav => 'WebDAV', |
portfolio => 'Portfolio', |
portfolio => 'Portfolio', |
official => 'Official courses (with institutional codes)', |
official => 'Official courses (with institutional codes)', |
unofficial => 'Unofficial courses', |
unofficial => 'Unofficial courses', |
Line 3017 sub courserequest_titles {
|
Line 3128 sub courserequest_titles {
|
return %titles; |
return %titles; |
} |
} |
|
|
|
sub authorrequest_titles { |
|
my %titles = &Apache::lonlocal::texthash ( |
|
norequest => 'Not allowed', |
|
approval => 'Approval by Dom. Coord.', |
|
automatic => 'Automatic approval', |
|
); |
|
return %titles; |
|
} |
|
|
sub courserequest_conditions { |
sub courserequest_conditions { |
my %conditions = &Apache::lonlocal::texthash ( |
my %conditions = &Apache::lonlocal::texthash ( |
approval => '(Processing of request subject to approval by Domain Coordinator).', |
approval => '(Processing of request subject to approval by Domain Coordinator).', |
Line 3859 sub print_serverstatuses {
|
Line 3979 sub print_serverstatuses {
|
sub serverstatus_pages { |
sub serverstatus_pages { |
return ('userstatus','lonstatus','loncron','server-status','codeversions', |
return ('userstatus','lonstatus','loncron','server-status','codeversions', |
'clusterstatus','metadata_keywords','metadata_harvest', |
'clusterstatus','metadata_keywords','metadata_harvest', |
'takeoffline','takeonline','showenv','toggledebug'); |
'takeoffline','takeonline','showenv','toggledebug','ping','domconf'); |
} |
} |
|
|
sub coursecategories_javascript { |
sub coursecategories_javascript { |
Line 4927 sub publishlogo {
|
Line 5047 sub publishlogo {
|
# See if there is anything left |
# See if there is anything left |
unless ($fname) { return ('error: no uploaded file'); } |
unless ($fname) { return ('error: no uploaded file'); } |
$fname="$subdir/$fname"; |
$fname="$subdir/$fname"; |
my $filepath='/home/'.$confname.'/public_html'; |
my $filepath=$r->dir_config('lonDocRoot')."/priv/$dom/$confname"; |
my ($fnamepath,$file,$fetchthumb); |
my ($fnamepath,$file,$fetchthumb); |
$file=$fname; |
$file=$fname; |
if ($fname=~m|/|) { |
if ($fname=~m|/|) { |
Line 5005 $env{'user.name'}.':'.$env{'user.domain'
|
Line 5125 $env{'user.name'}.':'.$env{'user.domain'
|
if (copy($source,$copyfile)) { |
if (copy($source,$copyfile)) { |
print $logfile "\nCopied original source to ".$copyfile."\n"; |
print $logfile "\nCopied original source to ".$copyfile."\n"; |
$output = 'ok'; |
$output = 'ok'; |
&write_metadata($dom,$confname,$formname,$targetdir,$file,$logfile); |
|
$logourl = '/res/'.$dom.'/'.$confname.'/'.$fname; |
$logourl = '/res/'.$dom.'/'.$confname.'/'.$fname; |
|
push(@{$modified_urls},[$copyfile,$source]); |
|
my $metaoutput = |
|
&write_metadata($dom,$confname,$formname,$targetdir,$file,$logfile); |
|
unless ($registered_cleanup) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\¬ifysubscribed,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
} else { |
} else { |
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n"; |
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n"; |
$output = &mt('Failed to copy file to RES space').", $!"; |
$output = &mt('Failed to copy file to RES space').", $!"; |
Line 5024 $env{'user.name'}.':'.$env{'user.domain'
|
Line 5151 $env{'user.name'}.':'.$env{'user.domain'
|
my $copyfile=$targetdir.'/tn-'.$file; |
my $copyfile=$targetdir.'/tn-'.$file; |
if (copy($outfile,$copyfile)) { |
if (copy($outfile,$copyfile)) { |
print $logfile "\nCopied source to ".$copyfile."\n"; |
print $logfile "\nCopied source to ".$copyfile."\n"; |
&write_metadata($dom,$confname,$formname, |
my $thumb_metaoutput = |
$targetdir,'tn-'.$file,$logfile); |
&write_metadata($dom,$confname,$formname, |
|
$targetdir,'tn-'.$file,$logfile); |
|
push(@{$modified_urls},[$copyfile,$outfile]); |
|
unless ($registered_cleanup) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\¬ifysubscribed,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
} else { |
} else { |
print $logfile "\nUnable to write ".$copyfile. |
print $logfile "\nUnable to write ".$copyfile. |
':'.$!."\n"; |
':'.$!."\n"; |
Line 5090 sub write_metadata {
|
Line 5224 sub write_metadata {
|
{ |
{ |
print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file; |
print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file; |
my $mfh; |
my $mfh; |
unless (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) { |
if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) { |
|
foreach (sort keys %metadatafields) { |
|
unless ($_=~/\./) { |
|
my $unikey=$_; |
|
$unikey=~/^([A-Za-z]+)/; |
|
my $tag=$1; |
|
$tag=~tr/A-Z/a-z/; |
|
print $mfh "\n\<$tag"; |
|
foreach (split(/\,/,$metadatakeys{$unikey})) { |
|
my $value=$metadatafields{$unikey.'.'.$_}; |
|
$value=~s/\"/\'\'/g; |
|
print $mfh ' '.$_.'="'.$value.'"'; |
|
} |
|
print $mfh '>'. |
|
&HTML::Entities::encode($metadatafields{$unikey},'<>&"') |
|
.'</'.$tag.'>'; |
|
} |
|
} |
|
$output = 'ok'; |
|
print $logfile "\nWrote metadata"; |
|
close($mfh); |
|
} else { |
|
print $logfile "\nFailed to open metadata file"; |
$output = &mt('Could not write metadata'); |
$output = &mt('Could not write metadata'); |
} |
} |
foreach (sort keys %metadatafields) { |
|
unless ($_=~/\./) { |
|
my $unikey=$_; |
|
$unikey=~/^([A-Za-z]+)/; |
|
my $tag=$1; |
|
$tag=~tr/A-Z/a-z/; |
|
print $mfh "\n\<$tag"; |
|
foreach (split(/\,/,$metadatakeys{$unikey})) { |
|
my $value=$metadatafields{$unikey.'.'.$_}; |
|
$value=~s/\"/\'\'/g; |
|
print $mfh ' '.$_.'="'.$value.'"'; |
|
} |
|
print $mfh '>'. |
|
&HTML::Entities::encode($metadatafields{$unikey},'<>&"') |
|
.'</'.$tag.'>'; |
|
} |
|
} |
|
$output = 'ok'; |
|
print $logfile "\nWrote metadata"; |
|
close($mfh); |
|
} |
} |
|
return $output; |
|
} |
|
|
|
sub notifysubscribed { |
|
foreach my $targetsource (@{$modified_urls}){ |
|
next unless (ref($targetsource) eq 'ARRAY'); |
|
my ($target,$source)=@{$targetsource}; |
|
if ($source ne '') { |
|
if (open(my $logfh,'>>'.$source.'.log')) { |
|
print $logfh "\nCleanup phase: Notifications\n"; |
|
my @subscribed=&subscribed_hosts($target); |
|
foreach my $subhost (@subscribed) { |
|
print $logfh "\nNotifying host ".$subhost.':'; |
|
my $reply=&Apache::lonnet::critical('update:'.$target,$subhost); |
|
print $logfh $reply; |
|
} |
|
my @subscribedmeta=&subscribed_hosts("$target.meta"); |
|
foreach my $subhost (@subscribedmeta) { |
|
print $logfh "\nNotifying host for metadata only ".$subhost.':'; |
|
my $reply=&Apache::lonnet::critical('update:'.$target.'.meta', |
|
$subhost); |
|
print $logfh $reply; |
|
} |
|
print $logfh "\n============ Done ============\n"; |
|
close($logfh); |
|
} |
|
} |
|
} |
|
return OK; |
|
} |
|
|
|
sub subscribed_hosts { |
|
my ($target) = @_; |
|
my @subscribed; |
|
if (open(my $fh,"<$target.subscription")) { |
|
while (my $subline=<$fh>) { |
|
if ($subline =~ /^($match_lonid):/) { |
|
my $host = $1; |
|
if ($host ne $Apache::lonnet::perlvar{'lonHostID'}) { |
|
unless (grep(/^\Q$host\E$/,@subscribed)) { |
|
push(@subscribed,$host); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return @subscribed; |
} |
} |
|
|
sub check_switchserver { |
sub check_switchserver { |
Line 5137 sub modify_quotas {
|
Line 5320 sub modify_quotas {
|
%limithash,$toolregexp,%conditions,$resulttext,%changes); |
%limithash,$toolregexp,%conditions,$resulttext,%changes); |
if ($action eq 'quotas') { |
if ($action eq 'quotas') { |
$context = 'tools'; |
$context = 'tools'; |
} else { |
} else { |
$context = $action; |
$context = $action; |
} |
} |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
Line 5147 sub modify_quotas {
|
Line 5330 sub modify_quotas {
|
%titles = &courserequest_titles(); |
%titles = &courserequest_titles(); |
$toolregexp = join('|',@usertools); |
$toolregexp = join('|',@usertools); |
%conditions = &courserequest_conditions(); |
%conditions = &courserequest_conditions(); |
|
} elsif ($context eq 'requestauthor') { |
|
@usertools = ('author'); |
|
%titles = &authorrequest_titles(); |
} else { |
} else { |
@usertools = ('aboutme','blog','portfolio'); |
@usertools = ('aboutme','blog','webdav','portfolio'); |
%titles = &tool_titles(); |
%titles = &tool_titles(); |
} |
} |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); |
Line 5164 sub modify_quotas {
|
Line 5350 sub modify_quotas {
|
$confhash{$item}{$type} = $env{$key}; |
$confhash{$item}{$type} = $env{$key}; |
} |
} |
} |
} |
|
} elsif ($context eq 'requestauthor') { |
|
if ($key =~ /^\Qform.authorreq_\E(.+)$/) { |
|
$confhash{$1} = $env{$key}; |
|
} |
} else { |
} else { |
if ($key =~ /^form\.quota_(.+)$/) { |
if ($key =~ /^form\.quota_(.+)$/) { |
$confhash{'defaultquota'}{$1} = $env{$key}; |
$confhash{'defaultquota'}{$1} = $env{$key}; |
Line 5173 sub modify_quotas {
|
Line 5363 sub modify_quotas {
|
} |
} |
} |
} |
} |
} |
if ($context eq 'requestcourses') { |
if (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
my @approvalnotify = &Apache::loncommon::get_env_multiple('form.reqapprovalnotify'); |
my @approvalnotify = &Apache::loncommon::get_env_multiple('form.reqapprovalnotify'); |
@approvalnotify = sort(@approvalnotify); |
@approvalnotify = sort(@approvalnotify); |
$confhash{'notify'}{'approval'} = join(',',@approvalnotify); |
$confhash{'notify'}{'approval'} = join(',',@approvalnotify); |
Line 5209 sub modify_quotas {
|
Line 5399 sub modify_quotas {
|
$confhash{$item}{$type} .= $limithash{$item}{$type}; |
$confhash{$item}{$type} .= $limithash{$item}{$type}; |
} |
} |
} |
} |
|
} elsif ($context eq 'requestauthor') { |
|
$unset = '0'; |
|
if ($type eq '_LC_adv') { |
|
$unset = ''; |
|
} |
} else { |
} else { |
if (grep(/^\Q$type\E$/,@{$toolshash{$item}})) { |
if (grep(/^\Q$type\E$/,@{$toolshash{$item}})) { |
$confhash{$item}{$type} = 1; |
$confhash{$item}{$type} = 1; |
Line 5217 sub modify_quotas {
|
Line 5412 sub modify_quotas {
|
} |
} |
} |
} |
if (ref($domconfig{$action}) eq 'HASH') { |
if (ref($domconfig{$action}) eq 'HASH') { |
if (ref($domconfig{$action}{$item}) eq 'HASH') { |
if ($action eq 'requestauthor') { |
|
if ($domconfig{$action}{$type} ne $confhash{$type}) { |
|
$changes{$type} = 1; |
|
} |
|
} elsif (ref($domconfig{$action}{$item}) eq 'HASH') { |
if ($domconfig{$action}{$item}{$type} ne $confhash{$item}{$type}) { |
if ($domconfig{$action}{$item}{$type} ne $confhash{$item}{$type}) { |
$changes{$item}{$type} = 1; |
$changes{$item}{$type} = 1; |
} |
} |
Line 5237 sub modify_quotas {
|
Line 5436 sub modify_quotas {
|
if ($confhash{$item}{$type} ne $unset) { |
if ($confhash{$item}{$type} ne $unset) { |
$changes{$item}{$type} = 1; |
$changes{$item}{$type} = 1; |
} |
} |
|
} elsif ($context eq 'requestauthor') { |
|
if ($confhash{$type} ne $unset) { |
|
$changes{$type} = 1; |
|
} |
} else { |
} else { |
if (!$confhash{$item}{$type}) { |
if (!$confhash{$item}{$type}) { |
$changes{$item}{$type} = 1; |
$changes{$item}{$type} = 1; |
Line 5245 sub modify_quotas {
|
Line 5448 sub modify_quotas {
|
} |
} |
} |
} |
} |
} |
unless ($context eq 'requestcourses') { |
unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
if (ref($domconfig{'quotas'}) eq 'HASH') { |
if (ref($domconfig{'quotas'}) eq 'HASH') { |
if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') { |
if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') { |
foreach my $key (keys(%{$domconfig{'quotas'}{'defaultquota'}})) { |
foreach my $key (keys(%{$domconfig{'quotas'}{'defaultquota'}})) { |
Line 5288 sub modify_quotas {
|
Line 5491 sub modify_quotas {
|
} |
} |
} |
} |
|
|
foreach my $key (keys(%confhash)) { |
if ($context eq 'requestauthor') { |
$domdefaults{$key} = $confhash{$key}; |
$domdefaults{'requestauthor'} = \%confhash; |
|
} else { |
|
foreach my $key (keys(%confhash)) { |
|
$domdefaults{$key} = $confhash{$key}; |
|
} |
} |
} |
|
|
my %quotahash = ( |
my %quotahash = ( |
$action => { %confhash } |
$action => { %confhash } |
); |
); |
Line 5303 sub modify_quotas {
|
Line 5510 sub modify_quotas {
|
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); |
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); |
|
|
$resulttext = &mt('Changes made:').'<ul>'; |
$resulttext = &mt('Changes made:').'<ul>'; |
unless ($context eq 'requestcourses') { |
unless (($context eq 'requestcourses') || |
|
($context eq 'requestauthor')) { |
if (ref($changes{'defaultquota'}) eq 'HASH') { |
if (ref($changes{'defaultquota'}) eq 'HASH') { |
$resulttext .= '<li>'.&mt('Portfolio default quotas').'<ul>'; |
$resulttext .= '<li>'.&mt('Portfolio default quotas').'<ul>'; |
foreach my $type (@{$types},'default') { |
foreach my $type (@{$types},'default') { |
Line 5320 sub modify_quotas {
|
Line 5528 sub modify_quotas {
|
} |
} |
my %newenv; |
my %newenv; |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
if (ref($changes{$item}) eq 'HASH') { |
my (%haschgs,%inconf); |
|
if ($context eq 'requestauthor') { |
|
%haschgs = %changes; |
|
%inconf = %confhash; |
|
} else { |
|
if (ref($changes{$item}) eq 'HASH') { |
|
%haschgs = %{$changes{$item}}; |
|
} |
|
if (ref($confhash{$item}) eq 'HASH') { |
|
%inconf = %{$confhash{$item}}; |
|
} |
|
} |
|
if (keys(%haschgs) > 0) { |
my $newacc = |
my $newacc = |
&Apache::lonnet::usertools_access($env{'user.name'}, |
&Apache::lonnet::usertools_access($env{'user.name'}, |
$env{'user.domain'}, |
$env{'user.domain'}, |
$item,'reload',$context); |
$item,'reload',$context); |
if ($context eq 'requestcourses') { |
if (($context eq 'requestcourses') || |
|
($context eq 'requestauthor')) { |
if ($env{'environment.canrequest.'.$item} ne $newacc) { |
if ($env{'environment.canrequest.'.$item} ne $newacc) { |
$newenv{'environment.canrequest.'.$item} = $newacc; |
$newenv{'environment.canrequest.'.$item} = $newacc; |
} |
} |
Line 5334 sub modify_quotas {
|
Line 5555 sub modify_quotas {
|
$newenv{'environment.availabletools.'.$item} = $newacc; |
$newenv{'environment.availabletools.'.$item} = $newacc; |
} |
} |
} |
} |
$resulttext .= '<li>'.$titles{$item}.'<ul>'; |
unless ($context eq 'requestauthor') { |
|
$resulttext .= '<li>'.$titles{$item}.'<ul>'; |
|
} |
foreach my $type (@{$types},'default','_LC_adv') { |
foreach my $type (@{$types},'default','_LC_adv') { |
if ($changes{$item}{$type}) { |
if ($haschgs{$type}) { |
my $typetitle = $usertypes->{$type}; |
my $typetitle = $usertypes->{$type}; |
if ($type eq 'default') { |
if ($type eq 'default') { |
$typetitle = $othertitle; |
$typetitle = $othertitle; |
} elsif ($type eq '_LC_adv') { |
} elsif ($type eq '_LC_adv') { |
$typetitle = 'LON-CAPA Advanced Users'; |
$typetitle = 'LON-CAPA Advanced Users'; |
} |
} |
if ($confhash{$item}{$type}) { |
if ($inconf{$type}) { |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
my $cond; |
my $cond; |
if ($confhash{$item}{$type} =~ /^autolimit=(\d*)$/) { |
if ($inconf{$type} =~ /^autolimit=(\d*)$/) { |
if ($1 eq '') { |
if ($1 eq '') { |
$cond = &mt('(Automatic processing of any request).'); |
$cond = &mt('(Automatic processing of any request).'); |
} else { |
} else { |
$cond = &mt('(Automatic processing of requests up to limit of [quant,_1,request] per user).',$1); |
$cond = &mt('(Automatic processing of requests up to limit of [quant,_1,request] per user).',$1); |
} |
} |
} else { |
} else { |
$cond = $conditions{$confhash{$item}{$type}}; |
$cond = $conditions{$inconf{$type}}; |
} |
} |
$resulttext .= '<li>'.&mt('Set to be available to [_1].',$typetitle).' '.$cond.'</li>'; |
$resulttext .= '<li>'.&mt('Set to be available to [_1].',$typetitle).' '.$cond.'</li>'; |
} else { |
} else { |
Line 5361 sub modify_quotas {
|
Line 5584 sub modify_quotas {
|
} |
} |
} else { |
} else { |
if ($type eq '_LC_adv') { |
if ($type eq '_LC_adv') { |
if ($confhash{$item}{$type} eq '0') { |
if ($inconf{$type} eq '0') { |
$resulttext .= '<li>'.&mt('Set to be unavailable to [_1]',$typetitle).'</li>'; |
$resulttext .= '<li>'.&mt('Set to be unavailable to [_1]',$typetitle).'</li>'; |
} else { |
} else { |
$resulttext .= '<li>'.&mt('No override set for [_1]',$typetitle).'</li>'; |
$resulttext .= '<li>'.&mt('No override set for [_1]',$typetitle).'</li>'; |
Line 5372 sub modify_quotas {
|
Line 5595 sub modify_quotas {
|
} |
} |
} |
} |
} |
} |
$resulttext .= '</ul></li>'; |
unless ($context eq 'requestauthor') { |
|
$resulttext .= '</ul></li>'; |
|
} |
} |
} |
} |
} |
if ($action eq 'requestcourses') { |
if (($action eq 'requestcourses') || ($action eq 'requestauthor')) { |
if (ref($changes{'notify'}) eq 'HASH') { |
if (ref($changes{'notify'}) eq 'HASH') { |
if ($changes{'notify'}{'approval'}) { |
if ($changes{'notify'}{'approval'}) { |
if (ref($confhash{'notify'}) eq 'HASH') { |
if (ref($confhash{'notify'}) eq 'HASH') { |
if ($confhash{'notify'}{'approval'}) { |
if ($confhash{'notify'}{'approval'}) { |
$resulttext .= '<li>'.&mt('Notification of requests requiring approval will be sent to: ').$confhash{'notify'}{'approval'}.'</li>'; |
$resulttext .= '<li>'.&mt('Notification of requests requiring approval will be sent to: ').$confhash{'notify'}{'approval'}.'</li>'; |
} else { |
} else { |
$resulttext .= '<li>'.&mt('No Domain Coordinators will receive notification of course requests requiring approval.').'</li>'; |
$resulttext .= '<li>'.&mt('No Domain Coordinators will receive notification of requests requiring approval.').'</li>'; |
} |
} |
} |
} |
} |
} |
Line 5395 sub modify_quotas {
|
Line 5620 sub modify_quotas {
|
} else { |
} else { |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
$resulttext = &mt('No changes made to rights to request creation of courses.'); |
$resulttext = &mt('No changes made to rights to request creation of courses.'); |
|
} elsif ($context eq 'requestauthor') { |
|
$resulttext = &mt('No changes made to rights to request author space.'); |
} else { |
} else { |
$resulttext = &mt('No changes made to availability of personal information pages, blogs, portfolios or default quotas'); |
$resulttext = &mt('No changes made to availability of personal information pages, blogs, portfolios or default quotas'); |
} |
} |
Line 7862 sub active_dc_picker {
|
Line 8089 sub active_dc_picker {
|
sub usersession_titles { |
sub usersession_titles { |
return &Apache::lonlocal::texthash( |
return &Apache::lonlocal::texthash( |
hosted => 'Hosting of sessions for users from other domains on servers in this domain', |
hosted => 'Hosting of sessions for users from other domains on servers in this domain', |
|
|
remote => 'Hosting of sessions for users in this domain on servers in other domains', |
remote => 'Hosting of sessions for users in this domain on servers in other domains', |
spares => 'Servers offloaded to, when busy', |
spares => 'Servers offloaded to, when busy', |
version => 'LON-CAPA version requirement', |
version => 'LON-CAPA version requirement', |
excludedomain => 'Allow all, but exclude specific domains', |
excludedomain => 'Allow all, but exclude specific domains', |
includedomain => 'Deny all, but include specific domains', |
includedomain => 'Deny all, but include specific domains', |
primary => 'Primary (checked first)', |
primary => 'Primary (checked first)', |
default => 'Default', |
default => 'Default', |
); |
); |
} |
} |
|
|