From c8b109378c133fdf63a08867e24d4781db613652 Mon Sep 17 00:00:00 2001 From: Brian Read Date: Sat, 16 Nov 2024 16:18:26 +0000 Subject: [PATCH] Refine and re-write table data interface to contain the custom code in one place --- Targets/Letsencrypt/Letsencrypt-Custom.pm | 360 +++++++++++----------- Templates/controller.pm.tem | 6 +- Templates/custom.pm.tem | 61 ++-- 3 files changed, 226 insertions(+), 201 deletions(-) diff --git a/Targets/Letsencrypt/Letsencrypt-Custom.pm b/Targets/Letsencrypt/Letsencrypt-Custom.pm index c72e0c4..15bc455 100644 --- a/Targets/Letsencrypt/Letsencrypt-Custom.pm +++ b/Targets/Letsencrypt/Letsencrypt-Custom.pm @@ -1,11 +1,12 @@ # -# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-14 11:31:47 +# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-16 10:30:16 # # # Routines to be edited by the developer to provide content and validation for parameters # and provison of the control data for table(s) # use esmith::util; +use esmith::util::network; use esmith::ConfigDB; use esmith::HostsDB; use esmith::AccountsDB; @@ -31,24 +32,18 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Validation for each field my $ret = ""; - if (! TRUE) #validate $c->param('InternalIP') - {$ret .= 'Validation for InternalIP failed';} - - if (! TRUE) #validate $c->param('ExternalIP') - {$ret .= 'Validation for ExternalIP failed';} - - if (! TRUE) #validate $c->param('InternetIP') - {$ret .= 'Validation for InternetIP failed';} - - if (! TRUE) #validate $c->param('Issuer') - {$ret .= 'Validation for Issuer failed';} - - if (! TRUE) #validate $c->param('Expiry') - {$ret .= 'Validation for Expiry failed';} - - if (! TRUE) #validate $c->param('NotBefore') - {$ret .= 'Validation for NotBefore failed';} - + if (! TRUE) #validate $c->param('InternalIP') + {$ret .= 'Validation for InternalIP failed';} + if (! TRUE) #validate $c->param('ExternalIP') + {$ret .= 'Validation for ExternalIP failed';} + if (! TRUE) #validate $c->param('InternetIP') + {$ret .= 'Validation for InternetIP failed';} + if (! TRUE) #validate $c->param('Issuer') + {$ret .= 'Validation for Issuer failed';} + if (! TRUE) #validate $c->param('Expiry') + {$ret .= 'Validation for Expiry failed';} + if (! TRUE) #validate $c->param('NotBefore') + {$ret .= 'Validation for NotBefore failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -59,30 +54,22 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Validation for each field my $ret = ""; - if (! TRUE) #validate $c->param('status') - {$ret .= 'Validation for status failed';} - - if (! TRUE) #validate $c->param('hookScript') - {$ret .= 'Validation for hookScript failed';} - - if (! TRUE) #validate $c->param('hostOverride') - {$ret .= 'Validation for hostOverride failed';} - - if (! TRUE) #validate $c->param('ACCEPT_TERMS') - {$ret .= 'Validation for ACCEPT_TERMS failed';} - - if (! TRUE) #validate $c->param('API') - {$ret .= 'Validation for API failed';} - - if (! TRUE) #validate $c->param('keysize') - {$ret .= 'Validation for keysize failed';} - - if (! TRUE) #validate $c->param('configure') - {$ret .= 'Validation for configure failed';} - - if (! TRUE) #validate $c->param('Email') - {$ret .= 'Validation for Email failed';} - + if (! TRUE) #validate $c->param('status') + {$ret .= 'Validation for status failed';} + if (! TRUE) #validate $c->param('hookScript') + {$ret .= 'Validation for hookScript failed';} + if (! TRUE) #validate $c->param('hostOverride') + {$ret .= 'Validation for hostOverride failed';} + if (! TRUE) #validate $c->param('ACCEPT_TERMS') + {$ret .= 'Validation for ACCEPT_TERMS failed';} + if (! TRUE) #validate $c->param('API') + {$ret .= 'Validation for API failed';} + if (! TRUE) #validate $c->param('keysize') + {$ret .= 'Validation for keysize failed';} + if (! TRUE) #validate $c->param('configure') + {$ret .= 'Validation for configure failed';} + if (! TRUE) #validate $c->param('Email') + {$ret .= 'Validation for Email failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -93,9 +80,8 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Validation for each field my $ret = ""; - if (! TRUE) #validate $c->param('AllDomainsCheck') - {$ret .= 'Validation for AllDomainsCheck failed';} - + if (! TRUE) #validate $c->param('AllDomainsCheck') + {$ret .= 'Validation for AllDomainsCheck failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -106,9 +92,8 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Validation for each field my $ret = ""; - if (! TRUE) #validate $c->param('EnabledDomainsCheck') - {$ret .= 'Validation for EnabledDomainsCheck failed';} - + if (! TRUE) #validate $c->param('EnabledDomainsCheck') + {$ret .= 'Validation for EnabledDomainsCheck failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -119,12 +104,10 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Validation for each field my $ret = ""; - if (! TRUE) #validate $c->param('OneDomainToCheck') - {$ret .= 'Validation for OneDomainToCheck failed';} - - if (! TRUE) #validate $c->param('OneDomainsCheck') - {$ret .= 'Validation for OneDomainsCheck failed';} - + if (! TRUE) #validate $c->param('OneDomainToCheck') + {$ret .= 'Validation for OneDomainToCheck failed';} + if (! TRUE) #validate $c->param('OneDomainsCheck') + {$ret .= 'Validation for OneDomainsCheck failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -145,7 +128,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # fields from Inputs in LIST $fields['LIST'] 'InternalIP'=>$cdb->get_prop('InternalInterface','IPAddress'), 'ExternalIP'=>$cdb->get_prop('ExternalInterface','IPAddress'), - 'InternetIP'=>"ext ip", #get_my_ip() + 'InternetIP'=>$c->get_my_ip(), 'Issuer'=>'$issuer', 'Expiry'=>'$expiry', 'NotBefore'=>'$before', @@ -177,9 +160,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my %ret = ( 'Data1'=>'Data for CHECKALLDOMAINS', #Example # fields from Inputs in CHECKALLDOMAINS $fields['CHECKALLDOMAINS'] - - 'AllDomainsCheck'=>'Scan running', - + 'AllDomainsCheck'=>'AllDomainsCheck contents', ); return %ret; @@ -191,93 +172,127 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my %ret = ( 'Data1'=>'Data for CHECKALLENABLEDDOMAINS', #Example # fields from Inputs in CHECKALLENABLEDDOMAINS $fields['CHECKALLENABLEDDOMAINS'] - - 'EnabledDomainsCheck'=>'EnabledDomainsCheck contents', - + 'EnabledDomainsCheck'=>'EnabledDomainsCheck contents', ); return %ret; } - sub get_data_for_panel_CHECKONEDOMAIN { # Return a hash with the fields required which will be loaded into the shared data my $c = shift; my %ret = ( - 'Data1'=>'Data for CHECKONEDDOMAINS', #Example - # fields from Inputs in CHECKONEDDOMAINS $fields['CHECKONEDDOMAINS'] - - 'OneDomainToCheck'=>'OneDomainToCheck contents', - - 'OneDomainsCheck'=>'OneDomainsCheck contents', - + 'Data1'=>'Data for CHECKONEDOMAIN', #Example + # fields from Inputs in CHECKONEDOMAIN $fields['CHECKONEDOMAIN'] + 'OneDomainToCheck'=>'OneDomainToCheck contents', + 'OneDomainsCheck'=>'OneDomainsCheck contents', ); return %ret; } - + # Get control data for table(s) - sub get_DomainList { - # Return an array of hashes of the contents for each row and column for DomainList - # default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc" - my $c = shift; - my $control_data = $c->stash('DomainList'); - #my @ret = {}; - - my @list = (); -# my @rv = Net::SSLeay::X509_get_subjectAltNames($server_cert); -# foreach my $element (@rv) { + # Define a constant hash for field name mapping + use constant DomainList_FIELD_MAPPING => ( + 'Table1-Domain name / HOSTNAME' => 'Domain', + 'Table1-Brief description' => 'Description', + 'Table1-Content' => 'Content', + 'Table1-LABEL_NAMESERVERS' => 'Nameservers', + 'Table1-LABEL_POINT' => 'Source-for-Table1-LABEL_POINT', + 'Table1-LABEL_LECERT' => 'letsencryptSSLcert', + 'Table1-IS_IN_CERT' => 'isincert', + 'Table1-CHECK' => 'Check' + #'target_field2' => 'source_field2', + # Add more mappings as needed + ); + + +use constant TEST_DOMAIN_LIST => ( + { "domain" => "Domain1","fred" => "fred1" , "description"=>"Description1"}, + { "domain" => "Domain2", "fred" => "fred2", "description"=>"Description2" }, + { "domain" => "Domain3", "fred" => "fred3", "description"=>"Description3" }, + # Add more test entries as needed +); + +sub actual_DomainList { + my $c = shift; + # Actual code for extracting DomainList + my @list = (); +# my @rv = Net::SSLeay::X509_get_subjectAltNames($server_cert); +# foreach my $element (@rv) { # next if $element =~ /^\d+$/; ; # #print $element . "\n"; # push @list, $element; -# } - - my @data = (); - my $check = $c->l('Check Domain'); - - for ($ddb->domains) +# } + my @data = (); + my $check = $c->l('Check Domain'); + for ($ddb->domains) + { + my $ns = $_->prop('Nameservers') || 'internet'; + my $le = $_->prop('letsencryptSSLcert') || 'disabled';#letsencrypt configure all + my $dname= $_->key; + my $isincert = "N"; + my $link = $c->create_link("letsencryptd","CHECKONEDOMAIN",""); + my $checklink = "".$check.""; + #my $checklink = "check"; + $isincert = "Y" if ( $dname ~~ @list); + # domain + push @data, + { Domain => $_->key, + $_->props, + letsencryptSSLcert => $le, + isincert => $isincert, + Check => $checklink, + Nameservers => $ns, + }; + #and hosts + for my $h ($hdb->get_hosts_by_domain($dname)) { - my $ns = $_->prop('Nameservers') || 'internet'; - my $le = $_->prop('letsencryptSSLcert') || 'disabled';#letsencrypt configure all - my $dname= $_->key; - my $isincert = "N"; - my $link = $c->create_link("letsencryptd","CHECKONEDOMAIN",""); - my $checklink = "".$check.""; - #my $checklink = "check"; - $isincert = "Y" if ( $dname ~~ @list); - # domain - push @data, - { Domain => $_->key, - $_->props, - letsencryptSSLcert => $le, - isincert => $isincert, - Check => $checklink, - Nameservers => $ns, - }; - #and hosts - for my $h ($hdb->get_hosts_by_domain($dname)) - { - next if $ddb->get($h->key); - next unless ($h->prop('HostType') eq "Self" || $h->prop('HostType') eq "Local"); - $le = $h->prop('letsencryptSSLcert') || 'disabled';#letsencrypt configure all - $isincert = "N"; - $isincert = "Y" if ( $h->key ~~ @list); - push @data, - { Domain => "--> ". $h->key, - $h->props, - Description=>$h->prop('ExternalIP')|| $h->prop('InternalIP')||"", - Content => $h->prop('HostType'), - isincert => $isincert, - Check => "", #$checklink - Nameservers => $c->l($ns), - } - } + next if $ddb->get($h->key); + next unless ($h->prop('HostType') eq "Self" || $h->prop('HostType') eq "Local"); + $le = $h->prop('letsencryptSSLcert') || 'disabled';#letsencrypt configure all + $isincert = "N"; + $isincert = "Y" if ( $h->key ~~ @list); + push @data, + { Domain => "--> ". $h->key, + $h->props, + Description=>$h->prop('ExternalIP')|| $h->prop('InternalIP')||"", + Content => $h->prop('HostType'), + isincert => $isincert, + Check => "", #$checklink + Nameservers => $c->l($ns), + } } - return \@data; } + return @data; +} + +sub get_DomainList { + # Return an array of hashes of the contents for each row and column for DomainList + my $c = shift; + my @source_records = $c->actual_DomainList(); #TEST_DOMAIN_LIST #Replace by code or call to produce contents of table; + my @transformed_records; + my %Field_Mapping = DomainList_FIELD_MAPPING; + # Iterate over each record in the source array + for my $source_record (@source_records) { + my %transformed_record; + # Iterate over each key-value pair in the $Field_Mapping constant + while (my ($target, $source) = each %Field_Mapping) { + # Check if the source field exists in the source record + if (exists $source_record->{$source}) { + # Assign the source field value to the target field in the transformed record + $transformed_record{$target} = $source_record->{$source}; + } + } + # Add transformed record to the array if it's not empty + push @transformed_records, \%transformed_record if %transformed_record; + } + return \@transformed_records; +} + # Return hash with values from row in which link clicked on table @@ -330,24 +345,18 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $prefix_data = shift; #Data hash as parameter my $ret = ""; - if (! TRUE) #copy or perform with value: InternalIP e.g. $c->setprop(dbentry,dbkey,$c->param('InternalIP') - {$ret .= 'Perform failed for InternalIP failed';} - - if (! TRUE) #copy or perform with value: ExternalIP e.g. $c->setprop(dbentry,dbkey,$c->param('ExternalIP') - {$ret .= 'Perform failed for ExternalIP failed';} - - if (! TRUE) #copy or perform with value: InternetIP e.g. $c->setprop(dbentry,dbkey,$c->param('InternetIP') - {$ret .= 'Perform failed for InternetIP failed';} - - if (! TRUE) #copy or perform with value: Issuer e.g. $c->setprop(dbentry,dbkey,$c->param('Issuer') - {$ret .= 'Perform failed for Issuer failed';} - - if (! TRUE) #copy or perform with value: Expiry e.g. $c->setprop(dbentry,dbkey,$c->param('Expiry') - {$ret .= 'Perform failed for Expiry failed';} - - if (! TRUE) #copy or perform with value: NotBefore e.g. $c->setprop(dbentry,dbkey,$c->param('NotBefore') - {$ret .= 'Perform failed for NotBefore failed';} - + if (! TRUE) #copy or perform with value: InternalIP e.g. $c->setprop(dbentry,dbkey,$c->param('InternalIP') + {$ret .= 'Perform failed for InternalIP failed';} + if (! TRUE) #copy or perform with value: ExternalIP e.g. $c->setprop(dbentry,dbkey,$c->param('ExternalIP') + {$ret .= 'Perform failed for ExternalIP failed';} + if (! TRUE) #copy or perform with value: InternetIP e.g. $c->setprop(dbentry,dbkey,$c->param('InternetIP') + {$ret .= 'Perform failed for InternetIP failed';} + if (! TRUE) #copy or perform with value: Issuer e.g. $c->setprop(dbentry,dbkey,$c->param('Issuer') + {$ret .= 'Perform failed for Issuer failed';} + if (! TRUE) #copy or perform with value: Expiry e.g. $c->setprop(dbentry,dbkey,$c->param('Expiry') + {$ret .= 'Perform failed for Expiry failed';} + if (! TRUE) #copy or perform with value: NotBefore e.g. $c->setprop(dbentry,dbkey,$c->param('NotBefore') + {$ret .= 'Perform failed for NotBefore failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -357,30 +366,22 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $prefix_data = shift; #Data hash as parameter my $ret = ""; - if (! TRUE) #copy or perform with value: status e.g. $c->setprop(dbentry,dbkey,$c->param('status') - {$ret .= 'Perform failed for status failed';} - - if (! TRUE) #copy or perform with value: hookScript e.g. $c->setprop(dbentry,dbkey,$c->param('hookScript') - {$ret .= 'Perform failed for hookScript failed';} - - if (! TRUE) #copy or perform with value: hostOverride e.g. $c->setprop(dbentry,dbkey,$c->param('hostOverride') - {$ret .= 'Perform failed for hostOverride failed';} - - if (! TRUE) #copy or perform with value: ACCEPT_TERMS e.g. $c->setprop(dbentry,dbkey,$c->param('ACCEPT_TERMS') - {$ret .= 'Perform failed for ACCEPT_TERMS failed';} - - if (! TRUE) #copy or perform with value: API e.g. $c->setprop(dbentry,dbkey,$c->param('API') - {$ret .= 'Perform failed for API failed';} - - if (! TRUE) #copy or perform with value: keysize e.g. $c->setprop(dbentry,dbkey,$c->param('keysize') - {$ret .= 'Perform failed for keysize failed';} - - if (! TRUE) #copy or perform with value: configure e.g. $c->setprop(dbentry,dbkey,$c->param('configure') - {$ret .= 'Perform failed for configure failed';} - - if (! TRUE) #copy or perform with value: Email e.g. $c->setprop(dbentry,dbkey,$c->param('Email') - {$ret .= 'Perform failed for Email failed';} - + if (! TRUE) #copy or perform with value: status e.g. $c->setprop(dbentry,dbkey,$c->param('status') + {$ret .= 'Perform failed for status failed';} + if (! TRUE) #copy or perform with value: hookScript e.g. $c->setprop(dbentry,dbkey,$c->param('hookScript') + {$ret .= 'Perform failed for hookScript failed';} + if (! TRUE) #copy or perform with value: hostOverride e.g. $c->setprop(dbentry,dbkey,$c->param('hostOverride') + {$ret .= 'Perform failed for hostOverride failed';} + if (! TRUE) #copy or perform with value: ACCEPT_TERMS e.g. $c->setprop(dbentry,dbkey,$c->param('ACCEPT_TERMS') + {$ret .= 'Perform failed for ACCEPT_TERMS failed';} + if (! TRUE) #copy or perform with value: API e.g. $c->setprop(dbentry,dbkey,$c->param('API') + {$ret .= 'Perform failed for API failed';} + if (! TRUE) #copy or perform with value: keysize e.g. $c->setprop(dbentry,dbkey,$c->param('keysize') + {$ret .= 'Perform failed for keysize failed';} + if (! TRUE) #copy or perform with value: configure e.g. $c->setprop(dbentry,dbkey,$c->param('configure') + {$ret .= 'Perform failed for configure failed';} + if (! TRUE) #copy or perform with value: Email e.g. $c->setprop(dbentry,dbkey,$c->param('Email') + {$ret .= 'Perform failed for Email failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -390,9 +391,8 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $prefix_data = shift; #Data hash as parameter my $ret = ""; - if (! TRUE) #copy or perform with value: AllDomainsCheck e.g. $c->setprop(dbentry,dbkey,$c->param('AllDomainsCheck') - {$ret .= 'Perform failed for AllDomainsCheck failed';} - + if (! TRUE) #copy or perform with value: AllDomainsCheck e.g. $c->setprop(dbentry,dbkey,$c->param('AllDomainsCheck') + {$ret .= 'Perform failed for AllDomainsCheck failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -402,9 +402,8 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $prefix_data = shift; #Data hash as parameter my $ret = ""; - if (! TRUE) #copy or perform with value: EnabledDomainsCheck e.g. $c->setprop(dbentry,dbkey,$c->param('EnabledDomainsCheck') - {$ret .= 'Perform failed for EnabledDomainsCheck failed';} - + if (! TRUE) #copy or perform with value: EnabledDomainsCheck e.g. $c->setprop(dbentry,dbkey,$c->param('EnabledDomainsCheck') + {$ret .= 'Perform failed for EnabledDomainsCheck failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -414,12 +413,10 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $prefix_data = shift; #Data hash as parameter my $ret = ""; - if (! TRUE) #copy or perform with value: OneDomainToCheck e.g. $c->setprop(dbentry,dbkey,$c->param('OneDomainToCheck') - {$ret .= 'Perform failed for OneDomainToCheck failed';} - - if (! TRUE) #copy or perform with value: OneDomainsCheck e.g. $c->setprop(dbentry,dbkey,$c->param('OneDomainsCheck') - {$ret .= 'Perform failed for OneDomainsCheck failed';} - + if (! TRUE) #copy or perform with value: OneDomainToCheck e.g. $c->setprop(dbentry,dbkey,$c->param('OneDomainToCheck') + {$ret .= 'Perform failed for OneDomainToCheck failed';} + if (! TRUE) #copy or perform with value: OneDomainsCheck e.g. $c->setprop(dbentry,dbkey,$c->param('OneDomainsCheck') + {$ret .= 'Perform failed for OneDomainsCheck failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -427,8 +424,15 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); sub create_link{ # WIP - my ($c,$route, $panel, $index) = shift; + my ($c,$route, $panel, $index) = @_; my $link = "$route?trt=$panel&Selected=$index"; return $link; } + +sub get_my_ip +{ + my ($self, $item, $prop, $default) = @_; + my $output = `/usr/sbin/e-smith/getmyip`; + return $output || "IP"; +} 1; \ No newline at end of file diff --git a/Templates/controller.pm.tem b/Templates/controller.pm.tem index 8352ae8..6e36877 100644 --- a/Templates/controller.pm.tem +++ b/Templates/controller.pm.tem @@ -35,7 +35,7 @@ use SrvMngr qw(theme_list init_session); use Data::Dumper; use esmith::util; -use esmith::util::network ; +use esmith::util::network; use esmith::ConfigDB; use esmith::AccountsDB; use esmith::NetworksDB; @@ -83,7 +83,7 @@ sub main { #pickup any other contents needed and load them into hash shared with panel my %returned_hash; # subroutine returns a hash directly - %returned_hash = get_data_for_panel_${firstPanel}(); + %returned_hash = $c->get_data_for_panel_${firstPanel}(); # Copy each key-value pair from the returned hash to the prefix data hash while (my ($key, $value) = each %returned_hash) { $$${prefix}_data{$key} = $value; @@ -253,7 +253,7 @@ sub do_display { # pickup any other contents needed and load them into hash shared with panel my %returned_hash; # subroutine returns a hash directly - %returned_hash = get_data_for_panel_${panel}(); + %returned_hash = $c->get_data_for_panel_${panel}(); # Copy each key-value pair from the returned hash to the prefix data hash while (my ($key, $value) = each %returned_hash) { $$${prefix}_data{$key} = $value; diff --git a/Templates/custom.pm.tem b/Templates/custom.pm.tem index cb26e2b..3ce219a 100644 --- a/Templates/custom.pm.tem +++ b/Templates/custom.pm.tem @@ -32,9 +32,8 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Validation for each field my $ret = ""; - if (! TRUE) #validate $c->param('${field}') - {$ret .= 'Validation for ${field} failed';} - + if (! TRUE) #validate $c->param('${field}') + {$ret .= 'Validation for ${field} failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -48,28 +47,51 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my %ret = ( 'Data1'=>'Data for ${panel}', #Example # fields from Inputs in ${panel} $fields['${panel}'] - - '${field}'=>'${field} contents', + '${field}'=>'${field} contents', - ); return %ret; } - - Get control data for table(s) + +# Get control data for table(s) + # Define a constant hash for field name mapping + use constant ${tablecontrol[0]}_FIELD_MAPPING => ( + '${col}' => 'Source-for-${col}', + + #'target_field2' => 'source_field2', + # Add more mappings as needed + ); + +sub actual_${tablecontrol[0]} { + my @ret = (); + # Actual code for extracting ${tablecontrol[0]} + return @ret; +} + sub get_${tablecontrol[0]} { # Return an array of hashes of the contents for each row and column for ${tablecontrol[0]} - # Cols/fields in hash needed are: - # ${col}, - # - my $c = shift; - my @ret = {}; - - - return \@ret; + my $c = shift; + my @source_records = $c->actual_${tablecontrol[0]}(); + my @transformed_records; + my %Field_Mapping = ${tablecontrol[0]}_FIELD_MAPPING; + # Iterate over each record in the source array + for my $source_record (@$source_records) { + my %transformed_record; + # Iterate over each key-value pair in the $Field_Mapping constant + while (my ($target, $source) = each %Field_Mapping) { + # Check if the source field exists in the source record + if (exists $source_record->{$source}) { + # Assign the source field value to the target field in the transformed record + $transformed_record{$target} = $source_record->{$source}; + } + } + # Add transformed record to the array if it's not empty + push @transformed_records, \%transformed_record if %transformed_record; + } + return \@transformed_records; } @@ -92,9 +114,8 @@ sub get_${tablecontrol[0]} { my $prefix_data = shift; #Data hash as parameter my $ret = ""; - if (! TRUE) #copy or perform with value: ${field} e.g. $c->setprop(dbentry,dbkey,$c->param('${field}') - {$ret .= 'Perform failed for ${field} failed';} - + if (! TRUE) #copy or perform with value: ${field} e.g. $c->setprop(dbentry,dbkey,$c->param('${field}') + {$ret .= 'Perform failed for ${field} failed';} if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -102,7 +123,7 @@ sub get_${tablecontrol[0]} { sub create_link{ # WIP - my ($c,$route, $panel, $index) = shift; + my ($c,$route, $panel, $index) = @_; my $link = "$route?trt=$panel&Selected=$index"; return $link; }