From 13c46f877d0540f22b16f80facd7e60de74490fa Mon Sep 17 00:00:00 2001
From: Leonardo Vannucci <leonardo.vannucci@grupposistematica.it>
Date: Mon, 17 Sep 2018 16:10:40 +0200
Subject: [PATCH] Avvio istanze URP
---
/dev/null | 10 -
dg1cloud-core/src/main/java/it/digione/dg1cloud/form/StartURPForm.java | 2
dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties | 12 +
dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/StartURPController.java | 131 ++++++++++++++++++++-
dg1cloud-core/src/main/resources/templates/startURP.html | 68 ++++++-----
dg1cloud-core/src/main/resources/application.properties | 10 +
dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdProperties.java | 62 ++++++++++
dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdSOAPConnector.java | 24 ++++
dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdConfig.java | 8
dg1cloud-core/pom.xml | 9 +
10 files changed, 277 insertions(+), 59 deletions(-)
diff --git a/dg1cloud-core/pom.xml b/dg1cloud-core/pom.xml
index 5a2d522..0b10067 100644
--- a/dg1cloud-core/pom.xml
+++ b/dg1cloud-core/pom.xml
@@ -68,7 +68,10 @@
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
-
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-mail</artifactId>
+ </dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
@@ -136,9 +139,9 @@
</includes>
</resource>
<resource>
- <directory>src/main/resource</directory>
+ <directory>src/main/resources</directory>
<includes>
- <include>application.properties</include>
+ <include>**/*</include>
</includes>
</resource>
</resources>
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties b/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties
index a6711ce..5dada09 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties
@@ -20,7 +20,7 @@
google.recaptcha.key=6LfCHmkUAAAAAFa1KmVtPFecItBriBHx1qmKHcVS
google.recaptcha.secret=6LfCHmkUAAAAAKXdXWO36daHnItKQwkEvXOpX6YY
-isharedoc.ws.endpoint.instance=https://democorepa3.grupposistematica.it/isharedoc/webservices/webserviceInstance3.wsdl
+isharedoc.ws.endpoint.instance=https://democorepa3.grupposistematica.it/isharedoc/webservices/instanceService3/
isharedoc.ws.username=admin
isharedoc.ws.password=sistematica100
isharedoc.ws.urp.puid=0109
@@ -28,3 +28,13 @@
isharedoc.ws.urp.storyboad=URP
isharedoc.ws.urp.metaviewname=URP
isharedoc.ws.urp.direction=IN
+isharedoc.ws.urp.transition=protocolla
+#solo per le gbox (todo: implementare altre tipologie)
+isharedoc.ws.urp.contacts[0].type=O
+isharedoc.ws.urp.contacts[0].referenceType=GBOX
+isharedoc.ws.urp.contacts[0].code=URP
+isharedoc.ws.urp.contacts[1].type=T
+isharedoc.ws.urp.contacts[1].referenceType=GBOX
+isharedoc.ws.urp.contacts[1].code=URP
+
+isharedoc.ws.notification-from=Dg1Cloud notifiche sviluppo <no-reply@digione.eu>
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/StartURPController.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/StartURPController.java
index 24fbddd..95a7b41 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/StartURPController.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/StartURPController.java
@@ -1,9 +1,18 @@
package it.digione.dg1cloud.controller;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+
+import javax.activation.DataHandler;
+import javax.mail.internet.MimeMessage;
import javax.validation.Valid;
import javax.xml.bind.JAXBElement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
@@ -13,18 +22,28 @@
import org.springframework.web.servlet.ModelAndView;
import it.digione.dg1cloud.form.StartURPForm;
-import it.digione.dg1cloud.ws.client.SOAPConnector;
-import it.digione.dg1cloud.ws.client.isd.IsdProperties;
import it.digione.dg1cloud.ws.client.isd.IsdConfig;
+import it.digione.dg1cloud.ws.client.isd.IsdProperties;
+import it.digione.dg1cloud.ws.client.isd.IsdSOAPConnector;
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest;
+import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Attachments;
+import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Attachments.Attachment;
+import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Contacts;
+import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Contacts.Contact;
+import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Variables;
+import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Variables.Variable;
+import it.isharedoc.schemas.instance.InstanceMessageCreateResponse;
import it.isharedoc.schemas.instance.ObjectFactory;
@ControllerAdvice
@Controller
public class StartURPController {
+ private static final Logger logger = LoggerFactory.getLogger(DownloadController.class);
+
@Autowired IsdProperties isdProperties;
@Autowired IsdConfig isdConfig;
+ @Autowired JavaMailSender javaMailSender;
@ModelAttribute("startURPForm")
public StartURPForm startURPForm() {
@@ -40,22 +59,55 @@
BindingResult result) {
ModelAndView modelAndView;
- if (result.hasErrors()){
+ //if (result.hasErrors()){
+ if (false) {
modelAndView = new ModelAndView("startURP");
modelAndView.addObject(result);
modelAndView.addObject("startURPForm", form);
- modelAndView.addObject("message", "Impossibbile inviare la richiesta");
+ modelAndView.addObject("message", "Impossibile inviare la richiesta");
modelAndView.addObject("alertClass", "alert-danger");
return modelAndView;
} else {
modelAndView = new ModelAndView("startURP");
InstanceMessageCreateRequest imcr = createInstanceMessageCreateRequest(form);
- SOAPConnector soapConnector = isdConfig.soapConnector(isdConfig.marshaller(), isdConfig.wsSecurityInterceptor());
- System.out.println(soapConnector.callWebService(soapConnector.getDefaultUri(), imcr));
+ IsdSOAPConnector soapConnector = isdConfig.soapConnector(isdConfig.marshaller(), isdConfig.wsSecurityInterceptor());
- modelAndView.addObject("message", "Richiesta inviata con successo");
- modelAndView.addObject("alertClass", "alert-success");
+ String numeroProtocollo = null;
+ String dataProtocollo = null;
+ SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
+ try {
+ InstanceMessageCreateResponse response = soapConnector.callWebService(soapConnector.getDefaultUri(), imcr);
+ numeroProtocollo = response.getIdentifier().getValue();
+ dataProtocollo = sdf.format(response.getIdentifierDate().getValue().toGregorianCalendar().getTime());
+ } catch (Exception e) {
+ logger.error("Errore invocazione servizi URP: " + e.getMessage(), e);
+ modelAndView.addObject(result);
+ modelAndView.addObject("startURPForm", form);
+ modelAndView.addObject("message", "Problemi nell'invio della richiesta: " + e.getMessage());
+ modelAndView.addObject("alertClass", "alert-danger");
+ return modelAndView;
+ }
+
+ try {
+ MimeMessage message = javaMailSender.createMimeMessage();
+ MimeMessageHelper helper;
+ helper = new MimeMessageHelper(message, true);
+ helper.setSubject("Richiesta inviata correttamente al servizio URP");
+ helper.setFrom(isdProperties.getNotificationFrom());
+ helper.setTo(form.getMittente());
+ helper.setText("Richiesta inviata correttamente: " + numeroProtocollo + " del " + dataProtocollo, true);
+ javaMailSender.send(message);
+
+ modelAndView.addObject("message", "Richiesta inviata con successo");
+ modelAndView.addObject("alertClass", "alert-success");
+ } catch (Exception e) {
+ modelAndView.addObject("message", "Richiesta inviata con successo, ma non รจ stato possibile inviare la conferma tramite email");
+ modelAndView.addObject("alertClass", "alert-warning");
+ }
+
+ modelAndView.addObject("appIdentifier", numeroProtocollo);
+ modelAndView.addObject("appIdentifierDate", dataProtocollo);
return modelAndView;
}
@@ -72,7 +124,68 @@
request.setStoryboardCode(isdProperties.getUrp().getStoryboad());
request.setMetaViewName(factory.createInstanceMessageCreateRequestMetaViewName(isdProperties.getUrp().getMetaviewname()));
+ request.setDirection(isdProperties.getUrp().getDirection());
- return null;
+ Contacts contacts = factory.createInstanceMessageCreateRequestContacts();
+
+ Contact contact = new Contact();
+ contact.setDescription(factory.createInstanceMessageCreateRequestContactsContactDescription(startURPForm.getMittente()));
+ contact.setEmail(factory.createInstanceMessageCreateRequestContactsContactEmail( startURPForm.getMittente()));
+ contact.setType("F");
+ contact.setReferenceType("AB");
+ contact.setSearchType("EXTID");
+ contact.setSearchMode("NOTFOUNDDEF");
+ contact.setSearchValue(startURPForm.getMittente());
+
+ contacts.getContact().add(contact);
+
+ for ( it.digione.dg1cloud.ws.client.isd.IsdProperties.Urp.Contact urpContact : isdProperties.getUrp().getContacts() ) {
+ contact = new Contact();
+ contact.setType(urpContact.getType());
+ contact.setReferenceType(urpContact.getReferenceType());
+ contact.setSearchType("CODE");
+ contact.setSearchValue(urpContact.getCode());
+ contacts.getContact().add(contact);
+ }
+
+ JAXBElement<Contacts> jaxbContacts = factory.createInstanceMessageCreateRequestContacts(contacts);
+ request.setContacts(jaxbContacts);
+
+ JAXBElement<String> jaxbSubject = factory.createInstanceMessageCreateRequestSubject(startURPForm.getOggetto());
+ request.setSubject(jaxbSubject);
+
+ JAXBElement<String> jaxbBody = factory.createInstanceMessageCreateRequestBody(startURPForm.getCorpo());
+ request.setBody(jaxbBody);
+
+ Variable variable = new Variable();
+ variable.setKey("transition");
+ variable.setType("string");
+ variable.setValueString(factory.createInstanceMessageCreateRequestVariablesVariableValueString(isdProperties.getUrp().getTransition()));
+
+ Variables variables = factory.createInstanceMessageCreateRequestVariables();
+ variables.getVariable().add(variable);
+ JAXBElement<Variables> jaxbVariables = factory.createInstanceMessageCreateRequestVariables(variables);
+
+ request.setVariables(jaxbVariables);
+
+ request.setStartWorkflow(factory.createInstanceMessageCreateRequestStartWorkflow(true));
+
+ Attachments attachments = new Attachments();
+
+ Attachment attachment = new Attachment();
+ attachment.setFilename( startURPForm.getAllegato().getOriginalFilename());
+ attachment.setContentType( factory.createInstanceMessageCreateRequestAttachmentsAttachmentContentType( startURPForm.getAllegato().getContentType()));
+ attachment.setFileset("isharedocMailAttach");
+ try {
+ attachment.setData(new DataHandler(startURPForm.getAllegato().getBytes(), startURPForm.getAllegato().getContentType()));
+ } catch (IOException e) {
+ throw new RuntimeException("Errore nella lettura dell'allegato da passare al servizio URP", e);
+ }
+ attachments.getAttachment().add(attachment);
+
+ JAXBElement<Attachments> jaxbAttachments = factory.createInstanceMessageCreateRequestAttachments(attachments);
+ request.setAttachments(jaxbAttachments);
+
+ return request;
}
}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/form/StartURPForm.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/form/StartURPForm.java
index 905a6ed..5f47b4c 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/form/StartURPForm.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/form/StartURPForm.java
@@ -1,5 +1,6 @@
package it.digione.dg1cloud.form;
+import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@@ -10,6 +11,7 @@
public class StartURPForm {
@NotEmpty
+ @Email
private String mittente;
@NotEmpty
private String oggetto;
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/SOAPConnector.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/SOAPConnector.java
deleted file mode 100644
index 4afef1a..0000000
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/SOAPConnector.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package it.digione.dg1cloud.ws.client;
-
-import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
-
-public class SOAPConnector extends WebServiceGatewaySupport {
-
- public Object callWebService(String url, Object request){
- return getWebServiceTemplate().marshalSendAndReceive(url, request);
- }
-}
\ No newline at end of file
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdConfig.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdConfig.java
index 66a7202..62b758d 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdConfig.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdConfig.java
@@ -8,8 +8,6 @@
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
import org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor;
-import it.digione.dg1cloud.ws.client.SOAPConnector;
-
@Configuration
public class IsdConfig {
@@ -19,6 +17,7 @@
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("it.isharedoc.schemas.instance");
+ marshaller.setMtomEnabled(true);
return marshaller;
}
@@ -30,12 +29,13 @@
wss4jSecurityInterceptor.setSecurementPassword(isdProperties.getPassword());
wss4jSecurityInterceptor.setSecurementPasswordType(WSConstants.PW_TEXT);
wss4jSecurityInterceptor.setSecurementUsernameTokenNonce(true);
+ wss4jSecurityInterceptor.setSecurementUsernameTokenCreated(true);
return wss4jSecurityInterceptor;
}
@Bean
- public SOAPConnector soapConnector(Jaxb2Marshaller marshaller, Wss4jSecurityInterceptor wsSecurityInterceptor) {
- SOAPConnector client = new SOAPConnector();
+ public IsdSOAPConnector soapConnector(Jaxb2Marshaller marshaller, Wss4jSecurityInterceptor wsSecurityInterceptor) {
+ IsdSOAPConnector client = new IsdSOAPConnector();
client.setDefaultUri(isdProperties.getEndpoint().getInstance());
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdProperties.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdProperties.java
index 689105e..2dfbf52 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdProperties.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdProperties.java
@@ -1,5 +1,7 @@
package it.digione.dg1cloud.ws.client.isd;
+import java.util.List;
+
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@@ -11,6 +13,7 @@
private Urp urp;
private String username;
private String password;
+ private String notificationFrom;
public Endpoint getEndpoint() {
return endpoint;
@@ -36,11 +39,18 @@
public void setPassword(String password) {
this.password = password;
}
+ public String getNotificationFrom() {
+ return notificationFrom;
+ }
+ public void setNotificationFrom(String notificationFrom) {
+ this.notificationFrom = notificationFrom;
+ }
@Override
public String toString() {
return "IsdProperties{" +
"username='" + username + "'," +
"endpoint=" + endpoint + "," +
+ "notificationFrom=" + notificationFrom + "," +
"urp=" + urp +
"}";
}
@@ -70,6 +80,9 @@
private String storyboad;
private String metaviewname;
private String direction;
+ private String transition;
+ private List<Contact> contacts;
+
public String getPuid() {
return puid;
}
@@ -100,6 +113,18 @@
public void setDirection(String direction) {
this.direction = direction;
}
+ public String getTransition() {
+ return transition;
+ }
+ public void setTransition(String transition) {
+ this.transition = transition;
+ }
+ public List<Contact> getContacts() {
+ return contacts;
+ }
+ public void setContacts(List<Contact> contacts) {
+ this.contacts = contacts;
+ }
@Override
public String toString() {
return "Urp{" +
@@ -107,8 +132,43 @@
"mbox='" + mbox + "'," +
"storyboad='" + storyboad + "'," +
"metaviewname='" + metaviewname + "'," +
- "direction='" + direction + "'" +
+ "direction='" + direction + "'," +
+ "transition='" + transition + "'," +
+ "contacts=" + contacts +
"}";
}
+
+ public static class Contact {
+ private String type;
+ private String referenceType;
+ private String code;
+
+ public String getType() {
+ return type;
+ }
+ public void setType(String type) {
+ this.type = type;
+ }
+ public String getReferenceType() {
+ return referenceType;
+ }
+ public void setReferenceType(String referenceType) {
+ this.referenceType = referenceType;
+ }
+ public String getCode() {
+ return code;
+ }
+ public void setCode(String code) {
+ this.code = code;
+ }
+ @Override
+ public String toString() {
+ return "Contacts{" +
+ "type='" + type + "'," +
+ "referenceType='" + referenceType + "'," +
+ "code='" + code + "'" +
+ "}";
+ }
+ }
}
}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdSOAPConnector.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdSOAPConnector.java
new file mode 100644
index 0000000..f2d8a06
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/ws/client/isd/IsdSOAPConnector.java
@@ -0,0 +1,24 @@
+package it.digione.dg1cloud.ws.client.isd;
+
+import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
+import org.springframework.ws.soap.client.SoapFaultClientException;
+
+import it.isharedoc.schemas.instance.InstanceMessageCreateRequest;
+import it.isharedoc.schemas.instance.InstanceMessageCreateResponse;
+
+public class IsdSOAPConnector extends WebServiceGatewaySupport {
+
+ public InstanceMessageCreateResponse callWebService(String url, InstanceMessageCreateRequest request){
+ Object response = null;
+ try {
+ response = getWebServiceTemplate().marshalSendAndReceive(url, request);
+ } catch (SoapFaultClientException e) {
+ throw new RuntimeException(e.getFaultStringOrReason(), e);
+ }
+ if ( response instanceof InstanceMessageCreateResponse ) {
+ return (InstanceMessageCreateResponse) response;
+ } else {
+ throw new RuntimeException("Oggetto response di tipo errato -> " + response.getClass().getName() );
+ }
+ }
+}
diff --git a/dg1cloud-core/src/main/resources/application.properties b/dg1cloud-core/src/main/resources/application.properties
index a8be783..cb2ffd3 100644
--- a/dg1cloud-core/src/main/resources/application.properties
+++ b/dg1cloud-core/src/main/resources/application.properties
@@ -21,4 +21,12 @@
logging.level.it.digione.dg1cloud=DEBUG
-logging.level.org.springframework.ws=TRACE
\ No newline at end of file
+logging.level.org.springframework.ws=TRACE
+
+spring.mail.host=smtp.grupposistematica.it
+spring.mail.username=support-erp
+spring.mail.password=
+#spring.mail.properties.mail.smtp.auth = true
+#spring.mail.properties.mail.smtp.socketFactory.port = 465
+#spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
+#spring.mail.properties.mail.smtp.socketFactory.fallback = false
\ No newline at end of file
diff --git a/dg1cloud-core/src/main/resources/templates/startURP.html b/dg1cloud-core/src/main/resources/templates/startURP.html
index efd21ef..3a33e52 100644
--- a/dg1cloud-core/src/main/resources/templates/startURP.html
+++ b/dg1cloud-core/src/main/resources/templates/startURP.html
@@ -25,37 +25,45 @@
method="post" role="form"
enctype="multipart/form-data" >
<div th:if="${message}" th:text="${message}" th:class="${'alert ' + alertClass}"></div>
- <div class="form-group">
- <label for="mittente" class="control-label">Mittente*</label>
- <input type="email" class="form-control" th:field="*{mittente}" required placeholder="Email mittente" />
- <p th:if="${#fields.hasErrors('mittente')}">Email mittente mancante</p>
+ <div th:th:if="${appIdentifier}">
+ <div th:text="${'Protocollo ' + appIdentifier + ' del ' + appIdentifierDate}" th:class="${'alert alert-info'}"></div>
+ <div>
+ <p><a th:href="@{/startURP}" class="btn btn-link"><span th:text="${'Effettua una nuova richiesta'}"></span></a></p>
+ </div>
</div>
- <div class="form-group">
- <label for="oggetto" class="control-label">Oggetto*</label>
- <input type="text" class="form-control" th:field="*{oggetto}" required />
- <p th:if="${#fields.hasErrors('oggetto')}">Compilare l'oggetto della richiesta</p>
- </div>
- <div class="form-group">
- <label for="oggetto" class="control-label">Richiesta*</label>
- <textarea rows="5" class="form-control" th:field="*{corpo}" required ></textarea>
- <p th:if="${#fields.hasErrors('corpo')}">Scrivere il corpo della richiesta</p>
- </div>
- <div class="form-group">
- <label for="allegato" class="control-label">Allegato richiesta*</label>
- <input type="file" class="form-control" th:field="*{allegato}" required ></input>
- <p th:if="${#fields.hasErrors('allegato')}">Inserire un allegato</p>
- <p class="error-message"
- th:each="error: ${#fields.errors('allegato')}"
- th:text="${error}"></p>
- </div>
- <div class="form-group">
- <div class="g-recaptcha" th:attr="data-sitekey=${@captchaSettings.getKey()}"></div>
- <p class="error-message"
- th:each="error: ${#fields.errors('reCaptchaResponse')}"
- th:text="'Errore validazione reCaptcha'"></p>
- </div>
- <div class="form-group">
- <button name="Invia richiesta" type="submit" th:text="'Invia richiesta'"></button>
+ <div th:unless="${appIdentifier}">
+ <div class="form-group">
+ <label for="mittente" class="control-label">Mittente*</label>
+ <input type="email" class="form-control" th:field="*{mittente}" required placeholder="Email mittente" />
+ <p th:if="${#fields.hasErrors('mittente')}">Email mittente mancante</p>
+ </div>
+ <div class="form-group">
+ <label for="oggetto" class="control-label">Oggetto*</label>
+ <input type="text" class="form-control" th:field="*{oggetto}" required />
+ <p th:if="${#fields.hasErrors('oggetto')}">Compilare l'oggetto della richiesta</p>
+ </div>
+ <div class="form-group">
+ <label for="oggetto" class="control-label">Richiesta*</label>
+ <textarea rows="5" class="form-control" th:field="*{corpo}" required ></textarea>
+ <p th:if="${#fields.hasErrors('corpo')}">Scrivere il corpo della richiesta</p>
+ </div>
+ <div class="form-group">
+ <label for="allegato" class="control-label">Allegato richiesta*</label>
+ <input type="file" class="form-control" th:field="*{allegato}" required ></input>
+ <p th:if="${#fields.hasErrors('allegato')}">Inserire un allegato</p>
+ <p class="error-message"
+ th:each="error: ${#fields.errors('allegato')}"
+ th:text="${error}"></p>
+ </div>
+ <div class="form-group">
+ <div class="g-recaptcha" th:attr="data-sitekey=${@captchaSettings.getKey()}"></div>
+ <p class="error-message"
+ th:each="error: ${#fields.errors('reCaptchaResponse')}"
+ th:text="'Errore validazione reCaptcha'"></p>
+ </div>
+ <div class="form-group">
+ <button name="Invia richiesta" type="submit" th:text="'Invia richiesta'"></button>
+ </div>
</div>
</form>
</div>
--
Gitblit v1.6.2