Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Linnea Samila
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 4883aff4
authored
Feb 25, 2015
by
Liv Haapala
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Korjaus kortin png-kuvan luomiseen sekä kopiointi- ja poistamisominaisuudet kortin oheissisällölle.
1 parent
aa840dcb
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
256 additions
and
26 deletions
code/MoyaWeb/WebContent/useradmin/cloneCardTemplate.xhtml
code/MoyaWeb/WebContent/useradmin/deleteCardTextData.xhtml
code/moya-beans-client/ejbModule/fi/codecrew/moya/beans/CardTemplateBeanLocal.java
code/moya-beans/ejbModule/fi/codecrew/moya/beans/CardPrintBean.java
code/moya-beans/ejbModule/fi/codecrew/moya/beans/CardTemplateBean.java
code/moya-web/WebContent/useradmin/listCardTemplateData.xhtml
code/moya-web/WebContent/useradmin/listCardTemplates.xhtml
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/card/CardTemplateDataEditView.java
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/card/CardTemplateDataView.java
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/user/CardView.java
code/MoyaWeb/WebContent/useradmin/cloneCardTemplate.xhtml
0 → 100644
View file @
4883aff
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns=
"http://www.w3.org/1999/xhtml"
xmlns:ui=
"http://java.sun.com/jsf/facelets"
xmlns:h=
"http://java.sun.com/jsf/html"
xmlns:users=
"http://java.sun.com/jsf/composite/tools/user"
xmlns:f=
"http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition
template=
"#{sessionHandler.template}"
>
<f:metadata>
<f:event
type=
"preRenderView"
listener=
"#{cardView.initCardClone}"
/>
<f:viewParam
name=
"clonedtemplateid"
value=
"#{cardView.clonedTemplateId}"
/>
</f:metadata>
<ui:define
name=
"content"
>
<h:form
id=
"cardTemplates"
>
<h:panelGrid
columns=
"2"
>
<h:outputLabel
value=
"#{i18n['cardTemplate.name']}:"
/>
<h:inputText
value=
"#{cardView.cardTemplate.name}"
/>
<h:outputLabel
value=
"#{i18n['cardTemplate.power']}:"
/>
<h:inputText
value=
"#{cardView.cardTemplate.power}"
size=
"4"
/>
</h:panelGrid>
<h:commandButton
action=
"#{cardView.cloneTemplate()}"
value=
"#{i18n['cardTemplate.create']}"
/>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
code/MoyaWeb/WebContent/useradmin/deleteCardTextData.xhtml
0 → 100644
View file @
4883aff
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns=
"http://www.w3.org/1999/xhtml"
xmlns:ui=
"http://java.sun.com/jsf/facelets"
xmlns:h=
"http://java.sun.com/jsf/html"
xmlns:users=
"http://java.sun.com/jsf/composite/tools/user"
xmlns:f=
"http://java.sun.com/jsf/core"
xmlns:p=
"http://primefaces.org/ui"
>
<h:body>
<ui:composition
template=
"#{sessionHandler.template}"
>
<f:metadata>
<f:viewParam
name=
"textdataid"
value=
"#{cardTemplateDataEditView.cardTextDataId}"
/>
<f:viewParam
name=
"objectdataid"
value=
"#{cardTemplateDataEditView.cardObjectDataId}"
/>
<f:event
type=
"preRenderView"
listener=
"#{cardTemplateDataEditView.initView()}"
/>
</f:metadata>
<ui:define
name=
"content"
>
<h:form
id=
"cardTemplates"
>
<h:panelGrid
columns=
"1"
>
<h:outputLabel
rendered=
"#{!empty cardTemplateDataEditView.cardTextData}"
value=
"#{i18n['cardTextData.deleteQ']}"
/>
<h:outputLabel
rendered=
"#{!empty cardTemplateDataEditView.cardObjectData}"
value=
"#{i18n['cardObjectData.deleteQ']}"
/>
</h:panelGrid>
<h:commandButton
rendered=
"#{!empty cardTemplateDataEditView.cardTextData}"
action=
"#{cardTemplateDataEditView.deleteTextData()}"
value=
"#{i18n['cardTextData.delete']}"
/>
<h:commandButton
rendered=
"#{!empty cardTemplateDataEditView.cardObjectData}"
action=
"#{cardTemplateDataEditView.deleteObjectData()}"
value=
"#{i18n['cardObjectData.delete']}"
/>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
code/moya-beans-client/ejbModule/fi/codecrew/moya/beans/CardTemplateBeanLocal.java
View file @
4883aff
...
...
@@ -82,4 +82,6 @@ public interface CardTemplateBeanLocal extends EntityFinderBean<CardTemplate> {
EventUser
giveCard
(
EventUser
user
,
boolean
markUserPlacesDelivered
);
void
removeCardCode
(
CardCode
code
);
CardTemplate
removeCardObjectData
(
CardObjectData
data
);
CardTemplate
removeCardTextData
(
CardTextData
data
);
}
code/moya-beans/ejbModule/fi/codecrew/moya/beans/CardPrintBean.java
View file @
4883aff
...
...
@@ -482,46 +482,44 @@ public class CardPrintBean implements CardPrintBeanLocal {
}
else
{
font
=
new
Font
(
textData
.
getFontName
(),
Font
.
PLAIN
,
textData
.
getSize
().
intValue
());
}
logger
.
info
(
"TextData fontname: "
+
textData
.
getFontName
());
logger
.
info
(
"Font: "
+
font
.
getFontName
());
g
.
setColor
(
color
);
g
.
setFont
(
font
);
int
x
=
textData
.
getX
();
int
y
=
textData
.
getY
();
if
(
textData
.
getTextAlignment
()
==
CardTextAlignment
.
CENTER
)
{
int
width
=
g
.
getFontMetrics
().
charsWidth
(
user
.
getUser
().
getNick
().
toCharArray
(),
0
,
user
.
getUser
().
getNick
().
length
());
x
-=
width
/
2
;
}
else
if
(
textData
.
getTextAlignment
()
==
CardTextAlignment
.
RIGHT
)
{
int
width
=
g
.
getFontMetrics
().
charsWidth
(
user
.
getUser
().
getNick
().
toCharArray
(),
0
,
user
.
getUser
().
getNick
().
length
());
x
-=
width
;
}
String
text
=
""
;
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
NICK
)
{
logger
.
info
(
"Drawing nick to card."
);
g
.
drawString
(
user
.
getUser
().
getNick
(),
x
,
y
);
text
=
user
.
getUser
().
getNick
();
}
else
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
FIRSTNAME
)
{
logger
.
info
(
"Drawing firstname to card."
);
g
.
drawString
(
user
.
getUser
().
getFirstnames
(),
x
,
y
);
text
=
user
.
getUser
().
getFirstnames
();
}
else
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
LASTNAME
)
{
logger
.
info
(
"Drawing lastname to card."
);
g
.
drawString
(
user
.
getUser
().
getLastname
(),
x
,
y
);
text
=
user
.
getUser
().
getLastname
();
}
else
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
WHOLENAME
)
{
logger
.
info
(
"Drawing wholename to card."
);
String
wholename
=
user
.
getUser
().
getFirstnames
()
+
" "
+
user
.
getUser
().
getLastname
();
g
.
drawString
(
wholename
,
x
,
y
);
text
=
user
.
getUser
().
getFirstnames
()
+
" "
+
user
.
getUser
().
getLastname
();
}
else
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
AGE
)
{
logger
.
info
(
"Drawing age to card."
);
g
.
drawString
(
user
.
getUser
().
getAge
().
toString
(),
x
,
y
);
text
=
user
.
getUser
().
getAge
().
toString
();
}
else
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
ROLE
)
{
logger
.
info
(
"Drawing cards templates name to card."
);
g
.
drawString
(
card
.
getTemplate
().
getName
(),
x
,
y
);
text
=
card
.
getTemplate
().
getName
();
}
else
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
STATIC
)
{
logger
.
info
(
"Drawing static text '"
+
textData
.
getText
()
+
"' to card."
);
g
.
drawString
(
textData
.
getText
(),
x
,
y
);
text
=
textData
.
getText
();
}
else
if
(
textData
.
getTextDataType
()
==
CardTextDataType
.
AUTHCODE
)
{
logger
.
info
(
"Drawing auth code text '"
+
textData
.
getText
()
+
"' to card."
);
g
.
drawString
(
userBean
.
getAuthCode
(
user
),
x
,
y
);
text
=
userBean
.
getAuthCode
(
user
);
}
if
(
textData
.
getTextAlignment
()
==
CardTextAlignment
.
CENTER
)
{
int
width
=
g
.
getFontMetrics
().
charsWidth
(
text
.
toCharArray
(),
0
,
text
.
length
());
x
-=
width
/
2
;
}
else
if
(
textData
.
getTextAlignment
()
==
CardTextAlignment
.
RIGHT
)
{
int
width
=
g
.
getFontMetrics
().
charsWidth
(
text
.
toCharArray
(),
0
,
text
.
length
());
x
-=
width
;
}
if
(!
text
.
equals
(
""
))
{
g
.
drawString
(
text
,
x
,
y
);
}
}
else
if
(
objectData
!=
null
)
{
...
...
code/moya-beans/ejbModule/fi/codecrew/moya/beans/CardTemplateBean.java
View file @
4883aff
...
...
@@ -421,5 +421,21 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
cardCodeFacade
.
remove
(
code
);
}
@Override
public
CardTemplate
removeCardTextData
(
CardTextData
data
)
{
data
=
ctdFacade
.
reload
(
data
);
CardTemplate
template
=
data
.
getCardTemplate
();
ctdFacade
.
remove
(
data
);
return
template
;
}
@Override
public
CardTemplate
removeCardObjectData
(
CardObjectData
data
)
{
data
=
codFacade
.
reload
(
data
);
CardTemplate
template
=
data
.
getCardTemplate
();
codFacade
.
remove
(
data
);
return
template
;
}
}
code/moya-web/WebContent/useradmin/listCardTemplateData.xhtml
View file @
4883aff
...
...
@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns=
"http://www.w3.org/1999/xhtml"
xmlns:ui=
"http://java.sun.com/jsf/facelets"
xmlns:h=
"http://java.sun.com/jsf/html"
xmlns:users=
"http://java.sun.com/jsf/composite/tools/user"
xmlns:f=
"http://java.sun.com/jsf/core"
xmlns:f=
"http://java.sun.com/jsf/core"
xmlns:p=
"http://primefaces.org/ui"
>
<h:body>
<ui:composition
template=
"#{sessionHandler.template}"
>
...
...
@@ -53,6 +53,15 @@
<f:param
name=
"textdataid"
value=
"#{textData.id}"
/>
</h:link>
</h:column>
<h:column>
<p:commandButton
id=
"DeleteText#{textData.id}"
value=
"Delete"
onclick=
"PF('dialogText#{textData.id}').show();"
type=
"button"
onerror=
"location.reload(true);"
/>
<p:dialog
id=
"deleteDialog"
widgetVar=
"dialogText#{textData.id}"
width=
"300"
position=
"center"
>
<h:panelGrid>
<h:outputLabel
value=
"#{i18n['cardTextData.deleteQ']}"
></h:outputLabel>
<h:commandButton
action=
"#{cardTemplateDataView.deleteTextData(textData.id)}"
value=
"#{i18n['cardTextData.delete']}"
oncomplete=
"PF('dialogText#{textData.id}').hide()"
/>
</h:panelGrid>
</p:dialog>
</h:column>
</h:dataTable>
<h:dataTable
rendered=
"#{!empty cardTemplateDataView.cardObjectDatas}"
value=
"#{cardTemplateDataView.cardObjectDatas}"
var=
"objectData"
>
<h:column>
...
...
@@ -94,6 +103,15 @@
<f:param
name=
"objectdataid"
value=
"#{objectData.id}"
/>
</h:link>
</h:column>
<h:column>
<p:commandButton
id=
"DeleteObject#{objectData.id}"
value=
"Delete"
onclick=
"PF('dialogObject#{objectData.id}').show();"
type=
"button"
onerror=
"location.reload(true);"
/>
<p:dialog
id=
"deleteObjectDataDialog"
for=
"image"
widgetVar=
"dialogObject#{objectData.id}"
width=
"300"
position=
"left"
>
<h:panelGrid>
<h:outputLabel
value=
"#{i18n['cardTextData.deleteQ']}"
></h:outputLabel>
<h:commandButton
action=
"#{cardTemplateDataView.deleteTextData(objectData.id)}"
value=
"#{i18n['cardObjectData.delete']}"
oncomplete=
"PF('dialogObject#{objectData.id}').hide()"
/>
</h:panelGrid>
</p:dialog>
</h:column>
</h:dataTable>
</h:form>
...
...
code/moya-web/WebContent/useradmin/listCardTemplates.xhtml
View file @
4883aff
...
...
@@ -47,6 +47,11 @@
</h:link>
</h:column>
<h:column>
<h:link
outcome=
"/useradmin/cloneCardTemplate"
value=
"#{i18n['cardTemplate.clone']}"
>
<f:param
name=
"clonedtemplateid"
value=
"#{card.id}"
/>
</h:link>
</h:column>
<h:column>
<h:link
outcome=
"/useradmin/editCardTextData"
value=
"#{i18n['cardTextData.create']}"
>
<f:param
name=
"templateid"
value=
"#{card.id}"
/>
<f:param
name=
"createobjecttype"
value=
"#{cardView.textDataType}"
/>
...
...
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/card/CardTemplateDataEditView.java
View file @
4883aff
...
...
@@ -178,6 +178,42 @@ public class CardTemplateDataEditView extends GenericCDIView {
}
}
public
String
deleteObjectData
()
{
if
(
this
.
cardObjectData
!=
null
)
{
setCardTemplate
(
cfbean
.
removeCardObjectData
(
this
.
cardObjectData
));
}
else
logger
.
info
(
"CardObjectData is null!"
);
return
"/useradmin/listCardTemplateData"
;
}
public
String
deleteTextData
()
{
if
(
this
.
cardTextData
!=
null
)
{
setCardTemplate
(
cfbean
.
removeCardTextData
(
this
.
cardTextData
));
}
else
logger
.
info
(
"CardTextData is null!"
);
return
"/useradmin/listCardTemplateData"
;
}
public
String
deleteObjectData
(
Integer
objectDataId
)
{
if
(
this
.
cardObjectData
!=
null
)
{
setCardTemplate
(
cfbean
.
removeCardObjectData
(
cfbean
.
findObjectData
(
objectDataId
)));
}
else
logger
.
info
(
"CardObjectData is null!"
);
return
"/useradmin/listCardTemplateData"
;
}
public
String
deleteTextData
(
Integer
textDataId
)
{
if
(
this
.
cardTextData
!=
null
)
{
setCardTemplate
(
cfbean
.
removeCardTextData
(
cfbean
.
findTextData
(
textDataId
)));
}
else
logger
.
info
(
"CardTextData is null!"
);
return
"/useradmin/listCardTemplateData"
;
}
public
String
localisedLabel
(
String
text
,
String
type
)
{
return
I18n
.
get
(
text
+
type
);
}
...
...
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/card/CardTemplateDataView.java
View file @
4883aff
...
...
@@ -26,6 +26,9 @@ import javax.enterprise.context.ConversationScoped;
import
javax.inject.Named
;
import
javax.json.Json
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
fi.codecrew.moya.beans.CardTemplateBeanLocal
;
import
fi.codecrew.moya.enums.apps.UserPermission
;
import
fi.codecrew.moya.model.CardObjectData
;
...
...
@@ -38,6 +41,7 @@ import fi.codecrew.moya.web.cdiview.GenericCDIView;
public
class
CardTemplateDataView
extends
GenericCDIView
{
private
static
final
long
serialVersionUID
=
-
9115983838324313414L
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
CardTemplateDataEditView
.
class
);
private
Integer
templateId
=
0
;
private
Integer
cardTextDataId
=
0
;
...
...
@@ -71,6 +75,28 @@ public class CardTemplateDataView extends GenericCDIView {
}
}
public
String
deleteObjectData
(
Integer
objectDataId
)
{
CardObjectData
data
=
cfbean
.
findObjectData
(
objectDataId
);
if
(
data
!=
null
)
{
cardObjectDatas
.
remove
(
data
);
setCardTemplate
(
cfbean
.
removeCardObjectData
(
data
));
}
else
logger
.
info
(
"CardObjectData is null!"
);
return
"/useradmin/listCardTemplateData"
;
}
public
String
deleteTextData
(
Integer
textDataId
)
{
CardTextData
data
=
cfbean
.
findTextData
(
textDataId
);
if
(
data
!=
null
)
{
cardTextDatas
.
remove
(
data
);
setCardTemplate
(
cfbean
.
removeCardTextData
(
data
));
}
else
logger
.
info
(
"CardTextData is null!"
);
return
"/useradmin/listCardTemplateData"
;
}
public
String
saveTextData
()
{
//if(cardTextData.getMeta() == null)
// cardTextData.setMeta(Json.createObjectBuilder().build());
...
...
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/user/CardView.java
View file @
4883aff
...
...
@@ -34,8 +34,12 @@ import org.slf4j.LoggerFactory;
import
fi.codecrew.moya.beans.CardTemplateBeanLocal
;
import
fi.codecrew.moya.beans.EventBeanLocal
;
import
fi.codecrew.moya.enums.CardTemplateDataType
;
import
fi.codecrew.moya.enums.CardTextAlignment
;
import
fi.codecrew.moya.enums.CardTextDataType
;
import
fi.codecrew.moya.enums.apps.UserPermission
;
import
fi.codecrew.moya.model.CardObjectData
;
import
fi.codecrew.moya.model.CardTemplate
;
import
fi.codecrew.moya.model.CardTextData
;
import
fi.codecrew.moya.model.EventUser
;
import
fi.codecrew.moya.utilities.I18n
;
import
fi.codecrew.moya.web.annotations.SelectedUser
;
...
...
@@ -66,6 +70,8 @@ public class CardView extends GenericCDIView {
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
CardView
.
class
);
private
Integer
clonedTemplateId
;
public
void
initCardCreate
()
{
if
(
super
.
requirePermissions
(
UserPermission
.
WRITE_ROLES
))
{
...
...
@@ -74,6 +80,18 @@ public class CardView extends GenericCDIView {
}
}
public
void
initCardClone
()
{
if
(
super
.
requirePermissions
(
UserPermission
.
WRITE_ROLES
))
{
CardTemplate
clonedTemplate
=
cfbean
.
find
(
clonedTemplateId
);
setCardTemplate
(
new
CardTemplate
(
eventBean
.
getCurrentEvent
()));
cardTemplate
.
setPower
(
clonedTemplate
.
getPower
());
cardTemplate
.
setImage
(
clonedTemplate
.
getImage
());
cardTemplate
.
setRoles
(
clonedTemplate
.
getRoles
());
super
.
beginConversation
();
}
}
public
String
saveImage
()
{
try
{
...
...
@@ -145,6 +163,52 @@ public class CardView extends GenericCDIView {
return
"/useradmin/listCardTemplates"
;
}
public
String
cloneTemplate
()
{
if
(
clonedTemplateId
!=
0
)
{
CardTemplate
srcTemplate
=
cfbean
.
find
(
clonedTemplateId
);
cfbean
.
create
(
getCardTemplate
());
CardTemplate
dstTemplate
=
getCardTemplate
();
List
<
CardObjectData
>
srcObjectDatas
=
cfbean
.
findCardObjectDatas
(
srcTemplate
);
List
<
CardTextData
>
srcTextDatas
=
cfbean
.
findCardTextDatas
(
srcTemplate
);
for
(
CardTextData
cardTextData
:
srcTextDatas
)
{
CardTextData
dstTextData
=
new
CardTextData
();
dstTextData
.
setCardTemplate
(
dstTemplate
);
dstTextData
.
setFontColorB
(
cardTextData
.
getFontColorB
());
dstTextData
.
setFontColorG
(
cardTextData
.
getFontColorG
());
dstTextData
.
setFontColorR
(
cardTextData
.
getFontColorR
());
dstTextData
.
setFont
(
cardTextData
.
getFont
());
dstTextData
.
setFontStyle
(
cardTextData
.
getFontStyle
());
dstTextData
.
setSize
(
cardTextData
.
getSize
());
if
(
cardTextData
.
getText
()
!=
null
&&
!
cardTextData
.
getText
().
equals
(
""
))
dstTextData
.
setText
(
cardTextData
.
getText
());
dstTextData
.
setTextAlignment
(
cardTextData
.
getTextAlignment
());
dstTextData
.
setTextDataType
(
cardTextData
.
getTextDataType
());
dstTextData
.
setX
(
cardTextData
.
getX
());
dstTextData
.
setY
(
cardTextData
.
getY
());
dstTextData
.
setzIndex
(
cardTextData
.
getzIndex
());
logger
.
info
(
"Saving cardTextData for cloned cardTemplate"
);
dstTextData
=
cfbean
.
save
(
dstTextData
);
}
for
(
CardObjectData
cardObjectData
:
srcObjectDatas
)
{
CardObjectData
dstObjectData
=
new
CardObjectData
();
dstObjectData
.
setCardTemplate
(
dstTemplate
);
dstObjectData
.
setSize
(
cardObjectData
.
getSize
());
dstObjectData
.
setObjectDataType
(
cardObjectData
.
getObjectDataType
());
dstObjectData
.
setX
(
cardObjectData
.
getX
());
dstObjectData
.
setY
(
cardObjectData
.
getY
());
dstObjectData
.
setzIndex
(
cardObjectData
.
getzIndex
());
logger
.
info
(
"Saving cardObjectData for cloned cardTemplate"
);
dstObjectData
=
cfbean
.
save
(
dstObjectData
);
}
cardTemplates
=
getCardTemplate
().
getEvent
().
getCardTemplates
();
}
return
"/useradmin/listCardTemplates"
;
}
public
String
saveTemplate
()
{
cardTemplate
=
cfbean
.
save
(
cardTemplate
);
...
...
@@ -198,4 +262,13 @@ public class CardView extends GenericCDIView {
public
CardTemplateDataType
getObjectDataType
()
{
return
CardTemplateDataType
.
OBJECT_DATA
;
}
public
Integer
getClonedTemplateId
()
{
return
clonedTemplateId
;
}
public
void
setClonedTemplateId
(
Integer
clonedTemplateId
)
{
this
.
clonedTemplateId
=
clonedTemplateId
;
}
}
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment