From 0f0a85957906df55a4c4e0aa693a34fd18b1201d Mon Sep 17 00:00:00 2001 From: olevole Date: Thu, 14 Nov 2024 12:51:46 +0300 Subject: [PATCH] fix SQLite3 DQS, improve VM create wizard --- php/clonos.php | 66 ++++++++++++++++--- php/config.php | 19 +++++- public/css/themes/dark.css | 6 +- public/css/themes/light.css | 16 +++-- public/dialogs/bhyve-new.php | 25 +++++-- public/js/clonos.js | 40 +++++++++-- public/pages/authkey/a.json.php | 2 +- public/pages/bases/a.json.php | 2 +- public/pages/bhyvevms/a.json.php | 2 +- public/pages/jailscontainers/index.php | 36 ++++++++++ .../translate.cache/!dont.touch.files | 4 ++ public/pages/media/a.json.php | 4 +- public/pages/overview/a.json.php | 6 +- public/pages/sources/a.json.php | 2 +- public/pages/vpnet/a.json.php | 2 +- 15 files changed, 193 insertions(+), 39 deletions(-) create mode 100644 public/pages/jailscontainers/index.php create mode 100644 public/pages/jailscontainers/translate.cache/!dont.touch.files diff --git a/php/clonos.php b/php/clonos.php index 3683247e..ee2b929f 100644 --- a/php/clonos.php +++ b/php/clonos.php @@ -408,7 +408,7 @@ class ClonOS { /* function getProjectsListOnStart(){ - $query='SELECT * FROM projects'; + $query="SELECT * FROM projects"; $res=$this->_db->select($query, array()); echo ' var projects=',json_encode($res),PHP_EOL; } @@ -1248,14 +1248,14 @@ class ClonOS { $db=new Db('base','storage_media'); if(!$db->isConnected()) return(false); // TODO: Fix return - $res=$db->selectOne('SELECT * FROM media WHERE jname=? AND type=\'iso\'', array([$jname])); + $res=$db->selectOne("SELECT * FROM media WHERE jname=? AND type='iso'", array([$jname])); if($res!==false && !empty($res)){ CBSD::run( 'cbsd media mode=unregister name="%s" path="%s" jname=%s type=%s', array($res['name'], $res['path'], $jname, $res['type']) ); $res=$db->selectOne( - 'SELECT * FROM media WHERE idx=?', + "SELECT * FROM media WHERE idx=?", array([(int)$form['vm_iso_image']]) ); if($res!==false && !empty($res) && $form['vm_iso_image']!=-2){ @@ -1318,7 +1318,7 @@ class ClonOS { if($iso_id>0){ $db=new Db('base','storage_media'); if(!$db->isConnected()) return(false); // TODO: return error - $res=$db->selectOne('SELECT name,path FROM media WHERE idx= ?', array([$iso_id])); // OK, $iso_id is casted as int above. + $res=$db->selectOne("SELECT name,path FROM media WHERE idx= ?", array([$iso_id])); // OK, $iso_id is casted as int above. if($res===false || empty($res)) $iso=false; } @@ -1421,8 +1421,8 @@ class ClonOS { $db=new Db('base','authkey'); if(!$db->isConnected()) return array('error'=>true,'errorMessage'=>'Database error!'); if($nres['name']!==false) $key_name=$nres['name']; - Utils::clonos_syslog("clonos.php:". 'SELECT authkey FROM authkey WHERE idx=?'. array([$key_id, PDO::PARAM_INT])); - $nres=$db->selectOne('SELECT authkey FROM authkey WHERE idx=?', array([$key_id, PDO::PARAM_INT])); + Utils::clonos_syslog("clonos.php:". "SELECT authkey FROM authkey WHERE idx=?". array([$key_id, PDO::PARAM_INT])); + $nres=$db->selectOne("SELECT authkey FROM authkey WHERE idx=?", array([$key_id, PDO::PARAM_INT])); //var_dump($nres);exit; // [22-Jul-2022 13:15:19 UTC] PHP Warning: Trying to access array offset on value of type bool in /usr/local/www/clonos/php/clonos.php on line 1416 @@ -1611,7 +1611,7 @@ class ClonOS { if(!$db->isConnected()) return array('error'=>true,'res'=>'Database error'); //$res=$db->update('DELETE FROM media WHERE idx=?', array([$this->form['media_id']])); - $res=$db->selectOne('SELECT * FROM media WHERE idx=?', array([(int)$this->form['media_id'], PDO::PARAM_INT])); + $res=$db->selectOne("SELECT * FROM media WHERE idx=?", array([(int)$this->form['media_id'], PDO::PARAM_INT])); if($res===false || empty($res)) return array('error'=>true,'res'=>print_r($res,true)); //if($res['jname']=='-') // если медиа отвязана, то про @@ -2315,7 +2315,7 @@ class ClonOS { function media_iso_list_html(){ // $form=$this->form; $db=new Db('base','storage_media'); - $res=$db->select('select * from media where type=\'iso\'', array()); + $res=$db->select("select * from media where type='iso'", array()); //var_dump($res);exit; if($res===false || empty($res)) return; @@ -2330,8 +2330,10 @@ class ClonOS { } function ccmd_updateBhyveISO($iso=''){ +//echo $this->config->os_types_getOne('first');exit; $db=new Db('base','storage_media'); - $res=$db->select('SELECT * FROM media WHERE type=\'iso\'', array()); + $res=$db->select("SELECT * FROM media WHERE type='iso'", array()); + if($res===false || empty($res)) return array(); //array('error'=>true,'error_message'=>'Profile ISO is not find!'); $sel=''; @@ -2350,8 +2352,52 @@ class ClonOS { $html=str_replace('#sel1#','',$html); $html=str_replace('#sel#',' selected="selected"',$html); } + + $form_items=$this->getBhyve_formItems(); - return $html; + return array('iso_list'=>$html,'form_items'=>$form_items); + } + + function getBhyve_formItems($os_name='') + { + if($os_name!='') + { + $res=array(); + }else{ + $arr=$this->config->os_types_getOne('first'); +//return $res;exit; + $jname='undefined'; + $jres=$this->ccmd_getFreeJname(false,$arr['default_jname']); + if(!$jres['error']) + { + $jname=$jres['freejname']; + } + //print_r($jres);exit; + //$res['jname']=$jname; + //var_dump($res);exit; + + } + + $res=array( + 'jname'=>$jname, //$arr['jname'], + 'imgsize'=>array( + 'min'=>intval($arr['imgsize_min']), + 'max'=>intval($arr['imgsize_max']), + 'cur'=>intval($arr['imgsize']) + ), + 'vm_cpus'=>array( + 'min'=>intval($arr['vm_cpus_min']), + 'max'=>intval($arr['vm_cpus_max']), + 'cur'=>intval($arr['vm_cpus']) + ), + 'vm_ram'=>array( + 'min'=>intval($arr['vm_ram_min']), + 'max'=>intval($arr['vm_ram_max']), + 'cur'=>intval($arr['vm_ram']) + ), + ); + + return $res; } function get_interfaces_html(){ diff --git a/php/config.php b/php/config.php index 65d05071..8358a9ba 100644 --- a/php/config.php +++ b/php/config.php @@ -231,13 +231,14 @@ class Config // vm profile (ISO) if ($vm_profile_list_file_size > 0 ) { Utils::clonos_syslog("config.php: (cached) found vm_profile cache file/size: $vm_profile_list_file exist/$vm_profile_list_file_size"); - $res['message']=file_get_contents($vm_profile_list_file); + $res['message']=file_get_contents($vm_profile_list_file); +//echo $res['message'];exit; $this->os_types=$this->create_bhyve_profiles($res); } else { Utils::clonos_syslog("config.php: vm_profile cache file not found: $vm_profile_list_file"); $res=CBSD::run('get_bhyve_profiles src=vm clonos=1', array()); if($res['retval']==0){ - $this->os_types=$this->create_bhyve_profiles($res); + $this->os_types=$this->create_bhyve_profiles($res); } } @@ -292,6 +293,7 @@ class Config } function os_types_create($obtain='new'){ +//print_r($this->os_types);exit; $obtain=($obtain=='obtain'); if($obtain) $info=$this->os_types_obtain; @@ -318,6 +320,19 @@ class Config } return $html; } + function os_types_getOne($name='first') + { + $res=array(); + $info=$this->os_types; + if($name='first') + { + $res=current($info)['items'][0]; + }else{ + + } + + return $res; + } function authkeys_list(){ $db=new Db('base','authkey'); diff --git a/public/css/themes/dark.css b/public/css/themes/dark.css index d459fc13..9b9d7e99 100644 --- a/public/css/themes/dark.css +++ b/public/css/themes/dark.css @@ -138,7 +138,7 @@ dialog .panel { } .window-box { - border:1px solid #6f7579; + /*border:1px solid #6f7579;*/ color: white; } .window-box .close-but { @@ -249,7 +249,7 @@ td.error { #config-menu ul { - border:1px solid gray; + /*border:1px solid gray;*/ background-color:black; } #config-menu li:hover { @@ -258,7 +258,7 @@ td.error { } #config-menu .menu-cog { color:#337ab7; - border:1px solid gray; + /*border:1px solid gray;*/ background-color:black; } diff --git a/public/css/themes/light.css b/public/css/themes/light.css index 7a563889..888b1cd0 100644 --- a/public/css/themes/light.css +++ b/public/css/themes/light.css @@ -137,7 +137,7 @@ dialog .panel { } .window-box { - border:1px solid #337ab7; + /*border:1px solid #337ab7;*/ } .window-box .close-but { background-color:#f3f3f3; @@ -198,10 +198,17 @@ form.win input[type="password"]:valid { form.win input[type="email"]:invalid, form.win input[type="password"]:invalid { - background-color:#fef7f7; + background-color:#ffd5d5; border:1px solid #d7a0a0; } +form.win input:invalid:focus { + outline-color:red; +} +form.win input:valid:focus { + outline-color:green; +} + input[type=checkbox]:checked + label, input[type=radio]:checked + label { color:#337ab7; @@ -244,7 +251,7 @@ td.error { #config-menu ul { - border:1px solid gray; + /*border:1px solid gray;*/ background-color:white; } #config-menu li:hover { @@ -252,7 +259,8 @@ td.error { } #config-menu .menu-cog { color:#337ab7; - border:1px solid gray; + /*border:1px solid gray;*/ + border-bottom-width: 0px; background-color:white; } diff --git a/public/dialogs/bhyve-new.php b/public/dialogs/bhyve-new.php index 6f699da9..69f64639 100644 --- a/public/dialogs/bhyve-new.php +++ b/public/dialogs/bhyve-new.php @@ -4,6 +4,9 @@ err_messages.add({ 'vm_size':'You need type «g» char after numbers', 'vm_ram':'You need type «g» char after numbers', }); +config->os_types);exit; +?>

@@ -15,8 +18,8 @@ err_messages.add({

translate('VM OS profile');?>: - + config->os_types_create(); ?>

@@ -26,7 +29,7 @@ err_messages.add({

translate('VM template (cpu, ram, hdd)');?>:

@@ -40,18 +43,28 @@ err_messages.add({

translate('VM RAM');?>: - + + + + + +

translate('VM Image size');?>: - + + + + + +

translate('Attached boot ISO image');?>:

diff --git a/public/js/clonos.js b/public/js/clonos.js index c252e9c2..dac87609 100644 --- a/public/js/clonos.js +++ b/public/js/clonos.js @@ -877,6 +877,29 @@ var clonos={ { $('dialog #bhyveSettings select[name="vm_iso_image"]').html(data.iso_list); } + if(typeof data.form_items!='undefined') + { + var fi=data.form_items; + $('#bhyveSettings input[name="vm_name"]').val(fi.jname); + + $('#bhyveSettings input[name="vm_cpus"]').prop({ + 'min':fi.vm_cpus.min, + 'max':fi.vm_cpus.max + }).val(fi.vm_cpus.cur); + $('#bhyveSettings input[name="vm_cpus_show"]').val(fi.vm_cpus.cur); + + $('#bhyveSettings input[name="vm_ram"]').prop({ + 'min':fi.vm_ram.min, + 'max':fi.vm_ram.max + }).val(fi.vm_ram.cur); + $('#bhyveSettings input[name="vm_ram_show"]').val(fi.vm_ram.cur); + + $('#bhyveSettings input[name="vm_imgsize"]').prop({ + 'min':fi.imgsize.min, + 'max':fi.imgsize.max + }).val(fi.imgsize.cur); + $('#bhyveSettings input[name="vm_imgsize_show"]').val(fi.imgsize.cur); + } }, getFreeJname:function() { @@ -2152,11 +2175,19 @@ var clonos={ { var par=$(obj).closest('form'); $('input[name="vm_cpus"]',par).val(res[1]); - $('input[name="vm_cpus_show"]',par).val(res[1]); - $('input[name="vm_ram"]',par).val(res[2]); - $('input[name="vm_size"]',par).val(res[3]); + $('input[name="vm_cpus_show"]',par).val(res[1]); + $('input[name="vm_ram"]',par).val(parseInt(res[2])); + $('input[name="vm_ram_show"]',par).val(res[2]); + $('input[name="vm_imgsize"]',par).val(parseInt(res[3])); + $('input[name="vm_imgsize_show"]',par).val(res[3]); } }, + onChangeOsProfile:function(obj,event) + { + var a=event.target; + var i=a.selectedIndex; + debugger; + }, loginAction:function(event) { @@ -2301,9 +2332,10 @@ var clonos={ var tpad=parseInt($(td).css('padding-top'),10); if(menu.length>0) { + /* # пересмотреть расчёт верхнего левого угла меню */ $(menu).css({ 'left':coords.left+lpad/2-3, - 'top':coords.top+$('div#content').scrollTop()+tpad/2, + 'top':coords.top+$('div#content').scrollTop()+tpad+$('.tsimple').position().top, 'display':'block', }); } diff --git a/public/pages/authkey/a.json.php b/public/pages/authkey/a.json.php index 8a8e1b6e..319298c9 100644 --- a/public/pages/authkey/a.json.php +++ b/public/pages/authkey/a.json.php @@ -1,7 +1,7 @@ select('SELECT idx,name,authkey FROM authkey;', []); +$res = $db->select("SELECT idx,name,authkey FROM authkey;", []); $html = ''; $html_tpl = ''; diff --git a/public/pages/bases/a.json.php b/public/pages/bases/a.json.php index 5676ef11..fe65313f 100644 --- a/public/pages/bases/a.json.php +++ b/public/pages/bases/a.json.php @@ -1,7 +1,7 @@ select('select nodename,ip from nodelist order by nodename desc', []); +$nodes = $db->select("select nodename,ip from nodelist order by nodename desc", []); $nodes[] = ['nodename' => 'local']; $nodes = array_reverse($nodes); diff --git a/public/pages/bhyvevms/a.json.php b/public/pages/bhyvevms/a.json.php index 7bdb3a6b..425553b4 100644 --- a/public/pages/bhyvevms/a.json.php +++ b/public/pages/bhyvevms/a.json.php @@ -4,7 +4,7 @@ //if($hres!==false) $thead=$hres[1]; $db = new Db('base','nodes'); -$res = $db->select('select nodename from nodelist', []); +$res = $db->select("select nodename from nodelist", []); $nodes = ['local']; foreach($res as $val){ $nodes[] = $val['nodename']; diff --git a/public/pages/jailscontainers/index.php b/public/pages/jailscontainers/index.php new file mode 100644 index 00000000..32a96499 --- /dev/null +++ b/public/pages/jailscontainers/index.php @@ -0,0 +1,36 @@ +uri_chunks[1])){ + include('helpers.php'); + return; +} + +$clonos->useDialogs([ + 'vnc', + 'jail-settings', + 'jail-settings-config-menu', + 'jail-import', + 'jail-clone', + 'jail-rename', +]); + +?> +

{translate:[Jail containers:]}

+ +

{translate:[Create jail]} +{translate:[Import]}

+ + + + + + + + + + + + + + + +
{translate:[Node name]}{translate:[Jail]}{translate:[Usage]}{translate:[IP address]}{translate:[Status]}{translate:[Action]}{translate:[VNC]}{translate:[Port]}
diff --git a/public/pages/jailscontainers/translate.cache/!dont.touch.files b/public/pages/jailscontainers/translate.cache/!dont.touch.files new file mode 100644 index 00000000..d93649f5 --- /dev/null +++ b/public/pages/jailscontainers/translate.cache/!dont.touch.files @@ -0,0 +1,4 @@ +This files is cache of translated pages, do not translate it! + +translate template: + {translate:[Last One]} \ No newline at end of file diff --git a/public/pages/media/a.json.php b/public/pages/media/a.json.php index 060983dc..fd5e926f 100644 --- a/public/pages/media/a.json.php +++ b/public/pages/media/a.json.php @@ -1,7 +1,7 @@ select('SELECT idx,name,path,jname FROM media where type=\'iso\'', []); +$res = $db->select("SELECT idx,name,path,jname FROM media where type='iso'", []); $html = ''; if($res !== false){ @@ -34,4 +34,4 @@ if($res !== false){ 'func' => 'fillTable', 'id' => 'mediaslist' ]; -} +} \ No newline at end of file diff --git a/public/pages/overview/a.json.php b/public/pages/overview/a.json.php index 9853e88b..43db9597 100644 --- a/public/pages/overview/a.json.php +++ b/public/pages/overview/a.json.php @@ -14,7 +14,7 @@ $res_array = [ $nodenames = ['local']; $db = new Db('base','nodes'); -$nodes = $db->select('select nodename,ip from nodelist', []); +$nodes = $db->select("select nodename,ip from nodelist", []); foreach($nodes as $node){ $idle = $this->check_locktime($node['ip']); if($idle == 0){ @@ -37,10 +37,10 @@ foreach($nodenames as $name){ exit; } - $jcounts = $ndb->selectOne('SELECT COUNT(*) as count FROM jails;', []); + $jcounts = $ndb->selectOne("SELECT COUNT(*) as count FROM jails;", []); $res_array['num-jails'] += $jcounts['count']; - $counts = $ndb->select('SELECT ncpu,physmem,cpufreq FROM local;', []); + $counts = $ndb->select("SELECT ncpu,physmem,cpufreq FROM local;", []); foreach($counts as $cel){ $res_array['num-cores'] += $cel['ncpu']; $res_array['sum-ram'] += $cel['physmem']; diff --git a/public/pages/sources/a.json.php b/public/pages/sources/a.json.php index 3290ab85..32d5ab49 100644 --- a/public/pages/sources/a.json.php +++ b/public/pages/sources/a.json.php @@ -1,7 +1,7 @@ select('select nodename,ip from nodelist order by nodename desc', []); +$nodes = $db->select("select nodename,ip from nodelist order by nodename desc", []); $nodes[] = ['nodename'=>'local']; $nodes = array_reverse($nodes); diff --git a/public/pages/vpnet/a.json.php b/public/pages/vpnet/a.json.php index f3aa0624..8c8bf993 100644 --- a/public/pages/vpnet/a.json.php +++ b/public/pages/vpnet/a.json.php @@ -1,7 +1,7 @@ select('SELECT idx,name,vpnet FROM vpnet', []); +$res = $db->select("SELECT idx,name,vpnet FROM vpnet", []); $html = ''; if(!$db->error){