Resolved merge conflict

This commit is contained in:
olevole
2021-02-21 09:09:21 +03:00
22 changed files with 1013 additions and 969 deletions

58
php/cbsd.php Normal file
View File

@@ -0,0 +1,58 @@
<?php
class CBSD {
static function run($cmd, $args){
$prepend='env NOCOLOR=1 /usr/local/bin/sudo /usr/local/bin/cbsd ';
$defines = array(
'{cbsd_loc}' => "/usr/local/bin/cbsd"
);
$specs = array(
0 => array('pipe','r'),
1 => array('pipe','w'),
2 => array('pipe','r')
);
$cmd = vsprintf($cmd, $args); # make sure we deal with a string
$cmd = strtr($cmd, $defines);
$full_cmd = $prepend.trim($cmd);
if ($cmd != escapeshellcmd($cmd)){
die("Shell escape attempt");
}
$process = proc_open($full_cmd,$specs,$pipes,null,null);
$error=false;
$error_message='';
$message='';
if (is_resource($process)){
$buf=stream_get_contents($pipes[1]);
$buf0=stream_get_contents($pipes[0]);
$buf1=stream_get_contents($pipes[2]);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
$task_id=-1;
$return_value = proc_close($process);
if($return_value==0) $message=trim($buf); else {
$error=true;
$error_message=$buf;
}
return array(
'cmd'=>$cmd,
'full_cmd'=>$full_cmd,
'retval'=>$return_value,
'message'=>$message,
'error'=>$error,
'error_message'=>$error_message
);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,7 @@
<?php
require_once("cbsd.php");
class Config
{
/* Список языков, используемых в проекте */
@@ -6,7 +9,7 @@ class Config
'en'=>'English',
'ru'=>'Russian',
);
public $os_types_names=array(
'netbsd'=>'NetBSD',
'dflybsd'=>'DragonflyBSD',
@@ -16,7 +19,7 @@ class Config
'openbsd'=>'OpenBSD',
'windows'=>'Windows',
);
public $other_titles=array(
'settings'=>'CBSD Settings',
'users'=>'CBSD Users',
@@ -35,91 +38,91 @@ class Config
'title'=>'Jails containers control panel',
'icon'=>'icon-server',
),
'instance_jail'=>array(
'name'=>'Template for jail',
'title'=>'Helpers and wizard for containers',
'icon'=>'icon-cubes',
),
'bhyvevms'=>array(
'name'=>'Bhyve VMs',
'title'=>'Virtual machine control panel',
'icon'=>'icon-th-list',
),
/*
/*
'nodes'=>array(
'name'=>'Nodes',
'title'=>'Nodes control panel',
'icon'=>'icon-buffer',
),
*/
*/
'vm_packages'=>array(
'name'=>'VM Packages',
'title'=>'Manage VM Packages group',
'icon'=>'icon-cubes',
),
'k8s'=>array(
'name'=>'K8S clusters',
'title'=>'Manage K8S clusters',
'icon'=>'icon-cubes',
),
'vpnet'=>array(
'name'=>'Virtual Private Network',
'title'=>'Manage for virtual private networks',
'icon'=>'icon-plug',
),
'authkey'=>array(
'name'=>'Authkeys',
'title'=>'Manage for SSH auth key',
'icon'=>'icon-key',
),
'media'=>array(
'name'=>'Storage Media',
'title'=>'Virtual Media Manager',
'icon'=>'icon-inbox',
),
'imported'=>array(
'name'=>'Imported images',
'title'=>'Imported images',
'icon'=>'icon-upload',
),
/*
/*
'repo'=>array(
'name'=>'Repository',
'title'=>'Remote repository',
'icon'=>'icon-globe',
),
*/
*/
'bases'=>array(
'name'=>'FreeBSD Bases',
'title'=>'FreeBSD bases manager',
'icon'=>'icon-database',
),
'sources'=>array(
'name'=>'FreeBSD Sources',
'title'=>'FreeBSD sources manager',
'icon'=>'icon-edit',
),
/*
/*
'jail_marketplace'=>array(
'name'=>'Jail Marketplace',
'title'=>'Public remote containers marketplace',
'icon'=>'icon-flag',
),
*//*
*//*
'bhyve_marketplace'=>array(
'name'=>'Bhyve Marketplace',
'title'=>'Public remote virtual machine marketplace',
'icon'=>'icon-flag-checkered',
),
*/
*/
'tasklog'=>array(
'name'=>'TaskLog',
'title'=>'System task log',
@@ -130,10 +133,9 @@ class Config
'name'=>'SQLite admin',
'title'=>'SQLite admin interface',
'icon'=>'icon-wpforms',
),
)
);
public $os_types=array(
array(
'os'=>'DragonflyBSD',
@@ -178,66 +180,59 @@ class Config
),
)
);
public $os_types_obtain=array();
public $os_interfaces=array();
function __construct()
{
$array=array();
$array1=array();
// $res=ClonOS::cbsd_cmd('get_bhyve_profiles src=vm clonos=1'); for obtain/library
$res=ClonOS::cbsd_cmd('get_bhyve_profiles src=vm clonos=1');
if($res['retval']==0)
{
function __construct(){
$res=CBSD::run('get_bhyve_profiles src=vm clonos=1', array());
if($res['retval']==0){
$this->os_types=$this->create_bhyve_profiles($res);
}
$res1=ClonOS::cbsd_cmd('get_bhyve_profiles src=cloud');
if($res1['retval']==0)
{
$res1=CBSD::run('get_bhyve_profiles src=cloud', array());
if($res1['retval']==0){
$this->os_types_obtain=$this->create_bhyve_profiles($res1);
}
$res2=ClonOS::cbsd_cmd('cbsd get_interfaces');
if($res2['retval']==0)
{
$res2=CBSD::run('cbsd get_interfaces', array());
if($res2['retval']==0){
$this->os_interfaces=$this->create_interfaces($res2);
}
}
function create_bhyve_profiles($info)
{
$array1=array();
function create_bhyve_profiles($info){
$os_names = array();
$res=json_decode($info['message'],true);
if(!empty($res))foreach($res as $item)
{
$os_name=$this->os_types_names[$item['type']];
if(isset($array[$os_name]))
{
$array[$os_name]['items'][]=$item;
}else{
$array[$os_name]=array('os'=>$os_name,'items'=>array($item));
if(!is_null($res) && $res != false){
foreach($res as $item){
$os_name=$this->os_types_names[$item['type']];
if(isset($os_names[$os_name])){
$os_names[$os_name]['items'][]=$item;
}else{
$os_names[$os_name]=array('os'=>$os_name,'items'=>array($item));
}
}
}
if(!empty($array))foreach($array as $item) $array1[]=$item;
unset($array);
return $array1;
//$this->os_types=$array1;
return $os_names;
}
function create_interfaces($info)
{
function create_interfaces($info){
$res=json_decode($info['message'],true);
return $res;
if(!is_null($res) && $res != false){
return $res;
} else {
return array();
}
}
function os_types_create($obtain='new')
{
function os_types_create($obtain='new'){
$obtain=($obtain=='obtain');
if($obtain)
$info=$this->os_types_obtain;
else
$info=$this->os_types;
$html='';
foreach($info as $num1=>$os)
{
@@ -258,53 +253,45 @@ class Config
}
return $html;
}
function authkeys_list()
{
function authkeys_list(){
$db=new Db('base','authkey');
$res=$db->select('SELECT idx,name FROM authkey;');
$res=$db->select('SELECT idx,name FROM authkey;', array());
$html='';
if(!empty($res))foreach($res as $item)
{
if(!empty($res))foreach($res as $item){
$html.=' <option value="'.$item['idx'].'">'.$item['name'].'</option>'.PHP_EOL;
}
return $html;
}
function vm_packages_list()
{
function vm_packages_list(){
$db=new Db('base','local');
$res=$db->select('select id,name,description,pkg_vm_ram,pkg_vm_disk,pkg_vm_cpus,owner from vmpackages order by name asc;');
$res=$db->select('select id,name,description,pkg_vm_ram,pkg_vm_disk,pkg_vm_cpus,owner from vmpackages order by name asc;', array());
$html='<option value="0"></option>';
$min=0;
$min_id=0;
if(!empty($res))foreach($res as $item)
{
if(!empty($res))foreach($res as $item){
$cpu=$item['pkg_vm_cpus'];
$ram=trim($item['pkg_vm_ram']);
$ed=substr($ram,-1);
if($ed=='b')
{
if($ed=='b'){
$ed=substr($ram,-2,1).'b';
$ram=substr($ram,0,-2);
}
if($ed=='m' || $ed=='g') $ed.='b';
if($ed=='mb')
{
if($ed=='mb'){
$ram1=substr($ram,0,-1);
$ram1=$ram1/1000000;
}
if($ed=='gb')
{
if($ed=='gb'){
$ram1=substr($ram,0,-1);
$ram1=$ram1/1000;
}
$res1=$cpu+$ram1;
if($min>$res1 || $min==0) {$min=$res1;$min_id=$item['id'];}
$name='<strong>'.$item['name'].'</strong> (cpu: '.$cpu.'; ram: '.$ram.'; hdd: '.$item['pkg_vm_disk'].')';
$html.=' <option value="'.$item['id'].'" title="'.$item['description'].'">'.$name.'</option>'.PHP_EOL;
}

View File

@@ -1,25 +1,52 @@
<?php
class Db {
private $_pdo=null, $_connected;
private $_pdo=null;
private $_workdir='';
private $_filename='';
public $error=false;
public $error_message='';
/*
$place = base (This is a basic set of databases: local, nodes, etc)
$place = file (specify a specific database for the full pathth)
*/
function __destruct(){
//if($this->_pdo) $this->_pdo->close();
function __construct($place='base', $database='', $connect = null){
if (is_null($connect)){
list($file_name, $connect) = $this->prep_connect($place, $database);
if(is_null($file_name) || !file_exists($file_name)){
$this->error=true;
$this->error_message='DB file name not set or not found!';
return;
} else {
$this->_filename=$file_name;
}
if(is_null($connect)) {
$this->error=true;
$this->error_message='DB file name not set or invalid';
return;
}
}
try {
$this->_pdo = new PDO($connect);
$this->_pdo->setAttribute(PDO::ATTR_TIMEOUT,5000);
}catch (PDOException $e){
$this->error=true;
$this->error_message=$e->getMessage(); //'DB Error';
}
}
function __construct($place='base',$database=''){
$this->_connected=false;
private function prep_connect($place, $database){
$this->_workdir=getenv('WORKDIR'); // /usr/jails/
$connect = null;
$file_name = null;
switch($place){
case 'base':
$file_name=$this->_workdir.'/var/db/'.$database.'.sqlite';
@@ -34,11 +61,10 @@ class Db {
///usr/jails/jails-system/cbsdpuppet1/helpers/redis.sqlite
$file_name=$this->_workdir.'/jails-system/'.$database['jname'].'/helpers/'.$database['helper'].".sqlite";
$connect='sqlite:'.$file_name;
break;
} else {
$file_name=$this->_workdir.'/formfile/'.$database.".sqlite";
$connect='sqlite:'.$file_name;
}
$file_name=$this->_workdir.'/formfile/'.$database.".sqlite";
$connect='sqlite:'.$file_name;
break;
case 'cbsd-settings':
$file_name=$this->_workdir.'/jails-system/CBSDSYS/helpers/cbsd.sqlite';
@@ -57,7 +83,7 @@ class Db {
$connect='sqlite:'.$file_name;
break;
}
/*
$databases=array(
'tasks'=>'cbsdtaskd',
@@ -99,66 +125,89 @@ class Db {
break;
}
*/
$this->_filename=$file_name;
//echo $file_name,PHP_EOL,PHP_EOL;
if(!isset($file_name) || empty($file_name) || !file_exists($file_name)){
$this->error=true;
$this->error_message='DB file not found!';
return false;
}
if(empty($connect)) return false; // Return from __construct doesn't work!
return [$file_name, $connect];
}
# TODO once tested $values can have a default value of an empty array
function select($sql, $values, $single = false){
try {
$this->_pdo = new PDO($connect);
$this->_pdo->setAttribute(PDO::ATTR_TIMEOUT,5000);
$this->_connected=true;
$query = $this->_pdo->prepare($sql);
$i = 1;
foreach($values as $v){
if (count($v) == 1){ # TODO: Make default type string
$query->bindParam($i, $v[0]);
} elseif (count($v) == 2){ # if type defined
$query->bindParam($i, $v[0], $v[1]);
}
$i++;
}
$query->execute();
if ($single){
$res = $query->fetch(PDO::FETCH_ASSOC);
} else {
$res = $query->fetchAll(PDO::FETCH_ASSOC);
}
return $res;
} catch(PDOException $e) {
# TODO: Handling ?
return array();
}
}
}catch (PDOException $e){
$this->error=true;
$this->error_message=$e->getMessage(); //'DB Error';
return false;
}
function selectOne($sql, $values){
return $this->select($sql, $values, true);
}
function select($query){
if($quer=$this->_pdo->query($query)){
$res=$quer->fetchAll(PDO::FETCH_ASSOC);
return $res;
function insert($sql, $values){
try {
$this->_pdo->beginTransaction();
$query = $this->_pdo->prepare($sql);
$i = 1;
foreach($values as $v){
if (count($v) == 1){ # TODO: Make default type string
$query->bindParam($i, $v[0]);
} elseif (count($v) == 2){ # if type defined
$query->bindParam($i, $v[0], $v[1]);
}
$i++;
}
$query->execute();
$lastId = $this->_pdo->lastInsertId();
$this->_pdo->commit();
} catch(PDOException $e) {
$this->_pdo->rollBack();
#throw new Exception($e->getMessage());
return array('error'=>true,'info'=>$e->getMessage());
}
return array();
return array('error'=>false,'lastID'=>$lastId);
}
function selectAssoc($query){
if($quer=$this->_pdo->query($query)){
$res=$quer->fetch(PDO::FETCH_ASSOC);
return $res;
function update($sql, $values){
try {
$this->_pdo->beginTransaction();
$query = $this->_pdo->prepare($sql);
$i = 1;
foreach($values as $v){
if (count($v) == 1){ # TODO: Make default type string
$query->bindParam($i, $v[0]);
} elseif (count($v) == 2){ # if type defined
$query->bindParam($i, $v[0], $v[1]);
}
$i++;
}
$query->execute();
$rowCount=$query->rowCount();
$this->_pdo->commit();
} catch(PDOException $e) {
$this->_pdo->rollBack();
#return false;
throw new Exception($e->getMessage());
}
return array();
return array('rowCount'=>$rowCount);
}
function insert($query){
if($quer=$this->_pdo->query($query)){
$lastID=$this->_pdo->lastInsertId();
return array('error'=>false,'lastID'=>$lastID);
}
$error=array('error'=>true,'info'=>$this->_pdo->errorInfo());
return $error;
}
function update($query) {
if($quer=$this->_pdo->query($query)){
$rowCount=$quer->rowCount();
return array('rowCount'=>$rowCount);
}
$error=$this->_pdo->errorInfo();
return $error;
}
function isConnected(){ return($this->_connected); }
function isConnected(){ return !is_null($this->_pdo); }
function getWorkdir(){ return $this->_workdir; }
function getFileName(){ return $this->_filename; }
function escape($str){ return SQLite3::escapeString($str); } // For now sqlite only!
}

View File

@@ -22,49 +22,42 @@ class Forms
private $name='';
private $db='';
private $html='';
function __construct($jname,$helper='',$db_path=false)
{
function __construct($jname,$helper='',$db_path=false){
$this->name=$jname;
if($jname=='')
{
if($jname==''){
$database=$helper;
}else if($jname=='cbsd-settings'){
$this->db=new Db('cbsd-settings');
}else{
$database=array('jname'=>$jname,'helper'=>$helper);
}
if($helper!='')
{
if($db_path!==false)
{
if($helper!=''){
if($db_path!==false){
$this->db=new Db('file',$db_path);
}else{
$this->db=new Db('helper',$database);
}
}
}
function generate()
{
function generate(){
if($this->db->error) return;
//$query="select * from forms order by group_id asc, order_id asc";
$query="select * from forms order by groupname asc, group_id asc, order_id asc";
$fields=$this->db->select($query);
$fields=$this->db->select($query, array());
//print_r($fields);exit;
//echo '<pre>';print_r($fields);
//$defaults=array();
//$currents=array();
// Строим карту формы с группами элементов
$groups=array();
foreach($fields as $key=>$field)
{
$group=$field['groupname'];
if(!empty($group))
{
if($field['type']=='group_add')
{ // Expand
if(!empty($group)){
if($field['type']=='group_add'){ // Expand
$groups[$group]['_title']=$field['desc'];
}else if($field['type']=='delimer'){
// Delimer
@@ -89,12 +82,12 @@ class Forms
$this->html.='<div class="pad-head"></div>';
*/
$last_type=$field['type'];
if(isset($field['cur']) && isset($field['def']))
{
if(empty($field['cur'])) $field['cur']=$field['def'];
}
$tpl=$this->getElement($field['type'],$field);
$params=array('param','desc','attr','cur');
foreach($params as $param)
@@ -102,29 +95,28 @@ class Forms
if(isset($field[$param]))
$tpl=str_replace('${'.$param.'}',$field[$param],$tpl);
}
//$value=$field['def'];
//if(isset($field['cur']) && !empty($field['cur'])) $value=$field['cur'];
$value=$field['cur'];
$tpl=str_replace('${value}',$value,$tpl);
$value=$field['def'];
$tpl=str_replace('${def}',$value,$tpl);
$required=($field['mandatory']==1)?' required':'';
$tpl=str_replace('${required}',$required,$tpl);
$arr[$key]=$tpl;
//if($field['param']!='-') $currents[$field['param']]=$field['cur'];
//if($field['param']!='-') $defaults[$field['param']]=$field['def'];
}
// Выстраиваем форму по карте
$this->html='<form class="helper" name="" onsubmit="return false;"><div class="form-fields">';
foreach($groups as $key=>$txt)
{
if(is_numeric($key))
{
if(is_numeric($key)){
$this->html.=$arr[$key];
}else if(is_array($txt)){
$group_name=key($txt);
@@ -134,8 +126,7 @@ class Forms
{
$group_id=$val1['_group_id'];
unset($val1['_group_id']);
if(is_array($val1))
{
if(is_array($val1)){
$this->html.='<div class="form-field"><fieldset id="ind-'.$group_id.'"><legend>'.$group_title.'</legend>';
foreach($val1 as $key2=>$val2)
$this->html.=$arr[$val2];
@@ -148,21 +139,19 @@ class Forms
}
}
$this->html.='</div>';
$this->setButtons();
$this->html.='</form>';
return array('html'=>$this->html); // ,'currents'=>$currents //,'defaults'=>$defaults
}
function getElement($el,$arr=array())
{
function getElement($el,$arr=array()){
$tpl='';
switch(trim($el))
{
case 'inputbox':
$res=$this->getInputAutofill($arr);
if($res===false)
{
if($res===false){
$list='';
$datalist='';
}else{
@@ -190,31 +179,28 @@ class Forms
}
return $tpl;
}
function getInputAutofill($arr)
{
if(isset($arr['link']))
{
function getInputAutofill($arr){
if(isset($arr['link'])){
$id=$arr['link']; //$arr['param'].'-'.
$tpl='<datalist id="'.$id.'">';
$query="select * from {$arr['link']} order by order_id asc";
$opts=$this->db->select($query);
if(!empty($opts))foreach($opts as $key=>$opt)
{
$query="select * from ? order by order_id asc";
$opts=$this->db->select($query, array([$arr['link']]));
if(!empty($opts))foreach($opts as $key=>$opt){
$tpl.='<option>'.$opt['text'].'</option>';
}
$tpl.='</datalist>';
return array('list'=>$id,'datalist'=>$tpl);
}else return false;
}else {
return false;
}
}
function getSelect($el,$arr)
{
function getSelect($el,$arr){
$tpl='<div class="form-field"><select name="${param}">';
if(isset($arr['link']))
{
$query="select * from {$arr['link']} order by order_id asc";
$opts=$this->db->select($query);
if(isset($arr['link'])){
$query="select * from ? order by order_id asc";
$opts=$this->db->select($query, array([$arr['link']]));
// Пустое поле в списках оказалось ненужным!
//array_unshift($opts,array('id'=>0,'text'=>'','order_id'=>-1));
if(!empty($opts))foreach($opts as $key=>$opt)
@@ -226,16 +212,13 @@ class Forms
$tpl.='</select><span class="default val-${def}" title="Click to fill dafault value">[default]</span><span class="small">${desc}</span></div>';
return $tpl;
}
function getRadio($el,$arr)
{
function getRadio($el,$arr){
$tpl='<div class="form-field"><fieldset><legend>${desc}</legend>';
if(isset($arr['link']))
{
$query="select * from {$arr['link']} order by order_id asc";
$opts=$this->db->select($query);
if(!empty($opts))foreach($opts as $key=>$opt)
{
if(isset($arr['link'])){
$query="select * from ? order by order_id asc";
$opts=$this->db->select($query, array([$arr['link']]));
if(!empty($opts))foreach($opts as $key=>$opt){
$checked=($opt['id']==$arr['cur'])?' checked':'';
$tpl.='<label for="${param}-'.$opt['id'].'">'.$opt['text'].':</label><input type="radio" name="${param}" value="'.$opt['id'].'" id="${param}-'.$opt['id'].'"'.$checked.' />';
}
@@ -243,9 +226,8 @@ class Forms
$tpl.='</fieldset></div>';
return $tpl;
}
function setButtons($arr=array())
{
function setButtons($arr=array()){
$this->html.='<div class="buttons"><input type="button" value="Apply" class="save-helper-values" title="Save and apply params" /> &nbsp; <input type="button" value="Clear" class="clear-helper" title="Restore loaded params" /></div>';
}
}

View File

@@ -1,7 +1,7 @@
<?php
$db=new Db('base','authkey');
$res=$db->select('SELECT idx,name,authkey FROM authkey;');
$res=$db->select('SELECT idx,name,authkey FROM authkey;', []);
$html='';
if($res!==false)

View File

@@ -2,7 +2,7 @@
$html='';
$db=new Db('base','nodes');
$nodes=$db->select('select nodename,ip from nodelist order by nodename desc');
$nodes=$db->select('select nodename,ip from nodelist order by nodename desc', []);
$nodes[]=array('nodename'=>'local');
$nodes=array_reverse($nodes);
@@ -14,7 +14,7 @@ if(!empty($nodes))foreach($nodes as $node)
$db1=new Db('base',$node['nodename']);
if($db1!==false)
{
$bases=$db1->select("SELECT idx,platform,name,arch,targetarch,ver,stable,elf,date FROM bsdbase order by cast(ver AS int)");
$bases=$db1->select("SELECT idx,platform,name,arch,targetarch,ver,stable,elf,date FROM bsdbase order by cast(ver AS int)", []);
$num=$nth & 1;
if(!empty($bases)) foreach($bases as $base)

View File

@@ -4,7 +4,7 @@ $html='';
//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=array('local');
if(!empty($res))foreach($res as $val) $nodes[]=$val['nodename'];
@@ -19,7 +19,7 @@ if(!empty($nodes))foreach($nodes as $node)
$db1=new Db('base',$node);
if($db1!==false)
{
$bhyves=$db1->select("SELECT jname,vm_ram,vm_cpus,vm_os_type,hidden,protected,bhyve_vnc_tcp_bind FROM bhyve where hidden!=1 order by jname asc;");
$bhyves=$db1->select("SELECT jname,vm_ram,vm_cpus,vm_os_type,hidden,protected,bhyve_vnc_tcp_bind FROM bhyve where hidden!=1 order by jname asc;", []);
//$allnodes[$node]=$bhyves;
$num=$nth & 1;

View File

@@ -57,7 +57,7 @@ if(!empty($images)) foreach($images as $item)
$filesize=$this->fileSizeConvert($size,1024,true);
$query="select count(*) as busy from taskd where status<2 and jname='${item['jname']}'";
$busy=$this->_db_tasks->selectAssoc($query);
$busy=$this->_db_tasks->selectOne($query, []);
$jstatus='';
$jbusy='';
if($busy['busy']==1)

View File

@@ -5,6 +5,8 @@ if(!empty($this->_vars['hash']))
return;
}
require_once("../php/cbsd.php");
$sys_helpers=array();
// 'network','cbsd','bhyvenet','general','zfsinstall','userspw','natcfg','jconstruct',
//);
@@ -15,7 +17,7 @@ if($db!==false)
$query="select module from sys_helpers_list";
if(!$db->error)
{
$res=$db->select($query);
$res=$db->select($query, []);
if(!empty($res))
{
foreach($res as $r) $sys_helpers[]=$r['module'];
@@ -26,7 +28,7 @@ if($db!==false)
$html='';
$arr=array();
$res=$this->cbsd_cmd('forms header=0');
$res=CBSD::run('forms header=0', []);
if($res['retval']==0)
{
$empty_logo='/images/logo/empty.png';
@@ -46,14 +48,14 @@ if($res['retval']==0)
$file_name=$db->getFileName();
if(!file_exists($file_name))
{
$res=$this->cbsd_cmd('forms module='.$item.' inter=0');
$res=CBSD::run('forms module=%s inter=0',[$item]);
if($res['retval']==0)
{
$db=new Db('helper',$item);
}
}
}
if($db!==false && !$db->error) $res=$db->selectAssoc("select longdesc from system limit 1");
if($db!==false && !$db->error) $res=$db->selectOne("select longdesc from system", []);
if(isset($res['longdesc'])) $description=$res['longdesc']; else $description=$this->translate('no data').'&hellip; ('.$file_name.')';
}else{

View File

@@ -1,12 +1,14 @@
<?php
require_once("../php/cbsd.php");
$hash=$this->url_hash; //=preg_replace('/^#/','',$this->_vars['hash']);
$db_path=false;
if(!isset($this->_vars['db_path']))
{
//$db_path=$this->_vars['db_path'];
$res=$this->cbsd_cmd('make_tmp_helper module='.$hash);
$res=CBSD::run('make_tmp_helper module=%s', [$hash]);
if($res['retval']==0)
{
$db_path=$res['message'];

View File

@@ -13,7 +13,7 @@ $html='';
//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=array('local');
if(!empty($res))foreach($res as $val) $nodes[]=$val['nodename'];
@@ -28,7 +28,7 @@ if(!empty($nodes))foreach($nodes as $node)
$db1=new Db('base',$node);
if($db1!==false)
{
$jails=$db1->select("SELECT jname,ip4_addr,status,protected FROM jails WHERE emulator!='bhyve' and hidden!=1 order by jname asc;");
$jails=$db1->select("SELECT jname,ip4_addr,status,protected FROM jails WHERE emulator!='bhyve' and hidden!=1 order by jname asc;", []);
$allnodes[$node]=$jails;
$num=$nth & 1;

View File

@@ -10,7 +10,7 @@ if(empty($hash))
$query="select module from jails_helpers_list";
if(!$db->error)
{
$res=$db->select($query);
$res=$db->select($query, []);
if(!empty($res))
{
foreach($res as $r) $jails_helpers[]=$r['module'];
@@ -24,7 +24,7 @@ if(empty($hash))
$db=new Db('helper',array('jname'=>$jail_name,'helper'=>$helper));
if(!$db->error) // !error — значит хелпер установлен
{
$res=$db->selectAssoc("select longdesc from system limit 1");
$res=$db->selectOne("select longdesc from system", []);
if(isset($res['longdesc'])) $description=$res['longdesc']; else $description=$this->translate('no data').'&hellip; ('.$file_name.')';
$lst[]=array('helper'=>$helper,'description'=>$description);
}else{

View File

@@ -1,7 +1,7 @@
<?php
$db=new Db('base','storage_media');
$res=$db->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)

View File

@@ -1,4 +1,4 @@
<?php
//echo '{}';
//$ips=$db1->select("select group_concat(ip,'; ') from nodelist"); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> nodes.php
//$ips=$db1->select("select group_concat(ip,'; ') from nodelist", []); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> nodes.php
$included_result_array=array();

View File

@@ -14,7 +14,7 @@ $res_array=array(
$nodenames=array('local');
$db=new Db('base','nodes');
$nodes=$db->select('select nodename,ip from nodelist');
$nodes=$db->select('select nodename,ip from nodelist', []);
if(!empty($nodes))foreach($nodes as $node)
{
$idle=$this->check_locktime($node['ip']);
@@ -39,10 +39,10 @@ if(!empty($nodenames))foreach($nodenames as $name)
exit;
}
$jcounts=$ndb->selectAssoc('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;', []);
if(!empty($counts))foreach($counts as $cel)
{
$res_array['num-cores']+=$cel['ncpu'];

View File

@@ -2,7 +2,7 @@
$html='';
$db=new Db('base','nodes');
$nodes=$db->select('select nodename,ip from nodelist order by nodename desc');
$nodes=$db->select('select nodename,ip from nodelist order by nodename desc', []);
$nodes[]=array('nodename'=>'local');
$nodes=array_reverse($nodes);
@@ -14,7 +14,7 @@ if(!empty($nodes))foreach($nodes as $node)
$db1=new Db('base',$node['nodename']);
if($db1!==false)
{
$bases=$db1->select("SELECT idx,name,platform,ver,rev,date FROM bsdsrc ORDER BY CAST(ver AS int)");
$bases=$db1->select("SELECT idx,name,platform,ver,rev,date FROM bsdsrc ORDER BY CAST(ver AS int)", []);
$num=$nth & 1;
if(!empty($bases)) foreach($bases as $base)

View File

@@ -3,7 +3,7 @@
$username=$this->_user_info['username'];
$db=new Db('base','cbsdtaskd');
$res=$db->select("SELECT id,st_time,end_time,cmd,status,errcode,logfile FROM taskd WHERE owner='${username}' ORDER BY id DESC");
$res=$db->select("SELECT id,st_time,end_time,cmd,status,errcode,logfile FROM taskd WHERE owner='?' ORDER BY id DESC", array([$username]));
$html='';
if($res!==false)

View File

@@ -16,7 +16,7 @@ $html='';
$db=new Db('clonos');
if($db!==false)
{
$res=$db->select("select id,username,first_name,last_name,date_joined,last_login,is_active from auth_user order by date_joined desc");
$res=$db->select("select id,username,first_name,last_name,date_joined,last_login,is_active from auth_user order by date_joined desc", []);
}
$nth=0;

View File

@@ -4,7 +4,7 @@ $html='';
$db=new Db('base','local');
if($db!==false)
{
$res=$db->select("select id,name,description,pkg_vm_ram,pkg_vm_disk,pkg_vm_cpus,owner from vmpackages order by name asc");
$res=$db->select("select id,name,description,pkg_vm_ram,pkg_vm_disk,pkg_vm_cpus,owner from vmpackages order by name asc", []);
}
$nth=0;

View File

@@ -1,7 +1,7 @@
<?php
$db=new Db('base','vpnet');
$res=$db->select('SELECT idx,name,vpnet FROM vpnet');
$res=$db->select('SELECT idx,name,vpnet FROM vpnet', []);
$html='';
if($res!==false)

View File

@@ -1,6 +1,8 @@
<?php
header('Content-Type: application/json');
require_once("../php/cbsd.php");
$cmd='';
if($_SERVER['REQUEST_METHOD'] === 'POST')
@@ -41,9 +43,7 @@ if($_SERVER['REQUEST_METHOD'] === 'POST')
$status = 'ok'; //'Successfully uploaded!';
if($cmd=='import')
{
$username=$clonos->getUserName();
$command='task owner='.$username.' mode=new /usr/local/bin/cbsd jimport jname='.$filename.' inter=0';
$res=$clonos->cbsd_cmd($command);
$res=CBSD::run('task owner=%s mode=new /usr/local/bin/cbsd jimport jname=%s' inter=0', [$clonos->getUserName(), $filename]);
}
}else{
$status = 'Upload Fail: Unknown error occurred!';