diff options
Diffstat (limited to 'lib/AdminPanel/Module/Hosts.pm')
-rw-r--r-- | lib/AdminPanel/Module/Hosts.pm | 530 |
1 files changed, 0 insertions, 530 deletions
diff --git a/lib/AdminPanel/Module/Hosts.pm b/lib/AdminPanel/Module/Hosts.pm deleted file mode 100644 index faae3f0..0000000 --- a/lib/AdminPanel/Module/Hosts.pm +++ /dev/null @@ -1,530 +0,0 @@ -# vim: set et ts=4 sw=4: -#***************************************************************************** -# -# Copyright (c) 2013-2015 Matteo Pasotti <matteo.pasotti@gmail.com> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2, as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -#***************************************************************************** - -package ManaTools::Module::Hosts; - -use Modern::Perl '2011'; -use autodie; -use Moose; -use POSIX qw(ceil); -use utf8; - -use Glib; -use yui; -use ManaTools::Shared qw(trim); -use ManaTools::Shared::GUI; -use ManaTools::Shared::Hosts; - -extends qw( ManaTools::Module ); - - -has '+icon' => ( - default => "/usr/lib/libDrakX/icons/IC-Dhost-48.png" -); - -has '+name' => ( - default => "Hostmanager", -); - -=head1 VERSION - -Version 1.0.0 - -=cut - -our $VERSION = '1.0.0'; - -has 'dialog' => ( - is => 'rw', - init_arg => undef -); - -has 'table' => ( - is => 'rw', - init_arg => undef -); - -has 'cfgHosts' => ( - is => 'rw', - init_arg => undef -); - -has 'sh_gui' => ( - is => 'rw', - init_arg => undef, - builder => '_SharedUGUIInitialize' -); - -has 'loc' => ( - is => 'rw', - init_arg => undef, - builder => '_localeInitialize' -); - -sub _localeInitialize { - my $self = shift(); - - # TODO fix domain binding for translation - $self->loc(ManaTools::Shared::Locales->new(domain_name => 'drakx-net') ); - # TODO if we want to give the opportunity to test locally add dir_name => 'path' -} - -sub _SharedUGUIInitialize { - my $self = shift(); - - $self->sh_gui(ManaTools::Shared::GUI->new() ); -} - -#============================================================= - -=head2 start - -=head3 INPUT - - $self: this object - -=head3 DESCRIPTION - - This method extends Module::start and is invoked to - start host manager - -=cut - -#============================================================= -sub start { - my $self = shift; - - $self->_manageHostsDialog(); -}; - -#============================================================= - -=head2 _changeHostNameDialog - -=head3 INPUT - - $self: this object - - $headerString: a title for the dialog - -=head3 DESCRIPTION - - This method display a dialog allowing the user - to change the hostname - -=cut - -#============================================================= -sub _changeHostNameDialog { - my $self = shift; - - my $headerString = shift(); - - my $factory = yui::YUI::widgetFactory; - my $dlg = $factory->createPopupDialog(); - my $layout = $factory->createVBox($dlg); - - my $hbox_header = $factory->createHBox($layout); - my $vbox_content = $factory->createVBox($layout); - my $hbox_footer = $factory->createHBox($layout); - - # header - my $labelDescription = $factory->createLabel($hbox_header,$headerString); - - # content - my $firstHbox = $factory->createHBox($vbox_content); - my $secondHbox = $factory->createHBox($vbox_content); - my $thirdHbox = $factory->createHBox($vbox_content); - my $fourthHbox = $factory->createHBox($vbox_content); - my $fifthHbox = $factory->createHBox($vbox_content); - my $sixthHbox = $factory->createHBox($vbox_content); - - my $labelHostName = $factory->createLabel($secondHbox,$self->loc->N("Hostname")); - $labelHostName->setWeight($yui::YD_HORIZ, 10); - my $textHostName = $factory->createInputField($secondHbox,""); - $textHostName->setWeight($yui::YD_HORIZ, 30); - - my $labelPrettyHostName = $factory->createLabel($thirdHbox,$self->loc->N("Pretty Hostname")); - $labelPrettyHostName->setWeight($yui::YD_HORIZ, 10); - my $textPrettyHostName = $factory->createInputField($thirdHbox,""); - $textPrettyHostName->setWeight($yui::YD_HORIZ, 30); - - my $labelStaticHostName = $factory->createLabel($fourthHbox,$self->loc->N("Static Hostname")); - $labelStaticHostName->setWeight($yui::YD_HORIZ, 10); - my $textStaticHostName = $factory->createInputField($fourthHbox,""); - $textStaticHostName->setWeight($yui::YD_HORIZ, 30); - - my $labelChassis = $factory->createLabel($fifthHbox,$self->loc->N("Chassis")); - $labelChassis->setWeight($yui::YD_HORIZ, 10); - my $textChassis = $factory->createInputField($fifthHbox,""); - $textChassis->setWeight($yui::YD_HORIZ, 30); - - my $labelIconName = $factory->createLabel($sixthHbox,$self->loc->N("Icon Name")); - $labelIconName->setWeight($yui::YD_HORIZ, 10); - my $textIconName = $factory->createInputField($sixthHbox,""); - $textIconName->setWeight($yui::YD_HORIZ, 30); - - $textHostName->setValue($self->cfgHosts->_getLocalHostName()); - $textPrettyHostName->setValue($self->cfgHosts->_getLocalPrettyHostName()); - $textStaticHostName->setValue($self->cfgHosts->_getLocalStaticHostName()); - $textChassis->setValue($self->cfgHosts->_getLocalChassis()); - $textIconName->setValue($self->cfgHosts->_getLocalIconName()); - - # footer - my $cancelButton = $factory->createPushButton($factory->createLeft($hbox_footer),$self->loc->N("&Cancel")); - my $okButton = $factory->createPushButton($factory->createRight($hbox_footer),$self->loc->N("&OK")); - - while(1){ - my $event = $dlg->waitForEvent(); - my $eventType = $event->eventType(); - - #event type checking - if ($eventType == $yui::YEvent::CancelEvent) { - last; - } - elsif ($eventType == $yui::YEvent::WidgetEvent) { - # widget selected - my $widget = $event->widget(); - if ($widget == $cancelButton) { - last; - } - elsif($widget == $okButton) { - $self->cfgHosts->_setLocalHostName($textHostName->value()); - $self->cfgHosts->_setLocalPrettyHostName($textPrettyHostName->value()); - $self->cfgHosts->_setLocalStaticHostName($textStaticHostName->value()); - $self->cfgHosts->_setLocalChassis($textChassis->value()); - $self->cfgHosts->_setLocalIconName($textIconName->value()); - last; - } - } - } - - destroy $dlg; -} - -sub _manipulateHostDialog { - my $self = shift; - - my $headerString = shift(); - my $boolEdit = shift(); - - my $hostIpString = ""; - my $hostNameString = ""; - my $hostAliasesString = ""; - - if($boolEdit == 1){ - $hostIpString = shift(); - $hostNameString = shift(); - $hostAliasesString = shift(); - } - - my $factory = yui::YUI::widgetFactory; - my $dlg = $factory->createPopupDialog(); - my $layout = $factory->createVBox($dlg); - - my $hbox_header = $factory->createHBox($layout); - my $vbox_content = $factory->createVBox($layout); - my $hbox_footer = $factory->createHBox($layout); - - # header - my $labelDescription = $factory->createLabel($hbox_header,$headerString); - - # content - my $firstHbox = $factory->createHBox($vbox_content); - my $secondHbox = $factory->createHBox($vbox_content); - my $thirdHbox = $factory->createHBox($vbox_content); - - my $labelIPAddress = $factory->createLabel($firstHbox,$self->loc->N("IP Address")); - my $labelHostName = $factory->createLabel($secondHbox,$self->loc->N("Hostname")); - my $labelHostAlias = $factory->createLabel($thirdHbox,$self->loc->N("Host aliases")); - $labelIPAddress->setWeight($yui::YD_HORIZ, 10); - $labelHostName->setWeight($yui::YD_HORIZ, 10); - $labelHostAlias->setWeight($yui::YD_HORIZ, 10); - - my $textIPAddress = $factory->createInputField($firstHbox,""); - my $textHostName = $factory->createInputField($secondHbox,""); - my $textHostAlias = $factory->createInputField($thirdHbox,""); - $textIPAddress->setWeight($yui::YD_HORIZ, 30); - $textHostName->setWeight($yui::YD_HORIZ, 30); - $textHostAlias->setWeight($yui::YD_HORIZ, 30); - - if($boolEdit == 1){ - $textIPAddress->setValue($hostIpString); - $textHostName->setValue($hostNameString); - $textHostAlias->setValue($hostAliasesString); - } - - # footer - my $cancelButton = $factory->createPushButton($factory->createLeft($hbox_footer),$self->loc->N("&Cancel")); - my $okButton = $factory->createPushButton($factory->createRight($hbox_footer),$self->loc->N("&OK")); - - while(1){ - my $event = $dlg->waitForEvent(); - my $eventType = $event->eventType(); - - #event type checking - if ($eventType == $yui::YEvent::CancelEvent) { - last; - } - elsif ($eventType == $yui::YEvent::WidgetEvent) { - # widget selected - my $widget = $event->widget(); - if ($widget == $cancelButton) { - last; - } - elsif($widget == $okButton) { - my $res = undef; - my @hosts_toadd; - push @hosts_toadd, $textHostName->value(); - if(ManaTools::Shared::trim($textHostAlias->value()) ne ""){ - push @hosts_toadd, $textHostAlias->value(); - } - if($boolEdit == 0){ - $res = $self->cfgHosts->_insertHost($textIPAddress->value(),[@hosts_toadd]); - }else{ - $res = $self->cfgHosts->_modifyHost($textIPAddress->value(),[@hosts_toadd]); - } - $res = $self->cfgHosts->_writeHosts(); - last; - } - } - } - - destroy $dlg; -} - -#============================================================= - -=head2 _addHostDialog - -=head3 INPUT - - $self: this object - -=head3 DESCRIPTION - -This subroutine creates the Host dialog to add host definitions - -=cut - -#============================================================= - -sub _addHostDialog { - my $self = shift(); - return $self->_manipulateHostDialog($self->loc->N("Add the information"),0); -} - -#============================================================= - -=head2 _edtHostDialog - -=head3 INPUT - -=over 4 - -=item $self: this object - -=item B<$hostIp> : the ip of the host entry that we want to modify - -=item B<$hostName> : the name of the host entry we want to modify - -=item B<$hostAliases> : aliases of the host entry we want to modify - -=back - -=head3 DESCRIPTION - -This subroutine creates the Host dialog to modify host definitions - -=cut - -#============================================================= - -sub _edtHostDialog { - my $self = shift(); - my $hostIp = shift(); - my $hostName = shift(); - my $hostAliases = shift(); - return $self->_manipulateHostDialog($self->loc->N("Modify the information"),1,$hostIp,$hostName,$hostAliases); -} - -#============================================================= - -=head2 setupTable - -=head3 INPUT - - $self: this object - - $data: reference to the array containaing the host data to show into the table - -=head3 DESCRIPTION - -This subroutine populates a previously created YTable with the hosts data -retrieved by the Config::Hosts module - -=cut - -#============================================================= -sub setupTable { - my $self = shift(); - - my @hosts = $self->cfgHosts->_getHosts(); - # clear table - $self->table->deleteAllItems(); - foreach my $host (@hosts){ - my $tblItem; - my $aliases = join(',',@{$host->{'hosts'}}); - if(scalar(@{$host->{'hosts'}}) > 1){ - $aliases =~s/^$host->{'hosts'}[0]\,*//g; - }elsif(scalar(@{$host->{'hosts'}}) == 1){ - $aliases = ""; - } - $tblItem = new yui::YTableItem($host->{'ip'},$host->{'hosts'}[0],$aliases); - $self->table->addItem($tblItem); - } -} - -sub _manageHostsDialog { - my $self = shift; - - ## TODO fix for manatools - my $appTitle = yui::YUI::app()->applicationTitle(); - my $appIcon = yui::YUI::app()->applicationIcon(); - ## set new title to get it in dialog - my $newTitle = $self->loc->N("Manage hosts definitions"); - yui::YUI::app()->setApplicationTitle($newTitle); - - my $factory = yui::YUI::widgetFactory; - my $optional = yui::YUI::optionalWidgetFactory; - - - $self->dialog($factory->createMainDialog()); - my $layout = $factory->createVBox($self->dialog); - - my $hbox_header = $factory->createHBox($layout); - my $headLeft = $factory->createHBox($factory->createLeft($hbox_header)); - my $headRight = $factory->createHBox($factory->createRight($hbox_header)); - - my $logoImage = $factory->createImage($headLeft, $appIcon); - my $labelAppDescription = $factory->createLabel($headRight,$newTitle); - $logoImage->setWeight($yui::YD_HORIZ,0); - $labelAppDescription->setWeight($yui::YD_HORIZ,3); - - my $hbox_content = $factory->createHBox($layout); - - my $tableHeader = new yui::YTableHeader(); - $tableHeader->addColumn($self->loc->N("IP Address")); - $tableHeader->addColumn($self->loc->N("Hostname")); - $tableHeader->addColumn($self->loc->N("Host Aliases")); - my $leftContent = $factory->createLeft($hbox_content); - $leftContent->setWeight($yui::YD_HORIZ,45); - $self->table($factory->createTable($leftContent,$tableHeader)); - - # initialize Config::Hosts - $self->cfgHosts(ManaTools::Shared::Hosts->new()); - $self->setupTable(); - - my $rightContent = $factory->createRight($hbox_content); - $rightContent->setWeight($yui::YD_HORIZ,10); - my $topContent = $factory->createTop($rightContent); - my $vbox_commands = $factory->createVBox($topContent); - my $addButton = $factory->createPushButton($factory->createHBox($vbox_commands),$self->loc->N("A&dd")); - my $edtButton = $factory->createPushButton($factory->createHBox($vbox_commands),$self->loc->N("&Edit")); - my $remButton = $factory->createPushButton($factory->createHBox($vbox_commands),$self->loc->N("&Remove")); - my $hnButton = $factory->createPushButton($factory->createHBox($vbox_commands),$self->loc->N("&Hostname")); - $addButton->setWeight($yui::YD_HORIZ,1); - $edtButton->setWeight($yui::YD_HORIZ,1); - $remButton->setWeight($yui::YD_HORIZ,1); - $hnButton->setWeight($yui::YD_HORIZ,1); - - my $hbox_foot = $factory->createHBox($layout); - my $vbox_foot_left = $factory->createVBox($factory->createLeft($hbox_foot)); - my $vbox_foot_right = $factory->createVBox($factory->createRight($hbox_foot)); - my $aboutButton = $factory->createPushButton($vbox_foot_left,$self->loc->N("&About")); - my $cancelButton = $factory->createPushButton($vbox_foot_right,$self->loc->N("&Cancel")); - my $okButton = $factory->createPushButton($vbox_foot_right,$self->loc->N("&OK")); - - # main loop - while(1) { - my $event = $self->dialog->waitForEvent(); - my $eventType = $event->eventType(); - - #event type checking - if ($eventType == $yui::YEvent::CancelEvent) { - last; - } - elsif ($eventType == $yui::YEvent::WidgetEvent) { -### Buttons and widgets ### - my $widget = $event->widget(); - if ($widget == $cancelButton) { - last; - } - elsif ($widget == $addButton) { - $self->_addHostDialog(); - $self->setupTable(); - } - elsif ($widget == $edtButton) { - my $tblItem = yui::toYTableItem($self->table->selectedItem()); - if($tblItem->cellCount() >= 3){ - $self->_edtHostDialog($tblItem->cell(0)->label(),$tblItem->cell(1)->label(),$tblItem->cell(2)->label()); - }else{ - $self->_edtHostDialog($tblItem->cell(0)->label(),$tblItem->cell(1)->label(),""); - } - $self->setupTable(); - } - elsif ($widget == $remButton) { - # implement deletion dialog - if($self->sh_gui->ask_YesOrNo({title => $self->loc->N("Confirmation"), text => $self->loc->N("Are you sure to drop this host?")}) == 1){ - my $tblItem = yui::toYTableItem($self->table->selectedItem()); - # drop the host using the ip - $self->cfgHosts->_dropHost($tblItem->cell(0)->label()); - # write changes - $self->cfgHosts->_writeHosts(); - $self->setupTable(); - } - }elsif ($widget == $hnButton) { - $self->_changeHostNameDialog("Change the HostName FQDN"); - $self->setupTable(); - }elsif ($widget == $aboutButton) { - $self->sh_gui->AboutDialog({ - name => $appTitle, - version => $VERSION, - credits => "Copyright (c) 2013-2015 by Matteo Pasotti", - license => "GPLv2", - description => $self->loc->N("Graphical manager for hosts definitions"), - authors => "Matteo Pasotti <matteo.pasotti\@gmail.com>" - } - ); - }elsif ($widget == $okButton) { - # write changes - $self->cfgHosts->_writeHosts(); - last; - } - } - } - - $self->dialog->destroy() ; - - #restore old application title - yui::YUI::app()->setApplicationTitle($appTitle); -} - -1; |