From 9f154c586d8336c305727601ee3a32d6bba4b546 Mon Sep 17 00:00:00 2001
From: Brian Read
Date: Fri, 4 Apr 2025 18:02:23 +0100
Subject: [PATCH] A few fixups in ptyhon, plus mailstats panel json 1st pass
---
Targets/Mailstats/Mailstats-Custom.pm | 215 ++++++++++++++++++
Targets/Mailstats/Mailstats.pm | 315 ++++++++++++++++++++++++++
Targets/Mailstats/_mst_CONFIG.html.ep | 195 ++++++++++++++++
Targets/Mailstats/_mst_TABLE.html.ep | 52 +++++
Targets/Mailstats/mailstats.css | 43 ++++
Targets/Mailstats/mailstats.html.ep | 60 +++++
Targets/Mailstats/mailstats.js | 5 +
Targets/Mailstats/mailstats_en.lex | 35 +++
Templates/controller.pm.tem | 12 +-
Templates/html_controls.html.ep.xml | 39 ++--
Templates/partial.html.ep.tem | 2 +-
json5/Mailstats.json5 | 211 +++++++++++++++++
12 files changed, 1159 insertions(+), 25 deletions(-)
create mode 100644 Targets/Mailstats/Mailstats-Custom.pm
create mode 100644 Targets/Mailstats/Mailstats.pm
create mode 100644 Targets/Mailstats/_mst_CONFIG.html.ep
create mode 100644 Targets/Mailstats/_mst_TABLE.html.ep
create mode 100644 Targets/Mailstats/mailstats.css
create mode 100644 Targets/Mailstats/mailstats.html.ep
create mode 100644 Targets/Mailstats/mailstats.js
create mode 100644 Targets/Mailstats/mailstats_en.lex
mode change 100755 => 100644 Templates/html_controls.html.ep.xml
mode change 100755 => 100644 Templates/partial.html.ep.tem
create mode 100644 json5/Mailstats.json5
diff --git a/Targets/Mailstats/Mailstats-Custom.pm b/Targets/Mailstats/Mailstats-Custom.pm
new file mode 100644
index 0000000..4bb573e
--- /dev/null
+++ b/Targets/Mailstats/Mailstats-Custom.pm
@@ -0,0 +1,215 @@
+#
+# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 12:46:00
+#
+#
+# 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;
+use esmith::NetworksDB;
+use esmith::DomainsDB;
+
+use constant FALSE => 0;
+use constant TRUE => 1;
+
+
+#The most common ones
+#my $cdb
+#my $adb
+#my $ndb
+#my $hdb
+#my $ddb
+
+# Validation routines - parameters for each panel
+
+ sub validate_TABLE {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ # Validation for each field
+ my $ret = "";
+
+ if (! TRUE) #validate $c->param('StatsDate')
+ {$ret .= 'Validation for StatsDate failed';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+ sub validate_CONFIG {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ # Validation for each field
+ my $ret = "";
+
+ if (! TRUE) #validate $c->param('TextorHTML')
+ {$ret .= 'Validation for TextorHTML failed';}
+ if (! TRUE) #validate $c->param('Email')
+ {$ret .= 'Validation for Email failed';}
+ if (! TRUE) #validate $c->param('EmailHost')
+ {$ret .= 'Validation for EmailHost failed';}
+ if (! TRUE) #validate $c->param('EmailUser')
+ {$ret .= 'Validation for EmailUser failed';}
+ if (! TRUE) #validate $c->param('DBSave')
+ {$ret .= 'Validation for DBSave failed';}
+ if (! TRUE) #validate $c->param('DBHost')
+ {$ret .= 'Validation for DBHost failed';}
+ if (! TRUE) #validate $c->param('DBUser')
+ {$ret .= 'Validation for DBUser failed';}
+ if (! TRUE) #validate $c->param('CountrySelect')
+ {$ret .= 'Validation for CountrySelect failed';}
+ if (! TRUE) #validate $c->param('AccumCountryCodes')
+ {$ret .= 'Validation for AccumCountryCodes failed';}
+ if (! TRUE) #validate $c->param('EnableRHSBL')
+ {$ret .= 'Validation for EnableRHSBL failed';}
+ if (! TRUE) #validate $c->param('EnableRHSBL')
+ {$ret .= 'Validation for EnableRHSBL failed';}
+ if (! TRUE) #validate $c->param('RBLLIST')
+ {$ret .= 'Validation for RBLLIST failed';}
+ if (! TRUE) #validate $c->param('SBLLIST')
+ {$ret .= 'Validation for SBLLIST failed';}
+ if (! TRUE) #validate $c->param('UBLLIST')
+ {$ret .= 'Validation for UBLLIST failed';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+
+# Get singleton data for each panel
+
+ sub get_data_for_panel_TABLE {
+ # Return a hash with the fields required which will be loaded into the shared data
+ my $c = shift;
+ my %ret = (
+ 'Data1'=>'Data for TABLE', #Example
+ # fields from Inputs in TABLE $fields['TABLE']
+ 'StatsDate'=>'StatsDate contents',
+
+ );
+ return %ret;
+ }
+
+ sub get_data_for_panel_CONFIG {
+ # Return a hash with the fields required which will be loaded into the shared data
+ my $c = shift;
+ my %ret = (
+ 'Data1'=>'Data for CONFIG', #Example
+ # fields from Inputs in CONFIG $fields['CONFIG']
+ 'TextorHTML'=>'TextorHTML contents',
+ 'Email'=>'Email contents',
+ 'EmailHost'=>'EmailHost contents',
+ 'EmailUser'=>'EmailUser contents',
+ 'DBSave'=>'DBSave contents',
+ 'DBHost'=>'DBHost contents',
+ 'DBUser'=>'DBUser contents',
+ 'CountrySelect'=>'CountrySelect contents',
+ 'AccumCountryCodes'=>'AccumCountryCodes contents',
+ 'EnableRHSBL'=>'EnableRHSBL contents',
+ 'EnableRHSBL'=>'EnableRHSBL contents',
+ 'RBLLIST'=>'RBLLIST contents',
+ 'SBLLIST'=>'SBLLIST contents',
+ 'UBLLIST'=>'UBLLIST contents',
+
+ );
+ return %ret;
+ }
+
+
+
+# Get control data for table(s)
+
+
+
+# Return hash with values from row in which link clicked on table
+
+ sub get_selected_TABLE {
+ my $c = shift;
+ my $selected = shift; #Parameter is name of selected row.
+ my $is_new_record = shift; #Indicates new record required (defaults)
+ my %ret = {};
+ return %ret;
+ }
+
+ sub get_selected_CONFIG {
+ my $c = shift;
+ my $selected = shift; #Parameter is name of selected row.
+ my $is_new_record = shift; #Indicates new record required (defaults)
+ my %ret = {};
+ return %ret;
+ }
+
+
+#after sucessful modify or create or whatever and submit then perfom (if the params validate)
+
+ sub perform_TABLE {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ my $ret = "";
+ my $db = $cdb; #maybe one of the others
+ my $dbkey = 'ChangeThis';
+ # To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g."
+
+ if (! TRUE) #copy or perform with value: StatsDate e.g. $db->set_prop($dbkey,'StatsDate',$c->param('StatsDate'),type=>'service'))
+ {$ret .= 'Perform/save failed for StatsDate';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+ sub perform_CONFIG {
+ my $c = shift;
+ my $prefix_data = shift; #Data hash as parameter
+ my $ret = "";
+ my $db = $cdb; #maybe one of the others
+ my $dbkey = 'ChangeThis';
+ # To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g."
+
+ if (! TRUE) #copy or perform with value: TextorHTML e.g. $db->set_prop($dbkey,'TextorHTML',$c->param('TextorHTML'),type=>'service'))
+ {$ret .= 'Perform/save failed for TextorHTML';}
+ if (! TRUE) #copy or perform with value: Email e.g. $db->set_prop($dbkey,'Email',$c->param('Email'),type=>'service'))
+ {$ret .= 'Perform/save failed for Email';}
+ if (! TRUE) #copy or perform with value: EmailHost e.g. $db->set_prop($dbkey,'EmailHost',$c->param('EmailHost'),type=>'service'))
+ {$ret .= 'Perform/save failed for EmailHost';}
+ if (! TRUE) #copy or perform with value: EmailUser e.g. $db->set_prop($dbkey,'EmailUser',$c->param('EmailUser'),type=>'service'))
+ {$ret .= 'Perform/save failed for EmailUser';}
+ if (! TRUE) #copy or perform with value: DBSave e.g. $db->set_prop($dbkey,'DBSave',$c->param('DBSave'),type=>'service'))
+ {$ret .= 'Perform/save failed for DBSave';}
+ if (! TRUE) #copy or perform with value: DBHost e.g. $db->set_prop($dbkey,'DBHost',$c->param('DBHost'),type=>'service'))
+ {$ret .= 'Perform/save failed for DBHost';}
+ if (! TRUE) #copy or perform with value: DBUser e.g. $db->set_prop($dbkey,'DBUser',$c->param('DBUser'),type=>'service'))
+ {$ret .= 'Perform/save failed for DBUser';}
+ if (! TRUE) #copy or perform with value: CountrySelect e.g. $db->set_prop($dbkey,'CountrySelect',$c->param('CountrySelect'),type=>'service'))
+ {$ret .= 'Perform/save failed for CountrySelect';}
+ if (! TRUE) #copy or perform with value: AccumCountryCodes e.g. $db->set_prop($dbkey,'AccumCountryCodes',$c->param('AccumCountryCodes'),type=>'service'))
+ {$ret .= 'Perform/save failed for AccumCountryCodes';}
+ if (! TRUE) #copy or perform with value: EnableRHSBL e.g. $db->set_prop($dbkey,'EnableRHSBL',$c->param('EnableRHSBL'),type=>'service'))
+ {$ret .= 'Perform/save failed for EnableRHSBL';}
+ if (! TRUE) #copy or perform with value: EnableRHSBL e.g. $db->set_prop($dbkey,'EnableRHSBL',$c->param('EnableRHSBL'),type=>'service'))
+ {$ret .= 'Perform/save failed for EnableRHSBL';}
+ if (! TRUE) #copy or perform with value: RBLLIST e.g. $db->set_prop($dbkey,'RBLLIST',$c->param('RBLLIST'),type=>'service'))
+ {$ret .= 'Perform/save failed for RBLLIST';}
+ if (! TRUE) #copy or perform with value: SBLLIST e.g. $db->set_prop($dbkey,'SBLLIST',$c->param('SBLLIST'),type=>'service'))
+ {$ret .= 'Perform/save failed for SBLLIST';}
+ if (! TRUE) #copy or perform with value: UBLLIST e.g. $db->set_prop($dbkey,'UBLLIST',$c->param('UBLLIST'),type=>'service'))
+ {$ret .= 'Perform/save failed for UBLLIST';}
+ if ($ret eq "") {$ret = 'ok';}
+ return $ret;
+ }
+
+
+sub create_link{
+ # WIP
+ my ($c,$route, $panel, $index) = @_;
+ my $link = "$route?trt=$panel&Selected=$index";
+ return $link;
+}
+
+sub get_StatsDate{
+ return ['yesterday']
+}
+
+sub get_CountrCodes{
+ return ['UK']
+}
+1;
\ No newline at end of file
diff --git a/Targets/Mailstats/Mailstats.pm b/Targets/Mailstats/Mailstats.pm
new file mode 100644
index 0000000..b4d9ae2
--- /dev/null
+++ b/Targets/Mailstats/Mailstats.pm
@@ -0,0 +1,315 @@
+package SrvMngr::Controller::Mailstats;
+#
+# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 13:12:40
+#
+#----------------------------------------------------------------------
+# heading : Investigation
+# description : Mailstats
+# navigation : 4000 700
+#
+# name : mailstats, method : get, url : /mailstats, ctlact : Mailstats#main
+# name : mailstatsu, method : post, url : /mailstatsu, ctlact : Mailstats#do_update
+# name : mailstatsd, method : get, url : /mailstatsd, ctlact : Mailstats#do_display
+#
+# routes : end
+#
+# Documentation: https://wiki.contribs.org/Mailstats
+#----------------------------------------------------------------------
+
+#
+# Scheme of things:
+#
+# TBA!!
+
+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::util::network;
+use esmith::ConfigDB;
+use esmith::AccountsDB;
+use esmith::NetworksDB;
+use esmith::HostsDB;
+use esmith::DomainsDB;
+
+my $cdb;
+my $adb;
+my $ndb;
+my $hdb;
+my $ddb;
+
+require '/usr/share/smanager/lib/SrvMngr/Controller/Mailstats-Custom.pm'; #The code that is to be added by the developer
+
+sub main {
+#
+# Initial entry - route is "/"
+#
+#set initial panel
+#for initial panel:
+ #Specifiy panel to enter
+ #load up _data hash with DB fields
+ #load up stash with pointer(s) to control fields hash(= get-))
+ #and a pointer to the prefix_data hash
+#render initial panel
+
+ my $c = shift;
+ $c->app->log->info( $c->log_req );
+
+ #The most common ones
+ $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
+ $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
+ $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
+ $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
+ $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
+
+ my %mst_data = ();
+ my $title = $c->l('mst_Mailstats');
+ my $modul = '';
+
+ $mst_data{'trt'} = 'TABLE';
+
+ #Load any DB entries into the _data area so as they are preset in the form
+ # which DB - this only really works if the initial panel is a PARAMS type panel and not a TABLE
+ my $db = $cdb; #pickup local or global db or Default to config
+
+
+ $c->do_display($mst_data{'trt'});
+
+}
+
+# Post request with params - submit from the form
+sub do_update {
+#
+# Return after submit pushed on panel (this is a post) - route is "/u"
+# parameters in the params hash.
+#
+#load up all params into prefix_data hash:
+#By panel (series of if statements - only one executed):
+ #call validate-PANEL() - return ret = ok or error message
+
+#if validation not ok:
+ #render back to current panel with error message in stash
+#otherwise:
+ #By panel (series of if statements - only one executed):
+ #do whatever is required: call perform-PANEL() - return "ok" or Error Message
+ #call signal-event for any global actions specified (check it exists - error and continue?)
+ #if action smeserver--update exists
+ #signal_event smeserver--update
+ #call signal-event for any specific actions for thids panel (check it exists first - error and continue)
+ #set success in stash
+ #if no "nextpanel" entry:
+ #set firstpanel
+ #else
+ #set nextpanel
+ #call render
+
+ my $c = shift;
+ $c->app->log->info($c->log_req);
+ my $modul = '';
+
+ #The most common ones - you might want to comment out any not used.
+ $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
+ $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
+ $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
+ $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
+ $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
+
+ my %mst_data = ();
+ my $title = $c->l('mst_Mailstats');
+
+ # Accessing all POST/GET parameters
+ my $params = $c->req->params->to_hash;
+
+ # Get number of POST parameters
+ #my $num_params = keys scaler %$params;
+
+ #Params are available in the hash "params" - copy to the prefix_data hash
+ #while (my ($key, $value) = each %{$c->req->params->to_hash}) {
+ # $mst_data{$key} = $value;
+ #}
+
+ # the value of trt will tell you which panel has returned
+ my $trt = $c->param('trt') || 'TABLE'; #hidden control on every form.
+ my $ret = 'ok';
+
+ #Validate the parameters in a custom sub one for each panel (although only one of these will be executed)
+ my $thispanel;
+
+ if ($trt eq 'TABLE'){
+ #Validate form parameters for panel TABLE
+ $ret = $c->validate_TABLE(\%mst_data);
+ $thispanel = 'TABLE';
+ }
+
+ if ($trt eq 'CONFIG'){
+ #Validate form parameters for panel CONFIG
+ $ret = $c->validate_CONFIG(\%mst_data);
+ $thispanel = 'CONFIG';
+ }
+
+ if ($ret ne "ok"){
+ $c->do_display($thispanel);
+ } else {
+ #Do whatever is needed, including writing values to the DB
+
+
+ if ($trt eq 'TABLE'){
+ #do whatever is required ...
+ $ret = $c->perform_TABLE(\%mst_data);
+ if ($ret ne "ok") {
+ # return to the panel with error message
+ $c->stash(error => $c->l($ret));
+ $c->stash(
+ title => $title,
+ modul => $modul,
+ mst_data => \%mst_data
+ );
+ $c->render(template => "mailstats");
+ } else {
+ $c->stash( success => $c->l('mst_TABLE_panel_action_was_successful')); #A bit bland - edit it in the lex file
+ }
+ }
+
+ if ($trt eq 'CONFIG'){
+ #do whatever is required ...
+ $ret = $c->perform_CONFIG(\%mst_data);
+ if ($ret ne "ok") {
+ # return to the panel with error message
+ $c->stash(error => $c->l($ret));
+ $c->stash(
+ title => $title,
+ modul => $modul,
+ mst_data => \%mst_data
+ );
+ $c->render(template => "mailstats");
+ } else {
+ $c->stash( success => $c->l('mst_CONFIG_panel_action_was_successful')); #A bit bland - edit it in the lex file
+ }
+ }
+
+ # and call any signal-events needed
+ #TBD
+ # Setup shared data and call panel
+ if ('none' eq 'none') {
+ $mst_data{'trt'} = 'TABLE';
+ } else {
+ $mst_data{'trt'} = 'none';
+ }
+ $c->do_display($mst_data{'trt'});
+ }
+}
+
+sub do_display {
+#
+# Return after link clicked in table (this is a get) - route is "/d"
+# Expects ?trt=PANEL&selected="TableRowName" plus any other required
+#
+# OR it maybe a post from the main panel to add a new record
+#
+#load up all supplied params into prefix_data hash
+#call get-selected-PANEL() - returns hash of all relevent parameters
+#load up returned hash into prefix_data
+#render - to called panel
+
+ my ($c,$trt) = @_;
+ $c->app->log->info($c->log_req);
+
+ #The most common ones - you might want to comment out any not used.
+ $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
+ $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
+ $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
+ $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
+ $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
+
+ my %mst_data = ();
+ my $title = $c->l('mst_Mailstats');
+ my $modul = "";
+
+ # Accessing all parameters
+ my %params = $c->req->params->to_hash;
+
+ # Get number of parameters
+ my $num_params = keys %params;
+
+ #Tag as Post or Get (ie. create new entry or edit existing one
+ my $is_new_record = ($c->req->method() eq 'POST');
+
+ #Params are available in the hash "params" - copy to the prefix_data hash
+ #while (my ($key, $value) = each %{$c->req->params->to_hash}) {
+ # $mst_data{$key} = $value;
+ #}
+
+ # the value of trt will tell you which panel has returned
+ if (! $trt){
+ $trt = $c->param('trt') || 'TABLE'; #Indicates where to go now
+ }
+
+ # Now add in the params from the selected row from the table
+
+ my %selectedrow;
+
+ if ($trt eq 'TABLE'){
+ #Validate Get selected row (if applicable) TABLE
+ %selectedrow = $c->get_selected_TABLE($mst_data{'Selected'},$is_new_record);
+ }
+
+ if ($trt eq 'CONFIG'){
+ #Validate Get selected row (if applicable) CONFIG
+ %selectedrow = $c->get_selected_CONFIG($mst_data{'Selected'},$is_new_record);
+ }
+
+
+ #Copy in the selected row params to the prefix_data hash to pass to the panel
+ while (my ($key, $value) = each %selectedrow){
+ $mst_data{$key} = $value;
+ }
+ # Where to go now
+ $mst_data{'trt'} = $trt;
+
+ # Set up other shared data according to the panel to go to
+
+ if ($trt eq 'TABLE'){
+ # pickup any other contents needed and load them into hash shared with panel
+ my %returned_hash;
+ # subroutine returns a hash directly
+ %returned_hash = $c->get_data_for_panel_TABLE();
+ # Copy each key-value pair from the returned hash to the prefix data hash
+ while (my ($key, $value) = each %returned_hash) {
+ $mst_data{$key} = $value;
+ }
+ }
+
+ if ($trt eq 'CONFIG'){
+ # pickup any other contents needed and load them into hash shared with panel
+ my %returned_hash;
+ # subroutine returns a hash directly
+ %returned_hash = $c->get_data_for_panel_CONFIG();
+ # Copy each key-value pair from the returned hash to the prefix data hash
+ while (my ($key, $value) = each %returned_hash) {
+ $mst_data{$key} = $value;
+ }
+ }
+
+
+ # and table control fields
+
+
+ # Data for panel
+ $c->stash(
+ title => $title,
+ modul => $modul,
+ mst_data => \%mst_data
+ );
+ $c->render(template => "mailstats");
+}
+1;
\ No newline at end of file
diff --git a/Targets/Mailstats/_mst_CONFIG.html.ep b/Targets/Mailstats/_mst_CONFIG.html.ep
new file mode 100644
index 0000000..5f21fdd
--- /dev/null
+++ b/Targets/Mailstats/_mst_CONFIG.html.ep
@@ -0,0 +1,195 @@
+%#
+%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 13:12:40
+%#
+
\ No newline at end of file
diff --git a/Targets/Mailstats/_mst_TABLE.html.ep b/Targets/Mailstats/_mst_TABLE.html.ep
new file mode 100644
index 0000000..7b83613
--- /dev/null
+++ b/Targets/Mailstats/_mst_TABLE.html.ep
@@ -0,0 +1,52 @@
+%#
+%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 13:12:40
+%#
+
+
+ %}
+
+ %#Routing to partials according to trt parameter.
+ %#This ought to be cascading if/then/elsif, but is easier to just stack the if/then's rather like a case statement'
+
+ % if ($mst_data->{trt} eq "TABLE") {
+ %= include 'partials/_mst_TABLE'
+ %}
+
+ % if ($mst_data->{trt} eq "CONFIG") {
+ %= include 'partials/_mst_CONFIG'
+ %}
+
+
+
+
+%end
\ No newline at end of file
diff --git a/Targets/Mailstats/mailstats.js b/Targets/Mailstats/mailstats.js
new file mode 100644
index 0000000..f1fadb7
--- /dev/null
+++ b/Targets/Mailstats/mailstats.js
@@ -0,0 +1,5 @@
+//
+//Generated by: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 13:12:40
+//
+$(document).ready(function() {
+});
diff --git a/Targets/Mailstats/mailstats_en.lex b/Targets/Mailstats/mailstats_en.lex
new file mode 100644
index 0000000..be7ab36
--- /dev/null
+++ b/Targets/Mailstats/mailstats_en.lex
@@ -0,0 +1,35 @@
+#
+# Generated by SM2Gen version: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-04-04 13:12:40
+#
+'mst_Score_over_which_email_will' => 'Score over which email will be fully rejected',
+'mst_User_Password_for_DB_sending' => 'User Password for DB sending',
+'mst_Hostname_for_email_server' => 'hostage for email server',
+'mst_User_name_for_email_sending' => 'User name for email sending',
+'mst_Email_details' => 'Email details',
+'mst_Mailstats' => 'mailshots',
+'mst_Email_filtering_/_exclusion' => 'Email filtering / exclusion',
+'mst_CONFIG_panel_action_was_successful' => 'CONFIG panel action was successful',
+'mst_Table_of_email_status' => 'Table of email status',
+'mst_User_Password_for_email_sending' => 'User Password for email sending',
+'mst_UBL_Servers_to_use' => 'UBL Servers to use',
+'mst_Hostname_for_DB_server' => 'hostage for DB server',
+'mst_Accumlated_country_codes_(editable)' => 'accumulated country codes editable',
+'mst_Date_for_Stats_display' => 'Date for Stats display',
+'mst_Enable_DNSBL_checking' => 'Enable DNSBL checking',
+'mst_Details_for_connection_to_database' => 'Details for connection to database for saving email status',
+'mst_SBL_Servers_to_use' => 'SBL Servers to use',
+'mst_APPLY' => 'Apply',
+'mst_Port_number_for_DB_server' => 'Port number for DB server',
+'mst_Select_the_countries_you_would' => 'Select the countries you would like to reject',
+'mst_Descriptive_paragraph' => 'Descriptive paragraph',
+'mst_Port_number_for_email_server' => 'Port number for email server',
+'mst_Email_for_stats' => 'Email for stats',
+'mst_Would_you_like_to_save' => 'Would you like to save data in the DB?',
+'mst_Score_over_which_email_will' => 'Score over which email will be tagged as spam But queued',
+'mst_Spamassassin_parameters_for_rejecting_email' => 'Spamassassin parameters for rejecting email',
+'mst_TABLE_panel_action_was_successful' => 'TABLE panel action was successful',
+'mst_Enable_RHSBL_checking' => 'Enable RHSBL checking',
+'mst_Specify_if_you_would_like' => 'Specify if you would like to receive email in text for HTML form',
+'mst_RBL_Servers_to_use' => 'RBL Servers to use',
+'mst_User_name_for_DB_sending' => 'User name for DB sending',
+'mst_Configure_Mailstats' => 'Configure mailshots',
diff --git a/Templates/controller.pm.tem b/Templates/controller.pm.tem
index 68bcd1f..bc301f8 100644
--- a/Templates/controller.pm.tem
+++ b/Templates/controller.pm.tem
@@ -42,11 +42,11 @@ use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
-my $cdb
-my $adb
-my $ndb
-my $hdb
-my $ddb
+my $cdb;
+my $adb;
+my $ndb;
+my $hdb;
+my $ddb;
require '/usr/share/smanager/lib/SrvMngr/Controller/${PackageName}-Custom.pm'; #The code that is to be added by the developer
@@ -133,7 +133,7 @@ sub do_update {
my $params = $c->req->params->to_hash;
# Get number of POST parameters
- my $num_params = keys scaler %$params;
+ #my $num_params = keys scaler %$params;
#Params are available in the hash "params" - copy to the prefix_data hash
#while (my ($key, $value) = each %{$c->req->params->to_hash}) {
diff --git a/Templates/html_controls.html.ep.xml b/Templates/html_controls.html.ep.xml
old mode 100755
new mode 100644
index b612984..d9400f6
--- a/Templates/html_controls.html.ep.xml
+++ b/Templates/html_controls.html.ep.xml
@@ -25,7 +25,7 @@
%=l('${prefix}_${Label}')
- %=date_field '${Name}' =>$$${Name}, pattern=>${regexp | .*}, title = 'Pattern regex mismatch'
+ %=date_field '${Name}' =>$$${Name}, pattern=>${regexp | .*}, title =>'Pattern regex mismatch'
]]>
@@ -33,7 +33,7 @@
%=l('${prefix}_${Label}')
- %=time_field '${Name}' =>$$${Name}, pattern=>${regexp | .*}, title = 'Pattern regex mismatch'
+ %=time_field '${Name}' =>$$${Name}, pattern=>${regexp | .*}, title =>'Pattern regex mismatch'
]]>
@@ -43,7 +43,7 @@
%=l('${prefix}_${Label}')
% param '${Name}' => $$${prefix}_data->{${Name}} unless param '${Name}';
- %= text_field '${Name}', size => '${size | 50}', class => 'textinput ${Name}' , pattern=>'${regexp | ".*"}' , placeholder=>'${placeholder | Name}', title = 'Pattern regex mismatch'
+ %= text_field '${Name}', size => '${size | 50}', class => 'textinput ${Name}' , pattern=>'${regexp | ".*"}' , placeholder=>'${placeholder | Name}', title =>'Pattern regex mismatch'