Commit 7e2e16f8 by Tuomas Riihimäki

Skynett leiskaa ja uutta menua

1 parent 73931ba3
......@@ -71,62 +71,75 @@ public class MenuBean implements MenuBeanLocal {
logger.info("Initializing menu");
LanEvent ev = eventbean.getCurrentEvent();
MenuNavigation usermenu = new MenuNavigation(ev, "topnavi.frontpage", menusort = +10);
// usernavi.addPage(menuitemfacade.findOrCreate("/index"),
// UserPermission.ANYUSER);
navifacade.create(usermenu);
MenuNavigation usermenu = new MenuNavigation(ev, "topnavi.usernavi", menusort = +10);
usermenu.addPage(menuitemfacade.findOrCreate("/index"), UserPermission.ANYUSER);
MenuNavigation userkauppa = usermenu.addPage(null, null);
userkauppa.setKey("topnavi.usershop");
userkauppa.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
userkauppa.addPage(null, null);
userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/list"), ShopPermission.SHOP_FOODWAVE);
userkauppa.addPage(null, null);
userkauppa.addPage(menuitemfacade.findOrCreate("/bill/list"), BillPermission.VIEW_OWN);
MenuNavigation adminmenu = new MenuNavigation(ev, "topnavi.adminpage", menusort = +10);
// adminnavi.addPage(menuitemfacade.findOrCreate("/index2"),
// UserPermission.ANYUSER);
navifacade.create(adminmenu);
MenuNavigation userevent = usermenu.addPage(null, null);
userevent.setKey("topnavi.userevent");
MenuNavigation shopmenu = new MenuNavigation(ev, "topnavi.shopnavi", menusort = +10);
// shopnavi.addPage(menuitemfacade.findOrCreate("/index3"),
// UserPermission.ANYUSER);
navifacade.create(shopmenu);
userevent.addPage(menuitemfacade.findOrCreate("/place/placemap"), MapPermission.VIEW);
userevent.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER);
// Index
usermenu.addPage(menuitemfacade.findOrCreate("/index"), UserPermission.VIEW_ALL);
MenuNavigation usercompetitions = usermenu.addPage(null, null);
usercompetitions.setKey("topnavi.competitions");
// kuppa
MenuNavigation usershop = usermenu.addPage(null, null);
usermenu.setKey("topnavi.shop.products");
usermenu.addPage(menuitemfacade.findOrCreate("/place/placemap"), MapPermission.VIEW);
usercompetitions.addPage(menuitemfacade.findOrCreate("/voting/compolist"), CompoPermission.VIEW_COMPOS);
usercompetitions.addPage(menuitemfacade.findOrCreate("/voting/myEntries"), CompoPermission.VIEW_COMPOS);
usercompetitions.addPage(menuitemfacade.findOrCreate("/voting/create"), CompoPermission.MANAGE);
usershop.addPage(menuitemfacade.findOrCreate("/place/myGroups"), UserPermission.VIEW_SELF);
usershop.addPage(null, null);
usershop.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
usershop.addPage(menuitemfacade.findOrCreate("/user/accountEvents"), UserPermission.VIEW_SELF);
usershop.addPage(menuitemfacade.findOrCreate("/bill/list"), BillPermission.VIEW_OWN);
MenuNavigation createuser = usermenu.addPage(null, null);
createuser.setKey("topnavi.createuser");
createuser.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW);
MenuNavigation prodsubmenu = usermenu.addPage(null, null);
prodsubmenu.setKey("topnavi.shop.products");
prodsubmenu.addPage(menuitemfacade.findOrCreate("/product/list"), ShopPermission.LIST_ALL_PRODUCTS);
prodsubmenu.addPage(menuitemfacade.findOrCreate("/product/create"), ShopPermission.MANAGE_PRODUCTS);
navifacade.create(usermenu);
MenuNavigation adminshop = usermenu.addPage(null, null);
adminshop.setKey("topnavi.shop.adminshop");
adminshop.addPage(menuitemfacade.findOrCreate("/shop/showReaderEvents"), ShopPermission.SHOP_TO_OTHERS);
adminshop.addPage(menuitemfacade.findOrCreate("/shop/listReaders"), ShopPermission.SHOP_TO_OTHERS);
MenuNavigation adminmenu = new MenuNavigation(ev, "topnavi.adminnavi", menusort = +10);
MenuNavigation adminuser = adminmenu.addPage(null, null);
adminuser.setKey("topnavi.usermgmt");
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/create"), UserPermission.VIEW_ALL);
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/list"), UserPermission.VIEW_ALL);
MenuNavigation adminroles = adminuser.addPage(null, null);
adminroles.setKey("subnavi.roles");
adminroles.addPage(menuitemfacade.findOrCreate("/role/list"), UserPermission.READ_ROLES);
adminroles.addPage(menuitemfacade.findOrCreate("/role/create"), UserPermission.WRITE_ROLES);
MenuNavigation adminshop = adminmenu.addPage(null, null);
adminshop.setKey("topnavi.adminshop");
MenuNavigation adminShopProducts = adminshop.addPage(null, null);
adminShopProducts.addPage(menuitemfacade.findOrCreate("/product/create"), ShopPermission.MANAGE_PRODUCTS);
adminShopProducts.addPage(menuitemfacade.findOrCreate("/product/list"), ShopPermission.LIST_ALL_PRODUCTS);
MenuNavigation adminShopReaders = adminshop.addPage(null, null);
adminShopReaders.setKey("subnavi.readers");
adminShopReaders.addPage(menuitemfacade.findOrCreate("/shop/showReaderEvents"), ShopPermission.SHOP_TO_OTHERS);
adminShopReaders.addPage(menuitemfacade.findOrCreate("/shop/listReaders"), ShopPermission.SHOP_TO_OTHERS);
MenuNavigation adminShopBilling = adminshop.addPage(null, null);
adminShopReaders.setKey("subnavi.billing");
adminShopBilling.addPage(menuitemfacade.findOrCreate("/bill/billSummary"), BillPermission.READ_ALL);
adminShopBilling.addPage(menuitemfacade.findOrCreate("/bill/listAll"), BillPermission.WRITE_ALL);
MenuNavigation adminevent = adminmenu.addPage(null, null);
adminevent.setKey("topnavi.event");
MenuNavigation adminEventCards = adminevent.addPage(null, null);
adminEventCards.setKey("subnavi.cards");
adminEventCards.addPage(menuitemfacade.findOrCreate("/useradmin/listCardTemplates"), UserPermission.READ_ROLES);
adminEventCards.addPage(menuitemfacade.findOrCreate("/useradmin/createCardTemplate"), UserPermission.WRITE_ROLES);
MenuNavigation billnavi = usermenu.addPage(null, null);
billnavi.setKey("topnavi.shop.bill");
billnavi.addPage(menuitemfacade.findOrCreate("/bill/billSummary"), BillPermission.READ_ALL);
billnavi.addPage(menuitemfacade.findOrCreate("/bill/listAll"), BillPermission.WRITE_ALL);
navifacade.create(usermenu);
navifacade.create(adminmenu);
MenuNavigation eventTopmenu = new MenuNavigation(ev, "topnavi.event", menusort = +10);
eventTopmenu.addPage(menuitemfacade.findOrCreate("/map/list"), MapPermission.MANAGE_MAPS);
eventTopmenu.addPage(menuitemfacade.findOrCreate("/map/create"), MapPermission.MANAGE_MAPS);
eventTopmenu.addPage(null, null);
eventTopmenu.addPage(menuitemfacade.findOrCreate("/voting/compolist"), CompoPermission.VIEW_COMPOS);
eventTopmenu.addPage(menuitemfacade.findOrCreate("/voting/myEntries"), CompoPermission.VIEW_COMPOS);
eventTopmenu.addPage(menuitemfacade.findOrCreate("/voting/create"), CompoPermission.MANAGE);
eventTopmenu.addPage(null, null);
eventTopmenu.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER);
navifacade.create(eventTopmenu);
MenuNavigation shopmenu = new MenuNavigation(ev, "topnavi.shopnavi", menusort = +10);
// shopnavi.addPage(menuitemfacade.findOrCreate("/index3"),
// UserPermission.ANYUSER);
navifacade.create(shopmenu);
/*
* MenuNavigation profileTopmenu = new MenuNavigation(ev,
......
......@@ -298,9 +298,10 @@ public class UserBean implements UserBeanLocal {
}
String path = MessageFormat.format(url, new Object[] { user.getId().toString(), hash });
LanEvent event = eventBean.getCurrentEvent();
MailMessage msg = new MailMessage();
msg.setTo(user);
msg.setSubject(I18n.get("passwordreset.mailSubject"));
msg.setSubject(I18n.get("passwordreset.mailSubject", event.getName()));
msg.setMessage(I18n.get("passwordreset.mailBody", path));
logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, path });
......
......@@ -21,6 +21,10 @@ public class LanEventDomainFacade extends IntegerPkGenericFacade<LanEventDomain>
}
public LanEventDomain findByDomain(String hostname) {
if (hostname == null)
{
return null;
}
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<LanEventDomain> cq = cb.createQuery(LanEventDomain.class);
......
......@@ -33,6 +33,7 @@
</div>
<div id="menu">
<p:menubar model="#{primeMenuView.menuModel}" />
</div>
<div id="content">
<div id="primarycontainer">
......@@ -57,28 +58,7 @@
</div>
</div>
<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://jolez.pingtimeout.net/piwik/"
: "http://jolez.pingtimeout.net/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL
+ "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 5);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch (err) {
}
</script>
<h:outputScript library="primefaces" name="jquery/jquery.js" />
<noscript>
<p>
<img src="http://jolez.pingtimeout.net/piwik/piwik.php?idsite=5" style="border: 0" alt="" />
</p>
</noscript>
<!-- End Piwik Tracking Code -->
</h:body>
</f:view>
......
......@@ -22,7 +22,7 @@
</h2>
-->
<h:form id="userform" enctype="multipart/form-data">
<h:form id="userform" enctype="#{cc.attrs.creating?'':'multipart/form-data'}" >
<h:panelGrid columns="2">
<h:panelGroup>
......@@ -53,7 +53,7 @@
<h:outputLabel value="#{i18n['user.login']}" for="login" />
<br />
<p:inputText size="25" id="login" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.login}" />
<p:inputText size="25" id="login" validator="#{userValidator.login}" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.login}" />
<p:message for="login" />
<br />
......
......@@ -255,4 +255,10 @@ text-decoration: none;
}
.ui-widget-content a {
color: #eee !important;
}
.nameMenuItem
{
float: right;
}
\ No newline at end of file
......@@ -66,12 +66,12 @@ public class SessionHandler {
template = "blipview";
return template;
}
public String getAdduserfullscreen() {
template = "adduser";
return template;
}
public String getLayout() {
if (template == null) {
template = eventbean.getPropertyString(LanEventPropertyKey.EVENT_LAYOUT);
......@@ -155,10 +155,11 @@ public class SessionHandler {
return eventbean.flushCache();
}
public String navigateTo(String url) {
return url;
}
private String preurlString;
public String getRequestPreUrl()
......@@ -182,4 +183,5 @@ public class SessionHandler {
public boolean isInDevelopmentMode() {
return BortalLocalContextHolder.isInDevelopmentMode();
}
}
......@@ -124,8 +124,8 @@ checkout.return.successDelayed = Delayed payment successfull. Payment will be co
checkout.return.successMessage = Payment confirmed. Your products have been paid.
compo.edit = Edit compo
compo.savesort = Save order
compo.saveVotes = Save votes
compo.savesort = Save order
compo.votesSaved = Votes saved
compofile.download = Download
......@@ -198,35 +198,36 @@ eventorg.save = Save
eventorgView.eventname = Name of event
eventorganiser.name = Eventorganiser
feedback.canFeedback = Feedback
feedback.submit = Submit
feedback.thanks = Thanks
food = Food
foodWave.accountevents = Accountevents
foodWave.activeFoodWaves = Active Foodwaves
foodWave.billLines = Pending Online Payments
foodWave.deliveredFoodWaves = Delivered Foodwaves
foodWave.list = Active Foodwaves
foodWave.name = Foodwave
foodWave.orders = Amount of Orders
foodWave.paid = Paid
foodWave.show = Show
foodWave.template.name = Template
foodWave.template.name = Name
foodWave.template.waves = Foodwaves
foodWave.templatename = Choose Products
foodWave.time = Time
foodWave.totalReserved = Total
foodWave.unconfirmedOrders = Unconfirmed
foodWave.template.name = Name
foodadmin.editTemplate = Edit
foodshop.buyAndPay = Buy and Pay
foodWave.time = Time
foodshop.total = Total
foodshop.buyFromCounter = Pay at info
foodshop.buyFromInternet = Pay at Internet
foodshop.total = Total
foodwave.buyInPrice = Buy In Price
foodwave.foodwaveBuyInPrice = Total buy in price
foodwave.markPaid = Foodwave marked paid
......@@ -264,8 +265,6 @@ foodwavetemplate.selectproducts = Products
foodwavetemplate.startTime = Foodwave time
foodwavetemplate.waveName = Wave name
foodshop.buyFromInternet = Pay at Internet
game.gamepoints = Game points
gamepoints = Gamepoints
......@@ -351,6 +350,8 @@ mapView.buyPlaces = Lock selected places
mapView.errorWhenReleasingPlace = Error when releasing place
mapView.errorWhenReservingPlace = Error when reserving place!
mapView.errorWhileBuyingPlaces = Error when buying places. Please try again. If error reoccurs please contact organizers.
mapView.notEnoughCreditsToReserve = You don't have enough credits to reserve this place.
menu.item = Item
menu.name = Name
menu.select = Select
......@@ -358,8 +359,6 @@ menu.sort = Sort
menuitem.navigation.key = Product flag
mapView.notEnoughCreditsToReserve = You don't have enough credits to reserve this place.
nasty.user = Go away!
org.hibernate.validator.constraints.Email.message = not a well-formed email address
......@@ -519,9 +518,9 @@ poll.name = Poll name
poll.save = Send answers
product.barcode = Barcode
product.buyInPrice = Buy in price
product.billed = Billed
product.boughtTotal = Products billed
product.buyInPrice = Buy in price
product.cart.count = To shoppingcart
product.cashed = Cashpaid
product.color = Color in UI
......@@ -554,20 +553,20 @@ productshop.noItemsInCart = There are no products in shopping cart
productshop.plusOne = +1
productshop.plusTen = +10
productshop.total = Total
reader.assocToCard = Associate to card
reader.automaticProduct = Default product
reader.automaticProductCount = Amount
reader.assocToCard = Associate to card
reader.createNewCard = Create new card
reader.description = Description
reader.edit = Edit
reader.createNewCard = Create new card
reader.description = Description
reader.edit = Edit
reader.identification = Identification
reader.name = Reader name
reader.save = Save
reader.identification = Identification
reader.name = Reader name
reader.select = Select reader
reader.tag = Tag
reader.type = Type
reader.user = User
reader.select = Select reader
reader.tag = Tag
reader.type = Type
reader.user = User
readerView.searchforuser = Search user
......@@ -641,7 +640,7 @@ sidebar.map.placemap = Placemap
sidebar.maps = Maps
sidebar.other = Other
sidebar.product.create = New product
sidebar.product.createBill = Create bill
sidebar.product.createBill = Buy products
sidebar.product.list = Products
sidebar.products = Products
sidebar.role.create = New role
......@@ -669,13 +668,13 @@ submenu.auth.login = Login
submenu.auth.logoutResponse = Logout successfull
submenu.auth.sendResetMail = Password reset
submenu.bill.billSummary = Bill summary
submenu.bill.list = My bills
submenu.bill.listAll = All bills
submenu.foodadmin.createTemplate = Create foodwave template
submenu.foodadmin.listTemplates = List foodwave templates
submenu.foodmanager.listFoodwaves = List active foodwaves
submenu.foodwave.list = Open foodwaves
submenu.foodwave.listTemplates = Food provides
submenu.bill.list = My bills
submenu.bill.listAll = All bills
submenu.index = Frontpage
submenu.map.create = Create map
submenu.map.list = List maps
......@@ -696,9 +695,9 @@ submenu.shop.listReaders = List readers
submenu.shop.showReaderEvents = Reader events
submenu.user.accountEvents = Account events
submenu.user.changePassword = Change password
submenu.user.foodwave = Food
submenu.user.create = Create new user
submenu.user.edit = User information
submenu.user.foodwave = Food
submenu.user.invite = Invite friends
submenu.user.manageuserlinks = Manage users
submenu.user.other = Other
......@@ -728,21 +727,27 @@ svm.success.successMessage = Payment was successfull. You can now your credits i
template.loggedInAs = Logged in as
topnavi.adminshop = Adminshop
topnavi.billing = Billing
topnavi.compos = Compos
topnavi.contents = Site contents
topnavi.foodwave = Food
topnavi.frontpage = Front page
topnavi.log = Log
topnavi.maps = Maps
topnavi.placemap = Map
topnavi.poll = Polls
topnavi.products = Products
topnavi.shop = Shop
topnavi.user = My properties
topnavi.userinit = User auth
topnavi.usermgmt = Users
topmenu.login = Login
topnavi.adminshop = Adminshop
topnavi.billing = Billing
topnavi.competitions = Competitions
topnavi.compos = Compos
topnavi.contents = Site contents
topnavi.createuser = Create user
topnavi.foodwave = Food
topnavi.frontpage = Front page
topnavi.log = Log
topnavi.maps = Maps
topnavi.placemap = Map
topnavi.poll = Polls
topnavi.products = Products
topnavi.shop = Shop
topnavi.user = My properties
topnavi.userevent = Event
topnavi.userinit = User auth
topnavi.usermgmt = Users
topnavi.usershop = Shop
user.accountBalance = Account balance
user.accountEventHeader = Account events
......@@ -760,11 +765,11 @@ user.createdmessage = User has been created successfully. You can no
user.defaultImage = Default picture
user.edit = Edit
user.edit.title = My information
user.email = Email
user.firstNames = Firstname
user.food.title = Choose Menu
user.foodwave.products.title = Choose Products
user.foodwavelist.title = Choose Foodwave
user.email = Email
user.firstNames = Firstname
user.hasImage = Image
user.image = Image
user.imagelist = Saved images
......@@ -777,7 +782,10 @@ user.invite.header = Accept invitation
user.invitemail = Email address
user.lastName = Lastname
user.login = Login
user.logout = Logout
user.myGroups = My place reservations
user.myPlaces = Reserved places
user.myProperties = My properties
user.nick = Nick
user.noAccountevents = No account events
user.noCurrentImage = No image
......@@ -817,9 +825,9 @@ userImport.commit = Commit
userView.image = Image
usercart.clear = Clear Cart
usercart.addSearchedUsers = Add searched users
usercart.cartsize = Size
usercart.clear = Clear Cart
usercart.showCart = Show usercart
usercart.traverse = Traverse
......@@ -842,7 +850,7 @@ userview.oldPasswordError = Invalid password!
userview.passwordTooShort = Password has to be atleast 5 characters long!
userview.passwordsChanged = Password changed
userview.passwordsDontMatch = Passwords do not match! Please try again!
userview.userExists = Username already exists! please select another.
userview.userExists = Username already exists! You may already have an account.
viewexpired.body = Please login again.
viewexpired.title = Login expired. Please login again.
......
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Create new actionmessage
actionlog.create.message = Message
actionlog.create.role = Target role
actionlog.create.submitbutton = Send
actionlog.create.taskradio = Task
actionlog.crew = Crew
actionlog.message = Event
actionlog.messagelist.description = You can follow and create new action messages in this view
actionlog.messagelist.header = Messagelist
actionlog.state = State
actionlog.task = Task
actionlog.tasklist.header = Tasklist
actionlog.time = Time
actionlog.user = User
bill.billMarkedPaidMail.message = Your deposit number {0} has been marked as paid.
bill.billMarkedPaidMail.subject = [Streamparty] Your credits have been updated
error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
eventorg.create = Create
eventorg.edit = Edit
global.cancel = Cancel
global.copyright = Codecrew Ry
global.infomail = info@streamparty.org
global.notAuthorizedExecute = You are not authorized to execute that!!
global.notauthorized = You don't have enough rights to enter this site.
global.save = Save
global.webpage = http://www.streamparty.org
httpsession.creationTime = Created
login.login = Login
login.logout = Logout
login.logoutmessage = You have logged out of the system
login.password = Password
login.submit = Login
login.username = Username
loginerror.header = Login failed
loginerror.message = Username of password incorrect.
loginerror.resetpassword = Reset password
passwordChanged.body = You can now login with the new password.
passwordChanged.header = Password changed successfully.
passwordReset.errorChanging = Unexpected error whilst password reset. Contact your administrator.
passwordReset.hashNotFound = Password change token has expired. Please send the query again.
permissiondenied.alreadyLoggedIn = You don't have enough rights
permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
resetMail.body = You can change a forgotten password by inserting your username to the field below. A link where you can change the password will be sent to the email address associated to that.
resetMail.header = Reset lost password
resetMail.send = Send email
resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Create new actionmessage
actionlog.create.message = Message
actionlog.create.role = Target role
actionlog.create.submitbutton = Send
actionlog.create.taskradio = Task
actionlog.crew = Crew
actionlog.message = Event
actionlog.messagelist.description = You can follow and create new action messages in this view
actionlog.messagelist.header = Messagelist
actionlog.state = State
actionlog.task = Task
actionlog.tasklist.header = Tasklist
actionlog.time = Time
actionlog.user = User
bill.billMarkedPaidMail.message = Your deposit number {0} has been marked as paid.
bill.billMarkedPaidMail.subject = [Streamparty] Your credits have been updated
error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
eventorg.create = Create
eventorg.edit = Edit
global.cancel = Cancel
global.copyright = Codecrew Ry
global.infomail = info@streamparty.org
global.notAuthorizedExecute = You are not authorized to execute that!!
global.notauthorized = You don't have enough rights to enter this site.
global.save = Save
global.webpage = http://www.streamparty.org
httpsession.creationTime = Created
login.login = Login
login.logout = Logout
login.logoutmessage = You have logged out of the system
login.password = Password
login.submit = Login
login.username = Username
loginerror.header = Login failed
loginerror.message = Username of password incorrect.
loginerror.resetpassword = Reset password
passwordChanged.body = You can now login with the new password.
passwordChanged.header = Password changed successfully.
passwordReset.errorChanging = Unexpected error whilst password reset. Contact your administrator.
passwordReset.hashNotFound = Password change token has expired. Please send the query again.
permissiondenied.alreadyLoggedIn = You don't have enough rights
permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
resetMail.body = You can change a forgotten password by inserting your username to the field below. A link where you can change the password will be sent to the email address associated to that.
resetMail.header = Reset lost password
resetMail.send = Send email
resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent
......@@ -122,8 +122,8 @@ checkout.return.successDelayed = Viiv\u00E4stetty maksu onnistunut. Maksu vahvis
checkout.return.successMessage = Maksu vahvistettu. Tuotteet on maksettu. Voit siirty\u00E4 eteenp\u00E4in tilauksessasi.
compo.edit = Muokkaa compoa
compo.savesort = Tallenna j\u00E4rjestys
compo.saveVotes = Tallenna \u00E4\u00E4net
compo.savesort = Tallenna j\u00E4rjestys
compo.votesSaved = \u00C4\u00E4net tallennettu
compofile.download = lataa
......@@ -196,35 +196,36 @@ eventorg.save = Tallenna
eventorgView.eventname = Tapahtuman nimi
eventorganiser.name = Tapahtumaj\u00E4rjest\u00E4j\u00E4
feedback.canFeedback = Vituttaako?
feedback.submit = L\u00E4het\u00E4
feedback.thanks = Kiiiiitooooos! :)
food = Ruoka
foodWave.accountevents = Maksetut tilaukset
foodWave.activeFoodWaves = Aktiiviset Ruokatilaukset
foodWave.billLines = Maksamattomat Verkkomaksut
foodWave.deliveredFoodWaves = Toimitetut Ruokatilaukset
foodWave.list = Ruokatilaukset
foodWave.name = Ruokatilaus
foodWave.orders = Tilausten M\u00E4\u00E4r\u00E4
foodWave.paid = Maksettuja
foodWave.show = N\u00E4yt\u00E4
foodWave.template.name = Tilauspohja
foodWave.template.name = Nimi
foodWave.template.waves = Ruokatilaus
foodWave.templatename = Valitse tuotteet
foodWave.time = Aika
foodWave.totalReserved = Yhteens\u00E4
foodWave.unconfirmedOrders = Vahvistamattomia
foodWave.template.name = Nimi
foodadmin.editTemplate = Muokkaa
foodshop.buyAndPay = Varaa ja maksa
foodWave.time = Aika
foodshop.total = Yhteens\u00E4
foodshop.buyFromCounter = Maksa infossa
foodshop.buyFromInternet = Maksa Internetiss\u00E4
foodshop.total = Yhteens\u00E4
foodwave.buyInPrice = Sis\u00E4\u00E4nostohinta
foodwave.foodwaveBuyInPrice = Sis\u00E4\u00E4nostohinta
foodwave.markPaid = Merkitty maksetuksi
......@@ -262,8 +263,6 @@ foodwavetemplate.selectproducts = Tuotteet
foodwavetemplate.startTime = Tilausaika
foodwavetemplate.waveName = Tilauksen nimi
foodshop.buyFromInternet = Maksa Internetiss\u00E4
game.gamepoints = Insomnia Game pisteet:
gamepoints = Pelipisteit\u00E4
......@@ -359,14 +358,14 @@ mapView.errorWhenReleasingPlace = Paikkaa vapauttassa tapahtui virhe.
mapView.errorWhenReservingPlace = Paikkaa varatessa tapahtui virhe.
mapView.errorWhileBuyingPlaces = Virhe paikkojen ostossa. Ole hyv\u00E4 ja yrit\u00E4 uudelleen. Jos virhe toistuu ota yhteytt\u00E4 j\u00E4rjest\u00E4jiin.
mapView.notEnoughCreditsToReserve = Sinulla ei ole riitt\u00E4v\u00E4sti suoritettuja konepaikkamaksuja t\u00E4m\u00E4n paikan varaamiseen.
menu.name = Nimi
menu.index = Etusivu
menu.select = Valitse
menu.name = Nimi
menu.place.placemap = Paikkakartta
menu.sort = J\u00E4rjest\u00E4
menu.poll.index = Kyselyt
menu.select = Valitse
menu.shop.createBill = Kauppa
menu.sort = J\u00E4rjest\u00E4
menu.user.edit = Omat tiedot
news.abstract = Lyhennelm\u00E4
......@@ -538,20 +537,20 @@ productshop.noItemsInCart = Ostoskorissa ei ole tuotteita
productshop.plusOne = +1
productshop.plusTen = +10
productshop.total = Yhteens\u00E4
reader.assocToCard = Yhdist\u00E4 korttiin
reader.automaticProduct = Oletustuote
reader.automaticProductCount = M\u00E4\u00E4r\u00E4
reader.assocToCard = Yhdist\u00E4 korttiin
reader.createNewCard = Luo uusi kortti
reader.description = Kuvaus
reader.edit = Muokkaa
reader.createNewCard = Luo uusi kortti
reader.description = Kuvaus
reader.edit = Muokkaa
reader.identification = Tunniste
reader.name = Lukijan nimi
reader.save = Tallenna
reader.identification = Tunniste
reader.name = Lukijan nimi
reader.select = Valitse lukija
reader.tag = Tag
reader.type = Tyyppi
reader.user = K\u00E4ytt\u00E4j\u00E4
reader.select = Valitse lukija
reader.tag = Tag
reader.type = Tyyppi
reader.user = K\u00E4ytt\u00E4j\u00E4
readerView.searchforuser = Etsi k\u00E4ytt\u00E4j\u00E4\u00E4
......@@ -621,7 +620,7 @@ sidebar.map.placemap = Paikkakartta
sidebar.maps = Kartat
sidebar.other = Muuta
sidebar.product.create = Uusi tuote
sidebar.product.createBill = Luo lasku
sidebar.product.createBill = Osta tuotteita
sidebar.product.list = Tuotteet
sidebar.products = Tuotteet
sidebar.role.create = Uusi rooli
......@@ -648,12 +647,12 @@ submenu.auth.login = Kirjaudu
submenu.auth.logoutResponse = Uloskirjautuminen onnistui
submenu.auth.sendResetMail = Salasanan palautus
submenu.bill.billSummary = Laskujen yhteenveto
submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.bill.listAll = Kaikki laskut
submenu.foodadmin.createTemplate = Luo tilauspohja
submenu.foodadmin.listTemplates = Muokkaa tilauspohjia
submenu.foodmanager.listFoodwaves = Aktiiviset ruokatilaukset
submenu.foodwave.list = Avoimet tilaukset
submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.bill.listAll = Kaikki laskut
submenu.index = Etusivu
submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat
......@@ -675,9 +674,9 @@ submenu.shop.showReaderEvents = Lukijan tapahtumat
submenu.user.accountEvents = Tilitapahtumat
submenu.user.changePassword = Vaihda salasana
submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4
submenu.user.foodwave = Ruoka
submenu.user.createCardTemplate = Luo korttiryhm\u00E4
submenu.user.edit = K\u00E4ytt\u00E4j\u00E4n tiedot
submenu.user.foodwave = Ruoka
submenu.user.invite = Kutsu yst\u00E4vi\u00E4
submenu.user.list = Kaikki k\u00E4ytt\u00E4j\u00E4t
submenu.user.listCardTemplates = Korttiryhm\u00E4t
......@@ -709,21 +708,27 @@ svm.success.successMessage = Verkkomaksu onnistui.
template.loggedInAs = Kirjautunut tunnuksella
topnavi.adminshop = Kauppa
topnavi.billing = Laskutus
topnavi.compos = Kilpailut
topnavi.contents = Sivuston sis\u00E4lt\u00F6
topnavi.foodwave = Ruokatilaus
topnavi.frontpage = Etusivu
topnavi.log = Logi
topnavi.maps = Kartat
topnavi.placemap = Paikkakartta
topnavi.poll = Kyselyt
topnavi.products = Tuotteet
topnavi.shop = Kauppa
topnavi.user = Omat tiedot
topnavi.userinit = K\u00E4ytt\u00E4j\u00E4n tunnistus
topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t
topmenu.login = Kirjaudu sis\u00E4\u00E4n
topnavi.adminshop = Kauppa
topnavi.billing = Laskutus
topnavi.competitions = Kilpailut
topnavi.compos = Kilpailut
topnavi.contents = Sivuston sis\u00E4lt\u00F6
topnavi.createuser = Luo k\u00E4ytt\u00E4j\u00E4
topnavi.foodwave = Ruokatilaus
topnavi.frontpage = Etusivu
topnavi.log = Logi
topnavi.maps = Kartat
topnavi.placemap = Paikkakartta
topnavi.poll = Kyselyt
topnavi.products = Tuotteet
topnavi.shop = Kauppa
topnavi.user = Omat tiedot
topnavi.userevent = Tapahtuma
topnavi.userinit = K\u00E4ytt\u00E4j\u00E4n tunnistus
topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t
topnavi.usershop = Kauppa
user.accountBalance = Tilin saldo
user.accountEventHeader = Tilitapahtumat
......@@ -741,11 +746,11 @@ user.createdmessage = K\u00E4ytt\u00E4j\u00E4tunnus on luotu onnistu
user.defaultImage = Oletukuva
user.edit = Muokkaa
user.edit.title = Omat tiedot
user.email = S\u00E4hk\u00F6posti
user.firstNames = Etunimi
user.food.title = Valitse Menu
user.foodwave.products.title = Valitse tuotteet
user.foodwavelist.title = Valitse Ruokatilaus
user.email = S\u00E4hk\u00F6posti
user.firstNames = Etunimi
user.hasImage = Kuva
user.imageUploaded = Kuva l\u00E4hetetty.
user.imagelist = Tallennetut kuvat
......@@ -757,6 +762,9 @@ user.invite.header = Luo k\u00E4ytt\u00E4j\u00E4 kutsusta
user.invitemail = S\u00E4hk\u00F6postiosoite
user.lastName = Sukunimi
user.login = K\u00E4ytt\u00E4j\u00E4tunnus
user.logout = Kirjaudu ulos
user.myPlaces = Omat konepaikat
user.myProperties = Omat tiedot
user.nick = Nick
user.noAccountevents = Ei tilitapahtumia
user.noCurrentImage = Ei kuvaa
......@@ -795,9 +803,9 @@ userImport.commit = Hyv\u00E4ksy
userView.image = Kuva
usercart.clear = Tyhjenn\u00E4 k\u00E4ytt\u00E4j\u00E4kori
usercart.addSearchedUsers = Lis\u00E4\u00E4 haetut k\u00E4ytt\u00E4j\u00E4t
usercart.cartsize = Koko
usercart.clear = Tyhjenn\u00E4 k\u00E4ytt\u00E4j\u00E4kori
usercart.showCart = K\u00E4ytt\u00E4j\u00E4kori
usercart.traverse = K\u00E4y l\u00E4pi
......@@ -819,7 +827,7 @@ userview.oldPasswordError = V\u00E4\u00E4r\u00E4 salasana!
userview.passwordTooShort = Salasana liian lyhyt. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4.
userview.passwordsChanged = Salasana vaihdettu
userview.passwordsDontMatch = Salasanat eiv\u00E4t ole samat! Ole hyv\u00E4 ja sy\u00F6t\u00E4 salasanat uudelleen.
userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus.
userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Sinulla saattaa jo olla tunnus j\u00E4rjestelm\u00E4ss\u00E4.
viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen.
viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
......
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Luo uusi ActionMessage
actionlog.create.message = Viesti
actionlog.create.role = Kohderooli
actionlog.create.submitbutton = L\u00E4het\u00E4
actionlog.create.taskradio = Teht\u00E4v\u00E4
actionlog.crew = Crew
actionlog.message = Tapahtuma
actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4.
actionlog.messagelist.header = Viestilista
actionlog.state = Tila
actionlog.task = Teht\u00E4v\u00E4
actionlog.tasklist.header = Teht\u00E4v\u00E4lista
actionlog.time = Aika
actionlog.user = Tekij\u00E4
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaamaan haluamasi paikat. \nTervetuloa tapahtumaan!\n\nTerveisin,\nInsomnia lippupalvelu\nwww.insomnia.fi
bill.billMarkedPaidMail.subject = [INSOMNIA] Lasku merkitty maksetuksi
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen.
eventorg.create = Luo
eventorg.edit = Muokkaa
global.cancel = Peruuta
global.copyright = Codecrew Ry
global.infomail = info@insomnia.fi
global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle.
global.save = Tallenna
global.webpage = http://www.insomnia.fi
httpsession.creationTime = Luotu
login.login = Kirjaudu sis\u00E4\u00E4n
login.logout = Kirjaudu ulos
login.logoutmessage = Olet kirjautunut ulos j\u00E4rjestelm\u00E4st\u00E4.
login.password = Salasana
login.submit = Kirjaudu sis\u00E4\u00E4n
login.username = K\u00E4ytt\u00E4j\u00E4tunnus
loginerror.header = Kirjautuminen ep\u00E4onnistui
loginerror.message = K\u00E4ytt\u00E4j\u00E4tunnus tai salasana ei ollut oikein.
loginerror.resetpassword = Salasana unohtunut?
passwordChanged.body = Voit nyt kirjautua k\u00E4ytt\u00E4j\u00E4tunnuksella ja uudella salasanalla sis\u00E4\u00E4n j\u00E4rjestelm\u00E4\u00E4n.
passwordChanged.header = Salasana vaihdettu onnistuneesti
passwordReset.errorChanging = Odotamaton virhe. Ota yhteytt\u00E4 yll\u00E4pitoon.
passwordReset.hashNotFound = Salasanan vaihto on vanhentunut. Jos haluat vaihtaa salasanan l\u00E4het\u00E4 vaihtopyynt\u00F6 uudelleen.
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia!
permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
resetMail.body = Voit vaihtaa unohtuneen salasanan sy\u00F6tt\u00E4m\u00E4ll\u00E4 k\u00E4ytt\u00E4j\u00E4tunnuksesi allaolevaan kentt\u00E4\u00E4n. Tunnukseen liitettyyn s\u00E4hk\u00F6postiosoitteeseen l\u00E4hetet\u00E4\u00E4n kertak\u00E4ytt\u00F6inen osoite jossa voit vaihtaa sy\u00F6tt\u00E4m\u00E4si k\u00E4ytt\u00E4j\u00E4tunnuksen salasanan.
resetMail.header = Salasana unohtunut?
resetMail.send = L\u00E4het\u00E4 s\u00E4hk\u00F6posti
resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan.
resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Luo uusi ActionMessage
actionlog.create.message = Viesti
actionlog.create.role = Kohderooli
actionlog.create.submitbutton = L\u00E4het\u00E4
actionlog.create.taskradio = Teht\u00E4v\u00E4
actionlog.crew = Crew
actionlog.message = Tapahtuma
actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4.
actionlog.messagelist.header = Viestilista
actionlog.state = Tila
actionlog.task = Teht\u00E4v\u00E4
actionlog.tasklist.header = Teht\u00E4v\u00E4lista
actionlog.time = Aika
actionlog.user = Tekij\u00E4
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaamaan haluamasi paikat. \nTervetuloa tapahtumaan!\n\nTerveisin,\nInsomnia lippupalvelu\nwww.insomnia.fi
bill.billMarkedPaidMail.subject = [INSOMNIA] Lasku merkitty maksetuksi
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen.
eventorg.create = Luo
eventorg.edit = Muokkaa
global.cancel = Peruuta
global.copyright = Codecrew Ry
global.infomail = info@insomnia.fi
global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle.
global.save = Tallenna
global.webpage = http://www.insomnia.fi
httpsession.creationTime = Luotu
login.login = Kirjaudu sis\u00E4\u00E4n
login.logout = Kirjaudu ulos
login.logoutmessage = Olet kirjautunut ulos j\u00E4rjestelm\u00E4st\u00E4.
login.password = Salasana
login.submit = Kirjaudu sis\u00E4\u00E4n
login.username = K\u00E4ytt\u00E4j\u00E4tunnus
loginerror.header = Kirjautuminen ep\u00E4onnistui
loginerror.message = K\u00E4ytt\u00E4j\u00E4tunnus tai salasana ei ollut oikein.
loginerror.resetpassword = Salasana unohtunut?
passwordChanged.body = Voit nyt kirjautua k\u00E4ytt\u00E4j\u00E4tunnuksella ja uudella salasanalla sis\u00E4\u00E4n j\u00E4rjestelm\u00E4\u00E4n.
passwordChanged.header = Salasana vaihdettu onnistuneesti
passwordReset.errorChanging = Odotamaton virhe. Ota yhteytt\u00E4 yll\u00E4pitoon.
passwordReset.hashNotFound = Salasanan vaihto on vanhentunut. Jos haluat vaihtaa salasanan l\u00E4het\u00E4 vaihtopyynt\u00F6 uudelleen.
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia!
permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
resetMail.body = Voit vaihtaa unohtuneen salasanan sy\u00F6tt\u00E4m\u00E4ll\u00E4 k\u00E4ytt\u00E4j\u00E4tunnuksesi allaolevaan kentt\u00E4\u00E4n. Tunnukseen liitettyyn s\u00E4hk\u00F6postiosoitteeseen l\u00E4hetet\u00E4\u00E4n kertak\u00E4ytt\u00F6inen osoite jossa voit vaihtaa sy\u00F6tt\u00E4m\u00E4si k\u00E4ytt\u00E4j\u00E4tunnuksen salasanan.
resetMail.header = Salasana unohtunut?
resetMail.send = L\u00E4het\u00E4 s\u00E4hk\u00F6posti
resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan.
resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty
......@@ -4,6 +4,7 @@ import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.component.menuitem.MenuItem;
......@@ -15,9 +16,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.MenuBeanLocal;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.MenuNavigation;
import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.helper.LayoutView;
@Named
@RequestScoped
......@@ -45,16 +48,45 @@ public class PrimeMenuView extends GenericCDIView {
private DefaultMenuModel menuModel;
@Inject
private LayoutView layoutview;
private MenuModel nameMenu;
private EventUser user;
private static final Logger logger = LoggerFactory.getLogger(PrimeMenuView.class);
// public MenuModel getNameMenu()
// {
//
// if (nameMenu == null)
// {
// nameMenu = new DefaultMenuModel();
// nameMenu.MenuItem item = new MenuItem();
//
// }
// return nameMenu;
// }
public MenuModel getMenuModel()
{
if (menuModel == null)
{
menuModel = new DefaultMenuModel();
// menubean.findNavigation(layoutview.getPagepath());
MenuNavigation selectedTop = menubean.findNavigation(layoutview.getPagepath());
while (selectedTop != null && selectedTop.getParent() != null)
{
selectedTop = selectedTop.getParent();
}
List<MenuNavigation> tops = menubean.getTopmenus();
for (MenuNavigation m : tops)
if (!tops.contains(selectedTop) && !tops.isEmpty())
{
selectedTop = tops.get(0);
}
for (MenuNavigation m : selectedTop.getChildren())
{
if (m.getItem() != null && m.getChildren().isEmpty())
{
......@@ -74,7 +106,45 @@ public class PrimeMenuView extends GenericCDIView {
}
}
}
user = permbean.getCurrentUser();
if (permbean.isLoggedIn())
{
Submenu nameSub = new Submenu();
nameSub.setId("nameSubmenu");
nameSub.setStyle("float:right;");
nameSub.setLabel(user.getWholeName());
MenuItem myprop = new MenuItem();
myprop.setOutcome("/user/edit");
myprop.setValue(I18n.get("user.myProperties"));
nameSub.getChildren().add(myprop);
MenuItem myPlces = new MenuItem();
myPlces.setOutcome("/place/myGroups");
myPlces.setValue(I18n.get("user.myPlaces"));
nameSub.getChildren().add(myPlces);
nameSub.getChildren().add(new Separator());
MenuItem logout = new MenuItem();
logout.setOutcome("/auth/logout");
logout.setValue(I18n.get("user.logout"));
nameSub.getChildren().add(logout);
menuModel.addSubmenu(nameSub);
} else {
MenuItem loginbtn = new MenuItem();
loginbtn.setId("loginMenuItem");
loginbtn.setStyleClass("nameMenuItem");
loginbtn.setOutcome("/auth/login");
loginbtn.setValue(I18n.get("topmenu.login"));
menuModel.addMenuItem(loginbtn);
}
}
return menuModel;
}
......@@ -141,4 +211,12 @@ public class PrimeMenuView extends GenericCDIView {
return item;
}
public LayoutView getLayoutview() {
return layoutview;
}
public void setLayoutview(LayoutView layoutview) {
this.layoutview = layoutview;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!