part 2 basedoc: move BaseDoc.py to /gen/plug/docgen and add /gen/plug/docbackend
that was missing in part 1 Still to come: makefiles and splitting new basedoc.py in small files svn: r12591
This commit is contained in:
@@ -35,7 +35,8 @@ from TransUtils import sgettext as _
|
||||
# GRAMPS modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
import BaseDoc
|
||||
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
|
||||
from gen.plug.docgen.basedoc import FONT_SANS_SERIF, PARA_ALIGN_CENTER
|
||||
from SubstKeywords import SubstKeywords
|
||||
from gen.plug import PluginManager
|
||||
from gen.plug.menu import BooleanOption, NumberOption, TextOption, PersonOption
|
||||
@@ -488,38 +489,38 @@ class AncestorTreeOptions(MenuReportOptions):
|
||||
"""Make the default output style for the Ancestor Tree."""
|
||||
|
||||
## Paragraph Styles:
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(9)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_description(_('The basic style used for the text display.'))
|
||||
default_style.add_paragraph_style("AC2-Normal", p)
|
||||
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(16)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
p.set_description(_('The basic style used for the title display.'))
|
||||
default_style.add_paragraph_style("AC2-Title", p)
|
||||
|
||||
## Draw styles
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("AC2-Normal")
|
||||
g.set_shadow(1, 0.2)
|
||||
g.set_fill_color((255, 255, 255))
|
||||
default_style.add_draw_style("AC2-box", g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("AC2-Title")
|
||||
g.set_color((0, 0, 0))
|
||||
g.set_fill_color((255, 255, 255))
|
||||
g.set_line_width(0)
|
||||
default_style.add_draw_style("AC2-title", g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
default_style.add_draw_style("AC2-line", g)
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
@@ -34,7 +34,9 @@ import time
|
||||
# GRAMPS modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
import BaseDoc
|
||||
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
|
||||
from gen.plug.docgen.basedoc import (FONT_SERIF, PARA_ALIGN_CENTER
|
||||
, PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT)
|
||||
from BasicUtils import name_displayer
|
||||
from gen.plug import PluginManager
|
||||
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_DRAW
|
||||
@@ -461,17 +463,17 @@ class CalendarOptions(MenuReportOptions):
|
||||
self.__filter.set_filters(filter_list)
|
||||
|
||||
def make_my_style(self, default_style, name, description,
|
||||
size=9, font=BaseDoc.FONT_SERIF, justified ="left",
|
||||
color=None, align=BaseDoc.PARA_ALIGN_CENTER,
|
||||
size=9, font=FONT_SERIF, justified ="left",
|
||||
color=None, align=PARA_ALIGN_CENTER,
|
||||
shadow = None, italic=0, bold=0, borders=0, indent=None):
|
||||
""" Create paragraph and graphic styles of the same name """
|
||||
# Paragraph:
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(size)
|
||||
f.set_type_face(font)
|
||||
f.set_italic(italic)
|
||||
f.set_bold(bold)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(align)
|
||||
p.set_description(description)
|
||||
@@ -482,14 +484,14 @@ class CalendarOptions(MenuReportOptions):
|
||||
if indent:
|
||||
p.set(first_indent=indent)
|
||||
if justified == "left":
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_LEFT)
|
||||
p.set_alignment(PARA_ALIGN_LEFT)
|
||||
elif justified == "right":
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_RIGHT)
|
||||
p.set_alignment(PARA_ALIGN_RIGHT)
|
||||
elif justified == "center":
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
default_style.add_paragraph_style(name, p)
|
||||
# Graphics:
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style(name)
|
||||
if shadow:
|
||||
g.set_shadow(*shadow)
|
||||
|
||||
@@ -35,7 +35,8 @@ from gen.plug.menu import TextOption, NumberOption, BooleanOption, PersonOption
|
||||
from ReportBase import Report, MenuReportOptions, ReportUtils, CATEGORY_DRAW
|
||||
from SubstKeywords import SubstKeywords
|
||||
from TransUtils import sgettext as _
|
||||
import BaseDoc
|
||||
from gen.plug.docgen import GraphicsStyle, FontStyle, ParagraphStyle
|
||||
from gen.plug.docgen.basedoc import FONT_SANS_SERIF, PARA_ALIGN_CENTER
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@@ -487,38 +488,38 @@ class DescendTreeOptions(MenuReportOptions):
|
||||
def make_default_style(self,default_style):
|
||||
"""Make the default output style for the Ancestor Tree."""
|
||||
## Paragraph Styles:
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(9)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_description(_('The basic style used for the text display.'))
|
||||
default_style.add_paragraph_style("DC2-Normal", p)
|
||||
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(16)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
p.set_description(_('The basic style used for the title display.'))
|
||||
default_style.add_paragraph_style("DC2-Title", p)
|
||||
|
||||
## Draw styles
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("DC2-Normal")
|
||||
g.set_shadow(1, 0.2)
|
||||
g.set_fill_color((255, 255, 255))
|
||||
default_style.add_draw_style("DC2-box", g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("DC2-Title")
|
||||
g.set_color((0, 0, 0))
|
||||
g.set_fill_color((255, 255, 255))
|
||||
g.set_line_width(0)
|
||||
default_style.add_draw_style("DC2-title", g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
default_style.add_draw_style("DC2-line", g)
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
@@ -33,7 +33,8 @@ from gettext import gettext as _
|
||||
# gramps modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
import BaseDoc
|
||||
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
|
||||
from gen.plug.docgen.basedoc import FONT_SANS_SERIF, PARA_ALIGN_CENTER
|
||||
from gen.plug import PluginManager
|
||||
from gen.plug.menu import EnumeratedListOption, NumberOption, PersonOption
|
||||
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_DRAW
|
||||
@@ -383,46 +384,46 @@ class FanChartOptions(MenuReportOptions):
|
||||
]
|
||||
|
||||
#Paragraph Styles
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(20)
|
||||
f.set_bold(1)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
p.set_description(_('The style used for the title.'))
|
||||
default_style.add_paragraph_style("FC-Title",p)
|
||||
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(9)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
p.set_description(_('The basic style used for the text display.'))
|
||||
default_style.add_paragraph_style("text_style", p)
|
||||
|
||||
# GraphicsStyles
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('FC-Title')
|
||||
g.set_line_width(0)
|
||||
default_style.add_draw_style("t",g)
|
||||
|
||||
for i in range (0, self.MAX_GENERATIONS):
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_fill_color(BACKGROUND_COLORS[i])
|
||||
g.set_paragraph_style('FC-Normal')
|
||||
background_style_name = 'background_style' + '%d' % i
|
||||
default_style.add_draw_style(background_style_name,g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_fill_color(BACKGROUND_COLORS[i])
|
||||
g.set_paragraph_style('text_style')
|
||||
g.set_line_width(0)
|
||||
text_style_name = 'text_style' + '%d' % i
|
||||
default_style.add_draw_style(text_style_name,g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_fill_color((255,255,255))
|
||||
g.set_paragraph_style('FC-Normal')
|
||||
default_style.add_draw_style('background_style_white',g)
|
||||
|
||||
@@ -43,7 +43,9 @@ from TransUtils import sgettext as _
|
||||
# Person and relation types
|
||||
from gen.lib import Person, FamilyRelType, EventType
|
||||
# gender and report type names
|
||||
import BaseDoc
|
||||
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
|
||||
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, FONT_SERIF,
|
||||
PARA_ALIGN_CENTER, PARA_ALIGN_LEFT)
|
||||
from gen.plug import PluginManager
|
||||
from gen.plug.menu import BooleanOption, NumberOption, EnumeratedListOption, \
|
||||
FilterOption, PersonOption
|
||||
@@ -775,21 +777,21 @@ class StatisticsChartOptions(MenuReportOptions):
|
||||
def make_default_style(self, default_style):
|
||||
"""Make the default output style for the Statistics report."""
|
||||
# Paragraph Styles
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(10)
|
||||
f.set_type_face(BaseDoc.FONT_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_LEFT)
|
||||
p.set_alignment(PARA_ALIGN_LEFT)
|
||||
p.set_description(_("The style used for the items and values."))
|
||||
default_style.add_paragraph_style("SC-Text",p)
|
||||
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(14)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
p.set_description(_("The style used for the title of the page."))
|
||||
default_style.add_paragraph_style("SC-Title",p)
|
||||
|
||||
@@ -802,14 +804,14 @@ class StatisticsChartOptions(MenuReportOptions):
|
||||
SC-color-N - The colors for drawing pies.
|
||||
SC-bar - A red bar with 0.5pt black line.
|
||||
"""
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("SC-Title")
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
g.set_line_width(0)
|
||||
default_style.add_draw_style("SC-title",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("SC-Text")
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
@@ -818,63 +820,63 @@ class StatisticsChartOptions(MenuReportOptions):
|
||||
|
||||
width = 0.8
|
||||
# red
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,0,0))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-color-0",g)
|
||||
# orange
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,158,33))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-color-1",g)
|
||||
# green
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((0,178,0))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-color-2",g)
|
||||
# violet
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((123,0,123))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-color-3",g)
|
||||
# yellow
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,0))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-color-4",g)
|
||||
# blue
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((0,105,214))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-color-5",g)
|
||||
# gray
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((210,204,210))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-color-6",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,0,0))
|
||||
g.set_line_width(width)
|
||||
default_style.add_draw_style("SC-bar",g)
|
||||
|
||||
# legend
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
|
||||
@@ -41,7 +41,9 @@ from gen.plug import PluginManager
|
||||
from gen.plug.menu import PersonOption, FilterOption, EnumeratedListOption
|
||||
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_DRAW
|
||||
pt2cm = ReportUtils.pt2cm
|
||||
import BaseDoc
|
||||
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
|
||||
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF,
|
||||
DASHED, PARA_ALIGN_CENTER)
|
||||
import Sort
|
||||
from QuestionDialog import ErrorDialog
|
||||
from BasicUtils import name_displayer
|
||||
@@ -363,29 +365,29 @@ class TimeLineOptions(MenuReportOptions):
|
||||
def make_default_style(self,default_style):
|
||||
"""Make the default output style for the Timeline report."""
|
||||
# Paragraph Styles
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(10)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_description(_("The style used for the person's name."))
|
||||
default_style.add_paragraph_style("TLG-Name",p)
|
||||
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(8)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
p.set_description(_("The style used for the year labels."))
|
||||
default_style.add_paragraph_style("TLG-Label",p)
|
||||
|
||||
f = BaseDoc.FontStyle()
|
||||
f = FontStyle()
|
||||
f.set_size(14)
|
||||
f.set_type_face(BaseDoc.FONT_SANS_SERIF)
|
||||
p = BaseDoc.ParagraphStyle()
|
||||
f.set_type_face(FONT_SANS_SERIF)
|
||||
p = ParagraphStyle()
|
||||
p.set_font(f)
|
||||
p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)
|
||||
p.set_alignment(PARA_ALIGN_CENTER)
|
||||
p.set_description(_("The style used for the title of the page."))
|
||||
default_style.add_paragraph_style("TLG-Title",p)
|
||||
|
||||
@@ -404,44 +406,44 @@ class TimeLineOptions(MenuReportOptions):
|
||||
TLG-label - Contains the TLG-Label paragraph style used for the year
|
||||
label's in the document.
|
||||
"""
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_line_width(0.5)
|
||||
g.set_color((0,0,0))
|
||||
default_style.add_draw_style("TLG-line",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_line_width(0.5)
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((0,0,0))
|
||||
default_style.add_draw_style("TLG-solid",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_line_width(0.5)
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
default_style.add_draw_style("open",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_line_width(0.5)
|
||||
g.set_line_style(BaseDoc.DASHED)
|
||||
g.set_line_style(DASHED)
|
||||
g.set_color((0,0,0))
|
||||
default_style.add_draw_style("TLG-grid",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("TLG-Name")
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
g.set_line_width(0)
|
||||
default_style.add_draw_style("TLG-text",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("TLG-Title")
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
g.set_line_width(0)
|
||||
default_style.add_draw_style("TLG-title",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g = GraphicsStyle()
|
||||
g.set_paragraph_style("TLG-Label")
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
|
||||
Reference in New Issue
Block a user