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;
}