Initial Commit of the PDM project (ready for DWS migration)
This commit is contained in:
379
documentation/api_extracted/vbmenuitem.htm
Normal file
379
documentation/api_extracted/vbmenuitem.htm
Normal file
@@ -0,0 +1,379 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Creating Menu Commands (VB.NET)</title>
|
||||
<meta name=MS-HKWD content="VB.NET,add-ins">
|
||||
<meta name=MS-HKWD content="Add-ins, VB.NET">
|
||||
<meta http-equiv="Content-Language" content="en-us">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<link rel="stylesheet" type="text/css" href="ApiHelp.css">
|
||||
<style>
|
||||
<!--
|
||||
div.Section1
|
||||
{page:Section1;}
|
||||
.auto-style3 {
|
||||
color: #2B91AF;
|
||||
font-size: x-small;
|
||||
}
|
||||
.auto-style1 {
|
||||
font-size: x-small;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1><span style="font-weight: normal; font-size: 7.5pt;">SOLIDWORKS PDM Professional API Help</span></h1>
|
||||
<h1>Creating Menu Commands (VB.NET)</h1>
|
||||
|
||||
<div class=Section1>
|
||||
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-US style='font-family:Verdana'>This topic shows how to create a
|
||||
VB.NET add-in in Microsoft Visual Studio that adds menu commands to
|
||||
the context-sensitive and Tools menus of vaults in File
|
||||
Explorer. </span></p>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
</p>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang="en-us"><b><span style="font-family: Verdana">NOTE: </span></b></span>
|
||||
<span lang=EN-US style='font-family:Verdana;
|
||||
mso-ansi-language:EN-US'>Because SOLIDWORKS PDM Professional cannot force a reload of
|
||||
add-ins if they are written in .NET, all client machines must be restarted to ensure that the latest version of the add-in is used.<o:p></o:p></span></p>
|
||||
|
||||
<p style='margin:0in;margin-bottom:.0001pt'> </p>
|
||||
<ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>Start </span>
|
||||
<span
|
||||
style='mso-ansi-language:EN-GB'>Microsoft </span>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>Visual Studio.<br>
|
||||
</span></p></li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>Click <b>File ></b> <strong>New</strong></span><strong><span
|
||||
style='mso-ansi-language:EN-GB'> > </span></strong><font face="Verdana">
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><strong>Project</strong>. <br>
|
||||
</span></font></p>
|
||||
</li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><font face="Verdana">Select <strong>Visual Basic</strong>
|
||||
in<b> Installed </b>and<span lang="en-us"> select</span> <strong>
|
||||
<span lang="en-us">Windows Desktop > </span>Class Library</strong></span><strong><span
|
||||
style='mso-ansi-language:EN-GB'> (.NET Framework)</span></strong><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>
|
||||
as the template.<br>
|
||||
</span></font></p></li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'><font face="Verdana">
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>Type a name for the project in <b>Name</b> and
|
||||
click <b>OK</b>.<br>
|
||||
</span></font></p></li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<font face="Verdana">
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>Click <b>Project > Add Reference > </b></span>
|
||||
<span
|
||||
style='mso-ansi-language:EN-GB'><strong>Browse</strong></span><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>, click </span>
|
||||
<span
|
||||
style='mso-ansi-language:EN-GB'><strong>EPDM.Interop.epdm.dll</strong></span><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>, and click </span>
|
||||
<span
|
||||
style='mso-ansi-language:EN-GB'><strong>OK</strong></span><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>.<br></span></font></p>
|
||||
</li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang="en-us">Right-click <b>E</b></span><b>pdm.Interop.epdm</b><span lang="en-us"> in the Solution Explorer,
|
||||
select <b>Properties</b>, and set <b>Embed Interop Types</b> to <b>False</b>
|
||||
to handle methods that pass arrays of structures.</span><font face="Verdana"><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><br>
|
||||
</span></font></p>
|
||||
</li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'><span lang="en-gb">
|
||||
<font face="Verdana">Click <b>Project > Add Reference > </b>
|
||||
</span> <b>Assembly > Framework</b><span lang="en-gb">,
|
||||
click
|
||||
</span> </font>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><font face="Verdana"><b>System.Drawing,</b> and
|
||||
click <span lang="en-us"><strong>OK</strong></span>. <br>
|
||||
</font></span></p></li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'><span lang="en-gb">
|
||||
<font face="Verdana">Click <b>Close</b>.</font></span><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><font face="Verdana"><br>
|
||||
</font></span></p></li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><font face="Verdana">Right-click the name of the
|
||||
project in the Solution Explorer and select <b>Properties</b>.<br>
|
||||
</font></span></p>
|
||||
<ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'><span lang="en-gb">
|
||||
<font face="Verdana">On the Application tab, click </font></span>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><font face="Verdana"><strong>Assembly Information.</strong>
|
||||
<br>
|
||||
</font></span></p></li>
|
||||
<li>
|
||||
<p style='margin:0in;margin-bottom:.0001pt'><span lang="en-gb">
|
||||
<font face="Verdana">De-select </font></span>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'><font face="Verdana"><strong>Make assembly COM-Visible</strong><b>.<br>
|
||||
</b></font></span></p>
|
||||
</li>
|
||||
<li>
|
||||
<h4 style='margin:0in;margin-bottom:.0001pt' align="left">
|
||||
<span lang="en-gb"><font face="Verdana"><span style="font-weight: 400">
|
||||
On the <span lang="en-us">Compile</span> tab, <span lang="en-us">select
|
||||
<strong>AnyCPU</strong> for the Target CPU, de-select <strong>Prefer
|
||||
32-bit</strong>, and </span>select </span>Register for COM interop<span style="font-weight: 400">.<br>
|
||||
</span></font></span></h4>
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>
|
||||
<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
|
||||
margin-left:0in'><span lang=EN-GB style='mso-ansi-language:EN-GB'>Save the project</span><span lang=SV
|
||||
style='mso-ansi-language:SV'><o:p>.</o:p></span></p></li>
|
||||
|
||||
<li>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<font face="Verdana">Double-click
|
||||
<b>Class1.vb</b> in the Solution Explorer
|
||||
to open the code window.<br>
|
||||
</font></p>
|
||||
<ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<font face="Verdana">Before <b>Public Class
|
||||
Class1</b> type:<br>
|
||||
<br>
|
||||
</font>
|
||||
<b>
|
||||
<font face="Courier New" size="2">Imports EPDM.Interop.epdm</font><font face="Verdana"><br>
|
||||
</font>
|
||||
</b><b><font face="Courier New" size="2">Imports System.Runtime.InteropServices</font></b><font face="Verdana"><b><br>
|
||||
</b></font><font face="Courier New" size="2"><<span style="color:#2b91af;">Guid</span>(<span style="color:#a31515;">""</span>)> _<br>
|
||||
<<span style="color:#2b91af;">ComVisible</span>(<span style="color:blue;">True</span>)> _<br>
|
||||
</font></p></li>
|
||||
<li>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
To populate the GUID
|
||||
attribute above, click <b>Tools > Create GUID</b> in the IDE, select GUID
|
||||
Format
|
||||
6, click <b>Copy</b>, and click <b>Exit</b>. Replace
|
||||
<font face="Courier New" size="2"><<span style="color:#2b91af;">Guid</span>(<span style="color:#a31515;">""</span>)></font>
|
||||
with the copied string.<br>
|
||||
</p></li>
|
||||
<li>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<font face="Verdana">Type <b>Implements IEdmAddIn5</b> after <b>Public Class
|
||||
Class1 </b>and
|
||||
make sure that the GetAddInInfo and OnCmd methods are generated after
|
||||
you press <b>Enter</b>.<br>
|
||||
</font></p></li>
|
||||
<li>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>Replace your add-in's
|
||||
implementation of the
|
||||
<a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddIn5~GetAddInInfo.html">IEdmAddIn5::GetAddInInfo</a> method with the following code<span lang=SV style='font-family:Verdana;mso-ansi-language:
|
||||
SV'>:</span><span
|
||||
lang=SV style='mso-ansi-language:SV'><o:p></o:p></span></p></li>
|
||||
</ol>
|
||||
|
||||
<blockquote>
|
||||
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>Public
|
||||
Sub GetAddInInfo(ByRef poInfo As EdmAddInInfo, ByVal poVault As
|
||||
EIEdmVault5, ByVal poCmdMgr As IEdmCmdMgr5) Implements
|
||||
IEdmAddIn5.GetAddInInfo<br><br><span style='color:#669966'> </span><span style='color:#009900'>
|
||||
'Specify the add-in information </span><br> poInfo.mbsAddInName = "Menu command sample"<br> poInfo.mbsCompany = "SOLIDWORKS Corporation"<br> poInfo.mbsDescription = "Adds menu
|
||||
command items"<br> poInfo.mlAddInVersion = 1<br> poInfo.mlRequiredVersionMajor = 5<br> poInfo.mlRequiredVersionMinor = 2<br><br><span style='color:#009900'> 'Add
|
||||
menu command items (the command-ID numbers 1000 and 1001 are<br> 'arbitrary; PDM does not use them;
|
||||
instead, PDM only passes them to the<br> 'implementation of OnCmd
|
||||
to know which command was selected)</span><br> poCmdMgr.AddCmd(1000, "First command",
|
||||
EdmMenuFlags.EdmMenu_Nothing, "This is the first command",
|
||||
"First command", 0, 99)<br> poCmdMgr.AddCmd(1001, "Second command",
|
||||
EdmMenuFlags.EdmMenu_MustHaveSelection, "This is the second
|
||||
command", "Second command", 1, 99)<br><br>End Sub</span><span lang=EN-GB
|
||||
style='font-family:Verdana;mso-ansi-language:EN-GB'><br><br>The flag</span><font face="Verdana"><span lang=EN-GB style='mso-ansi-language:EN-GB'>
|
||||
</span></font>
|
||||
<span
|
||||
lang=EN-GB style='font-family:Verdana;mso-ansi-language:EN-GB'>
|
||||
<a style="text-decoration: underline" href="EPDM.Interop.epdm~EPDM.Interop.epdm.EdmMenuFlags.html">EdmMenuFlags.EdmMenu_MustHaveSelection</a></span><font face="Verdana"><span
|
||||
lang=SV style='mso-ansi-language:EN-GB'> </span></font>
|
||||
<span lang=EN-GB
|
||||
style='font-family:Verdana;mso-ansi-language:EN-GB'>means that
|
||||
the second command is only available if the user has selected one or more
|
||||
files or folders.</span></p>
|
||||
</blockquote>
|
||||
<ol>
|
||||
<li class=kadov-p value="5">
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-GB
|
||||
style='font-family:Verdana;mso-ansi-language:EN-GB'>Replace your add-in's
|
||||
implementation of the
|
||||
<a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddIn5~OnCmd.html">
|
||||
IEdmAddIn5::OnCmd</a> method with the
|
||||
following code (IEdmAddIn5::OnCmd is called when a menu command is selected by the
|
||||
user):</span> </li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<span
|
||||
style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'>Public Sub OnCmd(ByRef poCmd As EdmCmd,
|
||||
</span>
|
||||
<span style='font-family:"Courier New"'>
|
||||
<span style="color:blue;" class="auto-style1">ByRef</span></span><span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'><span style='font-family:"Courier New"' class="auto-style1"> ppoData <span style="color:blue;">As</span></span><font size="1"> <span class="auto-style3">EdmCmdData</span><span class="auto-style1">[]</span></font>) Implements IEdmAddIn5.OnCmd</span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New";color:#009900'> 'Check the command ID to
|
||||
see which command was selected<br>
|
||||
'(This only affects the
|
||||
caption of the message box below)<br>
|
||||
</span><span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'>Dim CommandName As String</span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> If poCmd.mlCmdID = 1000 Then<br> CommandName = "The first command."
|
||||
</span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> Else<br> CommandName = "The second command."</span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> End If </span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New";color:#009900'> 'Retrieve the bounds of the
|
||||
array containing the selected files and folders <br>
|
||||
</span><span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'>Dim index As Long </span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> Dim last As Long </span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> index = LBound(ppoData) </span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> last = UBound(ppoData) </span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> Dim StrID As String </span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New";color:#009900'> <br>
|
||||
'Create a message showing the
|
||||
names and IDs of all selected files and folders</span><span
|
||||
style='font-size:10.0pt;font-family:"Courier New"'> </span>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'><br> Dim message As String
|
||||
<o:p></o:p></span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'><span style='mso-spacerun:yes'> </span><span
|
||||
style='mso-spacerun:yes'> </span>message = "You have selected the
|
||||
following files and folders: " + vbLf </span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'> While index <= last<br> If ppoData(index).mlObjectID1 = 0 Then<br> message = message + "Folder: (ID="<o:p></o:p></span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>StrID
|
||||
= ppoData(index).mlObjectID2<o:p></o:p></span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>message
|
||||
= message + StrID + ") "<br> Else<br> message = message + "File: (ID="<o:p></o:p></span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>StrID
|
||||
= ppoData(index).mlObjectID1<o:p></o:p></span></p>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span style='font-size:10.0pt;
|
||||
font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>message
|
||||
= message + StrID + ") "<br> End If<br><br> message = message + ppoData(index).mbsStrData1 + vbLf<br> index = index + 1<br> End While<br>
|
||||
<br><span style='color:#009900'> 'Display the message<br></span> Dim v As EdmVault5<br> v = poCmd.mpoVault<br> v.MsgBox(poCmd.mlParentWnd, message, EdmMBoxType.EdmMbt_OKOnly,
|
||||
CommandName)<br><br>End Sub</span></p>
|
||||
</blockquote>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
<p class=MsoNormal style='line-height:11.3pt'>
|
||||
<span lang=EN-US style='mso-ansi-language:EN-US'>Click <b>Build > Build
|
||||
Solution</b> to build the add-in.</span></p></li>
|
||||
<li><span lang="en-us">I</span><span lang=EN-US style='mso-ansi-language:EN-US'>nstall
|
||||
the add-in through the SOLIDWORKS PDM Professional
|
||||
Administration tool: <br> </span><ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li><span lang="en-us">Open</span><span lang=EN-US style='mso-ansi-language:EN-US'> the SOLIDWORKS
|
||||
PDM Professional Administration tool.<br> </span></li>
|
||||
<li><span lang=EN-US style='mso-ansi-language:EN-US'>Expand the vault where
|
||||
you want to install this add-in and log in as Admin.<br> </span></li>
|
||||
<li><span lang="en-us">Right-click <b>Add-ins</b> and click <b>New
|
||||
Add-in</b>.<b><br>
|
||||
</b></span></li>
|
||||
<li>B<span lang="en-us">rowse to </span>
|
||||
<span lang=EN-US style='mso-ansi-language:EN-US'>
|
||||
<i style='mso-bidi-font-style:
|
||||
normal'>project_path</i><span style='mso-bidi-font-style:
|
||||
normal; '><i>\</i></span></span><span style='mso-bidi-font-style:
|
||||
normal; mso-ansi-language:EN-US' lang="EN-US"><i>project_name\project_name</i><b>\bin\Debug</b>,
|
||||
click <i>project_name</i><b>.dll</b> and <b>EPDM.Interop.epdm.dll</b>.<br> </span></li>
|
||||
<li><span lang="en-us">Click <b>Open</b>.<br>
|
||||
</span></li>
|
||||
<li>Click <b>OK</b>.<br>
|
||||
</li>
|
||||
<li>Click <b>OK</b>.</li>
|
||||
</ol>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-GB style='font-family:Verdana;mso-ansi-language:EN-GB'><br>
|
||||
</span><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'> </span><span style='font-size:10.0pt;
|
||||
font-family:Arial'><o:p></o:p></span></p></li>
|
||||
<li>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang="en-gb"><font face="Verdana">The first</font></span><font face="Verdana"><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'> menu command appears in the context-sensitive
|
||||
and Tools menus of vault files in </span>
|
||||
<span
|
||||
style='mso-ansi-language:EN-GB'> File</span><span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'>
|
||||
Explorer. The second menu command
|
||||
appears in the context-sensitive menus only when one or more files or folders are selected.</span></font>
|
||||
<span style="font-family: Verdana" lang="en-gb">Right-click a file in
|
||||
the</span><span lang=EN-GB
|
||||
style='font-family:Verdana;mso-ansi-language:EN-GB'> vault and select <b>Second
|
||||
command</b>. A dialog similar to the following is displayed:</span></p>
|
||||
</li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<span lang=EN-GB
|
||||
style='mso-ansi-language:EN-GB'> </span><span lang=SV
|
||||
style='mso-ansi-language:SV'><img border=0 width=266 height=185
|
||||
id="_x0000_i1029" src=advancedmenu.gif></span></p>
|
||||
</blockquote>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user