Update WIP

This commit is contained in:
SimonFair
2024-04-26 08:35:02 +01:00
parent 191c067465
commit ae285176a9
5 changed files with 81 additions and 16 deletions

View File

@@ -102,7 +102,7 @@ if ($newmodel && $arrLoad['form'] == "Custom.form.php") $arrLoad['form'] = "Cust
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.filetree.css')?>">
<link type="text/css" rel="stylesheet" href="<?autov('/webGui/styles/jquery.switchbutton.css')?>">
<span class="status advancedview_panel" style="margin-top:<?=$top?>px"><input type="checkbox" class="advancedview"></span>
<span class="status advancedview_panel" style="margin-top:<?=$top?>px;"><input type="checkbox" class="inlineview"><input type="checkbox" class="advancedview"></span>
<div class="domain">
<form id="vmform" method="POST">
<input type="hidden" name="domain[type]" value="kvm" />
@@ -161,6 +161,21 @@ function isVMXMLMode() {
return ($.cookie('vmmanager_listview_mode') == 'xml');
}
function isinlineXMLMode() {
return ($.cookie('vmmanager_inline_mode') == 'hide');
}
function hidexml(checked)
{
var form = document.getElementById("vmform"); // Replace "yourFormId" with the actual ID of your form
var xmlElements = form.getElementsByClassName("xml");
if (checked == 1) xmldisplay = "none"; else xmldisplay = "";
// Unhide each element
for (var i = 0; i < xmlElements.length; i++) {
xmlElements[i].style.display = xmldisplay; // Setting to empty string will revert to default style
}
}
$(function() {
$('.autostart').switchButton({
on_label: "_(Yes)_",
@@ -177,10 +192,20 @@ $(function() {
off_label: "_(Form View)_",
checked: isVMXMLMode()
});
$('.inlineview').switchButton({
labels_placement: "left",
on_label: "_(Hide inline xml)_",
off_label: "_(Show Inline XML)_",
checked: isinlineXMLMode()
});
$('.advancedview').change(function () {
toggleRows('xmlview', $(this).is(':checked'), 'formview');
$.cookie('vmmanager_listview_mode', $(this).is(':checked') ? 'xml' : 'form', { expires: 3650 });
});
$('.inlineview').change(function () {
hidexml($(this).is(':checked'));
$.cookie('vmmanager_inline_mode', $(this).is(':checked') ? 'hide' : 'show', { expires: 3650 });
});
$('#template_img').click(function (){
var p = $(this).position();
@@ -227,6 +252,7 @@ $(function() {
} else {
$('.advancedview_panel').fadeOut('fast');
}
hidexml(isinlineXMLMode());
$("#vmform #btnCancel").click(function (){
done();

View File

@@ -1801,7 +1801,7 @@
}
function domain_define($xml, $autostart=false) {
if (strpos($xml,'<qemu:commandline>')) {
if (strpos($xml,'<qemu:commandline>') || strpos($xml,'<qemu:override>')) {
$tmp = explode("\n", $xml);
for ($i = 0; $i < sizeof($tmp); $i++)
if (strpos('.'.$tmp[$i], "<domain type='kvm'") || strpos('.'.$tmp[$i], '<domain type="kvm"'))

View File

@@ -1370,7 +1370,7 @@ private static $encoding = 'UTF-8';
'nic' => $arrNICs,
'usb' => $arrUSBDevs,
'shares' => $lv->domain_get_mount_filesystems($res),
'qemucmdline' => getQEMUCmdLine($strDOMXML),
'qemucmdline' => getQEMUCmdLine($strDOMXML)."\n".getQEMUOverride($strDOMXML),
'clocks' => getClocks($strDOMXML),
'xml' => [
'machine' => $lv->domain_get_xml($vmname, "//domain/os/*"),
@@ -1565,7 +1565,19 @@ private static $encoding = 'UTF-8';
$y = strpos($xml,"<qemu:commandline>", $z +19) ;
if ($y != false) $z =$y ;
}
return substr($xml,$x, ($z + 19) -$x) ;
return substr($xml,$x, ($z + 19) -$x);
}
function getQEMUOverride($xml) {
$x = strpos($xml,"<qemu:override>", 0) ;
if ($x === false) return null ;
$y = strpos($xml,"</qemu:override>", 0) ;
$z=$y ;
while ($y!=false) {
$y = strpos($xml,"<qemu:override>", $z +16) ;
if ($y != false) $z =$y ;
}
return substr($xml,$x, ($z + 16) -$x) ;
}
function getchannels($res) {
@@ -2648,6 +2660,7 @@ function build_xml_templates($strXML) {
"console"=> "yes",
"input"=> "yes",
"audio"=> "yes",
"video"=> "yes",
"watchdog"=> "yes",
"memballoon"=> "yes",
"graphics"=> "yes",
@@ -2672,7 +2685,14 @@ function build_xml_templates($strXML) {
$endpos = strpos($xml,$endcheck,$strpos);
}
# echo substr($xml,$strpos,$endpos-$strpos+strlen($endcheck)) ;
$devxml[$xmlsection][$count] = substr($xml,$strpos,$endpos-$strpos+strlen($endcheck)) ;
if ($xmlsection == "disk") {
$disk = substr($xml,$strpos,$endpos-$strpos+strlen($endcheck));
$xmldiskdoc = new SimpleXMLElement($disk);
$devxml[$xmlsection][$xmldiskdoc->target->attributes()->dev->__toString()] = $disk;
} else {
$devxml[$xmlsection][$count] = substr($xml,$strpos,$endpos-$strpos+strlen($endcheck)) ;
}
$count++;
}
}

View File

@@ -1913,6 +1913,9 @@ $(function() {
$('.advancedview').change(function () {
if ($(this).is(':checked')) {
setTimeout(function() {
var xmlPanelHeight = window.outerHeight - 550;
if (xmlPanelHeight < 0) xmlPanelHeight = null;
editor.setSize(null,xmlPanelHeight);
editor.refresh();
}, 100);
}

View File

@@ -328,7 +328,7 @@
<tr>
<td>_(Name)_:</td>
<td><input type="text" name="domain[name]" id="domain_name" class="textTemplate" title="_(Name of virtual machine)_" placeholder="_(e.g.)_ _(My Workstation)_" value="<?=htmlspecialchars($arrConfig['domain']['name'])?>" required /></td>
<td><textarea class="xml" id="xmlname" rows=1 disabled ><?=htmlspecialchars($xml2['name'])?></textarea></td>
<td><textarea class="xml" id="xmlname" rows=1 disabled ><?=htmlspecialchars($xml2['name'])."\n".htmlspecialchars($xml2['uuid'])."\n".htmlspecialchars($xml2['metadata'])?></textarea></td>
</tr>
</table>
<blockquote class="inline_help">
@@ -537,7 +537,7 @@
<?mk_dropdown_options($arrValidMachineTypes, $arrConfig['domain']['machine']);?>
</select>
</td>
<td><textarea class="xml" id="xmlos" rows=5 cols=200 disabled ><?=htmlspecialchars($xml2['os'])?></textarea></td>
<td><textarea class="xml" id="xmlos" rows=5 cols=200 disabled ><?=htmlspecialchars($xml2['os'])."\n".htmlspecialchars($xml2['features'])?></textarea></td>
</tr>
</table>
<div class="advanced">
@@ -656,6 +656,7 @@
<td>
<input type="text" name="media[cdrom]" autocomplete="off" spellcheck="false" data-pickcloseonfile="true" data-pickfilter="iso" data-pickmatch="^[^.].*" data-pickroot="<?=htmlspecialchars($domain_cfg['MEDIADIR'])?>" class="cdrom" value="<?=htmlspecialchars($arrConfig['media']['cdrom'])?>" placeholder="_(Click and Select cdrom image to install operating system)_">
</td>
<td><textarea class="xml" id="xmlvdiskhda" rows=1 disabled wrap="soft"><?=htmlspecialchars($xml2['devices']['disk']['hda'])?></textarea></td>
</tr>
<tr class="advanced">
<td>_(OS Install CDRom Bus)_:</td>
@@ -691,6 +692,7 @@
<?mk_dropdown_options($arrValidCdromBuses, $arrConfig['media']['driversbus']);?>
</select>
</td>
<td><textarea class="xml" id="xmlvdiskhdb" rows=1 disabled wrap="soft"><?=htmlspecialchars($xml2['devices']['disk']['hdb'])?></textarea></td>
</tr>
</table>
<div class="domain_os windows">
@@ -790,7 +792,7 @@
?>
</select><input type="text" name="disk[<?=$i?>][new]" autocomplete="off" spellcheck="false" data-pickcloseonfile="true" data-pickfolders="true" data-pickfilter="img,qcow,qcow2" data-pickmatch="^[^.].*" data-pickroot="/mnt/" class="disk" id="disk_<?=$i?>" value="<?=htmlspecialchars($arrDisk['new'])?>" placeholder="_(Separate sub-folder and image will be created based on Name)_"><div class="disk_preview"></div>
</td>
<td><textarea class="xml" id="xmlvdisk<?=$i?>" rows=4 disabled wrap="soft"><?=htmlspecialchars($xml2['devices']['disk'][$i])?></textarea></td>
<td><textarea class="xml" id="xmlvdisk<?=$i?>" rows=4 disabled wrap="soft"><?=htmlspecialchars($xml2['devices']['disk'][$arrDisk['dev']])?></textarea></td>
</tr>
<input type="hidden" name="disk[<?=$i?>][storage]" id="disk[<?=$i?>][storage]" value="<?=htmlspecialchars($arrConfig['template']['storage'])?>">
@@ -1135,7 +1137,7 @@
<?
if ($arrGPU['id'] == 'virtual') {
?>
<td><textarea class="xml" id="xmlgraphics<?=$i?>" rows=5 disabled ><?=htmlspecialchars($xml2['devices']['graphics'][0])."\n".htmlspecialchars($xml2['devices']['audio'][0])?></textarea></td>
<td><textarea class="xml" id="xmlgraphics<?=$i?>" rows=5 disabled ><?=htmlspecialchars($xml2['devices']['graphics'][0])."\n".htmlspecialchars($xml2['devices']['video'][0])."\n".htmlspecialchars($xml2['devices']['audio'][0])?></textarea></td>
<?} else {?>
<td><textarea class="xml" id="xmlgraphics<?=$i?>" rows=5 disabled ><?=htmlspecialchars($xml2['devices']['vga'][$arrGPU['id']])?></textarea></td>
<?}?>
@@ -1474,7 +1476,7 @@
<tr>
<td>_(USB Devices)_:</td>
<td>
<div class="textarea" style="width: 850px">
<div class="textarea" style="width: 780px">
<?
if (!empty($arrVMUSBs)) {
foreach($arrVMUSBs as $i => $arrDev) {
@@ -1482,7 +1484,7 @@
<label for="usb<?=$i?>">&nbsp&nbsp&nbsp&nbsp<input type="checkbox" name="usb[]" id="usb<?=$i?>" value="<?=htmlspecialchars($arrDev['id'])?>" <?if (count(array_filter($arrConfig['usb'], function($arr) use ($arrDev) { return ($arr['id'] == $arrDev['id']); }))) echo 'checked="checked"';?>
/> &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp <input type="checkbox" name="usbopt[<?=htmlspecialchars($arrDev['id'])?>]" id="usbopt<?=$i?>" value="<?=htmlspecialchars($arrDev['id'])?>" <?if ($arrDev["startupPolicy"] =="optional") echo 'checked="checked"';?>/>&nbsp&nbsp&nbsp&nbsp&nbsp
<input type="number" size="5" maxlength="5" id="usbboot<?=$i?>" class="narrow bootorder" <?=$bootdisable?> style="width: 50px;" name="usbboot[<?=htmlspecialchars($arrDev['id'])?>]" title="_(Boot order)_" value="<?=$arrDev['usbboot']?>" >
<?=htmlspecialchars(substr($arrDev['name'],0,100))?> (<?=htmlspecialchars($arrDev['id'])?>)</label><br/>
<?=htmlspecialchars(substr($arrDev['name'],0,90))?> (<?=htmlspecialchars($arrDev['id'])?>)</label><br/>
<?
}
@@ -1507,7 +1509,7 @@
<tr>
<td>_(Other PCI Devices)_:</td>
<td>
<div class="textarea" style="width: 850px">
<div class="textarea" style="width: 780px">
<?
$intAvailableOtherPCIDevices = 0;
@@ -1581,7 +1583,7 @@
if ($arrConfig['qemucmdline'] == "") $qemurows = 2 ; else $qemurows = 15 ;
?>
<td>
<textarea id="qemucmdline" name="qemucmdline" class="xml" rows=<?=$qemurows?> style="width: 850px" onchange="QEMUChgCmd(this)"><?=htmlspecialchars($arrConfig['qemucmdline'])?> </textarea></td></tr>
<textarea id="qemucmdline" name="qemucmdline" class="xmlqemu" rows=<?=$qemurows?> style="width: 780px" onchange="QEMUChgCmd(this)"><?=htmlspecialchars($arrConfig['qemucmdline'])."\n".htmlspecialchars($arrConfig['qemuoverride'])?> </textarea></td></tr>
</td>
</tr>
</table>
@@ -1603,7 +1605,7 @@
?>
</select>
</td>
<td></td><td></td><td><textarea class="xml" id="xmlclock" rows=5 disabled ><?=htmlspecialchars($xml2['clock'])?></textarea></td>
<td></td><td></td><td><textarea class="xml" id="xmlclock" rows=5 disabled ><?=htmlspecialchars($xml2['clock'])."\n".htmlspecialchars($xml2['on_poweroff'])."\n".htmlspecialchars($xml2['on_reboot'])."\n".htmlspecialchars($xml2['on_crash'])?></textarea></td>
</tr>
<?$clockcount = 0 ;
if (!empty($arrClocks)) {
@@ -1673,6 +1675,19 @@
<p>Click Create to generate the vDisks and return to the Virtual Machines page where your new VM will be created.</p>
</blockquote>
<?}?>
<table>
<tr>
<tr>
<td>_(Other XML)_:</td>
<?
if ($arrConfig['qemucmdline'] == "") $qemurows = 2 ; else $qemurows = 15 ;
?>
<td>
<textarea id="xmlother" name="xmlother" class="xml" rows=10 style="width: 780px"> <?=htmlspecialchars($xml2['devices']['emulator'][0])."\n".htmlspecialchars($xml2['devices']['console'][0])."\n".htmlspecialchars($xml2['devices']['serial'][0])."\n".htmlspecialchars($xml2['devices']['channel'][0])."\n".htmlspecialchars($xml2['devices']['input'][0])?> </textarea></td></tr>
</td>
</tr>
</table>
</div>
<div class="xmlview">
@@ -1937,8 +1952,9 @@ $(function() {
$('.advancedview').change(function () {
if ($(this).is(':checked')) {
setTimeout(function() {
var h = window.outerHeight - 550;
editor.setSize(null,h );
var xmlPanelHeight = window.outerHeight - 550;
if (xmlPanelHeight < 0) xmlPanelHeight = null;
editor.setSize(null,xmlPanelHeight);
editor.refresh();
}, 100);
}