From 45e170db8cd49bf3800671baef75cf76248c3237 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Tue, 2 Aug 2016 11:25:04 +0200
Subject: [PATCH] Continued a bit: (please cherry-pick) - that the user must
 change password enforced by administrator may be not wanted everywhere, so
 better make it as a feature that can be disabled per project - ignored some
 strings for i18n
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@haeder.net>
---
 .../AddressbookUserLoginWebSessionBean.java   |  4 ++--
 .../admin/user/admin_form_user_data.tpl       | 20 ++++++++++---------
 web/WEB-INF/web.xml                           |  5 +++++
 web/user/login_change_email_address.xhtml     |  2 +-
 web/user/login_change_personal_data.xhtml     |  2 +-
 web/user/login_contact_data_saved.xhtml       |  2 +-
 web/user/login_edit_user_data.xhtml           |  6 +++---
 web/user/login_index.xhtml                    |  2 +-
 web/user/login_user_data_saved.xhtml          |  2 +-
 9 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java
index 749a5d9c..50beb849 100644
--- a/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java
+++ b/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java
@@ -58,12 +58,12 @@ public class AddressbookUserLoginWebSessionBean extends BaseAddressbookControlle
 	/**
 	 * Path name for guest base template
 	 */
-	private static final String GUEST_BASE_TEMPLATE_NAME = "guest/guest";
+	private static final String GUEST_BASE_TEMPLATE_NAME = "guest/guest"; //NOI18N
 
 	/**
 	 * Path name for logged-in user base template
 	 */
-	private static final String USER_BASE_TEMPLATE_NAME = "login/user/user";
+	private static final String USER_BASE_TEMPLATE_NAME = "login/user/user"; //NOI18N
 
 	/**
 	 * Serial number
diff --git a/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl b/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl
index e8b209de..ae979a96 100644
--- a/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl
+++ b/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl
@@ -52,17 +52,19 @@
 					<div class="clear"></div>
 				</div>
 
-				<div class="table_row">
-					<div class="table_left_medium">
-						<h:outputLabel for="userMustChangePassword" value="#{msg.ADMIN_USER_MUST_CHANGE_PASSWORD}" />
-					</div>
+				<ui:fragment rendered="#{featureController.isFeatureEnabled('user_must_change_password')}">
+					<div class="table_row">
+						<div class="table_left_medium">
+							<h:outputLabel for="userMustChangePassword" value="#{msg.ADMIN_USER_MUST_CHANGE_PASSWORD}" />
+						</div>
 
-					<div class="table_right_medium">
-						<h:selectBooleanCheckbox styleClass="input" id="userMustChangePassword" value="#{adminUserController.userMustChangePassword}" />
-					</div>
+						<div class="table_right_medium">
+							<h:selectBooleanCheckbox styleClass="input" id="userMustChangePassword" value="#{adminUserController.userMustChangePassword}" />
+						</div>
 
-					<div class="clear"></div>
-				</div>
+						<div class="clear"></div>
+					</div>
+				</ui:fragment>
 
 				<div class="para notice">
 					<ul>
diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml
index 8fe1ee2c..3e7ecd84 100644
--- a/web/WEB-INF/web.xml
+++ b/web/WEB-INF/web.xml
@@ -77,6 +77,11 @@
         <param-name>is_feature_privacy_enabled</param-name>
         <param-value>true</param-value>
     </context-param>
+    <context-param>
+        <description>Feature: Users must change password after login (with current password). Administrators can enforce this.</description>
+        <param-name>is_feature_user_must_change_password_enabled</param-name>
+        <param-value>true</param-value>
+    </context-param>
     <servlet>
         <servlet-name>Faces Servlet</servlet-name>
         <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
diff --git a/web/user/login_change_email_address.xhtml b/web/user/login_change_email_address.xhtml
index 3fb7ca98..d42ad5a4 100644
--- a/web/user/login_change_email_address.xhtml
+++ b/web/user/login_change_email_address.xhtml
@@ -15,7 +15,7 @@
 		</ui:define>
 
 		<ui:define name="content">
-			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and featureController.isFeatureEnabled('edit_user_data') and not userLoginController.ifUserMustChangePassword()}">
+			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and featureController.isFeatureEnabled('edit_user_data') and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 				<div class="table">
 					<div class="table_header">
 						<h:outputText value="#{msg.LOGIN_CHANGE_EMAIL_ADDRESS_TITLE}" />
diff --git a/web/user/login_change_personal_data.xhtml b/web/user/login_change_personal_data.xhtml
index ee9f01fa..088c5581 100644
--- a/web/user/login_change_personal_data.xhtml
+++ b/web/user/login_change_personal_data.xhtml
@@ -15,7 +15,7 @@
 		</ui:define>
 
 		<ui:define name="content">
-			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and featureController.isFeatureEnabled('edit_user_data') and not userLoginController.ifUserMustChangePassword()}">
+			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and featureController.isFeatureEnabled('edit_user_data') and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 				<div class="table">
 					<div class="table_header">
 						<h:outputText value="#{msg.LOGIN_CHANGE_PERSONAL_DATA_TITLE}" />
diff --git a/web/user/login_contact_data_saved.xhtml b/web/user/login_contact_data_saved.xhtml
index 5be91812..f33cf16a 100644
--- a/web/user/login_contact_data_saved.xhtml
+++ b/web/user/login_contact_data_saved.xhtml
@@ -15,7 +15,7 @@
 		</ui:define>
 
 		<ui:define name="content">
-			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and featureController.isFeatureEnabled('edit_user_data') and not userLoginController.ifUserMustChangePassword()}">
+			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and featureController.isFeatureEnabled('edit_user_data') and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 				<ui:include src="/WEB-INF/templates/generic/message_box.tpl">
 					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
 				</ui:include>
diff --git a/web/user/login_edit_user_data.xhtml b/web/user/login_edit_user_data.xhtml
index 1270ebf0..fbdda7de 100644
--- a/web/user/login_edit_user_data.xhtml
+++ b/web/user/login_edit_user_data.xhtml
@@ -15,7 +15,7 @@
 		</ui:define>
 
 		<ui:define name="content">
-			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and not userLoginController.ifUserMustChangePassword()}">
+			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 				<div class="table">
 					<div class="table_header">
 						<h:outputText value="#{msg.LOGIN_EDIT_USER_DATA_TITLE}" />
@@ -27,13 +27,13 @@
 
 					<div class="para">
 						<ul>
-							<ui:fragment rendered="#{featureController.isFeatureEnabled('edit_user_data') and not userLoginController.ifUserMustChangePassword()}">
+							<ui:fragment rendered="#{featureController.isFeatureEnabled('edit_user_data') and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 								<li>
 									<h:link title="#{msg.LINK_LOGIN_CHANGE_PERSONAL_DATA_TITLE}" outcome="login_change_personal_data" value="#{msg.LINK_LOGIN_CHANGE_PERSONAL_DATA}" />
 								</li>
 							</ui:fragment>
 
-							<ui:fragment rendered="#{featureController.isFeatureEnabled('edit_user_data') and not userLoginController.ifUserMustChangePassword()}">
+							<ui:fragment rendered="#{featureController.isFeatureEnabled('edit_user_data') and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 								<li>
 									<h:link title="#{msg.LINK_LOGIN_CHANGE_EMAIL_ADDRESS_TITLE}" outcome="login_change_email_address" value="#{msg.LINK_LOGIN_CHANGE_EMAIL_ADDRESS}" />
 								</li>
diff --git a/web/user/login_index.xhtml b/web/user/login_index.xhtml
index c9f81237..b85c6661 100644
--- a/web/user/login_index.xhtml
+++ b/web/user/login_index.xhtml
@@ -15,7 +15,7 @@
 		</ui:define>
 
 		<ui:define name="content">
-			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and not userLoginController.ifUserMustChangePassword()}">
+			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 				Here goes your content.
 			</ui:fragment>
 
diff --git a/web/user/login_user_data_saved.xhtml b/web/user/login_user_data_saved.xhtml
index b6e46385..f0831d0b 100644
--- a/web/user/login_user_data_saved.xhtml
+++ b/web/user/login_user_data_saved.xhtml
@@ -15,7 +15,7 @@
 		</ui:define>
 
 		<ui:define name="content">
-			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and not userLoginController.ifUserMustChangePassword()}">
+			<ui:fragment rendered="#{userLoginController.isUserLoggedIn() and (not userLoginController.ifUserMustChangePassword() or not featureController.isFeatureEnabled('user_must_change_password'))}">
 				<ui:include src="/WEB-INF/templates/generic/message_box.tpl">
 					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
 				</ui:include>
-- 
2.39.5