Remove headfings in Error and status and sort out non global opening of DBs
This commit is contained in:
commit
9fe0a050cf
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
@ -1,63 +0,0 @@
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
|
||||
#
|
||||
#
|
||||
# Routines to be edited by the developer to provide validation for parameters
|
||||
# and provison of the control data for table(s)
|
||||
#
|
||||
use esmith::util;
|
||||
use esmith::HostsDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
|
||||
# Validation routines - parameters for each panel
|
||||
|
||||
sub validate_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
# Get control data for tables(s)
|
||||
|
||||
|
||||
# Return hash with values from row in which link clicked on table
|
||||
|
||||
sub get_selected_PARAMS {
|
||||
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_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub create_link{
|
||||
# WIP
|
||||
my ($c,$route, $panel, $index) = shift;
|
||||
my $link = "$route?trt=$panel&Selected=$index";
|
||||
return $link;
|
||||
}
|
||||
1;
|
@ -1,63 +0,0 @@
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-18 09:02:36
|
||||
#
|
||||
#
|
||||
# Routines to be edited by the developer to provide validation for parameters
|
||||
# and provison of the control data for table(s)
|
||||
# lcPackageName=json5_dict["PackageName"].lower(),
|
||||
|
||||
use esmith::HostsDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
|
||||
# Validation routines - parameters for each panel
|
||||
|
||||
sub validate_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
# Get control data for tables(s)
|
||||
|
||||
|
||||
# Return hash with values from row in which link clicked on table
|
||||
|
||||
sub get_selected_PARAMS {
|
||||
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_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub create_link{
|
||||
# WIP
|
||||
my ($c,$route, $panel, $index) = shift;
|
||||
my $link = "$route?trt=$panel&Selected=$index";
|
||||
return $link;
|
||||
}
|
||||
1;
|
@ -1,243 +0,0 @@
|
||||
package SrvMngr::Controller::CreateStarterWebsite;
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
|
||||
#
|
||||
#----------------------------------------------------------------------
|
||||
# heading : Miscellaneous
|
||||
# description : Create Starter Website
|
||||
# navigation : 2000 400
|
||||
#
|
||||
# name : createstarterwebsite, method : get, url : /createstarterwebsite, ctlact : CreateStarterWebsite#main
|
||||
# name : createstarterwebsiteu, method : post, url : /createstarterwebsiteu, ctlact : CreateStarterWebsite#do_update
|
||||
# name : createstarterwebsited, method : get, url : /createstarterwebsited, ctlact : CreateStarterWebsite#do_display
|
||||
#
|
||||
# routes : end
|
||||
#
|
||||
# Documentation: https://wiki.contribs.org/CreateStarterWebsite
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# 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::HostsDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
|
||||
require '/usr/share/smanager/lib/SrvMngr/Controller/CreateStarterWebsite-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 );
|
||||
|
||||
my %csw_data = ();
|
||||
my $title = $c->l('csw_Create_Starter_Website');
|
||||
my $modul = '';
|
||||
|
||||
$csw_data{'trt'} = 'PARAMS';
|
||||
|
||||
#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
|
||||
|
||||
|
||||
# and table control fields
|
||||
|
||||
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
csw_data => \%csw_data
|
||||
);
|
||||
$c->render( template => "createstarterwebsite" );
|
||||
}
|
||||
|
||||
# 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 %csw_data = ();
|
||||
my $title = $c->l('csw_Create_Starter_Website');
|
||||
|
||||
# Accessing all POST parameters
|
||||
my %params = $c->req->params->to_hash;
|
||||
|
||||
# Get number of POST parameters
|
||||
my $num_params = keys %params;
|
||||
|
||||
#Params are available in the hash "params" - copy to the prefix_data hash
|
||||
while (my ($key, $value) = each %{$c->req->params->to_hash}) {
|
||||
$csw_data{$key} = $value;
|
||||
}
|
||||
|
||||
# the value of trt will tell you which panel has returned
|
||||
my $trt = $c->param('trt') || 'PARAMS'; #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 'PARAMS'){
|
||||
#Validate form parameters for panel PARAMS
|
||||
$ret = $c->validate_PARAMS(\%csw_data);
|
||||
$thispanel = 'PARAMS';
|
||||
}
|
||||
|
||||
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->render("createstarterwebsite");
|
||||
} else {
|
||||
#Do whatever is needed, including writing values to the DB
|
||||
|
||||
if ($trt eq 'PARAMS'){
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_PARAMS(\%csw_data);
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->render("createstarterwebsite");
|
||||
} else {
|
||||
$c->stash( success => $c->l('csw_PARAMS_panel_action_was_successful')); #A bit bland - edit it in the lex file
|
||||
}
|
||||
}
|
||||
|
||||
# and call any signal-events needed
|
||||
|
||||
|
||||
# Setup shared data and call panel
|
||||
$c->stash(
|
||||
title => $title,
|
||||
csw_data => \%csw_data
|
||||
);
|
||||
if ('none' eq 'none') {
|
||||
$csw_data{'trt'} = 'PARAMS';
|
||||
} else {
|
||||
$csw_data{'trt'} = 'none';
|
||||
}
|
||||
$c->render("createstarterwebsite");
|
||||
}
|
||||
}
|
||||
|
||||
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 = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
my %csw_data = ();
|
||||
my $title = $c->l('csw_Create_Starter_Website');
|
||||
|
||||
# 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}) {
|
||||
$csw_data{$key} = $value;
|
||||
}
|
||||
|
||||
# the value of trt will tell you which panel has returned
|
||||
my $trt = $c->param('trt') || 'PARAMS'; #Indicates where to go now
|
||||
|
||||
# Now add in the params from the selected row from the table
|
||||
|
||||
my %selectedrow;
|
||||
|
||||
if ($trt eq 'PARAMS'){
|
||||
#Validate form parameters for panel PARAMS
|
||||
%selectedrow = $c->get_selected_PARAMS($csw_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){
|
||||
$csw_data{$key} = $value;
|
||||
}
|
||||
# Where to go now
|
||||
$csw_data{'trt'} = $trt;
|
||||
|
||||
# Data for panel
|
||||
$c->stash(
|
||||
title => $title,
|
||||
csw_data => \%csw_data
|
||||
);
|
||||
$c->render("createstarterwebsite");
|
||||
}
|
||||
1;
|
@ -1,101 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
|
||||
%#
|
||||
<div id="CreateStarterWebsite-PARAMS" class="partial CreateStarterWebsite-PARAMS">
|
||||
<script>
|
||||
window.onload = function() {
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
<h2>
|
||||
%= l('csw_Hello_PARAMS');
|
||||
</h2>
|
||||
% my $btn = l('csw_APPLY');
|
||||
%= form_for "CreateStarterWebsited" => (method => 'POST') => begin
|
||||
|
||||
% param 'trt' => $csw_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $csw_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('csw_Create_a_starter_website')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('csw_Manage_CreateStarterWebsite_settings:')%></h2>
|
||||
|
||||
<p class='paragraph para1'>
|
||||
%=l('csw_To_create_a_simple_web')
|
||||
</p>
|
||||
|
||||
<p class='paragraph para2'>
|
||||
%=l('csw_You_can_leave_any_field')
|
||||
</p>
|
||||
|
||||
<p class='paragraph para3'>
|
||||
%=l('csw_The_text_that_you_enter')
|
||||
</p>
|
||||
|
||||
<p class='paragraph para4'>
|
||||
%=l('csw_Do_not_use_this_optionif')
|
||||
</p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('csw_')
|
||||
</span><span class=data>
|
||||
% param 'companyName' => $csw_data->{companyName} unless param 'companyName';
|
||||
%= text_field 'companyName', size => '50', class => 'textinput companyName' , pattern=>'.*' , placeholder=>'companyName'
|
||||
<br></span></p>
|
||||
|
||||
<p class='paragraph para5'>
|
||||
%=l('csw_First_header,_typically_used_for')
|
||||
</p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('csw_')
|
||||
</span><span class=data>
|
||||
% param 'header1' => $csw_data->{header1} unless param 'header1';
|
||||
%= text_field 'header1', size => '50', class => 'textinput header1' , pattern=>'.*' , placeholder=>'header1'
|
||||
<br></span></p>
|
||||
|
||||
<p class='paragraph para6'>
|
||||
%=l('csw_Text_following_first_header,_typically')
|
||||
</p>
|
||||
|
||||
<span class=label>
|
||||
%=l('csw_')
|
||||
</span><span class=data>
|
||||
% param 'text1' => $csw_data->{text1} unless param 'text1';
|
||||
%= text_area 'text1', cols=>40, rows=>10
|
||||
</span><br>
|
||||
|
||||
<p class='paragraph para7'>
|
||||
%=l('csw_Second_header,_typically_used_for')
|
||||
</p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('csw_')
|
||||
</span><span class=data>
|
||||
% param 'header2' => $csw_data->{header2} unless param 'header2';
|
||||
%= text_field 'header2', size => '50', class => 'textinput header2' , pattern=>'.*' , placeholder=>'header2'
|
||||
<br></span></p>
|
||||
|
||||
<p class='paragraph para8'>
|
||||
%=l('csw_Text_following_second_header,_typically')
|
||||
</p>
|
||||
|
||||
<span class=label>
|
||||
%=l('csw_')
|
||||
</span><span class=data>
|
||||
% param 'text2' => $csw_data->{text2} unless param 'text2';
|
||||
%= text_area 'text2', cols=>40, rows=>10
|
||||
</span><br>
|
||||
|
||||
<p class='paragraph para9'>
|
||||
%=l('csw_When_you_create_this_web')
|
||||
</p>
|
||||
|
||||
<p class='paragraph para10'>
|
||||
%=l('csw_Do_you_wish_to_proceed?')
|
||||
</p>
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
@ -1,24 +0,0 @@
|
||||
/*
|
||||
Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
|
||||
*/
|
||||
.CreateStarterWebsite-panel {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.para1 {}
|
||||
.para2 {}
|
||||
.para3 {}
|
||||
.para4 {}
|
||||
.text1 {}
|
||||
.para5 {}
|
||||
.text2 {}
|
||||
.para6 {}
|
||||
.text3 {}
|
||||
.para7 {}
|
||||
.text4 {}
|
||||
.para8 {}
|
||||
.text5 {}
|
||||
.para9 {}
|
||||
.para10 {}
|
||||
.subm6 {}
|
@ -1,52 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
|
||||
%#
|
||||
% layout 'default', title => "Sme server 2 - Create Starter Website", share_dir => './';
|
||||
%# css specific to this panel:
|
||||
% content_for 'module' => begin
|
||||
%= stylesheet '/css/createstarterwebsite.css'
|
||||
<div id="module" class="module CreateStarterWebsite-panel">
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
</p>
|
||||
% }
|
||||
|
||||
<h1><%=$title%></h1>
|
||||
|
||||
% if ( stash('modul') ) {
|
||||
%= $c->render_to_string(inline => stash('modul') );
|
||||
% }
|
||||
|
||||
%if ($csw_data->{first}) {
|
||||
<br><p>
|
||||
%=$c->render_to_string(inline =>$c->l($csw_data->{first}))
|
||||
</p>
|
||||
|
||||
%} elsif ($csw_data->{success}) {
|
||||
<div class='sme-border'>
|
||||
<h2> Operation Status Report</h2><p>
|
||||
%= $c->l($csw_data->{success});
|
||||
</p>
|
||||
</div>
|
||||
|
||||
%} elsif ($csw_data->{error}) {
|
||||
<div class='sme-error'>
|
||||
<h2> Operation Status Report - error</h2><p>
|
||||
%= $c->l($csw_data->{error});
|
||||
</p>
|
||||
</div>
|
||||
%}
|
||||
|
||||
%#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 ($csw_data->{trt} eq "PARAMS") {
|
||||
%= include 'partials/_csw_PARAMS'
|
||||
%}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
%end
|
@ -1,20 +0,0 @@
|
||||
#
|
||||
# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
|
||||
#
|
||||
'csw_You_can_leave_any_field' => 'You can leave any field blank if you do not need it. ',
|
||||
'csw_Do_you_wish_to_proceed?' => 'Do you wish to proceed?',
|
||||
'csw_Text_following_second_header,_typically' => 'Text following second header, Typically used for contact or ordering information:',
|
||||
'csw_Create_Starter_Website' => 'Create Starter Website',
|
||||
'csw_Hello_PARAMS' => 'Hello PARAMS',
|
||||
'csw_The_text_that_you_enter' => 'The text that you enter below will be line wrapped for a nicer appearance in your web page. Leave a blank line whenever you want to start a new paragraph. If you need to force a line break without starting a new paragraph (for example after each line of a mailing address), Then type the four-character sequence',
|
||||
'csw_Text_following_first_header,_typically' => 'Text following first header, Typically used for a paragraph of marketing information. ',
|
||||
'csw_Second_header,_typically_used_for' => 'Second header, Typically used for short phrases such as For more information or To order our products:',
|
||||
'csw_When_you_create_this_web' => 'When you create this web page, The file index. Htm will be overwritten in your web site directory. ',
|
||||
'csw_Manage_CreateStarterWebsite_settings:' => 'Manage CreateStarterWebsite settings:',
|
||||
'csw_Do_not_use_this_optionif' => 'Do not use this optionif you have already customized your web site, Since it will overwrite the index. Htm file in your web site directory. ',
|
||||
'csw_Create_a_starter_website' => 'Create a starter website',
|
||||
'csw_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
|
||||
'csw_To_create_a_simple_web' => 'To create a simple web page for your company, Fill in the fields below and click onCreate. ',
|
||||
'csw_First_header,_typically_used_for' => 'First header, Typically used for short phrases such as Leader in the field of textile manufacturing',
|
||||
'csw_APPLY' => 'Apply',
|
||||
'csw_' => '',
|
@ -1,87 +0,0 @@
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
|
||||
#
|
||||
#
|
||||
# Routines to be edited by the developer to provide validation for parameters
|
||||
# and provison of the control data for table(s)
|
||||
#
|
||||
use esmith::util;
|
||||
use esmith::HostsDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
|
||||
# Validation routines - parameters for each panel
|
||||
|
||||
sub validate_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
# Get control data for tables(s)
|
||||
|
||||
sub get_Table1 {
|
||||
# Return an array of hashes of the contents for each row and column for Table1
|
||||
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
|
||||
my $c = shift;
|
||||
my $control_data = $self->stash('Table1');
|
||||
my @ret = {}
|
||||
# foreach my $colHead (@$control_data) {
|
||||
# my ret{$colHead} = "$colhead-1"
|
||||
# };
|
||||
return \@ret
|
||||
}
|
||||
|
||||
sub get_Table2 {
|
||||
# Return an array of hashes of the contents for each row and column for Table2
|
||||
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
|
||||
my $c = shift;
|
||||
my $control_data = $self->stash('Table2');
|
||||
my @ret = {}
|
||||
# foreach my $colHead (@$control_data) {
|
||||
# my ret{$colHead} = "$colhead-1"
|
||||
# };
|
||||
return \@ret
|
||||
}
|
||||
|
||||
|
||||
# Return hash with values from row in which link clicked on table
|
||||
|
||||
sub get_selected_PARAMS {
|
||||
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_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub create_link{
|
||||
# WIP
|
||||
my ($c,$route, $panel, $index) = shift;
|
||||
my $link = "$route?trt=$panel&Selected=$index";
|
||||
return $link;
|
||||
}
|
||||
1;
|
@ -1,87 +0,0 @@
|
||||
#
|
||||
# Routines to be edited by the developer to provide validation for parameters
|
||||
# and provison of the control data for table(s)
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-16 11:18
|
||||
#
|
||||
|
||||
use esmith::util;
|
||||
use esmith::HostsDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
|
||||
# Validation routines - parameters for each panel
|
||||
|
||||
sub validate_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
# Get control data for tables(s)
|
||||
|
||||
sub get_Table1 {
|
||||
# Return an array of hashes of the contents for each row and column for Table1
|
||||
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
|
||||
my $c = shift;
|
||||
my $control_data = $self->stash('Table1');
|
||||
my @ret = {}
|
||||
# foreach my $colHead (@$control_data) {
|
||||
# my ret{$colHead} = "$colhead-1"
|
||||
# };
|
||||
return \@ret
|
||||
}
|
||||
|
||||
sub get_Table2 {
|
||||
# Return an array of hashes of the contents for each row and column for Table2
|
||||
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
|
||||
my $c = shift;
|
||||
my $control_data = $self->stash('Table2');
|
||||
my @ret = {}
|
||||
# foreach my $colHead (@$control_data) {
|
||||
# my ret{$colHead} = "$colhead-1"
|
||||
# };
|
||||
return \@ret
|
||||
}
|
||||
|
||||
|
||||
# Return hash with values from row in which link clicked on table
|
||||
|
||||
sub get_selected_PARAMS {
|
||||
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_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = 'ok';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub create_link{
|
||||
# WIP
|
||||
my ($c,$route, $panel, $index) = shift;
|
||||
my $link = "$route?trt=$panel&Selected=$index";
|
||||
return $link;
|
||||
}
|
||||
1;
|
@ -1,245 +0,0 @@
|
||||
package SrvMngr::Controller::DiskUsage;
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
|
||||
#
|
||||
#----------------------------------------------------------------------
|
||||
# heading : Miscellaneous
|
||||
# description : Disk Usage
|
||||
# navigation : 2000 400
|
||||
#
|
||||
# name : diskusage, method : get, url : /diskusage, ctlact : DiskUsage#main
|
||||
# name : diskusageu, method : post, url : /diskusageu, ctlact : DiskUsage#do_update
|
||||
# name : diskusaged, method : get, url : /diskusaged, ctlact : DiskUsage#do_display
|
||||
#
|
||||
# routes : end
|
||||
#
|
||||
# Documentation: https://wiki.contribs.org/DiskUsage
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# 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::HostsDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
|
||||
require '/usr/share/smanager/lib/SrvMngr/Controller/DiskUsage-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 );
|
||||
|
||||
my %du_data = ();
|
||||
my $title = $c->l('du_Disk_Usage');
|
||||
my $modul = '';
|
||||
|
||||
$du_data{'trt'} = 'PARAMS';
|
||||
|
||||
#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
|
||||
|
||||
|
||||
# and table control fields
|
||||
$c->stash(Table1=>$c->get_Table1());
|
||||
$c->stash(Table2=>$c->get_Table2());
|
||||
|
||||
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
du_data => \%du_data
|
||||
);
|
||||
$c->render( template => "diskusage" );
|
||||
}
|
||||
|
||||
# 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 %du_data = ();
|
||||
my $title = $c->l('du_Disk_Usage');
|
||||
|
||||
# Accessing all POST parameters
|
||||
my %params = $c->req->params->to_hash;
|
||||
|
||||
# Get number of POST parameters
|
||||
my $num_params = keys %params;
|
||||
|
||||
#Params are available in the hash "params" - copy to the prefix_data hash
|
||||
while (my ($key, $value) = each %{$c->req->params->to_hash}) {
|
||||
$du_data{$key} = $value;
|
||||
}
|
||||
|
||||
# the value of trt will tell you which panel has returned
|
||||
my $trt = $c->param('trt') || 'PARAMS'; #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 'PARAMS'){
|
||||
#Validate form parameters for panel PARAMS
|
||||
$ret = $c->validate_PARAMS(\%du_data);
|
||||
$thispanel = 'PARAMS';
|
||||
}
|
||||
|
||||
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->render("diskusage");
|
||||
} else {
|
||||
#Do whatever is needed, including writing values to the DB
|
||||
|
||||
if ($trt eq 'PARAMS'){
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_PARAMS(\%du_data);
|
||||
if ($ret ne "ok") {
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->render("diskusage");
|
||||
} else {
|
||||
$c->stash( success => $c->l('du_PARAMS_panel_action_was_successful')); #A bit bland - edit it in the lex file
|
||||
}
|
||||
}
|
||||
|
||||
# and call any signal-events needed
|
||||
|
||||
|
||||
# Setup shared data and call panel
|
||||
$c->stash(
|
||||
title => $title,
|
||||
du_data => \%du_data
|
||||
);
|
||||
if ('none' eq 'none') {
|
||||
$du_data{'trt'} = 'PARAMS';
|
||||
} else {
|
||||
$du_data{'trt'} = 'none';
|
||||
}
|
||||
$c->render("diskusage");
|
||||
}
|
||||
}
|
||||
|
||||
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 = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
my %du_data = ();
|
||||
my $title = $c->l('du_Disk_Usage');
|
||||
|
||||
# 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}) {
|
||||
$du_data{$key} = $value;
|
||||
}
|
||||
|
||||
# the value of trt will tell you which panel has returned
|
||||
my $trt = $c->param('trt') || 'PARAMS'; #Indicates where to go now
|
||||
|
||||
# Now add in the params from the selected row from the table
|
||||
|
||||
my %selectedrow;
|
||||
|
||||
if ($trt eq 'PARAMS'){
|
||||
#Validate form parameters for panel PARAMS
|
||||
%selectedrow = $c->get_selected_PARAMS($du_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){
|
||||
$du_data{$key} = $value;
|
||||
}
|
||||
# Where to go now
|
||||
$du_data{'trt'} = $trt;
|
||||
|
||||
# Data for panel
|
||||
$c->stash(
|
||||
title => $title,
|
||||
du_data => \%du_data
|
||||
);
|
||||
$c->render("diskusage");
|
||||
}
|
||||
1;
|
@ -1,83 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
|
||||
%#
|
||||
<div id="DiskUsage-PARAMS" class="partial DiskUsage-PARAMS">
|
||||
<script>
|
||||
window.onload = function() {
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
<h2>
|
||||
%= l('du_Hello_PARAMS');
|
||||
</h2>
|
||||
% my $btn = l('du_APPLY');
|
||||
%= form_for "DiskUsaged" => (method => 'POST') => begin
|
||||
|
||||
% param 'trt' => $du_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $du_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1><%=l('du_Disk_usage')%></h1>
|
||||
|
||||
<h2><%=l('du_Manage_DiskUsage_settings:')%></h2>
|
||||
|
||||
<p class='paragraph para1'>
|
||||
%=l('du_Wed_Sep_11_19:01:00_BST')
|
||||
</p>
|
||||
|
||||
<pre class='preformatted pref1'>
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/mapper/main-root 29G 4.8G 24G 17% /
|
||||
devtmpfs 2.0G 0 2.0G 0% /dev
|
||||
tmpfs 2.0G 12K 2.0G 1% /dev/shm
|
||||
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
|
||||
tmpfs 2.0G 648K 2.0G 1% /run
|
||||
/dev/sda1 497M 111M 386M 23% /boot'
|
||||
</pre>
|
||||
|
||||
|
||||
<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-I-bays '><%=l('du_I-bays')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Usage '><%=l('du_Usage')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Path '><%=l('du_Path')%></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='tabl1'>
|
||||
% my $control_data = $self->stash('Table1');
|
||||
% foreach my $row (@$control_data) {
|
||||
<tr class='table-row'>
|
||||
<td class='sme-border table-col table-col-Table1-I-bays'><%=$c->render_to_string(inline=>$row->{'Table1-I-bays'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Usage'><%=$c->render_to_string(inline=>$row->{'Table1-Usage'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Path'><%=$c->render_to_string(inline=>$row->{'Table1-Path'})%></td>
|
||||
</tr>
|
||||
%}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<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-Users '><%=l('du_Users')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Usage '><%=l('du_Usage')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Path '><%=l('du_Path')%></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='tabl2'>
|
||||
% my $control_data = $self->stash('Table2');
|
||||
% foreach my $row (@$control_data) {
|
||||
<tr class='table-row'>
|
||||
<td class='sme-border table-col table-col-Table2-Users'><%=$c->render_to_string(inline=>$row->{'Table2-Users'})%></td>
|
||||
<td class='sme-border table-col table-col-Table2-Usage'><%=$c->render_to_string(inline=>$row->{'Table2-Usage'})%></td>
|
||||
<td class='sme-border table-col table-col-Table2-Path'><%=$c->render_to_string(inline=>$row->{'Table2-Path'})%></td>
|
||||
</tr>
|
||||
%}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
@ -1,16 +0,0 @@
|
||||
/*
|
||||
Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
|
||||
*/
|
||||
.DiskUsage-panel {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.para1 {}
|
||||
.pref1 {}
|
||||
.tabl1 {}
|
||||
thead .tabl1 {}
|
||||
tbody .tabl1 {}
|
||||
.tabl2 {}
|
||||
thead .tabl2 {}
|
||||
tbody .tabl2 {}
|
@ -1,52 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
|
||||
%#
|
||||
% layout 'default', title => "Sme server 2 - Disk Usage", share_dir => './';
|
||||
%# css specific to this panel:
|
||||
% content_for 'module' => begin
|
||||
%= stylesheet '/css/diskusage.css'
|
||||
<div id="module" class="module DiskUsage-panel">
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
</p>
|
||||
% }
|
||||
|
||||
<h1><%=$title%></h1>
|
||||
|
||||
% if ( stash('modul') ) {
|
||||
%= $c->render_to_string(inline => stash('modul') );
|
||||
% }
|
||||
|
||||
%if ($du_data->{first}) {
|
||||
<br><p>
|
||||
%=$c->render_to_string(inline =>$c->l($du_data->{first}))
|
||||
</p>
|
||||
|
||||
%} elsif ($du_data->{success}) {
|
||||
<div class='sme-border'>
|
||||
<h2> Operation Status Report</h2><p>
|
||||
%= $c->l($du_data->{success});
|
||||
</p>
|
||||
</div>
|
||||
|
||||
%} elsif ($du_data->{error}) {
|
||||
<div class='sme-error'>
|
||||
<h2> Operation Status Report - error</h2><p>
|
||||
%= $c->l($du_data->{error});
|
||||
</p>
|
||||
</div>
|
||||
%}
|
||||
|
||||
%#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 ($du_data->{trt} eq "PARAMS") {
|
||||
%= include 'partials/_du_PARAMS'
|
||||
%}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
%end
|
@ -1,14 +0,0 @@
|
||||
#
|
||||
# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
|
||||
#
|
||||
'du_I-bays' => 'I-bays',
|
||||
'du_APPLY' => 'Apply',
|
||||
'du_Disk_Usage' => 'Disk Usage',
|
||||
'du_Hello_PARAMS' => 'Hello PARAMS',
|
||||
'du_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
|
||||
'du_Wed_Sep_11_19:01:00_BST' => 'Wed Sep 11 19:01:00 BST 2024',
|
||||
'du_Path' => 'Path',
|
||||
'du_Usage' => 'Usage',
|
||||
'du_Users' => 'Users',
|
||||
'du_Disk_usage' => 'Disk usage',
|
||||
'du_Manage_DiskUsage_settings:' => 'Manage DiskUsage settings:',
|
0
Targets/Diskusage/Diskusage-Custom.pm
Normal file → Executable file
0
Targets/Diskusage/Diskusage-Custom.pm
Normal file → Executable file
0
Targets/Diskusage/Diskusage.pm
Normal file → Executable file
0
Targets/Diskusage/Diskusage.pm
Normal file → Executable file
0
Targets/Diskusage/_d_PARAMS.html.ep
Normal file → Executable file
0
Targets/Diskusage/_d_PARAMS.html.ep
Normal file → Executable file
0
Targets/Diskusage/diskusage.css
Normal file → Executable file
0
Targets/Diskusage/diskusage.css
Normal file → Executable file
0
Targets/Diskusage/diskusage.html.ep
Normal file → Executable file
0
Targets/Diskusage/diskusage.html.ep
Normal file → Executable file
0
Targets/Diskusage/diskusage_en.lex
Normal file → Executable file
0
Targets/Diskusage/diskusage_en.lex
Normal file → Executable file
0
Targets/Letsencrypt/Letsencrypt-Custom.pm
Normal file → Executable file
0
Targets/Letsencrypt/Letsencrypt-Custom.pm
Normal file → Executable file
0
Targets/Letsencrypt/Letsencrypt.pm
Normal file → Executable file
0
Targets/Letsencrypt/Letsencrypt.pm
Normal file → Executable file
0
Targets/Letsencrypt/_lets_CHECKALLDOMAINS.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_CHECKALLDOMAINS.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_CHECKALLENABLEDDOMAINS.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_CHECKALLENABLEDDOMAINS.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_CHECKONEDOMAIN.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_CHECKONEDOMAIN.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_LIST.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_LIST.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_PARAMS.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/_lets_PARAMS.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/letsencrypt.css
Normal file → Executable file
0
Targets/Letsencrypt/letsencrypt.css
Normal file → Executable file
0
Targets/Letsencrypt/letsencrypt.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/letsencrypt.html.ep
Normal file → Executable file
0
Targets/Letsencrypt/letsencrypt_en.lex
Normal file → Executable file
0
Targets/Letsencrypt/letsencrypt_en.lex
Normal file → Executable file
0
Targets/Nfsshare/Nfsshare-Custom.pm
Normal file → Executable file
0
Targets/Nfsshare/Nfsshare-Custom.pm
Normal file → Executable file
0
Targets/Nfsshare/Nfsshare-Custom.pm.new
Normal file → Executable file
0
Targets/Nfsshare/Nfsshare-Custom.pm.new
Normal file → Executable file
0
Targets/Nfsshare/Nfsshare.pm
Normal file → Executable file
0
Targets/Nfsshare/Nfsshare.pm
Normal file → Executable file
0
Targets/Nfsshare/_nfs_PARAMS.html.ep
Normal file → Executable file
0
Targets/Nfsshare/_nfs_PARAMS.html.ep
Normal file → Executable file
0
Targets/Nfsshare/_nfs_TABLE.html.ep
Normal file → Executable file
0
Targets/Nfsshare/_nfs_TABLE.html.ep
Normal file → Executable file
0
Targets/Nfsshare/nfs_PARAMS.html.ep
Normal file → Executable file
0
Targets/Nfsshare/nfs_PARAMS.html.ep
Normal file → Executable file
0
Targets/Nfsshare/nfs_TABLE.html.ep
Normal file → Executable file
0
Targets/Nfsshare/nfs_TABLE.html.ep
Normal file → Executable file
0
Targets/Nfsshare/nfsshare-lexfiles.zip
Normal file → Executable file
0
Targets/Nfsshare/nfsshare-lexfiles.zip
Normal file → Executable file
0
Targets/Nfsshare/nfsshare.html.ep
Normal file → Executable file
0
Targets/Nfsshare/nfsshare.html.ep
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_bg.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_bg.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_de.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_de.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_dk.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_dk.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_el.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_el.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_en.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_en.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_en.po
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_en.po
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_es.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_es.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_es.po
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_es.po
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_et.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_et.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_fr.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_fr.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_hu.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_hu.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_id.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_id.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_il.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_il.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_it.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_it.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_jp.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_jp.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_nl.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_nl.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_no.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_no.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_pl.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_pl.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_pt-br.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_pt-br.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_pt.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_pt.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_ro.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_ro.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_ru.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_ru.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_sl.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_sl.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_sv.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_sv.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_th.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_th.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_tr.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_tr.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_zh-cn.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_zh-cn.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_zh-tw.lex
Normal file → Executable file
0
Targets/Nfsshare/nfsshare_zh-tw.lex
Normal file → Executable file
9
Targets/Nutups/Nutups-Custom.pm
Normal file → Executable file
9
Targets/Nutups/Nutups-Custom.pm
Normal file → Executable file
@ -191,12 +191,17 @@ sub get_model_options {
|
||||
return ['Error occurred'];
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
# Remove "/usr/sbin" from the front of each line
|
||||
=======
|
||||
# Remove "/usr/sbin/" from the front of each line
|
||||
>>>>>>> 75aaf422042b2af06071fd64175eb15f6c4ae92b
|
||||
s{^/usr/sbin/}{} for @output;
|
||||
|
||||
# Trim whitespace from each element and return the array
|
||||
chomp(@output); # Remove newline characters from each line
|
||||
return @output; # Return the array of modified output lines
|
||||
<<<<<<< HEAD
|
||||
}
|
||||
|
||||
sub get_ups_details {
|
||||
@ -230,5 +235,7 @@ sub get_ups_details {
|
||||
}
|
||||
|
||||
return $formatted_output;
|
||||
=======
|
||||
>>>>>>> 75aaf422042b2af06071fd64175eb15f6c4ae92b
|
||||
}
|
||||
1;
|
||||
1;
|
||||
|
0
Targets/Nutups/Nutups.pm
Normal file → Executable file
0
Targets/Nutups/Nutups.pm
Normal file → Executable file
2
Targets/Nutups/_nut_CONFIG.html.ep
Normal file → Executable file
2
Targets/Nutups/_nut_CONFIG.html.ep
Normal file → Executable file
@ -137,4 +137,4 @@
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
||||
</div>
|
||||
|
4
Targets/Nutups/_nut_STATUS.html.ep
Normal file → Executable file
4
Targets/Nutups/_nut_STATUS.html.ep
Normal file → Executable file
@ -7,7 +7,7 @@
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $nut_data
|
||||
</pre>
|
||||
@ -45,4 +45,4 @@
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
||||
</div>
|
||||
|
0
Targets/Nutups/nutups.css
Normal file → Executable file
0
Targets/Nutups/nutups.css
Normal file → Executable file
4
Targets/Nutups/nutups.html.ep
Normal file → Executable file
4
Targets/Nutups/nutups.html.ep
Normal file → Executable file
@ -8,7 +8,7 @@
|
||||
%= javascript '/js/nutups.js'
|
||||
<div id="module" class="module Nutups-panel">
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $nut_data->{trt}
|
||||
@ -55,4 +55,4 @@
|
||||
|
||||
|
||||
</div>
|
||||
%end
|
||||
%end
|
||||
|
0
Targets/Nutups/nutups.js
Normal file → Executable file
0
Targets/Nutups/nutups.js
Normal file → Executable file
0
Targets/Nutups/nutups_en.lex
Normal file → Executable file
0
Targets/Nutups/nutups_en.lex
Normal file → Executable file
27
Targets/Nutups/spec.nutUPS
Executable file
27
Targets/Nutups/spec.nutUPS
Executable file
@ -0,0 +1,27 @@
|
||||
main page = status
|
||||
config page:
|
||||
-nut status : enable/disabled
|
||||
|
||||
nut mode : standalone|netserver|netclient
|
||||
if netclient mode
|
||||
|
||||
ask for SlaveUPS "UPSNAME@IP" and SlavePass ""
|
||||
set Master as no when saving
|
||||
|
||||
if standalone or netserver
|
||||
|
||||
either use default value for NUT device, or allow to set them
|
||||
${nut-driver@UPS }{Model} usbhid-ups you can use a drop-down listing all the device rpm -ql nut|grep /usr/sbin
|
||||
${nut-driver@UPS }{Device} auto
|
||||
only if Model genericups:
|
||||
${nut-driver@UPS }{Type}
|
||||
${nut-driver@UPS }{mfr}
|
||||
${nut-driver@UPS }{mdl}
|
||||
on saving set nut{Master} to yes if mode standalone or netserver
|
||||
if mode=netserver set nut{access} to private otherwise set as localhost
|
||||
run signal-event nut-conf
|
||||
|
||||
if enabled the status page could return upsc UPS@localhost, or if slave upsc UPSNAME@IP
|
||||
if netclient set nut-monitor status to enabled and set status disabled to nut-server and all existing nut-driver@* ( we can set multiple via cli, so a loop would be great there)
|
||||
if standalone|netserver then enable all nut related service if nut enabled
|
||||
if nut disabled then set all related services to disabled
|
@ -42,7 +42,11 @@ use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
|
||||
|
||||
my $cdb
|
||||
my $adb
|
||||
my $ndb
|
||||
my $hdb
|
||||
my $ddb
|
||||
|
||||
require '/usr/share/smanager/lib/SrvMngr/Controller/${PackageName}-Custom.pm'; #The code that is to be added by the developer
|
||||
|
||||
@ -62,11 +66,11 @@ sub main {
|
||||
$c->app->log->info( $c->log_req );
|
||||
|
||||
#The most common ones
|
||||
my $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
my $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
my $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
my $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
my $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
$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 %${prefix}_data = ();
|
||||
my $title = $c->l('${prefix}_${MenuDescription}');
|
||||
@ -116,11 +120,11 @@ sub do_update {
|
||||
my $modul = '';
|
||||
|
||||
#The most common ones - you might want to comment out any not used.
|
||||
my $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
my $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
my $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
my $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
my $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
$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 %${prefix}_data = ();
|
||||
my $title = $c->l('${prefix}_${MenuDescription}');
|
||||
@ -200,11 +204,11 @@ sub do_display {
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
#The most common ones - you might want to comment out any not used.
|
||||
my $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
my $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
my $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
my $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
my $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
$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 %${prefix}_data = ();
|
||||
my $title = $c->l('${prefix}_${MenuDescription}');
|
||||
|
@ -18,11 +18,11 @@ use constant TRUE => 1;
|
||||
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
#my $cdb
|
||||
#my $adb
|
||||
#my $ndb
|
||||
#my $hdb
|
||||
#my $ddb
|
||||
|
||||
# Validation routines - parameters for each panel
|
||||
<tal:block tal:repeat="panel panels">
|
||||
|
0
Templates/html_controls.html.ep.xml
Normal file → Executable file
0
Templates/html_controls.html.ep.xml
Normal file → Executable file
0
Templates/languages.json
Normal file → Executable file
0
Templates/languages.json
Normal file → Executable file
@ -28,16 +28,16 @@
|
||||
|
||||
%} elsif ($c->stash('success')) {
|
||||
<div class='success '>
|
||||
<h2><%=$c->l('Status Report') %></h2><p>
|
||||
%= $c->l($c->stash('success'));
|
||||
<p>
|
||||
%= $c->l($c->stash('success'));
|
||||
</p>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
%} elsif ($c->stash('error')) {
|
||||
<div class='sme-error'>
|
||||
<h2><%=$c->l('Error Status Report') %></h2><p>
|
||||
%= $c->l($c->stash('error'));
|
||||
<p>
|
||||
%= $c->l($c->stash('error'));
|
||||
</p>
|
||||
</div>
|
||||
<br />
|
||||
|
0
Templates/partial.html.ep.tem
Normal file → Executable file
0
Templates/partial.html.ep.tem
Normal file → Executable file
0
activate-python-env
Normal file → Executable file
0
activate-python-env
Normal file → Executable file
12
copySM2.sh
12
copySM2.sh
@ -5,7 +5,10 @@ if [ $# -ne 3 ]; then
|
||||
exit 1
|
||||
fi
|
||||
export REMOTE=/home/brianr/$1/usr/share/smanager
|
||||
cd ~/clients/SM2/SM2Gen/venv/Targets/$3
|
||||
mkdir -p $REMOTE
|
||||
export LOCAL=~/clients/SM2/SM2Gen/venv
|
||||
export SME11IP=$1.thereadclan.me.uk
|
||||
cd $LOCAL/Targets/$3
|
||||
echo `pwd`
|
||||
# controller file name is just capitalised
|
||||
cont_file=$(echo "$3" | awk '{
|
||||
@ -21,16 +24,17 @@ echo $cont_file
|
||||
#fi
|
||||
mkdir -p $REMOTE/lib/SrvMngr/Controller
|
||||
mkdir -p $REMOTE/themes/default/templates/partials/
|
||||
mkdir -p $REMOTE/lib/SrvMngr/I18N/Modules/Nfsshare
|
||||
mkdir -p $REMOTE/themes/default/templates/
|
||||
mkdir -p $REMOTE/themes/default/public/css
|
||||
mkdir -p $REMOTE/themes/default/public/js
|
||||
cp -fv *.pm $REMOTE/lib/SrvMngr/Controller
|
||||
cp -fv *.css $REMOTE/themes/default/public/css
|
||||
cp -fv *.js $REMOTE/themes/default/public/js
|
||||
cp -fv _$2*.html.ep $REMOTE/themes/default/templates/partials/
|
||||
find . -maxdepth 1 -type f -name "[!_]*\.ep" | xargs -I% bash -c 'cp -fv % $REMOTE/themes/default/templates/'
|
||||
mkdir -p $REMOTE/lib/SrvMngr/I18N/Modules/$3
|
||||
cp -fv *.lex $REMOTE/lib/SrvMngr/I18N/Modules/$3
|
||||
rm -f $REMOTE/lib/SrvMngr/I18N/Modules/$3/*.pm
|
||||
ssh -p 1234 root@$1.thereadclan.me.uk 'signal-event smanager-refresh'
|
||||
ssh -p 1234 root@$SME11IP 'signal-event smanager-refresh'
|
||||
exit 0
|
||||
|
||||
|
||||
|
54
getmyip
54
getmyip
@ -1,54 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# List of services to query for the public IP
|
||||
services=(
|
||||
"ifconfig.me"
|
||||
"ipinfo.io/ip"
|
||||
"icanhazip.com"
|
||||
"api.ipify.org"
|
||||
"ident.me"
|
||||
"ip.tyk.nu"
|
||||
"checkip.amazonaws.com"
|
||||
"ipecho.net/plain"
|
||||
"myip.dnsomatic.com"
|
||||
"ip.seeip.org"
|
||||
"ipapi.co/ip"
|
||||
"wtfismyip.com/text"
|
||||
"openident.net/ip"
|
||||
"ifconfig.co/ip"
|
||||
)
|
||||
|
||||
# Function to shuffle the array of services
|
||||
shuffle_services() {
|
||||
local i
|
||||
for ((i=${#services[@]} - 1; i > 0; i--)); do
|
||||
local j=$((RANDOM % (i + 1)))
|
||||
local temp="${services[i]}"
|
||||
services[i]="${services[j]}"
|
||||
services[j]="$temp"
|
||||
done
|
||||
}
|
||||
|
||||
# Function to fetch the public IP address
|
||||
get_public_ip() {
|
||||
shuffle_services
|
||||
for service in "${services[@]}"; do
|
||||
public_ip=$(curl -s --max-time 5 "$service")
|
||||
|
||||
# Check if the curl request was successful and there's a valid IP address
|
||||
if [[ $? -eq 0 && $public_ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
logger -t public_ip_script "Service used: $service, IP found: $public_ip"
|
||||
echo "$public_ip"
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
# If none of the services returned a valid IP, output an error message
|
||||
echo "Failed to retrieve public IP using all services." >&2
|
||||
logger -t public_ip_script "Error: Failed to retrieve public IP using all services."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Execute the function
|
||||
get_public_ip
|
||||
|
0
html/CreateStarterWebsite.html
Normal file → Executable file
0
html/CreateStarterWebsite.html
Normal file → Executable file
0
html/DiskUsage.html
Normal file → Executable file
0
html/DiskUsage.html
Normal file → Executable file
0
html/Diskusage.html
Normal file → Executable file
0
html/Diskusage.html
Normal file → Executable file
0
html/letsencrypt-config.html
Normal file → Executable file
0
html/letsencrypt-config.html
Normal file → Executable file
0
html/letsencrypt-list-1.html
Normal file → Executable file
0
html/letsencrypt-list-1.html
Normal file → Executable file
0
html/letsencrypt-list.html
Normal file → Executable file
0
html/letsencrypt-list.html
Normal file → Executable file
69
include/site/python3.12/igraph/igraphmodule_api.h
Normal file
69
include/site/python3.12/igraph/igraphmodule_api.h
Normal file
@ -0,0 +1,69 @@
|
||||
/* -*- mode: C -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/*
|
||||
IGraph library.
|
||||
Copyright (C) 2006-2023 Tamas Nepusz <ntamas@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA
|
||||
|
||||
*/
|
||||
|
||||
#ifndef Py_IGRAPHMODULE_H
|
||||
#define Py_IGRAPHMODULE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* C API functions */
|
||||
#define PyIGraph_FromCGraph_NUM 0
|
||||
#define PyIGraph_FromCGraph_RETURN PyObject*
|
||||
#define PyIGraph_FromCGraph_PROTO (igraph_t *graph)
|
||||
|
||||
#define PyIGraph_ToCGraph_NUM 1
|
||||
#define PyIGraph_ToCGraph_RETURN igraph_t*
|
||||
#define PyIGraph_ToCGraph_PROTO (PyObject *graph)
|
||||
|
||||
/* Total number of C API pointers */
|
||||
#define PyIGraph_API_pointers 2
|
||||
|
||||
#ifdef IGRAPH_MODULE
|
||||
/* This section is used when compiling igraphmodule.c */
|
||||
static PyIGraph_FromCGraph_RETURN PyIGraph_FromCGraph PyIGraph_FromCGraph_PROTO;
|
||||
static PyIGraph_ToCGraph_RETURN PyIGraph_ToCGraph PyIGraph_ToCGraph_PROTO;
|
||||
#else
|
||||
/* This section is used in modules that use igraph's API */
|
||||
static void** PyIGraph_API;
|
||||
# define PyIGraph_FromCGraph \
|
||||
(*(PyIGraph_FromCGraph_RETURN (*)PyIGraph_FromCGraph_PROTO) \
|
||||
PyIGraph_API[PyIGraph_FromCGraph_NUM])
|
||||
# define PyIGraph_ToCGraph \
|
||||
(*(PyIGraph_ToCGraph_RETURN (*)PyIGraph_ToCGraph_PROTO) \
|
||||
PyIGraph_API[PyIGraph_ToCGraph_NUM])
|
||||
|
||||
/* Return -1 and set exception on error, 0 on success */
|
||||
static int import_igraph(void) {
|
||||
PyIGraph_API = (void **)PyCapsule_Import("igraph._igraph._C_API", 0);
|
||||
return (PyIGraph_API != NULL) ? 0 : -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(Py_IGRAPHMODULE_H) */
|
0
json5/CreateStarterWebsite.json5
Normal file → Executable file
0
json5/CreateStarterWebsite.json5
Normal file → Executable file
0
json5/DiskUsage.json5
Normal file → Executable file
0
json5/DiskUsage.json5
Normal file → Executable file
0
json5/Diskusage.json5
Normal file → Executable file
0
json5/Diskusage.json5
Normal file → Executable file
0
json5/Letsencrypt-config.json5
Normal file → Executable file
0
json5/Letsencrypt-config.json5
Normal file → Executable file
0
json5/Letsencrypt-list.json5
Normal file → Executable file
0
json5/Letsencrypt-list.json5
Normal file → Executable file
0
json5/Letsencrypt.json5
Normal file → Executable file
0
json5/Letsencrypt.json5
Normal file → Executable file
0
json5/Nfsshare.json5
Normal file → Executable file
0
json5/Nfsshare.json5
Normal file → Executable file
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user