<?php function clean($str) { $search = array('&' , '"' , "'" , '<' , '>' ); $replace = array('&', '"', ''', '<', '>' ); $str = str_replace($search, $replace, $str); return $str; } //read config file $configfile = new SplFileObject("/etc/nlvmi/nlvmi.conf"); while (!$configfile->eof()) { $line = $configfile->fgets(); if (!preg_match('/^#/', $line)){ if (!preg_match('/^$/', $line)){ if (preg_match('/=/', $line)){ $configparam = explode('=', $line); $p = rtrim($configparam[1]); //echo "B$p"; $config[$configparam[0]]=str_replace('"', '', $p); } } } } $file = null; //check db connection if ($config['DATABASETYPE']=="sqlite"){ $db_handle = new SQLite3($config['SQLITEFILE']); $query = "SELECT name FROM sqlite_master WHERE type='table' AND name='vms';"; $db_handle->exec($query); $result = $db_handle->query($query); $row = $result->fetchArray(); if (!$row['name']=="vms"){ echo "DB connection failed!"; exit; } } include('header.php'); $mode=""; //form for edit and new vms if (isset($_REQUEST['edit'])){ $mode="editvm"; $formname="editvm"; $eid=clean($_REQUEST['edit']); $sql="SELECT * FROM vms WHERE id='$eid'"; $res = $db_handle->query($sql); $editid = "<input type=hidden name=editid value=$eid>"; while ($row = $res->fetchArray(SQLITE3_ASSOC)){ $e = $row; } } elseif(isset($_REQUEST['newvm'])) { $formname="newvm"; $editid=""; $mode="newvm"; } if (isset($formname)){ echo "<h2>$formname</h2></br>"; echo "<form name=$formname action=? method=post>"; $res = $db_handle->query('PRAGMA table_info(vms)'); while ($col = $res->fetchArray(SQLITE3_ASSOC)) { $arrColnames[]=$col['name']; } for ($col=0; $col <count($arrColnames); $col++){ if ($arrColnames[$col]!="id"){ if (isset($e[$arrColnames[$col]])){ $val = $e[$arrColnames[$col]]; } else { $val = ""; } if ($arrColnames[$col] == "bootoption"){ echo "<div class=row><div class=col-md-1 style=text-align:right>bootoption</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=bootoptionbutton data-toggle=dropdown aria-haspopup=true aria-expanded=false>C</button>"; echo "<div class=dropdown-menu aria-labelledby=bootoptionbutton>"; echo "<a class=dropdown-item href=\"javascript:dropdown('bootoptionbutton','c')\">c</a>"; echo "<a class=dropdown-item href=\"javascript:dropdown('bootoptionbutton','d')\">d</a>"; echo "</div></div></div></div><input type=hidden id=bootoptionbuttonh name=bootoption value=c>"; // echo "$arrColnames[$col] <select name=bootoption><option value=c>C</option><option value=d>D</option></select></br>"; } elseif ($arrColnames[$col] == "arch"){ echo "<div class=row><div class=col-md-1 style=text-align:right>arch</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=archbutton data-toggle=dropdown aria-haspopup=true aria-expanded=false>x86_64</button>"; echo "<div class=dropdown-menu aria-labelledby=archbutton>"; echo "<a class=dropdown-item href=\"javascript:dropdown('archbutton','x86_64')\">x86_64</a>"; echo "</div></div></div></div><input type=hidden id=archbuttonh name=arch value=x86_64>"; // echo "$arrColnames[$col] <select name=arch><option value=qemu-system-x86_64>x86_64</option></select></br>"; } elseif ($arrColnames[$col] == "cdrom"){ echo "<div class=row><div class=col-md-1 style=text-align:right>cdrom</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=cdrombutton data-toggle=dropdown aria-haspopup=true aria-expanded=false>$val</button>"; echo "<div class=dropdown-menu aria-labelledby=cdrombutton>"; $isodirs = explode('|', $config['ISODIRECTORY']); foreach($isodirs as $isodir){ $files = array_diff(scandir($isodir), array('.', '..')); $files = array_values(array_filter($files)); for ($f=0; $f<count($files); $f++){ if ((preg_match('/iso/', $files[$f]))||(preg_match('/ISO/', $files[$f]))){ echo "<a class=dropdown-item href=\"javascript:dropdown('cdrombutton','$isodir/$files[$f]')\">$isodir/$files[$f]</a>"; } } } echo "</div></div></div></div><input type=hidden id=cdrombuttonh name=cdrom value=$val>"; } elseif (preg_match('/drive/', $arrColnames[$col])){ echo "<div class=row><div class=col-md-1 style=text-align:right>$arrColnames[$col]</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=$arrColnames[$col]button data-toggle=dropdown aria-haspopup=true aria-expanded=false>$val</button>"; echo "<div class=dropdown-menu aria-labelledby=$arrColnames[$col]button>"; $vmdirs = explode('|', $config['VMDIRECTORY']); foreach($vmdirs as $vmdir){ $files = array_diff(scandir($vmdir), array('.', '..')); $files = array_values(array_filter($files)); for ($f=0; $f<count($files); $f++){ echo "<a class=dropdown-item href=\"javascript:dropdown('$arrColnames[$col]button','$vmdir/$files[$f]')\">$vmdir/$files[$f]</a>"; } } echo "</div></div></div></div><input type=hidden id=$arrColnames[$col]buttonh name=$arrColnames[$col] value=$val>"; } else { echo "<div class=row><div class=col-md-1 style=text-align:right>$arrColnames[$col]</div><div class=col-md-2><input class=form-control type=text name=$arrColnames[$col] value=$val></div></div>"; } } } echo "$editid<input type=hidden name=mode value=$formname><input class=\"btn btn-primary\" type=submit></form>"; } //insert in db if(isset($_REQUEST['mode'])){ if($_REQUEST['mode']=="newvm"){ $mode="newvm"; $sqls="INSERT INTO vms "; $sqlc="("; $sqlv=" VALUES ("; foreach(array_keys($_REQUEST) as $rkey){ if ($rkey!="mode"){ $rvalue = clean($_REQUEST[$rkey]); if ($rvalue == "x86_64"){ $rvalue = "qemu-system-x86_64"; } $sqlc .= "$rkey,"; $sqlv .= "'$rvalue',"; } } $sqlc = rtrim($sqlc, ','); $sqlc.=")"; $sqlv = rtrim($sqlv, ','); $sqlv.=")"; $sql = "$sqls$sqlc$sqlv"; echo $sql; $result = $db_handle->exec($sql); } elseif ($_REQUEST['mode']=="editvm"){ $mode="editvm"; $sql="UPDATE vms SET "; foreach(array_keys($_REQUEST) as $rkey){ if (($rkey!="mode")&&($rkey!="editid")){ $rvalue = clean($_REQUEST[$rkey]); if ($rvalue == "x86_64"){ $rvalue = "qemu-system-x86_64"; } $sql .= " $rkey='$rvalue',"; } } $sql = rtrim($sql, ','); $eid=clean($_REQUEST['editid']); $sql .= " WHERE id='$eid'"; $result = $db_handle->exec($sql); } } if($mode!="newvm"){ echo "<a href=?newvm>Create a new VM</a></br>"; } //getting vms from DB $sql="SELECT * FROM vms"; $res = $db_handle->query($sql); echo "<div class=row>"; while ($row = $res->fetchArray(SQLITE3_ASSOC)){ echo "<div class=col style=\"border:solid 1px;\">$row[vmname]</br><a href=?edit=$row[id]>edit</a></div>"; } echo "</div></div></body></html>"; ?>