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