aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngelo Naselli <anaselli@linux.it>2015-03-25 23:09:12 +0100
committerAngelo Naselli <anaselli@linux.it>2015-03-25 23:09:12 +0100
commita664f924402976b32f30310430d08393f254c2ce (patch)
tree18e2bcf4a094c9d4c21e6fca1cae50e0938c144e
parent2c0df810a598bb046966520e3c66e9f8fb266248 (diff)
downloadmanatools-a664f924402976b32f30310430d08393f254c2ce.tar
manatools-a664f924402976b32f30310430d08393f254c2ce.tar.gz
manatools-a664f924402976b32f30310430d08393f254c2ce.tar.bz2
manatools-a664f924402976b32f30310430d08393f254c2ce.tar.xz
manatools-a664f924402976b32f30310430d08393f254c2ce.zip
Manage new data from backend, partially fixed mga#15552
-rw-r--r--lib/ManaTools/Module/Clock.pm116
1 files changed, 79 insertions, 37 deletions
diff --git a/lib/ManaTools/Module/Clock.pm b/lib/ManaTools/Module/Clock.pm
index 56a1e5cb..c81e22bb 100644
--- a/lib/ManaTools/Module/Clock.pm
+++ b/lib/ManaTools/Module/Clock.pm
@@ -220,16 +220,37 @@ sub _adminClockPanel {
my $optFactory = yui::YUI::optionalWidgetFactory;
die "calendar widgets missing" if (!$optFactory->hasDateField() || !$optFactory->hasTimeField());
+ ## default value
+ my $info = $self->_restoreValues();
+
+# MainDialog
+# +-------------------------------+
+# | VBOX |
+# | +-------------------------+ |
+# | | +---------------------+ | |
+# | | |________HBOX_________| | |
+# | | | |
+# | | +---------------------+ | |
+# | | |________HBOX_________| | |
+# | | | |
+# | | +---------------------+ | |
+# | | |________HBOX_________| | |
+# | +-------------------------+ |
+# | |
+# +-------------------------------+
+
# Create Dialog
my $dialog = $factory->createMainDialog;
# my $minSize = $factory->createMinSize($dialog, 40, 15);
# Start Dialog layout:
my $layout = $factory->createVBox($dialog);
- my $align = $factory->createLeft($layout);
- my $frame = $factory->createFrame($align, $self->loc->N("Setting date and time"));
- my $hbox = $factory->createHBox($frame);
+ ### first line Setting Date and Time
+ my $hbox = $factory->createHBox($layout);
+ my $align = $factory->createLeft($hbox);
+ my $dateTimeFrame = $factory->createFrame($align, $self->loc->N("Setting date and time"));
+ $hbox = $factory->createHBox($dateTimeFrame);
my $dateField = $optFactory->createDateField($hbox, "");
$factory->createHSpacing($hbox, 3.0);
@@ -237,73 +258,86 @@ sub _adminClockPanel {
$factory->createHSpacing($hbox, 1.0);
$factory->createVSpacing($hbox, 1.0);
$factory->createVSpacing($layout, 1.0);
+ $dateField->setValue($info->{date});
+ $timeField->setValue($info->{time});
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- my $ntpFrame = $factory->createCheckBoxFrame($hbox, $self->loc->N("Enable Network Time Protocol"), 0);
+ ### second line setting NTP
+ $hbox = $factory->createHBox($layout);
+ $align = $factory->createLeft($hbox);
+ my $ntpFrame = $factory->createCheckBoxFrame($align, $self->loc->N("Enable Network Time Protocol"), 0);
my $hbox1 = $factory->createHBox($ntpFrame);
my $changeNTPButton = $factory->createPushButton($hbox1, $self->loc->N("Change &NTP server"));
$factory->createHSpacing($hbox1, 1.0);
+ my $ntpService = $factory->createComboBox($hbox1, "", );
+ my $itemColl = new yui::YItemCollection;
+ my $sel_serv = $self->sh_tz->currentNTPService();
+ foreach my $serv (@{$self->sh_tz->ntpServiceList()}) {
+ my $item = new yui::YItem ($serv, 0);
+ $item->setSelected(1) if ($sel_serv && $sel_serv eq $serv);
+ $itemColl->push($item);
+ $item->DISOWN();
+ }
+ $ntpService->addItems($itemColl);
+ $ntpService->setNotify(1);
+
+
$factory->createLabel($hbox1,$self->loc->N("Current:"));
$factory->createHSpacing($hbox1, 1.0);
+# my $ntpLabel = $factory->createLabel($hbox1, $self->sh_tz->currentNTPService());
+# $factory->createHSpacing($hbox1, 1.0);
my $ntpLabel = $factory->createLabel($hbox1, $self->loc->N("not defined"));
+ if ($info->{ntp_server}) {
+ $ntpLabel->setValue($info->{ntp_server});
+ }
+ $ntpFrame->setValue($info->{ntp_running});
+ $dateTimeFrame->setEnabled(!$info->{ntp_running});
+ $ntpFrame->setNotify(1);
+
$factory->createHSpacing($hbox1, 1.0);
$ntpLabel->setWeight($yui::YD_HORIZ, 2);
$changeNTPButton->setWeight($yui::YD_HORIZ, 1);
$factory->createHSpacing($hbox, 1.0);
-
$factory->createVSpacing($layout, 1.0);
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- $frame = $factory->createFrame ($hbox, $self->loc->N("TimeZone"));
+
+ ### third line setting TZ
+ $hbox = $factory->createHBox($layout);
+ $align = $factory->createLeft($hbox);
+ my $frame = $factory->createFrame ($align, $self->loc->N("TimeZone"));
$hbox1 = $factory->createHBox( $frame );
my $changeTZButton = $factory->createPushButton($hbox1, $self->loc->N("Change &Time Zone"));
$factory->createHSpacing($hbox1, 1.0);
$factory->createLabel($hbox1,$self->loc->N("Current:"));
$factory->createHSpacing($hbox1, 1.0);
my $timeZoneLbl = $factory->createLabel($hbox1, $self->loc->N("not defined"));
+
+ if (exists $info->{time_zone} && $info->{time_zone}->{ZONE}) {
+ $timeZoneLbl->setValue($info->{time_zone}->{ZONE});
+ }
$factory->createHSpacing($hbox1, 1.0);
$timeZoneLbl->setWeight($yui::YD_HORIZ, 2);
$changeTZButton->setWeight($yui::YD_HORIZ, 1);
-
$factory->createHSpacing($hbox, 1.0);
- # buttons on the last line
+ ### buttons on the last line
$factory->createVSpacing($layout, 1.0);
$hbox = $factory->createHBox($layout);
$align = $factory->createLeft($hbox);
- $hbox = $factory->createHBox($align);
- my $aboutButton = $factory->createPushButton($hbox, $self->loc->N("&About") );
- my $resetButton = $factory->createPushButton($hbox, $self->loc->N("&Reset") );
+ $hbox1 = $factory->createHBox($align);
+ my $aboutButton = $factory->createPushButton($hbox1, $self->loc->N("&About") );
+ my $resetButton = $factory->createPushButton($hbox1, $self->loc->N("&Reset") );
$align = $factory->createRight($hbox);
- $hbox = $factory->createHBox($align);
- my $cancelButton = $factory->createPushButton($hbox, $self->loc->N("&Cancel"));
- my $okButton = $factory->createPushButton($hbox, $self->loc->N("&Ok"));
+ $hbox1 = $factory->createHBox($align);
+ my $cancelButton = $factory->createPushButton($hbox1, $self->loc->N("&Cancel"));
+ my $okButton = $factory->createPushButton($hbox1, $self->loc->N("&Ok"));
$factory->createHSpacing($hbox, 1.0);
## no changes by default
$dialog->setDefaultButton($cancelButton);
- # End Dialof layout
-
- ## default value
- my $info = $self->_restoreValues();
-
- $dateField->setValue($info->{date});
- $timeField->setValue($info->{time});
-
- if (exists $info->{time_zone} && $info->{time_zone}->{ZONE}) {
- $timeZoneLbl->setValue($info->{time_zone}->{ZONE});
- }
-
- if ($info->{ntp_server}) {
- $ntpLabel->setValue($info->{ntp_server});
- }
- $ntpFrame->setValue($info->{ntp_running});
-
+ ### End Dialog layout ###
# get only once
my $NTPservers = $self->_get_NTPservers();
@@ -326,13 +360,19 @@ sub _adminClockPanel {
if ($widget == $cancelButton) {
last;
}
+ elsif ($widget == $ntpFrame) {
+ $dateTimeFrame->setEnabled(!$ntpFrame->value());
+ }
+ elsif ($widget == $ntpService) {
+ my $selection = $ntpService->selectedItem();
+ $self->sh_tz->ntp_program($selection->label()) if ($selection);
+ }
elsif ($widget == $okButton) {
yui::YUI::app()->busyCursor();
my $finished = 1;
# (1) write new TZ settings
# (2) write new NTP settigs if checked
# (3) use date time fields if NTP is not checked
-$DB::single = 1;
my $old_conf = $self->sh_tz->readConfiguration();
if ($info->{time_zone}->{UTC} != $old_conf->{UTC} ||
$info->{time_zone}->{ZONE} ne $old_conf->{ZONE}) {
@@ -355,13 +395,15 @@ $DB::single = 1;
my $errors = $@;
if ($errors) {
# TODO should finish and not continue for this error
- $finished = 0;
+# $finished = 0;
$self->sh_gui->warningMsgBox({
title => $self->loc->N("set NTP Configuration failed"),
text => "$errors",
richtext => 1,
});
+ $dialog->pollEvent();
}
+
eval { $self->sh_tz->enableAndStartNTP($info->{ntp_server}) };
$errors = $@;
if ($errors) {
(keys(%{$printer->{configured}})) { # Check if we have a PPD file if (! -r "$::prefix/etc/foomatic/$queue.ppd") { if (-r "$::prefix/etc/cups/ppd/$queue.ppd") { # If we have a PPD file in the CUPS config dir, link to it run_program::rooted($::prefix, "ln", "-sf", "/etc/cups/ppd/$queue.ppd", "/etc/foomatic/$queue.ppd"); } elsif (-r "$::prefix/usr/share/postscript/ppd/$queue.ppd") { # Check PPD directory of GPR, too run_program::rooted( $::prefix, "ln", "-sf", "/usr/share/postscript/ppd/$queue.ppd", "/etc/foomatic/$queue.ppd"); } else { # No PPD file at all? We cannot set up this printer next; } } # Add the printer entry if (!isprinterconfigured($queue, $configfilecontent)) { # Remove the old printer entry $configfilecontent = removeprinter($queue, $configfilecontent); # Add the new printer entry $configfilecontent = makeprinterentry($printer, $queue, $configfilecontent); } } # Default printer if ($printer->{DEFAULT}) { if ($configfilecontent !~ /^\s*Current\-Printer\s*:/m) { $configfilecontent =~ s/\n/\nCurrent-Printer: $printer->{DEFAULT}\n/s; } else { if ($configfilecontent =~ /^\s*Current\-Printer\s*:\s*(\S+)\s*$/m && !isprinterconfigured($1, $configfilecontent)) { $configfilecontent =~ s/(Current\-Printer\s*:\s*)\S+/$1$printer->{DEFAULT}/; } } } # Write back GIMP's printer configuration file writeconfigfile($configfilename, $configfilecontent); } return 1; } sub addcupsremoteto { my ($printer, $queue) = @_; # Do we have files to treat? my @configfilenames = findconfigfiles(); return 1 if $#configfilenames < 0; my @printerlist = printer::cups::get_remote_queues(); my $ppdfile = ""; if ($printer->{SPOOLER} eq "cups" && (-x "$::prefix/usr/bin/curl" || -x "$::prefix/usr/bin/wget")) { foreach my $listentry (@printerlist) { next if $listentry !~ /^([^\|]+)\|([^\|]+)$/; my $q = $1; next if $q ne $queue; my $server = $2; # Remove server name from queue name $q =~ s/^([^@]*)@.*$/$1/; if (-x "$::prefix/usr/bin/wget") { eval(run_program::rooted( $::prefix, "/usr/bin/wget", "-O", "/etc/foomatic/$queue.ppd", "http://$server:631/printers/$q.ppd")); } else { eval(run_program::rooted( $::prefix, "/usr/bin/curl", "-o", "/etc/foomatic/$queue.ppd", "http://$server:631/printers/$q.ppd")); } # Does the file exist and is it not an error message? if (-r "$::prefix/etc/foomatic/$queue.ppd" && cat_("$::prefix/etc/foomatic/$queue.ppd") =~ /^\*PPD-Adobe/) { $ppdfile = "/etc/foomatic/$queue.ppd"; } else { unlink "$::prefix/etc/foomatic/$queue.ppd"; return 0; } } } else { return 1 } # There is no system-wide config file, treat every user's config file foreach my $configfilename (@configfilenames) { # Load GIMP's printer config file my $configfilecontent = readconfigfile($configfilename); # Add the printer entry if (!isprinterconfigured($queue, $configfilecontent)) { # Remove the old printer entry $configfilecontent = removeprinter($queue, $configfilecontent); # Add the new printer entry $configfilecontent = makeprinterentry($printer, $queue, $configfilecontent); } # Write back GIMP's printer configuration file writeconfigfile($configfilename, $configfilecontent); } return 1; } sub removeprinterfrom { my ($_printer, $queue) = @_; # Do we have files to treat? my @configfilenames = findconfigfiles(); return 1 if $#configfilenames < 0; # There is no system-wide config file, treat every user's config file foreach my $configfilename (@configfilenames) { # Load GIMP's printer config file my $configfilecontent = readconfigfile($configfilename); # Remove the printer entry $configfilecontent = removeprinter($queue, $configfilecontent); # Write back GIMP's printer configuration file writeconfigfile($configfilename, $configfilecontent); } return 1; } sub removelocalprintersfrom { my ($printer) = @_; # Do we have files to treat? my @configfilenames = findconfigfiles(); return 1 if $#configfilenames < 0; # There is no system-wide config file, treat every user's config file foreach my $configfilename (@configfilenames) { # Load GIMP's printer config file my $configfilecontent = readconfigfile($configfilename); # Remove the printer entries foreach my $queue (keys(%{$printer->{configured}})) { $configfilecontent = removeprinter($queue, $configfilecontent); } # Write back GIMP's printer configuration file writeconfigfile($configfilename, $configfilecontent); } return 1; } sub makeprinterentry { my ($printer, $queue, $configfile) = @_; # Make printer's section $configfile = addprinter($queue, $configfile); # Load PPD file my $ppd = cat_("$::prefix/etc/foomatic/$queue.ppd"); # Is the printer configured with GIMP-Print? my $gimpprintqueue = 0; my $gimpprintdriver = "ps2"; if ($ppd =~ /CUPS\s*\+\s*GIMP\s*\-\s*Print/im) { # Native CUPS driver $gimpprintqueue = 1; $gimpprintdriver = $1 if $ppd =~ /\s*\*ModelName:\s*\"(\S+)\"\s*$/im; } elsif ($ppd =~ /Foomatic\s*\+\s*gimp\s*\-\s*print/im) { # GhostScript + Foomatic driver $gimpprintqueue = 1; $ppd =~ /\-sModel=((escp2|pcl|bjc|lexmark)\-[^\s\"']*)/im and $gimpprintdriver = $1; } if ($gimpprintqueue) { # Get the paper size from the PPD file if ($ppd =~ /^\s*\*DefaultPageSize:\s*(\S+)\s*$/m) { my $papersize = $1; $configfile = removeentry($queue, "Media-Size", $configfile); $configfile = addentry($queue, "Media-Size: $papersize", $configfile); } $configfile = removeentry($queue, "PPD-File:", $configfile); $configfile = addentry($queue, "PPD-File:", $configfile); $configfile = removeentry($queue, "Driver:", $configfile); $configfile = addentry($queue, "Driver: $gimpprintdriver", $configfile); $configfile = removeentry($queue, "Destination:", $configfile); $configfile = addentry($queue, sprintf("Destination: /usr/bin/%s -P %s -o raw", $spoolers{$printer->{SPOOLER}}{print_command}, $queue), $configfile); } else { $configfile = removeentry($queue, "PPD-File:", $configfile); $configfile = addentry($queue, "PPD-File: /etc/foomatic/$queue.ppd", $configfile); $configfile = removeentry($queue, "Driver:", $configfile); $configfile = addentry($queue, "Driver: ps2", $configfile); $configfile = removeentry($queue, "Destination:", $configfile); $configfile = addentry($queue, sprintf("Destination: /usr/bin/%s -P %s", $spoolers{$printer->{SPOOLER}}{print_command}, $queue), $configfile); } return $configfile; } sub findconfigfiles() { my @configfilenames = (if_(-d "$::prefix/usr/lib/gimp/1.2", ".gimp-1.2/printrc"), if_(-d "$::prefix/usr/lib/gimp/1.3", ".gimp-1.3/printrc")); return () unless @configfilenames; my @filestotreat; foreach (&list_passwd()) { my ($username, undef, $uid, $gid, undef, undef, undef, $homedir) = @$_; next if 0 < $uid && $uid < 500 || $username eq "nobody"; foreach my $file (@configfilenames) { my $dir = "$homedir/$file"; $dir =~ s,/[^/]*$,,; next if -f $dir; if (! -d "$::prefix$dir") { eval { mkdir_p("$::prefix$dir") } or next; run_program::rooted($::prefix, "/bin/chown", "$uid.$gid", $dir) or next; } if (! -f "$::prefix$homedir/$file") { eval { output("$::prefix$homedir/$file", "#PRINTRCv1 written by GIMP-PRINT 4.2.2 - 13 Sep 2002\n") } or next; run_program::rooted($::prefix, "/bin/chown", "$uid.$gid", "$homedir/$file") or next; } push @filestotreat, "$homedir/$file"; } } @filestotreat; } sub readconfigfile { my ($file) = @_; local *F; open F, "< $::prefix$file" or return ""; my $filecontent = join("", <F>); close F; return $filecontent; } sub writeconfigfile { my ($file, $filecontent) = @_; local *F; open F, "> $::prefix$file" or return 0; print F $filecontent; close F; return 1; } sub addentry { my ($section, $entry, $filecontent) = @_; my $sectionfound = 0; my $entryinserted = 0; my @lines = pop_spaces(split("\n", $filecontent)); foreach (@lines) { if (!$sectionfound) { $sectionfound = 1 if /^\s*Printer\s*:\s*($section)\s*$/; } else { if (!/^\s*$/ && !/^\s*;/) { $_ = "$entry\n$_"; $entryinserted = 1; last; } } } push(@lines, $entry) if $sectionfound && !$entryinserted; return join("\n", @lines) . "\n"; } sub addprinter { my ($section, $filecontent) = @_; foreach (pop_spaces(split("\n", $filecontent))) { # section already there, nothing to be done return $filecontent if /^\s*Printer\s*:\s*($section)\s*$/; } return $filecontent . "\nPrinter: $section\n"; } sub pop_spaces { my @lines = @_; pop @lines while @lines && $lines[-1] !~ /\S/; } sub removeentry { my ($section, $entry, $filecontent) = @_; my $sectionfound; my @lines = pop_spaces(split(/^/, $filecontent)); foreach (@lines) { if (!$sectionfound) { $sectionfound = /^\s*Printer\s*:\s*($section)\s*$/; } else { last if /^\s*Printer\s*:\s*.*\s*$/; # Next section if (/^\s*$entry/) { $_ = ""; last; } } }