Compare commits
16 Commits
11_0_0-39_
...
11_0_0-47_
Author | SHA1 | Date | |
---|---|---|---|
a62968d2d9 | |||
0e777fd51a | |||
eee68afa2b | |||
c2d677594b | |||
f6fe2216a0 | |||
6d3f8f48c2 | |||
f8d9ec34e3 | |||
835d439e42 | |||
4797a1b189 | |||
1e4ec809b5 | |||
d1197f55cf | |||
b5d6de3bcf | |||
ec4f515012 | |||
9b03d377e2 | |||
957d2ada21 | |||
be49419eba |
@@ -45,6 +45,7 @@ for my $event ( qw( smeserver-manager-update smanager-refresh bootstrap-console-
|
||||
event_link('locales2-conf', "$event", '80');
|
||||
}
|
||||
|
||||
event_link('post-upgrade-and-reboot','post-upgrade-and-reboot',80);
|
||||
event_link('systemd-default', "smeserver-manager-update", '88');
|
||||
event_link('systemd-reload', "smeserver-manager-update", '89');
|
||||
templates2events("/etc/rsyslog.conf", "smeserver-manager-update");
|
||||
|
1
root/etc/e-smith/events/actions/.perltidyrc
Normal file
1
root/etc/e-smith/events/actions/.perltidyrc
Normal file
@@ -0,0 +1 @@
|
||||
-pbp -nst -nse -l=120 -ce -csc -pt=2 -kbl=0 -mbl=1 -lbl=1
|
@@ -1,218 +1,207 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# copyright (C) 1999-2006 Mitel Networks Corporation
|
||||
#
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
#
|
||||
# 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 esmith;
|
||||
use strict;
|
||||
|
||||
use constant SMNGR_LIB => '/usr/share/smanager/lib';
|
||||
use constant I18NMODULES => 'SrvMngr/I18N/Modules';
|
||||
use constant WEBFUNCTIONS => 'SrvMngr/Controller';
|
||||
use constant NAVDIR => '/home/e-smith/db';
|
||||
use constant SMNGR_LIB => '/usr/share/smanager/lib';
|
||||
use constant I18NMODULES => 'SrvMngr/I18N/Modules';
|
||||
use constant WEBFUNCTIONS => 'SrvMngr/Controller';
|
||||
use constant NAVDIR => '/home/e-smith/db';
|
||||
use constant NAVIGATIONDIR => 'navigation2';
|
||||
use constant DEBUG => 0;
|
||||
|
||||
use constant DEBUG => 0;
|
||||
use esmith::NavigationDB;
|
||||
use esmith::I18N;
|
||||
|
||||
use Data::Dumper; # activate if DEBUG
|
||||
|
||||
use Data::Dumper; # activate if DEBUG
|
||||
binmode(STDOUT, ":encoding(UTF-8)");
|
||||
|
||||
my $navigation_ignore =
|
||||
"(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm(-.*)?)";
|
||||
|
||||
my $i18n = new esmith::I18N;
|
||||
|
||||
my $navigation_ignore = "(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm(-.*)?)";
|
||||
my $i18n = new esmith::I18N;
|
||||
my %navdbs;
|
||||
|
||||
opendir FUNCTIONS, SMNGR_LIB.'/'.WEBFUNCTIONS or
|
||||
die "Couldn't open ", SMNGR_LIB.'/'.WEBFUNCTIONS, "\n";
|
||||
my @files = grep (!/^${navigation_ignore}$/, readdir (FUNCTIONS));
|
||||
opendir FUNCTIONS, SMNGR_LIB . '/' . WEBFUNCTIONS
|
||||
or die "Couldn't open ", SMNGR_LIB . '/' . WEBFUNCTIONS, "\n";
|
||||
my @files = grep (!/^${navigation_ignore}$/, readdir(FUNCTIONS));
|
||||
closedir FUNCTIONS;
|
||||
my @langs = $i18n->availableLanguages();
|
||||
|
||||
my @langs = $i18n->availableLanguages();
|
||||
#my @langs = ('tr'); #Temp override
|
||||
foreach my $lang (@langs) {
|
||||
my $long_lex = SMNGR_LIB . '/' . I18NMODULES . "/General/general_$lang.lex";
|
||||
next unless (-e $long_lex);
|
||||
open(LEX, '<:encoding(UTF-8)', $long_lex)
|
||||
or die "Couldn't open ", $long_lex, " for reading.\n";
|
||||
my @gen_lex = <LEX>;
|
||||
close LEX;
|
||||
|
||||
#my @files = ('Portforwarding.pm'); #Temp override
|
||||
foreach my $file (@files) {
|
||||
next if (-d SMNGR_LIB . '/' . WEBFUNCTIONS . "/$file");
|
||||
|
||||
foreach my $lang (@langs)
|
||||
{
|
||||
my $long_lex = SMNGR_LIB.'/'.I18NMODULES."/General/general_$lang.lex";
|
||||
next unless ( -e $long_lex );
|
||||
# next unless ( $file =~ m/D.*\.pm$/ );
|
||||
next unless ($file =~ m/[A-Z].*\.pm$/);
|
||||
my $file2 = lc($file);
|
||||
$file2 =~ s/\.pm$//;
|
||||
|
||||
open(LEX, '<:encoding(UTF-8)', $long_lex)
|
||||
or die "Couldn't open ", $long_lex, " for reading.\n";
|
||||
my @gen_lex = <LEX>;
|
||||
close LEX;
|
||||
#--------------------------------------------------
|
||||
# extract heading, description and weight information
|
||||
# from Mojo controller
|
||||
#--------------------------------------------------
|
||||
open(SCRIPT, SMNGR_LIB . '/' . WEBFUNCTIONS . "/$file");
|
||||
my $heading = undef;
|
||||
my $description = undef;
|
||||
my $heading_weight = undef;
|
||||
my $description_weight = undef;
|
||||
my $menucat = undef;
|
||||
my $routes = undef;
|
||||
|
||||
#my @files = ('Portforwarding.pm'); #Temp override
|
||||
foreach my $file (@files)
|
||||
{
|
||||
next if (-d SMNGR_LIB.'/'.WEBFUNCTIONS . "/$file");
|
||||
# next unless ( $file =~ m/D.*\.pm$/ );
|
||||
next unless ( $file =~ m/[A-Z].*\.pm$/ );
|
||||
while (<SCRIPT>) {
|
||||
$heading = $1 if (/^\s*#\s*heading\s*:\s*(.+?)\s*$/);
|
||||
$description = $1
|
||||
if (/^\s*#\s*description\s*:\s*(.+?)\s*$/);
|
||||
($heading_weight, $description_weight) = ($1, $2)
|
||||
if (/^\s*#\s*navigation\s*:\s*(\d+?)\s+(\d+?)\s*$/);
|
||||
$menucat = $1
|
||||
if (/^\s*#\s*menu\s*:\s*(.+?)\s*$/);
|
||||
last
|
||||
if (defined $heading
|
||||
and defined $description
|
||||
and defined $heading_weight
|
||||
and defined $description_weight
|
||||
and defined $menucat);
|
||||
|
||||
my $file2 = lc($file);
|
||||
$file2 =~ s/\.pm$//;
|
||||
#--------------------------------------------------
|
||||
# extract heading, description and weight information
|
||||
# from Mojo controller
|
||||
#--------------------------------------------------
|
||||
open(SCRIPT, SMNGR_LIB.'/'.WEBFUNCTIONS . "/$file");
|
||||
my $heading = undef;
|
||||
my $description = undef;
|
||||
my $heading_weight = undef;
|
||||
my $description_weight = undef;
|
||||
my $menucat = undef;
|
||||
my $routes = undef;
|
||||
# routes : end (stop before eof if 'menu' is not here before 'routes'!!!
|
||||
$routes = $1 if (/^\s*#\s*routes\s*:\s*(.+?)\s*$/);
|
||||
last if (defined $routes and $routes eq 'end');
|
||||
} ## end while (<SCRIPT>)
|
||||
close SCRIPT;
|
||||
print "updating script $file for lang $lang\n" if DEBUG;
|
||||
my $navdb = $navdbs{$lang};
|
||||
my $navinfo = NAVDIR . '/' . NAVIGATIONDIR . "/navigation.$lang";
|
||||
$navdb ||= esmith::NavigationDB->open($navinfo);
|
||||
$navdb ||= esmith::NavigationDB->create($navinfo)
|
||||
or die "Couldn't create $navinfo\n";
|
||||
$navdbs{$lang} ||= $navdb;
|
||||
my $rec = $navdb->get($file2)
|
||||
|| $navdb->new_record($file2, { type => 'panel' });
|
||||
my @panel_lex = ();
|
||||
$long_lex = SMNGR_LIB . '/' . I18NMODULES . '/' . ucfirst($file2) . "/${file2}_$lang.lex";
|
||||
|
||||
while ( <SCRIPT> )
|
||||
{
|
||||
$heading = $1 if (/^\s*#\s*heading\s*:\s*(.+?)\s*$/);
|
||||
$description = $1
|
||||
if (/^\s*#\s*description\s*:\s*(.+?)\s*$/);
|
||||
($heading_weight, $description_weight) = ($1, $2)
|
||||
if (/^\s*#\s*navigation\s*:\s*(\d+?)\s+(\d+?)\s*$/);
|
||||
$menucat = $1
|
||||
if (/^\s*#\s*menu\s*:\s*(.+?)\s*$/);
|
||||
if (-e $long_lex) {
|
||||
open(LEX, '<:encoding(UTF-8)', $long_lex)
|
||||
or die "Couldn't open ", $long_lex, " for reading.\n";
|
||||
@panel_lex = <LEX>;
|
||||
close LEX;
|
||||
} ## end if (-e $long_lex)
|
||||
|
||||
last if (defined $heading and
|
||||
defined $description and
|
||||
defined $heading_weight and
|
||||
defined $description_weight and
|
||||
defined $menucat);
|
||||
#Extract the prefix for this module
|
||||
my @keys = values @panel_lex; # Get all values from the array
|
||||
my $i = 0; # Initialize the index
|
||||
my $found = 0; # Flag to check if the prefix was found
|
||||
my $prefix = "xx_"; # Probably never match!!
|
||||
|
||||
# routes : end (stop before eof if 'menu' is not here before 'routes'!!!
|
||||
$routes = $1 if (/^\s*#\s*routes\s*:\s*(.+?)\s*$/);
|
||||
last if (defined $routes and $routes eq 'end');
|
||||
}
|
||||
close SCRIPT;
|
||||
while ($i < @keys) { # Loop until we run out of entries
|
||||
my $extracted_value = $keys[$i] || ""; # The current entry
|
||||
#print("Extracted val: ".$extracted_value."\n");
|
||||
|
||||
print "updating script $file for lang $lang\n"if DEBUG;
|
||||
my $navdb = $navdbs{$lang};
|
||||
my $navinfo = NAVDIR.'/'.NAVIGATIONDIR . "/navigation.$lang";
|
||||
$navdb ||= esmith::NavigationDB->open($navinfo);
|
||||
$navdb ||= esmith::NavigationDB->create($navinfo) or
|
||||
die "Couldn't create $navinfo\n";
|
||||
$navdbs{$lang} ||= $navdb;
|
||||
my $rec = $navdb->get($file2) ||
|
||||
$navdb->new_record($file2, { type => 'panel' } );
|
||||
|
||||
my @panel_lex = ();
|
||||
$long_lex = SMNGR_LIB.'/'.I18NMODULES.'/'.ucfirst($file2)."/${file2}_$lang.lex";
|
||||
if ( -e $long_lex ) {
|
||||
open(LEX, '<:encoding(UTF-8)', $long_lex)
|
||||
or die "Couldn't open ", $long_lex, " for reading.\n";
|
||||
@panel_lex = <LEX>;
|
||||
close LEX;
|
||||
}
|
||||
#Extract the prefix for this module
|
||||
my @keys = values @panel_lex; # Get all values from the array
|
||||
|
||||
my $i = 0; # Initialize the index
|
||||
my $found = 0; # Flag to check if the prefix was found
|
||||
my $prefix = "xx_"; # Probably never match!!
|
||||
# Extract prefix from the second value (up to and including the first underscore)
|
||||
#my ($prefix) = $second_value =~ /^'(.*?_)/; # Match everything up to and including the first underscore
|
||||
($prefix) = $extracted_value =~ /^'(.*?_)/; # Match everything up to and including the first underscore
|
||||
|
||||
while ($i < @keys) { # Loop until we run out of entries
|
||||
my $extracted_value = $keys[$i] || ""; # The current entry
|
||||
#print("Extracted val: ".$extracted_value."\n");
|
||||
if (defined $prefix) {
|
||||
$found = 1; # Set found flag to true
|
||||
last; # Exit the loop if prefix is found
|
||||
} else {
|
||||
|
||||
# Extract prefix from the second value (up to and including the first underscore)
|
||||
#my ($prefix) = $second_value =~ /^'(.*?_)/; # Match everything up to and including the first underscore
|
||||
($prefix) = $extracted_value =~ /^'(.*?_)/; # Match everything up to and including the first underscore
|
||||
|
||||
if (defined $prefix) {
|
||||
$found = 1; # Set found flag to true
|
||||
last; # Exit the loop if prefix is found
|
||||
} else {
|
||||
#print("Extracted Val: " . $extracted_value . "\n");
|
||||
}
|
||||
#print("Extracted Val: " . $extracted_value . "\n");
|
||||
}
|
||||
$i++; # Increment the index to check the next entry
|
||||
} ## end while ($i < @keys)
|
||||
|
||||
$i++; # Increment the index to check the next entry
|
||||
}
|
||||
if (!$found) {
|
||||
#print(STDERR "No valid prefix found in any entries: " . $file2 . " (" . $lang . ")\n"); # if DEBUG;
|
||||
$prefix = "xx_"; # Probably never match!!
|
||||
}
|
||||
|
||||
if (!$found) {
|
||||
print(STDERR "No valid prefix found in any entries: ".$file2." (".$lang.")\n"); # if DEBUG;
|
||||
$prefix = "xx_"; # Probably never match!!
|
||||
|
||||
}
|
||||
#print("Prefix: ".$prefix." ".$file2." (".$lang.")\n");
|
||||
|
||||
my %Lexicon = ();
|
||||
push(@panel_lex, @gen_lex);
|
||||
my $top_error = 0;
|
||||
#print("Prefix: ".$prefix." ".$file2." (".$lang.")\n");
|
||||
my %Lexicon = ();
|
||||
push(@panel_lex, @gen_lex);
|
||||
my $top_error = 0;
|
||||
chomp @panel_lex;
|
||||
|
||||
chomp @panel_lex;
|
||||
for (@panel_lex) {
|
||||
next unless $_; # first one empty
|
||||
my ($k, $v) = split / => /, $_;
|
||||
# errors on split to $v (use DEBUG to see)
|
||||
if ( $k and $v ) {
|
||||
$k =~ s/\'//g;
|
||||
$v =~ s/\'//g;
|
||||
$v =~ s/,$//g;
|
||||
$Lexicon{ lc($k) } = $v;
|
||||
} else {
|
||||
$k = "?" unless ($k);
|
||||
print STDERR "Error for $lang $file2 on $k \n" if DEBUG;
|
||||
$top_error++;
|
||||
}
|
||||
}
|
||||
if ( $top_error > 0) {
|
||||
if ( DEBUG ) {
|
||||
print STDERR "$top_error errors for $lang $file2\n";
|
||||
# print Dumper(\@panel_lex);
|
||||
# print Dumper(\%Lexicon);
|
||||
# exit 1;
|
||||
}
|
||||
}
|
||||
$heading = "" unless defined $heading;
|
||||
$description = "" unless defined $description;
|
||||
# Get the base language code from $lang
|
||||
my $base_lang = (split('-', $lang))[0];
|
||||
my $loc_heading = process_localization( \%Lexicon, $heading, $lang, $prefix );
|
||||
my $loc_description = process_localization( \%Lexicon, $description, $lang, $prefix );
|
||||
$loc_heading =~ s/^\s*(\w.*?)\s*$/$1/;
|
||||
$loc_description =~ s/^\s*(\w.*?)\s*$/$1/;
|
||||
for (@panel_lex) {
|
||||
next unless $_; # first one empty
|
||||
my ($k, $v) = split / => /, $_;
|
||||
|
||||
$rec->merge_props(
|
||||
Heading => $loc_heading,
|
||||
Description => $loc_description,
|
||||
HeadingWeight => localise( \%Lexicon, $heading_weight ),
|
||||
DescriptionWeight => localise( \%Lexicon, $description_weight ),
|
||||
MenuCat => (defined $menucat ? $menucat : 'A'));
|
||||
}
|
||||
#warn "trying to close for lang $lang\n";
|
||||
my $navdb = $navdbs{$lang};
|
||||
$navdb->close();
|
||||
}
|
||||
# errors on split to $v (use DEBUG to see)
|
||||
if ($k and $v) {
|
||||
$k =~ s/\'//g;
|
||||
$v =~ s/\'//g;
|
||||
$v =~ s/,$//g;
|
||||
$Lexicon{ lc($k) } = $v;
|
||||
} else {
|
||||
$k = "?" unless ($k);
|
||||
print STDERR "Error for $lang $file2 on $k \n" if DEBUG;
|
||||
$top_error++;
|
||||
}
|
||||
} ## end for (@panel_lex)
|
||||
|
||||
if ($top_error > 0) {
|
||||
if (DEBUG) {
|
||||
print STDERR "$top_error errors for $lang $file2\n";
|
||||
|
||||
# print Dumper(\@panel_lex);
|
||||
# print Dumper(\%Lexicon);
|
||||
# exit 1;
|
||||
} ## end if (DEBUG)
|
||||
} ## end if ($top_error > 0)
|
||||
$heading = "" unless defined $heading;
|
||||
$description = "" unless defined $description;
|
||||
|
||||
# Get the base language code from $lang
|
||||
my $base_lang = (split('-', $lang))[0];
|
||||
my $loc_heading = process_localization(\%Lexicon, $heading, $lang, $prefix);
|
||||
my $loc_description = process_localization(\%Lexicon, $description, $lang, $prefix);
|
||||
$loc_heading =~ s/^\s*(\w.*?)\s*$/$1/;
|
||||
$loc_description =~ s/^\s*(\w.*?)\s*$/$1/;
|
||||
$rec->merge_props(
|
||||
Heading => $loc_heading,
|
||||
Description => $loc_description,
|
||||
HeadingWeight => localise(\%Lexicon, $heading_weight),
|
||||
DescriptionWeight => localise(\%Lexicon, $description_weight),
|
||||
MenuCat => (defined $menucat ? $menucat : 'A')
|
||||
);
|
||||
} ## end foreach my $file (@files)
|
||||
|
||||
#warn "trying to close for lang $lang\n";
|
||||
my $navdb = $navdbs{$lang};
|
||||
$navdb->close();
|
||||
} ## end foreach my $lang (@langs)
|
||||
|
||||
sub localise {
|
||||
my ($lexicon, $string) = @_;
|
||||
|
||||
#print("Looking up:".$string."\n");
|
||||
$string = "" unless defined $string;
|
||||
$string = "" unless defined $string;
|
||||
my $lc_string = lc($string);
|
||||
my $res = $lexicon->{$lc_string} || $string;
|
||||
my $res = $lexicon->{$lc_string} || $string;
|
||||
|
||||
#print("Returning:".$res."\n");
|
||||
return $res;
|
||||
}
|
||||
} ## end sub localise
|
||||
|
||||
# Subroutine to process localization
|
||||
sub process_localization {
|
||||
@@ -226,15 +215,17 @@ sub process_localization {
|
||||
|
||||
# Check the condition
|
||||
if ($loc_heading eq $heading && $base_lang ne 'en') {
|
||||
|
||||
# Construct the new key by combining the prefix and the original heading
|
||||
my $key = $prefix . $heading;
|
||||
|
||||
# Localize using the constructed key
|
||||
$loc_heading = localise($lexicon_ref, $key);
|
||||
|
||||
# See if it got a hit
|
||||
if ($loc_heading eq $key){
|
||||
$loc_heading = $heading;
|
||||
}
|
||||
}
|
||||
|
||||
return $loc_heading; # Optionally return the localized heading
|
||||
}
|
||||
if ($loc_heading eq $key) {
|
||||
$loc_heading = $heading;
|
||||
}
|
||||
} ## end if ($loc_heading eq $heading...)
|
||||
return $loc_heading; # Optionally return the localized heading
|
||||
} ## end sub process_localization
|
3
root/etc/e-smith/events/actions/post-upgrade-and-reboot
Executable file
3
root/etc/e-smith/events/actions/post-upgrade-and-reboot
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
/usr/sbin/e-smith/signal-event post-upgrade
|
||||
/usr/sbin/e-smith/signal-event reboot
|
@@ -80,6 +80,7 @@ a:active { color: #606060; text-decoration: none; }
|
||||
|
||||
.sme-error {
|
||||
color: red;
|
||||
display:block;
|
||||
background-color: #ffffff;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
@@ -93,6 +94,7 @@ a:active { color: #606060; text-decoration: none; }
|
||||
|
||||
.sme-warning {
|
||||
color: orange;
|
||||
display:block;
|
||||
background-color: #ffffff;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
@@ -276,4 +278,4 @@ a.menu-title {
|
||||
|
||||
/*end*/
|
||||
EOF
|
||||
}
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
[Unit]
|
||||
Description=Server Manager 2 Mojo
|
||||
Requires=network.target httpd-e-smith.service ldap.service
|
||||
After=network.target
|
||||
Requires=network-online.target httpd-e-smith.service ldap.service
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
|
@@ -224,12 +224,12 @@ sub setup_plugins {
|
||||
# CSRF protection if production mode
|
||||
# $self->plugin('Mojolicious::Plugin::CSRFDefender' => {
|
||||
# Adapted plugin for use with GET method
|
||||
$self->plugin('SrvMngr::Plugin::CSRFDefender' => {
|
||||
onetime => 1,
|
||||
error_status => 400,
|
||||
error_content => 'Error: CSRF token is invalid or outdated'
|
||||
#$self->plugin('SrvMngr::Plugin::CSRFDefender' => {
|
||||
#onetime => 1,
|
||||
#error_status => 400,
|
||||
#error_content => 'Error: CSRF token is invalid or outdated'
|
||||
#error_template => 'csrf_400'
|
||||
}) if ( $self->mode eq 'production' );
|
||||
#}) if ( $self->mode eq 'production' );
|
||||
|
||||
$self->plugin('SrvMngr::Plugin::I18N' => {namespace => 'SrvMngr::I18N', default => 'en'});
|
||||
|
||||
@@ -866,4 +866,4 @@ sub get_reg_mask {
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
1;
|
@@ -354,7 +354,7 @@ sub get_selected_LIST {
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
return %ret;
|
||||
} ## end sub get_selected_LIST
|
||||
|
||||
sub get_selected_PARAMS {
|
||||
@@ -362,7 +362,7 @@ sub get_selected_PARAMS {
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
return %ret;
|
||||
} ## end sub get_selected_PARAMS
|
||||
|
||||
sub get_selected_CHECKALLDOMAINS {
|
||||
@@ -370,7 +370,7 @@ sub get_selected_CHECKALLDOMAINS {
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
return %ret;
|
||||
} ## end sub get_selected_CHECKALLDOMAINS
|
||||
|
||||
sub get_selected_CHECKALLENABLEDDOMAINS {
|
||||
@@ -378,7 +378,7 @@ sub get_selected_CHECKALLENABLEDDOMAINS {
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
return %ret;
|
||||
} ## end sub get_selected_CHECKALLENABLEDDOMAINS
|
||||
|
||||
sub get_selected_CHECKONEDOMAIN {
|
||||
@@ -386,7 +386,7 @@ sub get_selected_CHECKONEDOMAIN {
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
return %ret;
|
||||
} ## end sub get_selected_CHECKONEDOMAIN
|
||||
|
||||
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
|
||||
@@ -563,4 +563,4 @@ sub update_enabled_domains {
|
||||
my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" enabled `;
|
||||
return $output || "-empty-";
|
||||
} ## end sub update_enabled_domains
|
||||
1;
|
||||
1;
|
@@ -305,10 +305,10 @@ sub do_display {
|
||||
my $modul = "";
|
||||
|
||||
# Accessing all parameters
|
||||
my %params = $c->req->params->to_hash;
|
||||
my $params = $c->req->params->to_hash;
|
||||
|
||||
# Get number of parameters
|
||||
my $num_params = keys %params;
|
||||
my $num_params = scalar keys %$params;
|
||||
|
||||
#Tag as Post or Get (ie. create new entry or edit existing one
|
||||
my $is_new_record = ($c->req->method() eq 'POST');
|
||||
@@ -445,4 +445,4 @@ sub do_display {
|
||||
);
|
||||
$c->render(template => "letsencrypt");
|
||||
} ## end sub do_display
|
||||
1;
|
||||
1;
|
@@ -56,10 +56,11 @@ sub do_action {
|
||||
|
||||
# esmith::util::backgroundCommand( 1, "/sbin/e-smith/signal-event", "post-upgrade",
|
||||
# "; ", "/sbin/e-smith/signal-event", "reboot" );
|
||||
system("/sbin/e-smith/signal-event", "post-upgrade") == 0
|
||||
or die("Error occurred while running post-upgrade.\n");
|
||||
system("/sbin/e-smith/signal-event", "reboot") == 0
|
||||
or die("Error occurred while rebooting.\n");
|
||||
esmith::util::backgroundCommand( 1, "/sbin/e-smith/signal-event", "post-upgrade-and-reboot");
|
||||
#system("/sbin/e-smith/signal-event", "post-upgrade") == 0
|
||||
#or die("Error occurred while running post-upgrade.\n");
|
||||
#system("/sbin/e-smith/signal-event", "reboot") == 0
|
||||
#or die("Error occurred while rebooting.\n");
|
||||
} ## end unless ($debug)
|
||||
} ## end elsif ($function eq 'reconfigure')
|
||||
$c->stash(title => $title, modul => $result);
|
||||
|
@@ -34,6 +34,7 @@ our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
sub main {
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
my $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
||||
my $notif = '';
|
||||
my %usr_datas = ();
|
||||
my $title = $c->l('usr_FORM_TITLE');
|
||||
@@ -394,10 +395,12 @@ sub remove_account {
|
||||
sub reset_password {
|
||||
my ($c, $user, $passw1) = @_;
|
||||
|
||||
|
||||
unless (($user) = ($user =~ /^(\w[\-\w_\.]*)$/)) {
|
||||
return $c->l('usr_TAINTED_USER');
|
||||
}
|
||||
$user = $1;
|
||||
my $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
||||
my $acct = $adb->get($user);
|
||||
|
||||
if ($acct->prop('type') eq "user") {
|
||||
@@ -445,10 +448,9 @@ sub validate_password {
|
||||
}
|
||||
$reason ||= "Software error: password check failed";
|
||||
return "OK" if ($reason eq "ok");
|
||||
return
|
||||
$c->l("Bad Password Choice") . ": "
|
||||
return $c->l("Bad Password Choice") . ": "
|
||||
. $c->l("The password you have chosen is not a good choice, because") . " "
|
||||
. $c->($reason) . ".";
|
||||
. $c->l($reason) . ".";
|
||||
} ## end sub validate_password
|
||||
|
||||
sub emailForward_list {
|
||||
@@ -817,4 +819,4 @@ sub system_change_password {
|
||||
return $c->l("Error occurred while modifying password for admin.", 'First');
|
||||
}
|
||||
} ## end sub system_change_password
|
||||
1
|
||||
1
|
@@ -17,7 +17,7 @@ use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
use esmith::ConfigDB;
|
||||
use Time::TAI64;
|
||||
#use Time::TAI64;
|
||||
use File::Basename;
|
||||
use HTML::Entities;
|
||||
use esmith::FormMagick qw(gen_locale_date_string);
|
||||
@@ -104,10 +104,11 @@ sub do_action {
|
||||
sub timestamp2local {
|
||||
$_ = shift;
|
||||
|
||||
if (/^(\@[0-9a-f]{24})(.*)/s) {
|
||||
return Time::TAI64::tai64nlocal($1) . $2;
|
||||
} elsif (/^([0-9]{10}\.[0-9]{3})(.*)/s) {
|
||||
return localtime($1) . $2;
|
||||
#if (/^(\@[0-9a-f]{24})(.*)/s) {
|
||||
# return Time::TAI64::tai64nlocal($1) . $2;
|
||||
#} els
|
||||
if (/^([0-9]{10}\.[0-9]{3})(.*)/s) {
|
||||
return localtime($1) . $2;
|
||||
}
|
||||
return $_;
|
||||
} ## end sub timestamp2local
|
||||
@@ -128,6 +129,7 @@ sub findlogFiles {
|
||||
# or not log files
|
||||
foreach (
|
||||
qw(
|
||||
journal
|
||||
lastlog
|
||||
btmp$
|
||||
wtmp
|
||||
@@ -293,4 +295,4 @@ sub download_logFile {
|
||||
);
|
||||
return undef;
|
||||
} ## end sub download_logFile
|
||||
1;
|
||||
1;
|
@@ -43,8 +43,9 @@ sub init_data {
|
||||
sub reconf_needed {
|
||||
|
||||
my $cdb = esmith::ConfigDB->open_ro() or die("can't open Config DB");
|
||||
my $unsafe = ($cdb->get('bootstrap-console') and $cdb->get('bootstrap-console')->prop('Run') eq 'yes') ||
|
||||
($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
|
||||
#my $unsafe = ($cdb->get('bootstrap-console') and $cdb->get('bootstrap-console')->prop('Run') eq 'yes') ||
|
||||
# ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
|
||||
my $unsafe = ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
|
||||
return $unsafe;
|
||||
}
|
||||
|
||||
@@ -104,5 +105,4 @@ sub check_adminalias {
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
1;
|
@@ -0,0 +1,17 @@
|
||||
/* css/sme-password.css */
|
||||
.input-container {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
.sme-password {
|
||||
padding-right: 5px; /* Ensure space for the toggle icon */
|
||||
}
|
||||
.toggle-password {
|
||||
position: absolute;
|
||||
right: 4px; /* Position it towards the right */
|
||||
top: 50%; /* Center vertically */
|
||||
transform: translateY(-50%); /* Adjust for exact centering */
|
||||
cursor: pointer;
|
||||
width: 20px; /* Set the width of the icon */
|
||||
height: 20px; /* Set the height of the icon */
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
BIN
root/usr/share/smanager/themes/default/public/images/visible.png
Normal file
BIN
root/usr/share/smanager/themes/default/public/images/visible.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,31 @@
|
||||
// js/sme-password.js
|
||||
$(document).ready(function() {
|
||||
// For each password input
|
||||
$('.sme-password').each(function() {
|
||||
// Create a new container
|
||||
//alert("sme-password");
|
||||
var $inputContainer = $('<div class="input-container"></div>');
|
||||
|
||||
// Move the input into the new container
|
||||
$(this).wrap($inputContainer);
|
||||
|
||||
// Create the toggle image
|
||||
var $togglePassword = $('<img src="images/visible.png" alt="Show Password" class="toggle-password" />');
|
||||
|
||||
// Append the toggle image to the container
|
||||
$(this).after($togglePassword);
|
||||
});
|
||||
|
||||
$('.toggle-password').on('click', function() {
|
||||
// Find the associated password field
|
||||
var input = $(this).siblings('.sme-password');
|
||||
|
||||
// Toggle the type attribute between password and text
|
||||
var inputType = input.attr('type') === 'password' ? 'text' : 'password';
|
||||
input.attr('type', inputType);
|
||||
|
||||
// Toggle the icon source based on the input type
|
||||
var iconSrc = inputType === 'password' ? 'images/visible.png' : 'images/visible-slash.png';
|
||||
$(this).attr('src', iconSrc);
|
||||
});
|
||||
});
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_tape_configure-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_tape_restore-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_configure-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_configure1-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_restore-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_restore1-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_sel_restore-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_sel_restore1-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_sel_restore2-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -2,7 +2,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_verify-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -2,7 +2,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module back_workstn_verify1-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas->{function}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module backup-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $bac_datas
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
<div id='module' class='module bugreport-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
(DBG)trt: <%= $bugr_datas->{trt} %><br>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
<div id='module' class='module bugreport2-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
(DBG)trt: <%= $bugr_datas->{trt} %><br>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module clamav-panel'>
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>(DBG)route: <%= $c->current_route %><br>
|
||||
(DBG)FsS stat: <%= $clm_datas->{FilesystemScan}%> <br>
|
||||
(DBG)Quar stat: <%=$clm_datas->{Quarantine} %>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module datetime-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $dat_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module directory-panel'>
|
||||
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
(DBG)dir. access: <%= $dir_datas->{access}%><br>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module domains-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $dom_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module emailaccess-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module emaildeliver-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module emailfilter-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
|
@@ -7,7 +7,7 @@
|
||||
|
||||
<div id='module' class='module emailreceive-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
|
@@ -7,7 +7,7 @@
|
||||
|
||||
<div id='module' class='module emailsettings-panel'>
|
||||
|
||||
% if ($config->{debug} == TRUE) {
|
||||
% if (config->{debug} == TRUE) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module module-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
</p>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module groups-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $grp_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module hostentries-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $hos_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module ibays-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $iba_datas
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
% content_for 'module' => begin
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
</p>
|
||||
@@ -25,4 +25,4 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
% end
|
||||
% end
|
@@ -11,6 +11,7 @@
|
||||
%= stylesheet '/css/sme_main.css'
|
||||
%= stylesheet '/css/sme_menu.css'
|
||||
%= stylesheet '/css/styles.css'
|
||||
%= stylesheet '/css/sme-password.css'
|
||||
%= content_for 'head_contrib'
|
||||
% if (config 'hasJquery') {
|
||||
%= include 'partials/_js_imports'
|
||||
@@ -32,6 +33,7 @@
|
||||
%= javascript '/js/buttons.html5.min.js'
|
||||
%= javascript '/js/buttons.print.min.js'
|
||||
%= javascript '/js/flag-by-locale.js'
|
||||
%= javascript '/js/sme-password.js'
|
||||
|
||||
<link rel="stylesheet" href="/smanager/css/flag-icon.min.css">
|
||||
%= stylesheet '/css/sme-jquery-overrides.css'
|
||||
@@ -125,4 +127,4 @@
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
@@ -7,7 +7,7 @@
|
||||
%= stylesheet '/css/letsencrypt.css'
|
||||
<div id="module" class="module Letsencrypt-panel">
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $lets_data->{trt}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module localnetworks-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
|
@@ -43,9 +43,9 @@
|
||||
<p><span class=label>
|
||||
%=l 'PASSWORD'
|
||||
</span><span class=input>
|
||||
%= password_field 'Password', id => 'id_password', autocomplete => 'current-password'
|
||||
%= password_field 'Password', id => 'id_password', autocomplete => 'current-password', class=>'sme-password'
|
||||
% if (config 'hasJquery') {
|
||||
<a href='#' id='togglePassword' class='toggle-password tg-icon'> <img src="images/visible.png" height="16" alt="Visible"></a>
|
||||
%#<a href='#' id='togglePassword' class='toggle-password tg-icon'> <img src="images/visible.png" height="16" alt="Visible"></a>
|
||||
% }
|
||||
</span></p>
|
||||
%}
|
||||
@@ -66,4 +66,4 @@
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
||||
%end
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module module-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
</p>
|
||||
|
@@ -4,6 +4,9 @@
|
||||
<font class="sme-copyright">
|
||||
% if ( $c->is_logged_in ) {
|
||||
SME Server <%= session 'releaseVersion' %>-<%= $c->app->VERSION %> Manager II
|
||||
% my $mode;
|
||||
% if (config->{mode} eq 'development'){ $mode = '-dev';} else { $mode = '';}
|
||||
(Mojo:<%= Mojolicious->VERSION %><%= $mode %>)
|
||||
% }
|
||||
<br>Copyright 1999-2006 Mitel Corporation<br>
|
||||
%= session 'copyRight'
|
||||
|
@@ -17,7 +17,7 @@
|
||||
<span class=label>
|
||||
%=l 'PASSWORD_NEW', class => 'label'
|
||||
</span><span class=data>
|
||||
%= password_field 'newPass', class => 'input'
|
||||
%= password_field 'newPass', class => 'input' , class=>'sme-password'
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<span class=label>
|
||||
%=l 'PASSWORD_VERIFY_NEW', class => 'label'
|
||||
</span><span class=data>
|
||||
%= password_field 'newPassVerify', class => 'input'
|
||||
%= password_field 'newPassVerify', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -39,4 +39,4 @@
|
||||
|
||||
% end
|
||||
|
||||
</div>
|
||||
</div>
|
@@ -8,9 +8,9 @@
|
||||
Warning: a reconfigure and reboot is required before proceeding! Failure to do so now
|
||||
may leave your system in an unknown state!</h5></div>
|
||||
<% } %>
|
||||
<% if ( $c->session->{Access} eq 'public' && (($config->{debug} ne '0') || ($config->{mode} ne 'production')) ) { %>
|
||||
<% if ( $c->session->{Access} eq 'public' && ((config->{debug} ne '0') || (config->{mode} ne 'production')) ) { %>
|
||||
<div class="sme-error"><h5>
|
||||
Warning: Development or debug mode enabled AND public access is offered !
|
||||
</h5></div>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
@@ -1,5 +1,5 @@
|
||||
|
||||
<!--*** toggle hide/unhide password field in login panel ***-->
|
||||
<!--*** toggle hide/unhide password field in login panel ***
|
||||
|
||||
% content_for 'js_togglePassword' => begin
|
||||
%= javascript begin
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
% end
|
||||
% end
|
||||
|
||||
-->
|
||||
|
||||
<!--*** toggle hide/unhide menu contents navigation menu ***-->
|
||||
|
||||
@@ -98,4 +98,4 @@
|
||||
|
||||
});
|
||||
% end
|
||||
% end
|
||||
% end
|
@@ -7,7 +7,7 @@
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
|
@@ -30,7 +30,7 @@
|
||||
% my $btn = l('ADD');
|
||||
% my $network_db = esmith::NetworksDB->open();
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
|
@@ -5,7 +5,7 @@
|
||||
% my $subnet = $ln_datas->{subnet};
|
||||
% my $router = $ln_datas->{router};
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
|
@@ -7,7 +7,7 @@
|
||||
% unless (length($retref)) {%ret = (ret=>"");}
|
||||
% else {%ret = %$retref;}
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper "Ret:".$ret{ret};
|
||||
</p>
|
||||
|
@@ -29,7 +29,7 @@
|
||||
<br />
|
||||
% my $btn = l('ADD');
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
|
@@ -8,7 +8,7 @@
|
||||
% my $cmmnt = $pf_datas->{cmmnt};
|
||||
% my $allow = $pf_datas->{allow};
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
|
@@ -18,7 +18,7 @@
|
||||
<span class=label>
|
||||
%=l 'PASSWORD_NEW', class => 'label'
|
||||
</span><span class=data>
|
||||
%= password_field 'newPass', class => 'input'
|
||||
%= password_field 'newPass', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<span class=label>
|
||||
%=l 'PASSWORD_VERIFY_NEW', class => 'label'
|
||||
</span><span class=data>
|
||||
%= password_field 'newPassVerify', class => 'input'
|
||||
%= password_field 'newPassVerify', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -41,4 +41,4 @@
|
||||
|
||||
% end
|
||||
|
||||
</div>
|
||||
</div>
|
@@ -11,7 +11,7 @@
|
||||
<span class=label>
|
||||
%=l 'usr_CURRENT_SYSTEM_PASSWORD', class => 'label'
|
||||
</span><span class=data>
|
||||
%= password_field 'CurPass', class => 'input'
|
||||
%= password_field 'CurPass', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<span class=label>
|
||||
%=l 'usr_NEW_SYSTEM_PASSWORD', class => 'label'
|
||||
</span><span class=data>
|
||||
%= password_field 'Pass', class => 'input'
|
||||
%= password_field 'Pass', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<span class=label>
|
||||
%=l 'usr_NEW_SYSTEM_PASSWORD_VERIFY', class => 'label'
|
||||
</span><span class=data>
|
||||
%= password_field 'PassVerify', class => 'input'
|
||||
%= password_field 'PassVerify', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -42,4 +42,4 @@
|
||||
|
||||
% end
|
||||
|
||||
</div>
|
||||
</div>
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module portforwarding-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper "<pf>".$c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module printers-panel'>
|
||||
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $prt_datas
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module proxy-panel'>
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>(DBG)route: <%= $c->current_route %><br>
|
||||
(DBG)ht stat: <%= $prx_datas->{http_proxy_status}%> <br>
|
||||
(DBG)sm stat: <%=$prx_datas->{smtp_proxy_status} %>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module pseudonyms-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $pse_datas
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module qmailanalog-panel'>
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
</p>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module quota-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $quo_datas
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
<div id='module' class='module reboot-panel'>
|
||||
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
</p>
|
||||
@@ -20,16 +20,15 @@
|
||||
|
||||
<p>
|
||||
%= $c->render_to_string(inline => $c->l('rbo_DESCRIPTION'))
|
||||
<br>
|
||||
<br><br>
|
||||
|
||||
<span class=label>
|
||||
%=l 'rbo_LABEL_REBOOT'
|
||||
</span>
|
||||
|
||||
<span class=data>
|
||||
%= select_field 'function' => $c->rebootFunction_list()
|
||||
</span>
|
||||
</p>
|
||||
</p><br>
|
||||
|
||||
%= submit_button "$btn", class => 'action'
|
||||
|
||||
@@ -38,4 +37,4 @@
|
||||
%= hidden_field 'debug' => '1'
|
||||
|
||||
</div>
|
||||
%end
|
||||
%end
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module remoteaccess-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $rma_datas
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
<div id='roundcube' class='roundcube roundcube-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
</p>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module useraccounts-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $usr_datas
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
<div id='module' class='module userpassword-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $pwd_datas
|
||||
@@ -47,7 +47,7 @@
|
||||
<p><span class=label>
|
||||
%= l 'pwd_PASSWORD_OLD'
|
||||
</span><span class=data>
|
||||
%= password_field 'Oldpass', class => 'input'
|
||||
%= password_field 'Oldpass', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
<br><br></p>
|
||||
% }
|
||||
@@ -55,14 +55,14 @@
|
||||
<p><span class=label>
|
||||
%=l 'pwd_PASSWORD_NEW'
|
||||
</span><span class=data>
|
||||
%= password_field 'Pass', class => 'input'
|
||||
%= password_field 'Pass', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
<br><br></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'pwd_PASSWORD_VERIFY_NEW'
|
||||
</span><span class=data>
|
||||
%= password_field 'Passverify', class => 'input'
|
||||
%= password_field 'Passverify', class => 'input', class=>'sme-password'
|
||||
</span>
|
||||
<br><br></p>
|
||||
|
||||
@@ -75,4 +75,4 @@
|
||||
|
||||
</div>
|
||||
|
||||
% end
|
||||
% end
|
@@ -2,7 +2,7 @@
|
||||
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module viewlogfiles-panel'>
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
</p>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
<div id='module' class='module viewlogfiles2-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
(DBG)trt: <%= $log_datas->{trt} %><br>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module workgroup-panel'>
|
||||
|
||||
%if ($config->{debug} == 1) {
|
||||
%if (config->{debug} == 1) {
|
||||
<p>
|
||||
(DBG)route: <%= $c->current_route %><br>
|
||||
(DBG)pdc: <%= $wkg_datas->{ServerRole}%><br>
|
||||
@@ -24,7 +24,7 @@
|
||||
<span class=label>
|
||||
%=l 'wkg_LABEL_WORKGROUP', class => 'label'
|
||||
</span><span class=data>
|
||||
%= text_field 'Workgroup' => $wkg_datas->{Workgroup}, class => 'input'
|
||||
%= text_field 'Workgroup' => $wkg_datas->{Workgroup}, class => 'input' , pattern=>".{1,15}", title=>"Limited to 15 characters by the NETBIOS"
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
@@ -63,4 +63,4 @@
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
||||
%end
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module yum-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $yum_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module yumconfig-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $yum_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module yuminstall-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $yum_datas
|
||||
|
@@ -7,7 +7,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module yumlogfile-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $yum_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module yumpostupg-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $yum_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module yumremove-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $yum_datas
|
||||
|
@@ -3,7 +3,7 @@
|
||||
% content_for 'module' => begin
|
||||
|
||||
<div id='module' class='module yumupdate-panel'>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $yum_datas
|
||||
|
@@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
|
||||
%define name smeserver-manager
|
||||
Name: %{name}
|
||||
%define version 11.0.0
|
||||
%define release 39
|
||||
%define release 47
|
||||
Version: %{version}
|
||||
Release: %{release}%{?dist}
|
||||
License: GPL
|
||||
@@ -26,19 +26,47 @@ Requires: smeserver-lib >= 1.18.0-26
|
||||
Requires: smeserver-manager >= 2.4.0-22
|
||||
Requires: smeserver-apache >= 2.6.0-19
|
||||
Requires: smeserver-php >= 3.0.0-43
|
||||
Requires: perl(Mojolicious) >= 7.56
|
||||
#Requires: smeserver-manager-locale >= 11.0.0
|
||||
Requires: perl(Mojolicious) >= 8.42
|
||||
Requires: perl(Mojolicious::Plugin::I18N) >= 1.6
|
||||
Requires: perl(Mojolicious::Plugin::RenderFile) >= 0.12
|
||||
Requires: perl(Mojolicious::Plugin::CSRFDefender) >= 0.0.8
|
||||
Requires: perl(Net::Netmask) >= 1.9
|
||||
Requires: perl(DBM::Deep) >= 2.0011-1
|
||||
Requires: perl(Mojo::JWT) >= 0.08-1
|
||||
#Requires: perl(Time::TAI64) >= 2.11
|
||||
Requires: mutt >= 1.5.21
|
||||
Requires: smeserver-manager-jsquery >= 1.0
|
||||
Requires: smeserver-lib >= 11.0
|
||||
Requires: smeserver-certificates >= 11.0
|
||||
#Requires: js-jquery > 2.2.4-3 (optional)
|
||||
|
||||
Requires: smeserver-manager-locale-bg
|
||||
Requires: smeserver-manager-locale-da
|
||||
Requires: smeserver-manager-locale-de
|
||||
Requires: smeserver-manager-locale-el
|
||||
Requires: smeserver-manager-locale-es
|
||||
Requires: smeserver-manager-locale-et
|
||||
Requires: smeserver-manager-locale-fr
|
||||
Requires: smeserver-manager-locale-he
|
||||
Requires: smeserver-manager-locale-hu
|
||||
Requires: smeserver-manager-locale-id
|
||||
Requires: smeserver-manager-locale-it
|
||||
Requires: smeserver-manager-locale-ja
|
||||
Requires: smeserver-manager-locale-nb
|
||||
Requires: smeserver-manager-locale-nl
|
||||
Requires: smeserver-manager-locale-pl
|
||||
Requires: smeserver-manager-locale-pt
|
||||
Requires: smeserver-manager-locale-pt_BR
|
||||
Requires: smeserver-manager-locale-ro
|
||||
Requires: smeserver-manager-locale-ru
|
||||
Requires: smeserver-manager-locale-sl
|
||||
Requires: smeserver-manager-locale-sv
|
||||
Requires: smeserver-manager-locale-th
|
||||
Requires: smeserver-manager-locale-tr
|
||||
Requires: smeserver-manager-locale-zh_CN
|
||||
Requires: smeserver-manager-locale-zh_TW
|
||||
|
||||
Provides: server-manager
|
||||
AutoReqProv: no
|
||||
|
||||
@@ -115,6 +143,39 @@ true
|
||||
%defattr(-,root,root)
|
||||
|
||||
%changelog
|
||||
* Tue Jan 28 2025 Brian Read <brianr@koozali.org> 11.0.0-47.sme
|
||||
- Temp (we hope) remove CSRF protection plugin [SME: ]
|
||||
- Fix comparison in footer with config->mode
|
||||
|
||||
* Tue Jan 28 2025 Brian Read <brianr@koozali.org> 11.0.0-46.sme
|
||||
- Adjust conditions for showing "Reconfigure required" to only check UnSavedChanges DB entry [SME: 12891]
|
||||
- Add indication of development mode in footer
|
||||
|
||||
* Sat Jan 25 2025 Brian Read <brianr@koozali.org> 11.0.0-45.sme
|
||||
- Add some space in the reboot/reconf/shutdown panel [SME: ]
|
||||
- Add check for 15 characters netbios name in workgroup panel [SME: ]
|
||||
- Add action for post-upgrade-and-reboot for reconfigure panel [SME: 12865]
|
||||
- Remove call to TAI64 in viewlogfiles as qmail specific format [SME: 12889]
|
||||
- Add requires to pull in all the locale translation [SME: 12757]
|
||||
|
||||
* Fri Jan 24 2025 Brian Read <brianr@koozali.org> 11.0.0-44.sme
|
||||
- Change to network-online for systemd startup to make sure network is up [SME: 12758]
|
||||
|
||||
* Thu Jan 23 2025 Brian Read <brianr@koozali.org> 11.0.0-43.sme
|
||||
- fix access to config file though config plugin for mojo 9.39 [SME: 12885]
|
||||
- Fix password setting for useraccounts and also adjust DB opens
|
||||
- Add mojo version to footer for logged in [SME: 12886]
|
||||
- Fix up css for red error message when multiline [SME: 12802]
|
||||
|
||||
* Fri Jan 17 2025 Brian Read <brianr@koozali.org> 11.0.0-42.sme
|
||||
- Implement password visibility icon - [SME: 12803]
|
||||
|
||||
* Wed Jan 15 2025 Brian Read <brianr@koozali.org> 11.0.0-41.sme
|
||||
- Add journal files to those not viewable [SME: 12870]
|
||||
|
||||
* Wed Jan 15 2025 Brian Read <brianr@koozali.org> 11.0.0-40.sme
|
||||
- Comment out missing prefix message in navigation2-conf action and re-format it with perltidy [SME: 127672]
|
||||
|
||||
* Tue Jan 14 2025 Brian Read <brianr@koozali.org> 11.0.0-39.sme
|
||||
- Apply perltidy to all Controller files, add .perltidy to directory and .gitignore for .tdy files (just incase) [SME: 12485]
|
||||
|
||||
|
Reference in New Issue
Block a user