Add in shares contrib also fix comment out script in partial add fix json5 python
This commit is contained in:
parent
b6a31f89df
commit
588081417b
546
Targets/Shares/Shares-Custom.pm
Normal file
546
Targets/Shares/Shares-Custom.pm
Normal file
@ -0,0 +1,546 @@
|
||||
#
|
||||
# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
#
|
||||
#
|
||||
# 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 - open DB when required.
|
||||
my $cdb;
|
||||
my $adb;
|
||||
my $ndb;
|
||||
my $hdb;
|
||||
my $ddb;
|
||||
|
||||
# Validation routines - parameters for each panel
|
||||
|
||||
sub validate_LIST {
|
||||
my $c = shift;
|
||||
my $sf_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub validate_MODIFY {
|
||||
my $c = shift;
|
||||
my $sf_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if (! TRUE) #validate $c->param('description')
|
||||
{$ret .= 'Validation for description failed';}
|
||||
if (! TRUE) #validate $c->param('smbaccess')
|
||||
{$ret .= 'Validation for smbaccess failed';}
|
||||
if (! TRUE) #validate $c->param('recyclebin')
|
||||
{$ret .= 'Validation for recyclebin failed';}
|
||||
if (! TRUE) #validate $c->param('retention')
|
||||
{$ret .= 'Validation for retention failed';}
|
||||
if (! TRUE) #validate $c->param('httpaccess')
|
||||
{$ret .= 'Validation for httpaccess failed';}
|
||||
if (! TRUE) #validate $c->param('webdav')
|
||||
{$ret .= 'Validation for webdav failed';}
|
||||
if (! TRUE) #validate $c->param('requireSSL')
|
||||
{$ret .= 'Validation for requireSSL failed';}
|
||||
if (! TRUE) #validate $c->param('indexes')
|
||||
{$ret .= 'Validation for indexes failed';}
|
||||
if (! TRUE) #validate $c->param('dynamic')
|
||||
{$ret .= 'Validation for dynamic failed';}
|
||||
if ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub validate_PERMISSIONS {
|
||||
my $c = shift;
|
||||
my $sf_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if (! TRUE) #validate $c->param('writegroup')
|
||||
{$ret .= 'Validation for writegroup failed';}
|
||||
if (! TRUE) #validate $c->param('readgroup')
|
||||
{$ret .= 'Validation for readgroup failed';}
|
||||
if (! TRUE) #validate $c->param('writegroup')
|
||||
{$ret .= 'Validation for writegroup failed';}
|
||||
if (! TRUE) #validate $c->param('readgroup')
|
||||
{$ret .= 'Validation for readgroup failed';}
|
||||
if (! TRUE) #validate $c->param('writegroup')
|
||||
{$ret .= 'Validation for writegroup failed';}
|
||||
if (! TRUE) #validate $c->param('readgroup')
|
||||
{$ret .= 'Validation for readgroup failed';}
|
||||
if (! TRUE) #validate $c->param('writegroup')
|
||||
{$ret .= 'Validation for writegroup failed';}
|
||||
if (! TRUE) #validate $c->param('readgroup')
|
||||
{$ret .= 'Validation for readgroup failed';}
|
||||
if (! TRUE) #validate $c->param('writegroup')
|
||||
{$ret .= 'Validation for writegroup failed';}
|
||||
if (! TRUE) #validate $c->param('readgroup')
|
||||
{$ret .= 'Validation for readgroup failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if (! TRUE) #validate $c->param('writeuser')
|
||||
{$ret .= 'Validation for writeuser failed';}
|
||||
if (! TRUE) #validate $c->param('readuser')
|
||||
{$ret .= 'Validation for readuser failed';}
|
||||
if ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub validate_REMOVE {
|
||||
my $c = shift;
|
||||
my $sf_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
# Get singleton data for each panel
|
||||
|
||||
sub get_data_for_panel_LIST {
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1'=>'Data for LIST', #Example
|
||||
# fields from Inputs in LIST $fields['LIST']
|
||||
|
||||
);
|
||||
return %ret;
|
||||
}
|
||||
|
||||
sub get_data_for_panel_MODIFY {
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1'=>'Data for MODIFY', #Example
|
||||
# fields from Inputs in MODIFY $fields['MODIFY']
|
||||
'description'=>'description contents',
|
||||
'smbaccess'=>'smbaccess contents',
|
||||
'recyclebin'=>'recyclebin contents',
|
||||
'retention'=>'retention contents',
|
||||
'httpaccess'=>'httpaccess contents',
|
||||
'webdav'=>'webdav contents',
|
||||
'requireSSL'=>'requireSSL contents',
|
||||
'indexes'=>'indexes contents',
|
||||
'dynamic'=>'dynamic contents',
|
||||
|
||||
);
|
||||
return %ret;
|
||||
}
|
||||
|
||||
sub get_data_for_panel_PERMISSIONS {
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1'=>'Data for PERMISSIONS', #Example
|
||||
# fields from Inputs in PERMISSIONS $fields['PERMISSIONS']
|
||||
'writegroup'=>'writegroup contents',
|
||||
'readgroup'=>'readgroup contents',
|
||||
'writegroup'=>'writegroup contents',
|
||||
'readgroup'=>'readgroup contents',
|
||||
'writegroup'=>'writegroup contents',
|
||||
'readgroup'=>'readgroup contents',
|
||||
'writegroup'=>'writegroup contents',
|
||||
'readgroup'=>'readgroup contents',
|
||||
'writegroup'=>'writegroup contents',
|
||||
'readgroup'=>'readgroup contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
'writeuser'=>'writeuser contents',
|
||||
'readuser'=>'readuser contents',
|
||||
|
||||
);
|
||||
return %ret;
|
||||
}
|
||||
|
||||
sub get_data_for_panel_REMOVE {
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1'=>'Data for REMOVE', #Example
|
||||
# fields from Inputs in REMOVE $fields['REMOVE']
|
||||
|
||||
);
|
||||
return %ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Get control data for table(s)
|
||||
|
||||
# Define a constant hash for field name mapping
|
||||
use constant Table1_FIELD_MAPPING => (
|
||||
'Table1-Name' => 'Table1-Name',
|
||||
'Table1-Description' => 'Table1-Description',
|
||||
'Table1-Actionp' => 'Table1-Actionp',
|
||||
'Table1-Actionm' => 'Table1-Actionm',
|
||||
'Table1-Actionr' => 'Table1-Actionr',
|
||||
);
|
||||
|
||||
sub actual_Table1 {
|
||||
my $c = shift;
|
||||
my @ret = ();
|
||||
# Actual code for extracting Table1
|
||||
$adb = esmith::AccountsDB::open() | die("Unable to open accounts DB");
|
||||
my @shares = $adb->get_all_by_prop(type => 'share');
|
||||
foreach my $share (@shares) {
|
||||
my $sharename = $share->key();
|
||||
my $sharedesc = $share->prop('Name');
|
||||
next if (($share->prop('Hide') || 'no') eq 'yes');
|
||||
my $removable = $share->prop('Removable') || 'yes';
|
||||
my $actionModify = '<a href="sharesd?trt=MODIFY&Selected='.$sharename.'>'.$c->l('sf_Modify').'>';
|
||||
my $actionPerm = '<a href="sharesd?trt=PERMISSIONS&Selected='.$sharename.'>'.$c->l('sf_Permisssions').'>';
|
||||
my $actionRemove = ($removable ne 'no') ?'<a href="sharesd?trt=REMOVE&Selected='.$sharename.'>'.$c->l('sf_Remove').'>' : '';
|
||||
push @ret,
|
||||
{ Table1-Name => $sharename,
|
||||
Table1-Description => $sharedesc,
|
||||
Table1-Actionp => $actionPerm,
|
||||
Table1-Actionm => $actionModify,
|
||||
Table1-Actionr => $actionRemove,
|
||||
}
|
||||
}
|
||||
return @ret;
|
||||
}
|
||||
|
||||
sub get_Table1 {
|
||||
# Return an array of hashes of the contents for each row and column for Table1
|
||||
my $c = shift;
|
||||
my @source_records = $c->actual_Table1();
|
||||
my @transformed_records;
|
||||
my %Field_Mapping = Table1_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;
|
||||
}
|
||||
|
||||
# Define a constant hash for field name mapping
|
||||
use constant Table2_FIELD_MAPPING => (
|
||||
'Table2-Groups' => 'Source-for-Table2-Groups',
|
||||
'Table2-Description' => 'Source-for-Table2-Description',
|
||||
'Table2-Read / Write' => 'Source-for-Table2-Read / Write',
|
||||
'Table2-Read Only' => 'Source-for-Table2-Read Only'
|
||||
#'target_field2' => 'source_field2',
|
||||
# Add more mappings as needed
|
||||
);
|
||||
|
||||
sub actual_Table2 {
|
||||
my $c = shift;
|
||||
my @ret = ();
|
||||
# Actual code for extracting Table2
|
||||
return @ret;
|
||||
}
|
||||
|
||||
sub get_Table2 {
|
||||
# Return an array of hashes of the contents for each row and column for Table2
|
||||
my $c = shift;
|
||||
my @source_records = $c->actual_Table2();
|
||||
my @transformed_records;
|
||||
my %Field_Mapping = Table2_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
|
||||
|
||||
sub get_selected_LIST {
|
||||
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_MODIFY {
|
||||
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_PERMISSIONS {
|
||||
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_REMOVE {
|
||||
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_LIST {
|
||||
my $c = shift;
|
||||
my $sf_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 ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub perform_MODIFY {
|
||||
my $c = shift;
|
||||
my $sf_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: description e.g. $db->set_prop($dbkey,'description',$c->param('description'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for description';}
|
||||
if (! TRUE) #copy or perform with value: smbaccess e.g. $db->set_prop($dbkey,'smbaccess',$c->param('smbaccess'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for smbaccess';}
|
||||
if (! TRUE) #copy or perform with value: recyclebin e.g. $db->set_prop($dbkey,'recyclebin',$c->param('recyclebin'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for recyclebin';}
|
||||
if (! TRUE) #copy or perform with value: retention e.g. $db->set_prop($dbkey,'retention',$c->param('retention'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for retention';}
|
||||
if (! TRUE) #copy or perform with value: httpaccess e.g. $db->set_prop($dbkey,'httpaccess',$c->param('httpaccess'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for httpaccess';}
|
||||
if (! TRUE) #copy or perform with value: webdav e.g. $db->set_prop($dbkey,'webdav',$c->param('webdav'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for webdav';}
|
||||
if (! TRUE) #copy or perform with value: requireSSL e.g. $db->set_prop($dbkey,'requireSSL',$c->param('requireSSL'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for requireSSL';}
|
||||
if (! TRUE) #copy or perform with value: indexes e.g. $db->set_prop($dbkey,'indexes',$c->param('indexes'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for indexes';}
|
||||
if (! TRUE) #copy or perform with value: dynamic e.g. $db->set_prop($dbkey,'dynamic',$c->param('dynamic'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for dynamic';}
|
||||
if ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub perform_PERMISSIONS {
|
||||
my $c = shift;
|
||||
my $sf_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: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writegroup';}
|
||||
if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readgroup';}
|
||||
if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writegroup';}
|
||||
if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readgroup';}
|
||||
if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writegroup';}
|
||||
if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readgroup';}
|
||||
if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writegroup';}
|
||||
if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readgroup';}
|
||||
if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writegroup';}
|
||||
if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readgroup';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for writeuser';}
|
||||
if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service'))
|
||||
{$ret .= 'Perform/save failed for readuser';}
|
||||
if ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub perform_REMOVE {
|
||||
my $c = shift;
|
||||
my $sf_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 ($ret eq "") {$ret = 'ok';}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub create_link{
|
||||
# WIP
|
||||
my ($c,$route, $panel, $index) = @_;
|
||||
my $link = "$route?trt=$panel&Selected=$index";
|
||||
return $link;
|
||||
}
|
||||
1;
|
398
Targets/Shares/Shares.pm
Normal file
398
Targets/Shares/Shares.pm
Normal file
@ -0,0 +1,398 @@
|
||||
package SrvMngr::Controller::Shares;
|
||||
#
|
||||
# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
# Remember that each route must be unique (else they just overwrite each other).
|
||||
# you cannot have get and post on the same name and url.
|
||||
#
|
||||
#----------------------------------------------------------------------
|
||||
# heading : Network
|
||||
# description : Shared Folders
|
||||
# navigation : 7000 400
|
||||
#
|
||||
# name : shares, method : get, url : /shares, ctlact : Shares#main
|
||||
# name : sharesu, method : post, url : /sharesu, ctlact : Shares#do_update
|
||||
# name : sharesd, method : get, url : /sharesd, ctlact : Shares#do_display
|
||||
#
|
||||
# routes : end
|
||||
#
|
||||
# Documentation: https://wiki.contribs.org/Shares
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# 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;
|
||||
|
||||
my %sf_data;
|
||||
|
||||
require '/usr/share/smanager/lib/SrvMngr/Controller/Shares-Custom.pm'; #The code that is to be added by the developer
|
||||
|
||||
sub main {
|
||||
#
|
||||
# Initial entry - route is "/<whatever>"
|
||||
#
|
||||
#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");
|
||||
|
||||
%sf_data = ();
|
||||
my $title = $c->l('sf_Shared_Folders');
|
||||
my $modul = '';
|
||||
|
||||
$sf_data{'trt'} = 'LIST';
|
||||
|
||||
#Load any DB entries into the <prefix>_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($sf_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 "/<whatever>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-<whatever>-update exists
|
||||
#signal_event smeserver-<whatever>-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 $title = $c->l('sf_Shared_Folders');
|
||||
|
||||
# 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}) {
|
||||
# $sf_data{$key} = $value;
|
||||
#}
|
||||
|
||||
# the value of trt will tell you which panel has returned
|
||||
my $trt = $c->param('trt') || 'LIST'; #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 'LIST'){
|
||||
#Validate form parameters for panel LIST
|
||||
$ret = $c->validate_LIST(\%sf_data);
|
||||
$thispanel = 'LIST';
|
||||
}
|
||||
|
||||
if ($trt eq 'MODIFY'){
|
||||
#Validate form parameters for panel MODIFY
|
||||
$ret = $c->validate_MODIFY(\%sf_data);
|
||||
$thispanel = 'MODIFY';
|
||||
}
|
||||
|
||||
if ($trt eq 'PERMISSIONS'){
|
||||
#Validate form parameters for panel PERMISSIONS
|
||||
$ret = $c->validate_PERMISSIONS(\%sf_data);
|
||||
$thispanel = 'PERMISSIONS';
|
||||
}
|
||||
|
||||
if ($trt eq 'REMOVE'){
|
||||
#Validate form parameters for panel REMOVE
|
||||
$ret = $c->validate_REMOVE(\%sf_data);
|
||||
$thispanel = 'REMOVE';
|
||||
}
|
||||
|
||||
if ($ret ne "ok"){
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->do_display($thispanel);
|
||||
} else {
|
||||
#Do whatever is needed, including writing values to the DB
|
||||
|
||||
|
||||
if ($trt eq 'LIST'){
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_LIST(\%sf_data);
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
sf_data => \%sf_data
|
||||
);
|
||||
$c->render(template => "shares");
|
||||
} else {
|
||||
$c->stash( success => $c->l('sf_LIST_panel_action_was_successful')); #A bit bland - edit it in the lex file
|
||||
}
|
||||
}
|
||||
|
||||
if ($trt eq 'MODIFY'){
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_MODIFY(\%sf_data);
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
sf_data => \%sf_data
|
||||
);
|
||||
$c->render(template => "shares");
|
||||
} else {
|
||||
$c->stash( success => $c->l('sf_MODIFY_panel_action_was_successful')); #A bit bland - edit it in the lex file
|
||||
}
|
||||
}
|
||||
|
||||
if ($trt eq 'PERMISSIONS'){
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_PERMISSIONS(\%sf_data);
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
sf_data => \%sf_data
|
||||
);
|
||||
$c->render(template => "shares");
|
||||
} else {
|
||||
$c->stash( success => $c->l('sf_PERMISSIONS_panel_action_was_successful')); #A bit bland - edit it in the lex file
|
||||
}
|
||||
}
|
||||
|
||||
if ($trt eq 'REMOVE'){
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_REMOVE(\%sf_data);
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
sf_data => \%sf_data
|
||||
);
|
||||
$c->render(template => "shares");
|
||||
} else {
|
||||
$c->stash( success => $c->l('sf_REMOVE_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') {
|
||||
$sf_data{'trt'} = 'LIST';
|
||||
} else {
|
||||
$sf_data{'trt'} = 'none';
|
||||
}
|
||||
$c->do_display($sf_data{'trt'});
|
||||
}
|
||||
}
|
||||
|
||||
sub do_display {
|
||||
#
|
||||
# Return after link clicked in table (this is a get) - route is "/<whatever>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 $title = $c->l('sf_Shared_Folders');
|
||||
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}) {
|
||||
# $sf_data{$key} = $value;
|
||||
#}
|
||||
|
||||
# the value of trt will tell you which panel has returned
|
||||
if (! $trt){
|
||||
$trt = $c->param('trt') || 'LIST'; #Indicates where to go now
|
||||
}
|
||||
|
||||
# Now add in the params from the selected row from the table
|
||||
|
||||
my %selectedrow;
|
||||
|
||||
if ($trt eq 'LIST'){
|
||||
#Validate Get selected row (if applicable) LIST
|
||||
%selectedrow = $c->get_selected_LIST($sf_data{'Selected'},$is_new_record);
|
||||
}
|
||||
|
||||
if ($trt eq 'MODIFY'){
|
||||
#Validate Get selected row (if applicable) MODIFY
|
||||
%selectedrow = $c->get_selected_MODIFY($sf_data{'Selected'},$is_new_record);
|
||||
}
|
||||
|
||||
if ($trt eq 'PERMISSIONS'){
|
||||
#Validate Get selected row (if applicable) PERMISSIONS
|
||||
%selectedrow = $c->get_selected_PERMISSIONS($sf_data{'Selected'},$is_new_record);
|
||||
}
|
||||
|
||||
if ($trt eq 'REMOVE'){
|
||||
#Validate Get selected row (if applicable) REMOVE
|
||||
%selectedrow = $c->get_selected_REMOVE($sf_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){
|
||||
$sf_data{$key} = $value;
|
||||
}
|
||||
# Where to go now
|
||||
$sf_data{'trt'} = $trt;
|
||||
|
||||
# Set up other shared data according to the panel to go to
|
||||
|
||||
if ($trt eq 'LIST'){
|
||||
# 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_LIST();
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$sf_data{$key} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if ($trt eq 'MODIFY'){
|
||||
# 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_MODIFY();
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$sf_data{$key} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if ($trt eq 'PERMISSIONS'){
|
||||
# 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_PERMISSIONS();
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$sf_data{$key} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if ($trt eq 'REMOVE'){
|
||||
# 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_REMOVE();
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$sf_data{$key} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# and table control fields
|
||||
$c->stash(Table1=>$c->get_Table1());
|
||||
$c->stash(Table2=>$c->get_Table2());
|
||||
|
||||
|
||||
# Data for panel
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
sf_data => \%sf_data
|
||||
);
|
||||
$c->render(template => "shares");
|
||||
}
|
||||
1;
|
69
Targets/Shares/_sf_LIST.html.ep
Normal file
69
Targets/Shares/_sf_LIST.html.ep
Normal file
@ -0,0 +1,69 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
%#
|
||||
<div id="Shares-LIST" class="partial Shares-LIST">
|
||||
# <script>
|
||||
# window.onload = function() {
|
||||
# SelectInput();
|
||||
# };
|
||||
# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $sf_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('sf_APPLY');
|
||||
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
%= form_for "sharesu" => (method => 'POST') => begin
|
||||
% param 'trt' => $sf_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $sf_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('sf_Manage_shared-folders_settings:')%></h2>
|
||||
|
||||
<p class='paragraph para1'>
|
||||
%=l('sf_You_can_remove_any_shared')
|
||||
</p>
|
||||
|
||||
<p class='paragraph para2'>
|
||||
%=l('sf_Create_a_new_shared_folder')
|
||||
</p>
|
||||
|
||||
<a href='shared-folderu?trt=MODIFY' class='link link1'>
|
||||
%= l('sf_Create_a_new_shared_folder')
|
||||
</a>
|
||||
%#= link_to l('sf_Create_a_new_shared_folder'), 'shared-folderu?trt=MODIFY' , class=>'link link1'
|
||||
|
||||
|
||||
<br /><table class="sme-border TableSort sme-table tabl1 ">
|
||||
<thead class='tabl1'>
|
||||
<tr table-head-row>
|
||||
<th class='sme-border table-head-col table-head-col-Name '><%=l('sf_Name')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Description '><%=l('sf_Description')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Actionp '><%=l('sf_Actionp')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Actionm '><%=l('sf_Actionm')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Actionr '><%=l('sf_Actionr')%></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='tabl1'>
|
||||
% my $control_data = $c->stash('Table1');
|
||||
% foreach my $row (@$control_data) {
|
||||
<tr class='table-row'>
|
||||
<td class='sme-border table-col table-col-Table1-Name'><%=$c->render_to_string(inline=>$row->{'Table1-Name'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Description'><%=$c->render_to_string(inline=>$row->{'Table1-Description'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Actionp'><%=$c->render_to_string(inline=>$row->{'Table1-Actionp'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Actionm'><%=$c->render_to_string(inline=>$row->{'Table1-Actionm'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Actionr'><%=$c->render_to_string(inline=>$row->{'Table1-Actionr'})%></td>
|
||||
</tr>
|
||||
%}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
113
Targets/Shares/_sf_MODIFY.html.ep
Normal file
113
Targets/Shares/_sf_MODIFY.html.ep
Normal file
@ -0,0 +1,113 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
%#
|
||||
<div id="Shares-MODIFY" class="partial Shares-MODIFY">
|
||||
# <script>
|
||||
# window.onload = function() {
|
||||
# SelectInput();
|
||||
# };
|
||||
# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $sf_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('sf_APPLY');
|
||||
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
%= form_for "sharesu" => (method => 'POST') => begin
|
||||
% param 'trt' => $sf_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $sf_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('sf_Create_or_modify_a_shared')%></h2>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_description')
|
||||
</span><span class=data>
|
||||
% param 'description' => $sf_data->{description} unless param 'description';
|
||||
%= text_field 'description', size => '50', class => 'textinput description' , pattern=>'.*' , placeholder=>'description', title =>'Pattern regex mismatch', id => 'description_text'
|
||||
<br></span></p>
|
||||
|
||||
<p class='paragraph para14'>
|
||||
%=l('sf_The_following_settings_control_the')
|
||||
</p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_smbaccess')
|
||||
</span><span class=data>
|
||||
% my @smbaccess_options = [['Enabled, browseable' => 'browseable'], ['Enabled, hidden' => 'non-browseable'], ['No access' => 'none']];
|
||||
% param 'smbaccess' => $sf_data->{smbaccess} unless param 'smbaccess';
|
||||
%= select_field 'smbaccess' => @smbaccess_options, class => 'input', id => 'smbaccess_select'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_recyclebin')
|
||||
</span><span class=data>
|
||||
% my @recyclebin_options = [['disabled' => 'disabled'], ['Enabled, keep only the latest version' => 'enabled'], ['Enabled, keep a copy of all versions' => 'keep-versions']];
|
||||
% param 'recyclebin' => $sf_data->{recyclebin} unless param 'recyclebin';
|
||||
%= select_field 'recyclebin' => @recyclebin_options, class => 'input', id => 'recyclebin_select'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_retention')
|
||||
</span><span class=data>
|
||||
% my @retention_options = [['one month' => '30'], ['one week' => '7'], ['one year' => '365'], ['six months' => '180'], ['unlimited' => 'unlimited']];
|
||||
% param 'retention' => $sf_data->{retention} unless param 'retention';
|
||||
%= select_field 'retention' => @retention_options, class => 'input', id => 'retention_select'
|
||||
<br></span> </p>
|
||||
|
||||
<p class='paragraph para2'>
|
||||
%=l('sf_The_following_settings_control_the')
|
||||
</p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_httpaccess')
|
||||
</span><span class=data>
|
||||
% my @httpaccess_options = [['Entire Internet (no password required)' => 'global'], ['Entire Internet (password required)' => 'global-pw'], ['Entire Internet (password required outside local network)' => 'global-pw-remote'], ['Local network (no password required)' => 'local'], ['Local network (password required)' => 'local-pw'], ['No access' => 'none']];
|
||||
% param 'httpaccess' => $sf_data->{httpaccess} unless param 'httpaccess';
|
||||
%= select_field 'httpaccess' => @httpaccess_options, class => 'input', id => 'httpaccess_select'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_webdav')
|
||||
</span><span class=data>
|
||||
% my @webdav_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
|
||||
% param 'webdav' => $sf_data->{webdav} unless param 'webdav';
|
||||
%= select_field 'webdav' => @webdav_options, class => 'input', id => 'webdav_select'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_requireSSL')
|
||||
</span><span class=data>
|
||||
% my @requireSSL_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
|
||||
% param 'requireSSL' => $sf_data->{requireSSL} unless param 'requireSSL';
|
||||
%= select_field 'requireSSL' => @requireSSL_options, class => 'input', id => 'requireSSL_select'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_indexes')
|
||||
</span><span class=data>
|
||||
% my @indexes_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
|
||||
% param 'indexes' => $sf_data->{indexes} unless param 'indexes';
|
||||
%= select_field 'indexes' => @indexes_options, class => 'input', id => 'indexes_select'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('sf_dynamic')
|
||||
</span><span class=data>
|
||||
% my @dynamic_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
|
||||
% param 'dynamic' => $sf_data->{dynamic} unless param 'dynamic';
|
||||
%= select_field 'dynamic' => @dynamic_options, class => 'input', id => 'dynamic_select'
|
||||
<br></span> </p>
|
||||
|
||||
<span class='data'>
|
||||
%= submit_button l('sf_Save'), class => 'action subm109'
|
||||
</span>
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
365
Targets/Shares/_sf_PERMISSIONS.html.ep
Normal file
365
Targets/Shares/_sf_PERMISSIONS.html.ep
Normal file
@ -0,0 +1,365 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
%#
|
||||
<div id="Shares-PERMISSIONS" class="partial Shares-PERMISSIONS">
|
||||
# <script>
|
||||
# window.onload = function() {
|
||||
# SelectInput();
|
||||
# };
|
||||
# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $sf_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('sf_APPLY');
|
||||
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
%= form_for "sharesu" => (method => 'POST') => begin
|
||||
% param 'trt' => $sf_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $sf_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('sf_Access_right_management')%></h2>
|
||||
|
||||
<p class='paragraph para10'>
|
||||
%=l('sf_You_can_use_this_matrix')
|
||||
</p>
|
||||
|
||||
<br /><table class="sme-border TableSort sme-table tabl2 ">
|
||||
<thead class='tabl2'>
|
||||
<tr table-head-row>
|
||||
<th class='sme-border table-head-col table-head-col-Groups '><%=l('sf_Groups')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Description '><%=l('sf_Description')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Read / Write '><%=l('sf_Read_/_Write')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Read Only '><%=l('sf_Read_Only')%></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='tabl2'>
|
||||
% my $control_data = $c->stash('Table2');
|
||||
% foreach my $row (@$control_data) {
|
||||
<tr class='table-row'>
|
||||
<td class='sme-border table-col table-col-Table2-Groups'><%=$c->render_to_string(inline=>$row->{'Table2-Groups'})%></td>
|
||||
<td class='sme-border table-col table-col-Table2-Description'><%=$c->render_to_string(inline=>$row->{'Table2-Description'})%></td>
|
||||
<td class='sme-border table-col table-col-Table2-Read / Write'><%=$c->render_to_string(inline=>$row->{'Table2-Read / Write'})%></td>
|
||||
<td class='sme-border table-col table-col-Table2-Read Only'><%=$c->render_to_string(inline=>$row->{'Table2-Read Only'})%></td>
|
||||
</tr>
|
||||
%}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writegroup')
|
||||
</span><span class=data>
|
||||
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
|
||||
%=checkbox_field 'writegroup', class => 'chec110'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readgroup')
|
||||
</span><span class=data>
|
||||
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
|
||||
%=checkbox_field 'readgroup', class => 'chec111'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writegroup')
|
||||
</span><span class=data>
|
||||
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
|
||||
%=checkbox_field 'writegroup', class => 'chec112'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readgroup')
|
||||
</span><span class=data>
|
||||
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
|
||||
%=checkbox_field 'readgroup', class => 'chec113'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writegroup')
|
||||
</span><span class=data>
|
||||
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
|
||||
%=checkbox_field 'writegroup', class => 'chec114'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readgroup')
|
||||
</span><span class=data>
|
||||
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
|
||||
%=checkbox_field 'readgroup', class => 'chec115'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writegroup')
|
||||
</span><span class=data>
|
||||
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
|
||||
%=checkbox_field 'writegroup', class => 'chec116'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readgroup')
|
||||
</span><span class=data>
|
||||
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
|
||||
%=checkbox_field 'readgroup', class => 'chec117'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writegroup')
|
||||
</span><span class=data>
|
||||
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
|
||||
%=checkbox_field 'writegroup', class => 'chec118'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readgroup')
|
||||
</span><span class=data>
|
||||
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
|
||||
%=checkbox_field 'readgroup', class => 'chec119'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec120'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec121'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec122'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec123'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec124'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec125'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec126'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec127'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec128'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec129'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec130'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec131'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec132'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec133'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec134'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec135'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec136'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec137'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec138'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec139'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec140'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec141'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec142'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec143'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec144'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec145'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_writeuser')
|
||||
</span><span class=data>
|
||||
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
|
||||
%=checkbox_field 'writeuser', class => 'chec146'
|
||||
</span></p>
|
||||
|
||||
|
||||
<p><span class='label'>
|
||||
%=l('sf_readuser')
|
||||
</span><span class=data>
|
||||
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
|
||||
%=checkbox_field 'readuser', class => 'chec147'
|
||||
</span></p>
|
||||
|
||||
|
||||
<span class='data'>
|
||||
%= submit_button l('sf_Save'), class => 'action subm148'
|
||||
</span>
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
50
Targets/Shares/_sf_REMOVE.html.ep
Normal file
50
Targets/Shares/_sf_REMOVE.html.ep
Normal file
@ -0,0 +1,50 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
%#
|
||||
<div id="Shares-REMOVE" class="partial Shares-REMOVE">
|
||||
# <script>
|
||||
# window.onload = function() {
|
||||
# SelectInput();
|
||||
# };
|
||||
# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $sf_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('sf_APPLY');
|
||||
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
%= form_for "sharesu" => (method => 'POST') => begin
|
||||
% param 'trt' => $sf_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $sf_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('sf_Remove_shared_folder')%></h2>
|
||||
|
||||
<p class='paragraph para11'>
|
||||
%=l('sf_You_are_about_to_remove')
|
||||
</p>
|
||||
|
||||
<p class='paragraph para21'>
|
||||
%=l('sf_All_files_belonging_to_this')
|
||||
</p>
|
||||
|
||||
<p class='paragraph para31'>
|
||||
%=l('sf_Are_you_sure_you_wish')
|
||||
</p>
|
||||
|
||||
<span class='data'>
|
||||
%= submit_button l('sf_Cancel'), class => 'action subm149'
|
||||
</span>
|
||||
|
||||
<span class='data'>
|
||||
%= submit_button l('sf_Remove'), class => 'action subm150'
|
||||
</span>
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
86
Targets/Shares/shares.css
Normal file
86
Targets/Shares/shares.css
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
Generated by: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
*/
|
||||
.Shares-panel {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.para1 {}
|
||||
.para2 {}
|
||||
.link1 {}
|
||||
.tabl1 {}
|
||||
thead .tabl1 {}
|
||||
tbody .tabl1 {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.text100 {}
|
||||
.para14 {}
|
||||
.sele101 {}
|
||||
.sele102 {}
|
||||
.sele103 {}
|
||||
.para2 {}
|
||||
.sele104 {}
|
||||
.sele105 {}
|
||||
.sele106 {}
|
||||
.sele107 {}
|
||||
.sele108 {}
|
||||
.subm109 {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.para10 {}
|
||||
.tabl2 {}
|
||||
thead .tabl2 {}
|
||||
tbody .tabl2 {}
|
||||
.chec110 {}
|
||||
.chec111 {}
|
||||
.chec112 {}
|
||||
.chec113 {}
|
||||
.chec114 {}
|
||||
.chec115 {}
|
||||
.chec116 {}
|
||||
.chec117 {}
|
||||
.chec118 {}
|
||||
.chec119 {}
|
||||
.chec120 {}
|
||||
.chec121 {}
|
||||
.chec122 {}
|
||||
.chec123 {}
|
||||
.chec124 {}
|
||||
.chec125 {}
|
||||
.chec126 {}
|
||||
.chec127 {}
|
||||
.chec128 {}
|
||||
.chec129 {}
|
||||
.chec130 {}
|
||||
.chec131 {}
|
||||
.chec132 {}
|
||||
.chec133 {}
|
||||
.chec134 {}
|
||||
.chec135 {}
|
||||
.chec136 {}
|
||||
.chec137 {}
|
||||
.chec138 {}
|
||||
.chec139 {}
|
||||
.chec140 {}
|
||||
.chec141 {}
|
||||
.chec142 {}
|
||||
.chec143 {}
|
||||
.chec144 {}
|
||||
.chec145 {}
|
||||
.chec146 {}
|
||||
.chec147 {}
|
||||
.subm148 {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.para11 {}
|
||||
.para21 {}
|
||||
.para31 {}
|
||||
.subm149 {}
|
||||
.subm150 {}
|
68
Targets/Shares/shares.html.ep
Normal file
68
Targets/Shares/shares.html.ep
Normal file
@ -0,0 +1,68 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
%#
|
||||
% layout 'default', title => "Sme server 2 - Shared Folders", share_dir => './';
|
||||
%# css specific to this panel:
|
||||
% content_for 'module' => begin
|
||||
%= stylesheet '/css/shares.css'
|
||||
%= javascript '/js/shares.js'
|
||||
<div id="module" class="module Shares-panel">
|
||||
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $sf_data->{trt}
|
||||
</pre>
|
||||
% }
|
||||
|
||||
<h1><%=$title%></h1>
|
||||
|
||||
% if ( stash('modul')) {
|
||||
%= $c->render_to_string(inline => stash('modul') );
|
||||
% }
|
||||
|
||||
%if ($c->stash('first')) {
|
||||
<br><p>
|
||||
%=$c->render_to_string(inline =>$c->l($c->stash('first')))
|
||||
</p>
|
||||
|
||||
%} elsif ($c->stash('success')) {
|
||||
<div class='success '>
|
||||
<p>
|
||||
%= $c->l($c->stash('success'));
|
||||
</p>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
%} elsif ($c->stash('error')) {
|
||||
<div class='sme-error'>
|
||||
<p>
|
||||
%= $c->l($c->stash('error'));
|
||||
</p>
|
||||
</div>
|
||||
<br />
|
||||
%}
|
||||
|
||||
%#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 ($sf_data->{trt} eq "LIST") {
|
||||
%= include 'partials/_sf_LIST'
|
||||
%}
|
||||
|
||||
% if ($sf_data->{trt} eq "MODIFY") {
|
||||
%= include 'partials/_sf_MODIFY'
|
||||
%}
|
||||
|
||||
% if ($sf_data->{trt} eq "PERMISSIONS") {
|
||||
%= include 'partials/_sf_PERMISSIONS'
|
||||
%}
|
||||
|
||||
% if ($sf_data->{trt} eq "REMOVE") {
|
||||
%= include 'partials/_sf_REMOVE'
|
||||
%}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
%end
|
5
Targets/Shares/shares.js
Normal file
5
Targets/Shares/shares.js
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
//Generated by: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
//
|
||||
$(document).ready(function() {
|
||||
});
|
46
Targets/Shares/shares_en.lex
Normal file
46
Targets/Shares/shares_en.lex
Normal file
@ -0,0 +1,46 @@
|
||||
#
|
||||
# Generated by SM2Gen version: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
|
||||
#
|
||||
'sf_readgroup' => 'regroup',
|
||||
'sf_Description' => 'Description',
|
||||
'sf_dynamic' => 'Dynamic',
|
||||
'sf_description' => 'Description',
|
||||
'sf_The_following_settings_control_the' => 'The following settings control the access of this shared folder using the HTTP/HTTPS protocol',
|
||||
'sf_Create,_modify,_or_remove_shared' => 'create modify Or remove shared folders',
|
||||
'sf_Remove' => 'Remove',
|
||||
'sf_httpaccess' => 'Httpaccess',
|
||||
'sf_readuser' => 'reader',
|
||||
'sf_Cancel' => 'Cancel',
|
||||
'sf_All_files_belonging_to_this' => 'All files belonging to this shared folder will be deleted',
|
||||
'sf_smbaccess' => 'Smbaccess',
|
||||
'sf_You_can_use_this_matrix' => 'You can use this matrix to define groups and users access permissions',
|
||||
'sf_webdav' => 'Webdav',
|
||||
'sf_Create_a_new_shared_folder' => 'Create a new shared folder',
|
||||
'sf_REMOVE_panel_action_was_successful' => 'REMOVE panel action was successful',
|
||||
'sf_Actionr' => 'action',
|
||||
'sf_You_are_about_to_remove' => 'You are about to remove the following shared folder',
|
||||
'sf_Shared_Folders' => 'Shared Folders',
|
||||
'sf_MODIFY_panel_action_was_successful' => 'MODIFY panel action was successful',
|
||||
'sf_indexes' => 'Indexes',
|
||||
'sf_Are_you_sure_you_wish' => 'Are you sure you wish to remove it ?',
|
||||
'sf_Actionm' => 'action',
|
||||
'sf_writeuser' => 'Writeuser',
|
||||
'sf_LIST_panel_action_was_successful' => 'LIST panel action was successful',
|
||||
'sf_Remove_shared_folder' => 'Remove shared folder',
|
||||
'sf_PERMISSIONS_panel_action_was_successful' => 'PERMISSIONS panel action was successful',
|
||||
'sf_Manage_shared-folders_settings:' => 'Manage shared-folders settings',
|
||||
'sf_You_can_remove_any_shared' => 'You can remove any shared folder by clicking on the corresponding command next to the shared folder',
|
||||
'sf_APPLY' => 'Apply',
|
||||
'sf_requireSSL' => 'requires',
|
||||
'sf_Groups' => 'Groups',
|
||||
'sf_Save' => 'Save',
|
||||
'sf_Actionp' => 'action',
|
||||
'sf_writegroup' => 'Writegroup',
|
||||
'sf_Name' => 'Name',
|
||||
'sf_Read_Only' => 'Read Only',
|
||||
'sf_retention' => 'Retention',
|
||||
'sf_Access_right_management' => 'Access right management',
|
||||
'sf_Read_/_Write' => 'Read / Write',
|
||||
'sf_Create_or_modify_a_shared' => 'Create or modify a shared folder',
|
||||
'sf_The_following_settings_control_the' => 'The following settings control the access of this shared folder from the local network Using the SMB/CIFS protocol',
|
||||
'sf_recyclebin' => 'Recyclebin',
|
@ -2,11 +2,11 @@
|
||||
%# Generated by ${version}
|
||||
%#
|
||||
<div id="${PackageName}-${route}" class="partial ${PackageName}-${route}">
|
||||
# <script>
|
||||
# window.onload = function() {
|
||||
# SelectInput();
|
||||
# };
|
||||
# </script>
|
||||
%# <script>
|
||||
%# window.onload = function() {
|
||||
%# SelectInput();
|
||||
%# };
|
||||
%# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $$${prefix}_data
|
||||
|
57
html/shared-folders_list.html
Normal file
57
html/shared-folders_list.html
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
<!DOCTYPE html
|
||||
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>SME Server mailserver.bjsystems.co.uk</title>
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/hwinfo.css");
|
||||
</style>
|
||||
|
||||
<link rev="made" href="mailto:bugs%40koozali.org">
|
||||
<meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation">
|
||||
<link rel="stylesheet" type="text/css" href="/server-common/css/sme_core.css">
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/sme_main.css");
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<h1>Create, modify, or remove shared folders</h1>
|
||||
<form method="POST" action="shares" enctype="application/x-www-form-urlencoded">
|
||||
<input type="hidden" name="page" value="0">
|
||||
<input type="hidden" name="page_stack" value="">
|
||||
<input type=hidden name=".id" value="c0cdcbf334471423ad151c4e5d38f927">
|
||||
<input type="hidden" name="csrf_token" value="TvmFptTylfwxUjzsqWoFJNOdXc50KkJV5b9mgUp0xsW">
|
||||
<table class="sme-noborders">
|
||||
<tr><td colspan="2"><p>You can remove any shared folder by clicking on the corresponding command next to the shared folder.</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2'>
|
||||
<p><a class="button-like" href="shares?page=0&page_stack=&Next=Next&wherenext=CreateModify">Create a new shared folder</a></p></tr>
|
||||
<table class="sme-border">
|
||||
<tr><th colspan="1" class="sme-border">Name</th>
|
||||
<th colspan="1" class="sme-border">Description</th>
|
||||
<th colspan="3" class="sme-border">Action</th>
|
||||
</tr>
|
||||
<tr><td colspan="1" class="sme-border">africa2023</td>
|
||||
<td colspan="1" class="sme-border">New one</td>
|
||||
<td colspan="1" class="sme-border"><a href="shares?page=;page_stack=;wherenext=Permissions&name=africa2023">Permissions</a> </td>
|
||||
<td colspan="1" class="sme-border"><a href="shares?page=;page_stack=;wherenext=CreateModify&action=modify&name=africa2023">Modify</a> </td>
|
||||
<td colspan="1" class="sme-border"><a href="shares?page=;page_stack=;wherenext=Remove&name=africa2023&description=New one">Remove</a> </td>
|
||||
</tr></table>
|
||||
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<HR class="sme-copyrightbar">
|
||||
<FONT class="sme-copyright">
|
||||
SME Server 10.1<BR>Copyright 1999-2006 Mitel Corporation<BR>All rights reserved.
|
||||
|
||||
<BR>Copyright (c) 2013 - 2021 Koozali Foundation Inc.<BR>
|
||||
</FONT>
|
||||
</BODY>
|
||||
|
||||
</HTML>
|
129
html/shared-folders_modify.html
Normal file
129
html/shared-folders_modify.html
Normal file
@ -0,0 +1,129 @@
|
||||
|
||||
|
||||
<!DOCTYPE html
|
||||
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>SME Server mailserver.bjsystems.co.uk</title>
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/hwinfo.css");
|
||||
</style>
|
||||
|
||||
<link rev="made" href="mailto:bugs%40koozali.org">
|
||||
<meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation">
|
||||
<link rel="stylesheet" type="text/css" href="/server-common/css/sme_core.css">
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/sme_main.css");
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<h1>Create, modify, or remove shared folders</h1>
|
||||
<h2>Create or modify a shared folder</h2>
|
||||
<form method="POST" action="shares" enctype="application/x-www-form-urlencoded">
|
||||
<input type="hidden" name="page" value="1">
|
||||
<input type="hidden" name="page_stack" value="0">
|
||||
<input type=hidden name=".id" value="3250b0901fa9d5aadac6bbc80694be75">
|
||||
<input type="hidden" name="csrf_token" value="rVRGjkTMEpY5xE11Ykgsm9k7hXGLuQAV2YwjMQG8I2Q">
|
||||
<table class="sme-noborders">
|
||||
<tr><td colspan="2">The share name should contain only lower-case letters, numbers, periods, hyphens and underscores, and should start with a lower-case letter. For example "johnson", "intra", and "cust3.prj12" are all valid names, but "3associates", "John Smith" and "Bus!Partner" are not. The name is limited to 12 characters.</td></tr><tr><td class="sme-noborders-label">Shared folder name</td>
|
||||
|
||||
<td class="sme-noborders-content">africa2023
|
||||
<input type="hidden" name="name" value="africa2023">
|
||||
<input type="hidden" name="action" value="modify">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sme-noborders-label">Description
|
||||
<td class="sme-noborders-content"><INPUT VALUE="New one" NAME="description" TYPE="text"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2'>
|
||||
<hr class="sectionbar"/>
|
||||
<tr>
|
||||
<td colspan="2"><p>The following settings control the access of this shared folder from the local network, using the SMB/CIFS protocol.</p></td>
|
||||
</tr> <tr>
|
||||
<td class="sme-noborders-label">SMB Access
|
||||
<td class="sme-noborders-content"><SELECT NAME="smbaccess" TYPE="select">
|
||||
<OPTION VALUE="browseable" SELECTED>Enabled, browseable
|
||||
<OPTION VALUE="non-browseable">Enabled, hidden
|
||||
<OPTION VALUE="none">No access
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sme-noborders-label">Recycle bin
|
||||
<td class="sme-noborders-content"><SELECT NAME="recyclebin" TYPE="select">
|
||||
<OPTION VALUE="disabled" SELECTED>disabled
|
||||
<OPTION VALUE="enabled">Enabled, keep only the latest version
|
||||
<OPTION VALUE="keep-versions">Enabled, keep a copy of all versions
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sme-noborders-label">Retention time
|
||||
<td class="sme-noborders-content"><SELECT NAME="retention" TYPE="select">
|
||||
<OPTION VALUE="30">one month
|
||||
<OPTION VALUE="7">one week
|
||||
<OPTION VALUE="365">one year
|
||||
<OPTION VALUE="180">six months
|
||||
<OPTION VALUE="unlimited" SELECTED>unlimited
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2'>
|
||||
<hr class="sectionbar"/>
|
||||
<tr>
|
||||
<td colspan="2"><p>The following settings control the access of this shared folder using the HTTP/HTTPS protocol.</p></td>
|
||||
</tr> <tr>
|
||||
<td class="sme-noborders-label">Web Access
|
||||
<td class="sme-noborders-content"><SELECT NAME="httpaccess" TYPE="select">
|
||||
<OPTION VALUE="global">Entire Internet (no password required)
|
||||
<OPTION VALUE="global-pw">Entire Internet (password required)
|
||||
<OPTION VALUE="global-pw-remote">Entire Internet (password required outside local network)
|
||||
<OPTION VALUE="local">Local network (no password required)
|
||||
<OPTION VALUE="local-pw">Local network (password required)
|
||||
<OPTION VALUE="none" SELECTED>No access
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sme-noborders-label">WebDav support
|
||||
<td class="sme-noborders-content"><SELECT NAME="webdav" TYPE="select">
|
||||
<OPTION VALUE="disabled" SELECTED>disabled
|
||||
<OPTION VALUE="enabled">enabled
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sme-noborders-label">Force secure connections
|
||||
<td class="sme-noborders-content"><SELECT NAME="requireSSL" TYPE="select">
|
||||
<OPTION VALUE="disabled" SELECTED>disabled
|
||||
<OPTION VALUE="enabled">enabled
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sme-noborders-label">Indexes
|
||||
<td class="sme-noborders-content"><SELECT NAME="indexes" TYPE="select">
|
||||
<OPTION VALUE="disabled" SELECTED>disabled
|
||||
<OPTION VALUE="enabled">enabled
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sme-noborders-label">Dynamic content execution (PHP, CGI, SSI)
|
||||
<td class="sme-noborders-content"><SELECT NAME="dynamic" TYPE="select">
|
||||
<OPTION VALUE="disabled" SELECTED>disabled
|
||||
<OPTION VALUE="enabled">enabled
|
||||
</SELECT></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width=100%><tr><th class="sme-layout"><input type="submit" name="Next" value="Save"></th></tr></table>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<HR class="sme-copyrightbar">
|
||||
<FONT class="sme-copyright">
|
||||
SME Server 10.1<BR>Copyright 1999-2006 Mitel Corporation<BR>All rights reserved.
|
||||
|
||||
<BR>Copyright (c) 2013 - 2021 Koozali Foundation Inc.<BR>
|
||||
</FONT>
|
||||
</BODY>
|
||||
|
||||
</HTML>
|
136
html/shared-folders_perms.html
Normal file
136
html/shared-folders_perms.html
Normal file
@ -0,0 +1,136 @@
|
||||
|
||||
|
||||
<!DOCTYPE html
|
||||
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>SME Server mailserver.bjsystems.co.uk</title>
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/hwinfo.css");
|
||||
</style>
|
||||
|
||||
<link rev="made" href="mailto:bugs%40koozali.org">
|
||||
<meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation">
|
||||
<link rel="stylesheet" type="text/css" href="/server-common/css/sme_core.css">
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/sme_main.css");
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<h1>Create, modify, or remove shared folders</h1>
|
||||
<h2>Access right management</h2>
|
||||
<form method="POST" action="shares" enctype="application/x-www-form-urlencoded">
|
||||
<input type="hidden" name="page" value="3">
|
||||
<input type="hidden" name="page_stack" value="0">
|
||||
<input type=hidden name=".id" value="4cf77970572e8c694559fe2ca4df6f02">
|
||||
<input type="hidden" name="csrf_token" value="RrDuaqzmzwa1PN4K54W8TYd3DOi4zSp3qnMVSbsTofY">
|
||||
<table class="sme-noborders">
|
||||
<tr>
|
||||
<td colspan="2"><p>You can use this matrix to define groups and users access permissions.</p></td>
|
||||
</tr>
|
||||
<tr><td colspan="2"><tr><td class="sme-noborders-label">Shared folder name</td>
|
||||
<td class="sme-noborders-content">africa2023</td><tr><td class="sme-noborders-label">Description</td>
|
||||
<td class="sme-noborders-content">New one</td><tr><td class="sme-noborders-label">Permissions</td><td>
|
||||
<table class="sme-border">
|
||||
<tr><th colspan="1" class="sme-border">Groups</th>
|
||||
<th colspan="1" class="sme-border">Description</th>
|
||||
<th colspan="1" class="sme-border">Read / Write</th>
|
||||
<th colspan="1" class="sme-border">Read Only</th>
|
||||
</tr><tr><td colspan="1" class="sme-border">shared</td>
|
||||
<td colspan="1" class="sme-border">Everyone</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writegroup" value="shared"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readgroup" value="shared"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">changeofkey</td>
|
||||
<td colspan="1" class="sme-border">Group for emails</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writegroup" value="changeofkey"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readgroup" value="changeofkey"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">domainadmins</td>
|
||||
<td colspan="1" class="sme-border">Domain Admins</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writegroup" value="domainadmins"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readgroup" value="domainadmins"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">ecmw2023grp</td>
|
||||
<td colspan="1" class="sme-border">ecmw 2023</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writegroup" value="ecmw2023grp"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readgroup" value="ecmw2023grp"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">miwgrp</td>
|
||||
<td colspan="1" class="sme-border">Group for MIW payments</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writegroup" value="miwgrp"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readgroup" value="miwgrp"></td>
|
||||
</tr><tr><th colspan="1" class="sme-border">Users</th>
|
||||
<th colspan="1" class="sme-border">Description</th>
|
||||
<th colspan="1" class="sme-border">Read / Write</th>
|
||||
<th colspan="1" class="sme-border">Read Only</th>
|
||||
</tr><tr><td colspan="1" class="sme-border">brianr</td>
|
||||
<td colspan="1" class="sme-border">Brian Read</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="brianr"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="brianr"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">cok1</td>
|
||||
<td colspan="1" class="sme-border">Clare Park</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="cok1"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="cok1"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">cok2</td>
|
||||
<td colspan="1" class="sme-border">Frank Park</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="cok2"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="cok2"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">dmarc</td>
|
||||
<td colspan="1" class="sme-border">Dmarc Dmarc</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="dmarc"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="dmarc"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">ecmw2025</td>
|
||||
<td colspan="1" class="sme-border">ecmw 2025</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="ecmw2025"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="ecmw2025"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">englishcountrymusicweekend</td>
|
||||
<td colspan="1" class="sme-border">English Music Weekend</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="englishcountrymusicweekend"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="englishcountrymusicweekend"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">guest</td>
|
||||
<td colspan="1" class="sme-border">Guest Guest</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="guest"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="guest"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">katy</td>
|
||||
<td colspan="1" class="sme-border">Katy Read</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="katy"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="katy"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">more</td>
|
||||
<td colspan="1" class="sme-border">More 4AllianceForFoodPurity</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="more"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="more"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">nikki</td>
|
||||
<td colspan="1" class="sme-border">Nicola Escott</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="nikki"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="nikki"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">phil</td>
|
||||
<td colspan="1" class="sme-border">Phil Fermor</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="phil"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="phil"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">sheila</td>
|
||||
<td colspan="1" class="sme-border">Sheila Read</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="sheila"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="sheila"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">smeserver</td>
|
||||
<td colspan="1" class="sme-border">sme server</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="smeserver"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="smeserver"></td>
|
||||
</tr><tr><td colspan="1" class="sme-border">zara.healy</td>
|
||||
<td colspan="1" class="sme-border">Zara Healy</td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="writeuser" value="zara.healy"></td>
|
||||
<td colspan="1" class="sme-border"><input type="checkbox" name="readuser" value="zara.healy"></td>
|
||||
</tr></table></td></tr>
|
||||
</td></tr>
|
||||
</table>
|
||||
<table width=100%><tr><th class="sme-layout"><input type="submit" name="Next" value="Save"></th></tr></table>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<HR class="sme-copyrightbar">
|
||||
<FONT class="sme-copyright">
|
||||
SME Server 10.1<BR>Copyright 1999-2006 Mitel Corporation<BR>All rights reserved.
|
||||
|
||||
<BR>Copyright (c) 2013 - 2021 Koozali Foundation Inc.<BR>
|
||||
</FONT>
|
||||
</BODY>
|
||||
|
||||
</HTML>
|
55
html/shared-folders_remove.html
Normal file
55
html/shared-folders_remove.html
Normal file
@ -0,0 +1,55 @@
|
||||
|
||||
|
||||
<!DOCTYPE html
|
||||
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>SME Server mailserver.bjsystems.co.uk</title>
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/hwinfo.css");
|
||||
</style>
|
||||
|
||||
<link rev="made" href="mailto:bugs%40koozali.org">
|
||||
<meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation">
|
||||
<link rel="stylesheet" type="text/css" href="/server-common/css/sme_core.css">
|
||||
<style type="text/css">
|
||||
@import url("/server-common/css/sme_main.css");
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<h1>Create, modify, or remove shared folders</h1>
|
||||
<h2>Remove shared folder</h2>
|
||||
<form method="POST" action="shares" enctype="application/x-www-form-urlencoded">
|
||||
<input type="hidden" name="page" value="2">
|
||||
<input type="hidden" name="page_stack" value="0">
|
||||
<input type=hidden name=".id" value="4ac6b55069cf10e90f4b5d7d64b5b352">
|
||||
<input type="hidden" name="csrf_token" value="qvZ5GjwZ0fhXu6bszNjS1M94ds9FDFnubBjjcwzYF4x">
|
||||
<table class="sme-noborders">
|
||||
<tr><td colspan="2"><p><p>
|
||||
You are about to remove the following shared folder
|
||||
</p>
|
||||
<p>
|
||||
All files belonging to this shared folder will be deleted.
|
||||
</p>
|
||||
<p>
|
||||
Are you sure you wish to remove it ?
|
||||
</p></p></td>
|
||||
</tr>
|
||||
<tr><td class="sme-noborders-label">Name</td> <td class="sme-noborders-content">africa2023</td></tr>
|
||||
<tr><td class="sme-noborders-label">Description</td> <td class="sme-noborders-content">New one</td></tr>
|
||||
<table width="100%"><tr><th class="sme-layout"><input type="submit" name="cancel" value="Cancel" > <input type="submit" name="remove" value="Remove" ></th></tr></table>
|
||||
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<HR class="sme-copyrightbar">
|
||||
<FONT class="sme-copyright">
|
||||
SME Server 10.1<BR>Copyright 1999-2006 Mitel Corporation<BR>All rights reserved.
|
||||
|
||||
<BR>Copyright (c) 2013 - 2021 Koozali Foundation Inc.<BR>
|
||||
</FONT>
|
||||
</BODY>
|
||||
|
||||
</HTML>
|
504
json5/Shares.json5
Normal file
504
json5/Shares.json5
Normal file
@ -0,0 +1,504 @@
|
||||
{
|
||||
PackageName: 'Shares',
|
||||
prefix: 'sf',
|
||||
MenuHeading: 'Network',
|
||||
MenuDescription: 'Shared Folders',
|
||||
MenuNavigation: '7000 400',
|
||||
firstPanel: 'LIST',
|
||||
signalEvent: 'smeserver-shared-folders-update',
|
||||
html: [
|
||||
{
|
||||
Name: 'list',
|
||||
route: 'LIST',
|
||||
Header: 'Create, modify, or remove shared folders',
|
||||
SubHeader: 'Manage shared-folders settings:',
|
||||
Paragraph1: 'You can remove any shared folder by clicking on the corresponding command next to the shared folder.',
|
||||
Paragraph2: 'Create a new shared folder',
|
||||
Link1: {
|
||||
Type: 'Link',
|
||||
href: 'shared-folderu?trt=MODIFY',
|
||||
title: 'Create a new shared folder'
|
||||
},
|
||||
Table1: {
|
||||
Type: 'Table',
|
||||
TableControl: 'Table1',
|
||||
TopHeadings: [
|
||||
'Name',
|
||||
'Description',
|
||||
'Actionp',
|
||||
'Actionm',
|
||||
'Actionr'
|
||||
],
|
||||
Columns: [
|
||||
'Table1-Name',
|
||||
'Table1-Description',
|
||||
'Table1-Actionp',
|
||||
'Table1-Actionm',
|
||||
'Table1-Actionr'
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
Name: 'modify',
|
||||
route: 'MODIFY',
|
||||
Header: 'Create, modify, or remove shared folders',
|
||||
SubHeader: 'Create or modify a shared folder',
|
||||
Input100: {
|
||||
Type: 'Text',
|
||||
Value: 'New one',
|
||||
Name: 'description',
|
||||
Label: 'description'
|
||||
},
|
||||
Paragraph14: 'The following settings control the access of this shared folder from the local network, using the SMB/CIFS protocol.',
|
||||
Input101: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'smbaccess',
|
||||
Label: 'smbaccess',
|
||||
Options: [
|
||||
{
|
||||
Value: 'browseable',
|
||||
Text: 'Enabled, browseable'
|
||||
},
|
||||
{
|
||||
Value: 'non-browseable',
|
||||
Text: 'Enabled, hidden'
|
||||
},
|
||||
{
|
||||
Value: 'none',
|
||||
Text: 'No access'
|
||||
}
|
||||
]
|
||||
},
|
||||
Input102: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'recyclebin',
|
||||
Label: 'recyclebin',
|
||||
Options: [
|
||||
{
|
||||
Value: 'disabled',
|
||||
Text: 'disabled'
|
||||
},
|
||||
{
|
||||
Value: 'enabled',
|
||||
Text: 'Enabled, keep only the latest version'
|
||||
},
|
||||
{
|
||||
Value: 'keep-versions',
|
||||
Text: 'Enabled, keep a copy of all versions'
|
||||
}
|
||||
]
|
||||
},
|
||||
Input103: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'retention',
|
||||
Label: 'retention',
|
||||
Options: [
|
||||
{
|
||||
Value: '30',
|
||||
Text: 'one month'
|
||||
},
|
||||
{
|
||||
Value: '7',
|
||||
Text: 'one week'
|
||||
},
|
||||
{
|
||||
Value: '365',
|
||||
Text: 'one year'
|
||||
},
|
||||
{
|
||||
Value: '180',
|
||||
Text: 'six months'
|
||||
},
|
||||
{
|
||||
Value: 'unlimited',
|
||||
Text: 'unlimited'
|
||||
}
|
||||
]
|
||||
},
|
||||
Paragraph2: 'The following settings control the access of this shared folder using the HTTP/HTTPS protocol.',
|
||||
Input104: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'httpaccess',
|
||||
Label: 'httpaccess',
|
||||
Options: [
|
||||
{
|
||||
Value: 'global',
|
||||
Text: 'Entire Internet (no password required)'
|
||||
},
|
||||
{
|
||||
Value: 'global-pw',
|
||||
Text: 'Entire Internet (password required)'
|
||||
},
|
||||
{
|
||||
Value: 'global-pw-remote',
|
||||
Text: 'Entire Internet (password required outside local network)'
|
||||
},
|
||||
{
|
||||
Value: 'local',
|
||||
Text: 'Local network (no password required)'
|
||||
},
|
||||
{
|
||||
Value: 'local-pw',
|
||||
Text: 'Local network (password required)'
|
||||
},
|
||||
{
|
||||
Value: 'none',
|
||||
Text: 'No access'
|
||||
}
|
||||
]
|
||||
},
|
||||
Input105: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'webdav',
|
||||
Label: 'webdav',
|
||||
Options: [
|
||||
{
|
||||
Value: 'disabled',
|
||||
Text: 'disabled'
|
||||
},
|
||||
{
|
||||
Value: 'enabled',
|
||||
Text: 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
Input106: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'requireSSL',
|
||||
Label: 'requireSSL',
|
||||
Options: [
|
||||
{
|
||||
Value: 'disabled',
|
||||
Text: 'disabled'
|
||||
},
|
||||
{
|
||||
Value: 'enabled',
|
||||
Text: 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
Input107: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'indexes',
|
||||
Label: 'indexes',
|
||||
Options: [
|
||||
{
|
||||
Value: 'disabled',
|
||||
Text: 'disabled'
|
||||
},
|
||||
{
|
||||
Value: 'enabled',
|
||||
Text: 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
Input108: {
|
||||
Type: 'Select',
|
||||
Value: '',
|
||||
Name: 'dynamic',
|
||||
Label: 'dynamic',
|
||||
Options: [
|
||||
{
|
||||
Value: 'disabled',
|
||||
Text: 'disabled'
|
||||
},
|
||||
{
|
||||
Value: 'enabled',
|
||||
Text: 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
Input109: {
|
||||
Type: 'Submit',
|
||||
Value: 'Save',
|
||||
Name: 'Next',
|
||||
Label: 'Next'
|
||||
}
|
||||
},
|
||||
{
|
||||
Name: 'permissions',
|
||||
route: 'PERMISSIONS',
|
||||
Header: 'Create, modify, or remove shared folders',
|
||||
SubHeader: 'Access right management',
|
||||
Paragraph10: 'You can use this matrix to define groups and users access permissions.',
|
||||
Table2: {
|
||||
Type: 'Table',
|
||||
TableControl: 'Table2',
|
||||
TopHeadings: [
|
||||
'Groups',
|
||||
'Description',
|
||||
'Read / Write',
|
||||
'Read Only'
|
||||
],
|
||||
Columns: [
|
||||
'Table2-Groups',
|
||||
'Table2-Description',
|
||||
'Table2-Read / Write',
|
||||
'Table2-Read Only'
|
||||
]
|
||||
},
|
||||
Input110: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'shared',
|
||||
Name: 'writegroup',
|
||||
Label: 'writegroup'
|
||||
},
|
||||
Input111: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'shared',
|
||||
Name: 'readgroup',
|
||||
Label: 'readgroup'
|
||||
},
|
||||
Input112: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'changeofkey',
|
||||
Name: 'writegroup',
|
||||
Label: 'writegroup'
|
||||
},
|
||||
Input113: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'changeofkey',
|
||||
Name: 'readgroup',
|
||||
Label: 'readgroup'
|
||||
},
|
||||
Input114: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'domainadmins',
|
||||
Name: 'writegroup',
|
||||
Label: 'writegroup'
|
||||
},
|
||||
Input115: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'domainadmins',
|
||||
Name: 'readgroup',
|
||||
Label: 'readgroup'
|
||||
},
|
||||
Input116: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'ecmw2023grp',
|
||||
Name: 'writegroup',
|
||||
Label: 'writegroup'
|
||||
},
|
||||
Input117: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'ecmw2023grp',
|
||||
Name: 'readgroup',
|
||||
Label: 'readgroup'
|
||||
},
|
||||
Input118: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'miwgrp',
|
||||
Name: 'writegroup',
|
||||
Label: 'writegroup'
|
||||
},
|
||||
Input119: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'miwgrp',
|
||||
Name: 'readgroup',
|
||||
Label: 'readgroup'
|
||||
},
|
||||
Input120: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'brianr',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input121: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'brianr',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input122: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'cok1',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input123: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'cok1',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input124: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'cok2',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input125: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'cok2',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input126: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'dmarc',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input127: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'dmarc',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input128: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'ecmw2025',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input129: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'ecmw2025',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input130: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'englishcountrymusicweekend',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input131: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'englishcountrymusicweekend',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input132: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'guest',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input133: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'guest',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input134: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'katy',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input135: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'katy',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input136: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'more',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input137: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'more',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input138: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'nikki',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input139: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'nikki',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input140: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'phil',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input141: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'phil',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input142: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'sheila',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input143: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'sheila',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input144: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'smeserver',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input145: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'smeserver',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input146: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'zara.healy',
|
||||
Name: 'writeuser',
|
||||
Label: 'writeuser'
|
||||
},
|
||||
Input147: {
|
||||
Type: 'Checkbox',
|
||||
Value: 'zara.healy',
|
||||
Name: 'readuser',
|
||||
Label: 'readuser'
|
||||
},
|
||||
Input148: {
|
||||
Type: 'Submit',
|
||||
Value: 'Save',
|
||||
Name: 'Next',
|
||||
Label: 'Next'
|
||||
}
|
||||
},
|
||||
{
|
||||
Name: 'remove',
|
||||
route: 'REMOVE',
|
||||
Header: 'Create, modify, or remove shared folders',
|
||||
SubHeader: 'Remove shared folder',
|
||||
Paragraph11: 'You are about to remove the following shared folder',
|
||||
Paragraph21: 'All files belonging to this shared folder will be deleted.',
|
||||
Paragraph31: 'Are you sure you wish to remove it ?',
|
||||
Input149: {
|
||||
Type: 'Submit',
|
||||
Value: 'Cancel',
|
||||
Name: 'cancel',
|
||||
Label: 'cancel'
|
||||
},
|
||||
Input150: {
|
||||
Type: 'Submit',
|
||||
Value: 'Remove',
|
||||
Name: 'remove',
|
||||
Label: 'remove'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
56
json5/shared-folders_list.json5
Normal file
56
json5/shared-folders_list.json5
Normal file
@ -0,0 +1,56 @@
|
||||
//
|
||||
// Generated by sm1-html-2-json5 version:0.5 Chameleon version:3.8.1 On Python:3.12.3 at 2025-05-20 15:40:23
|
||||
//
|
||||
{
|
||||
'PackageName': 'shared-folders_list',
|
||||
'prefix': '',
|
||||
'MenuHeading': 'Miscellaneous',
|
||||
'MenuDescription': 'shared-folders_list',
|
||||
'MenuNavigation': '2000 400',
|
||||
'firstPanel': 'PARAMS',
|
||||
'signalEvent': 'smeserver-shared-folders_list-update',
|
||||
'html': [
|
||||
{
|
||||
'Name': 'params',
|
||||
'route': 'PARAMS',
|
||||
'Header': 'Create, modify, or remove shared folders',
|
||||
'SubHeader': 'Manage shared-folders_list settings:',
|
||||
'Paragraph1': 'You can remove any shared folder by clicking on the corresponding command next to the shared folder.',
|
||||
'Paragraph2': 'Create a new shared folder',
|
||||
'Link1': {
|
||||
'Type': 'Link',
|
||||
'href': 'shares?page=0&page_stack=&Next=Next&wherenext=CreateModify',
|
||||
'title': 'Create a new shared folder'
|
||||
},
|
||||
'Table1': {
|
||||
'Type': 'Table',
|
||||
'TableControl': 'Table1',
|
||||
'TopHeadings': [
|
||||
'Name',
|
||||
'Description',
|
||||
'Action'
|
||||
],
|
||||
'Columns': [
|
||||
'Table1-Name',
|
||||
'Table1-Description',
|
||||
'Table1-Action'
|
||||
]
|
||||
},
|
||||
'Link2': {
|
||||
'Type': 'Link',
|
||||
'href': 'shares?page=;page_stack=;wherenext=Permissions&name=africa2023',
|
||||
'title': 'Permissions'
|
||||
},
|
||||
'Link3': {
|
||||
'Type': 'Link',
|
||||
'href': 'shares?page=;page_stack=;wherenext=CreateModify&action=modify&name=africa2023',
|
||||
'title': 'Modify'
|
||||
},
|
||||
'Link4': {
|
||||
'Type': 'Link',
|
||||
'href': 'shares?page=;page_stack=;wherenext=Remove&name=africa2023&description=New one',
|
||||
'title': 'Remove'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
198
json5/shared-folders_modify.json5
Normal file
198
json5/shared-folders_modify.json5
Normal file
@ -0,0 +1,198 @@
|
||||
//
|
||||
// Generated by sm1-html-2-json5 version:0.5 Chameleon version:3.8.1 On Python:3.12.3 at 2025-05-20 15:40:34
|
||||
//
|
||||
{
|
||||
'PackageName': 'shared-folders_modify',
|
||||
'prefix': '',
|
||||
'MenuHeading': 'Miscellaneous',
|
||||
'MenuDescription': 'shared-folders_modify',
|
||||
'MenuNavigation': '2000 400',
|
||||
'firstPanel': 'PARAMS',
|
||||
'signalEvent': 'smeserver-shared-folders_modify-update',
|
||||
'html': [
|
||||
{
|
||||
'Name': 'params',
|
||||
'route': 'PARAMS',
|
||||
'Header': 'Create, modify, or remove shared folders',
|
||||
'SubHeader': 'Create or modify a shared folder',
|
||||
'Input1': {
|
||||
'Type': 'Text',
|
||||
'Value': 'New one',
|
||||
'Name': 'description',
|
||||
'Label': 'description'
|
||||
},
|
||||
'Paragraph1': 'The following settings control the access of this shared folder from the local network, using the SMB/CIFS protocol.',
|
||||
'Input2': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'smbaccess',
|
||||
'Label': 'smbaccess',
|
||||
'Options': [
|
||||
{
|
||||
'Value': 'browseable',
|
||||
'Text': 'Enabled, browseable'
|
||||
},
|
||||
{
|
||||
'Value': 'non-browseable',
|
||||
'Text': 'Enabled, hidden'
|
||||
},
|
||||
{
|
||||
'Value': 'none',
|
||||
'Text': 'No access'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Input3': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'recyclebin',
|
||||
'Label': 'recyclebin',
|
||||
'Options': [
|
||||
{
|
||||
'Value': 'disabled',
|
||||
'Text': 'disabled'
|
||||
},
|
||||
{
|
||||
'Value': 'enabled',
|
||||
'Text': 'Enabled, keep only the latest version'
|
||||
},
|
||||
{
|
||||
'Value': 'keep-versions',
|
||||
'Text': 'Enabled, keep a copy of all versions'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Input4': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'retention',
|
||||
'Label': 'retention',
|
||||
'Options': [
|
||||
{
|
||||
'Value': '30',
|
||||
'Text': 'one month'
|
||||
},
|
||||
{
|
||||
'Value': '7',
|
||||
'Text': 'one week'
|
||||
},
|
||||
{
|
||||
'Value': '365',
|
||||
'Text': 'one year'
|
||||
},
|
||||
{
|
||||
'Value': '180',
|
||||
'Text': 'six months'
|
||||
},
|
||||
{
|
||||
'Value': 'unlimited',
|
||||
'Text': 'unlimited'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Paragraph2': 'The following settings control the access of this shared folder using the HTTP/HTTPS protocol.',
|
||||
'Input5': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'httpaccess',
|
||||
'Label': 'httpaccess',
|
||||
'Options': [
|
||||
{
|
||||
'Value': 'global',
|
||||
'Text': 'Entire Internet (no password required)'
|
||||
},
|
||||
{
|
||||
'Value': 'global-pw',
|
||||
'Text': 'Entire Internet (password required)'
|
||||
},
|
||||
{
|
||||
'Value': 'global-pw-remote',
|
||||
'Text': 'Entire Internet (password required outside local network)'
|
||||
},
|
||||
{
|
||||
'Value': 'local',
|
||||
'Text': 'Local network (no password required)'
|
||||
},
|
||||
{
|
||||
'Value': 'local-pw',
|
||||
'Text': 'Local network (password required)'
|
||||
},
|
||||
{
|
||||
'Value': 'none',
|
||||
'Text': 'No access'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Input6': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'webdav',
|
||||
'Label': 'webdav',
|
||||
'Options': [
|
||||
{
|
||||
'Value': 'disabled',
|
||||
'Text': 'disabled'
|
||||
},
|
||||
{
|
||||
'Value': 'enabled',
|
||||
'Text': 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Input7': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'requireSSL',
|
||||
'Label': 'requireSSL',
|
||||
'Options': [
|
||||
{
|
||||
'Value': 'disabled',
|
||||
'Text': 'disabled'
|
||||
},
|
||||
{
|
||||
'Value': 'enabled',
|
||||
'Text': 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Input8': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'indexes',
|
||||
'Label': 'indexes',
|
||||
'Options': [
|
||||
{
|
||||
'Value': 'disabled',
|
||||
'Text': 'disabled'
|
||||
},
|
||||
{
|
||||
'Value': 'enabled',
|
||||
'Text': 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Input9': {
|
||||
'Type': 'Select',
|
||||
'Value': '',
|
||||
'Name': 'dynamic',
|
||||
'Label': 'dynamic',
|
||||
'Options': [
|
||||
{
|
||||
'Value': 'disabled',
|
||||
'Text': 'disabled'
|
||||
},
|
||||
{
|
||||
'Value': 'enabled',
|
||||
'Text': 'enabled'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Input10': {
|
||||
'Type': 'Submit',
|
||||
'Value': 'Save',
|
||||
'Name': 'Next',
|
||||
'Label': 'Next'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
271
json5/shared-folders_perms.json5
Normal file
271
json5/shared-folders_perms.json5
Normal file
@ -0,0 +1,271 @@
|
||||
//
|
||||
// Generated by sm1-html-2-json5 version:0.5 Chameleon version:3.8.1 On Python:3.12.3 at 2025-05-20 15:41:06
|
||||
//
|
||||
{
|
||||
'PackageName': 'shared-folders_perms',
|
||||
'prefix': '',
|
||||
'MenuHeading': 'Miscellaneous',
|
||||
'MenuDescription': 'shared-folders_perms',
|
||||
'MenuNavigation': '2000 400',
|
||||
'firstPanel': 'PARAMS',
|
||||
'signalEvent': 'smeserver-shared-folders_perms-update',
|
||||
'html': [
|
||||
{
|
||||
'Name': 'params',
|
||||
'route': 'PARAMS',
|
||||
'Header': 'Create, modify, or remove shared folders',
|
||||
'SubHeader': 'Access right management',
|
||||
'Paragraph1': 'You can use this matrix to define groups and users access permissions.',
|
||||
'Table1': {
|
||||
'Type': 'Table',
|
||||
'TableControl': 'Table1',
|
||||
'TopHeadings': [
|
||||
'Groups',
|
||||
'Description',
|
||||
'Read / Write',
|
||||
'Read Only'
|
||||
],
|
||||
'Columns': [
|
||||
'Table1-Groups',
|
||||
'Table1-Description',
|
||||
'Table1-Read / Write',
|
||||
'Table1-Read Only'
|
||||
]
|
||||
},
|
||||
'Input1': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'shared',
|
||||
'Name': 'writegroup',
|
||||
'Label': 'writegroup'
|
||||
},
|
||||
'Input2': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'shared',
|
||||
'Name': 'readgroup',
|
||||
'Label': 'readgroup'
|
||||
},
|
||||
'Input3': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'changeofkey',
|
||||
'Name': 'writegroup',
|
||||
'Label': 'writegroup'
|
||||
},
|
||||
'Input4': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'changeofkey',
|
||||
'Name': 'readgroup',
|
||||
'Label': 'readgroup'
|
||||
},
|
||||
'Input5': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'domainadmins',
|
||||
'Name': 'writegroup',
|
||||
'Label': 'writegroup'
|
||||
},
|
||||
'Input6': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'domainadmins',
|
||||
'Name': 'readgroup',
|
||||
'Label': 'readgroup'
|
||||
},
|
||||
'Input7': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'ecmw2023grp',
|
||||
'Name': 'writegroup',
|
||||
'Label': 'writegroup'
|
||||
},
|
||||
'Input8': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'ecmw2023grp',
|
||||
'Name': 'readgroup',
|
||||
'Label': 'readgroup'
|
||||
},
|
||||
'Input9': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'miwgrp',
|
||||
'Name': 'writegroup',
|
||||
'Label': 'writegroup'
|
||||
},
|
||||
'Input10': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'miwgrp',
|
||||
'Name': 'readgroup',
|
||||
'Label': 'readgroup'
|
||||
},
|
||||
'Input11': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'brianr',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input12': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'brianr',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input13': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'cok1',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input14': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'cok1',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input15': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'cok2',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input16': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'cok2',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input17': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'dmarc',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input18': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'dmarc',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input19': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'ecmw2025',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input20': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'ecmw2025',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input21': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'englishcountrymusicweekend',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input22': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'englishcountrymusicweekend',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input23': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'guest',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input24': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'guest',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input25': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'katy',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input26': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'katy',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input27': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'more',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input28': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'more',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input29': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'nikki',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input30': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'nikki',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input31': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'phil',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input32': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'phil',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input33': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'sheila',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input34': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'sheila',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input35': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'smeserver',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input36': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'smeserver',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input37': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'zara.healy',
|
||||
'Name': 'writeuser',
|
||||
'Label': 'writeuser'
|
||||
},
|
||||
'Input38': {
|
||||
'Type': 'Checkbox',
|
||||
'Value': 'zara.healy',
|
||||
'Name': 'readuser',
|
||||
'Label': 'readuser'
|
||||
},
|
||||
'Input39': {
|
||||
'Type': 'Submit',
|
||||
'Value': 'Save',
|
||||
'Name': 'Next',
|
||||
'Label': 'Next'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
35
json5/shared-folders_remove.json5
Normal file
35
json5/shared-folders_remove.json5
Normal file
@ -0,0 +1,35 @@
|
||||
//
|
||||
// Generated by sm1-html-2-json5 version:0.5 Chameleon version:3.8.1 On Python:3.12.3 at 2025-05-20 15:41:15
|
||||
//
|
||||
{
|
||||
'PackageName': 'shared-folders_remove',
|
||||
'prefix': '',
|
||||
'MenuHeading': 'Miscellaneous',
|
||||
'MenuDescription': 'shared-folders_remove',
|
||||
'MenuNavigation': '2000 400',
|
||||
'firstPanel': 'PARAMS',
|
||||
'signalEvent': 'smeserver-shared-folders_remove-update',
|
||||
'html': [
|
||||
{
|
||||
'Name': 'params',
|
||||
'route': 'PARAMS',
|
||||
'Header': 'Create, modify, or remove shared folders',
|
||||
'SubHeader': 'Remove shared folder',
|
||||
'Paragraph1': 'You are about to remove the following shared folder',
|
||||
'Paragraph2': 'All files belonging to this shared folder will be deleted.',
|
||||
'Paragraph3': 'Are you sure you wish to remove it ?',
|
||||
'Input1': {
|
||||
'Type': 'Submit',
|
||||
'Value': 'Cancel',
|
||||
'Name': 'cancel',
|
||||
'Label': 'cancel'
|
||||
},
|
||||
'Input2': {
|
||||
'Type': 'Submit',
|
||||
'Value': 'Remove',
|
||||
'Name': 'remove',
|
||||
'Label': 'remove'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
96
json5_fix_format.py
Normal file
96
json5_fix_format.py
Normal file
@ -0,0 +1,96 @@
|
||||
import re
|
||||
import json5
|
||||
|
||||
def fix_json5_syntax(text):
|
||||
# Remove comments
|
||||
text = re.sub(r'//.*', '', text)
|
||||
text = re.sub(r'/\*.*?\*/', '', text, flags=re.DOTALL)
|
||||
# Replace single quotes with double quotes
|
||||
text = re.sub(r"'", '"', text)
|
||||
# Add missing commas between objects in arrays (naive)
|
||||
text = re.sub(r'(\})(\s*\{)', r'\1,\2', text)
|
||||
# Remove trailing commas before closing } or ]
|
||||
text = re.sub(r',(\s*[}\]])', r'\1', text)
|
||||
return text
|
||||
|
||||
def renumber_inputs(obj, start=100):
|
||||
"""
|
||||
Recursively renumber InputN keys to Input{start}, Input{start+1}, ...
|
||||
Returns the new object and the next available number.
|
||||
"""
|
||||
if isinstance(obj, dict):
|
||||
new_obj = {}
|
||||
for k, v in obj.items():
|
||||
m = re.match(r'Input(\d+)', k)
|
||||
if m:
|
||||
new_key = f"Input{start}"
|
||||
start += 1
|
||||
else:
|
||||
new_key = k
|
||||
new_obj[new_key], start = renumber_inputs(v, start)
|
||||
return new_obj, start
|
||||
elif isinstance(obj, list):
|
||||
new_list = []
|
||||
for item in obj:
|
||||
new_item, start = renumber_inputs(item, start)
|
||||
new_list.append(new_item)
|
||||
return new_list, start
|
||||
else:
|
||||
return obj, start
|
||||
|
||||
def dict_to_json5(obj, indent=0):
|
||||
"""Convert a dict to JSON5-like text with unquoted field names."""
|
||||
IND = ' '
|
||||
if isinstance(obj, dict):
|
||||
items = []
|
||||
for k, v in obj.items():
|
||||
# Only quote keys if necessary (not a valid identifier)
|
||||
if re.match(r'^[A-Za-z_]\w*$', k):
|
||||
key = k
|
||||
else:
|
||||
key = f'"{k}"'
|
||||
items.append(f"{IND* (indent+1)}{key}: {dict_to_json5(v, indent+1)}")
|
||||
return '{\n' + ',\n'.join(items) + f'\n{IND*indent}' + '}'
|
||||
elif isinstance(obj, list):
|
||||
items = [f"{IND*(indent+1)}{dict_to_json5(v, indent+1)}" for v in obj]
|
||||
return '[\n' + ',\n'.join(items) + f'\n{IND*indent}' + ']'
|
||||
elif isinstance(obj, str):
|
||||
# Always single-quote strings for JSON5 style
|
||||
return "'" + obj.replace("'", "\\'") + "'"
|
||||
elif obj is True:
|
||||
return 'true'
|
||||
elif obj is False:
|
||||
return 'false'
|
||||
elif obj is None:
|
||||
return 'null'
|
||||
else:
|
||||
return str(obj)
|
||||
|
||||
def main():
|
||||
input_file = 'json5/shared-folders.json5'
|
||||
output_file = 'json5/shared-folders-renumbered.json5'
|
||||
|
||||
# Read and fix the JSON5 input
|
||||
with open(input_file, 'r', encoding='utf-8') as f:
|
||||
raw = f.read()
|
||||
|
||||
fixed = fix_json5_syntax(raw)
|
||||
|
||||
# Parse with json5
|
||||
try:
|
||||
data = json5.loads(fixed)
|
||||
except Exception as e:
|
||||
print("Error parsing JSON5:", e)
|
||||
return
|
||||
|
||||
# Renumber Input fields
|
||||
data, _ = renumber_inputs(data, 100)
|
||||
|
||||
# Write out as JSON5 with unquoted field names
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
f.write(dict_to_json5(data, indent=0))
|
||||
|
||||
print(f"Renumbered file written to: {output_file}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
x
Reference in New Issue
Block a user