package SrvMngr::Controller::${PackageName}; #---------------------------------------------------------------------- # heading : ${MenuHeading} # description : ${MenuDescription} # navigation : ${MenuNavigation} # # name : ${lcPackageName}, method : get, url : /${lcPackageName}, ctlact : ${lcPackageName}#main # name : ${lcPackageName}d, method : post, url : /${lcPackageName}d, ctlact : ${lcPackageName}#do_update # # routes : end # # Documentation: https://wiki.contribs.org/{PackageName} #---------------------------------------------------------------------- # # Scheme of things: # #main: ## ## Initial entry ## #set initial panel #for initial panel: # load up _data hash with DB fields # load up stash with pointer(s) to control fields hash(= get-)) #render initial panel # #do_display ## ## Return after submit pushed on panel ## #load up all params into local hash # by panel: # by param: # validate param (return ret = ok or error message) - call validate- # break out on error #if validation not ok # render back to current panel with error message in stash #otherwise # By panel: # Copy back to DB any that have changed (how to easily tell if it has changed?) # do whatever is required (inc signal_event smeserver--update?) # set success # call main? use strict; use warnings; use Mojo::Base 'Mojolicious::Controller'; use constant FALSE => 0; use constant TRUE => 1; use Locale::gettext; use SrvMngr::I18N; use SrvMngr qw(theme_list init_session); use Data::Dumper; use esmith::util; use esmith::HostsDB; use esmith::AccountsDB; use esmith::NetworksDB; use esmith::HostsDB; use esmith::DomainsDB; #The most common ones our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db"); our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db"); our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db"); our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db"); our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); require '/usr/share/smanager/lib/SrvMngr/Controller/${PackageName}-Custom.pm'; #The code that is to be added by the developer sub main { my $c = shift; $c->app->log->info( $c->log_req ); my %${prefix}_data = (); my $title = $c->l("${prefix}_${MenuDescription}"); my $modul = ''; $$${prefix}_data{'trt'} = '${firstPanel}'; #Load any DB entries into the _data area so as they are preset in the form # which DB my $db = $$${controldb | db | 'cdb'}; #pickup local or global db or Default to config $$${prefix}_data{${dbentry}} = $db->prop('${dbentry}') || ${dbdefault}; # and table control fields $c->stash(${tablecontrol}=>get_${tablecontrol}()); $c->stash( title => $title, modul => $modul, ${prefix}_data => \%${prefix}_data ); $c->render( template => "${PackageName}" ); } sub do_update { my $c = shift; $c->app->log->info($c->log_req); my %${prefix}_data = (); my $title = $c->l("${prefix}_${MenuDescription}"); # Accessing all POST parameters my %params = $c->req->params->to_hash; # Get number of POST parameters my $num_params = keys %params; #Params are available in the hash "params" # you may use: my @result; foreach my $key (keys %params) { my $value = $params{$key}; push @result, { $key => $value }; $c->app->log->debug("$key: $value"); } # the value of trt will tell you which panel has returned my $trt = $c->param('trt') || '${firstPanel}' ; #hidden control on every form. my $ret = 'ok'; #Validate the parameters accordingly my $thispanel; if ($trt eq '${panel}'){ #Validate form parameters for panel ${panel} $ret = validate_${panel}(); $thispanel = '${panel}'; } if ($ret eq "ok") { #Do whatever is needed, including writing values to the DB my $db = $$${controldb | db | 'cdb'}; #pickup local or global db or Default to config $db->set_prop('${dbentry}'=> param{'${dbentry}'}; #Copy back into db $$${prefix}_data{${dbentry}} = $db->prop('${dbentry}'); #Copy out into stash # anything else here... $c->stash( success => $c->l("$thispanel successfull message")); $c->stash( title => $title, ${prefix}_data => \%${prefix}_data # Extra data in here - repeat for each stash data entry needed for panels ); ${prefix}_data{'trt'} = '${firstPanel}'; $c->render("${PackageName}"); } } 1;