transformed select multiple in checkbox groups

This commit is contained in:
Massimiliano Assante 2021-11-09 19:15:23 +01:00
parent e350ee9153
commit 8f16a1daba
4 changed files with 269 additions and 151 deletions

View File

@ -10,7 +10,6 @@
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
<dependent-module archiveName="email-templates-library-1.5.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/email-templates-library/email-templates-library">
<dependency-type>uses</dependency-type>
</dependent-module>

View File

@ -20,6 +20,7 @@ import javax.mail.internet.MimeMessage;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.servlet.http.HttpServletRequest;
@ -36,6 +37,7 @@ import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
@ -80,6 +82,7 @@ public class CompileForm extends MVCPortlet {
renderRequest.setAttribute("main_motivations", main_motivations);
renderRequest.setAttribute("areas_of_expertise", areas_of_expertise);
renderRequest.setAttribute("degrees_of_participation", degrees_of_participation);
super.render(renderRequest, renderResponse);
} catch (Exception e) {
_log.error("Something wrong with Databaseconnection or with queries while getting combo types", e);
@ -93,19 +96,13 @@ public class CompileForm extends MVCPortlet {
String organisation = actionRequest.getParameter("organisation");
String organisationType = actionRequest.getParameter("organisationType");
String emailAddress = actionRequest.getParameter("emailAddress");
String[] itemsAreaOfExpertiseSelectValues = actionRequest.getParameterValues("areaOfExpertiseSelect");
String areaOfExpertise = "";
for (int i = 0; i < itemsAreaOfExpertiseSelectValues.length; i++) {
areaOfExpertise += itemsAreaOfExpertiseSelectValues[i];
areaOfExpertise += "; ";
}
String country = actionRequest.getParameter("country");
String participatedInActivitiesString = (String) actionRequest.getParameter("participatedInActivities");
boolean participatedInActivities = Boolean.parseBoolean(participatedInActivitiesString);
String mainMotivation = actionRequest.getParameter("mainMotivation");
String textareaMotivation = actionRequest.getParameter("textareaMotivation");
String elaborated_expertise = actionRequest.getParameter("textareaExperience");
String degree_of_participation = actionRequest.getParameter("commitment");
_log.debug("name:" + name);
_log.debug("surname:" + surname);
@ -114,87 +111,128 @@ public class CompileForm extends MVCPortlet {
_log.debug("email:" + emailAddress);
_log.debug("country:" + country);
_log.debug("participatedInActivities:" + participatedInActivities);
_log.debug("mainMotivation:" + mainMotivation);
_log.debug("textareaMotivation:\n" + textareaMotivation+"\n");
_log.debug("itemsAreaOfExpertise (Multi):\n");
for (int i = 0; i < itemsAreaOfExpertiseSelectValues.length; i++) {
_log.debug(itemsAreaOfExpertiseSelectValues[i]);
}
_log.debug("textareaExperience:\n" + elaborated_expertise+"\n");
_log.debug("degrees_of_participation: "+ degree_of_participation);
_log.info("Got form compiled, inserting in DB.");
_log.info("itemsAreaOfExpertise (Multi):\n");
Connection conn;
try {
Connection conn = DatabaseConnection.getInstance("/"+PortalContext.getConfiguration().getInfrastructureName()).getConnection();
String insertTableSQL = "INSERT INTO forms(name, surname, organisation, organisation_type, email, "
+ "country, activities_participation, main_motivation, elaborated_motivation, area_of_expertise, "
+ "elaborated_expertise, degree_of_participation, data_management, datecreated, processed_form, user_accepted) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,current_timestamp,?,?)";
conn = DatabaseConnection.getInstance("/"+PortalContext.getConfiguration().getInfrastructureName()).getConnection();
String[] mainMotivationValues = actionRequest.getParameterValues("mainMotivation");
List<String> list = getMainMotivations(conn);
String[] main_motivations = list.toArray(new String[0]);
String mainMotivation = "";
for (int i = 0; i < mainMotivationValues.length; i++) {
System.out.println(i+"mainMotivationValues[i]="+mainMotivationValues[i]);
boolean valueTrue = Boolean.parseBoolean(mainMotivationValues[i]);
if (valueTrue)
mainMotivation += main_motivations[i-1]+"; "; //0 is a placeholder always false
}
System.out.println("mainMotivation="+mainMotivation);
String[] itemsAreaOfExpertiseSelectValues = actionRequest.getParameterValues("areaOfExpertiseSelect");
list = getAreasOfExpertise(conn);
String[] areas_of_expertise = list.toArray(new String[0]);
String areaOfExpertise = "";
for (int i = 0; i < itemsAreaOfExpertiseSelectValues.length; i++) {
boolean valueTrue = Boolean.parseBoolean(itemsAreaOfExpertiseSelectValues[i]);
if (valueTrue)
areaOfExpertise += areas_of_expertise[i-1]+"; ";
}
System.out.println("areaOfExpertise="+areaOfExpertise);
String[] degree_of_participationValues = actionRequest.getParameterValues("commitment");
list = getDgreesOfParticipation(conn);
String[] degrees_of_participation = list.toArray(new String[0]);
String degree_of_participation = "";
for (int i = 0; i < degree_of_participationValues.length; i++) {
boolean valueTrue = Boolean.parseBoolean(degree_of_participationValues[i]);
if (valueTrue)
degree_of_participation += degrees_of_participation[i-1]+"; "; //0 is a placeholder always false
}
System.out.println("degree_of_participation="+degree_of_participation);
_log.debug("textareaExperience:\n" + elaborated_expertise+"\n");
PreparedStatement preparedStatement = conn.prepareStatement(insertTableSQL);
preparedStatement.setString(1, name);
preparedStatement.setString(2, surname);
preparedStatement.setString(3, organisation);
preparedStatement.setString(4, organisationType);
preparedStatement.setString(5, emailAddress);
preparedStatement.setString(6, country);
preparedStatement.setBoolean(7, participatedInActivities);
preparedStatement.setString(8, mainMotivation);
preparedStatement.setString(9, textareaMotivation);
preparedStatement.setString(10, areaOfExpertise);
preparedStatement.setString(11, elaborated_expertise);
preparedStatement.setString(12, degree_of_participation);
preparedStatement.setBoolean(13, true); //data_management
preparedStatement.setBoolean(14, false); //processed_form
preparedStatement.setBoolean(15, false); //user_accepted
// execute insert SQL stetement
preparedStatement .executeUpdate();
_log.info("Inserting in DB done, sending confirmation to user and notification to managers via email");
String copySubmitted = new StringBuffer("\n\n\nCOPY OF INFORMATION SUBMITTED\n\n")
.append("\n").append("Name: ")
.append(name).append(" ").append(surname)
.append("\n").append("Organisation: ")
.append(organisation)
.append("\n").append("Organisation type: ")
.append(organisationType)
.append("\n").append("emailAddress: ")
.append("*** hidden on purpose ***")
.append("\n").append("Country: ")
.append(country)
.append("\n\n").append("Have you participated in the activities of any of our MOVING Regional Multi-Actors Platforms? ")
.append(participatedInActivities)
.append("\n\n").append("What is your main motivation for joining the EU MAP of MOVING? ")
.append(mainMotivation)
.append("\n\n").append("Please elaborate on your motivation expressed above so that we understand better your interest, and form a dynamic and relevant community. Vague explanations of the motivation might not be taken into consideration. ")
.append("\n\n").append(textareaMotivation).append("\n")
.append("\n\n").append("What is your main area of expertise in relation to mountain sustainability and resilience? (Multiple choice): ")
.append(areaOfExpertise)
.append("\n\n").append("Please elaborate on the relevant experience you can bring to mountain value chains and the resilience of these areas, so that we have more detailed information to be able to form a dynamic and relevant community: ")
.append("\n\n").append(elaborated_expertise)
.append("\n\n").append("As a starting point, the degree of participation you commit to is: ")
.append(degree_of_participation)
.append("\n").append("\n").append("Data Management: ")
.append("Agreed")
.append("\n\nEND COPY OF INFORMATION SUBMITTED\n\n").toString();
Properties props = System.getProperties();
Session session = null;
props.put("mail.smtp.host", mailServiceHost);
props.put("mail.smtp.port", mailServicePort);
//use localhost (probaly postfix instance)
session = Session.getDefaultInstance(props);
sendEmailConfirmationToUser(props, session, emailAddress, copySubmitted);
String groupIdVREforManagers = GetterUtil.getString(actionRequest.getPreferences().getValue("VREGroupId", StringPool.BLANK));
if (groupIdVREforManagers != null && groupIdVREforManagers.compareTo("") != 0) {
HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(actionRequest);
sendEmailNotificationToVREManagers(httpRequest, props, session, groupIdVREforManagers, copySubmitted);
}
else {
_log.warn("WARNING, non config found for groupId, no email will be send to VRE Managers");
}
_log.info("Got form compiled, inserting in DB.");
// String insertTableSQL = "INSERT INTO forms(name, surname, organisation, organisation_type, email, "
// + "country, activities_participation, main_motivation, elaborated_motivation, area_of_expertise, "
// + "elaborated_expertise, degree_of_participation, data_management, datecreated, processed_form, user_accepted) "
// + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,current_timestamp,?,?)";
//
// PreparedStatement preparedStatement = conn.prepareStatement(insertTableSQL);
// preparedStatement.setString(1, name);
// preparedStatement.setString(2, surname);
// preparedStatement.setString(3, organisation);
// preparedStatement.setString(4, organisationType);
// preparedStatement.setString(5, emailAddress);
// preparedStatement.setString(6, country);
// preparedStatement.setBoolean(7, participatedInActivities);
// preparedStatement.setString(8, mainMotivation);
// preparedStatement.setString(9, textareaMotivation);
// preparedStatement.setString(10, areaOfExpertise);
// preparedStatement.setString(11, elaborated_expertise);
// preparedStatement.setString(12, degree_of_participation);
// preparedStatement.setBoolean(13, true); //data_management
// preparedStatement.setBoolean(14, false); //processed_form
// preparedStatement.setBoolean(15, false); //user_accepted
// // execute insert SQL stetement
// preparedStatement .executeUpdate();
// _log.info("Inserting in DB done, sending confirmation to user and notification to managers via email");
//
// String copySubmitted = new StringBuffer("\n\n\nCOPY OF INFORMATION SUBMITTED\n\n")
// .append("\n").append("Name: ")
// .append(name).append(" ").append(surname)
// .append("\n").append("Organisation: ")
// .append(organisation)
// .append("\n").append("Organisation type: ")
// .append(organisationType)
// .append("\n").append("emailAddress: ")
// .append("*** hidden on purpose ***")
// .append("\n").append("Country: ")
// .append(country)
// .append("\n\n").append("Have you participated in the activities of any of our MOVING Regional Multi-Actors Platforms? ")
// .append(participatedInActivities)
// .append("\n\n").append("What is your main motivation for joining the EU MAP of MOVING? ")
// .append(mainMotivation)
// .append("\n\n").append("Please elaborate on your motivation expressed above so that we understand better your interest, and form a dynamic and relevant community. Vague explanations of the motivation might not be taken into consideration. ")
// .append("\n\n").append(textareaMotivation).append("\n")
// .append("\n\n").append("What is your main area of expertise in relation to mountain sustainability and resilience? (Multiple choice): ")
// .append(areaOfExpertise)
// .append("\n\n").append("Please elaborate on the relevant experience you can bring to mountain value chains and the resilience of these areas, so that we have more detailed information to be able to form a dynamic and relevant community: ")
// .append("\n\n").append(elaborated_expertise)
// .append("\n\n").append("As a starting point, the degree of participation you commit to is: ")
// .append(degree_of_participation)
// .append("\n").append("\n").append("Data Management: ")
// .append("Agreed")
// .append("\n\nEND COPY OF INFORMATION SUBMITTED\n\n").toString();
//
//
// Properties props = System.getProperties();
// Session session = null;
// props.put("mail.smtp.host", mailServiceHost);
// props.put("mail.smtp.port", mailServicePort);
// //use localhost (probaly postfix instance)
// session = Session.getDefaultInstance(props);
//
// sendEmailConfirmationToUser(props, session, emailAddress, copySubmitted);
//
// String groupIdVREforManagers = GetterUtil.getString(actionRequest.getPreferences().getValue("VREGroupId", StringPool.BLANK));
// if (groupIdVREforManagers != null && groupIdVREforManagers.compareTo("") != 0) {
// HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(actionRequest);
// sendEmailNotificationToVREManagers(httpRequest, props, session, groupIdVREforManagers, copySubmitted);
// }
// else {
// _log.warn("WARNING, non config found for groupId, no email will be send to VRE Managers");
// }
} catch (Exception e) {
_log.error("Some error while trying to insert form");

View File

@ -3,10 +3,14 @@
}
#wrapper .form-inline .checkbox input[type=checkbox] {
margin-right: 10px;
margin: 0 25px;
height: 18px;
}
.aui .control-group {
margin-bottom: 0 !important;
}
#wrapper label {
min-width: 200px;
}
@ -23,10 +27,23 @@
font-family: "Open Sans", Arial, sans-serif !important;
}
#wrapper label.checkbox {
margin-bottom: 0;
margin-top: 5px;
display: block;
}
.form-display {
margin: 10px 100px;
border: 1px solid #CCC;
font-size: 16px;
line-height: 1.5;
font-family: "Open Sans", Arial, sans-serif !important;
}
div.form-validator-stack.help-inline {
display: block;
}
.first-checkbox-hidden {
display: none;
}

View File

@ -13,7 +13,7 @@ pageContext.setAttribute("main_motivations", main_motivations);
pageContext.setAttribute("areas_of_expertise", areas_of_expertise);
pageContext.setAttribute("degrees_of_participation", degrees_of_participation);
pageContext.setAttribute("required", "true");
pageContext.setAttribute("required", "false");
%>
<portlet:defineObjects />
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
@ -24,7 +24,8 @@ pageContext.setAttribute("required", "true");
<p class="lead">Expression of Interest for the EU Multi-Actor
Platform</p>
<aui:form action="<%=validateURL%>" method="post" name="fm" id="movingForm">
<aui:form action="<%=validateURL%>" method="post" name="fm"
id="movingForm">
<aui:fieldset>
<aui:input label="Name" name="name" type="text" required="${required}"
style="width:300px;" />
@ -32,11 +33,11 @@ pageContext.setAttribute("required", "true");
required="${required}" style="width:300px;" />
<aui:input label="Organisation" name="organisation" type="text"
required="${required}" style="width:300px;" />
<!--
<!--
SELECT
-->
<aui:select label="Organisation Type" name="organisationType"
required="${required}" showEmptyOption="true"
<aui:select label="Type of Organisation / Stakeholder"
name="organisationType" required="${required}" showEmptyOption="true"
style="width:800px;">
<c:forEach var="type" items="${organisation_types}">
<aui:option value="${type}">${type}</aui:option>
@ -52,49 +53,67 @@ pageContext.setAttribute("required", "true");
<aui:fieldset>
<aui:input id="participatedInActivities " type="checkbox"
name="participatedInActivities"
label=" Have you participated in the activities of any of our MOVING Regional Multi-Actors Platforms?" />
<!--
SELECT
-->
<aui:select
label=" What is your main motivation for joining the EU MAP of MOVING?"
name="mainMotivation" required="${required}" showEmptyOption="true"
style="width:800px;">
<c:forEach var="type" items="${main_motivations}">
<aui:option value="${type}">${type}</aui:option>
</c:forEach>
</aui:select>
label=" Have you participated in the activities of any of our MOVING Regional Multi-Actors Platforms?"
required="${required}" />
<div class="control-group input-text-wrapper">
<aui:field-wrapper name="mainMotivation"
label="What is your main motivation for joining the EU MAP of MOVING? (Required)">
<!-- the first is needed as placeholder otherwise the validator does not work, make sure you take into account in the server part -->
<aui:input id="mainMotivation" type="checkbox"
name="mainMotivation" cssClass="first-checkbox-hidden" label=""/>
<c:forEach var="type" items="${main_motivations}">
<aui:input id="mainMotivation" type="checkbox"
name="mainMotivation" label="${type}"/>
</c:forEach>
</aui:field-wrapper>
</div>
<aui:spacer></aui:spacer>
<aui:input
label="Please elaborate on your motivation expressed above so that we understand better your interest, and form a dynamic and relevant community. Vague explanations of the motivation might not be taken into consideration."
name="textareaMotivation" type="textarea" style="width:800px;"
placeholder="Free text 150 words" />
<!--
SELECT Multi areas_of_expertise
Multi areas_of_expertise
-->
<aui:select
label="What is your main area of expertise in relation to mountain sustainability and resilience? (Multiple choice)"
name="areaOfExpertiseSelect" required="${required}"
style="width:800px;" multiple="true">
<c:forEach var="type" items="${areas_of_expertise}">
<aui:option value="${type}">${type}</aui:option>
</c:forEach>
</aui:select>
<!-- String[] items = actionRequest.getParameterValues("areaOfExpertiseSelect"); -->
<div class="control-group input-text-wrapper">
<aui:field-wrapper name="areaOfExpertiseSelect"
label="What is your main area of expertise in relation to
mountain sustainability and resilience? (Required)">
<!-- the first is needed as placeholder otherwise the validator does not work, make sure you take into account in the server part -->
<aui:input id="areaOfExpertiseSelect" type="checkbox"
name="areaOfExpertiseSelect" cssClass="first-checkbox-hidden" label=""/>
<c:forEach var="type" items="${areas_of_expertise}">
<aui:input id="areaOfExpertiseSelect" type="checkbox"
name="areaOfExpertiseSelect" label="${type}" showRequiredLabel="false"/>
</c:forEach>
</aui:field-wrapper>
</div>
<aui:spacer></aui:spacer>
<aui:input
label="Please elaborate on the relevant experience you can bring to mountain value chains and the resilience of these areas, so that we have more detailed information to be able to form a dynamic and relevant community."
name="textareaExperience" type="textarea" style="width:800px;"
placeholder="Free text 150 words" />
<!--
SELECT
-->
<aui:select
label="As a starting point, the degree of participation you commit to is:"
name="commitment" required="${required}" showEmptyOption="true"
style="width:800px;">
<c:forEach var="type" items="${degrees_of_participation}">
<aui:option value="${type}">${type}</aui:option>
</c:forEach>
</aui:select>
<div class="control-group input-text-wrapper">
<aui:field-wrapper name="commitment"
label="As a starting point, the degree of participation you commit to is: (Required)">
<!-- the first is needed as placeholder otherwise the validator does not work, make sure you take into account in the server part -->
<aui:input id="commitment" type="checkbox"
name="commitment" cssClass="first-checkbox-hidden" label=""/>
<c:forEach var="type" items="${degrees_of_participation}">
<aui:input id="commitment" type="checkbox" name="commitment"
label="${type}" />
</c:forEach>
</aui:field-wrapper>
</div>
<aui:spacer></aui:spacer>
<p class="lead">Data Management</p>
<p>
@ -104,10 +123,8 @@ pageContext.setAttribute("required", "true");
Protection Regulation (EU) 2016/679 of 27 April 2016 (GDPR) and other
applicable rules, for the management of the activity and to send
other electronic communications of content related to it. Read more
in our
<aui:a href="https://www.moving-h2020.eu/privacy-cookies-policy/"
target="_blank">Privacy Policy</aui:a>
.
in our <a href="https://www.moving-h2020.eu/privacy-cookies-policy/"
target="_blank">Privacy Policy</a> .
</p>
<aui:input id="privacyPolicyAgree" type="checkbox"
name="privacyPolicyAgree" label=" I Agree" required="${required}" />
@ -116,31 +133,78 @@ pageContext.setAttribute("required", "true");
Submit Button
-->
<div style="width: 100%; text-align: center;">
<div class="g-recaptcha" data-sitekey="6Ld0hfYZAAAAAKlIHde1v3QE4NyY4AniN6j-U9SP"></div>
<br/>
<!-- <div class="g-recaptcha" -->
<!-- data-sitekey="6Ld0hfYZAAAAAKlIHde1v3QE4NyY4AniN6j-U9SP"></div> -->
<!-- <br /> -->
<aui:button-row>
<aui:button value="Submit your application" type="submit"
cssClass="btn-large btn-fill" />
</aui:button-row>
</div>
</aui:form>
<script type="text/javascript">
AUI().use(
'aui-tooltip', 'aui-base', 'selector-css3',
function (A) {
var form = A.one('#<portlet:namespace />fm');
if (form) {
form.on(
'submit',
function(event) {
if (grecaptcha.getResponse() === '') {
event.halt();
event.stopImmediatePropagation();
alert('Please prove you are not a robot');
}
}
);
}
});
</script>
<aui:script>
AUI().use('aui-form-validator', 'aui-overlay-context-panel', function(A) {
// Extending Alloy Default values for FormValidator RULES
var DEFAULTS_FORM_VALIDATOR = A.config.FormValidator;
A.mix(
DEFAULTS_FORM_VALIDATOR.RULES,
{
requiredCheckbox:function (val, fieldNode, ruleValue) {
var counter = 0;
var nodeName = fieldNode.attr('name');
var checkBoxes = A.all("input[name='" + nodeName + "']").val();
for (var i = 0, len = checkBoxes.length; i < len; i++ ) {
if (checkBoxes[i] == 'true') {
counter++;
};
}
console.log('counter='+counter);
return counter >= ruleValue;
},
},
true
);
// Extending Alloy Default values for FormValidator STRINGS
A.mix(
DEFAULTS_FORM_VALIDATOR.STRINGS,
{
requiredCheckbox: '<liferay-ui:message
key="Please select at least one of the following options: " />'
},
true
);
// Specify the form validation rules to be applied on this form
var rules = {
<portlet:namespace />areaOfExpertiseSelect: {
requiredCheckbox: 1
},
<portlet:namespace />mainMotivation: {
requiredCheckbox: 1
},
<portlet:namespace />commitment: {
requiredCheckbox: 1
}
};
// filedStrings to override the standard error msgs
var fieldStrings = {
};
new A.FormValidator(
{
boundingBox: '#<portlet:namespace />fm',
fieldStrings: fieldStrings,
rules: rules,
showAllMessages: true
}
);
});
</aui:script>