- introduced isUserNameRequired() which should make it sure to have registrations with no user name and password. This also includes no login area (not possible)
- the user then will get a random user name with format "userXXXXX" and a random password. So it is still possible that the "feature" login area for users can come back.
- so no "recover password" is possible, too. Therefore such links can be removed from the menu.
- introduced isMultiplePageEnabled() which is used as a "switch" between single-page and multiple-page registration
- introduced isPublicUserProfileEnabled() which is used to disabled/enable the feature "public user profiles" which is sometimes not wanted ...
- introduced isResendConfirmationLinkEnabled() which disabled the corresponding feature
- showing a "choose profile-mode" while no public user profile is enabled makes no sense ... So better "hide" this option.
- introduced general (abstract) controller Base<project-name>Controller which currently holds a method for checking if for a named controller debug mode is enabled
- renamed doRegister() to doFinishRegistration()
- removed no longer used i18n strings (they may have come back by cherry-picking)
- registration page 1/2 should be "basicly finished" now, single is also available
- index page is now jlandingpage-specific as registration page is in index.xhtml (careful, cherry-picking this!)
- added controller method doRegisterMultiPage1()
- added a lot more language strings
- renamed variables
- added context parameters for above new methods
- added needed navigation cases (careful with cherry-picking again)
- sorted imports (minor)
- fixed i18n string (usage)
Signed-off-by: Roland Häder <roland@haeder.net>
Signed-off-by: Roland Häder <roland@mxchange.org>
<Scene Scope="Project" version="2">
<Scope Scope="Faces Configuration Only"/>
<Scope Scope="Project">
- <Node id="admin/customer/admin_customer_delete.xhtml" x="150" y="1350" zoom="true"/>
- <Node id="admin/cellphone/admin_contact_cellphone_list.xhtml" x="400" y="750" zoom="true"/>
- <Node id="customer/checkout2.xhtml" x="1400" y="750" zoom="true"/>
- <Node id="admin/contact/admin_contact_show.xhtml" x="1400" y="600" zoom="true"/>
- <Node id="privacy.xhtml" x="650" y="900" zoom="true"/>
- <Node id="admin/mobile_provider/admin_mobile_provider_show.xhtml" x="1900" y="150" zoom="true"/>
- <Node id="guest/user/show_addressbook.xhtml" x="1650" y="450" zoom="true"/>
- <Node id="admin/user/admin_user_show.xhtml" x="650" y="150" zoom="true"/>
- <Node id="admin/index.xhtml" x="400" y="900" zoom="true"/>
- <Node id="user/login_own_addressbooks.xhtml" x="1150" y="300" zoom="true"/>
- <Node id="customer/register.xhtml" x="900" y="300" zoom="true"/>
- <Node id="user/login_user_data_saved.xhtml" x="2650" y="300" zoom="true"/>
- <Node id="item_added.xhtml" x="1650" y="300" zoom="true"/>
- <Node id="admin/category/admin_category_list.xhtml" x="1900" y="600" zoom="true"/>
- <Node id="admin/admin_logout.xhtml" x="650" y="450" zoom="true"/>
- <Node id="user/login_data_saved.xhtml" x="1650" y="750" zoom="true"/>
- <Node id="admin/user/admin_user_unlock.xhtml" x="2650" y="150" zoom="true"/>
- <Node id="customer/lost_passwd.xhtml" x="1150" y="150" zoom="true"/>
- <Node id="guest/user/user_list.xhtml" x="900" y="600" zoom="true"/>
- <Node id="index.xhtml" x="150" y="1650" zoom="true"/>
- <Node id="user/login_edit_user_data.xhtml" x="900" y="1200" zoom="true"/>
- <Node id="customer/checkout_done.xhtml" x="650" y="1200" zoom="true"/>
- <Node id="*" x="2400" y="150" zoom="true"/>
- <Node id="customer/login.xhtml" x="900" y="1050" zoom="true"/>
- <Node id="admin/customer/admin_customer_unlock.xhtml" x="900" y="150" zoom="true"/>
- <Node id="admin/cellphone/admin_contact_cellphone_edit.xhtml" x="1650" y="150" zoom="true"/>
- <Node id="user/login_index.xhtml" x="1400" y="300" zoom="true"/>
- <Node id="admin/product/admin_product_edit.xhtml" x="1650" y="600" zoom="true"/>
- <Node id="guest/user/lost_passwd.xhtml" x="2150" y="150" zoom="true"/>
- <Node id="guest/user/register_done.xhtml" x="400" y="1350" zoom="true"/>
- <Node id="guest/user/show_addressbook_entries.xhtml" x="650" y="1050" zoom="true"/>
- <Node id="admin/country/admin_country_list.xhtml" x="150" y="900" zoom="true"/>
- <Node id="admin/cellphone/admin_contact_cellphone_unlink.xhtml" x="900" y="750" zoom="true"/>
- <Node id="admin/customer/admin_customer_edit.xhtml" x="150" y="150" zoom="true"/>
- <Node id="admin/mobile_provider/admin_mobile_provider_delete.xhtml" x="400" y="300" zoom="true"/>
- <Node id="user/login_change_password.xhtml" x="400" y="450" zoom="true"/>
- <Node id="admin/mobile_provider/admin_mobile_provider_list.xhtml" x="400" y="1200" zoom="true"/>
- <Node id="customer/checkout.xhtml" x="650" y="300" zoom="true"/>
- <Node id="guest/user/user_profile.xhtml" x="400" y="150" zoom="true"/>
- <Node id="admin/product/admin_product_delete.xhtml" x="1150" y="900" zoom="true"/>
- <Node id="basket.xhtml" x="900" y="450" zoom="true"/>
- <Node id="admin/user/admin_user_delete.xhtml" x="1400" y="450" zoom="true"/>
- <Node id="exception.xhtml" x="150" y="1200" zoom="true"/>
- <Node id="admin/cellphone/admin_contact_cellphone_delete.xhtml" x="1400" y="900" zoom="true"/>
- <Node id="admin/category/admin_category_delete.xhtml" x="400" y="1050" zoom="true"/>
- <Node id="admin/user/admin_user_edit.xhtml" x="1900" y="450" zoom="true"/>
- <Node id="terms.xhtml" x="150" y="750" zoom="true"/>
- <Node id="admin/contact/admin_contact_edit.xhtml" x="650" y="1350" zoom="true"/>
- <Node id="admin/contact/admin_contact_list.xhtml" x="2900" y="150" zoom="true"/>
- <Node id="admin/user/admin_user_list.xhtml" x="150" y="1500" zoom="true"/>
- <Node id="admin/country/admin_country_delete.xhtml" x="1150" y="750" zoom="true"/>
- <Node id="user/login_change_personal_data.xhtml" x="1900" y="300" zoom="true"/>
- <Node id="admin/category/admin_category_edit.xhtml" x="1400" y="150" zoom="true"/>
- <Node id="logout.xhtml" x="1150" y="450" zoom="true"/>
- <Node id="admin/country/admin_country_edit.xhtml" x="2150" y="300" zoom="true"/>
- <Node id="user/login_add_addressbook.xhtml" x="400" y="600" zoom="true"/>
- <Node id="user/login_contact_data_saved.xhtml" x="150" y="450" zoom="true"/>
- <Node id="admin/contact/admin_contact_delete.xhtml" x="650" y="750" zoom="true"/>
- <Node id="imprint.xhtml" x="1150" y="600" zoom="true"/>
- <Node id="admin/mobile_provider/admin_mobile_provider_edit.xhtml" x="150" y="1050" zoom="true"/>
- <Node id="admin/cellphone/admin_contact_cellphone_show.xhtml" x="400" y="1500" zoom="true"/>
- <Node id="guest/user/login.xhtml" x="1150" y="1050" zoom="true"/>
- <Node id="admin/customer/admin_customer_list.xhtml" x="650" y="600" zoom="true"/>
- <Node id="guest/user/register.xhtml" x="2400" y="300" zoom="true"/>
- <Node id="user/login_change_email_address.xhtml" x="2150" y="450" zoom="true"/>
- <Node id="admin/product/admin_product_list.xhtml" x="150" y="300" zoom="true"/>
- <Node id="admin/customer/admin_customer_show.xhtml" x="900" y="900" zoom="true"/>
- <Node id="customer/empty_basket.xhtml" x="150" y="600" zoom="true"/>
+ <Node id="admin/customer/admin_customer_delete.xhtml" x="1150" y="150" zoom="true"/>
+ <Node id="admin/cellphone/admin_contact_cellphone_list.xhtml" x="400" y="450" zoom="true"/>
+ <Node id="customer/checkout2.xhtml" x="150" y="750" zoom="true"/>
+ <Node id="admin/contact/admin_contact_show.xhtml" x="900" y="450" zoom="true"/>
+ <Node id="privacy.xhtml" x="2150" y="150" zoom="true"/>
+ <Node id="admin/mobile_provider/admin_mobile_provider_show.xhtml" x="900" y="150" zoom="true"/>
+ <Node id="guest/user/show_addressbook.xhtml" x="150" y="1500" zoom="true"/>
+ <Node id="admin/user/admin_user_show.xhtml" x="150" y="600" zoom="true"/>
+ <Node id="admin/index.xhtml" x="650" y="1350" zoom="true"/>
+ <Node id="user/login_own_addressbooks.xhtml" x="900" y="750" zoom="true"/>
+ <Node id="customer/register.xhtml" x="650" y="450" zoom="true"/>
+ <Node id="user/login_user_data_saved.xhtml" x="1150" y="750" zoom="true"/>
+ <Node id="admin/category/admin_category_list.xhtml" x="900" y="600" zoom="true"/>
+ <Node id="item_added.xhtml" x="400" y="900" zoom="true"/>
+ <Node id="admin/admin_logout.xhtml" x="150" y="1050" zoom="true"/>
+ <Node id="user/login_data_saved.xhtml" x="400" y="1350" zoom="true"/>
+ <Node id="admin/user/admin_user_unlock.xhtml" x="1400" y="300" zoom="true"/>
+ <Node id="customer/lost_passwd.xhtml" x="1650" y="450" zoom="true"/>
+ <Node id="guest/user/user_list.xhtml" x="400" y="300" zoom="true"/>
+ <Node id="index.xhtml" x="2150" y="450" zoom="true"/>
+ <Node id="user/login_edit_user_data.xhtml" x="900" y="300" zoom="true"/>
+ <Node id="customer/checkout_done.xhtml" x="1400" y="150" zoom="true"/>
+ <Node id="customer/login.xhtml" x="400" y="750" zoom="true"/>
+ <Node id="*" x="400" y="1500" zoom="true"/>
+ <Node id="admin/customer/admin_customer_unlock.xhtml" x="2400" y="150" zoom="true"/>
+ <Node id="admin/cellphone/admin_contact_cellphone_edit.xhtml" x="1650" y="300" zoom="true"/>
+ <Node id="user/login_index.xhtml" x="1150" y="1050" zoom="true"/>
+ <Node id="admin/product/admin_product_edit.xhtml" x="650" y="150" zoom="true"/>
+ <Node id="guest/user/lost_passwd.xhtml" x="2400" y="300" zoom="true"/>
+ <Node id="guest/user/register_done.xhtml" x="150" y="450" zoom="true"/>
+ <Node id="guest/user/show_addressbook_entries.xhtml" x="150" y="1200" zoom="true"/>
+ <Node id="admin/country/admin_country_list.xhtml" x="2650" y="150" zoom="true"/>
+ <Node id="admin/cellphone/admin_contact_cellphone_unlink.xhtml" x="900" y="1200" zoom="true"/>
+ <Node id="admin/customer/admin_customer_edit.xhtml" x="650" y="300" zoom="true"/>
+ <Node id="admin/mobile_provider/admin_mobile_provider_delete.xhtml" x="650" y="900" zoom="true"/>
+ <Node id="user/login_change_password.xhtml" x="400" y="150" zoom="true"/>
+ <Node id="admin/mobile_provider/admin_mobile_provider_list.xhtml" x="1400" y="900" zoom="true"/>
+ <Node id="customer/checkout.xhtml" x="1150" y="300" zoom="true"/>
+ <Node id="guest/user/user_profile.xhtml" x="2650" y="300" zoom="true"/>
+ <Node id="admin/product/admin_product_delete.xhtml" x="150" y="1350" zoom="true"/>
+ <Node id="basket.xhtml" x="1400" y="600" zoom="true"/>
+ <Node id="admin/cellphone/admin_contact_cellphone_delete.xhtml" x="400" y="600" zoom="true"/>
+ <Node id="exception.xhtml" x="400" y="1050" zoom="true"/>
+ <Node id="admin/user/admin_user_delete.xhtml" x="1650" y="600" zoom="true"/>
+ <Node id="admin/category/admin_category_delete.xhtml" x="650" y="750" zoom="true"/>
+ <Node id="admin/user/admin_user_edit.xhtml" x="1900" y="600" zoom="true"/>
+ <Node id="guest/user/register_page2.xhtml" x="150" y="1650" zoom="true"/>
+ <Node id="terms.xhtml" x="1400" y="750" zoom="true"/>
+ <Node id="admin/contact/admin_contact_list.xhtml" x="150" y="300" zoom="true"/>
+ <Node id="admin/contact/admin_contact_edit.xhtml" x="1900" y="300" zoom="true"/>
+ <Node id="admin/user/admin_user_list.xhtml" x="1650" y="750" zoom="true"/>
+ <Node id="admin/country/admin_country_delete.xhtml" x="650" y="1200" zoom="true"/>
+ <Node id="user/login_change_personal_data.xhtml" x="650" y="1050" zoom="true"/>
+ <Node id="admin/category/admin_category_edit.xhtml" x="150" y="900" zoom="true"/>
+ <Node id="admin/country/admin_country_edit.xhtml" x="1150" y="600" zoom="true"/>
+ <Node id="logout.xhtml" x="2400" y="450" zoom="true"/>
+ <Node id="user/login_add_addressbook.xhtml" x="2150" y="300" zoom="true"/>
+ <Node id="user/login_contact_data_saved.xhtml" x="900" y="900" zoom="true"/>
+ <Node id="admin/contact/admin_contact_delete.xhtml" x="400" y="1200" zoom="true"/>
+ <Node id="imprint.xhtml" x="1150" y="450" zoom="true"/>
+ <Node id="admin/mobile_provider/admin_mobile_provider_edit.xhtml" x="650" y="600" zoom="true"/>
+ <Node id="admin/cellphone/admin_contact_cellphone_show.xhtml" x="1150" y="900" zoom="true"/>
+ <Node id="guest/user/login.xhtml" x="2900" y="150" zoom="true"/>
+ <Node id="admin/customer/admin_customer_list.xhtml" x="1400" y="450" zoom="true"/>
+ <Node id="guest/user/register.xhtml" x="1900" y="150" zoom="true"/>
+ <Node id="user/login_change_email_address.xhtml" x="150" y="150" zoom="true"/>
+ <Node id="admin/product/admin_product_list.xhtml" x="1650" y="150" zoom="true"/>
+ <Node id="admin/customer/admin_customer_show.xhtml" x="1900" y="450" zoom="true"/>
+ <Node id="customer/empty_basket.xhtml" x="900" y="1050" zoom="true"/>
</Scope>
<Scope Scope="All Faces Configurations"/>
</Scene>
LOGIN_NO_USER_NAME_MESSAGE=Sie haben keinen Benutzernamen eingegeben.
USER_NOT_LOGGED_IN=Sie sind nicht angemeldet.
LOGIN_OWN_PROFILE_INVISIBLE=Ihr Profil ist auf "durchsichtig" gestellt.
+LINK_GUEST_LOGIN_LOST_PASSWORD=Passwort vergessen?
+LINK_TITLE_GUEST_LOGIN_LOST_PASSWORD=Passwort wiederherstellen
TABLE_HEADER_ERROR_USER_NOT_LOGGED_IN=Sie m\u00fcssen angemeldet sein
USER_IS_NOT_LOGGED_IN_FULL=Damit diese Funktion nutzen k\u00f6nnen, m\u00fcssen Sie sich anmelden und in Ihren Account eingeloggt sein.
LOGIN_EDIT_USER_DATA_TITLE=Was m\u00f6chten Sie \u00e4ndern?
ADMIN_ADD_OR_ENTER_CONTACT_DATA=... oder geben Sie die Kontaktdaten des Recruiters ein:
ADMIN_PERSONAL_DATA_EMAIL_ADDRESS=Email-Adresse:
ERROR_CONTACT_ID_NOT_FOUND=Fehler: Kontaktdaten nicht gefunden.
+GUEST_REGISTRATION_PAGE1_TITLE=Anmeldeseite 1
+GUEST_REGISTRATION_PAGE2_TITLE=Anmeldeseite 2
+BUTTON_CONTINUE_REGISTER_PAGE2=Weiter zur Anmeldeseite 2
+ERROR_GUEST_REGISTER_MULTIPLE_PAGE_NOT_ENABLED=Fehler: Mehrfach-Seite f\u00fcr Anmeldung nicht aktiv, bitte Link nicht aufrufen.
+PAGE_TITLE_USER_REGISTER_PAGE2=Anmeldeseite 2
+CONTENT_TITLE_USER_REGISTER_PAGE2=Anmeldeseite 2:
+ERROR_GUEST_USER_LOGIN_DEACTIVATED=Fehler: Der Benutzerbereich wurde administrativ deaktiviert (keine Benutzernamen bei Anmeldung).
+ERROR_GUEST_USER_RECOVER_PASSWORD_DEACTIVATED=Fehler: Wiederherstellen des Passwortes wurde administrativ deaktiviert.
+ERROR_GUEST_USER_RESEND_CONFIRMATION_DEACTIVATED=Fehler: Erneutes Aussenden des Best\u00e4tigungslinked ist administrativ deaktiviert.
+ERROR_GUEST_USER_PROFILE_DEACTIVATED=Fehler: \u00d6ffentliche Benutzerprofile sind administrativ deaktiviert.
ADMIN_ADD_OR_ENTER_CONTACT_DATA=... or enter the recruiter's contact data:
ADMIN_PERSONAL_DATA_EMAIL_ADDRESS=Email address:
ERROR_CONTACT_ID_NOT_FOUND=Error: contact data not found
+GUEST_REGISTRATION_PAGE1_TITLE=Registration page 1
+GUEST_REGISTRATION_PAGE2_TITLE=Registration page 2
+BUTTON_CONTINUE_REGISTER_PAGE2=Continue to registration page 2
+ERROR_GUEST_REGISTER_MULTIPLE_PAGE_NOT_ENABLED=Error: Multiple registration page not active, please don't call this page.
+PAGE_TITLE_USER_REGISTER_PAGE2=Register page 2
+CONTENT_TITLE_USER_REGISTER_PAGE2=Register page 2:
+ERROR_GUEST_USER_LOGIN_DEACTIVATED=Error: User area is deactivated by administrators, no user name while registration.
+ERROR_GUEST_USER_RECOVER_PASSWORD_DEACTIVATED=Error: password recovery is deactivated by administrators.
+ERROR_GUEST_USER_RESEND_CONFIRMATION_DEACTIVATED=Error: Resending confirmation link is deactivated by administrators.
+ERROR_GUEST_USER_PROFILE_DEACTIVATED=Error: Public user profiles are deactivated by administrators.
--- /dev/null
+/*
+ * Copyright (C) 2016 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.pizzaapplication.beans;
+
+import java.io.Serializable;
+import javax.faces.context.FacesContext;
+
+/**
+ * A general controller
+ * <p>
+ * @author Roland Haeder<roland@mxchange.org>
+ */
+public abstract class BasePizzaController implements Serializable {
+
+ /**
+ * Serial number
+ */
+ private static final long serialVersionUID = 50_837_597_127_567_140L;
+
+ /**
+ * Checks whether debug mode is enabled for given controller
+ * <p>
+ * @param controllerName Name of controller
+ * <p>
+ * @return Whether debug mode is enabled
+ */
+ protected boolean isDebugModeEnabled (final String controllerName) {
+ // Parameters should be valid
+ if (null == controllerName) {
+ // Throw NPE
+ throw new NullPointerException("controllerName is null"); //NOI18N
+ } else if (controllerName.isEmpty()) {
+ // Is empty
+ throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+ }
+
+ // Try to get context parameter
+ String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+
+ // Is it set and true?
+ boolean isEnabled = ((contextParameter instanceof String) && (contextParameter.equals("true"))); //NOI18N
+
+ // Return it
+ return isEnabled;
+ }
+
+}
import org.mxchange.jshopcore.model.basket.ShopBasket;
import org.mxchange.jshopcore.model.basket.items.BasketItem;
import org.mxchange.jshopcore.model.product.Product;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* A bean for the basket
*/
@Named ("basketController")
@SessionScoped
-public class PizzaBasketWebSessionBean implements PizzaBasketWebSessionController {
+public class PizzaBasketWebSessionBean extends BasePizzaController implements PizzaBasketWebSessionController {
/**
* Serial number
import org.mxchange.jshopcore.model.category.AdminCategorySessionBeanRemote;
import org.mxchange.jshopcore.model.category.Category;
import org.mxchange.jshopcore.model.category.ProductCategory;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* Main application class
*/
@Named ("adminCategoryController")
@RequestScoped
-public class PizzaAdminCategoryWebRequestBean implements PizzaAdminCategoryWebRequestController {
+public class PizzaAdminCategoryWebRequestBean extends BasePizzaController implements PizzaAdminCategoryWebRequestController {
/**
* Serial number
import org.mxchange.jshopcore.events.category.AddedCategoryEvent;
import org.mxchange.jshopcore.model.category.Category;
import org.mxchange.jshopcore.model.category.CategorySessionBeanRemote;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* General (product) category controller
*/
@Named ("categoryController")
@ApplicationScoped
-public class PizzaCategoryWebApplicationBean implements PizzaCategoryWebApplicationController {
+public class PizzaCategoryWebApplicationBean extends BasePizzaController implements PizzaCategoryWebApplicationController {
/**
* Serial number
import org.mxchange.jshopcore.model.basket.AddableBasketItem;
import org.mxchange.jshopcore.wrapper.CheckoutWrapper;
import org.mxchange.jshopcore.wrapper.WrapableCheckout;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.basket.PizzaBasketWebSessionController;
import org.mxchange.pizzaapplication.beans.contact.PizzaContactWebSessionController;
import org.mxchange.pizzaapplication.beans.customer.PizzaCustomerWebSessionController;
*/
@Named ("checkoutController")
@SessionScoped
-public class PizzaCheckoutWebSessionBean implements PizzaCheckoutWebSessionController {
+public class PizzaCheckoutWebSessionBean extends BasePizzaController implements PizzaCheckoutWebSessionController {
/**
* Serial number
import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
import org.mxchange.jphone.phonenumbers.landline.LandLineNumber;
import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.helper.PizzaAdminWebRequestController;
/**
*/
@Named ("adminContactController")
@RequestScoped
-public class PizzaAdminContactWebRequestBean implements PizzaAdminContactWebRequestController {
+public class PizzaAdminContactWebRequestBean extends BasePizzaController implements PizzaAdminContactWebRequestController {
/**
* Serial number
import org.mxchange.jusercore.events.registration.UserRegisteredEvent;
import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
import org.mxchange.jusercore.exceptions.UserPasswordMismatchException;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.login.PizzaUserLoginWebSessionController;
/**
*/
@Named ("contactController")
@SessionScoped
-public class PizzaContactWebSessionBean implements PizzaContactWebSessionController {
+public class PizzaContactWebSessionBean extends BasePizzaController implements PizzaContactWebSessionController {
/**
* Serial number
*/
private boolean isLandLineUnlinked;
- /**
- * Login bean (controller)
- */
- @Inject
- private PizzaUserLoginWebSessionController userLoginController;
-
/**
* Phone number area code
*/
*/
private String street;
+ /**
+ * Login bean (controller)
+ */
+ @Inject
+ private PizzaUserLoginWebSessionController userLoginController;
+
/**
* ZIP code
*/
import org.mxchange.jcountry.events.AdminAddedCountryEvent;
import org.mxchange.jcountry.events.AdminEventCountryAdded;
import org.mxchange.jcountry.exceptions.CountryAlreadyAddedException;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* An administrative country bean
*/
@Named ("adminCountryController")
@RequestScoped
-public class PizzaAdminCountryWebRequestBean implements PizzaAdminCountryWebRequestController {
+public class PizzaAdminCountryWebRequestBean extends BasePizzaController implements PizzaAdminCountryWebRequestController {
/**
* Serial number
import org.mxchange.jcountry.data.Country;
import org.mxchange.jcountry.data.CountrySingletonBeanRemote;
import org.mxchange.jcountry.events.AdminAddedCountryEvent;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* A country bean
*/
@Named ("countryController")
@ApplicationScoped
-public class PizzaCountryWebApplicationBean implements PizzaCountryWebApplicationController {
+public class PizzaCountryWebApplicationBean extends BasePizzaController implements PizzaCountryWebApplicationController {
/**
* Serial number
import org.mxchange.jcustomercore.exceptions.CustomerAlreadyRegisteredException;
import org.mxchange.jcustomercore.model.customer.Customer;
import org.mxchange.jcustomercore.model.customer.status.CustomerAccountStatus;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.contact.PizzaAdminContactWebRequestController;
import org.mxchange.pizzaapplication.beans.helper.PizzaAdminWebRequestController;
import org.mxchange.pizzaapplication.model.customer.PizzaAdminCustomerSessionBeanRemote;
*/
@Named ("adminCustomerController")
@RequestScoped
-public class PizzaAdminCustomerWebRequestBean implements PizzaAdminCustomerWebRequestController {
+public class PizzaAdminCustomerWebRequestBean extends BasePizzaController implements PizzaAdminCustomerWebRequestController {
/**
* Serial number
import org.mxchange.jcontacts.events.contact.add.AdminAddedContactEvent;
import org.mxchange.jcustomercore.events.customer.added.AdminAddedCustomerEvent;
import org.mxchange.jcustomercore.model.customer.Customer;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.contact.PizzaAdminContactWebRequestController;
import org.mxchange.pizzaapplication.model.customer.PizzaAdminCustomerSessionBeanRemote;
*/
@Named ("customerController")
@SessionScoped
-public class PizzaCustomerWebSessionBean implements PizzaCustomerWebSessionController {
+public class PizzaCustomerWebSessionBean extends BasePizzaController implements PizzaCustomerWebSessionController {
/**
* Serial number
import org.mxchange.jusercore.model.email_address.EmailAddressChange;
import org.mxchange.jusercore.model.email_address.EmailChangeSessionBeanRemote;
import org.mxchange.jusercore.model.user.User;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.login.PizzaUserLoginWebSessionController;
/**
*/
@Named ("emailChangeController")
@SessionScoped
-public class PizzaEmailChangeWebSessionBean implements PizzaEmailChangeWebSessionController {
+public class PizzaEmailChangeWebSessionBean extends BasePizzaController implements PizzaEmailChangeWebSessionController {
/**
* Serial number
import javax.inject.Named;
import org.mxchange.jcontacts.contact.gender.Gender;
import org.mxchange.jcontacts.contact.gender.GenderUtils;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* A gender bean (controller)
*/
@Named ("genderController")
@ApplicationScoped
-public class PizzaGenderWebApplicationBean implements PizzaGenderWebApplicationController {
+public class PizzaGenderWebApplicationBean extends BasePizzaController implements PizzaGenderWebApplicationController {
/**
* Serial number
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;
-import org.mxchange.jcoreee.database.BaseDatabaseBean;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* A session bean for handling localization/internationalization changes. This
*/
@Named ("localizationController")
@SessionScoped
-public class PizzaLocalizationSessionBean extends BaseDatabaseBean implements PizzaLocalizationSessionController {
+public class PizzaLocalizationSessionBean extends BasePizzaController implements PizzaLocalizationSessionController {
/**
* Serial number
import org.mxchange.jusercore.model.user.UserUtils;
import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
import org.mxchange.jusercore.model.user.status.UserAccountStatus;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.user.PizzaUserWebSessionController;
/**
*/
@Named ("loginController")
@SessionScoped
-public class PizzaUserLoginWebSessionBean implements PizzaUserLoginWebSessionController {
+public class PizzaUserLoginWebSessionBean extends BasePizzaController implements PizzaUserLoginWebSessionController {
/**
* Serial number
import org.mxchange.jphone.phonenumbers.mobileprovider.AdminMobileProviderSessionBeanRemote;
import org.mxchange.jphone.phonenumbers.mobileprovider.CellphoneProvider;
import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* Administrative bean (controller) for mobile provider
*/
@Named ("adminMobileProviderController")
@RequestScoped
-public class PizzaAdminMobileProviderWebRequestBean implements PizzaAdminMobileProviderWebRequestController {
+public class PizzaAdminMobileProviderWebRequestBean extends BasePizzaController implements PizzaAdminMobileProviderWebRequestController {
/**
* Serial number
import org.mxchange.jphone.events.AdminAddedMobileProviderEvent;
import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* A general bean for mobile providers
*/
@Named ("mobileProviderController")
@SessionScoped
-public class PizzaMobileProviderWebRequestBean implements PizzaMobileProviderWebRequestController {
+public class PizzaMobileProviderWebRequestBean extends BasePizzaController implements PizzaMobileProviderWebRequestController {
/**
* Serial number
import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* Administrative bean (controller) for contact's phone numbers
*/
@Named ("adminContactPhoneController")
@RequestScoped
-public class PizzaAdminContactPhoneWebRequestBean implements PizzaAdminContactPhoneWebRequestController {
+public class PizzaAdminContactPhoneWebRequestBean extends BasePizzaController implements PizzaAdminContactPhoneWebRequestController {
/**
* Serial number
import org.mxchange.jshopcore.model.product.AdminProductSessionBeanRemote;
import org.mxchange.jshopcore.model.product.GenericProduct;
import org.mxchange.jshopcore.model.product.Product;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* Main application class
*/
@Named ("adminProductController")
@RequestScoped
-public class PizzaAdminProductWebRequestBean implements PizzaAdminProductWebRequestController {
+public class PizzaAdminProductWebRequestBean extends BasePizzaController implements PizzaAdminProductWebRequestController {
/**
* Serial number
import org.mxchange.jshopcore.events.product.AddedProductEvent;
import org.mxchange.jshopcore.model.product.Product;
import org.mxchange.jshopcore.model.product.ProductSessionBeanRemote;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* General product controller
*/
@Named ("productController")
@ApplicationScoped
-public class PizzaProductWebApplicationBean implements PizzaProductWebApplicationController {
+public class PizzaProductWebApplicationBean extends BasePizzaController implements PizzaProductWebApplicationController {
/**
* Serial number
import org.mxchange.jusercore.exceptions.UserNotFoundException;
import org.mxchange.jusercore.model.user.User;
import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.login.PizzaUserLoginWebSessionController;
import org.mxchange.pizzaapplication.beans.user.PizzaUserWebSessionController;
*/
@Named (value = "profileController")
@RequestScoped
-public class PizzaUserProfileWebRequestBean implements PizzaUserProfileWebRequestController {
+public class PizzaUserProfileWebRequestBean extends BasePizzaController implements PizzaUserProfileWebRequestController {
/**
* Serial number
@Override
public boolean isProfileLinkVisibleById (final Long userId) {
// Init user instance
- User u = null;
+ User user = null;
try {
// Try to get it
- u = this.userController.lookupUserById(userId);
+ user = this.userController.lookupUserById(userId);
} catch (final UserNotFoundException ex) {
// Throw again
throw new FaceletException(ex);
}
// Is it null?
- if (null == u) {
+ if (null == user) {
// Not found, not visible.
return false;
}
// Ask other method
- return this.isProfileLinkVisibleByUser(u);
+ return this.isProfileLinkVisibleByUser(user);
}
@Override
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* A profile mode bean
*/
@Named ("profileModeController")
@ApplicationScoped
-public class PizzaProfileModeWebApplicationBean implements PizzaProfileModeWebApplicationController {
+public class PizzaProfileModeWebApplicationBean extends BasePizzaController implements PizzaProfileModeWebApplicationController {
/**
* Serial number
import javax.naming.NamingException;
import org.mxchange.jcustomercore.model.customer.Customer;
import org.mxchange.jshopcore.model.receipt.ReceiptBeanRemote;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* Checkout controller
*/
@Named ("receiptController")
@SessionScoped
-public class PizzaReceiptWebSessionBean implements PizzaReceiptWebSessionController {
+public class PizzaReceiptWebSessionBean extends BasePizzaController implements PizzaReceiptWebSessionController {
/**
* Serial number
import javax.enterprise.context.SessionScoped;
import javax.enterprise.event.Event;
import javax.enterprise.inject.Any;
+import javax.faces.context.FacesContext;
import javax.faces.view.facelets.FaceletException;
import javax.inject.Inject;
import javax.inject.Named;
import org.mxchange.jusercore.model.user.User;
import org.mxchange.jusercore.model.user.UserUtils;
import org.mxchange.jusercore.model.user.status.UserAccountStatus;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.contact.PizzaContactWebSessionController;
import org.mxchange.pizzaapplication.beans.user.PizzaAdminUserWebRequestController;
import org.mxchange.pizzaapplication.beans.user.PizzaUserWebSessionController;
*/
@Named ("registerController")
@SessionScoped
-public class PizzaUserRegisterWebSessionBean implements PizzaUserRegisterWebSessionController {
+public class PizzaUserRegisterWebSessionBean extends BasePizzaController implements PizzaUserRegisterWebSessionController {
/**
* Serial number
}
@Override
- public String doRegister () {
+ public String doFinishRegistration () {
// Get user instance
User user = this.userController.createUserInstance();
// Is the user already used?
if (null == user) {
// user must be set
- throw new NullPointerException("user is null"); //NOI18N
+ throw new NullPointerException("user is null after createUserInstance() was called"); //NOI18N
} else if (!this.userController.isRequiredPersonalDataSet()) {
// Not all required fields are set
throw new FaceletException("Not all required fields are set."); //NOI18N
// Set it here
user.setUserEncryptedPassword(encryptedPassword);
- // For debugging/programming only:
- user.setUserAccountStatus(UserAccountStatus.CONFIRMED);
+ // Is developer mode?
+ if (this.isDebugModeEnabled("register")) { //NOI18N
+ // For debugging/programming only:
+ user.setUserAccountStatus(UserAccountStatus.CONFIRMED);
+ } else {
+ // No debugging of this part
+ user.setUserAccountStatus(UserAccountStatus.UNCONFIRMED);
+ }
try {
// Call bean
}
}
+ @Override
+ public String doRegisterMultiPage1 () {
+ // Now only redirect to next page as the JSF does it
+ return "register_page2"; //NOI18N
+ }
+
+ @Override
+ public boolean isMultiplePageEnabled () {
+ // Get context parameter
+ String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_multi_register_page"); //NOI18N
+
+ // Is it set?
+ boolean isEnabled = ((contextParameter instanceof String) && (contextParameter.toLowerCase().equals("true"))); //NOI18N
+
+ // Return value
+ return isEnabled;
+ }
+
+ @Override
+ public boolean isResendConfirmationLinkEnabled () {
+ // Get context parameter
+ String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_resend_confirm_link_enabled"); //NOI18N
+
+ // Is it set?
+ boolean isEnabled = ((contextParameter instanceof String) && (contextParameter.toLowerCase().equals("true"))); //NOI18N
+
+ // Return value
+ return isEnabled;
+ }
+
}
* <p>
* @return Redirection target
*/
- String doRegister ();
+ String doFinishRegistration ();
+
+ /**
+ * Handles registration request send from first page. The (maybe) entered
+ * user name and email address is not used and that privacy and T&C are
+ * accepted.
+ * <p>
+ * @return Redirect
+ */
+ String doRegisterMultiPage1 ();
+
+ /**
+ * Checks wether multi-page or single-page registration is active
+ * <p>
+ * @return Whether multi (true) or single page (false) is active
+ */
+ boolean isMultiplePageEnabled ();
+
+ /**
+ * Checks whether the "resend confirmation link" feature is enabled
+ * <p>
+ * @return Whether "resend confirmation link" is enabled
+ */
+ boolean isResendConfirmationLinkEnabled ();
}
*/
package org.mxchange.pizzaapplication.beans.user;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import java.text.MessageFormat;
import java.util.Objects;
import javax.annotation.PostConstruct;
*/
@Named ("adminUserController")
@RequestScoped
-public class PizzaAdminUserWebRequestBean implements PizzaAdminUserWebRequestController {
+public class PizzaAdminUserWebRequestBean extends BasePizzaController implements PizzaAdminUserWebRequestController {
/**
* Serial number
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Any;
+import javax.faces.context.FacesContext;
import javax.faces.view.facelets.FaceletException;
import javax.inject.Inject;
import javax.inject.Named;
import javax.naming.NamingException;
import org.mxchange.jcontacts.contact.Contact;
import org.mxchange.jcontacts.contact.ContactSessionBeanRemote;
+import org.mxchange.jcontacts.events.contact.add.AdminAddedContactEvent;
import org.mxchange.jusercore.events.login.UserLoggedInEvent;
import org.mxchange.jusercore.events.registration.UserRegisteredEvent;
import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
import org.mxchange.jusercore.model.user.LoginUser;
import org.mxchange.jusercore.model.user.User;
import org.mxchange.jusercore.model.user.UserSessionBeanRemote;
+import org.mxchange.jusercore.model.user.UserUtils;
import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
+import org.mxchange.pizzaapplication.beans.BasePizzaController;
import org.mxchange.pizzaapplication.beans.contact.PizzaContactWebSessionController;
import org.mxchange.pizzaapplication.beans.login.PizzaUserLoginWebSessionController;
+import org.mxchange.pizzaapplication.beans.register.PizzaUserRegisterWebSessionController;
/**
* A user bean (controller)
*/
@Named ("userController")
@SessionScoped
-public class PizzaUserWebSessionBean implements PizzaUserWebSessionController {
+public class PizzaUserWebSessionBean extends BasePizzaController implements PizzaUserWebSessionController {
/**
* Serial number
@Inject
private PizzaUserLoginWebSessionController loginController;
+ /**
+ * Registration controller
+ */
+ @Inject
+ private PizzaUserRegisterWebSessionController
+ registerController;
+
/**
* A list of all selectable contacts
*/
}
}
+ @Override
+ public void afterAdminAddedContact (@Observes final AdminAddedContactEvent event) {
+ // The event must be valid
+ if (null == event) {
+ // Throw NPE
+ throw new NullPointerException("event is null"); //NOI18N
+ } else if (event.getAddedContact() == null) {
+ // Throw again ...
+ throw new NullPointerException("event.addedContact is null"); //NOI18N
+ } else if (event.getAddedContact().getContactId() == null) {
+ // ... and again
+ throw new NullPointerException("event.addedContact.customerId is null"); //NOI18N
+ } else if (event.getAddedContact().getContactId() < 1) {
+ // Not valid
+ throw new IllegalArgumentException(MessageFormat.format("event.addedContact.customerId={0} is not valid", event.getAddedContact().getContactId())); //NOI18N //NOI18N
+ }
+
+ // Call other method
+ this.selectableContacts.add(event.getAddedContact());
+ }
+
@Override
public void afterAdminAddedUserEvent (@Observes final AdminAddedUserEvent event) {
// Trace message
// Create new user instance
User localUser = new LoginUser();
- // Update all data ...
+ // Is user name required?
+ if (!this.isUserNameRequired()) {
+ // Generate pseudo-random user name
+ String randomName = this.userBean.generateRandomUserName();
+
+ // Set it and inivisible profile
+ this.setUserName(randomName);
+ this.setUserProfileMode(ProfileMode.INVISIBLE);
+
+ // Generate random password
+ String randomPassword = UserUtils.createRandomPassword(PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH);
+
+ // Set random password
+ this.setUserPassword(randomPassword);
+ this.setUserPasswordRepeat(randomPassword);
+ }
+
+ // Set user name and mode
localUser.setUserName(this.getUserName());
localUser.setUserProfileMode(this.getUserProfileMode());
return isFound;
}
+ @Override
+ public boolean isPublicUserProfileEnabled () {
+ // Get context parameter
+ String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_public_profile_enabled"); //NOI18N
+
+ // Is it set?
+ boolean isPublicUserProfileEnabled = ((contextParameter instanceof String) && (contextParameter.toLowerCase().equals("true"))); //NOI18N
+
+ // This requires user names being enabled, too.
+ if ((isPublicUserProfileEnabled) && (!this.isUserNameRequired())) {
+ // Not valid state, users must be able to modify their profile, especially when it is public
+ throw new IllegalStateException("Public user profiles are enabled but user name requirement is disabled, this is not possible."); //NOI18N
+ }
+
+ // Return value
+ return isPublicUserProfileEnabled;
+ }
+
@Override
public boolean isRequiredChangePersonalDataSet () {
return ((this.getUserProfileMode() != null) &&
@Override
public boolean isRequiredPersonalDataSet () {
- return ((this.getUserName() != null) &&
- (this.getUserProfileMode() != null) &&
- (this.contactController.isRequiredPersonalDataSet()) &&
- (this.getUserPassword() != null) &&
- (this.getUserPasswordRepeat() != null));
+ if (this.registerController.isMultiplePageEnabled()) {
+ // Multiple registration page
+ return this.contactController.isRequiredPersonalDataSet();
+ } else {
+ // Single registration page
+ return (((this.getUserName() != null) || (!this.isUserNameRequired())) &&
+ (this.getUserProfileMode() != null) &&
+ (this.contactController.isRequiredPersonalDataSet()) &&
+ (this.getUserPassword() != null) &&
+ (this.getUserPasswordRepeat() != null));
+ }
}
@Override
return ((this.userNameList instanceof List) && (this.userNameList.contains(user.getUserName())));
}
+ @Override
+ public boolean isUserNameRequired () {
+ // Get context parameter
+ String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_user_name_required"); //NOI18N
+
+ // Is it set?
+ boolean isUserNameRequired = ((contextParameter instanceof String) && (contextParameter.toLowerCase().equals("true"))); //NOI18N
+
+ // Return value
+ return isUserNameRequired;
+ }
+
@Override
public boolean isVisibleUserFound () {
return ((this.visibleUserList instanceof List) && (this.visibleUserList.size() > 0));
import java.io.Serializable;
import java.util.List;
import org.mxchange.jcontacts.contact.Contact;
+import org.mxchange.jcontacts.events.contact.add.AdminAddedContactEvent;
import org.mxchange.jusercore.events.login.UserLoggedInEvent;
import org.mxchange.jusercore.events.registration.UserRegisteredEvent;
import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
*/
public static final Integer MINIMUM_PASSWORD_LENGTH = 5;
+ /**
+ * Observes events being fired when an administrator has added a new
+ * contact.
+ * <p>
+ * @param event Event being fired
+ */
+ void afterAdminAddedContact (final AdminAddedContactEvent event);
+
/**
* Event observer for newly added users by adminstrator
* <p>
*/
String doChangePersonalData ();
+ /**
+ * Checks whether this application requires a user name to be entered.
+ * Otherwise a random name like "userXXXXX" is generated
+ * <p>
+ * @return Whether this application requires a user name
+ */
+ boolean isUserNameRequired ();
+
+ /**
+ * Checks wether public user profiles are enabled. This requires that user
+ * names are also enabled.
+ * <p>
+ * @return Whether public user profiles are enabled
+ */
+ boolean isPublicUserProfileEnabled ();
+
}
<from-outcome>register_done</from-outcome>
<to-view-id>/guest/user/register_done.xhtml</to-view-id>
</navigation-case>
+ <navigation-case>
+ <from-outcome>register_page2</from-outcome>
+ <to-view-id>/guest/user/register_page2.xhtml</to-view-id>
+ </navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/admin/admin_logout.xhtml</from-view-id>
</fieldset>
</div>
- <div class="para">
- <fieldset id="user_profile">
- <legend title="#{msg.USER_PROFILE_LEGEND_TITLE}">#{msg.USER_PROFILE_LEGEND}</legend>
-
- <div class="table_row">
- <div class="table_left">
- <h:outputLabel for="profileMode" value="#{msg.USER_PROFILE_MODE}" />
- </div>
-
- <div class="table_right">
- <ui:include src="/WEB-INF/templates/generic/profile_mode_selection_box.tpl" />
- </div>
-
- <div class="clear"></div>
- </div>
-
- <div class="table_row">
- <div class="para notice">
- <ul>
- <li>#{msg.SELECTION_NOTICE_USER_PROFILE_MODE_INVISIBLE}</li>
- <li>#{msg.SELECTION_NOTICE_USER_PROFILE_MODE_MEMBERS}</li>
- <li>#{msg.SELECTION_NOTICE_USER_PROFILE_MODE_PUBLIC}</li>
- </ul>
- </div>
- </div>
- </fieldset>
- </div>
+ <ui:fragment rendered="#{userController.isPublicUserProfileEnabled()}">
+ <div class="para">
+ <fieldset id="user_profile">
+ <legend title="#{msg.USER_PROFILE_LEGEND_TITLE}">#{msg.USER_PROFILE_LEGEND}</legend>
+
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="profileMode" value="#{msg.USER_PROFILE_MODE}" />
+ </div>
+
+ <div class="table_right">
+ <ui:include src="/WEB-INF/templates/generic/profile_mode_selection_box.tpl" />
+ </div>
+
+ <div class="clear"></div>
+ </div>
+
+ <div class="table_row">
+ <div class="para notice">
+ <ul>
+ <li>#{msg.SELECTION_NOTICE_USER_PROFILE_MODE_INVISIBLE}</li>
+ <li>#{msg.SELECTION_NOTICE_USER_PROFILE_MODE_MEMBERS}</li>
+ <li>#{msg.SELECTION_NOTICE_USER_PROFILE_MODE_PUBLIC}</li>
+ </ul>
+ </div>
+ </div>
+ </fieldset>
+ </div>
+ </ui:fragment>
</ui:composition>
</div>
<ul>
- <li>
- <h:link title="#{msg.LINK_GUEST_LOGIN_TITLE}" outcome="user_login" value="#{msg.LINK_GUEST_LOGIN}" />
- </li>
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <li>
+ <h:link title="#{msg.LINK_GUEST_LOGIN_TITLE}" outcome="user_login" value="#{msg.LINK_GUEST_LOGIN}" />
+ </li>
+ </ui:fragment>
<li>
<h:link title="#{msg.LINK_GUEST_REGISTER_TITLE}" outcome="user_register" value="#{msg.LINK_GUEST_REGISTER}" />
</li>
- <li>
- <h:link title="#{msg.LINK_GUEST_PASSWORD_TITLE}" outcome="user_lost_passwd" value="#{msg.LINK_GUEST_PASSWORD}" />
- </li>
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <li>
+ <h:link title="#{msg.LINK_GUEST_PASSWORD_TITLE}" outcome="user_lost_passwd" value="#{msg.LINK_GUEST_PASSWORD}" />
+ </li>
+ </ui:fragment>
+
+ <ui:fragment rendered="#{registerController.isResendConfirmationLinkEnabled()}">
+ <li>
+ <h:link title="#{msg.LINK_GUEST_RESEND_LINK_TITLE}" outcome="user_resend_link" value="#{msg.LINK_GUEST_RESEND_LINK}" />
+ </li>
+ </ui:fragment>
</ul>
</div>
</div>
<div class="table_right75">
#{msg.GUEST_AGREE_READ_TERMS_CONDITIONS_1}
- <h:link outcome="terms" target="_blank" value="#{msg.TERMS_CONDITIONS}" />
+ <h:link outcome="terms" target="_blank" value="#{msg.LINK_GUEST_TERMS_CONDITIONS}" />
#{msg.GUEST_AGREE_READ_TERMS_CONDITIONS_2}
</div>
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
-
- <h:form id="register_form">
+ <h:form id="register_page2_form">
<div class="table">
<div class="table_header">
- #{msg.GUEST_REGISTRATION_TITLE}
+ #{msg.GUEST_REGISTRATION_PAGE2_TITLE}
</div>
<ui:include src="/WEB-INF/templates/contact/form_contact_data.tpl" />
<div class="table_footer">
<h:commandButton styleClass="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
- <h:commandButton styleClass="submit" type="submit" id="register" value="#{msg.BUTTON_FINISH_REGISTRATION}" action="#{registerController.doRegister()}" />
+ <h:commandButton styleClass="submit" type="submit" id="register" value="#{msg.BUTTON_FINISH_REGISTRATION}" action="#{registerController.doFinishRegistration()}" />
</div>
</div>
</h:form>
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
- <h:form id="register_form">
+ <h:form id="register_page1_form">
<div class="table">
<div class="table_header">
- #{msg.GUEST_REGISTRATION_TITLE}
+ #{msg.GUEST_REGISTRATION_PAGE1_TITLE}
</div>
- <ui:include src="/WEB-INF/templates/contact/form_contact_data.tpl" />
-
<div class="para">
<fieldset id="login_data">
<legend title="#{msg.GUEST_REGISTRATION_EMAIL_LEGEND_TITLE}">#{msg.GUEST_REGISTRATION_EMAIL_LEGEND}</legend>
- <div class="table_row">
- <div class="table_left">
- <h:outputLabel for="userName" value="#{msg.GUEST_REGISTRATION_ENTER_USER_NAME}" />
- </div>
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="userName" value="#{msg.GUEST_REGISTRATION_ENTER_USER_NAME}" />
+ </div>
- <div class="table_right">
- <h:inputText styleClass="input" id="userName" size="20" maxlength="255" value="#{userController.userName}" required="true" />
- </div>
+ <div class="table_right">
+ <h:inputText styleClass="input" id="userName" size="20" maxlength="255" value="#{userController.userName}" required="true" />
+ </div>
- <div class="clear"></div>
- </div>
+ <div class="clear"></div>
+ </div>
+ </ui:fragment>
<div class="table_row">
<div class="table_left">
<div class="clear"></div>
</div>
- <div class="para"></div>
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="para"></div>
- <div class="table_row">
- <div class="table_left">
- <h:outputLabel for="userPassword" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD}" />
- </div>
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="userPassword" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD}" />
+ </div>
- <div class="table_right">
- <h:inputSecret styleClass="input" id="userPassword" size="10" maxlength="255" value="#{userController.userPassword}" required="true" />
+ <div class="table_right">
+ <h:inputSecret styleClass="input" id="userPassword" size="10" maxlength="255" value="#{userController.userPassword}" required="true" />
+ </div>
+
+ <div class="clear"></div>
</div>
- <div class="clear"></div>
- </div>
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="userPasswordRepeat" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD_REPEAT}" />
+ </div>
- <div class="table_row">
- <div class="table_left">
- <h:outputLabel for="userPasswordRepeat" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD_REPEAT}" />
- </div>
+ <div class="table_right">
+ <h:inputSecret styleClass="input" id="userPasswordRepeat" size="10" maxlength="255" value="#{userController.userPasswordRepeat}" required="true" />
+ </div>
- <div class="table_right">
- <h:inputSecret styleClass="input" id="userPasswordRepeat" size="10" maxlength="255" value="#{userController.userPasswordRepeat}" required="true" />
+ <div class="clear"></div>
</div>
- <div class="clear"></div>
- </div>
-
- <div class="para notice">
- #{msg.GUEST_REGISTRATION_USER_NAME_NOTICE}
- </div>
+ <div class="para notice">
+ #{msg.GUEST_REGISTRATION_USER_NAME_NOTICE}
+ </div>
+ </ui:fragment>
</fieldset>
</div>
<div class="table_footer">
<h:commandButton styleClass="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
- <h:commandButton styleClass="submit" type="submit" id="register" value="#{msg.BUTTON_FINISH_REGISTRATION}" action="#{registerController.doRegister()}" />
+ <h:commandButton styleClass="submit" type="submit" id="continueRegisterPage1" value="#{msg.BUTTON_CONTINUE_REGISTER_PAGE2}" action="#{registerController.doRegisterMultiPage1()}" />
</div>
</div>
</h:form>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<ui:composition
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
+
+ <h:form id="register_single_form">
+ <div class="table">
+ <div class="table_header">
+ #{msg.GUEST_REGISTRATION_TITLE}
+ </div>
+
+ <ui:include src="/WEB-INF/templates/contact/form_contact_data.tpl" />
+
+ <div class="para">
+ <fieldset id="login_data">
+ <legend title="#{msg.GUEST_REGISTRATION_EMAIL_LEGEND_TITLE}">#{msg.GUEST_REGISTRATION_EMAIL_LEGEND}</legend>
+
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="userName" value="#{msg.GUEST_REGISTRATION_ENTER_USER_NAME}" />
+ </div>
+
+ <div class="table_right">
+ <h:inputText styleClass="input" id="userName" size="20" maxlength="255" value="#{userController.userName}" required="true" />
+ </div>
+
+ <div class="clear"></div>
+ </div>
+ </ui:fragment>
+
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="emailAddress" value="#{msg.GUEST_REGISTRATION_ENTER_EMAIL}" />
+ </div>
+
+ <div class="table_right">
+ <h:inputText styleClass="input" id="emailAddress" size="20" maxlength="255" value="#{contactController.emailAddress}" required="true" />
+ </div>
+
+ <div class="clear"></div>
+ </div>
+
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="emailAddressRepeat" value="#{msg.GUEST_REGISTRATION_ENTER_EMAIL_REPEAT}" />
+ </div>
+
+ <div class="table_right">
+ <h:inputText styleClass="input" id="emailAddressRepeat" size="20" maxlength="255" value="#{contactController.emailAddressRepeat}" required="true" />
+ </div>
+
+ <div class="clear"></div>
+ </div>
+
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="para"></div>
+
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="userPassword" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD}" />
+ </div>
+
+ <div class="table_right">
+ <h:inputSecret styleClass="input" id="userPassword" size="10" maxlength="255" value="#{userController.userPassword}" required="true" />
+ </div>
+
+ <div class="clear"></div>
+ </div>
+
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="userPasswordRepeat" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD_REPEAT}" />
+ </div>
+
+ <div class="table_right">
+ <h:inputSecret styleClass="input" id="userPasswordRepeat" size="10" maxlength="255" value="#{userController.userPasswordRepeat}" required="true" />
+ </div>
+
+ <div class="clear"></div>
+ </div>
+
+ <div class="para notice">
+ #{msg.GUEST_REGISTRATION_USER_NAME_NOTICE}
+ </div>
+ </ui:fragment>
+ </fieldset>
+ </div>
+
+ <ui:include src="/WEB-INF/templates/guest/guest_privacy_terms.tpl" />
+
+ <div class="table_footer">
+ <h:commandButton styleClass="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+ <h:commandButton styleClass="submit" type="submit" id="register" value="#{msg.BUTTON_FINISH_REGISTRATION}" action="#{registerController.doFinishRegistration()}" />
+ </div>
+ </div>
+ </h:form>
+</ui:composition>
<description>An online address book application to share private and business memebers between all members. It is also possible that the user's profile can be made visible to outside.</description>
<display-name>JLandingPage Application v1.0</display-name>
<context-param>
- <param-name>javax.faces.PROJECT_STAGE</param-name>
- <param-value>Development</param-value>
+ <description>Whether debug mode is for registration controller enabled.</description>
+ <param-name>is_debug_register_enabled</param-name>
+ <param-value>false</param-value>
+ </context-param>
+ <context-param>
+ <description>Whether the multi-page registration page or a single registration page is active</description>
+ <param-name>is_multi_register_page</param-name>
+ <param-value>true</param-value>
+ </context-param>
+ <context-param>
+ <description>Whether a user name is required on registration</description>
+ <param-name>is_user_name_required</param-name>
+ <param-value>false</param-value>
+ </context-param>
+ <context-param>
+ <description>Whether the public user profile is enabled.</description>
+ <param-name>is_public_profile_enabled</param-name>
+ <param-value>false</param-value>
+ </context-param>
+ <context-param>
+ <description>Whether "resend confirmation link" ius enabled.</description>
+ <param-name>is_resend_confirm_link_enabled</param-name>
+ <param-value>false</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
</ui:define>
<ui:define name="content">
- Here goes your content.
+ <ui:fragment rendered="#{registerController.isResendConfirmationLinkEnabled()}">
+ Here goes your content.
+ </ui:fragment>
+
+ <ui:fragment rendered="#{not registerController.isResendConfirmationLinkEnabled()}">
+ <h:outputText styleClass="errors" value="#{msg.ERROR_GUEST_USER_RECOVER_PASSWORD_DEACTIVATED}" />
+ </ui:fragment>
</ui:define>
</ui:composition>
</html>
</ui:define>
<ui:define name="content">
- <div class="para">
- <!-- TODO Internatialize this somehow //-->
- Noch kein Kunde? Einfach beim Bestellen anmelden oder <h:link id="customer_register" outcome="customer_register" title="Als Kunde anmelden">hier</h:link> anmelden.
- </div>
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="para">
+ <!-- TODO Internatialize this somehow //-->
+ Noch kein Benutzerkonto? Einfach <h:link id="user_register" outcome="user_register" title="Als Benutzer anmelden">hier</h:link> anmelden.
+ </div>
- <div class="para">
- <ui:include src="/WEB-INF/templates/guest/guest_login_form.tpl" />
- </div>
+ <div class="para">
+ <ui:include src="/WEB-INF/templates/guest/user/guest_login_form.tpl" />
+ </div>
- <div class="para">
- <h:link id="customer_lost_password" outcome="user_lost_passwd" title="Passwort wiederherstellen" value="Passwort vergessen?" />
- </div>
+ <div class="para">
+ <h:link id="user_lost_password" outcome="user_lost_passwd" title="#{msg.LINK_TITLE_GUEST_LOGIN_LOST_PASSWORD}" value="#{msg.LINK_GUEST_LOGIN_LOST_PASSWORD}" />
+ </div>
+ </ui:fragment>
+
+ <ui:fragment rendered="#{not userController.isUserNameRequired()}">
+ <h:outputText styleClass="errors" value="#{msg.ERROR_GUEST_USER_LOGIN_DEACTIVATED}" />
+ </ui:fragment>
</ui:define>
</ui:composition>
</html>
</ui:define>
<ui:define name="content">
- <div class="para" id="user_lost_password_content">
- <h:form id="lost_password_form">
- <div class="table">
- <div class="table_header">
- #{msg.GUEST_LOST_PASSWORD_TITLE}
- </div>
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="para" id="user_lost_password_content">
+ <h:form id="lost_password_form">
+ <div class="table">
+ <div class="table_header">
+ #{msg.GUEST_LOST_PASSWORD_TITLE}
+ </div>
- <fieldset id="login_data">
- <legend title="#{msg.GUEST_LOST_PASSWORD_LEGEND_TITLE}">#{msg.GUEST_LOST_PASSWORD_LEGEND}</legend>
+ <fieldset id="login_data">
+ <legend title="#{msg.GUEST_LOST_PASSWORD_LEGEND_TITLE}">#{msg.GUEST_LOST_PASSWORD_LEGEND}</legend>
- <div class="table_row">
- <div class="table_left">
- <h:outputLabel for="id" value="#{msg.ENTER_USER_NAME}" />
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="id" value="#{msg.ENTER_USER_NAME}" />
+ </div>
+
+ <div class="table_right">
+ <h:inputText styleClass="input" id="id" size="10" maxlength="20" value="#{passwordRecoveryController.userId}" />
+ </div>
+
+ <div class="clear"></div>
</div>
- <div class="table_right">
- <h:inputText styleClass="input" id="id" size="10" maxlength="20" value="#{passwordRecoveryController.userId}" />
+ <div class="table_header">
+ #{msg.GUEST_LOST_PASSWORD_NUMBER_OR_EMAIL}
</div>
- <div class="clear"></div>
- </div>
+ <div class="table_row">
+ <div class="table_left">
+ <h:outputLabel for="email" value="#{msg.ENTER_EMAIL_ADDRESS}" />
+ </div>
- <div class="table_header">
- #{msg.GUEST_LOST_PASSWORD_NUMBER_OR_EMAIL}
- </div>
+ <div class="table_right">
+ <h:inputText styleClass="input" id="email" size="20" maxlength="255" value="#{passwordRecoveryController.emailAddress}" />
+ </div>
- <div class="table_row">
- <div class="table_left">
- <h:outputLabel for="email" value="#{msg.ENTER_EMAIL_ADDRESS}" />
+ <div class="clear"></div>
</div>
- <div class="table_right">
- <h:inputText styleClass="input" id="email" size="20" maxlength="255" value="#{passwordRecoveryController.emailAddress}" />
- </div>
+ </fieldset>
- <div class="clear"></div>
+ <div class="table_footer">
+ <h:commandButton styleClass="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+ <h:commandButton styleClass="submit" type="submit" value="#{msg.BUTTON_CONTINUE_STEP_2}" action="#{passwordRecoveryController.doLostPasswordStep2()}" />
</div>
-
- </fieldset>
-
- <div class="table_footer">
- <h:commandButton styleClass="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
- <h:commandButton styleClass="submit" type="submit" value="#{msg.BUTTON_CONTINUE_STEP_2}" action="#{passwordRecoveryController.doLostPasswordStep2()}" />
</div>
- </div>
- </h:form>
- </div>
+ </h:form>
+ </div>
+ </ui:fragment>
+
+ <ui:fragment rendered="#{not userController.isUserNameRequired()}">
+ <h:outputText styleClass="errors" value="#{msg.ERROR_GUEST_USER_RECOVER_PASSWORD_DEACTIVATED}" />
+ </ui:fragment>
</ui:define>
</ui:composition>
</html>
<html
lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
- xmlns:h="http://xmlns.jcp.org/jsf/html"
- xmlns:f="http://xmlns.jcp.org/jsf/core"
- >
+ xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+ xmlns:h="http://xmlns.jcp.org/jsf/html"
+ xmlns:f="http://xmlns.jcp.org/jsf/core"
+ >
<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_REGISTER}</ui:define>
</ui:define>
<ui:define name="content">
- <div class="para">
- #{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_1}
- <h:link outcome="user_login" value="#{msg.CLICK_HERE}" />
- #{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_2}
- </div>
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="para">
+ #{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_1}
+ <h:link outcome="user_login" value="#{msg.CLICK_HERE}" />
+ #{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_2}
+ </div>
+ </ui:fragment>
<div class="registration_form">
- <ui:include src="/WEB-INF/templates/guest/user/guest_registration_form.tpl" />
+ <ui:fragment rendered="#{registerController.isMultiplePageEnabled()}">
+ <ui:include src="/WEB-INF/templates/guest/user/register/guest_form_register_page1.tpl" />
+ </ui:fragment>
+
+ <ui:fragment rendered="#{not registerController.isMultiplePageEnabled()}">
+ <ui:include src="/WEB-INF/templates/guest/user/register/guest_form_register_single.tpl" />
+ </ui:fragment>
</div>
</ui:define>
</ui:composition>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+ lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+ xmlns:h="http://xmlns.jcp.org/jsf/html"
+ xmlns:f="http://xmlns.jcp.org/jsf/core"
+ >
+
+ <ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
+ <ui:define name="guest_title">#{msg.PAGE_TITLE_USER_REGISTER_PAGE2}</ui:define>
+
+ <ui:define name="content_header">
+ #{msg.CONTENT_TITLE_USER_REGISTER_PAGE2}
+ </ui:define>
+
+ <ui:define name="content">
+ <ui:fragment rendered="#{registerController.isMultiplePageEnabled()}">
+ <ui:fragment rendered="#{userController.isUserNameRequired()}">
+ <div class="para">
+ #{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_1}
+ <h:link outcome="user_login" value="#{msg.CLICK_HERE}" />
+ #{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_2}
+ </div>
+ </ui:fragment>
+
+ <div class="registration_form">
+ <ui:include src="/WEB-INF/templates/guest/user/register/guest_form_register_page2.tpl" />
+ </div>
+ </ui:fragment>
+
+ <ui:fragment rendered="#{not registerController.isMultiplePageEnabled()}">
+ <h:outputText styleClass="errors" value="#{msg.ERROR_GUEST_REGISTER_MULTIPLE_PAGE_NOT_ENABLED}" />
+ </ui:fragment>
+ </ui:define>
+ </ui:composition>
+</html>
</ui:define>
<ui:define name="content">
- <ui:fragment rendered="#{userController.isUserIdEmpty()}">
- <ui:include src="/WEB-INF/templates/user/userid_error.tpl" />
- </ui:fragment>
+ <ui:fragment rendered="#{userController.isPublicUserProfileEnabled()}">
+ <ui:fragment rendered="#{userController.isUserIdEmpty()}">
+ <ui:include src="/WEB-INF/templates/user/userid_error.tpl" />
+ </ui:fragment>
+
+ <ui:fragment rendered="#{not profileController.isProfileLinkVisibleById(userController.userId)}">
+ #{msg.ERROR_PROFILE_NOT_VISIBLE}
+ </ui:fragment>
- <ui:fragment rendered="#{not profileController.isProfileLinkVisibleById(userController.userId)}">
- #{msg.ERROR_PROFILE_NOT_VISIBLE}
+ <ui:fragment rendered="#{profileController.isProfileLinkVisibleById(userController.userId)}">
+ <div align="center">
+ <h:panelGrid styleClass="table" headerClass="table_header" footerClass="table_footer">
+ <f:facet name="header">
+ #{msg.PUBLIC_USER_PROFILE}
+ </f:facet>
+ </h:panelGrid>
+ </div>
+ </ui:fragment>
</ui:fragment>
- <ui:fragment rendered="#{profileController.isProfileLinkVisibleById(userController.userId)}">
- <div align="center">
- <h:panelGrid styleClass="table" headerClass="table_header" footerClass="table_footer">
- <f:facet name="header">
- #{msg.PUBLIC_USER_PROFILE}
- </f:facet>
- </h:panelGrid>
- </div>
+ <ui:fragment rendered="#{not userController.isPublicUserProfileEnabled()}">
+ <h:outputText styleClass="errors" value="#{msg.ERROR_GUEST_USER_PROFILE_DEACTIVATED}" />
</ui:fragment>
</ui:define>
</ui:composition>