mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Clear right panel when deploying VM fails
This commit is contained in:
parent
7e3432ac52
commit
51362d8479
@ -12,13 +12,13 @@
|
|||||||
%>
|
%>
|
||||||
|
|
||||||
<!-- VM detail panel (begin) -->
|
<!-- VM detail panel (begin) -->
|
||||||
<div class="main_title" id="right_panel_header" style="display: none">
|
<div class="main_title" id="right_panel_header">
|
||||||
<div class="main_titleicon">
|
<div class="main_titleicon">
|
||||||
<img src="images/instancetitle_icons.gif" alt="Instance" /></div>
|
<img src="images/instancetitle_icons.gif" alt="Instance" /></div>
|
||||||
<h1 id="vm_name">
|
<h1 id="vm_name">
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="contentbox" id="right_panel_content" style="display: none">
|
<div class="contentbox" id="right_panel_content">
|
||||||
<div class="info_detailbox errorbox" id="after_action_info_container" style="display:none">
|
<div class="info_detailbox errorbox" id="after_action_info_container" style="display:none">
|
||||||
<p id="after_action_info"></p>
|
<p id="after_action_info"></p>
|
||||||
</div>
|
</div>
|
||||||
@ -51,7 +51,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid_row_cell" style="width: 79%;">
|
<div class="grid_row_cell" style="width: 79%;">
|
||||||
<div class="row_celltitles" id="zoneName">
|
<div class="row_celltitles" id="zoneName">
|
||||||
(zone name)</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_rows odd">
|
<div class="grid_rows odd">
|
||||||
@ -81,7 +81,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid_row_cell" style="width: 79%;">
|
<div class="grid_row_cell" style="width: 79%;">
|
||||||
<div class="row_celltitles">
|
<div class="row_celltitles">
|
||||||
<div class="cross_icon" id="ha">
|
<div class="cross_icon" id="ha" style="display:none">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -133,7 +133,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid_row_cell" style="width: 79%;">
|
<div class="grid_row_cell" style="width: 79%;">
|
||||||
<div class="row_celltitles">
|
<div class="row_celltitles">
|
||||||
<div class="cross_icon" id="iso">
|
<div class="cross_icon" id="iso" style="display:none">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
function clickInstanceGroupHeader($arrowIcon) {
|
function clickInstanceGroupHeader($arrowIcon) {
|
||||||
//***** VM Detail (begin) ******************************************************************************
|
//***** VM Detail (begin) ******************************************************************************
|
||||||
|
var $vmPopup
|
||||||
var $rightPanelHeader;
|
var $rightPanelHeader;
|
||||||
var $rightPanelContent;
|
var $rightPanelContent;
|
||||||
var $instanceGroupContainer = $("#leftmenu_instance_group_container");
|
var $instanceGroupContainer = $("#leftmenu_instance_group_container");
|
||||||
@ -20,14 +21,12 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
stopVirtualMachine: {
|
stopVirtualMachine: {
|
||||||
label: "Stop",
|
label: "Stop",
|
||||||
isAsyncJob: true,
|
isAsyncJob: true,
|
||||||
asyncJobResponse: "stopvirtualmachineresponse",
|
asyncJobResponse: "stopvirtualmachineresponse"
|
||||||
afterSuccessFn: updateVirtualMachineState
|
|
||||||
},
|
},
|
||||||
startVirtualMachine: {
|
startVirtualMachine: {
|
||||||
label: "Start",
|
label: "Start",
|
||||||
isAsyncJob: true,
|
isAsyncJob: true,
|
||||||
asyncJobResponse: "startvirtualmachineresponse",
|
asyncJobResponse: "startvirtualmachineresponse"
|
||||||
afterSuccessFn: updateVirtualMachineState
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,6 +38,7 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
else //Destroyed, Creating, ~
|
else //Destroyed, Creating, ~
|
||||||
$rightPanelContent.find("#state").text(state).removeClass("green red").addClass("gray");
|
$rightPanelContent.find("#state").text(state).removeClass("green red").addClass("gray");
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateVirtualMachineStateInMidMenu(state, midmenuItem) {
|
function updateVirtualMachineStateInMidMenu(state, midmenuItem) {
|
||||||
if(state == "Running")
|
if(state == "Running")
|
||||||
midmenuItem.find("#status_icon").attr("src", "images/status_green.png");
|
midmenuItem.find("#status_icon").attr("src", "images/status_green.png");
|
||||||
@ -47,40 +47,56 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
else //Destroyed, Creating, ~
|
else //Destroyed, Creating, ~
|
||||||
midmenuItem.find("#status_icon").attr("src", "images/status_gray.png");
|
midmenuItem.find("#status_icon").attr("src", "images/status_gray.png");
|
||||||
}
|
}
|
||||||
function updateVirtualMachineState(state, midmenuItem) {
|
|
||||||
updateVirtualMachineStateInRightPanel(state);
|
|
||||||
updateVirtualMachineStateInMidMenu(state, midmenuItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function setMidmenuItemVm(instance, $midmenuItemVm1) {
|
function setMidmenuItemVm(instance, $midmenuItemVm1) {
|
||||||
$midmenuItemVm1.attr("id", ("midmenuItemVm_"+instance.id));
|
|
||||||
$midmenuItemVm1.data("id", instance.id);
|
|
||||||
|
|
||||||
var vmName = getVmName(instance.name, instance.displayname);
|
|
||||||
|
|
||||||
$midmenuItemVm1.data("jsonObj", instance);
|
$midmenuItemVm1.data("jsonObj", instance);
|
||||||
/*
|
$midmenuItemVm1.attr("id", ("midmenuItemVm_"+instance.id));
|
||||||
|
$midmenuItemVm1.data("id", instance.id);
|
||||||
$midmenuItemVm1.data("vmName", vmName);
|
var vmName = getVmName(instance.name, instance.displayname);
|
||||||
$midmenuItemVm1.data("ipAddress", sanitizeXSS(instance.ipaddress));
|
|
||||||
$midmenuItemVm1.data("zoneName", sanitizeXSS(instance.zonename));
|
|
||||||
$midmenuItemVm1.data("templateName", sanitizeXSS(instance.templatename));
|
|
||||||
$midmenuItemVm1.data("serviceOfferingName", sanitizeXSS(instance.serviceofferingname));
|
|
||||||
$midmenuItemVm1.data("haEnable", instance.haenable);
|
|
||||||
$midmenuItemVm1.data("created", instance.created);
|
|
||||||
$midmenuItemVm1.data("account", sanitizeXSS(instance.account));
|
|
||||||
$midmenuItemVm1.data("domain", sanitizeXSS(instance.domain));
|
|
||||||
$midmenuItemVm1.data("hostName", sanitizeXSS(instance.hostname));
|
|
||||||
$midmenuItemVm1.data("group", sanitizeXSS(instance.group));
|
|
||||||
$midmenuItemVm1.data("state", instance.state);
|
|
||||||
$midmenuItemVm1.data("isoId", instance.isoid);
|
|
||||||
*/
|
|
||||||
|
|
||||||
$midmenuItemVm1.find("#vm_name").text(vmName);
|
$midmenuItemVm1.find("#vm_name").text(vmName);
|
||||||
$midmenuItemVm1.find("#ip_address").text(instance.ipaddress);
|
$midmenuItemVm1.find("#ip_address").text(instance.ipaddress);
|
||||||
|
updateVirtualMachineStateInMidMenu(instance.state, $midmenuItemVm1);
|
||||||
updateVirtualMachineStateInMidMenu(instance.state, $midmenuItemVm1);
|
$midmenuItemVm1.bind("click", function(event) {
|
||||||
|
var $t = $(this);
|
||||||
|
var id = $t.data("id");
|
||||||
|
|
||||||
|
$t.find("#content").addClass("selected");
|
||||||
|
if(!(id in selectedItemIds))
|
||||||
|
selectedItemIds[id] = null;
|
||||||
|
|
||||||
|
if($t.find("#info_icon").css("display") != "none") {
|
||||||
|
$rightPanelContent.find("#after_action_info").text($t.data("afterActionInfo"));
|
||||||
|
if($t.find("#info_icon").hasClass("error"))
|
||||||
|
$rightPanelContent.find("#after_action_info_container").addClass("errorbox");
|
||||||
|
else
|
||||||
|
$rightPanelContent.find("#after_action_info_container").removeClass("errorbox");
|
||||||
|
$rightPanelContent.find("#after_action_info_container").show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$rightPanelContent.find("#after_action_info").text("");
|
||||||
|
$rightPanelContent.find("#after_action_info_container").hide();
|
||||||
|
}
|
||||||
|
var jsonObj = $t.data("jsonObj");
|
||||||
|
vmJsonToRightPanel(jsonObj);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function vmClearRightPanel(jsonObj) {
|
||||||
|
$rightPanelHeader.find("#vm_name").text("");
|
||||||
|
updateVirtualMachineStateInRightPanel("");
|
||||||
|
$rightPanelContent.find("#ipAddress").text("");
|
||||||
|
$rightPanelContent.find("#zoneName").text("");
|
||||||
|
$rightPanelContent.find("#templateName").text("");
|
||||||
|
$rightPanelContent.find("#serviceOfferingName").text("");
|
||||||
|
$rightPanelContent.find("#ha").hide();
|
||||||
|
$rightPanelContent.find("#created").text("");
|
||||||
|
$rightPanelContent.find("#account").text("");
|
||||||
|
$rightPanelContent.find("#domain").text("");
|
||||||
|
$rightPanelContent.find("#hostName").text("");
|
||||||
|
$rightPanelContent.find("#group").text("");
|
||||||
|
$rightPanelContent.find("#iso").hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
function vmJsonToRightPanel(jsonObj) {
|
function vmJsonToRightPanel(jsonObj) {
|
||||||
@ -92,18 +108,18 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
$rightPanelContent.find("#templateName").text(jsonObj.templatename);
|
$rightPanelContent.find("#templateName").text(jsonObj.templatename);
|
||||||
$rightPanelContent.find("#serviceOfferingName").text(jsonObj.serviceofferingname);
|
$rightPanelContent.find("#serviceOfferingName").text(jsonObj.serviceofferingname);
|
||||||
if(jsonObj.haenable == "true")
|
if(jsonObj.haenable == "true")
|
||||||
$rightPanelContent.find("#ha").removeClass("cross_icon").addClass("tick_icon");
|
$rightPanelContent.find("#ha").removeClass("cross_icon").addClass("tick_icon").show();
|
||||||
else
|
else
|
||||||
$rightPanelContent.find("#ha").removeClass("tick_icon").addClass("cross_icon");
|
$rightPanelContent.find("#ha").removeClass("tick_icon").addClass("cross_icon").show();
|
||||||
$rightPanelContent.find("#created").text(jsonObj.created);
|
$rightPanelContent.find("#created").text(jsonObj.created);
|
||||||
$rightPanelContent.find("#account").text(jsonObj.account);
|
$rightPanelContent.find("#account").text(jsonObj.account);
|
||||||
$rightPanelContent.find("#domain").text(jsonObj.domain);
|
$rightPanelContent.find("#domain").text(jsonObj.domain);
|
||||||
$rightPanelContent.find("#hostName").text(jsonObj.hostname);
|
$rightPanelContent.find("#hostName").text(jsonObj.hostname);
|
||||||
$rightPanelContent.find("#group").text(jsonObj.group);
|
$rightPanelContent.find("#group").text(jsonObj.group);
|
||||||
if(jsonObj.isoid != null && jsonObj.isoid.length > 0)
|
if(jsonObj.isoid != null && jsonObj.isoid.length > 0)
|
||||||
$rightPanelContent.find("#iso").removeClass("cross_icon").addClass("tick_icon");
|
$rightPanelContent.find("#iso").removeClass("cross_icon").addClass("tick_icon").show();
|
||||||
else
|
else
|
||||||
$rightPanelContent.find("#iso").removeClass("tick_icon").addClass("cross_icon");
|
$rightPanelContent.find("#iso").removeClass("tick_icon").addClass("cross_icon").show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -143,64 +159,21 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
$("#midmenu_container").empty();
|
$("#midmenu_container").empty();
|
||||||
var groupName = $(this).find("#group_name").text();
|
var groupName = $(this).find("#group_name").text();
|
||||||
|
|
||||||
var instances = instanceGroupMap[groupName];
|
$.ajax({
|
||||||
for(var i=0; i<instances.length;i++) {
|
cache: false,
|
||||||
var instance = instances[i];
|
data: createURL("command=listVirtualMachines&response=json"),
|
||||||
var $midmenuItemVm1 = $midmenuItemVm.clone();
|
dataType: "json",
|
||||||
setMidmenuItemVm(instance, $midmenuItemVm1);
|
success: function(json) {
|
||||||
|
var instances = json.listvirtualmachinesresponse.virtualmachine;
|
||||||
//begin of $midmenuItemVm1.bind("click")
|
for(var i=0; i<instances.length;i++) {
|
||||||
$midmenuItemVm1.bind("click", function(event) {
|
var instance = instances[i];
|
||||||
var $t = $(this);
|
var $midmenuItemVm1 = $midmenuItemVm.clone();
|
||||||
var id = $t.data("id");
|
setMidmenuItemVm(instance, $midmenuItemVm1);
|
||||||
|
$("#midmenu_container").append($midmenuItemVm1.show());
|
||||||
/*
|
}
|
||||||
var vmName = $t.data("vmName");
|
}
|
||||||
var ipAddress = $t.data("ipAddress");
|
});
|
||||||
var zoneName = $t.data("zoneName");
|
|
||||||
var templateName = $t.data("templateName");
|
|
||||||
var serviceOfferingName = $t.data("serviceOfferingName");
|
|
||||||
var haEnable = $t.data("haEnable");
|
|
||||||
var created = $t.data("created");
|
|
||||||
var account = $t.data("account");
|
|
||||||
var domain = $t.data("domain");
|
|
||||||
var hostName = $t.data("hostName");
|
|
||||||
var group = $t.data("group");
|
|
||||||
var state = $t.data("state");
|
|
||||||
var isoId = $t.data("isoId");
|
|
||||||
*/
|
|
||||||
|
|
||||||
$t.find("#content").addClass("selected");
|
|
||||||
if(!(id in selectedItemIds))
|
|
||||||
selectedItemIds[id] = null;
|
|
||||||
|
|
||||||
//populate right panel (begin)
|
|
||||||
if($t.find("#info_icon").css("display") != "none") {
|
|
||||||
$rightPanelContent.find("#after_action_info").text($t.data("afterActionInfo"));
|
|
||||||
if($t.find("#info_icon").hasClass("error"))
|
|
||||||
$rightPanelContent.find("#after_action_info_container").addClass("errorbox");
|
|
||||||
else
|
|
||||||
$rightPanelContent.find("#after_action_info_container").removeClass("errorbox");
|
|
||||||
$rightPanelContent.find("#after_action_info_container").show();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$rightPanelContent.find("#after_action_info").text("");
|
|
||||||
$rightPanelContent.find("#after_action_info_container").hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
var jsonObj = $t.data("jsonObj");
|
|
||||||
vmJsonToRightPanel(jsonObj);
|
|
||||||
|
|
||||||
$rightPanelHeader.show();
|
|
||||||
$rightPanelContent.show();
|
|
||||||
//populate right panel (end)
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
//end of $midmenuItemVm1.bind("click")
|
|
||||||
|
|
||||||
$("#midmenu_container").append($midmenuItemVm1.show());
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -218,16 +191,14 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
$link.data("api", api);
|
$link.data("api", api);
|
||||||
$link.data("label", apiInfo.label);
|
$link.data("label", apiInfo.label);
|
||||||
$link.data("isAsyncJob", apiInfo.isAsyncJob);
|
$link.data("isAsyncJob", apiInfo.isAsyncJob);
|
||||||
$link.data("asyncJobResponse", apiInfo.asyncJobResponse);
|
$link.data("asyncJobResponse", apiInfo.asyncJobResponse);
|
||||||
$link.data("afterSuccessFn", apiInfo.afterSuccessFn);
|
|
||||||
$link.bind("click", function(event) {
|
$link.bind("click", function(event) {
|
||||||
$actionMenu.hide();
|
$actionMenu.hide();
|
||||||
var $t = $(this);
|
var $t = $(this);
|
||||||
var api = $t.data("api");
|
var api = $t.data("api");
|
||||||
var label = $t.data("label");
|
var label = $t.data("label");
|
||||||
var isAsyncJob = $t.data("isAsyncJob");
|
var isAsyncJob = $t.data("isAsyncJob");
|
||||||
var asyncJobResponse = $t.data("asyncJobResponse");
|
var asyncJobResponse = $t.data("asyncJobResponse");
|
||||||
var afterSuccessFn = $t.data("afterSuccessFn");
|
|
||||||
var jobIdMap = {};
|
var jobIdMap = {};
|
||||||
for(var id in selectedItemIds) {
|
for(var id in selectedItemIds) {
|
||||||
$("#midmenuItemVm_"+id).find("#spinning_wheel").show();
|
$("#midmenuItemVm_"+id).find("#spinning_wheel").show();
|
||||||
@ -260,11 +231,11 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
if (result.jobstatus == 1) { // Succeeded
|
if (result.jobstatus == 1) { // Succeeded
|
||||||
$item.find("#info_icon").removeClass("error").show();
|
$item.find("#info_icon").removeClass("error").show();
|
||||||
$item.data("afterActionInfo", (label + " action succeeded."));
|
$item.data("afterActionInfo", (label + " action succeeded."));
|
||||||
if("virtualmachine" in result)
|
if("virtualmachine" in result)
|
||||||
afterSuccessFn(result.virtualmachine[0].state, $item, true);
|
updateVirtualMachineStateInMidMenu(result.virtualmachine[0].state, $item);
|
||||||
} else if (result.jobstatus == 2) { // Failed
|
} else if (result.jobstatus == 2) { // Failed
|
||||||
$item.find("#info_icon").addClass("error").show();
|
$item.find("#info_icon").addClass("error").show();
|
||||||
$item.data("afterActionInfo", (label + " action failed. Reason: " + sanitizeXSS(result.jobresult)));
|
$item.data("afterActionInfo", (label + " action failed. Reason: " + sanitizeXSS(result.jobresult)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -301,12 +272,12 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
$instanceGroupContainer.empty();
|
$instanceGroupContainer.empty();
|
||||||
}
|
}
|
||||||
//***** VM Detail (end) ********************************************************************************
|
//***** VM Detail (end) ********************************************************************************
|
||||||
$("#right_panel").load("jsp/tab_instance.jsp", function() {
|
$("#right_panel").load("jsp/tab_instance.jsp", function() {
|
||||||
$rightPanelHeader = $("#right_panel_header");
|
$rightPanelHeader = $("#right_panel_header");
|
||||||
$rightPanelContent = $("#right_panel_content");
|
$rightPanelContent = $("#right_panel_content");
|
||||||
|
|
||||||
//***** VM Wizard (begin) ******************************************************************************
|
//***** VM Wizard (begin) ******************************************************************************
|
||||||
var $vmPopup = $("#vm_popup");
|
$vmPopup = $("#vm_popup");
|
||||||
var $serviceOfferingTemplate = $("#vm_popup_service_offering_template");
|
var $serviceOfferingTemplate = $("#vm_popup_service_offering_template");
|
||||||
var $diskOfferingTemplate = $("#vm_popup_disk_offering_template");
|
var $diskOfferingTemplate = $("#vm_popup_disk_offering_template");
|
||||||
var currentPageInTemplateGridInVmPopup =1;
|
var currentPageInTemplateGridInVmPopup =1;
|
||||||
@ -864,11 +835,11 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
$("body").stopTime(timerKey);
|
$("body").stopTime(timerKey);
|
||||||
$t.find("#spinning_wheel").hide();
|
$t.find("#spinning_wheel").hide();
|
||||||
if (result.jobstatus == 1) {
|
if (result.jobstatus == 1) {
|
||||||
// Succeeded
|
// Succeeded
|
||||||
setMidmenuItemVm(result.virtualmachine[0], $t);
|
$t.find("#info_icon").removeClass("error").show();
|
||||||
$t.find("#ip_address_container #label").show();
|
$t.data("afterActionInfo", ("Adding succeeded."));
|
||||||
$t.find("#info_icon").show();
|
if("virtualmachine" in result)
|
||||||
|
setMidmenuItemVm(result.virtualmachine[0], $t);
|
||||||
/*
|
/*
|
||||||
vmJSONToTemplate(result.virtualmachine[0], vmInstance);
|
vmJSONToTemplate(result.virtualmachine[0], vmInstance);
|
||||||
if (result.virtualmachine[0].passwordenabled == 'true') {
|
if (result.virtualmachine[0].passwordenabled == 'true') {
|
||||||
@ -885,8 +856,17 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||||||
|
|
||||||
} else if (result.jobstatus == 2) {
|
} else if (result.jobstatus == 2) {
|
||||||
// Failed
|
// Failed
|
||||||
$t.find("#info_icon").addClass("error").show();
|
|
||||||
$t.find("#vm_name").text("Adding failed");
|
$t.find("#vm_name").text("Adding failed");
|
||||||
|
$t.find("#info_icon").addClass("error").show();
|
||||||
|
$t.data("afterActionInfo", ("Adding failed. Reason: " + sanitizeXSS(result.jobresult)));
|
||||||
|
$t.bind("click", function(event) {
|
||||||
|
$rightPanelContent.find("#after_action_info").text($(this).data("afterActionInfo"));
|
||||||
|
$rightPanelContent.find("#after_action_info_container").addClass("errorbox");
|
||||||
|
$rightPanelContent.find("#after_action_info_container").show();
|
||||||
|
vmClearRightPanel();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to create your new instance due to the error: " + result.jobresult);
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to create your new instance due to the error: " + result.jobresult);
|
||||||
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user