Nav Bar do usuário deslogado.

Organização

Unidade EMBRAPII Fibras Florestais

Unidade EMBRAPII Fibras Florestais
Grupo de Pesquisa/Universidade
Departamento de Engenharia Florestal - Universidade Federal de Viçosa
Viçosa
Minas Gerais
Brasil
  • Sobre
  • Infraestruturas
  • Demandas
  • Ofertas
  • Publicações
Sobre drop zone
Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> organization.getExpandoBridge().getAttribute("journal-article")  [in template "34764#34807#null" at line 23, column 21]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: articleId = organization.getExpandoBr...  [in template "34764#34807#null" at line 23, column 9]
----
1<#assign  
2	OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService")  
3	JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
4/> 
5 
6<#assign  
7	viewerHasPrivileges = false 
8	userId = themeDisplay.getUserId() 
9/> 
10 
11<#if userId?? > 
12	<#assign  
13		orgId = _CUSTOM_FIELD_organization.getData()?number 
14		viewerHasPrivileges = OrganizationLocalService.hasUserOrganization(userId, orgId) 
15		organization = OrganizationLocalService.getOrganization(orgId) 
16	/> 
17</#if> 
18 
19 
20<#if viewerHasPrivileges || DDMStructure_Field04200031.getData() != "0"> 
21<#assign  
22	organization = OrganizationLocalService.getOrganization(_CUSTOM_FIELD_organization.getData()?number) 
23	articleId = organization.getExpandoBridge().getAttribute("journal-article") 
24	journalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),articleId?c)  
25	articleXml = journalArticle.getDocument().getRootElement() 
26	 
27	setores = articleXml.selectNodes("dynamic-element[@name='Text67772680']") 
28/> 
29<#else> 
30<#assign setores = ["privado"] /> 
31</#if> 
32 
33<#assign  
34 
35	sobre = (viewerHasPrivileges || DDMStructure_Field80037203.getData()!="0")?string(DDMStructure_Text54730891.getData()!"","") 
36	competencias = (viewerHasPrivileges || DDMStructure_Field75645729.getData()!="0")?string(DDMStructure_Text51537691.getData()!"","") 
37	 
38
39 
40<div> 
41 
42				<#if viewerHasPrivileges || DDMStructure_Field80037203.getData()!="0" > 
43					<div class="bioec_org_sobre"> 
44							<label>Sobre a organização</label> 
45							<div class="bioec_org_sobre_container"> 
46								<#if sobre != ""> 
47									${sobre} 
48								<#else> 
49									<div class="bioec_org_sobre_vazio"> 
50											Nenhuma descrição foi adicionada neste perfil ainda 
51									</div> 
52								</#if> 
53							</div> 
54					</div> 
55				</#if> 
56				 
57				<#if viewerHasPrivileges || DDMStructure_Field75645729.getData()!="0" > 
58					<div class="bioec_org_sobre"> 
59							<label>Competências tecnológicas</label> 
60							<div class="bioec_org_sobre_container"> 
61									<#if competencias != ""> 
62										${competencias} 
63									<#else> 
64										<div class="bioec_org_sobre_vazio"> 
65												Nenhuma descrição foi adicionada neste perfil ainda 
66										</div> 
67									</#if> 
68							</div> 
69					</div> 
70				</#if> 
71					 
72				<#if viewerHasPrivileges || DDMStructure_Field04200031.getData()!="0" > 
73					<div class="bioec_org_sobre"> 
74							<label>Setor(es) de atuação</label> 
75							<div class="bioec_org_sobre_container"> 
76							<#if setores[0]!="privado"> 
77									<#if setores?size == 1 && setores[0].getStringValue()?trim == "" > 
78										<div class="bioec_org_sobre_vazio"> 
79												Nenhum setor foi adicionado neste perfil ainda 
80										</div> 
81									<#else> 
82										<#if setores?size != 0 > 
83											<ul> 
84												<#list setores as setor> 
85													<li>${setor.getStringValue()}</li> 
86												</#list> 
87											</ul> 
88										<#else> 
89											<div class="bioec_org_sobre_vazio"> 
90													Nenhum setor foi adicionado neste perfil ainda 
91											</div> 
92										</#if> 
93									</#if> 
94								<#else> 
95								<div class="bioec_org_sobre_vazio"> 
96									Nenhum setor foi adicionado neste perfil ainda 
97								</div> 
98								</#if> 
99							</div> 
100					</div> 
101				</#if> 
102				 
103</div> 
104 
105<style> 
106.bioec_org_sobre label { 
107	color: #5B5C61; 
108	font-weight: 700; 
109	margin-bottom: 10px; 
110	font-size: 20px; 
111	line-height: 30px; 
112
113 
114.bioec_org_sobre_container { 
115	font-size: 16px; 
116	border: 1px solid #BEBEBE; 
117	padding: 24px; 
118	color: #5B5C61; 
119	margin-bottom: 40px; 
120
121 
122.bioec_org_sobre_vazio { 
123	color: #5B5C61; 
124	font-size: 16px; 
125	text-align: center; 
126	font-weight: 700; 
127
128 
129.bioec_org_sobre_container ul { 
130	color: #5B5C61; 
131	margin: 0; 
132
133</style> 
Silas Tadin Sardinha Administrador
Infraestruturas drop zone
Um erro ocorreu enquanto processava o modelo.
Java method "com.sun.proxy.$Proxy1005.getLatestArticle(long)" threw an exception when invoked on com.sun.proxy.$Proxy1005 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@751db4f3"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticle = JournalArtic...  [in template "34764#34807#41130" at line 33, column 41]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
2<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
3<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
4<#assign OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") > 
5<#assign AssetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")> 
6<#-- <#assign  
7journalArticle = JournalArticleLocalService.getArticle(themeDisplay.getSiteGroupId(),.data_model["reserved-article-id"].data) 
8AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") 
9assetEntry = AssetEntryLocalService.getEntry(journalArticle.getModelClassName(), journalArticle.getResourcePrimKey()) 
10--> 
11<#assign  
12mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService") 
13
14 
15<div id="upload-notice-container" style="display: none;"> 
16						<span id="close-btn-upload-container"> <i class="fa fa-xmark"></i> </span> 
17						<h5 class="upload-notice-title"> 
18							<i class="fa-sharp fa-solid fa-circle-exclamation"></i> 
19							Upload de infraestrutura em andamento 
20						</h5> 
21						<p> 
22							Caso os itens adicionados não estejam visíveis na página, aguarde um instante e <span>atualize a página</span> para visualizá-los. 
23						</p> 
24					</div> 
25				 
26<div class="bioec-profile-estrutura-main"> 
27		 
28    <div id="estruturas-lista" class="d-flex flex-column"> 
29				 
30				<#if entries?has_content> 
31					<#list entries as entry> 
32					 
33					<#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) > 
34					<#assign articleXml = journalArticle.getDocument().getRootElement() > 
35					<#assign JournalArticleID = journalArticle.getId()> 
36					<#assign JournalArticleFrontId = journalArticle.getArticleId()> 
37					<#assign  
38						userIsAdmin = false 
39						orgId = "" 
40
41						<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text57816561']")??> 
42								<#assign  
43						modelo = articleXml.selectSingleNode("dynamic-element[@field-reference='Text57816561']").getStringValue()!"" 
44						modelo = modelo?replace("\n\t\t", "") 
45						modelo = modelo?replace("\n\t", "")		 
46
47						</#if> 
48							 
49						<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text23707291']")??> 
50							<#assign  
51						marca = articleXml.selectSingleNode("dynamic-element[@field-reference='Text23707291']").getStringValue()!"" 
52						marca = marca?replace("\n\t\t", "") 
53						marca = marca?replace("\n\t", "")		 
54
55						</#if> 
56							 
57						<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text74754192']")??> 
58						    <#assign  
59						funcao = articleXml.selectSingleNode("dynamic-element[@field-reference='Text74754192']").getStringValue()!"" 
60						funcao = funcao?replace("\n\t\t", "") 
61						funcao = funcao?replace("\n\t", "")		 
62
63						</#if> 
64							 
65							<#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto02890219']")??> 
66								<#assign  
67						imageSrc = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto02890219']").getStringValue()!"" 
68												  
69
70						</#if> 
71							 
72							<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text93109394']")??> 
73								<#assign  
74						autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='Text93109394']").getStringValue()!"" 
75						autorId = autorId?replace("\n\t\t", "") 
76						autorId = autorId?replace("\n\t", "")		 
77						autorArticleId = "" 
78
79						</#if> 
80								<#assign  
81						commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0" 
82					/> 
83					 
84					<#if autorId != "" && autorId??> 
85						<#assign 
86							autor = UserLocalService.fetchUser(autorId?number)!"" 
87							autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0" 
88						/> 
89						<#if autor != ""> 
90							<#assign autor = autor.getFullName()!""> 
91						<#else> 
92							<#assign autor = "Anônimo" > 
93						</#if> 
94					<#else>  
95						<#assign autor = "Anônimo" > 
96					</#if> 
97					 
98					<#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" > 
99					 
100					<#assign 	categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" > 
101 
102					<#assign urlWC = ""> 
103					<#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo"> 
104					<#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) > 
105					<#assign urlWC = autorArticle.getUrlTitle()!""> 
106					</#if> 
107					 
108									 
109					<#assign tags = AssetTagLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )  
110				 tagName = tags[0]!"" 
111				  
112
113				<#if tagName?contains("organization") && tagName != "" > 
114 
115					<#assign 
116					orgId = tagName?keep_after("organization-")				 
117					organization =  OrganizationLocalService.fetchOrganization(orgId?number)!"" 
118
119			 
120					 
121					<#if organization != "" && autor != "Anônimo" && autorArticleId != ""> 
122						<#assign	orgArticleId = organization.getExpandoBridge().getAttribute("journal-article") 
123							orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)  
124							urlWC = orgJournalArticle.getUrlTitle()!"" 
125							autor = organization.getName()!"" 
126
127					</#if> 
128				</#if> 
129					 
130					<#if themeDisplay.isSignedIn() > 
131						<#assign tags = AssetTagLocalService.getTagNames(entry.getClassName(), entry.getClassPK()) > 
132						<#assign orgId = (tags[0]!"")?remove_beginning("organization-") > 
133						<#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)> 
134					</#if> 
135					 
136					<div class="estruturas-lista-item" id="InfraItem${JournalArticleID}"> 
137							<div class="lista-checkmark"> 
138								<#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if> 
139								<#if categorias?seq_contains("pendente") >	<i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if> 
140								<#if categorias?seq_contains("recusado") >	<i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if> 
141							</div> 
142 
143							<div class="lista-pic"> 
144									<#if imageSrc?trim !="" > 
145										<div class="bioec_infra_img" style="background-image: url(${imageSrc})"> 
146										</div> 
147									<#else> 
148										<div class="bioec_infra_img_placeholder"> 
149											<i class="fa-solid fa-image"></i> 
150											sem imagem 
151										</div> 
152									</#if> 
153							</div> 
154 
155							<div class="lista-desc"> 
156									<h5>${entry.getHighlightedTitle()}</h5> 
157									<p>Modelo: ${modelo}</p> 
158									<p>Marca: ${marca}</p> 
159							</div> 
160 
161							<div class="lista-arrow"> 
162									<button class="btn" type="button" data-toggle="collapse" data-target="#collapse-${entry.getClassPK()}" aria-expanded="false" aria-controls="collapse-${entry.getClassPK()}"> 
163											<i class="fa-solid fa-chevron-down"></i> 
164									</button> 
165							</div> 
166 
167							<span id="collapse-${entry.getClassPK()}" class="collapse lista-collapse"> 
168									<div class="lista-func"> 
169											<h5>Função </h5> 
170											<p>${funcao}</p> 
171									</div> 
172									 
173							<#if categorias?seq_contains("recusado") > 
174							<div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;"> 
175							<p>Conteudo Em Análise Pelo Cetiqt:</p> 
176							<p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p> 
177							</div> 
178							</#if > 
179							 
180									<div class="lista-footnote"> 
181											<div> 
182													<span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} comentários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span> 
183											</div> 
184											<#if userIsAdmin> 
185											<div class="buttonsActions"> 
186												<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalInfra${JournalArticleID}"> 
187													<i class="fa-solid fa-edit"></i> 
188												</div> 
189												<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-infra-${entry.getClassPK()}"> 
190													<i class="fa-solid fa-trash-can"></i> 
191												</div> 
192												 
193											</div> 
194											</#if> 
195									</div> 
196							</span> 
197					</div> 
198					 
199					<#if userIsAdmin> 
200					<div style="display: none;" id="modal-infra-${entry.getClassPK()}" class="modal fade" role="dialog"> 
201						<div class="modal-dialog modal-lg" role="document"> 
202							<div class="modal-content"> 
203								<div class="modal-header" > 
204									<h4 class="m-0">Remover Infraestrutura</h4> 
205									<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
206										<span aria-hidden="true"> 
207											<i class="fa-solid fa-close"></i> 
208										</span> 
209									</button>    
210								</div> 
211								<div class="modal-body"> 
212									<h5>Você tem certeza que deseja remover essa infraestrutura?</h5> 
213									<div> 
214										Ao clicar em continuar, a infraestrutura será removida do seu perfil. 
215									</div> 
216								</div> 
217								<div class="modal-footer justify-content-end"> 
218										<button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button> 
219										<button class="bioec_primary_button" type="button" onclick="excluirInfra(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>  
220								</div> 
221							</div> 
222						</div>			 
223					</div> 
224					</#if> 
225					 
226					<#-- modal edição --> 
227 
228<#if userIsAdmin> 
229<div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog"> 
230	<div  class="modal-dialog modal-lg" role="document"> 
231 
232		<form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}"> 
233			<div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" > 
234				<h5>Adicionar Infraestrutura</h5> 
235				<button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close"> 
236					<span aria-hidden="true">&times;</span> 
237				</button>    
238			</div> 
239			<div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2"> 
240				<div id="infraName${JournalArticleID}" class="infraName"> 
241					<label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label> 
242					<input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required> 
243				</div> 
244			<div id="infraModel${JournalArticleID}" class="infraModel"> 
245				<label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label> 
246				<input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required> 
247			</div> 
248			<div id="infraBrand${JournalArticleID}" class="infraBrand"> 
249				<label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label> 
250				<input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required> 
251			</div> 
252			 
253			<div id="infraImg${JournalArticleID}" class="infraImg"> 
254				<div style="display: flex; flex-direction: column; gap: 8px"> 
255					<label>Imagem da infraestrutura (Máx. 10 MB)</label> 
256					<label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;"> 
257						CARREGAR IMAGEM 
258					</label> 
259					<input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)"> 
260					<input class="d-none" id="inputInfraBase64${JournalArticleID}" value="${imageSrc}" /> 
261					<div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block" style="background-image: url(${imageSrc})"></div> 
262					<button type="button" id="removerImagemInfra${JournalArticleID}" class="<#if imageSrc == "" || imageSrc?? == false> d-none </#if> removerImagemInfra" > 
263						<i class="fa fa-trash"></i> Remover imagem	 
264					</button> 
265				</div> 
266				<div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none" style="background-image: url(${imageSrc})"></div> 
267			</div> 
268			 
269			<div id="infraFunction${JournalArticleID}" class="infraFunction"> 
270				<label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label> 
271				<input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required> 
272			</div> 
273		</div> 
274		<div class="TextImportant"> 
275			<p> 
276			Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal. 
277			</p> 
278		</div> 
279		<div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3"> 
280					<button class="bioec_secondary_button" onclick="">SALVAR E FECHAR</button> 
281		</div> 
282	</form> 
283	 
284	</div>			 
285</div> 
286</#if>					 
287					 
288 
289 
290 
291<script> 
292const SHOW_NOTICE_CONTAINER_BIOECONOMIA = "SHOW_NOTICE_CONTAINER_BIOECONOMIA"; 
293	 
294 
295 
296function closeNoticeContainer() { 
297  document.getElementById("upload-notice-container").style.display = "none"; 
298 
299  window.localStorage.removeItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA); 
300
301 
302document 
303  .getElementById("close-btn-upload-container") 
304  .addEventListener("click", closeNoticeContainer); 
305 
306document.addEventListener("DOMContentLoaded", function(event) {  
307	console.log('chegou aqui', window.localStorage.getItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA)); 
308  var showNoticeContainer = window.localStorage.getItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA); 
309  if (showNoticeContainer == "true") { 
310    document.getElementById("upload-notice-container").style.display = "block"; 
311    window.localStorage.removeItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA); 
312
313}); 
314 
315 
316 
317<#if userIsAdmin> 
318 
319document.querySelector('#formularioInfraestrutura${JournalArticleID}').addEventListener('submit', event => { 
320	event.preventDefault(); 
321	if (boolAddInfraestrutura == 0){ 
322		event.preventDefault(); 
323
324	editarSubmissao${JournalArticleID}(); 
325}); 
326 
327function editarSubmissao${JournalArticleID}(){ 
328 
329 
330		Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
331		const infraData = { 
332			nome: document.getElementById("inputInfraName${JournalArticleID}").value, 
333			marca: document.getElementById("inputInfraBrand${JournalArticleID}").value, 
334			funcao: document.getElementById("inputInfraFunction${JournalArticleID}").value, 
335			modelo: document.getElementById("inputInfraModel${JournalArticleID}").value, 
336			autor: Liferay.ThemeDisplay.getUserName(), 
337			imagem: document.getElementById("inputInfraBase64${JournalArticleID}").value, 
338
339		console.log(JSON.stringify(infraData)); 
340 
341		fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/infraestrutura/equipamento/${JournalArticleFrontId}", { 
342			method: 'PUT', 
343			"headers": { 
344				"x-csrf-token": Liferay.authToken, 
345				"Content-Type": "application/json" 
346			}, 
347			body: JSON.stringify(infraData) 
348		}) 
349		.then(res => { 
350			if(res.status == 200) { 
351			 
352				Liferay.Util.openToast({ 
353            message: "Infraestrutura editada com sucesso. Após a submissão, será iniciado um novo processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá novamente no portal.", 
354            type: "success", 
355            title: "", 
356            toastProps: { 
357                autoClose: 5000 
358
359        }) 
360			 
361setTimeout(function(){ location.reload(); }, 2000); 
362				 
363			} else { 
364				Liferay.Util.openToast({ 
365            message: "Erro ao editar infraestrutura", 
366            type: "danger", 
367            title: "", 
368            toastProps: { 
369                autoClose: 5000 
370
371        }) 
372
373		}); 
374
375</#if> 
376 
377function excluirInfra(wcId, orgId) { 
378		Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
379		fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/infraestrutura/equipamento/" + wcId , { 
380			method: 'DELETE', 
381			"headers": { 
382				"x-csrf-token": Liferay.authToken, 
383				"Content-Type": "application/json" 
384
385		}) 
386		.then(res => { 
387			if(res.status == 200) { 
388				Liferay.Util.openToast({ 
389            message: "Infraestrutura excluida com sucesso", 
390            type: "success", 
391            title: "", 
392            toastProps: { 
393                autoClose: 5000 
394
395        }) 
396				setTimeout(function(){ location.reload(); }, 2000) 
397			} else { 
398				Liferay.Util.openToast({ 
399            message: "Erro ao excluir infraestrutura", 
400            type: "danger", 
401            title: "", 
402            toastProps: { 
403                autoClose: 5000 
404
405        }) 
406
407		}); 
408
409	 
410 
411	function encodeInfraImageAsURL${JournalArticleID}(element) { 
412  	let file = element.files[0]; 
413    let reader = new FileReader(); 
414    reader.onloadend = () => { 
415			if(reader.result)   { 
416				if(!validImageSize(reader.result)) return; 
417				try { 
418					Array.from(document.getElementsByClassName("imagemCarregadaInfra${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' ) 
419					const base64_input = document.getElementById("inputInfraBase64${JournalArticleID}") 
420					base64_input.value = reader.result 
421					 
422					 
423					const removeImageButton = document.getElementById("removerImagemInfra${JournalArticleID}") 
424					removeImageButton.classList.remove("d-none") 
425				} catch (error) { 
426					console.error(error) 
427
428
429
430		reader.readAsDataURL(file); 
431
432	 
433	function removeImageInfra${JournalArticleID}() { 
434	try { 
435		const file_input = document.getElementById("inputCarregarImagemInfra${JournalArticleID}") 
436Array.from(document.getElementsByClassName("imagemCarregadaInfra${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" ) 
437		const base64_input = document.getElementById("inputInfraBase64${JournalArticleID}") 
438		file_input.value = null 
439		base64_input.value = "" 
440		console.log("foi") 
441		const removeImageButton = document.getElementById("removerImagemInfra${JournalArticleID}") 
442		removeImageButton.classList.add("d-none") 
443	} catch (error) { 
444		console.error(error) 
445
446
447 
448 
449document.getElementById("removerImagemInfra${JournalArticleID}").addEventListener("click", removeImageInfra${JournalArticleID}); 
450	 
451</script> 
452<style> 
453 
454#upload-notice-container { 
455  background: var(--cinza-claro, #e8ecef); 
456  padding: 24px 24px 16px; 
457  width: 100%; 
458  position: relative; 
459  margin-bottom: 40px; 
460
461 
462#upload-notice-container #close-btn-upload-container { 
463  position: absolute; 
464  top: 0px; 
465  right: 2px; 
466  height: 24px; 
467  margin: 8px; 
468  cursor: pointer; 
469
470 
471#upload-notice-container #close-btn-upload-container i { 
472  font-size: 22px; 
473  color: #5B5C61; 
474
475 
476#upload-notice-container .upload-notice-title { 
477  font-size: 20px; 
478  /* font-family: Roboto; */ 
479  font-weight: 700; 
480  line-height: 150%; 
481  color: var(--texto, #5b5c61); 
482  display: flex; 
483  align-items: center; 
484  margin-bottom: 12px; 
485
486 
487#upload-notice-container .upload-notice-title i { 
488  color: #ffc806; 
489  margin-right: 12px; 
490  font-size: 24px; 
491
492 
493#upload-notice-container p { 
494  color: var(--texto, #5b5c61); 
495  font-size: 16px; 
496  /* font-family: Roboto; */ 
497  line-height: 150%; 
498  margin-bottom: 8px; 
499
500 
501#upload-notice-container p > span { 
502  font-weight: 700; 
503
504 
505 
506.imagemCarregadaInfra${JournalArticleID} { 
507	background-size: contain; 
508	background-position: center; 
509	background-repeat: no-repeat; 
510	height: 100px; 
511	width: 100px; 
512
513 
514#removerImagemInfra${JournalArticleID} { 
515	background: none; 
516	border: none; 
517	outline: none; 
518	color: #5B5C61; 
519	font-size: 16px; 
520	font-weight: 900; 
521	line-height: 24px; 
522	letter-spacing: 0em; 
523	width: fit-content; 
524	margin-left: 16px; 
525
526</style> 
527				</#list> 
528			</#if> 
529    </div> 
530</div> 
531 
532 
533<style> 
534 
535.bioec_infra_img { 
536    width: 140px; 
537    height: 140px; 
538    overflow: hidden; 
539		background-size: contain; 
540    background-position: center; 
541    background-repeat: no-repeat; 
542
543 
544.bioec_infra_img_placeholder { 
545    width: 140px; 
546    height: 140px; 
547    background-color: #E8ECEF; 
548    display: flex; 
549    flex-direction: column; 
550    align-items: center; 
551    justify-content: center; 
552    font-size: 14px; 
553    color: #5B5C61; 
554
555 
556.bioec_infra_img_placeholder i { 
557    font-size: 44px; 
558
559 
560 
561.bioec-profile-estrutura-main{ 
562	display: flex; 
563	gap: 40px; 
564	flex-direction: column; 
565	padding-bottom: 20px; 
566
567 
568.bioec-profile-estrutura-main h5, .bioec-profile-estrutura-main p, .bioec-profile-estrutura-main a{ 
569	color: #5B5C61; 
570
571 
572.bioec-profile-estrutura-main h5{ 
573	font-weight: 700; 
574
575.bioec-profile-estrutura-main h5, .bioec-profile-estrutura-main p{ 
576	 
577	font-size: 16px; 
578 
579
580 
581.bioec-profile-estrutura-main #estruturas-lista .estruturas-lista-item { 
582	border: 1px #BEBEBE solid;  
583	padding: 24px; 
584	display: grid; 
585	grid-template-columns: 24px 12px 138px 46px 1fr 12px 15px; 
586	grid-template-areas: "ck . pic . desc . arrw" 
587		". . clps clps clps clps clps"; 
588	margin-bottom: 40px; 
589
590 
591.bioec-profile-estrutura-main .lista-checkmark { grid-area: ck; } 
592.bioec-profile-estrutura-main .lista-pic { grid-area: pic; display: flex; justify-content: center;} 
593.bioec-profile-estrutura-main .lista-arrow { grid-area: arrw; } 
594.bioec-profile-estrutura-main .lista-collapse { grid-area: clps; } 
595 
596.bioec-profile-estrutura-main .lista-desc {  
597	grid-area: desc;  
598	display: flex;  
599	flex-direction: column; 
600	justify-content: center; 
601	 
602
603 
604.bioec-profile-estrutura-main .lista-desc h5{ 
605	margin-bottom: 12px; 
606}  
607 
608.bioec-profile-estrutura-main .lista-desc p{  
609	margin: 0; 
610
611 
612.bioec-profile-estrutura-main .lista-func {  
613	 
614	margin: 24px 0; 
615
616 
617.bioec-profile-estrutura-main .lista-footnote {  
618 
619	display: flex; 
620	justify-content: space-between; 
621	border-top: 1px solid #E8ECEF; 
622	padding-top: 12px; 
623	font-size: 14px; 
624	font-weight: 300; 
625	gap: 15px; 
626	color: #5B5C61; 
627 
628
629 
630.pagination-items-per-page.active > a,  
631.pagination-items-per-page.active > button,  
632.pagination-items-per-page.show > a,  
633.pagination-items-per-page.show > button, 
634.page-item.active .page-link,  
635.page-item.show .page-link{ 
636    border-color: #4ECD66; 
637    background-color: #4ECD66; 
638
639 
640.pagination-results, 
641.pagination-items-per-page > a,  
642.pagination-items-per-page > button, 
643.pagination-items-per-page > a:hover,  
644.pagination-items-per-page > button:hover, 
645.page-link{ 
646	color: #4ebe66; 
647
648 
649.estruturas-port{ 
650	border: 1px #BEBEBE solid;  
651	padding: 24px; 
652	display: flex; 
653	flex-direction: column; 
654	align-items: center; 
655	gap: 24px; 
656
657 
658.estruturas-port p{ 
659		text-align: center;	 
660    max-width: 760px; 
661    font-size: 18px; 
662    color: #5B5C61; 
663
664 
665.estruturas-port div{ 
666display: flex; 
667	justify-content: space-between; 
668	width: min(558px, 100%); 
669
670 
671.lista-arrow button{ 
672	padding: 0; 
673
674 
675.lista-arrow button:focus{ 
676	box-shadow: none; 
677
678 
679@media(max-width: 1100px){ 
680	.estruturas-port div{ 
681	flex-direction: column; 
682		gap: 30px; 
683
684 
685
686 
687@media(max-width: 450px){ 
688	.bioec-profile-estrutura-main .lista-footnote{ 
689		flex-direction: column; 
690		gap: 10px; 
691		align-items: flex-end; 
692		text-align: right; 
693
694
695 
696.bioec-profile-estrutura-main .lista-footnote .buttonsActions { 
697  display: flex; 
698  gap: 17px; 
699
700 
701@media(max-width:  768px){ 
702	.bioec-profile-estrutura-main #estruturas-lista .estruturas-lista-item{ 
703		grid-template-columns: 24px 1fr 10px 1fr 15px; 
704		grid-template-areas: "ck desc desc desc arrw" 
705													". pic pic pic ." 
706													"clps clps clps clps clps"; 
707 
708
709 
710	.bioec-profile-estrutura-main .lista-desc{ 
711	align-items: center; 
712
713 
714	.lista-pic{ 
715	display: flex; 
716	justify-content: center; 
717
718	 
719	.bioec-profile-estrutura-main .lista-footnote{ 
720		flex-direction: column; 
721    align-items: center; 
722
723	 
724	.bioec-profile-estrutura-main .lista-footnote > div { 
725    text-align: center; 
726
727   
728  .bioec-profile-estrutura-main .lista-footnote .barra-pipe { 
729    display: none; 
730
731  .bioec-profile-estrutura-main .lista-footnote .lista-author { 
732    display: flex; 
733    gap: 4px; 
734    justify-content: center; 
735
736  .bioec-profile-estrutura-main .lista-footnote .buttonsActions { 
737    width: 100%; 
738    justify-content: space-between; 
739
740
741</style> 
Demandas drop zone
Um erro ocorreu enquanto processava o modelo.
Java method "com.sun.proxy.$Proxy1005.getLatestArticle(long)" threw an exception when invoked on com.sun.proxy.$Proxy1005 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@751db4f3"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticle = JournalArtic...  [in template "34764#34807#41127" at line 15, column 41]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
2<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
3<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
4<#assign  
5mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService") 
6	tagsLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") 
7	 OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") 
8
9 
10 
11<div class="bioec-profile-demanda-main"> 
12	<div id="demanda-lista-container" class="d-flex flex-column"> 
13			<#if entries?has_content> 
14				<#list entries as entry> 
15					<#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) > 
16					<#assign JournalArticleID = journalArticle.getId()> 
17					<#assign JournalArticleFrontId = journalArticle.getArticleId()> 
18					<#assign articleXml = journalArticle.getDocument().getRootElement()  
19									 userIsAdmin = false 
20									 orgId = "" 
21
22					 
23					<#assign nomeParaContato = ""> 
24					 
25					<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']")??> 
26					 
27					<#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']").getStringValue()!"" 
28								 nomeParaContato = nomeParaContato?replace("\n\t\t", "") 
29								 nomeParaContato = nomeParaContato?replace("\n\t", "")					 
30
31					 
32					</#if> 
33					<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']")??> 
34					<#assign telefone = articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']").getStringValue()!"" 
35								 telefone = telefone?replace("\n\t\t", "") 
36								 telefone = telefone?replace("\n\t", "")						 
37
38					</#if> 
39						 
40						<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']")??> 
41				<#assign email = articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']").getStringValue()!"" 
42								 email = email?replace("\n\t\t", "") 
43								 email = email?replace("\n\t", "")					 
44				>  
45					</#if> 
46							 
47				<#if articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']")??> 
48					<#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']").getStringValue()!"" 
49								 desc = desc?replace("\n\t\t", "") 
50								 desc = desc?replace("\n\t", "")		 
51
52						</#if> 
53					<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']")??> 
54				<#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']").getStringValue()!""				 
55							imagem = imagem?replace("(\r\n)+", "",'r') 
56							imagem = imagem?replace(" ", "",'r') 
57
58						</#if> 
59						<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']")??> 
60					<#assign 
61						autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']").getStringValue()!"" 
62						autorId = autorId?replace("\n\t\t", "") 
63						autorId = autorId?replace("\n\t", "")		 
64						autorArticleId = "" 
65
66						</#if> 
67						<#assign 
68						commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0" 
69
70				 
71					<#if autorId != "" && autorId??> 
72					<#assign 
73						autor = UserLocalService.fetchUser(autorId?number)!"" 
74						autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"  
75				/> 
76				<#if autor != ""> 
77				<#assign autor = autor.getFullName()!""> 
78				<#else> 
79				<#assign autor = "Anônimo" > 
80				</#if> 
81				<#else>  
82				<#assign autor = "Anônimo" > 
83		</#if>		 
84				<#assign 	categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" > 
85				<#assign urlWC = ""> 
86				<#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo"> 
87					<#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) > 
88					<#assign urlWC = autorArticle.getUrlTitle()!""> 
89				</#if> 
90								 
91				<#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )  
92								 tagName = tags[0]!"" 
93								 orgOrUser = "" 
94
95				  
96				 <#if tagName?contains("organization") && tagName != "" > 
97					 <#assign orgOrUser = "org"> 
98					<#else> 
99					 <#assign orgOrUser = "user"> 
100				 </#if> 
101				  
102				<#if orgOrUser == "org" > 
103 
104					<#assign 
105					orgId = tagName?keep_after("organization-")				 
106					organization =  OrganizationLocalService.fetchOrganization(orgId?number)!"" 
107
108			 
109					 
110					<#if organization != "" && autor != "Anônimo"> 
111					 
112						<#assign	orgArticleId = organization.getExpandoBridge().getAttribute("journal-article") 
113							orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)  
114							urlWC = orgJournalArticle.getUrlTitle()!"" 
115							autor = organization.getName()!"" 
116
117 
118					</#if> 
119				</#if> 
120				 
121				<#if themeDisplay.isSignedIn() > 
122							<#if tagName?contains("organization-")> 
123								<#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)> 
124								<#else> 
125								<#if autorId?number == themeDisplay.getUserId()> 
126								<script>console.log("oi");</script> 
127									<#assign userIsAdmin = true> 
128								</#if> 
129							</#if> 
130							 
131						 
132					</#if> 
133							 
134					 
135 
136				<div class="demanda-lista-item"> 
137				 
138				<div class="lista-checkmark"> 
139								<#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if> 
140								<#if categorias?seq_contains("pendente") >	<i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if> 
141								<#if categorias?seq_contains("recusado") >	<i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if> 
142				</div> 
143	 
144 
145					<div class="lista-titulo"> 
146						<h5>${entry.getHighlightedTitle()}</h5> 
147					</div> 
148 
149					<div class="lista-arrow"> 
150						<button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}"> 
151							<i class="fa-solid fa-chevron-down"></i> 
152						</button> 
153					</div> 
154 
155					<div class="lista-desc"> 
156						<p>${desc}</p> 
157					</div> 
158 
159					<div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}"> 
160					<#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !=""> 
161					<div class="lista-details"> 
162								<div class="lista-pic"> 
163									<i class="fa-solid fa-image-slash"></i> 
164									<#if imagem?trim !="" > 
165											<img class="bioec_demanda_img" src="${imagem}"> 
166										<#else> 
167											<div class="bioec_demanda_img_placeholder"> 
168												<i class="fa-solid fa-image"></i> 
169													sem imagem 
170											</div> 
171									</#if> 
172								</div> 
173							<#if nomeParaContato != "" || telefone != "" || email != "" > 
174							<div class="lista-contato"> 
175								<p>Contato</p> 
176								<p class="lista-author">${nomeParaContato}</p> 
177								<p class="lista-phone">${telefone}</p> 
178								<p class="lista-email">${email}</p> 
179							</div> 
180							</#if> 
181						</div> 
182						</#if> 
183						 
184							<#if categorias?seq_contains("recusado") > 
185							<div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;"> 
186							<p>Conteúdo Em Análise Pelo Cetiqt:</p> 
187							<p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p> 
188							</div> 
189							</#if> 
190						<div class="lista-footnote"> 
191								<div> 
192									<span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} cometários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span> 
193								</div> 
194								<#if userIsAdmin> 
195									<div class="buttonsActions"> 
196									<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalDemanda${JournalArticleID}"> 
197											<i class="fa-solid fa-edit"></i> 
198										</div> 
199										<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-demanda-${entry.getClassPK()}"> 
200												<i class="fa-solid fa-trash-can"></i> 
201										</div> 
202										 
203									</div> 
204								</#if>		 
205						</div> 
206					</div> 
207				</div> 
208				 
209					<#if userIsAdmin> 
210						<div style="display: none;" id="modal-demanda-${entry.getClassPK()}" class="modal fade" role="dialog"> 
211							<div class="modal-dialog modal-lg" role="document"> 
212								<div class="modal-content"> 
213									<div class="modal-header" > 
214										<h4 class="m-0">Remover Demanda</h4> 
215										<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
216											<span aria-hidden="true"> 
217												<i class="fa-solid fa-close"></i> 
218											</span> 
219										</button>    
220									</div> 
221									<div class="modal-body"> 
222										<h5>Você tem certeza que deseja remover essa demanda?</h5> 
223										<div> 
224											Ao clicar em continuar, a demanda será removida do seu perfil. 
225										</div> 
226									</div> 
227									<div class="modal-footer justify-content-end"> 
228											<button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button> 
229											<button class="bioec_primary_button" type="button" onclick="excluirDemanda(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>  
230									</div> 
231								</div> 
232							</div>			 
233						</div> 
234						 
235						<#-- modal edição --> 
236						 
237						 
238						<div style="display: none;" id="modalDemanda${JournalArticleID}" class="modal fade bioec-profile-demanda-modal modalDemanda" role="dialog"> 
239									<div class="modal-dialog modal-lg" role="document"> 
240										<form id="formularioDemanda${JournalArticleID}" class="form-group modal-content formularioDemanda"> 
241												<div id="demandaModal-l1${JournalArticleID}" class="modal-header demandaModal-l1"> 
242													<h5>Adicionar demanda</h5> 
243														<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
244															 <span aria-hidden="true">&times;</span> 
245														</button> 
246												</div> 
247												<div id="demandaModal-l2${JournalArticleID}" class="modal-body demandaModal-l2"> 
248														<div id="demandaTitle${JournalArticleID}" class="demandaTitle"> 
249																<label class="ReqLabel" for="demandaInputTitle${JournalArticleID}">Título da demanda</label> 
250																<input id="demandaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required> 
251														</div> 
252														<div id="demandaName${JournalArticleID}" class="demandaName"> 
253																<label class="" for="demandaInputName${JournalArticleID}">Nome para contato</label> 
254																<input value="${nomeParaContato}" id="demandaInputName${JournalArticleID}" placeholder="Inserir nome" type="text"> 
255														</div> 
256														<div id="demandaTelephone${JournalArticleID}" class="demandaTelephone"> 
257																<label class="" for="demandaInputPhone${JournalArticleID}">Telefone para contato</label> 
258																<input value="${telefone}" id="demandaInputPhone${JournalArticleID}" name="demandaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14"  /> 
259														</div> 
260														<div id="demandaEmail${JournalArticleID}" class="demandaEmail"> 
261																<label class="" for="demandaInputEmail${JournalArticleID}">E-mail para contato</label> 
262																<input value="${email}" id="demandaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text"> 
263														</div> 
264														<div id="demandaDesc${JournalArticleID}" class="demandaDesc"> 
265																<label class="ReqLabel" for="demandaInputDesc${JournalArticleID}">Descrição</label> 
266																<textarea id="demandaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea> 
267														</div> 
268														<div id="demandaImg${JournalArticleID}" class="demandaImg"> 
269																<div style="display: flex; flex-direction: column; gap: 8px"> 
270																		<label>Imagem da demanda (Máx. 10 MB)</label> 
271																		<label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemDemanda${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label> 
272																		<input class="inputCarregarImagemDemanda" id="inputCarregarImagemDemanda${JournalArticleID}" type="file" accept="image/*" onchange="encodeDemandaImageAsURL${JournalArticleID}(this)"> 
273																		<input class="d-none" id="inputDemandaBase64${JournalArticleID}" value="${imagem}" /> 
274																		<div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div> 
275																		<button type="button" id="removerImagemDemanda${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if> removerImagemDemanda" > 
276																			<i class="fa fa-trash"></i> Remover imagem	 
277																		</button> 
278																	</div> 
279																	<div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div> 
280														</div> 
281												</div> 
282													<div class="TextImportant"> 
283														<p> 
284															Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal. 
285														</p> 
286													</div> 
287 
288												<div id="demandaModal-l3${JournalArticleID}" class="modal-footer demandaModal-l3"> 
289														<button  class="btn button-empty" onclick="" id="demandas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button> 
290												</div> 
291										</form> 
292									</div> 
293								</div> 
294						 
295						</#if> 
296						<#--  
297						 
298						 
299						 
300						 
301						<div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog"> 
302							<div  class="modal-dialog modal-lg" role="document"> 
303 
304								<form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}"> 
305									<div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" > 
306										<h5>Adicionar Infraestrutura</h5> 
307										<button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close"> 
308											<span aria-hidden="true">&times;</span> 
309										</button>    
310									</div> 
311									<div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2"> 
312										<div id="infraName${JournalArticleID}" class="infraName"> 
313											<label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label> 
314											<input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required> 
315										</div> 
316									<div id="infraModel${JournalArticleID}" class="infraModel"> 
317										<label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label> 
318										<input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required> 
319									</div> 
320									<div id="infraBrand${JournalArticleID}" class="infraBrand"> 
321										<label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label> 
322										<input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required> 
323									</div> 
324 
325									<div id="infraImg${JournalArticleID}" class="infraImg"> 
326										<div style="display: flex; flex-direction: column; gap: 8px"> 
327											<label>Imagem da infraestrutura (Máx. 10 MB)</label> 
328											<label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;"> 
329												CARREGAR IMAGEM 
330											</label> 
331											<input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)"> 
332											<input class="d-none" id="inputInfraBase64${JournalArticleID}" /> 
333											<div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div> 
334											<button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" > 
335												<i class="fa fa-trash"></i> Remover imagem	 
336											</button> 
337										</div> 
338										<div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div> 
339									</div> 
340 
341									<div id="infraFunction${JournalArticleID}" class="infraFunction"> 
342										<label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label> 
343										<input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required> 
344									</div> 
345								</div> 
346								<div class="TextImportant"> 
347									<p> 
348									Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal. 
349									</p> 
350								</div> 
351								<div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3"> 
352											<button class="bioec_secondary_button" id="demandas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button> 
353								</div> 
354							</form> 
355 
356							</div>			 
357						 
358						 
359						--> 
360						 
361					 
362 
363						<script> 
364						<#if userIsAdmin> 
365						function excluirDemanda(wcId, orgId) { 
366								Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
367								fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/" + wcId, { 
368									method: 'DELETE', 
369									"headers": { 
370										"x-csrf-token": Liferay.authToken, 
371										"Content-Type": "application/json" 
372
373								}) 
374								.then(res => { 
375									if(res.status == 200) { 
376										Liferay.Util.openToast({ 
377												message: "Infraestrutura excluida com sucesso", 
378												type: "success", 
379												title: "", 
380												toastProps: { 
381														autoClose: 5000 
382
383										}) 
384										setTimeout(function(){ location.reload(); }, 2000) 
385									} else { 
386										Liferay.Util.openToast({ 
387												message: "Erro ao excluir infraestrutura", 
388												type: "danger", 
389												title: "", 
390												toastProps: { 
391														autoClose: 5000 
392
393										}) 
394
395								}); 
396
397							 
398						 
399							 
400							 
401	function validImageSize(base64="") { 
402		const decoded = atob(base64.substring(base64.indexOf(',') + 1)); 
403		const sizeMB = decoded.length / 1e+6; 
404		console.log("MB: " + decoded.length / 1e+6); 
405		if(sizeMB > 10) { 
406			Liferay.Util.openToast({ 
407				message: "O tamanho da imagem não deve ultrapassar 10 MB.", 
408				type: "danger", 
409				title: "", 
410				toastProps: { 
411					autoClose: 5000 
412
413			}) 
414			return false 
415
416		return true 
417
418 
419	function encodeDemandaImageAsURL${JournalArticleID}(element) { 
420  	let file = element.files[0]; 
421    let reader = new FileReader(); 
422    reader.onloadend = () => { 
423			if(reader.result) { 
424				if(!validImageSize(reader.result)) return; 
425				try { 
426					const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}") 
427					base64_input.value = reader.result 
428					Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' ) 
429					 
430					const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}") 
431					removeImageButton.classList.remove("d-none") 
432				} catch (error) { 
433					console.error(error) 
434
435
436
437		reader.readAsDataURL(file); 
438
439	 
440	function removeImageDemanda${JournalArticleID}() { 
441	try { 
442		const file_input = document.getElementById("inputCarregarImagemDemanda${JournalArticleID}") 
443		Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" ) 
444		const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}") 
445		file_input.value = null 
446		base64_input.value = "" 
447		 
448		const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}") 
449		removeImageButton.classList.add("d-none") 
450	} catch (error) { 
451		console.error(error) 
452
453
454 
455 
456document.getElementById("removerImagemDemanda${JournalArticleID}").addEventListener("click", removeImageDemanda${JournalArticleID}); 
457 
458<#-- Rest da edição de organização --> 
459 
460<#if orgOrUser == "org"> 
461document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => { 
462	event.preventDefault(); 
463	adicionarDemanda${JournalArticleID}();  
464}); 
465 
466function adicionarDemanda${JournalArticleID}() {		 
467		Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
468		$("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true); 
469	 
470		 
471		 
472		const demandaData = { 
473			titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value, 
474			nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value, 
475			telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value, 
476			emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value, 
477			descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value, 
478			imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value, 
479
480		 
481		console.log(demandaData); 
482	 
483			fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", { 
484				method: 'PUT', 
485				"headers": { 
486					"x-csrf-token": Liferay.authToken, 
487					"Content-Type": "application/json" 
488				}, 
489				body: JSON.stringify(demandaData) 
490			}) 
491			.then(res => { 
492				if(res.status == 200) { 
493					Liferay.Util.openToast({ 
494							message: "Demanda editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.", 
495							type: "success", 
496							title: "", 
497							toastProps: { 
498									autoClose: 5000 
499
500					}) 
501					 setTimeout(function(){ location.reload(); }, 2000); 
502				} else { 
503				 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false); 
504					Liferay.Util.openToast({ 
505							message: "Erro ao editada demanda", 
506							type: "danger", 
507							title: "", 
508							toastProps: { 
509									autoClose: 5000 
510
511					}) 
512
513			}) 
514		 
515
516</#if> 
517 
518<#-- Rest da edição de pessoa fisica --> 
519							 
520							 
521				<#if orgOrUser == "user"> 
522				 
523					document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => { 
524					event.preventDefault(); 
525					adicionarDemanda${JournalArticleID}();  
526				});			 
527						 
528						function adicionarDemanda${JournalArticleID}() { 
529							Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
530							$("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true); 
531	 
532							const demandaData = { 
533								titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value, 
534								nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value, 
535								telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value, 
536								emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value, 
537								descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value, 
538								imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value, 
539
540							 
541							console.log(demandaData); 
542 
543							fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", { 
544											method: 'PUT', 
545											"headers": { 
546													"x-csrf-token": Liferay.authToken, 
547													"Content-Type": "application/json" 
548											}, 
549											body: JSON.stringify(demandaData) 
550									}) 
551									.then( res => { 
552								if(res.status == 200) { 
553									Liferay.Util.openToast({ 
554										message: "Demanda editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.", 
555										type: "success", 
556										title: "", 
557										toastProps: { 
558											autoClose: 5000 
559
560									}) 
561									 setTimeout(function(){ location.reload(); }, 2000); 
562								} else { 
563								 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false); 
564									Liferay.Util.openToast({ 
565										message: "Erro ao editar Demanda", 
566										type: "danger", 
567										title: "", 
568										toastProps: { 
569											autoClose: 5000 
570
571									}) 
572
573							}); 
574							 
575					}; 
576						 
577						 
578				</#if> 
579							 
580							 
581								</#if> 
582						</script> 
583					 
584				 
585				 
586				 
587			</#list> 
588		</#if> 
589	</div> 
590</div> 
591 
592<style> 
593.bioec_demanda_img { 
594    overflow: hidden; 
595		background-size: contain; 
596    background-position: center; 
597    background-repeat: no-repeat; 
598
599 
600.bioec_demanda_img_placeholder { 
601    width: 140px; 
602    height: 140px; 
603    background-color: #E8ECEF; 
604    display: flex; 
605    flex-direction: column; 
606    align-items: center; 
607    justify-content: center; 
608    font-size: 14px; 
609    color: #5B5C61; 
610
611 
612.bioec_demanda_img_placeholder i { 
613    font-size: 44px; 
614
615 
616 
617.pagination-items-per-page.active > a,  
618.pagination-items-per-page.active > button,  
619.pagination-items-per-page.show > a,  
620.pagination-items-per-page.show > button, 
621.page-item.active .page-link,  
622.page-item.show .page-link{ 
623    border-color: #4ECD66; 
624    background-color: #4ECD66; 
625
626 
627.pagination-results, 
628.pagination-items-per-page > a,  
629.pagination-items-per-page > button, 
630.pagination-items-per-page > a:hover,  
631.pagination-items-per-page > button:hover, 
632.page-link{ 
633	color: #4ebe66; 
634
635 
636.bioec-profile-demanda-main{ 
637	display: flex; 
638	gap: 40px; 
639	flex-direction: column; 
640	padding-bottom: 20px; 
641
642.bioec-profile-demanda-main h5{ 
643	font-weight: 700; 
644
645.bioec-profile-demanda-main h5, .bioec-profile-demanda-main p{ 
646	color: #5B5C61; 
647	margin-bottom: 0px; 
648	font-size: 16px; 
649 
650
651 
652.bioec-profile-demanda-main #demanda-lista-container>div{ 
653	border: 1px #BEBEBE solid;  
654	padding: 24px 24px 0 24px; 
655	margin-bottom: 40px; 
656	display: grid; 
657	grid-row-gap: 24px; 
658	grid-template-columns: 24px 12px 1fr 15px; 
659	grid-template-areas:  
660		"ck . tit arrw" 
661		"desc desc desc desc" 
662		"clps clps clps clps"; 
663
664 
665.bioec-profile-demanda-main .lista-checkmark { grid-area: ck; display: flex; } 
666.bioec-profile-demanda-main .lista-checkmark i { font-size: 24px; } 
667.bioec-profile-demanda-main .lista-pic { grid-area: pic; display: flex; justify-content: center;} 
668.bioec-profile-demanda-main .lista-arrow { grid-area: arrw; } 
669 
670.bioec-profile-demanda-main .lista-titulo {  
671	grid-area: tit;  
672	display: flex;  
673	flex-direction: column; 
674	justify-content: center; 
675	 
676
677 
678.bioec-profile-demanda-main .lista-titulo h5{ 
679	margin-bottom: 0px; 
680}  
681 
682.bioec-profile-demanda-main .lista-desc { 
683grid-area: desc;  
684}  
685 
686.bioec-profile-demanda-main .lista-desc p{  
687	margin: 0; 
688
689 
690.bioec-profile-demanda-main a{ 
691	color: #5B5C61; 
692
693 
694.demanda-port{ 
695	border: 1px #BEBEBE solid;  
696	padding: 24px; 
697	display: flex; 
698	flex-direction: column; 
699	align-items: center; 
700	gap: 24px; 
701
702 
703.demanda-port p{ 
704text-align: center;	 
705	 
706
707 
708.demanda-port div{ 
709display: flex; 
710	justify-content: space-between; 
711	width: min(558px, 100%); 
712
713 
714.button-empty { 
715border: solid 1px #4ECD66; 
716padding: 8px 24px; 
717color: #333244; 
718	transition: 250ms; 
719
720 
721.button-empty:hover{ 
722	background-color: #4ECD66; 
723
724 
725.button-filled { 
726background-color: #4ECD66; 
727border: solid 1px #4ECD66; 
728padding: 8px 24px; 
729color: #333244; 
730transition: 250ms; 
731	 
732
733 
734.button-filled:hover{ 
735	background-color: transparent; 
736
737 
738.bioec-profile-demanda-main .lista-footnote {  
739 
740	display: flex; 
741	justify-content: space-between; 
742	border-top: 1px solid #E8ECEF; 
743	padding-top: 12px; 
744	font-size: 14px; 
745	font-weight: 300; 
746	gap: 15px; 
747	color: #5B5C61; 
748 
749
750.lista-collapse{ 
751display: flex; 
752flex-direction: column; 
753gap: 24px; 
754grid-area: clps; 
755padding-bottom: 24px; 
756
757 
758 .lista-details{ 
759	display: flex; 
760	justify-content: flex-start; 
761	gap: 24px; 
762
763.lista-pic img { 
764	max-height: 138px; 
765	max-width: 138px; 
766
767 
768.bioec-profile-demanda-main p{ 
769 
770
771 
772.imagemCarregadaDemanda { 
773	height: 100px; 
774	width: 100px; 
775	background-size: contain; 
776	background-position: center; 
777	background-repeat: no-repeat; 
778
779 
780 
781.ButtonAddDemanda { 
782    background: #4ECD66; 
783    border-radius: 8px; 
784    padding: 8px 24px; 
785    border: none; 
786    font-weight: 700; 
787    color: #333244; 
788    font-family: 'Roboto'; 
789    float: right; 
790    text-transform: uppercase; 
791
792.ButtonAddDemanda:hover{ 
793	color: #333244; 
794	text-decoration: none; 
795
796 
797.bioec-profile-demanda-modal label { 
798    margin: 0; 
799    cursor: default; 
800    font-size: 20px; 
801    font-weight: 700; 
802    color: #5B5C61; 
803
804 
805.bioec-profile-demanda-modal div { 
806    width: 100%; 
807
808 
809#demandaModal-l1, .demandaModal-l1 { 
810    padding: 18px 24px; 
811    display: flex; 
812    justify-content: space-between; 
813
814 
815#demandaModal-l1 img, .demandaModal-l1 img { 
816    cursor: pointer; 
817
818 
819#demandaModal-l1 h5, .demandaModal-l1 h5 { 
820   	margin: 0; 
821    font-size: 20px; 
822    font-weight: 700; 
823    color: #5B5C61; 
824
825 
826#demandaModal-l2, .demandaModal-l2 { 
827		border-top: 1px solid #E8ECEF; 
828    display: grid; 
829    grid-template-columns: 1fr 1fr; 
830    grid-template-areas: 
831        "titu nome" 
832        "fone mail" 
833        "desc desc" 
834        "imagem ." 
835
836    column-gap: 24px; 
837    row-gap: 40px; 
838    padding: 24px; 
839
840 
841#demandaModal-l2>div, .demandaModal-l2>div { 
842    display: flex; 
843    flex-direction: column; 
844    gap: 8px; 
845
846 
847#demandaTitle, .demandaTitle { 
848    grid-area: titu; 
849
850 
851#demandaName, .demandaName { 
852    grid-area: nome; 
853
854 
855#demandaTelephone, .demandaTelephone { 
856    grid-area: fone; 
857
858 
859#demandaEmail, .demandaEmail { 
860    grid-area: mail; 
861
862 
863#demandaBrand, .demandaBrand { 
864    grid-area: marca; 
865
866 
867#demandaModal-l2>#demandaImg, .demandaModal-l2>.demandaImg { 
868    grid-area: imagem; 
869    display: flex; 
870    flex-direction: column; 
871
872 
873#demandaDesc, .demandaDesc { 
874    grid-area: desc; 
875 
876
877 
878#demandaDesc input, .demandaDesc input { 
879    height: 80px; 
880
881 
882.TextImportant{ 
883    border-bottom: 1px solid #E8ECEF; 
884 		padding: 24px; 
885		color: #5B5C61;		 
886
887 
888.bioec-profile-demanda-modal input[type="text"] { 
889    border-top: none; 
890    border-left: none; 
891    border-right: none; 
892    border-bottom: 1px solid #BEBEBE; 
893    width: 100%; 
894    font-size: 16px; 
895 
896
897 
898 
899.bioec-profile-demanda-modal input[type="text"]:focus-visible { 
900    outline: none; 
901    border-bottom: 1px solid black; 
902 
903
904 
905.bioec-profile-demanda-modal .ReqLabel:before { 
906    content: "* "; 
907    color: #D90000; 
908 
909
910 
911#inputCarregarImagemDemanda, .inputCarregarImagemDemanda { 
912    display: none; 
913
914 
915#carregarImagem, .carregarImagem  { 
916    padding: 8px 24px; 
917    border: 1px solid #4ECD66; 
918    width: fit-content; 
919    transition: 250ms; 
920 
921
922 
923#carregarImagem:hover, .carregarImagem:hover { 
924    background-color: #4ECD66; 
925
926 
927.button-empty { 
928    border: solid 1px #4ECD66; 
929    padding: 8px 24px; 
930    color: #333244; 
931    transition: 250ms; 
932    font-weight: bold; 
933
934 
935.button-empty:hover { 
936    background-color: #4ECD66; 
937
938 
939.button-filled { 
940    background-color: #4ECD66; 
941    border: solid 1px #4ECD66; 
942    padding: 8px 24px; 
943    color: #333244; 
944    transition: 250ms; 
945    font-weight: bold; 
946
947 
948.button-filled:hover { 
949    background-color: transparent; 
950
951 
952#demandaModal-l3, .demandaModal-l3 { 
953    gap: 24px; 
954    display: flex; 
955    justify-content: flex-end; 
956    padding: 24px; 
957
958 
959.modal { 
960    padding: initial !important; 
961    border-radius: 4px !important; 
962    
963
964 
965.modal a.close-modal { 
966    display: none; 
967
968 
969#removerImagemDemanda, .removerImagemDemanda { 
970	background: none; 
971	border: none; 
972	outline: none; 
973	color: #5B5C61; 
974	font-size: 16px; 
975	font-weight: 900; 
976	line-height: 24px; 
977	letter-spacing: 0em; 
978	width: fit-content; 
979	margin-left: 16px; 
980
981 
982 
983@media(max-width: 964px){ 
984    .lista-pic img { 
985        width: 100%; 
986        max-height: unset; 
987        max-width: unset; 
988 
989
990
991 
992@media (max-width: 550px) { 
993    #demandaModal-l2, .demandaModal-l2 { 
994        display: flex; 
995        flex-direction: column; 
996
997 
998    #demandaModal-l3, .demandaModal-l3 { 
999        display: flex; 
1000        flex-direction: column; 
1001
1002
1003 
1004@media(max-width: 450px){ 
1005	.bioec-profile-demanda-main .lista-details{ 
1006		flex-direction: column; 
1007
1008 
1009	.lista-contato{ 
1010		text-align: center; 
1011
1012 
1013	.bioec-profile-demanda-main .lista-footnote{ 
1014	flex-direction: column; 
1015		gap: 10px; 
1016		align-items: flex-end; 
1017		text-align: right; 
1018
1019
1020 
1021@media(max-width: 992px){ 
1022	#demanda-lista-container { 
1023		padding-inline: 15px; 
1024
1025
1026 
1027.bioec-profile-demanda-main .lista-footnote .buttonsActions { 
1028  display: flex; 
1029  gap: 17px; 
1030
1031 
1032@media (max-width: 768px) { 
1033  .bioec-profile-demanda-main .lista-desc { 
1034    gap: 24px; 
1035    flex-direction: column-reverse; 
1036
1037  .bioec-profile-demanda-main .lista-footnote { 
1038    flex-direction: column; 
1039    align-items: center; 
1040
1041  .bioec-profile-demanda-main .lista-footnote > div { 
1042    text-align: center; 
1043
1044   
1045  .bioec-profile-demanda-main .lista-footnote .barra-pipe { 
1046    display: none; 
1047
1048  .bioec-profile-demanda-main .lista-footnote .lista-author { 
1049    display: flex; 
1050    gap: 4px; 
1051    justify-content: center; 
1052
1053  .bioec-profile-demanda-main .lista-footnote .buttonsActions { 
1054    width: 100%; 
1055    justify-content: space-between; 
1056
1057
1058 
1059 
1060</style> 
1061 
1062 
1063<script> 
1064 
1065 
1066 
1067</script> 
Ofertas drop zone
Um erro ocorreu enquanto processava o modelo.
Java method "com.sun.proxy.$Proxy1005.getLatestArticle(long)" threw an exception when invoked on com.sun.proxy.$Proxy1005 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@751db4f3"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticle = JournalArtic...  [in template "34764#34807#41133" at line 20, column 33]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
2<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
3<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
4<#assign mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService")> 
5<#assign OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") 
6	tagsLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") 
7
8 
9 
10 
11 
12	 
13 
14 
15 
16<div class="bioec-profile-oferta-main"> 
17	<div id="oferta-lista-container" class="d-flex flex-column"> 
18		<#if entries?has_content> 
19			<#list entries as entry> 
20				<#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) > 
21				<#assign JournalArticleID = journalArticle.getId()> 
22				<#assign JournalArticleFrontId = journalArticle.getArticleId()> 
23				<#assign articleXml = journalArticle.getDocument().getRootElement()  
24				userIsAdmin = false 
25				orgId = "" 
26
27						 
28				<#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto50355704']")??> 
29					 
30				<#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto50355704']").getStringValue()!"" 
31								 nomeParaContato = nomeParaContato?replace("\n\t\t", "") 
32								 nomeParaContato = nomeParaContato?replace("\n\t", "")			 
33
34				</#if> 
35	 
36			<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text90715721']")??> 
37				<#assign telefone = articleXml.selectSingleNode("dynamic-element[@field-reference='Text90715721']")!"" 
38				telefone = telefone.getStringValue()!"" 
39								 telefone = telefone?replace("\n\t\t", "") 
40								 telefone = telefone?replace("\n\t", "")	 
41
42 
43				</#if> 
44		 
45				<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']")??> 
46				<#assign email = articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']").getStringValue()!"" 
47								 email = email?replace("\n\t\t", "") 
48								 email = email?replace("\n\t", "")					 
49
50        </#if> 
51				 
52 
53				<#if articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfText18267936']")??> 
54				<#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfText18267936']").getStringValue()!"" 
55								 desc = desc?replace("\n\t\t", "") 
56								 desc = desc?replace("\n\t", "")		 
57
58       </#if> 
59					 
60					<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text80669990']")??> 
61				<#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='Text80669990']").getStringValue()!"" 
62								imagem = imagem?replace("\n\t\t", "") 
63								 imagem = imagem?replace("\n\t", "")		 
64
65					</#if> 
66 
67						<#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto97452704']")??> 
68				<#assign autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto97452704']").getStringValue()!"" 
69						autorId = autorId?replace("\n\t\t", "") 
70						autorId = autorId?replace("\n\t", "")			 
71							autorArticleId = "" 
72
73					</#if> 
74					 
75					<#assign 
76						commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0" 
77				>	 
78				 
79				 
80			 
81						<#if autorId != "" && autorId??> 
82					<#assign 
83						autor = UserLocalService.fetchUser(autorId?number)!"" 
84						autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0" 
85				/> 
86				<#if autor != ""> 
87				<#assign autor = autor.getFullName()!""> 
88				<#else> 
89				<#assign autor = "Anônimo" > 
90				</#if> 
91				<#else>  
92				<#assign autor = "Anônimo" > 
93		</#if>		 
94		<#assign 	categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" > 
95		<#assign urlWC = ""> 
96		 
97		<#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo"> 
98		<#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) > 
99		<#assign urlWC = autorArticle.getUrlTitle()!""> 
100		</#if> 
101		 
102		 
103				<#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )  
104				 tagName = tags[0]!"" 
105				 orgOrUser = "" 
106
107				  
108				 <#if tagName?contains("organization") && tagName != "" > 
109					 <#assign orgOrUser = "org"> 
110					<#else> 
111					 <#assign orgOrUser = "user"> 
112				 </#if> 
113			 
114				<#if orgOrUser == "org" > 
115 
116					<#assign 
117					orgId = tagName?keep_after("organization-")				 
118					organization =  OrganizationLocalService.fetchOrganization(orgId?number)!"" 
119
120			 
121					 
122					<#if organization != "" && autor != "Anônimo"> 
123						<#assign	orgArticleId = organization.getExpandoBridge().getAttribute("journal-article") 
124							orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)  
125							urlWC = orgJournalArticle.getUrlTitle()!"" 
126							autor = organization.getName()!"" 
127
128 
129					</#if> 
130				</#if> 
131				 
132					<#if themeDisplay.isSignedIn() > 
133							<#if tagName?contains("organization-")> 
134								<#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)> 
135								<#else> 
136								<#if autorId?number == themeDisplay.getUserId()> 
137								<script>console.log("oi");</script> 
138									<#assign userIsAdmin = true> 
139								</#if> 
140							</#if> 
141							 
142						 
143					</#if> 
144				 
145 
146				<div class="oferta-lista-item"> 
147				<div class="lista-checkmark"> 
148								<#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if> 
149								<#if categorias?seq_contains("pendente") >	<i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if> 
150								<#if categorias?seq_contains("recusado") >	<i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if> 
151				</div> 
152	 
153 
154					<div class="lista-titulo"> 
155						<h5>${entry.getHighlightedTitle()}</h5> 
156					</div> 
157 
158					<div class="lista-arrow"> 
159						<button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}"> 
160							<i class="fa-solid fa-chevron-down"></i> 
161						</button> 
162					</div> 
163 
164					<div class="lista-desc"> 
165						<p>${desc}</p> 
166					</div> 
167 
168					<div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}"> 
169					<#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !=""> 
170					<div class="lista-details"> 
171								<div class="lista-pic"> 
172									<i class="fa-solid fa-image-slash"></i> 
173									<#if imagem?trim !="" > 
174											<img class="bioec_oferta_img" src="${imagem}"> 
175										<#else> 
176											<div class="bioec_oferta_img_placeholder"> 
177												<i class="fa-solid fa-image"></i> 
178													sem imagem 
179											</div> 
180									</#if> 
181								</div> 
182							<#if nomeParaContato != "" || telefone != "" || email != "" > 
183							<div class="lista-contato"> 
184								<p>Contato</p> 
185								<p class="lista-author">${nomeParaContato}</p> 
186								<p class="lista-phone">${telefone}</p> 
187								<p class="lista-email">${email}</p> 
188							</div> 
189							</#if> 
190						</div> 
191						</#if> 
192						 
193							<#if categorias?seq_contains("recusado") > 
194							<div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;"> 
195							<p>Conteúdo Em Análise Pelo Cetiqt:</p> 
196							<p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p> 
197							</div> 
198							</#if> 
199						<div class="lista-footnote"> 
200								<div> 
201									<span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} cometários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span> 
202								</div> 
203								<#if userIsAdmin> 
204									<div class="buttonsActions"> 
205									<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalOferta${JournalArticleID}"> 
206											<i class="fa-solid fa-edit"></i> 
207										</div> 
208										<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-oferta-${entry.getClassPK()}"> 
209												<i class="fa-solid fa-trash-can"></i> 
210										</div> 
211										 
212									</div> 
213								</#if>		 
214						</div> 
215					</div> 
216				</div> 
217				 
218					<#if userIsAdmin> 
219						<div style="display: none;" id="modal-oferta-${entry.getClassPK()}" class="modal fade" role="dialog"> 
220							<div class="modal-dialog modal-lg" role="document"> 
221								<div class="modal-content"> 
222									<div class="modal-header" > 
223										<h4 class="m-0">Remover Oferta</h4> 
224										<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
225											<span aria-hidden="true"> 
226												<i class="fa-solid fa-close"></i> 
227											</span> 
228										</button>    
229									</div> 
230									<div class="modal-body"> 
231										<h5>Você tem certeza que deseja remover essa oferta?</h5> 
232										<div> 
233											Ao clicar em continuar, a oferta será removida do seu perfil. 
234										</div> 
235									</div> 
236									<div class="modal-footer justify-content-end"> 
237											<button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button> 
238											<button class="bioec_primary_button" type="button" onclick="excluirOferta(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>  
239									</div> 
240								</div> 
241							</div>			 
242						</div> 
243						 
244						<#-- modal edição --> 
245						 
246						 
247						<div style="display: none;" id="modalOferta${JournalArticleID}" class="modal fade bioec-profile-oferta-modal modalOferta" role="dialog"> 
248									<div class="modal-dialog modal-lg" role="document"> 
249										<form id="formularioOferta${JournalArticleID}" class="form-group modal-content formularioOferta"> 
250												<div id="ofertaModal-l1${JournalArticleID}" class="modal-header ofertaModal-l1"> 
251													<h5>Adicionar oferta</h5> 
252														<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
253															 <span aria-hidden="true">&times;</span> 
254														</button> 
255												</div> 
256												<div id="ofertaModal-l2${JournalArticleID}" class="modal-body ofertaModal-l2"> 
257														<div id="ofertaTitle${JournalArticleID}" class="ofertaTitle"> 
258																<label class="ReqLabel" for="ofertaInputTitle${JournalArticleID}">Título da oferta</label> 
259																<input id="ofertaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required> 
260														</div> 
261														<div id="ofertaName${JournalArticleID}" class="ofertaName"> 
262																<label class="" for="ofertaInputName${JournalArticleID}">Nome para contato</label> 
263																<input value="${nomeParaContato}" id="ofertaInputName${JournalArticleID}" placeholder="Inserir nome" type="text"> 
264														</div> 
265														<div id="ofertaTelephone${JournalArticleID}" class="ofertaTelephone"> 
266																<label class="" for="ofertaInputPhone${JournalArticleID}">Telefone para contato</label> 
267																<input value="${telefone}" id="ofertaInputPhone${JournalArticleID}" name="ofertaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14"  /> 
268														</div> 
269														<div id="ofertaEmail${JournalArticleID}" class="ofertaEmail"> 
270																<label class="" for="ofertaInputEmail${JournalArticleID}">E-mail para contato</label> 
271																<input value="${email}" id="ofertaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text"> 
272														</div> 
273														<div id="ofertaDesc${JournalArticleID}" class="ofertaDesc"> 
274																<label class="ReqLabel" for="ofertaInputDesc${JournalArticleID}">Descrição</label> 
275																<textarea id="ofertaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea> 
276														</div> 
277														<div id="ofertaImg${JournalArticleID}" class="ofertaImg"> 
278																<div style="display: flex; flex-direction: column; gap: 8px"> 
279																		<label>Imagem da oferta (Máx. 10 MB)</label> 
280																		<label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemOferta${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label> 
281																		<input class="inputCarregarImagemOferta" id="inputCarregarImagemOferta${JournalArticleID}" type="file" accept="image/*" onchange="encodeOfertaImageAsURL${JournalArticleID}(this)"> 
282																		<input class="d-none" id="inputOfertaBase64${JournalArticleID}" value="${imagem}"/> 
283																		<div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div> 
284																		<button type="button" id="removerImagemOferta${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if>  removerImagemOferta" > 
285																			<i class="fa fa-trash"></i> Remover imagem	 
286																		</button> 
287																	</div> 
288																	<div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div> 
289														</div> 
290												</div> 
291													<div class="TextImportant"> 
292														<p> 
293															Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal. 
294														</p> 
295													</div> 
296 
297												<div id="ofertaModal-l3${JournalArticleID}" class="modal-footer ofertaModal-l3"> 
298														<button  class="btn button-empty" onclick="" id="ofertas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button> 
299												</div> 
300										</form> 
301									</div> 
302								</div> 
303						 
304						</#if> 
305						<#--  
306						 
307						 
308						 
309						 
310						<div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog"> 
311							<div  class="modal-dialog modal-lg" role="document"> 
312 
313								<form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}"> 
314									<div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" > 
315										<h5>Adicionar Infraestrutura</h5> 
316										<button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close"> 
317											<span aria-hidden="true">&times;</span> 
318										</button>    
319									</div> 
320									<div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2"> 
321										<div id="infraName${JournalArticleID}" class="infraName"> 
322											<label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label> 
323											<input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required> 
324										</div> 
325									<div id="infraModel${JournalArticleID}" class="infraModel"> 
326										<label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label> 
327										<input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required> 
328									</div> 
329									<div id="infraBrand${JournalArticleID}" class="infraBrand"> 
330										<label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label> 
331										<input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required> 
332									</div> 
333 
334									<div id="infraImg${JournalArticleID}" class="infraImg"> 
335										<div style="display: flex; flex-direction: column; gap: 8px"> 
336											<label>Imagem da infraestrutura (Máx. 10 MB)</label> 
337											<label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;"> 
338												CARREGAR IMAGEM 
339											</label> 
340											<input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)"> 
341											<input class="d-none" id="inputInfraBase64${JournalArticleID}" /> 
342											<div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div> 
343											<button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" > 
344												<i class="fa fa-trash"></i> Remover imagem	 
345											</button> 
346										</div> 
347										<div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div> 
348									</div> 
349 
350									<div id="infraFunction${JournalArticleID}" class="infraFunction"> 
351										<label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label> 
352										<input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required> 
353									</div> 
354								</div> 
355								<div class="TextImportant"> 
356									<p> 
357									Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal. 
358									</p> 
359								</div> 
360								<div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3"> 
361											<button class="bioec_secondary_button" id="ofertas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button> 
362								</div> 
363							</form> 
364 
365							</div>			 
366						 
367						 
368						--> 
369						 
370				 
371 
372						<script> 
373						<#if userIsAdmin> 
374						function excluirOferta(wcId, orgId) { 
375								Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
376								fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/" + wcId, { 
377									method: 'DELETE', 
378									"headers": { 
379										"x-csrf-token": Liferay.authToken, 
380										"Content-Type": "application/json" 
381
382								}) 
383								.then(res => { 
384									if(res.status == 200) { 
385										Liferay.Util.openToast({ 
386												message: "Infraestrutura excluida com sucesso", 
387												type: "success", 
388												title: "", 
389												toastProps: { 
390														autoClose: 5000 
391
392										}) 
393										setTimeout(function(){ location.reload(); }, 2000) 
394									} else { 
395										Liferay.Util.openToast({ 
396												message: "Erro ao excluir infraestrutura", 
397												type: "danger", 
398												title: "", 
399												toastProps: { 
400														autoClose: 5000 
401
402										}) 
403
404								}); 
405
406							 
407						 
408							 
409							 
410	function validImageSize(base64="") { 
411		const decoded = atob(base64.substring(base64.indexOf(',') + 1)); 
412		const sizeMB = decoded.length / 1e+6; 
413		console.log("MB: " + decoded.length / 1e+6); 
414		if(sizeMB > 10) { 
415			Liferay.Util.openToast({ 
416				message: "O tamanho da imagem não deve ultrapassar 10 MB.", 
417				type: "danger", 
418				title: "", 
419				toastProps: { 
420					autoClose: 5000 
421
422			}) 
423			return false 
424
425		return true 
426
427 
428	function encodeOfertaImageAsURL${JournalArticleID}(element) { 
429  	let file = element.files[0]; 
430    let reader = new FileReader(); 
431    reader.onloadend = () => { 
432			if(reader.result) { 
433				if(!validImageSize(reader.result)) return; 
434				try { 
435					const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}") 
436					base64_input.value = reader.result 
437					Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' ) 
438					 
439					const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}") 
440					removeImageButton.classList.remove("d-none") 
441				} catch (error) { 
442					console.error(error) 
443
444
445
446		reader.readAsDataURL(file); 
447
448	 
449	function removeImageOferta${JournalArticleID}() { 
450	try { 
451		const file_input = document.getElementById("inputCarregarImagemOferta${JournalArticleID}") 
452		Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" ) 
453		const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}") 
454		file_input.value = null 
455		base64_input.value = "" 
456		 
457		const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}") 
458		removeImageButton.classList.add("d-none") 
459	} catch (error) { 
460		console.error(error) 
461
462
463 
464 
465 
466document.getElementById("removerImagemOferta${JournalArticleID}").addEventListener("click", removeImageOferta${JournalArticleID}); 
467 
468<#-- Rest da edição de organização --> 
469 
470<#if orgOrUser == "org"> 
471document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => { 
472	event.preventDefault(); 
473	adicionarOferta${JournalArticleID}();  
474}); 
475 
476function adicionarOferta${JournalArticleID}() {		 
477		Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
478		$("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true); 
479	 
480		 
481		 
482		const ofertaData = { 
483			titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value, 
484			nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value, 
485			telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value, 
486			emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value, 
487			descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value, 
488			imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value, 
489
490		 
491		console.log(ofertaData); 
492		 
493			fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", { 
494				method: 'PUT', 
495				"headers": { 
496					"x-csrf-token": Liferay.authToken, 
497					"Content-Type": "application/json" 
498				}, 
499				body: JSON.stringify(ofertaData) 
500			}) 
501			.then(res => { 
502				if(res.status == 200) { 
503					Liferay.Util.openToast({ 
504							message: "Oferta editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.", 
505							type: "success", 
506							title: "", 
507							toastProps: { 
508									autoClose: 5000 
509
510					}) 
511					 setTimeout(function(){ location.reload(); }, 2000); 
512				} else { 
513				 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false); 
514					Liferay.Util.openToast({ 
515							message: "Erro ao editar oferta", 
516							type: "danger", 
517							title: "", 
518							toastProps: { 
519									autoClose: 5000 
520
521					}) 
522
523			}) 
524
525</#if> 
526 
527<#-- Rest da edição de pessoa fisica --> 
528 
529							 
530							 
531				<#if orgOrUser == "user"> 
532				 
533								document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => { 
534					event.preventDefault(); 
535					adicionarOferta${JournalArticleID}();  
536				});			 
537						 
538						function adicionarOferta${JournalArticleID}() { 
539							Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
540							$("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true); 
541	 
542							const ofertaData = { 
543								titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value, 
544								nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value, 
545								telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value, 
546								emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value, 
547								descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value, 
548								imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value, 
549
550							 
551							console.log(ofertaData); 
552 
553							fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", { 
554											method: 'PUT', 
555											"headers": { 
556													"x-csrf-token": Liferay.authToken, 
557													"Content-Type": "application/json" 
558											}, 
559											body: JSON.stringify(ofertaData) 
560									}) 
561									.then( res => { 
562								if(res.status == 200) { 
563									Liferay.Util.openToast({ 
564										message: "Oferta editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.", 
565										type: "success", 
566										title: "", 
567										toastProps: { 
568											autoClose: 5000 
569
570									}) 
571									 setTimeout(function(){ location.reload(); }, 2000); 
572								} else { 
573								 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false); 
574									Liferay.Util.openToast({ 
575										message: "Erro ao editar Oferta", 
576										type: "danger", 
577										title: "", 
578										toastProps: { 
579											autoClose: 5000 
580
581									}) 
582
583							}); 
584							 
585					}; 
586						 
587						 
588				</#if> 
589							 
590							 
591								</#if> 
592						</script> 
593					 
594				 
595				 
596				 
597			</#list> 
598		</#if> 
599	</div> 
600</div> 
601 
602<style> 
603.bioec_oferta_img { 
604    overflow: hidden; 
605		background-size: contain; 
606    background-position: center; 
607    background-repeat: no-repeat; 
608
609 
610.bioec_oferta_img_placeholder { 
611    width: 140px; 
612    height: 140px; 
613    background-color: #E8ECEF; 
614    display: flex; 
615    flex-direction: column; 
616    align-items: center; 
617    justify-content: center; 
618    font-size: 14px; 
619    color: #5B5C61; 
620
621 
622.bioec_oferta_img_placeholder i { 
623    font-size: 44px; 
624
625 
626 
627.pagination-items-per-page.active > a,  
628.pagination-items-per-page.active > button,  
629.pagination-items-per-page.show > a,  
630.pagination-items-per-page.show > button, 
631.page-item.active .page-link,  
632.page-item.show .page-link{ 
633    border-color: #4ECD66; 
634    background-color: #4ECD66; 
635
636 
637.pagination-results, 
638.pagination-items-per-page > a,  
639.pagination-items-per-page > button, 
640.pagination-items-per-page > a:hover,  
641.pagination-items-per-page > button:hover, 
642.page-link{ 
643	color: #4ebe66; 
644
645 
646.bioec-profile-oferta-main{ 
647	display: flex; 
648	gap: 40px; 
649	flex-direction: column; 
650	padding-bottom: 20px; 
651
652.bioec-profile-oferta-main h5{ 
653	font-weight: 700; 
654
655.bioec-profile-oferta-main h5, .bioec-profile-oferta-main p{ 
656	color: #5B5C61; 
657	margin-bottom: 0px; 
658	font-size: 16px; 
659 
660
661 
662.bioec-profile-oferta-main #oferta-lista-container>div{ 
663	border: 1px #BEBEBE solid;  
664	padding: 24px 24px 0 24px; 
665	margin-bottom: 40px; 
666	display: grid; 
667	grid-row-gap: 24px; 
668	grid-template-columns: 24px 12px 1fr 15px; 
669	grid-template-areas:  
670		"ck . tit arrw" 
671		"desc desc desc desc" 
672		"clps clps clps clps"; 
673
674 
675.bioec-profile-oferta-main .lista-checkmark { grid-area: ck; display: flex; } 
676.bioec-profile-oferta-main .lista-checkmark i { font-size: 24px; } 
677.bioec-profile-oferta-main .lista-pic { grid-area: pic; display: flex; justify-content: center;} 
678.bioec-profile-oferta-main .lista-arrow { grid-area: arrw; } 
679 
680.bioec-profile-oferta-main .lista-titulo {  
681	grid-area: tit;  
682	display: flex;  
683	flex-direction: column; 
684	justify-content: center; 
685	 
686
687 
688.bioec-profile-oferta-main .lista-titulo h5{ 
689	margin-bottom: 0px; 
690}  
691 
692.bioec-profile-oferta-main .lista-desc { 
693grid-area: desc;  
694}  
695 
696.bioec-profile-oferta-main .lista-desc p{  
697	margin: 0; 
698
699 
700.bioec-profile-oferta-main a{ 
701	color: #5B5C61; 
702
703 
704.oferta-port{ 
705	border: 1px #BEBEBE solid;  
706	padding: 24px; 
707	display: flex; 
708	flex-direction: column; 
709	align-items: center; 
710	gap: 24px; 
711
712 
713.oferta-port p{ 
714text-align: center;	 
715	 
716
717 
718.oferta-port div{ 
719display: flex; 
720	justify-content: space-between; 
721	width: min(558px, 100%); 
722
723 
724.button-empty { 
725border: solid 1px #4ECD66; 
726padding: 8px 24px; 
727color: #333244; 
728	transition: 250ms; 
729
730 
731.button-empty:hover{ 
732	background-color: #4ECD66; 
733
734 
735.button-filled { 
736background-color: #4ECD66; 
737border: solid 1px #4ECD66; 
738padding: 8px 24px; 
739color: #333244; 
740transition: 250ms; 
741	 
742
743 
744.button-filled:hover{ 
745	background-color: transparent; 
746
747 
748.bioec-profile-oferta-main .lista-footnote {  
749 
750	display: flex; 
751	justify-content: space-between; 
752	border-top: 1px solid #E8ECEF; 
753	padding-top: 12px; 
754	font-size: 14px; 
755	font-weight: 300; 
756	gap: 15px; 
757	color: #5B5C61; 
758 
759
760.lista-collapse{ 
761display: flex; 
762flex-direction: column; 
763gap: 24px; 
764grid-area: clps; 
765padding-bottom: 24px; 
766
767 
768 .lista-details{ 
769	display: flex; 
770	justify-content: flex-start; 
771	gap: 24px; 
772
773.lista-pic img { 
774	max-height: 138px; 
775	max-width: 138px; 
776
777 
778.bioec-profile-oferta-main p{ 
779 
780
781 
782.imagemCarregadaOferta { 
783	height: 100px; 
784	width: 100px; 
785	background-size: contain; 
786	background-position: center; 
787	background-repeat: no-repeat; 
788
789 
790 
791.ButtonAddOferta { 
792    background: #4ECD66; 
793    border-radius: 8px; 
794    padding: 8px 24px; 
795    border: none; 
796    font-weight: 700; 
797    color: #333244; 
798    font-family: 'Roboto'; 
799    float: right; 
800    text-transform: uppercase; 
801
802.ButtonAddOferta:hover{ 
803	color: #333244; 
804	text-decoration: none; 
805
806 
807.bioec-profile-oferta-modal label { 
808    margin: 0; 
809    cursor: default; 
810    font-size: 20px; 
811    font-weight: 700; 
812    color: #5B5C61; 
813
814 
815.bioec-profile-oferta-modal div { 
816    width: 100%; 
817
818 
819#ofertaModal-l1, .ofertaModal-l1 { 
820    padding: 18px 24px; 
821    display: flex; 
822    justify-content: space-between; 
823
824 
825#ofertaModal-l1 img, .ofertaModal-l1 img { 
826    cursor: pointer; 
827
828 
829#ofertaModal-l1 h5, .ofertaModal-l1 h5 { 
830   	margin: 0; 
831    font-size: 20px; 
832    font-weight: 700; 
833    color: #5B5C61; 
834
835 
836#ofertaModal-l2, .ofertaModal-l2 { 
837		border-top: 1px solid #E8ECEF; 
838    display: grid; 
839    grid-template-columns: 1fr 1fr; 
840    grid-template-areas: 
841        "titu nome" 
842        "fone mail" 
843        "desc desc" 
844        "imagem ." 
845
846    column-gap: 24px; 
847    row-gap: 40px; 
848    padding: 24px; 
849
850 
851#ofertaModal-l2>div, .ofertaModal-l2>div { 
852    display: flex; 
853    flex-direction: column; 
854    gap: 8px; 
855
856 
857#ofertaTitle, .ofertaTitle { 
858    grid-area: titu; 
859
860 
861#ofertaName, .ofertaName { 
862    grid-area: nome; 
863
864 
865#ofertaTelephone, .ofertaTelephone { 
866    grid-area: fone; 
867
868 
869#ofertaEmail, .ofertaEmail { 
870    grid-area: mail; 
871
872 
873#ofertaBrand, .ofertaBrand { 
874    grid-area: marca; 
875
876 
877#ofertaModal-l2>#ofertaImg, .ofertaModal-l2>.ofertaImg { 
878    grid-area: imagem; 
879    display: flex; 
880    flex-direction: column; 
881
882 
883#ofertaDesc, .ofertaDesc { 
884    grid-area: desc; 
885 
886
887 
888#ofertaDesc input, .ofertaDesc input { 
889    height: 80px; 
890
891 
892.TextImportant{ 
893    border-bottom: 1px solid #E8ECEF; 
894 		padding: 24px; 
895		color: #5B5C61;		 
896
897 
898.bioec-profile-oferta-modal input[type="text"] { 
899    border-top: none; 
900    border-left: none; 
901    border-right: none; 
902    border-bottom: 1px solid #BEBEBE; 
903    width: 100%; 
904    font-size: 16px; 
905 
906
907 
908 
909.bioec-profile-oferta-modal input[type="text"]:focus-visible { 
910    outline: none; 
911    border-bottom: 1px solid black; 
912 
913
914 
915.bioec-profile-oferta-modal .ReqLabel:before { 
916    content: "* "; 
917    color: #D90000; 
918 
919
920 
921#inputCarregarImagemOferta, .inputCarregarImagemOferta { 
922    display: none; 
923
924 
925#carregarImagem, .carregarImagem  { 
926    padding: 8px 24px; 
927    border: 1px solid #4ECD66; 
928    width: fit-content; 
929    transition: 250ms; 
930 
931
932 
933#carregarImagem:hover, .carregarImagem:hover { 
934    background-color: #4ECD66; 
935
936 
937.button-empty { 
938    border: solid 1px #4ECD66; 
939    padding: 8px 24px; 
940    color: #333244; 
941    transition: 250ms; 
942    font-weight: bold; 
943
944 
945.button-empty:hover { 
946    background-color: #4ECD66; 
947
948 
949.button-filled { 
950    background-color: #4ECD66; 
951    border: solid 1px #4ECD66; 
952    padding: 8px 24px; 
953    color: #333244; 
954    transition: 250ms; 
955    font-weight: bold; 
956
957 
958.button-filled:hover { 
959    background-color: transparent; 
960
961 
962#ofertaModal-l3, .ofertaModal-l3 { 
963    gap: 24px; 
964    display: flex; 
965    justify-content: flex-end; 
966    padding: 24px; 
967
968 
969.modal { 
970    padding: initial !important; 
971    border-radius: 4px !important; 
972    
973
974 
975.modal a.close-modal { 
976    display: none; 
977
978 
979#removerImagemOferta, .removerImagemOferta { 
980	background: none; 
981	border: none; 
982	outline: none; 
983	color: #5B5C61; 
984	font-size: 16px; 
985	font-weight: 900; 
986	line-height: 24px; 
987	letter-spacing: 0em; 
988	width: fit-content; 
989	margin-left: 16px; 
990
991 
992 
993@media(max-width: 964px){ 
994    .lista-pic img { 
995        width: 100%; 
996        max-height: unset; 
997        max-width: unset; 
998 
999
1000
1001 
1002@media (max-width: 550px) { 
1003    #ofertaModal-l2, .ofertaModal-l2 { 
1004        display: flex; 
1005        flex-direction: column; 
1006
1007 
1008    #ofertaModal-l3, .ofertaModal-l3 { 
1009        display: flex; 
1010        flex-direction: column; 
1011
1012
1013 
1014@media(max-width: 450px){ 
1015	.bioec-profile-oferta-main .lista-details{ 
1016		flex-direction: column; 
1017
1018 
1019	.lista-contato{ 
1020		text-align: center; 
1021
1022 
1023	.bioec-profile-oferta-main .lista-footnote{ 
1024	flex-direction: column; 
1025		gap: 10px; 
1026		align-items: flex-end; 
1027		text-align: right; 
1028
1029
1030 
1031@media(max-width: 992px){ 
1032	#oferta-lista-container { 
1033		padding-inline: 15px; 
1034
1035
1036 
1037.bioec-profile-oferta-main .lista-footnote .buttonsActions { 
1038  display: flex; 
1039  gap: 17px; 
1040
1041 
1042@media (max-width: 768px) { 
1043  .bioec-profile-oferta-main .lista-desc { 
1044    gap: 24px; 
1045    flex-direction: column-reverse; 
1046
1047  .bioec-profile-oferta-main .lista-footnote { 
1048    flex-direction: column; 
1049    align-items: center; 
1050
1051  .bioec-profile-oferta-main .lista-footnote > div { 
1052    text-align: center; 
1053
1054   
1055  .bioec-profile-oferta-main .lista-footnote .barra-pipe { 
1056    display: none; 
1057
1058  .bioec-profile-oferta-main .lista-footnote .lista-author { 
1059    display: flex; 
1060    gap: 4px; 
1061    justify-content: center; 
1062
1063  .bioec-profile-oferta-main .lista-footnote .buttonsActions { 
1064    width: 100%; 
1065    justify-content: space-between; 
1066
1067
1068 
1069 
1070</style> 
1071 
1072 
1073<script> 
1074 
1075 
1076 
1077</script> 
Publicações drop zone
Um erro ocorreu enquanto processava o modelo.
Java method "com.sun.proxy.$Proxy1005.getLatestArticle(long)" threw an exception when invoked on com.sun.proxy.$Proxy1005 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@751db4f3"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticle = JournalArtic...  [in template "34764#34807#41154" at line 18, column 65]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
2	<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
3		<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
4			<#assign PortletFileRepositoryUtil = staticUtil["com.liferay.portal.kernel.portletfilerepository.PortletFileRepositoryUtil"] 
5							 JSONFactoryUtil = staticUtil["com.liferay.portal.kernel.json.JSONFactoryUtil"] 
6							 mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService") 
7							 tagsLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") 
8							 OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") 
9
10				<#assign journalArticles = JournalArticleLocalService.getArticlesByStructureId(themeDisplay.getLayout().getGroupId(), 47601, 0, -1, -1, ORDER_BY_ASC) /> 
11 
12				<script src="https://unpkg.com/imask"></script> 
13 
14				<div class="bioec-profile-post-main"> 
15					<div id="post-lista-container" class="d-flex flex-column"> 
16						<#if entries?has_content> 
17							<#list entries as entry> 
18								<#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) > 
19									<#assign JournalArticleID = journalArticle.getId()>										 
20										<#assign JournalArticleFrontId = journalArticle.getArticleId()> 
21											<#assign tipoDePost = "" > 
22												<#assign urlWC = ""> 
23													<#assign articleXml = journalArticle.getDocument().getRootElement()  
24																	 userIsAdmin = false 
25																	 orgId = "" 
26																	 imagem = "" 
27																	 autorId = "" 
28																	 desc = "" 
29
30														<#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )  
31																		 tagName = tags[0]!"" 
32																		 orgOrUser = "" 
33																		 link = "" 
34
35 
36															<#if tagName?contains("organization") && tagName != "" > 
37																<#assign orgOrUser = "org"> 
38																	<#else> 
39																		<#assign orgOrUser = "user" /> 
40																		</#if> 
41 
42																	<#assign tituloDoPost = ""> 
43 
44																		<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text33341198']")??> 
45 
46																			<#assign tituloDoPost = articleXml.selectSingleNode("dynamic-element[@field-reference='Text33341198']").getStringValue()!"" 
47																							 tituloDoPost = tituloDoPost?replace("\n\t\t", "") 
48																							 tituloDoPost = tituloDoPost?replace("\n\t", "")					 
49																							 /> 
50 
51																			</#if> 
52 
53																		<#if articleXml.selectSingleNode("dynamic-element[@field-reference='RichText67646278']")??> 
54																			<#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='RichText67646278']").getStringValue()!"" 
55																							 desc = desc?replace("\n\t\t", "") 
56																							 desc = desc?replace("\n\t", "")						 
57																							 /> 
58																			</#if> 
59 
60																		<#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto05403380']")??> 
61																			<#assign link = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto05403380']").getStringValue()!"" 
62																							 link = link?replace("\n\t\t", "") 
63																							 link = link?replace("\n\t", "")						 
64																							 /> 
65																			</#if> 
66 
67																		<#if articleXml.selectNodes("dynamic-element[@name='CampoDeTexto47994077']")??> 
68																			<#assign contRelacionado = articleXml.selectNodes("dynamic-element[@name='CampoDeTexto47994077']")!"" 	 
69																							 /> 
70																			</#if>																																														  
71 
72																		<#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto12713402']")??> 
73																			<#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto12713402']").getStringValue()!"" 
74																							 imagem = imagem?replace("\n\t\t", "") 
75																							 imagem = imagem?replace("\n\t", "")			 
76
77																				<#--if imagem?? && imagem?trim != ""> 
78																					<#assign  
79																									 jsonObject = JSONFactoryUtil.createJSONObject(imagem)  
80																									 fileEntryId = jsonObject.getLong("fileEntryId")	 
81
82																						<#if fileEntryId != 0> 
83																							<#assign 
84																											 fileEntry = PortletFileRepositoryUtil.getPortletFileEntry(fileEntryId) 
85																											 fileEntryURL = PortletFileRepositoryUtil.getDownloadPortletFileEntryURL(themeDisplay, fileEntry,"") 
86
87																								</#if> 
88																							</#if-->		 
89																						</#if> 
90 
91																					<#assign 	categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!""> 
92																						<#if  categorias?is_sequence> 
93																							<#if  categorias?seq_contains("Notícias")> 
94																								<#assign tipoDePost = "Notícia" > 
95																									</#if> 
96																								<#if  categorias?seq_contains("Notas Técnicas e Relatórios")> 
97																									<#assign tipoDePost = "Nota Técnica e Relatório" > 
98																										</#if> 
99																									<#if  categorias?seq_contains("Artigos")> 
100																										<#assign tipoDePost = "Artigo" > 
101																											</#if> 
102																										</#if> 
103 
104 
105																									<#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text26813532']")??> 
106																										<#assign  
107																														 autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='Text26813532']").getStringValue()!"" 
108																														 autorId = autorId?replace("\n\t\t", "") 
109																														 autorId = autorId?replace("\n\t", "")		 
110
111																											</#if> 
112																										<#assign  
113																														 autorArticleId = "" 
114																														 commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0" 
115
116																											<#if orgOrUser == "user" > 
117																												<#if autorId != "" && autorId??> 
118																													<#assign 
119																																	 autor = UserLocalService.fetchUser(autorId?number)!"" 
120																																	 autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"  
121																																	 /> 
122																													<#if autor != ""> 
123																														<#assign autor = autor.getFullName()!""> 
124																															<#else> 
125																																<#assign autor = "Anônimo" > 
126																																	</#if> 
127																																<#else>  
128																																	<#assign autor = "Anônimo" > 
129																																		</#if>	 
130 
131 
132 
133																																	<#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo"> 
134																																		<#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) > 
135																																			<#assign urlWC = autorArticle.getUrlTitle()!""> 
136																																				</#if> 
137 
138																																			</#if> 
139 
140																																		<#if orgOrUser == "org" > 
141																																			<#assign orgId = tagName?keep_after("organization-")				 
142																																							 organization =  OrganizationLocalService.fetchOrganization(orgId?number)!""> 
143																																				<#if organization != ""> 
144																																					<#assign	orgArticleId = organization.getExpandoBridge().getAttribute("journal-article") 
145																																									 orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)  
146																																									 urlWC = orgJournalArticle.getUrlTitle()!"" 
147																																									 autor = organization.getName()!""> 
148																																						</#if> 
149																																					</#if> 
150 
151																																				<#if themeDisplay.isSignedIn() > 
152																																					<#if tagName?contains("organization-")> 
153																																						<#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)> 
154																																							<#else> 
155																																								<#if autorId != ""> 
156																																									<#if autorId?number == themeDisplay.getUserId()> 
157 
158																																										<#assign userIsAdmin = true> 
159																																											</#if> 
160																																										</#if> 
161																																									</#if> 
162 
163 
164																																								</#if> 
165 
166 
167 
168																																							<div class="post-lista-item"> 
169																																								<div class="lista-checkmark"> 
170																																									<#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if> 
171																																									<#if categorias?seq_contains("pendente") >	<i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if> 
172																																									<#if categorias?seq_contains("recusado") >	<i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if> 
173 
174																																								</div> 
175 
176																																								<div class="lista-titulo"> 
177																																									<h5>${tipoDePost}</h5> 
178																																								</div> 
179 
180																																								<div class="lista-arrow"> 
181																																									<button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${JournalArticleID}" aria-expanded="false" aria-controls="collapseID${JournalArticleID}"> 
182																																										<i class="fa-solid fa-chevron-down"></i> 
183																																									</button> 
184																																								</div> 
185 
186																																								<div class="lista-desc"> 
187																																									<#if imagem?trim != "" > 
188																																										<div> 
189																																											<img src="${imagem}" /> 
190																																										</div> 
191																																										<#else> 
192																																											<div class="bioec_post_img_placeholder"> 
193																																												<i class="fa-solid fa-image"></i> 
194																																												sem imagem 
195																																											</div> 
196																																											</#if> 
197																																										<p>${tituloDoPost}</p> 
198																																										</div> 
199 
200																																									<div class="lista-collapse collapse" id="collapseID${JournalArticleID}"> 
201																																										<#if desc !=""> 
202																																											<div class="lista-details"> 
203																																												<div class="lista-contato"> 
204																																													${desc} 
205																																												</div> 
206																																											</div> 
207																																											</#if> 
208 
209																																										<#if categorias?seq_contains("recusado") > 
210																																											<div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;"> 
211																																												<p>Conteúdo Em Análise Pelo Cetiqt:</p> 
212																																												<p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p> 
213																																											</div> 
214																																											</#if> 
215 
216																																										<div class="lista-footnote"> 
217																																											<div> 
218																																												<span class="post-type" style="text-transform: uppercase;" id="postInputTipodePost${JournalArticleID}" vlaue="${tipoDePost}">${tipoDePost}</span> <span class="barra-pipe"> | </span>  
219																																												<span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} comentários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span> 
220																																									</div> 
221																																									<#if userIsAdmin> 
222																																										<div class="buttonsActions"> 
223																																											<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalEditPost${JournalArticleID}"> 
224																																												<i class="fa-solid fa-edit"></i> 
225																																											</div> 
226																																											<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-post-${entry.getClassPK()}"> 
227																																												<i class="fa-solid fa-trash-can"></i> 
228																																											</div> 
229																																										</div> 
230																																										</#if>		 
231																																								</div> 
232																																							</div> 
233																																							</div> 
234 
235 
236																																						<#if userIsAdmin> 
237																																							<div style="display: none;" id="modal-post-${entry.getClassPK()}" class="modal fade" role="dialog"> 
238																																								<div class="modal-dialog modal-lg" role="document"> 
239																																									<div class="modal-content"> 
240																																										<div class="modal-header" > 
241																																											<h4 class="m-0">Remover Publicação</h4> 
242																																											<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
243																																												<span aria-hidden="true"> 
244																																													<i class="fa-solid fa-close"></i> 
245																																												</span> 
246																																											</button>    
247																																										</div> 
248																																										<div class="modal-body"> 
249																																											<h5>Você tem certeza que deseja remover essa publicação?</h5> 
250																																											<div> 
251																																												Ao clicar em continuar, a publicação será removida do seu perfil. 
252																																											</div> 
253																																										</div> 
254																																										<div class="modal-footer justify-content-end"> 
255																																											<button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button> 
256																																											<button class="bioec_primary_button" type="button" onclick="excluirPost${JournalArticleID}()">CONTINUAR</button>  
257																																										</div> 
258																																									</div> 
259																																								</div>			 
260																																							</div> 
261 
262																																							<#-- modal edição --> 
263 
264 
265																																								<div style="display: none" id="modalEditPost${JournalArticleID}" class="modal fade bioec-profile-edit-post-modal" role="dialog"> 
266																																									<div class="modal-dialog modal-dialog-scrollable modal-lg" role="document"> 
267																																										<form class="form-group modal-content" id="formularioEditPost${JournalArticleID}"> 
268																																											<div id="editPostModal-l1${JournalArticleID}" class="editPostModal-l1 modal-header"> 
269																																												<h5>Editar ${tipoDePost}</h5> 
270																																												<button 
271																																																type="button" 
272																																																class="close" 
273																																																data-dismiss="modal" 
274																																																aria-label="Close" 
275
276																																													<span aria-hidden="true">&times;</span> 
277																																												</button> 
278																																											</div> 
279 
280																																											<div id="editPostModal-l2${JournalArticleID}" class="editPostModal-l2 modal-body"> 
281																																												<div id="editPostTitle${JournalArticleID}" class="postTitle"> 
282																																													<label class="reqLabel" for="editPostInputTitle${JournalArticleID}" 
283																																																 >Título</label 
284
285																																													<input 
286																																																 id="editPostInputTitle${JournalArticleID}" 
287																																																 class="postInputTitle" 
288																																																 type="text" 
289																																																 value="${tituloDoPost}" 
290																																																 placeholder="Inserir um título" 
291																																																 required 
292																																																 /> 
293																																												</div> 
294																																												<div id="editPostDesc${JournalArticleID}" class="postDesc"> 
295																																													<label class="reqLabel" for="editPostInputDesc${JournalArticleID}" 
296																																																 >Texto principal</label 
297
298																																													<textarea 
299																																																		id="editPostInputDesc${JournalArticleID}" 
300																																																		class="postInputDesc" 
301																																																		rows="7" 
302																																																		style="border: 1px solid #bebebe" 
303																																																		required 
304																																																		>${desc}</textarea> 
305																																												</div> 
306 
307																																												<div id="editPostImg${JournalArticleID}" class="postImg"> 
308																																													<div style="display: flex; flex-direction: column; gap: 8px"> 
309																																														<label>Imagem de ${tipoDePost}</label> 
310																																														<label 
311																																																	 class="btn carregarImagemPost" 
312																																																	 id="carregarImagemPost${JournalArticleID}" 
313																																																	 for="inputCarregarImagemPost${JournalArticleID}" 
314																																																	 style="font-size: 16px; cursor: pointer" 
315																																																	 >CARREGAR IMAGEM</label 
316
317																																														<input 
318																																																	 id="inputCarregarImagemPost${JournalArticleID}" 
319																																																	 class="inputCarregarImagemPost" 
320																																																	 type="file" 
321																																																	 accept="image/*" 
322																																																	 /> 
323																																														<input class="d-none inputPostBase64" id="inputPostBase64${JournalArticleID}" value="${imagem}" /> 
324																																														<button type="button" id="removerImagemPost${JournalArticleID}" class="removerImagemPost <#if imagem == "" || imagem?? == false> d-none </#if>"> 
325																																															<i class="fa fa-trash"></i> Remover imagem 
326																																														</button> 
327 
328																																													</div> 
329																																													<div id="imagemCarregadaPost${JournalArticleID}"  class="imagemCarregadaPost" style="background-image: url(${imagem})"></div> 
330																																												</div> 
331 
332																																												<div id="postLink${JournalArticleID}" class="postLink"> 
333																																													<label for="postInputLinkMoreInfo${JournalArticleID}">Link para saber mais</label> 
334																																													<small id="postLinkMoreInfo${JournalArticleID}" class="postLinkMoreInfo"> 
335																																														Espaço opcional para adicionar um link externo com mais 
336																																														informações sobre o assunto. 
337																																													</small> 
338																																													<input 
339																																																 id="postInputLinkMoreInfo${JournalArticleID}" 
340																																																 type="text" 
341																																																 placeholder="Inserir link" 
342																																																 aria-describedby="postLinkMoreInfo${JournalArticleID}" 
343																																																 value="${link}" 
344																																																 /> 
345																																												</div> 
346 
347																																												<div id="editContentRel${JournalArticleID}"> 
348																																													<div style="display: flex; flex-direction: column; gap: 8px"> 
349																																														<label for="conteudoRelacionadoInput${JournalArticleID}">Conteúdos relacionados</label> 
350																																														<small id="conteudoRelacionado${JournalArticleID}"> 
351																																															Espaço opcional para adicionar conteúdos relacionados de notícias ou artigos do Portal de Bioeconomia. 
352																																														</small> 
353 
354																																														<#assign containerLink = [] 
355																																																		 containerId = [] /> 
356 
357																																															<#assign i = 0 /> 
358 
359																																															<#list contRelacionado as links> 
360																																																<#assign valLink = links.getStringValue() 
361																																																				 valLink = valLink?replace("\n\t\t", "") 
362																																																				 valLink = valLink?replace("\n\t", "")		/>		 
363 
364																																																<#list journalArticles as entrada> 
365																																																	<#assign 
366																																																					 checkId = entrada.getId()?string 
367																																																					 articleXml = entrada.getDocument().getRootElement() 
368																																																					 titleInput = articleXml.selectSingleNode("dynamic-element[@field-reference='Text33341198']").getStringValue() 
369																																																					 titleInput = titleInput?replace("\n\t\t", "") 
370																																																					 titleInput = titleInput?replace("\n\t", "")		/> 
371 
372																																																	<#if valLink = checkId>																																																				 
373																																																		<#assign containerLink += [titleInput] />				 
374																																																		<#assign containerId += [checkId] />				 
375																																																		</#if> 
376																																																	</#list> 
377 
378																																																</#list>	 
379 
380																																															<#list 1..4 as j> 
381 
382																																																<input class="form-control search-select-post postName-${JournalArticleID}-${j}" list="postList-${j}" id="${containerId[i]!''}" placeholder="Selecione nova publicação" value="${containerLink[i]!''}"> 
383 
384																																																<datalist id="postList-${j}" class="contRel${JournalArticleID}"> 
385																																																	<#list journalArticles as entry> 
386																																																		<#assign 
387																																																						 postId = entry.getId()?string 
388																																																						 articleXml = entry.getDocument().getRootElement() 
389																																																						 titulo = articleXml.selectSingleNode("dynamic-element[@field-reference='Text33341198']").getStringValue() 
390																																																						 titulo = titulo?replace("\n\t\t", "") 
391																																																						 titulo = titulo?replace("\n\t", "")		 
392																																																						 categorias = AssetCategoryLocalService.getCategoryNames("com.liferay.journal.model.JournalArticle", entry.resourcePrimKey)!"" 
393																																																						 />				 
394																																																		<option value="${titulo}" id="${postId}"> 
395																																																			Categorias: ${categorias?join(", ")}		 
396																																																		</#list>  
397																																																</datalist>	 
398																																																<#assign i = i + 1 /> 
399																																																</#list> 
400 
401																																															</div> 
402																																													</div> 
403 
404 
405 
406 
407																																												</div> 
408																																												<div class="importantText"> 
409																																													<p> 
410																																														Importante: O conteúdo enviado passará por um processo interno de 
411																																														aprovação. Só então o conteúdo adicionado aparecerá no portal. 
412																																													</p> 
413																																												</div> 
414																																												<div id="editPostModal-l3${JournalArticleID}" class="editPostModal-l3 modal-footer"> 
415																																													<button class="btn button-empty" id="editPost-saveAndClose${JournalArticleID}"> 
416																																														SALVAR E FECHAR 
417																																													</button> 
418																																												</div> 
419																																												</form> 
420																																											</div> 
421																																									</div> 
422 
423																																									</#if> 
424 
425																																								<script> 
426 
427																																									<#if userIsAdmin> 
428																																										function validImageSize(base64 = "") { 
429																																										const decoded = atob(base64.substring(base64.indexOf(",") + 1)); 
430																																										const sizeMB = decoded.length / 1e6; 
431																																										console.log("MB: " + decoded.length / 1e6); 
432																																										if (sizeMB > 10) { 
433																																											Liferay.Util.openToast({ 
434																																												message: "O tamanho da imagem não deve ultrapassar 10 MB.", 
435																																												type: "danger", 
436																																												title: "", 
437																																												toastProps: { 
438																																													autoClose: 5000 
439
440																																											}); 
441																																											return false; 
442
443																																										return true; 
444
445																																									 
446																																																 
447																																									 
448																																									 
449 
450																																									function editPost${JournalArticleID}() { 
451																																										Liferay.Util.openToast({ 
452																																											message: "Enviando requisição", 
453																																											type: "info", 
454																																											title: "", 
455																																										}); 
456																																										$("#editPost-saveAndClose").prop("disabled", true); 
457																																										 
458																																										var conteudoRelNew = []; 
459																																										var totalLists = document.getElementsByClassName("contRel${JournalArticleID}"); 
460 
461																																										for (var i = 1; i < totalLists.length + 1; i++){ 
462																																											var postSel = document.getElementsByClassName("postName-${JournalArticleID}-" + i)[0]; 
463																																											var valueId = postSel.value; 
464																																											var idPost = document.querySelector("option[value='"+valueId+"']").id; 
465																																											conteudoRelNew.push(idPost);																																										 
466																																										}		 
467																																										 
468																																										 
469																																										const postData = { 
470																																											"titulo": document.getElementById("editPostInputTitle${JournalArticleID}").value, 
471																																											"conteudo": document.getElementById("editPostInputDesc${JournalArticleID}").value, 
472																																											"imagem": document.getElementById("inputPostBase64${JournalArticleID}").value, 
473																																											"link": document.getElementById("postInputLinkMoreInfo${JournalArticleID}").value, 
474																																											"conteudoRelacionado": conteudoRelNew 
475
476																																										 
477																																										fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/postagem/${JournalArticleFrontId}", { 
478																																											method: 'PUT', 
479																																											"headers": { 
480																																												"x-csrf-token": Liferay.authToken, 
481																																												"Content-Type": "application/json" 
482																																											},																																									 
483																																											body: JSON.stringify(postData), 
484 
485																																										}).then((res) => { 
486																																											console.log(res); 
487																																											if (res.status == 200) { 
488																																												Liferay.Util.openToast({ 
489																																													message: 
490																																													"Publicação editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.", 
491																																													type: "success", 
492																																													title: "", 
493																																													toastProps: { 
494																																														autoClose: 5000, 
495
496																																												 
497																																												}); 
498																																												 
499																																												document.getElementById("formularioEditPost${JournalArticleID}").reset(); 
500																																												document.getElementById("imagemCarregadaPost${JournalArticleID}").style.backgroundImage = 
501																																													""; 
502																																												 
503																																											} else { 
504																																												Liferay.Util.openToast({ 
505																																													message: "Erro ao adicionar Artigo", 
506																																													type: "danger", 
507																																													title: "", 
508																																													toastProps: { 
509																																														autoClose: 5000, 
510
511																																												}); 
512
513 
514																																										}); 
515 
516																																										setTimeout(function () { 
517																																											location.reload(); 
518																																										}, 2000); 
519 
520
521 
522																																									 
523																																									function encodeEditImageAsURL${JournalArticleID}() { 
524																																										let file = document.getElementById("inputCarregarImagemPost${JournalArticleID}").files[0]; 
525																																										let reader = new FileReader(); 
526																																										reader.onloadend = () => { 
527																																											if (reader.result) { 
528																																												if (!validImageSize(reader.result)) return; 
529																																												try { 
530																																													const pic_container = document.getElementById("imagemCarregadaPost${JournalArticleID}"); 
531																																													const base64_input = document.getElementById("inputPostBase64${JournalArticleID}"); 
532																																													base64_input.value = reader.result; 
533																																													pic_container.style.backgroundImage = "url(" + reader.result + ")"; 
534 
535																																													const removeImageButton = document.getElementById( 
536																																														"removerImagemPost${JournalArticleID}" 
537																																													); 
538																																													removeImageButton.classList.remove("d-none"); 
539																																												} catch (error) { 
540																																													console.error(error); 
541
542
543																																										}; 
544																																										reader.readAsDataURL(file); 
545
546 
547																																									document 
548																																										.querySelector("#formularioEditPost${JournalArticleID}") 
549																																										.addEventListener("submit", (event) => { 
550																																										event.preventDefault(); 
551																																										editPost${JournalArticleID}(); 
552																																									}); 
553 
554																																									function removeImagemPost${JournalArticleID}() { 
555																																										try { 
556																																											const file_input = document.getElementById("inputCarregarImagemPost${JournalArticleID}"); 
557																																											const pic_container = document.getElementById("imagemCarregadaPost${JournalArticleID}"); 
558																																											const base64_input = document.getElementById("inputPostBase64${JournalArticleID}"); 
559																																											file_input.value = null; 
560																																											base64_input.value = ""; 
561																																											pic_container.style.backgroundImage = null; 
562 
563																																											const removeImageButton = document.getElementById("removerImagemPost${JournalArticleID}"); 
564																																											removeImageButton.classList.add("d-none"); 
565																																										} catch (error) { 
566																																											console.error(error); 
567
568
569 
570																																									document 
571																																										.getElementById("removerImagemPost${JournalArticleID}") 
572																																										.addEventListener("click", removeImagemPost${JournalArticleID}); 
573 
574 
575																																									document 
576																																										.getElementById("inputCarregarImagemPost${JournalArticleID}") 
577																																										.addEventListener("change", encodeEditImageAsURL${JournalArticleID}); 
578 
579 
580																																									function excluirPost${JournalArticleID}() { 
581																																										Liferay.Util.openToast({ 
582																																											message: "Enviando requisição", 
583																																											type: "info", 
584																																											title: "" 
585																																										}); 
586 
587																																										fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/postagem/${JournalArticleFrontId}", { 
588																																											method: 'DELETE', 
589																																											"headers": { 
590																																												"x-csrf-token": Liferay.authToken, 
591																																												"Content-Type": "application/json" 
592
593																																										}) 
594																																											.then(res => { 
595																																											if(res.status == 200) { 
596																																												Liferay.Util.openToast({ 
597																																													message: "Publicação excluida com sucesso", 
598																																													type: "success", 
599																																													title: "", 
600																																													toastProps: { 
601																																														autoClose: 5000 
602
603																																												}) 
604																																												setTimeout(function(){ location.reload(); }, 2000) 
605																																											} else { 
606																																												Liferay.Util.openToast({ 
607																																													message: "Erro ao excluir publicação", 
608																																													type: "danger", 
609																																													title: "", 
610																																													toastProps: { 
611																																														autoClose: 5000 
612
613																																												}) 
614
615																																										}); 
616
617 
618 
619																																									</#if> 
620 
621 
622 
623																																									var button = document.querySelector('[data-target="#collapseID${JournalArticleID}"]'); 
624 
625																																									var chevron = button.querySelector("i.fa-solid"); 
626 
627																																									button.addEventListener("click", function () { 
628																																										if (chevron.classList.contains("fa-chevron-up")) { 
629																																											chevron.classList.remove("fa-chevron-up"); 
630																																											chevron.classList.add("fa-chevron-down"); 
631																																										} else { 
632																																											chevron.classList.remove("fa-chevron-down"); 
633																																											chevron.classList.add("fa-chevron-up"); 
634
635																																									}); 
636 
637 
638 
639 
640																																								</script> 
641 
642 
643 
644 
645																																								</#list> 
646																																							</#if> 
647																																						</div> 
648																																					</div> 
649 
650																																				<style> 
651																																					.bioec_post_img { 
652																																						overflow: hidden; 
653																																						background-size: contain; 
654																																						background-position: center; 
655																																						background-repeat: no-repeat; 
656
657 
658																																					.bioec_post_img_placeholder { 
659																																						width: 140px; 
660																																						height: 140px; 
661																																						background-color: #E8ECEF; 
662																																						display: flex; 
663																																						flex-direction: column; 
664																																						align-items: center; 
665																																						justify-content: center; 
666																																						font-size: 14px; 
667																																						color: #5B5C61; 
668
669 
670																																					.bioec_post_img_placeholder i { 
671																																						font-size: 44px; 
672
673 
674 
675																																					.pagination-items-per-page.active > a,  
676																																					.pagination-items-per-page.active > button,  
677																																					.pagination-items-per-page.show > a,  
678																																					.pagination-items-per-page.show > button, 
679																																					.page-item.active .page-link,  
680																																					.page-item.show .page-link{ 
681																																						border-color: #4ECD66; 
682																																						background-color: #4ECD66; 
683
684 
685																																					.pagination-results, 
686																																					.pagination-items-per-page > a,  
687																																					.pagination-items-per-page > button, 
688																																					.pagination-items-per-page > a:hover,  
689																																					.pagination-items-per-page > button:hover, 
690																																					.page-link{ 
691																																						color: #4ebe66; 
692
693 
694																																					.bioec-profile-post-main{ 
695																																						display: flex; 
696																																						gap: 40px; 
697																																						flex-direction: column; 
698																																						padding-bottom: 20px; 
699
700																																					.bioec-profile-post-main h5{ 
701																																						font-weight: 700; 
702
703																																					.bioec-profile-post-main h5, .bioec-profile-post-main p{ 
704																																						color: #5B5C61; 
705																																						margin-bottom: 0px; 
706																																						font-size: 16px; 
707 
708
709 
710																																					.bioec-profile-post-main #post-lista-container>div{ 
711																																						border: 1px #BEBEBE solid;  
712																																						padding: 24px 24px 0 24px; 
713																																						margin-bottom: 40px; 
714																																						display: grid; 
715																																						grid-row-gap: 24px; 
716																																						grid-template-columns: 24px 12px 1fr 15px; 
717																																						grid-template-areas:  
718																																							"ck . tit arrw" 
719																																							"desc desc desc desc" 
720																																							"clps clps clps clps"; 
721
722 
723																																					.bioec-profile-post-main .lista-checkmark { grid-area: ck; } 
724																																					.bioec-profile-post-main .lista-checkmark i { 
725																																						font-size: 24px; 
726
727 
728																																					.bioec-profile-post-main .lista-pic { grid-area: pic; display: flex; justify-content: center;} 
729																																					.bioec-profile-post-main .lista-arrow { grid-area: arrw; } 
730 
731																																					.bioec-profile-post-main .lista-titulo {  
732																																						grid-area: tit;  
733																																						display: flex;  
734																																						flex-direction: column; 
735																																						justify-content: center; 
736 
737
738 
739																																					.bioec-profile-post-main .lista-titulo h5{ 
740																																						margin-bottom: 0px; 
741																																						font-weight: 400; 
742																																						font-size: 16px; 
743																																						line-height: 150%; 
744																																						text-transform: uppercase; 
745																																					}  
746 
747																																					.bioec-profile-post-main .lista-desc { 
748																																						grid-area: desc;  
749																																						display: flex; 
750																																						align-items: center; 
751																																						gap: 46px; 
752																																					}  
753 
754																																					.bioec-profile-post-main .lista-desc > div { 
755																																						height: 138px; 
756
757 
758																																					.bioec-profile-post-main .lista-desc img { 
759																																						height: 100%; 
760
761 
762																																					.bioec-profile-post-main .lista-desc p { 
763																																						margin: 0; 
764																																						font-weight: 700; 
765																																						font-size: 16px; 
766																																						line-height: 150%; 
767
768 
769																																					.bioec-profile-post-main a{ 
770																																						color: #5B5C61; 
771
772 
773																																					.post-port{ 
774																																						border: 1px #BEBEBE solid;  
775																																						padding: 24px; 
776																																						display: flex; 
777																																						flex-direction: column; 
778																																						align-items: center; 
779																																						gap: 24px; 
780
781 
782																																					.post-port p{ 
783																																						text-align: center;	 
784 
785
786 
787																																					.post-port div{ 
788																																						display: flex; 
789																																						justify-content: space-between; 
790																																						width: min(558px, 100%); 
791
792 
793																																					.button-empty { 
794																																						border: solid 1px #4ECD66; 
795																																						padding: 8px 24px; 
796																																						color: #333244; 
797																																						transition: 250ms; 
798
799 
800																																					.button-empty:hover{ 
801																																						background-color: #4ECD66; 
802
803 
804																																					.button-filled { 
805																																						background-color: #4ECD66; 
806																																						border: solid 1px #4ECD66; 
807																																						padding: 8px 24px; 
808																																						color: #333244; 
809																																						transition: 250ms; 
810 
811
812 
813																																					.button-filled:hover{ 
814																																						background-color: transparent; 
815
816 
817																																					.bioec-profile-post-main .lista-footnote {  
818 
819																																						display: flex; 
820																																						justify-content: space-between; 
821																																						border-top: 1px solid #E8ECEF; 
822																																						padding-top: 12px; 
823																																						font-size: 14px; 
824																																						font-weight: 300; 
825																																						gap: 15px; 
826																																						color: #5B5C61; 
827 
828
829																																					.lista-collapse{ 
830																																						display: flex; 
831																																						flex-direction: column; 
832																																						gap: 24px; 
833																																						grid-area: clps; 
834																																						padding-bottom: 24px; 
835
836 
837																																					.lista-details{ 
838																																						display: flex; 
839																																						justify-content: flex-start; 
840																																						gap: 24px; 
841																																						color: #5B5C61; 
842
843																																					.lista-pic img { 
844																																						max-height: 138px; 
845																																						max-width: 138px; 
846
847 
848																																					.bioec-profile-post-main p{ 
849 
850
851 
852																																					.imagemCarregadaPost { 
853																																						height: 100px; 
854																																						width: 100px; 
855																																						background-size: contain; 
856																																						background-position: center; 
857																																						background-repeat: no-repeat; 
858
859 
860 
861																																					.ButtonAddPost { 
862																																						background: #4ECD66; 
863																																						border-radius: 8px; 
864																																						padding: 8px 24px; 
865																																						border: none; 
866																																						font-weight: 700; 
867																																						color: #333244; 
868																																						font-family: 'Roboto'; 
869																																						float: right; 
870																																						text-transform: uppercase; 
871
872																																					.ButtonAddPost:hover{ 
873																																						color: #333244; 
874																																						text-decoration: none; 
875
876 
877																																					.bioec-profile-post-modal label { 
878																																						margin: 0; 
879																																						cursor: default; 
880																																						font-size: 20px; 
881																																						font-weight: 700; 
882																																						color: #5B5C61; 
883
884 
885																																					.bioec-profile-post-modal div { 
886																																						width: 100%; 
887
888 
889																																					#postModal-l1, .postModal-l1 { 
890																																						padding: 18px 24px; 
891																																						display: flex; 
892																																						justify-content: space-between; 
893
894 
895																																					#postModal-l1 img, .postModal-l1 img { 
896																																						cursor: pointer; 
897
898 
899																																					#postModal-l1 h5, .postModal-l1 h5 { 
900																																						margin: 0; 
901																																						font-size: 20px; 
902																																						font-weight: 700; 
903																																						color: #5B5C61; 
904
905 
906																																					#postModal-l2, .postModal-l2 { 
907																																						border-top: 1px solid #E8ECEF; 
908																																						display: grid; 
909																																						grid-template-columns: 1fr 1fr; 
910																																						grid-template-areas: 
911																																							"titu nome" 
912																																							"fone mail" 
913																																							"desc desc" 
914																																							"imagem ." 
915
916																																						column-gap: 24px; 
917																																						row-gap: 40px; 
918																																						padding: 24px; 
919
920 
921																																					#postModal-l2>div, .postModal-l2>div { 
922																																						display: flex; 
923																																						flex-direction: column; 
924																																						gap: 8px; 
925
926 
927																																					#postTitle, .postTitle { 
928																																						grid-area: titu; 
929
930 
931																																					#postName, .postName { 
932																																						grid-area: nome; 
933
934 
935																																					#postTelephone, .postTelephone { 
936																																						grid-area: fone; 
937
938 
939																																					#postEmail, .postEmail { 
940																																						grid-area: mail; 
941
942 
943																																					#postBrand, .postBrand { 
944																																						grid-area: marca; 
945
946 
947																																					#postModal-l2>#postImg, .editPostModal-l2>.postImg { 
948																																						grid-area: imagem; 
949																																						display: flex; 
950																																						flex-direction: row; 
951
952 
953																																					#postDesc, .postDesc { 
954																																						grid-area: desc; 
955 
956
957 
958																																					#postDesc input, .postDesc input { 
959																																						height: 80px; 
960
961 
962																																					.TextImportant{ 
963																																						border-bottom: 1px solid #E8ECEF; 
964																																						padding: 24px; 
965																																						color: #5B5C61;		 
966
967 
968																																					.bioec-profile-post-modal input[type="text"] { 
969																																						border-top: none; 
970																																						border-left: none; 
971																																						border-right: none; 
972																																						border-bottom: 1px solid #BEBEBE; 
973																																						width: 100%; 
974																																						font-size: 16px; 
975 
976
977 
978 
979																																					.bioec-profile-post-modal input[type="text"]:focus-visible { 
980																																						outline: none; 
981																																						border-bottom: 1px solid black; 
982 
983
984 
985																																					.bioec-profile-post-modal .ReqLabel:before { 
986																																						content: "* "; 
987																																						color: #D90000; 
988 
989
990 
991																																					#inputCarregarImagemPost, .inputCarregarImagemPost { 
992																																						display: none; 
993
994 
995																																					#carregarImagem, .carregarImagem  { 
996																																						padding: 8px 24px; 
997																																						border: 1px solid #4ECD66; 
998																																						width: fit-content; 
999																																						transition: 250ms; 
1000 
1001
1002 
1003																																					#carregarImagem:hover, .carregarImagem:hover { 
1004																																						background-color: #4ECD66; 
1005
1006 
1007																																					.button-empty { 
1008																																						border: solid 1px #4ECD66; 
1009																																						padding: 8px 24px; 
1010																																						color: #333244; 
1011																																						transition: 250ms; 
1012																																						font-weight: bold; 
1013
1014 
1015																																					.button-empty:hover { 
1016																																						background-color: #4ECD66; 
1017
1018 
1019																																					.button-filled { 
1020																																						background-color: #4ECD66; 
1021																																						border: solid 1px #4ECD66; 
1022																																						padding: 8px 24px; 
1023																																						color: #333244; 
1024																																						transition: 250ms; 
1025																																						font-weight: bold; 
1026
1027 
1028																																					.button-filled:hover { 
1029																																						background-color: transparent; 
1030
1031 
1032																																					#postModal-l3, .postModal-l3 { 
1033																																						gap: 24px; 
1034																																						display: flex; 
1035																																						justify-content: flex-end; 
1036																																						padding: 24px; 
1037
1038 
1039																																					.modal { 
1040																																						padding: initial !important; 
1041																																						border-radius: 4px !important; 
1042 
1043
1044 
1045																																					.modal a.close-modal { 
1046																																						display: none; 
1047
1048 
1049																																					#removerImagemPost, .removerImagemPost { 
1050																																						background: none; 
1051																																						border: none; 
1052																																						outline: none; 
1053																																						color: #5B5C61; 
1054																																						font-size: 16px; 
1055																																						font-weight: 900; 
1056																																						line-height: 24px; 
1057																																						letter-spacing: 0em; 
1058																																						width: fit-content; 
1059																																						margin-left: 16px; 
1060
1061 
1062 
1063																																					@media(max-width: 964px){ 
1064																																						.lista-pic img { 
1065																																							width: 100%; 
1066																																							max-height: unset; 
1067																																							max-width: unset; 
1068 
1069
1070
1071 
1072																																					@media (max-width: 550px) { 
1073																																						#postModal-l2, .postModal-l2 { 
1074																																							display: flex; 
1075																																							flex-direction: column; 
1076
1077 
1078																																						#postModal-l3, .postModal-l3 { 
1079																																							display: flex; 
1080																																							flex-direction: column; 
1081
1082
1083 
1084																																					@media(max-width: 450px){ 
1085																																						.bioec-profile-post-main .lista-details{ 
1086																																							flex-direction: column; 
1087
1088 
1089																																						.lista-contato{ 
1090																																							text-align: center; 
1091
1092 
1093																																						.bioec-profile-post-main .lista-footnote{ 
1094																																							flex-direction: column; 
1095																																							gap: 10px; 
1096																																							align-items: flex-end; 
1097																																							text-align: right; 
1098
1099
1100 
1101 
1102 
1103 
1104 
1105																																					.bioec-profile-edit-post-modal label { 
1106																																						margin: 0; 
1107																																						cursor: default; 
1108																																						font-size: 20px; 
1109																																						font-weight: 700; 
1110																																						color: #5b5c61; 
1111
1112 
1113																																					.bioec-profile-edit-post-modal small { 
1114																																						font-weight: 300; 
1115																																						font-size: 14px; 
1116																																						line-height: 150%; 
1117																																						color: #5b5c61; 
1118																																						margin-top: -4px; 
1119
1120 
1121																																					.bioec-profile-edit-post-modal div { 
1122																																						/* width: 100%; */ 
1123
1124 
1125																																					#editPostModal-l1, .editPostModal-l1 { 
1126																																						padding: 18px 24px; 
1127																																						display: flex; 
1128																																						justify-content: space-between; 
1129
1130 
1131																																					#editPostModal-l1 h5, .editPostModal-l1 h5 { 
1132																																						line-height: 150%; 
1133																																						margin: 0; 
1134																																						font-size: 20px; 
1135																																						font-weight: 700; 
1136																																						color: #5b5c61; 
1137
1138 
1139																																					#editPostModal-l2, .editPostModal-l2 { 
1140																																						padding: 24px; 
1141
1142 
1143																																					#editPostModal-l2 > div, .editPostModal-l2 > div { 
1144																																						display: flex; 
1145																																						flex-direction: column; 
1146																																						gap: 8px; 
1147																																						margin-bottom: 40px; 
1148
1149 
1150																																					#editPostModal-l2 > div:last-child, .editPostModal-l2 > div:last-child { 
1151																																						margin-bottom: -4px; 
1152
1153 
1154																																					#editPostModal-l2 > #editPostImg, .editPostModal-l2 > .editPostImg { 
1155																																						/* grid-area: imagem; */ 
1156																																						display: flex; 
1157																																						flex-direction: row; 
1158
1159 
1160																																					.importantText { 
1161																																						padding: 24px; 
1162																																						color: #5b5c61; 
1163
1164 
1165																																					.importantText p { 
1166																																						margin-bottom: 0; 
1167
1168 
1169																																					.bioec-profile-edit-post-modal input[type="text"] { 
1170																																						border-top: none; 
1171																																						border-left: none; 
1172																																						border-right: none; 
1173																																						border-bottom: 1px solid #bebebe; 
1174																																						width: 100%; 
1175																																						font-size: 16px; 
1176
1177 
1178 
1179																																					.bioec-profile-edit-post-modal 
1180																																					input[type="text"]:focus-visible { 
1181																																						outline: none; 
1182																																						border-bottom: 1px solid black; 
1183
1184 
1185																																					.bioec-profile-edit-post-modal .reqLabel:before { 
1186																																						content: "* "; 
1187																																						color: #d90000; 
1188
1189 
1190																																					#imagemCarregadaPost, .imagemCarregadaPost { 
1191																																						height: 110px; 
1192																																						width: 110px; 
1193																																						margin-left: 3rem; 
1194																																						background-size: contain; 
1195																																						background-position: center; 
1196																																						background-repeat: no-repeat; 
1197
1198 
1199																																					#removerImagemPost, .removerImagemPost { 
1200																																						background: none; 
1201																																						cursor: pointer; 
1202																																						border: none; 
1203																																						outline: none; 
1204																																						color: #5b5c61; 
1205																																						font-size: 16px; 
1206																																						font-weight: 900; 
1207																																						line-height: 24px; 
1208																																						letter-spacing: 0em; 
1209																																						width: fit-content; 
1210																																						margin-left: 16px; 
1211
1212 
1213																																					#inputCarregarImagemPost, .inputCarregarImagemPost { 
1214																																						display: none; 
1215
1216 
1217																																					#carregarImagemPost, .carregarImagemPost { 
1218																																						padding: 8px 24px; 
1219																																						border: 1px solid #4ecd66; 
1220																																						width: fit-content; 
1221																																						transition: 250ms; 
1222																																						border-radius: 8px; 
1223
1224 
1225																																					#carregarImagemPost:hover, .carregarImagemPost:hover { 
1226																																						background-color: #4ecd66; 
1227
1228 
1229																																					.button-empty { 
1230																																						border: solid 1px #4ecd66; 
1231																																						padding: 8px 24px; 
1232																																						color: #333244; 
1233																																						transition: 250ms; 
1234																																						font-weight: bold; 
1235
1236 
1237																																					.button-empty:hover { 
1238																																						background-color: #4ecd66; 
1239
1240 
1241																																					.button-filled { 
1242																																						background-color: #4ecd66; 
1243																																						border: solid 1px #4ecd66; 
1244																																						padding: 8px 24px; 
1245																																						color: #333244; 
1246																																						transition: 250ms; 
1247																																						font-weight: bold; 
1248
1249 
1250																																					.button-filled:hover { 
1251																																						background-color: transparent; 
1252
1253 
1254																																					#editPostModal-l3, .editPostModal-l3 { 
1255																																						gap: 24px; 
1256																																						display: flex; 
1257																																						justify-content: flex-end; 
1258																																						padding: 15px; 
1259
1260 
1261																																					#editPostModal-l3 button, .editPostModal-l3 button { 
1262																																						text-transform: uppercase; 
1263																																						border-radius: 8px; 
1264
1265 
1266																																					@media (max-width: 550px) { 
1267																																						#editPostModal-l2, .editPostModal-l2  { 
1268																																							display: flex; 
1269																																							flex-direction: column; 
1270
1271 
1272																																						#editPostModal-l3, .editPostModal-l3 { 
1273																																							display: flex; 
1274																																							flex-direction: column; 
1275
1276
1277 
1278																																					/* .modal { 
1279																																					padding: initial !important; 
1280																																					border-radius: 4px !important; 
1281																																					height: initial !important; 
1282
1283 
1284																																					.modal a.close-modal { 
1285																																					display: none; 
1286																																					} */ 
1287 
1288																																					/* final */ 
1289																																					.bioec-profile-post-main .lista-footnote .buttonsActions { 
1290																																						display: flex; 
1291																																						gap: 17px; 
1292
1293 
1294																																					@media (max-width: 992px) { 
1295																																						#post-lista-container { 
1296																																							padding-inline: 15px; 
1297
1298
1299 
1300																																					@media (max-width: 768px) { 
1301																																						.bioec-profile-post-main .lista-desc { 
1302																																							gap: 24px; 
1303																																							flex-direction: column-reverse; 
1304
1305																																						.bioec-profile-post-main .lista-footnote { 
1306																																							flex-direction: column; 
1307																																							align-items: center; 
1308
1309																																						.bioec-profile-post-main .lista-footnote > div { 
1310																																							text-align: center; 
1311
1312																																						.bioec-profile-post-main .lista-footnote .post-type, 
1313																																						.bioec-profile-post-main .lista-footnote .barra-pipe { 
1314																																							display: none; 
1315
1316																																						.bioec-profile-post-main .lista-footnote .lista-author { 
1317																																							display: flex; 
1318																																							gap: 4px; 
1319																																							justify-content: center; 
1320
1321																																						.bioec-profile-post-main .lista-footnote .buttonsActions { 
1322																																							width: 100%; 
1323																																							justify-content: space-between; 
1324
1325
1326 
1327 
1328																																				</style> 
  • Sobre
  • Infraestruturas
  • Demandas
  • Ofertas
  • Publicações
Ordenar
Categoria
Marcador