update nach favoriten
This commit is contained in:
@@ -15,6 +15,8 @@ using Syncfusion.WinForms.Controls;
|
||||
using Syncfusion.WinForms.DataGrid;
|
||||
using Syncfusion.WinForms.DataGrid.Interactivity;
|
||||
using Database;
|
||||
using OnDoc.Diverses;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace OnDoc.DocMgmt
|
||||
{
|
||||
@@ -23,14 +25,21 @@ namespace OnDoc.DocMgmt
|
||||
public int dokumenttypnr { get; set; } = 0;
|
||||
public bool favoriten { get; set; } = false;
|
||||
|
||||
private Boolean dragSender_Favoriten = false;
|
||||
|
||||
//0="Einzelvorlagen"
|
||||
//1="Dokumentpaket"
|
||||
public int vorlagentype { get; set; } = 0;
|
||||
|
||||
|
||||
public DokTypSelect()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.favoriten = false;
|
||||
this.treeViewDragHighlightTracker1 = new TreeViewAdvDragHighlightTracker(this.treeViewAdv2);
|
||||
this.treeViewDragHighlightTracker1.QueryAllowedPositionsForNode +=
|
||||
new QueryAllowedPositionsEventHandler(this.TreeDragDrop_QueryAllowedPositionsForNode1);
|
||||
this.treeViewDragHighlightTracker1.QueryDragInsertInfo +=
|
||||
new QueryDragInsertInfoEventHandler(treeViewDragHighlightTracker_QueryDragInsertInfo1);
|
||||
}
|
||||
|
||||
public DokTypSelect(bool favoriten)
|
||||
@@ -38,6 +47,19 @@ namespace OnDoc.DocMgmt
|
||||
InitializeComponent();
|
||||
this.favoriten = favoriten;
|
||||
RibbonButtonFavoriten.Checked = favoriten;
|
||||
if (favoriten == false)
|
||||
{
|
||||
RibbonButtonVorlagen.Checked = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
treeViewAdv1.Visible = false;
|
||||
}
|
||||
this.treeViewDragHighlightTracker1 = new TreeViewAdvDragHighlightTracker(this.treeViewAdv2);
|
||||
this.treeViewDragHighlightTracker1.QueryAllowedPositionsForNode +=
|
||||
new QueryAllowedPositionsEventHandler(this.TreeDragDrop_QueryAllowedPositionsForNode1);
|
||||
this.treeViewDragHighlightTracker1.QueryDragInsertInfo +=
|
||||
new QueryDragInsertInfoEventHandler(treeViewDragHighlightTracker_QueryDragInsertInfo1);
|
||||
}
|
||||
|
||||
private void DokTypSelect_Load_1(object sender, EventArgs e)
|
||||
@@ -46,8 +68,6 @@ namespace OnDoc.DocMgmt
|
||||
this.Style.TitleBar.ForeColor = Theaming.TitelFontColor();
|
||||
if (this.favoriten) { Load_Favoriten(""); }
|
||||
else { load_standard(""); }
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -160,10 +180,10 @@ namespace OnDoc.DocMgmt
|
||||
{
|
||||
AppParams.init();
|
||||
}
|
||||
treeViewAdv1.Enabled = false;
|
||||
treeViewAdv1.Visible = false;
|
||||
treeViewAdv1.BeginEdit();
|
||||
treeViewAdv1.Nodes.Clear();
|
||||
treeViewAdv2.Enabled = false;
|
||||
treeViewAdv2.Visible = false;
|
||||
treeViewAdv2.BeginEdit();
|
||||
treeViewAdv2.Nodes.Clear();
|
||||
|
||||
DataTable vorlagen = new DataTable();
|
||||
DataTable Struktur = new DataTable();
|
||||
@@ -174,7 +194,7 @@ namespace OnDoc.DocMgmt
|
||||
db.Get_Tabledata(sql, false, true);
|
||||
ds.Tables.Add(db.dsdaten.Tables[0].Copy());
|
||||
ds.Relations.Add("TreeParentChild", ds.Tables[0].Columns["pID"], ds.Tables[0].Columns["parentid"], false);
|
||||
treeViewAdv1.LeftImageList = imageList1;
|
||||
treeViewAdv2.LeftImageList = imageList1;
|
||||
|
||||
|
||||
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
|
||||
@@ -194,17 +214,17 @@ namespace OnDoc.DocMgmt
|
||||
root.LeftImageIndices = new int[] { 1 };
|
||||
}
|
||||
;
|
||||
treeViewAdv1.Nodes.Add(root);
|
||||
treeViewAdv2.Nodes.Add(root);
|
||||
//Recursively builds the tree
|
||||
PopulateTree_Favoriten(dr, root);
|
||||
}
|
||||
}
|
||||
|
||||
treeViewAdv1.ExpandAll();
|
||||
treeViewAdv1.SelectedNode = treeViewAdv1.Nodes[0];
|
||||
treeViewAdv1.EndEdit();
|
||||
treeViewAdv1.Enabled = true;
|
||||
treeViewAdv1.Visible = true;
|
||||
treeViewAdv2.ExpandAll();
|
||||
treeViewAdv2.SelectedNode = treeViewAdv2.Nodes[0];
|
||||
treeViewAdv2.EndEdit();
|
||||
treeViewAdv2.Enabled = true;
|
||||
treeViewAdv2.Visible = true;
|
||||
Cursor = Cursors.Default;
|
||||
|
||||
}
|
||||
@@ -271,18 +291,7 @@ namespace OnDoc.DocMgmt
|
||||
}
|
||||
}
|
||||
|
||||
private void treeViewAdv1_NodeMouseDoubleClick(object sender, TreeViewAdvMouseClickEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Convert.ToInt32(e.Node.Tag) < 0) { return; }
|
||||
if (e.Node.LeftImageIndices[0] == 0) { return; }
|
||||
System.Data.DataRow row = e.Node.TagObject as System.Data.DataRow;
|
||||
dokumenttypnr = Convert.ToInt32(row["ID"]);
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
|
||||
private void ribbonButtonCreate_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -305,19 +314,7 @@ namespace OnDoc.DocMgmt
|
||||
catch { }
|
||||
}
|
||||
|
||||
private void RibbonButtonFavoriten_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (RibbonButtonFavoriten.Checked == true)
|
||||
{
|
||||
Load_Favoriten("");
|
||||
favoriten = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
load_standard(RibbonTextSearch.TextBoxText);
|
||||
favoriten = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
@@ -327,7 +324,7 @@ namespace OnDoc.DocMgmt
|
||||
if (favoriten) { zuFavoritenHinzufügenToolStripMenuItem.Visible = false; }
|
||||
else { zuFavoritenHinzufügenToolStripMenuItem.Visible = true; }
|
||||
}
|
||||
catch {}
|
||||
catch { }
|
||||
}
|
||||
|
||||
private void zuFavoritenHinzufügenToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
@@ -335,5 +332,358 @@ namespace OnDoc.DocMgmt
|
||||
DokTypFavoritenOrdner fo = new DokTypFavoritenOrdner(AppParams.CurrentMitarbieter, treeViewAdv1.SelectedNode);
|
||||
fo.ShowDialog();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void treeViewAdv2_VisibleChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (treeViewAdv2.Visible == false)
|
||||
{
|
||||
this.Width = treeViewAdv1.Width + 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Width = treeViewAdv1.Width + treeViewAdv2.Width + 10;
|
||||
}
|
||||
treevisibility();
|
||||
}
|
||||
private void treeViewAdv1_NodeMouseDoubleClick(object sender, TreeViewAdvMouseClickEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Convert.ToInt32(e.Node.Tag) < 0) { return; }
|
||||
if (e.Node.LeftImageIndices[0] == 0) { return; }
|
||||
System.Data.DataRow row = e.Node.TagObject as System.Data.DataRow;
|
||||
dokumenttypnr = Convert.ToInt32(row["ID"]);
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
private void treeViewAdv2_NodeMouseDoubleClick(object sender, TreeViewAdvMouseClickEventArgs e)
|
||||
{
|
||||
if (Convert.ToInt32(e.Node.Tag) < 0) { return; }
|
||||
if (e.Node.LeftImageIndices[0] == 0) { return; }
|
||||
System.Data.DataRow row = e.Node.TagObject as System.Data.DataRow;
|
||||
dokumenttypnr = Convert.ToInt32(row["ID"]);
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
private void RibbonButtonVorlagen_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (RibbonButtonVorlagen.Checked == true)
|
||||
{
|
||||
treeViewAdv1.Visible = true;
|
||||
load_standard(RibbonTextSearch.TextBoxText);
|
||||
treeViewAdv1_VisibleChanged(sender, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
treeViewAdv1.Visible = false;
|
||||
treeViewAdv1_VisibleChanged(sender, e);
|
||||
}
|
||||
|
||||
}
|
||||
private void RibbonButtonFavoriten_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (RibbonButtonFavoriten.Checked == true)
|
||||
{
|
||||
treeViewAdv2.Visible = true;
|
||||
Load_Favoriten("");
|
||||
favoriten = false;
|
||||
treeViewAdv1_VisibleChanged(sender, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
treeViewAdv2.Visible = false;
|
||||
favoriten = false;
|
||||
treeViewAdv1_VisibleChanged(sender, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void treeViewAdv1_VisibleChanged(object sender, EventArgs e)
|
||||
{
|
||||
treevisibility();
|
||||
}
|
||||
private void treevisibility()
|
||||
{
|
||||
this.Width = treeViewAdv1.Width + 10; ;
|
||||
if (treeViewAdv1.Visible == true && treeViewAdv2.Visible == true) { this.Width = treeViewAdv1.Width + treeViewAdv2.Width + 10; }
|
||||
}
|
||||
|
||||
private void umbenennenToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (treeViewAdv2.SelectedNode.LeftImageIndices[0] != 0) { return; }
|
||||
string NodeName = "";
|
||||
InputDialog id = new InputDialog("Ornder umbennennen", "Name des neuen Ordners", treeViewAdv2.SelectedNode.Text);
|
||||
if (id.ShowDialog() == DialogResult.OK) { NodeName = id.result; } else { return; }
|
||||
|
||||
System.Data.DataRow dr = treeViewAdv2.SelectedNode.TagObject as System.Data.DataRow;
|
||||
DB db = new DB(AppParams.connectionstring);
|
||||
db.Exec_SQL("update relaunch_favoriten set bezeichnung='" + NodeName + "' where id=" + dr[0].ToString());
|
||||
db = null;
|
||||
Load_Favoriten("");
|
||||
}
|
||||
|
||||
private void ordnerLöschenToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (treeViewAdv2.SelectedNode.LeftImageIndices[0] == 0) {
|
||||
if (MessageBox.Show("Order und alle darunter liegenden Elemente entfernen?", "Ordner entfernen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
delete_elements(treeViewAdv2.SelectedNode);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (MessageBox.Show("Vorlage aus Favoriten entfernen?", "Vorlage entfernen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
delete_elements(treeViewAdv2.SelectedNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void delete_elements(TreeNodeAdv node)
|
||||
{
|
||||
DB db = new DB(AppParams.connectionstring);
|
||||
System.Data.DataRow dr = node.TagObject as System.Data.DataRow;
|
||||
db.Exec_SQL("update relaunch_favoriten set aktiv=0 where mitarbeiternr=" + AppParams.CurrentMitarbieter.ToString() + " and id = " + dr[0].ToString());
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
db.Exec_SQL("update relaunch_favoriten set aktiv=0 where aktiv=1 and mitarbeiternr=" + AppParams.CurrentMitarbieter.ToString() + " and parentid<>0 and parentid not in (select id from relaunch_favoriten)");
|
||||
}
|
||||
db = null;
|
||||
Load_Favoriten("");
|
||||
}
|
||||
|
||||
|
||||
private void neuerUnterordnerToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
NeuerOrdner();
|
||||
}
|
||||
|
||||
private void NeuerOrdner()
|
||||
{
|
||||
string NodeName = "";
|
||||
InputDialog id = new InputDialog("Neuer Ordner", "Name des neuen Ordners", "");
|
||||
if (id.ShowDialog() == DialogResult.OK) { NodeName = id.result; } else { return; }
|
||||
|
||||
TreeNodeAdv newnode = new TreeNodeAdv();
|
||||
if (NodeName != "")
|
||||
{
|
||||
if (treeViewAdv2.Nodes.Count == 0 || treeViewAdv2.SelectedNode == null)
|
||||
{
|
||||
newnode.Text = NodeName;
|
||||
newnode.Tag = "0";
|
||||
newnode.LeftImageIndices = new int[] { 0 };
|
||||
treeViewAdv2.Nodes.Add(newnode);
|
||||
save_new_entry(newnode, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
newnode.Text = NodeName;
|
||||
newnode.Tag = "0";
|
||||
newnode.LeftImageIndices = new int[] { 0 };
|
||||
treeViewAdv2.SelectedNode.Nodes.Add(newnode);
|
||||
System.Data.DataRow dr = treeViewAdv2.SelectedNode.TagObject as System.Data.DataRow;
|
||||
save_new_entry(newnode, Convert.ToInt32(dr["pid"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
private void save_new_entry(TreeNodeAdv node, int parent, int doktypnr = 0)
|
||||
{
|
||||
DB db = new DB(AppParams.connectionstring);
|
||||
db.Get_Tabledata("Select top 1 id from Relaunch_Favoriten order by id desc", false, true);
|
||||
int newkey = 0;
|
||||
try { newkey = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0][0]); } catch { }
|
||||
newkey = newkey + 1;
|
||||
db.dsdaten.Tables.Clear();
|
||||
db.Get_Tabledata_for_Update("Select * from Relaunch_Favoriten where mitarbeiternr=-1", false, true);
|
||||
System.Data.DataRow dr = db.daten.Tables[0].NewRow();
|
||||
dr[0] = newkey;
|
||||
try
|
||||
{
|
||||
dr[1] = parent;
|
||||
}
|
||||
catch { dr[1] = 0; }
|
||||
dr[2] = 1;
|
||||
dr[3] = node.Text;
|
||||
dr[4] = doktypnr;
|
||||
dr[5] = AppParams.CurrentMitarbieter;
|
||||
dr[6] = true;
|
||||
db.daten.Tables[0].Rows.Add(dr);
|
||||
db.Update_Data();
|
||||
|
||||
Load_Favoriten("");
|
||||
|
||||
}
|
||||
|
||||
private void neuerOrdnerAufObesterEbeneToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
treeViewAdv2.SelectedNode = null;
|
||||
NeuerOrdner();
|
||||
}
|
||||
|
||||
#region "DragDrop"
|
||||
private void treeViewAdv1_ItemDrag(object sender, ItemDragEventArgs e)
|
||||
{
|
||||
TreeViewAdv treeViewAdv = sender as TreeViewAdv;
|
||||
TreeNodeAdv[] nodes = e.Item as TreeNodeAdv[];
|
||||
TreeNodeAdv node = nodes[0];
|
||||
{
|
||||
if (node.LeftImageIndices[0] != 0)
|
||||
{
|
||||
dragSender_Favoriten = false;
|
||||
DragDropEffects result = treeViewAdv.DoDragDrop(node, DragDropEffects.Copy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private TreeNodeAdv currentSourceNode;
|
||||
private bool CanDrop(TreeNodeAdv sourceNode, TreeNodeAdv destinationNode)
|
||||
{
|
||||
if (destinationNode == null ||
|
||||
destinationNode == sourceNode || destinationNode.LeftImageIndices[0] != 0)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
private TreeViewAdvDragHighlightTracker treeViewDragHighlightTracker1 = null;
|
||||
private void treeViewAdv2_DragOver(object sender, DragEventArgs e)
|
||||
{
|
||||
// Determine drag effects
|
||||
bool droppable = true;
|
||||
TreeNodeAdv destinationNode = null;
|
||||
TreeViewAdv treeView = sender as TreeViewAdv;
|
||||
Point ptInTree = treeView.PointToClient(new Point(e.X, e.Y));
|
||||
this.currentSourceNode = null;
|
||||
|
||||
// Looking for a single tree node.
|
||||
if (e.Data.GetDataPresent(typeof(TreeNodeAdv)))
|
||||
{
|
||||
// Get the destination and source node.
|
||||
destinationNode = treeView.GetNodeAtPoint(ptInTree);
|
||||
TreeNodeAdv sourceNode = (TreeNodeAdv)e.Data.GetData(typeof(TreeNodeAdv));
|
||||
this.currentSourceNode = sourceNode;
|
||||
droppable = this.CanDrop(sourceNode, destinationNode);
|
||||
}
|
||||
else
|
||||
droppable = false;
|
||||
|
||||
if (droppable)
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
else
|
||||
e.Effect = DragDropEffects.None;
|
||||
this.treeViewDragHighlightTracker1.SetHighlightNode(destinationNode, ptInTree);
|
||||
|
||||
}
|
||||
|
||||
private void TreeDragDrop_QueryAllowedPositionsForNode1(object sender, QueryAllowedPositionsEventArgs e)
|
||||
{
|
||||
if (!this.IsOrdner(e.HighlightNode))
|
||||
{
|
||||
if (e.HighlightNode != this.currentSourceNode || e.HighlightNode.LeftImageIndices[0] == 0)
|
||||
e.AllowedPositions = TreeViewDropPositions.OnNode;
|
||||
else
|
||||
e.AllowedPositions = TreeViewDropPositions.None;
|
||||
|
||||
this.treeViewDragHighlightTracker1.EdgeSensitivityOnTop = e.HighlightNode.Bounds.Height / 2;
|
||||
e.ShowSelectionHighlight = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.treeViewDragHighlightTracker1.EdgeSensitivityOnTop = e.HighlightNode.Bounds.Height / 4;
|
||||
e.ShowSelectionHighlight = false;
|
||||
}
|
||||
}
|
||||
private bool IsOrdner(TreeNodeAdv node)
|
||||
{
|
||||
if (node.Tag == null
|
||||
|| node.LeftImageIndices[0] != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
private void treeViewDragHighlightTracker_QueryDragInsertInfo1(object sender, QueryDragInsertInfoEventArgs args)
|
||||
{
|
||||
args.DragInsertColor = Color.White;
|
||||
}
|
||||
|
||||
private void treeViewAdv2_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
TreeViewAdv treeView = sender as TreeViewAdv;
|
||||
TreeNodeAdv sourceNode = (TreeNodeAdv)e.Data.GetData(typeof(TreeNodeAdv));
|
||||
TreeNodeAdv destinationNode = this.treeViewDragHighlightTracker1.HighlightNode;
|
||||
TreeViewDropPositions dropPosition = this.treeViewDragHighlightTracker1.DropPosition;
|
||||
this.treeViewDragHighlightTracker1.ClearHighlightNode();
|
||||
this.currentSourceNode = null;
|
||||
TreeNodeAdv newnode = sourceNode.Clone();
|
||||
if (destinationNode != null)
|
||||
{
|
||||
switch (dropPosition)
|
||||
{
|
||||
case TreeViewDropPositions.AboveNode:
|
||||
//sourceNode.Move(destinationNode, NodePositions.Previous);
|
||||
break;
|
||||
case TreeViewDropPositions.BelowNode:
|
||||
//sourceNode.Move(destinationNode, NodePositions.Next);
|
||||
break;
|
||||
case TreeViewDropPositions.OnNode:
|
||||
treeViewAdv2.BeginEdit();
|
||||
destinationNode.Nodes.Add(newnode);
|
||||
System.Data.DataRow dr = newnode.Parent.TagObject as System.Data.DataRow;
|
||||
save_new_entry(newnode, Convert.ToInt32(dr["pid"]), Convert.ToInt32(newnode.Tag));
|
||||
destinationNode.Expand();
|
||||
if (dragSender_Favoriten == true)
|
||||
{
|
||||
delete_elements(sourceNode);
|
||||
treeViewAdv2.Nodes.Remove(sourceNode);
|
||||
}
|
||||
treeViewAdv2.EndEdit();
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// treeView.SelectedNode = sourceNode;
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void tsbtnNewRoot_Click(object sender, EventArgs e)
|
||||
{
|
||||
neuerOrdnerAufObesterEbeneToolStripMenuItem_Click(sender, e);
|
||||
}
|
||||
|
||||
private void tsbtnNewFolder_Click(object sender, EventArgs e)
|
||||
{
|
||||
neuerUnterordnerToolStripMenuItem_Click(sender,e);
|
||||
}
|
||||
|
||||
private void tsbtnRename_Click(object sender, EventArgs e)
|
||||
{
|
||||
umbenennenToolStripMenuItem_Click(sender, e);
|
||||
}
|
||||
|
||||
private void tsbtndelete_Click(object sender, EventArgs e)
|
||||
{
|
||||
ordnerLöschenToolStripMenuItem_Click(sender, e);
|
||||
}
|
||||
|
||||
private void treeViewAdv2_ItemDrag(object sender, ItemDragEventArgs e)
|
||||
{
|
||||
TreeViewAdv treeViewAdv = sender as TreeViewAdv;
|
||||
TreeNodeAdv[] nodes = e.Item as TreeNodeAdv[];
|
||||
TreeNodeAdv node = nodes[0];
|
||||
{
|
||||
if (node.LeftImageIndices[0] != 0)
|
||||
{
|
||||
dragSender_Favoriten = true;
|
||||
DragDropEffects result = treeViewAdv.DoDragDrop(node, DragDropEffects.Copy);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user