--- loncom/interface/domainprefs.pm 2007/05/14 15:25:44 1.14 +++ loncom/interface/domainprefs.pm 2007/06/07 23:36:32 1.22 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.14 2007/05/14 15:25:44 raeburn Exp $ +# $Id: domainprefs.pm,v 1.22 2007/06/07 23:36:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -133,6 +133,31 @@ sub handler { my %helphash; my $numprefs = @prefs; &print_header($r,$phase); + if (keys(%domconfig) == 0) { + my $primarylibserv = &Apache::lonnet::domain($dom,'primary'); + my $perlvarref = &LONCAPA::Configuration::read_conf('loncapa.conf'); + my $hostid = $perlvarref->{'lonHostID'}; + if ($hostid ne $primarylibserv) { + my %designhash = &Apache::loncommon::get_domainconf($dom); + my @loginimages = ('img','logo','domlogo'); + my $custom_img_count = 0; + foreach my $img (@loginimages) { + if ($designhash{$dom.'.login.'.$img} ne '') { + $custom_img_count ++; + } + } + foreach my $role (@roles) { + if ($designhash{$dom.'.'.$role.'.img'} ne '') { + $custom_img_count ++; + } + } + if ($custom_img_count > 0) { + my $switch_server = &check_switchserver($dom,$confname); + $r->print(&mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').'
'.&mt("While this remains so, you must switch to the domain's primary library server in order to update settings.").'

'.&mt("Thereafter, you will be able to update settings from this screen when logged in to any server in the LON-CAPA network (with a DC role selected in the domain), although you will still need to switch to the domain's primary library server to upload new images or logos.").'

'.$switch_server.' '.&mt('to primary library server for domain: [_1]',$dom)); + return OK; + } + } + } $r->print('
'); foreach my $item (@prefs) { if ($item->{'action'} eq 'login') { @@ -173,9 +198,12 @@ sub print_config_box { $r->print(' - - '); + '); +# +# FIXME - put the help link back in when the help files exist +# +# '); if (($action eq 'autoupdate') || ($action eq 'rolecolors')) { my $colspan = ($action eq 'rolecolors')?' colspan="2"':''; $r->print(' @@ -522,13 +550,14 @@ sub display_color_options { ''; my $switchserver = &check_switchserver($dom,$confname); foreach my $img (@{$images}) { - $itemcount ++; + $itemcount ++; $css_class = $itemcount%2?' class="LC_odd_row"':''; $datatable .= ''. ''; - my $imgfile; + my ($imgfile, $img_import); if ($designs->{$img} ne '') { $imgfile = $designs->{$img}; + $img_import = ($imgfile =~ m{^/adm/}); } else { $imgfile = $defaults->{$img}; } @@ -550,6 +579,7 @@ sub display_color_options { $showfile = ''; } } elsif ($imgfile =~ m-^/(adm/[^/]+)/([^/]+)$-) { + $showfile = $imgfile; my $imgdir = $1; my $filename = $2; if (-e "/home/httpd/html/$imgdir/tn-".$filename) { @@ -559,12 +589,17 @@ sub display_color_options { my $output = '/home/httpd/html/'.$imgdir.'/tn-'.$filename; if (!-e $output) { my ($width,$height) = &thumb_dimensions(); - my $size = $width.'x'.$height; - system("convert -sample $size $input $output"); + my ($fullwidth,$fullheight) = &check_dimensions($input); + if ($fullwidth ne '' && $fullheight ne '') { + if ($fullwidth > $width && $fullheight > $height) { + my $size = $width.'x'.$height; + system("convert -sample $size $input $output"); + $showfile = '/'.$imgdir.'/tn-'.$filename; + } + } } - $showfile = '/'.$imgdir.'/tn-'.$filename; } - } + } if ($showfile) { $showfile = &Apache::loncommon::lonhttpdurl($showfile); $fullsize = &Apache::loncommon::lonhttpdurl($imgfile); @@ -572,6 +607,9 @@ sub display_color_options { if (!$is_custom->{$img}) { $datatable .= &mt('Default in use:').'
'; } + if ($img_import) { + $datatable.= ''; + } $datatable.= ''.$alt_text->{$img}.
                              ''; @@ -733,16 +771,15 @@ sub print_quotas { $datatable .= ''. ''. ''; return $datatable; } sub print_autoenroll { my ($dom,$settings) = @_; - my $defdom = $dom; my $autorun = &Apache::lonnet::auto_run(undef,$dom), - my ($runon,$runoff); + my ($defdom,$runon,$runoff); if (ref($settings) eq 'HASH') { if (exists($settings->{'run'})) { if ($settings->{'run'} eq '0') { @@ -844,10 +881,11 @@ sub print_autoupdate { if (keys(%{$usertypes}) > 0) { $othertitle = &mt('Other users'); } - my @fields = ('lastname','firstname','middlename','gen','email','id'); + my @fields = ('lastname','firstname','middlename','gen', + 'permanentemail','id'); my %fieldtitles = &Apache::lonlocal::texthash ( id => 'Student/Employee ID', - email => 'E-mail address', + permanentemail => 'E-mail address', lastname => 'Last Name', firstname => 'First Name', middlename => 'Middle Name', @@ -1047,6 +1085,15 @@ sub modify_colors { } my ($width,$height) = &thumb_dimensions(); foreach my $img (@images) { + if ( ! $env{'form.'.$role.'_'.$img.'.filename'} + && !defined($domconfig->{$role}{$img}) + && !$env{'form.'.$role.'_del_'.$img} + && $env{'form.'.$role.'_import_'.$img}) { + # import the old configured image from the .tab setting + # if they haven't provided a new one + $domconfig->{$role}{$img} = + $env{'form.'.$role.'_import_'.$img}; + } if ($env{'form.'.$role.'_'.$img.'.filename'} ne '') { my $error; if ($configuserok eq 'ok') { @@ -1086,6 +1133,7 @@ sub modify_colors { $dom,$confname,$img,$width,$height); if ($result eq 'ok') { $confhash->{$role}{$img} = $logourl; + $changes{$role}{'images'}{$img} = 1; } } } @@ -1237,6 +1285,26 @@ sub thumb_dimensions { return ('200','50'); } +sub check_dimensions { + my ($inputfile) = @_; + my ($fullwidth,$fullheight); + if ($inputfile =~ m|^[/\w.\-]+$|) { + if (open(PIPE,"identify $inputfile 2>&1 |")) { + my $imageinfo = ; + if (!close(PIPE)) { + &Apache::lonnet::logthis("Failed to close PIPE opened to retrieve image information for $inputfile"); + } + chomp($imageinfo); + my ($fullsize) = + ($imageinfo =~ /^\Q$inputfile\E\s+\w+\s+(\d+x\d+)/); + if ($fullsize) { + ($fullwidth,$fullheight) = split(/x/,$fullsize); + } + } + } + return ($fullwidth,$fullheight); +} + sub check_configuser { my ($uhome,$dom,$confname,$servadm) = @_; my ($configuserok,%currroles); @@ -1369,17 +1437,23 @@ $env{'user.name'}.':'.$env{'user.domain' if (($thumbwidth =~ /^\d+$/) && ($thumbheight =~ /^\d+$/)) { my $inputfile = $filepath.'/'.$file; my $outfile = $filepath.'/'.'tn-'.$file; - my $thumbsize = $thumbwidth.'x'.$thumbheight; - system("convert -sample $thumbsize $inputfile $outfile"); - chmod(0660, $filepath.'/tn-'.$file); - if (-e $outfile) { - my $copyfile=$targetdir.'/tn-'.$file; - if (copy($outfile,$copyfile)) { - print $logfile "\nCopied source to ".$copyfile."\n"; - &write_metadata($dom,$confname,$formname,$targetdir, - 'tn-'.$file,$logfile); - } else { - print $logfile "\nUnable to write ".$copyfile.':'.$!."\n"; + my ($fullwidth,$fullheight) = &check_dimensions($inputfile); + if ($fullwidth ne '' && $fullheight ne '') { + if ($fullwidth > $thumbwidth && $fullheight > $thumbheight) { + my $thumbsize = $thumbwidth.'x'.$thumbheight; + system("convert -sample $thumbsize $inputfile $outfile"); + chmod(0660, $filepath.'/tn-'.$file); + if (-e $outfile) { + my $copyfile=$targetdir.'/tn-'.$file; + if (copy($outfile,$copyfile)) { + print $logfile "\nCopied source to ".$copyfile."\n"; + &write_metadata($dom,$confname,$formname, + $targetdir,'tn-'.$file,$logfile); + } else { + print $logfile "\nUnable to write ".$copyfile. + ':'.$!."\n"; + } + } } } } @@ -1491,6 +1565,7 @@ sub modify_quotas { $formhash{$1} = $env{$key}; } } + $formhash{'default'} = $env{'form.defaultquota'}; if (ref($domconfig{'quotas'}) eq 'HASH') { foreach my $key (keys(%{$domconfig{'quotas'}})) { if (exists($formhash{$key})) { @@ -1544,10 +1619,17 @@ sub modify_autoenroll { my %title = ( run => 'Auto-enrollment active', sender => 'Sender for notification messages'); my @offon = ('off','on'); + my $sender_uname = $env{'form.sender_uname'}; + my $sender_domain = $env{'form.sender_domain'}; + if ($sender_domain eq '') { + $sender_uname = ''; + } elsif ($sender_uname eq '') { + $sender_domain = ''; + } my %autoenrollhash = ( autoenroll => { run => $env{'form.autoenroll_run'}, - sender_uname => $env{'form.sender_uname'}, - sender_domain => $env{'form.sender_domain'}, + sender_uname => $sender_uname, + sender_domain => $sender_domain, } ); @@ -1563,18 +1645,10 @@ sub modify_autoenroll { $changes{'run'} = 1; } } - if (exists($currautoenroll{sender_uname})) { - if ($currautoenroll{'sender_uname'} ne $env{'form.sender_uname'}) { - $changes{'sender'} = 1; - } - } else { + if ($currautoenroll{'sender_uname'} ne $sender_uname) { $changes{'sender'} = 1; } - if (exists($currautoenroll{sender_domain})) { - if ($currautoenroll{'sender_domain'} ne $env{'form.sender_domain'}) { - $changes{'sender'} = 1; - } - } else { + if ($currautoenroll{'sender_domain'} ne $sender_domain) { $changes{'sender'} = 1; } if (keys(%changes) > 0) { @@ -1583,7 +1657,11 @@ sub modify_autoenroll { $resulttext .= '
  • '.&mt("$title{'run'} set to $offon[$env{'form.autoenroll_run'}]").'
  • '; } if ($changes{'sender'}) { - $resulttext .= '
  • '.&mt("$title{'sender'} set to [_1]",$env{'form.sender_uname'}.':'.$env{'form.sender_domain'}).'
  • '; + if ($sender_uname eq '' || $sender_domain eq '') { + $resulttext .= '
  • '.&mt("$title{'sender'} set to default (course owner).").'
  • '; + } else { + $resulttext .= '
  • '.&mt("$title{'sender'} set to [_1]",$sender_uname.':'.$sender_domain).'
  • '; + } } $resulttext .= ''; } else { @@ -1612,7 +1690,7 @@ sub modify_autoupdate { my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom); my %fieldtitles = &Apache::lonlocal::texthash ( id => 'Student/Employee ID', - email => 'E-mail address', + permanentemail => 'E-mail address', lastname => 'Last Name', firstname => 'First Name', middlename => 'Middle Name',
    '.&mt($item->{text}).' '. - &Apache::loncommon::help_open_topic($item->{'help'}).'
    '.&mt($item->{text}).' 
    '.&mt($item->{text}).' '. +# &Apache::loncommon::help_open_topic($item->{'help'}).'
    '.$choices->{$img}.''.&mt($othertitle).''. - ' Mb