Nav Bar do usuário deslogado.

Organização

Teste 15/02

An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy136.getOrganization(long)" threw an exception when invoked on com.sun.proxy.$Proxy136 object "com.liferay.portal.service.impl.OrganizationLocalServiceImpl@51e5b32a"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: organization = OrganizationLocalServi...  [in template "34764#34807#null" at line 14, column 17]
----
1<#assign  
2	OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") 
3/> 
4 
5<#assign  
6	viewerHasPrivileges = false 
7	userId = themeDisplay.getUserId() 
8/> 
9 
10<#if userId?? > 
11	<#assign  
12		orgId = _CUSTOM_FIELD_organization.getData()?number 
13		viewerHasPrivileges = OrganizationLocalService.hasUserOrganization(userId, orgId) 
14		organization = OrganizationLocalService.getOrganization(orgId) 
15	/> 
16</#if> 
17 
18<#assign  
19	nome = organization.getName()!"" 
20 	imagem = (viewerHasPrivileges || DDMStructure_Field84114755.getData()!="0")?string(DDMStructure_CampoDeTexto18329557.getData()!"","") 
21	tipo = (viewerHasPrivileges || DDMStructure_Numrico28474992.getData()!="0")?string(DDMStructure_Text61401294.getData()!"","") 
22	tipo = tipo?replace("\n", "") 
23	tipo = tipo?replace("\t", "")	 
24	tipo = tipo?replace("\r", "") 
25	pais = (viewerHasPrivileges || DDMStructure_Field45654872.getData()!="0")?string(DDMStructure_Text47038833.getData()!"","") 
26	cidade = (viewerHasPrivileges || DDMStructure_Field81614178.getData()!="0")?string(DDMStructure_Text38119908.getData()!"","") 
27	estado = (viewerHasPrivileges || DDMStructure_Field89862022.getData()!="0")?string(DDMStructure_Text87845472.getData()!"","")!"" 
28 
29	site = (viewerHasPrivileges || DDMStructure_Field62760436.getData()!="0")?string(DDMStructure_Text98734375.getData()!"","") 
30	instagram = "" 
31	linkedin = (viewerHasPrivileges || DDMStructure_Field18557678.getData()!="0")?string(DDMStructure_Text82629110.getData()!"","")  
32	facebook = "" 
33 
34	sobre = (DDMStructure_Field80037203.getData()!="0")?string(DDMStructure_Text54730891.getData()!"","") 
35	competencias = (DDMStructure_Numrico42321087.getData()!="0")?string(DDMStructure_Text51537691.getData()!"","") 
36	setores = (DDMStructure_Field04200031.getData()!="0")?string("yes","") 
37 
38	instituicao = (viewerHasPrivileges || DDMStructure_Numrico42321087.getData()!="0")?string(DDMStructure_Text31001996.getData()!"","") 
39	tipoDeEntidade = (viewerHasPrivileges || DDMStructure_Numrico28474992.getData()!="0")?string(DDMStructure_Text53411607.getData()!"","") 
40	 
41 
42
43 
44<div class="bioec_org_info_container"> 
45	 
46	<#if viewerHasPrivileges> 
47	<!--<div class="botoesSidebarMobile mb-5"> 
48		<button class="bioec_secondary_button" data-toggle="modal" data-target="#bioec-org-delete-modal"> 
49		EXCLUIR ORGANIZAÇÃO 
50		</button> 
51		<button class="bioec_primary_button" data-toggle="modal" data-target="#bioec-org-edit-modal"> 
52		EDITAR 
53		</button> 
54	</div> --> 
55	</#if> 
56	 
57	<div id="profilePic"> 
58			<#if imagem?trim == ""> 
59			<div class="profilePic-container"> 
60				<i class="fa fa-user"></i> 
61				<a id="btnEditOrgModal" type="button" data-toggle="modal" data-target="#bioec-org-edit-modal"> 
62					<i class="fa fa-edit"></i> 
63				</a> 
64			</div> 
65			<#else> 
66			<div id="ProfilePic_Frame"> 
67				<img src="${imagem}" /> 
68				<a id="btnEditOrgModal" type="button" data-toggle="modal" data-target="#bioec-org-edit-modal"> 
69				<i class="fa fa-edit"></i> 
70			</a> 
71			</div> 
72			</#if> 
73			 
74		</div> 
75	 
76	<#if nome!=""> 
77		<label class="bioec_org_info_label">Nome da Organização</label> 
78		<div class="bioec_org_info_content">${nome}</div> 
79	</#if> 
80	 
81	<#if tipo!=""> 
82		<label class="bioec_org_info_label">Tipo de Organização</label> 
83		<div class="bioec_org_info_content">${tipo}</div> 
84	</#if> 
85	 
86	<#if instituicao!="" && tipo == "Grupo de Pesquisa/Universidade"> 
87		<label class="bioec_org_info_label">Instituição</label> 
88		<div class="bioec_org_info_content">${instituicao}</div> 
89	</#if> 
90	 
91	<#if tipoDeEntidade!="" && tipo == "Investidor/Agência de Fomento"> 
92		<label class="bioec_org_info_label">Tipo de Entidade</label> 
93		<div class="bioec_org_info_content">${tipoDeEntidade}</div> 
94	</#if> 
95	 
96	<#if cidade!=""> 
97		<label class="bioec_org_info_label">Cidade</label> 
98		<div class="bioec_org_info_content">${cidade}</div> 
99	</#if> 
100	 
101	<#if estado!=""> 
102		<label class="bioec_org_info_label">Estado</label> 
103		<div class="bioec_org_info_content">${estado}</div> 
104	</#if> 
105	 
106	<#if pais!=""> 
107		<label class="bioec_org_info_label">País</label> 
108		<div class="bioec_org_info_content">${pais}</div> 
109	</#if> 
110 
111	<div class="bioec_org_info_social_container"> 
112		<#if site != ""> 
113			<a href="${site}" target="_blank" rel="noopener noreferrer"> 
114				<i class="fa-solid fa-laptop"></i> 
115			</a> 
116		</#if> 
117		 
118		<#if instagram != ""> 
119			<a href="${instagram}" target="_blank" rel="noopener noreferrer"> 
120				<i class="fa-brands fa-instagram"></i> 
121			</a> 
122		</#if> 
123		 
124		<#if linkedin != ""> 
125			<a href="${linkedin}" target="_blank" rel="noopener noreferrer"> 
126				<i class="fa-brands fa-linkedin-in"></i> 
127			</a> 
128		</#if> 
129		 
130		<#if facebook != ""> 
131			<a href="${facebook}" target="_blank" rel="noopener noreferrer"> 
132				<i class="fa-brands fa-facebook"></i> 
133			</a> 
134		</#if> 
135		 
136	</div> 
137	 
138	<#if false && viewerHasPrivileges> 
139		<button data-toggle="modal" data-target="#privacyModal" class="bioec_primary_button"> 
140		CONFIGURAÇÕES DE PRIVACIDADE 
141		</button> 
142	</#if> 
143</div> 
144 
145<style> 
146.bioec_org_info_container { 
147    display: flex; 
148    flex-direction: column; 
149    background-color: #E8ECEF; 
150    height: 100%; 
151    padding: 40px 24px 40px 0; 
152
153 
154.bioec_org_info_img_placeholder { 
155    align-self: center; 
156    height: 120px; 
157    width: 120px; 
158    background-color: #595A5F; 
159    border-radius: 50%; 
160    display: flex; 
161    align-items: center; 
162    justify-content: center; 
163    color: var(--white-1); 
164    font-size: 72px; 
165		cursor: default; 
166
167 
168.bioec_org_info_label { 
169    display: block; 
170    font-weight: 700; 
171    font-size: 20px; 
172    line-height: 150%; 
173    color: #5B5C61; 
174    margin-bottom: 8px; 
175    margin-top: 24px; 
176    cursor: text; 
177
178 
179.bioec_org_info_content { 
180    display: block; 
181    font-weight: 400; 
182    font-size: 16px; 
183    line-height: 150%; 
184    color: #5B5C61; 
185    border-bottom: 1px solid #BEBEBE; 
186    padding-bottom: 4px; 
187
188 
189.bioec_org_info_social_container { 
190    display: flex; 
191    flex-direction: row; 
192    align-items: center; 
193    justify-content: center; 
194    margin: 40px 0; 
195
196 
197.bioec_org_info_social_container a { 
198    font-size: 35px; 
199    color: #5B5C61; 
200    margin: 0 15px; 
201
202 
203.botoesSidebarMobile{ 
204display: none; 
205justify-content: flex-end; 
206gap: 20px; 
207
208#profilePic { 
209    display: flex; 
210    justify-content: center; 
211    width: 120px; 
212    height: 120px; 
213    margin: auto; 
214		position: relative; 
215
216 
217#profilePic a:hover {  
218	text-decoration: none; 
219
220 
221#profilePic a#btnEditOrgModal { 
222	text-decoration: none; 
223	position: absolute; 
224        right: 0; 
225        bottom: 0; 
226        color: var(--white); 
227        background-color: var(--color-3); 
228        height: 40px; 
229        width: 40px; 
230        border-radius: 50%; 
231        border: none; 
232        outline: none; 
233        display: flex; 
234        align-items: center; 
235        justify-content: center; 
236        padding: 0; 
237        font-size: 18px; 
238	 
239
240 
241#ProfilePic_Frame { 
242    border-radius: 50%; 
243    width: 100%; 
244    height: 100%; 
245		overflow: hidden; 
246
247 #ProfilePic_Frame img { 
248	width: 100%; 
249  height: 100%; 
250  object-fit: cover; 
251
252 
253.profilePic-container { 
254	color: #FFF; 
255	background-color: #595A5F; 
256	border-radius: 50%; 
257	position: relative; 
258	display: flex; 
259	align-items: center; 
260	justify-content: center; 
261	padding: 35px; 
262	width: 100%; 
263  height: 100%; 
264	font-size: 70px; 
265
266 
267 
268@media (max-width: 1200px) { 
269	.bioec_org_info_container { 
270		padding: 40px 24px; 
271
272
273 
274@media (max-width: 994px) { 
275.botoesSidebarMobile{ 
276display: flex; 
277
278
279</style> 
An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy136.getOrganization(long)" threw an exception when invoked on com.sun.proxy.$Proxy136 object "com.liferay.portal.service.impl.OrganizationLocalServiceImpl@51e5b32a"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: organization = OrganizationLocalServi...  [in template "34764#34807#null" at line 20, column 17]
----
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	hasPrivileges = false 
8	userId = themeDisplay.getUserId() 
9/> 
10 
11<#assign  
12	orgTypes = ["Entidade Governamental","Associação","Outras ICT's","Comunidade Tradicional/Cooperativa","Startup", 
13	"Entidade do Terceiro Setor","Investidor/Agência de Fomento","Grupo de Pesquisa/Universidade","Empresa"] 
14/> 
15 
16<#if userId?? > 
17<#assign  
18	  orgId = _CUSTOM_FIELD_organization.getData()?number  
19		hasPrivileges = OrganizationLocalService.hasUserOrganization(userId, orgId) 
20		organization = OrganizationLocalService.getOrganization(orgId) 
21/> 
22</#if> 
23 
24<#if hasPrivileges> 
25	<#assign  
26		organization = OrganizationLocalService.getOrganization(_CUSTOM_FIELD_organization.getData()?number) 
27		articleId = organization.getExpandoBridge().getAttribute("journal-article") 
28		journalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),articleId?c)  
29		articleXml = journalArticle.getDocument().getRootElement() 
30 
31		setoresXml = articleXml.selectNodes("dynamic-element[@name='Text40807358']") 
32		setores = "" 
33	/> 
34	<#list setoresXml as setor> 
35		<#assign setores =  setores + "'" + setor.getStringValue()?trim + "'," > 
36	</#list> 
37 
38    <button class="bioec_secondary_button mx-3" data-toggle="modal" style="display: flex;margin-left: auto !important;margin-right: auto !important;margin-top: 24px;" data-target="#bioec-org-delete-modal">EXCLUIR ORGANIZAÇÃO</button> 
39	<!-- <div class="mt-4 d-md-flex d-none align-items-center justify-content-end"> 
40		<button class="bioec_primary_button bioec_editar" data-toggle="modal" data-target="#bioec-org-edit-modal">EDITAR</button> 
41	</div> --> 
42	 
43	<#-- MODAL DE EXLUIR ORGANIZAÇÃO --> 
44	<div id="bioec-org-delete-modal" class="modal fade" style="display: none;" role="dialog" aria-hidden="true"> 
45		<div class="modal-dialog" role="document"> 
46			<div class="modal-content px-4 py-3"> 
47				<div class="modal-header"> 
48					<h5 class="modal-title">Excluir organização</h5> 
49					<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
50						<span aria-hidden="true">&times;</span> 
51					</button> 
52				</div> 
53				<div class="d-flex justify-content-end py-3"> 
54					<button type="button" class="bioec_secondary_button mx-3" data-dismiss="modal">CANCELAR</button> 
55        	<button type="button" class="bioec_primary_button" onclick="deleteOrg()" >CONTINUAR</button> 
56				</div> 
57			</div> 
58		</div> 
59	</div> 
60	 
61 
62     
63			<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /> 
64			<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js" integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> 
65			<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script> 
66			<link 
67						rel="stylesheet" 
68						href="https://cdnjs.cloudflare.com/ajax/libs/croppie/2.6.5/croppie.min.css" 
69						integrity="sha512-zxBiDORGDEAYDdKLuYU9X/JaJo/DPzE42UubfBw9yg8Qvb2YRRIQ8v4KsGHOx2H1/+sdSXyXxLXv5r7tHc9ygg==" 
70						crossorigin="anonymous" 
71						referrerpolicy="no-referrer" 
72						/> 
73 
74			<script 
75							src="https://cdnjs.cloudflare.com/ajax/libs/croppie/2.6.5/croppie.min.js" 
76							integrity="sha512-Gs+PsXsGkmr+15rqObPJbenQ2wB3qYvTHuJO6YJzPe/dTLvhy0fmae2BcnaozxDo5iaF8emzmCZWbQ1XXiX2Ig==" 
77							crossorigin="anonymous" 
78							referrerpolicy="no-referrer" 
79			></script> 
80 
81 
82<style> 
83 
84				.bioec_profile-form h1 { 
85					font-weight: 400; 
86					font-size: 39px; 
87					line-height: 150%; 
88					color: #5B5C61; 
89
90 
91				.bioec_profile-form-control { 
92					margin-bottom: 40px; 
93
94 
95				.bioec_profile-form-control label { 
96					color: #5B5C61; 
97					font-size: 20px; 
98					font-weight: 700; 
99					line-height: 30px; 
100					margin-bottom: 8px; 
101
102 
103				.bioec_profile-form-control label[required]::before { 
104					content: "*"; 
105					color: #ff0000; 
106					margin-right: 0.4rem; 
107
108 
109				.bioec_profile-form-control input, 
110				.bioec_profile-form-control select { 
111					border-radius: 0; 
112					outline: none; 
113					border: none; 
114					border-bottom: 1px solid #BEBEBE; 
115					font-size: 16px; 
116					font-weight: 400; 
117					line-height: 24px; 
118					color: #5B5C61; 
119					width: 100%; 
120					background-color: transparent; 
121						padding: 2px; 
122						margin: 0; 
123
124 
125				.submit-attempted .bioec_profile-form-control input:invalid, 
126				.submit-attempted .bioec_profile-form-control select:invalid { 
127						border-bottom: 1px solid #ff0000; 
128
129 
130				.bioec_profile-flex-container { 
131					display: flex; 
132					flex-direction: row; 
133					justify-content: space-between; 
134					flex-wrap: wrap; 
135
136 
137				.bioec_profile-flex-container .bioec_profile-form-control { 
138					width: 50%; 
139					padding-right: 1.5rem; 
140
141 
142				.bioec_profile-form-control textarea { 
143					font-size: 16px; 
144					font-weight: 400; 
145					line-height: 24px; 
146					color: #5B5C61; 
147					width: 100%; 
148					background-color: transparent; 
149					border-radius: 0; 
150					border: 1px solid #BEBEBE; 
151					resize: none; 
152					outline: none; 
153					margin-top: 24px; 
154
155 
156				.modal-header h1{ 
157				color: #5B5C61; 
158				margin-bottom: 0px; 
159				font-size: 25px; 
160				line-height: 58.5px; 
161				font-weight: 400; 
162
163 
164				@media (max-width: 768px) { 
165					.bioec_profile-flex-container .bioec_profile-form-control { 
166						margin-bottom: 1.5rem; 
167						width: 100%; 
168						padding-right: 0rem; 
169
170
171</style> 
172 
173<script> 
174 
175function deleteOrg() { 
176  Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});  
177 	fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/profile-management/organization/${_CUSTOM_FIELD_organization.getData()}",  
178
179			method: "DELETE", 
180			headers: { 
181				"x-csrf-token": Liferay.authToken, 
182				"Content-Type": "application/json", 
183        "Accept": "application/json" 
184
185		}) 
186		.then( Liferay.Util.openToast({ 
187            message: "Estamos processando seu arquivo. Favor aguarde por alguns segundos e redireciorameos você automaticamente.", 
188            type: "success", 
189            title: "", 
190            toastProps: { 
191                autoClose: 2000 
192
193        })) 
194		.then(setTimeout(() => { window.location.href = Liferay.ThemeDisplay.getPortalURL() + "/meu-perfil#deleteOrg" }, 2000)) 
195		 
196		 
197 
198
199 
200		 
201	 
202</script> 
203	 
204</#if> 
An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy136.getOrganization(long)" threw an exception when invoked on com.sun.proxy.$Proxy136 object "com.liferay.portal.service.impl.OrganizationLocalServiceImpl@51e5b32a"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: organization = OrganizationLocalServi...  [in template "34764#34807#null" at line 20, column 17]
----
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	hasPrivileges = false 
8	userId = themeDisplay.getUserId() 
9/> 
10 
11<#assign  
12	orgTypes = ["Entidade Governamental","Associação","Outras ICT's","Comunidade Tradicional/Cooperativa","Startup", 
13	"Entidade do Terceiro Setor","Investidor/Agência de Fomento","Grupo de Pesquisa/Universidade","Empresa"] 
14/> 
15 
16<#if userId?? > 
17<#assign  
18	  orgId = _CUSTOM_FIELD_organization.getData()?number  
19		hasPrivileges = OrganizationLocalService.hasUserOrganization(userId, orgId) 
20		organization = OrganizationLocalService.getOrganization(orgId) 
21/> 
22</#if> 
23 
24<#if hasPrivileges> 
25	<#assign  
26		organization = OrganizationLocalService.getOrganization(_CUSTOM_FIELD_organization.getData()?number) 
27		articleId = organization.getExpandoBridge().getAttribute("journal-article") 
28		journalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),articleId?c)  
29		articleXml = journalArticle.getDocument().getRootElement() 
30 
31		setoresXml = articleXml.selectNodes("dynamic-element[@name='Text40807358']") 
32		setores = "" 
33	/> 
34	<#list setoresXml as setor> 
35		<#assign setores =  setores + "'" + setor.getStringValue()?trim + "'," > 
36	</#list> 
37 
38	<div class="mt-4 d-md-flex d-none align-items-center justify-content-end" style="display:none!important;" > 
39		<button class="bioec_secondary_button mx-3" data-toggle="modal" data-target="#bioec-org-delete-modal"  >EXCLUIR ORGANIZAÇÃO</button> 
40		<button class="bioec_primary_button bioec_editar" data-toggle="modal" data-target="#bioec-org-edit-modal" >EDITAR</button> 
41	</div> 
42	 
43 
44	 
45 
46 
47	<#-- MODAL DE EXLUIR ORGANIZAÇÃO --> 
48	<div id="bioec-org-delete-modal" class="modal fade" style="display: none;" role="dialog" aria-hidden="true"> 
49		<div class="modal-dialog" role="document"> 
50			<div class="modal-content px-4 py-3"> 
51				<div class="modal-header"> 
52					<h5 class="modal-title">Excluir organização</h5> 
53					<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
54						<span aria-hidden="true">&times;</span> 
55					</button> 
56				</div> 
57				<div class="d-flex justify-content-end py-3"> 
58					<button type="button" class="bioec_secondary_button mx-3" data-dismiss="modal">CANCELAR</button> 
59        	<button type="button" class="bioec_primary_button" onclick="deleteOrg()" >CONTINUAR</button> 
60				</div> 
61			</div> 
62		</div> 
63	</div> 
64	 
65	<#-- MODAL DE EDIÇÃO --> 
66	<div id="bioec-org-edit-modal" class="modal fade" style="display: none;"  tabindex="-1" role="dialog" aria-hidden="true"> 
67		<div class="modal-dialog modal-lg" role="document"> 
68			<div class="modal-content px-4 py-3"> 
69			 
70			 <div class="modal-header">  
71			 <h1>Sobre a organização</h1>  
72					 <button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="closeAndReset()"> 
73						<span aria-hidden="true">&times;</span> 
74					</button> 
75				</div> 
76					  
77			<div class="modal-body"> 
78        <form id="organization-form" class="bioec_profile-form"> 
79<#assign imagemOrg = DDMStructure_CampoDeTexto18329557.getData() > 
80 
81           <div class="d-flex justify-content-center my-5" style=" 
82							flex-direction: column; 
83							align-items: center; 
84						"> 
85								<div id="orgPicContainer" class="bioec_form-picture-container" ${(imagemOrg != "")?string("style='background-image: url("+ imagemOrg +")'","")} > 
86										<i id="user-icon" class="fa fa-user"></i> 
87										<button type="button" onclick="openFileSelectImagem()"> 
88												<i class="fa fa-edit"></i> 
89										</button>  
90								</div> 
91								<input name="imagem" id="file-input" class="d-none" type="file" onchange="encodeImageAsURL(this)" accept="image/*"/> 
92								<input class="d-none" id="inputOrgBase64OrgModal" /> 
93								<button type="button" onclick="removeImageOrgModal(this)" id="removerImagemOrgModal" ${(imagemOrg != "")?string("", "class='d-none'")}> 
94									<i class="fa fa-trash"></i> Remover imagem 
95								</button>   
96						</div> 
97 
98            <div class="bioec_profile-flex-container"> 
99                <div class="bioec_profile-form-control"> 
100                    <label required>Tipo de Organização</label> 
101                    <select id="tipo-de-organizacao" name="tipo" required title="Selecionar" value="${DDMStructure_Text61401294.getData()}"> 
102                        <option value="" disabled selected>Selecionar</option> 
103                        <#list orgTypes as type> 
104													<option value="${type}" ${(type==DDMStructure_Text61401294.getData())?string("selected","")} >${type}</option> 
105												</#list> 
106                    </select> 
107                </div> 
108 
109                <div class="bioec_profile-form-control"> 
110                    <div id="org-tipo-6" class="d-none"> 
111                        <label>Tipo de entidade</label> 
112                        <input name="investimento" type="text" id="tipodeentidadeOrganizacao" value="${DDMStructure_Text53411607.getData()}" /> 
113                    </div> 
114                    <div id="org-tipo-7" class="d-none"> 
115                        <label>Instituição</label> 
116                        <input name="instituicao" type="text" id="instituicaoOrganizacao" value="${DDMStructure_Text31001996.getData()}" /> 
117                    </div> 
118                </div> 
119								 
120                <div class="bioec_profile-form-control"> 
121                    <label required for="nomeOrganizacao">Nome da Organização</label> 
122                    <input id="nomeOrganizacao" name="nome" type="text" required value="${organization.getName()}" /> 
123                </div> 
124						 
125                <div class="bioec_profile-form-control"> 
126                    <label for="cidadeOrganizacao">Cidade</label> 
127                    <input id="cidadeOrganizacao" name="cidade" type="text" value="${DDMStructure_Text38119908.getData()}" /> 
128                </div> 
129							 
130                <div class="bioec_profile-form-control"> 
131                    <label for="estadoOrganizacao">Estado</label> 
132                    <input id="estadoOrganizacao" name="estado" type="text" value="${DDMStructure_Text87845472.getData()}" /> 
133                </div> 
134				 
135								 
136                <div class="bioec_profile-form-control"> 
137                    <label for="paisOrganizacao">País</label> 
138                    <input id="paisOrganizacao" name="pais" type="text" value="${DDMStructure_Text47038833.getData()}" /> 
139                </div> 
140								 
141            </div> 
142 
143            <h1 class="my-5">Informações digitais</h1> 
144 
145            <div class="bioec_profile-flex-container"> 
146                <div class="bioec_profile-form-control"> 
147                    <label for="siteOrganizacao">Site</label> 
148                    <input id="siteOrganizacao" name="site" type="url" value="${DDMStructure_Text98734375.getData()}" /> 
149                </div> 
150                <div class="bioec_profile-form-control"> 
151                    <label for="linkedinOrganizacao">Linkedin</label> 
152                    <input id="linkedinOrganizacao" name="linkedin" type="url" value="${DDMStructure_Text82629110.getData()}" /> 
153                </div> 
154                <#-- <div class="bioec_profile-form-control"> 
155                    <label>Instagram</label> 
156                    <input name="instagram" type="url" value="${Text28208517.getData()}" /> 
157                </div> 
158                <div class="bioec_profile-form-control"> 
159                    <label>Facebook</label> 
160                    <input name="facebook" type="url" value="${Text71851201.getData()}" /> 
161                </div> --> 
162            </div> 
163 
164            <h1 class="my-5">Campo de atuação</h1> 
165 
166            <div> 
167                <div class="bioec_profile-form-control"> 
168                    <label required for="sobreOrganizacao">Sobre a organização</label> 
169                    <textarea id="sobreOrganizacao" name="sobre" rows="5" >${DDMStructure_Text54730891.getData()}</textarea> 
170                </div> 
171 
172                <div class="bioec_profile-form-control"> 
173                    <label required for="competenciasOrganizacao">Competências tecnológicas</label> 
174                    <textarea id="competenciasOrganizacao" name="competencias" rows="5" >${DDMStructure_Text51537691.getData()}</textarea> 
175                </div> 
176								 
177                <div class="bioec_profile-form-control"> 
178                    <label required>Setores de atuação</label> 
179                    <select id="setores-de-atuacao" name="setores" multiple="multiple" style="width: 100%"> 
180                        <option value="Agroindústria">Agroindústria</option> 
181                        <option value="Água Potável e Saneamento">Água Potável e Saneamento</option> 
182                        <option value="Alimentos e Bebidas">Alimentos e Bebidas</option> 
183                        <option value="Análise de Ciclo de Vida">Análise de Ciclo de Vida</option> 
184                        <option value="Biotecnologia">Biotecnologia</option> 
185                        <option value="Educação">Educação</option> 
186                        <option value="Energia e Biocombustíveis">Energia e Biocombustíveis</option> 
187                        <option value="Higiene Pessoal, Perfumaria e Cosméticos">Higiene Pessoal, Perfumaria e Cosméticos</option> 
188                        <option value="Inovação">Inovação</option> 
189                    </select> 
190                </div> 
191								 
192							<!--	<h1 class="mt-5 mb-4">Você na organização</h1> 
193 
194								<div class="bioec_profile-flex-container"> 
195										<div class="bioec_profile-form-control"> 
196												<label>Cargo/Função</label> 
197												<input name="cargo" type="text" value="Administrador" /> 
198										</div> 
199								</div> --> 
200								 
201            </div> 
202 
203            <div class="d-flex justify-content-center my-5"> 
204                <button type="button" data-dismiss="modal" class="bioec_secondary_button mx-3" onclick="closeAndReset()">CANCELAR</a> 
205                <button type="button" class="bioec_primary_button mx-3" onclick="submitOrganization()">SALVAR</button> 
206            </div> 
207						 
208        </form> 
209				</div> 
210				</div> 
211				</div> 
212    </div> 
213		 
214			<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /> 
215			<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js" integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> 
216			<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script> 
217 
218<script> 
219 
220 
221function toggleSpecialFields(value) { 
222	if(value == "Investidor/Agência de Fomento") { 
223		$("#org-tipo-6").removeClass("d-none") 
224		$("#org-tipo-7").addClass("d-none") 
225	} else if(value == "Grupo de Pesquisa/Universidade") { 
226		$("#org-tipo-7").removeClass("d-none") 
227		$("#org-tipo-6").addClass("d-none") 
228	} else { 
229		$("#org-tipo-6").addClass("d-none") 
230		$("#org-tipo-7").addClass("d-none") 
231
232
233 
234$("#tipo-de-organizacao").change((obj) => { 
235	const v = obj.target.value 
236	toggleSpecialFields(v) 
237}); 
238 
239toggleSpecialFields(document.getElementById("tipo-de-organizacao").value) 
240 
241$(document).ready(() => { 
242	$("#setores-de-atuacao").select2({ 
243		language: { 
244			noResults: () => "Nenhum resultado encontrado", 
245		}, 
246		selectionCssClass: "bioec_multi_select", 
247	}); 
248	$("#setores-de-atuacao").val([${setores}]); 
249	$("#setores-de-atuacao").trigger('change'); 
250	 
251	let urlSearchParams = new URLSearchParams(window.location.search); 
252	 
253	if( urlSearchParams.has('popup_editar') == 1){ 
254		$('.bioec_editar').click(); 
255		urlSearchParams.delete('popup_editar');		 
256		if (history.replaceState) { 
257        let searchString = urlSearchParams.toString().length > 0 ? '?' + urlSearchParams.toString() : ''; 
258        let newUrl = window.location.protocol + "//" + window.location.host + window.location.pathname +  searchString + window.location.hash; 
259        history.replaceState(null, '', newUrl); 
260
261
262}); 
263 
264function validImageSize(base64="") { 
265	const decoded = atob(base64.substring(base64.indexOf(',') + 1)); 
266	const sizeMB = decoded.length / 1e+6; 
267	console.log("MB: " + decoded.length / 1e+6); 
268	if(sizeMB > 10) { 
269		Liferay.Util.openToast({ 
270			message: "O tamanho da imagem não deve ultrapassar 10 MB.", 
271			type: "danger", 
272			title: "", 
273			toastProps: { 
274				autoClose: 5000 
275
276    }) 
277		return false 
278
279	return true 
280
281 
282	function encodeImageAsURL(element) { 
283  	let file = element.files[0]; 
284    let reader = new FileReader(); 
285    reader.onloadend = () => { 
286			if(reader.result)   { 
287				if(!validImageSize(reader.result)) return; 
288				try { 
289				console.log("hi!") 
290					const pic_container = document.getElementById("orgPicContainer") 
291					const base64_input = document.getElementById("inputOrgBase64OrgModal") 
292					base64_input.value = reader.result 
293					pic_container.style.backgroundImage = 'url(' + reader.result + ')' 
294					const removeImageButton = document.getElementById( 
295						"removerImagemOrgModal" 
296					); 
297					const user_icon = document.getElementById("user-icon") 
298					user_icon.style.display = "none"; 
299					removeImageButton.classList.remove("d-none"); 
300				} catch (error) { 
301					console.error(error) 
302
303
304
305		reader.readAsDataURL(file); 
306
307	 
308	function removeImageOrgModal(element) { 
309		try { 
310			const file_input = document.getElementById("file-input"); 
311			const pic_container = document.getElementById("orgPicContainer") 
312			const base64_input = document.getElementById("inputOrgBase64OrgModal"); 
313 
314			file_input.value = null; 
315			base64_input.value = ""; 
316			pic_container.style.backgroundImage = null; 
317			 
318			const user_icon = document.getElementById("user-icon") 
319					user_icon.style.display = "block"; 
320 
321			const removeImageButton = document.getElementById("removerImagemOrgModal"); 
322			removeImageButton.classList.add("d-none"); 
323		} catch (error) { 
324			console.error(error); 
325
326
327 
328function openFileSelectImagem() { 
329	document.getElementById("file-input").click(); 
330
331 
332function initUrl(input, defaulthost) { 
333	const value = input.value; 
334	if(!value) { 
335		input.value = defaulthost; 
336
337
338 
339function submitForm() { 
340console.log("Tentativa de envio") 
341const form = document.getElementById("organization-form") 
342form.classList.add("submit-attempted") 
343
344 
345function closeAndReset() { 
346	document.getElementById("organization-form").reset(); 
347
348				 
349</script> 
350 
351<style> 
352 
353				.bioec_profile-form #removerImagemOrgModal {  
354					background: none; 
355					cursor: pointer; 
356					border: none; 
357					outline: none; 
358					color: #5b5c61; 
359					font-size: 16px; 
360					font-weight: 900; 
361					line-height: 24px; 
362					letter-spacing: 0em; 
363					width: fit-content; 
364					margin-left: 16px;  
365					margin-top: 22px; 
366
367 
368 
369				.bioec_profile-form h1 { 
370					font-weight: 400; 
371					font-size: 39px; 
372					line-height: 150%; 
373					color: #5B5C61; 
374
375 
376				.bioec_profile-form-control { 
377					margin-bottom: 40px; 
378
379 
380				.bioec_profile-form-control label { 
381					color: #5B5C61; 
382					font-size: 20px; 
383					font-weight: 700; 
384					line-height: 30px; 
385					margin-bottom: 8px; 
386
387 
388				.bioec_profile-form-control label[required]::before { 
389					content: "*"; 
390					color: #ff0000; 
391					margin-right: 0.4rem; 
392
393 
394				.bioec_profile-form-control input, 
395				.bioec_profile-form-control select { 
396					border-radius: 0; 
397					outline: none; 
398					border: none; 
399					border-bottom: 1px solid #BEBEBE; 
400					font-size: 16px; 
401					font-weight: 400; 
402					line-height: 24px; 
403					color: #5B5C61; 
404					width: 100%; 
405					background-color: transparent; 
406						padding: 2px; 
407						margin: 0; 
408
409 
410				.submit-attempted .bioec_profile-form-control input:invalid, 
411				.submit-attempted .bioec_profile-form-control select:invalid { 
412						border-bottom: 1px solid #ff0000; 
413
414 
415				.bioec_profile-flex-container { 
416					display: flex; 
417					flex-direction: row; 
418					justify-content: space-between; 
419					flex-wrap: wrap; 
420
421 
422				.bioec_profile-flex-container .bioec_profile-form-control { 
423					width: 50%; 
424					padding-right: 1.5rem; 
425
426 
427				.bioec_profile-form-control textarea { 
428					font-size: 16px; 
429					font-weight: 400; 
430					line-height: 24px; 
431					color: #5B5C61; 
432					width: 100%; 
433					background-color: transparent; 
434					border-radius: 0; 
435					border: 1px solid #BEBEBE; 
436					resize: none; 
437					outline: none; 
438					margin-top: 24px; 
439
440 
441				.bioec_form-picture-container { 
442						color: var(--white); 
443						background-color: #595A5F; 
444						border-radius: 50%; 
445						position: relative; 
446						display: flex; 
447						align-items: center; 
448						justify-content: center; 
449						padding: 35px; 
450						width: 180px; 
451						height: 180px; 
452						font-size: 100px; 
453						background-size: cover; 
454
455 
456				.bioec_form-picture-container[style] > i { 
457						display: none; 
458
459 
460				.bioec_form-picture-container button { 
461						position: absolute; 
462						right: 0; 
463						bottom: 0; 
464						color: var(--white); 
465						background-color: var(--color-3); 
466						height: 40px; 
467						width: 40px; 
468						border-radius: 50%; 
469						border: none; 
470						outline: none; 
471						display: flex; 
472						align-items: center; 
473						justify-content: center; 
474						padding: 0; 
475						font-size: 18px 
476
477 
478				.bioec_multi_select { 
479					font-size: 16px; 
480					font-weight: 400; 
481					line-height: 24px; 
482					color: #5B5C61; 
483					width: 100%; 
484					background-color: transparent; 
485					border-radius: 0 !important; 
486					border: 1px solid #BEBEBE !important; 
487					resize: none; 
488					outline: none; 
489					padding: 12px !important; 
490
491 
492				.bioec_multi_select .select2-selection__choice { 
493					background-color: transparent !important; 
494					margin-left: 12px !important; 
495						margin-top: 0px !important; 
496
497				 
498				.modal-header h1{ 
499				color: #5B5C61; 
500				margin-bottom: 0px; 
501				font-size: 25px; 
502				line-height: 58.5px; 
503				font-weight: 400; 
504
505 
506				@media (max-width: 768px) { 
507					.bioec_profile-flex-container .bioec_profile-form-control { 
508						margin-bottom: 1.5rem; 
509						width: 100%; 
510						padding-right: 0rem; 
511
512
513</style> 
514 
515<script> 
516 
517function deleteOrg() { 
518  Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});  
519 	fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/profile-management/organization/${_CUSTOM_FIELD_organization.getData()}",  
520
521			method: "DELETE", 
522			headers: { 
523				"x-csrf-token": Liferay.authToken, 
524				"Content-Type": "application/json", 
525        "Accept": "application/json" 
526
527		}) 
528		.then( Liferay.Util.openToast({ 
529            message: "Estamos processando seu arquivo. Favor aguarde por alguns segundos e redireciorameos você automaticamente.", 
530            type: "success", 
531            title: "", 
532            toastProps: { 
533                autoClose: 2000 
534
535        })) 
536		.then(setTimeout(() => { window.location.href = Liferay.ThemeDisplay.getPortalURL() + "/meu-perfil#deleteOrg" }, 2000)) 
537		 
538		 
539 
540
541 
542		 
543function submitOrganization() { 
544  Liferay.Util.openToast({ 
545    message: "Enviando requisição", 
546    type: "info", 
547    title: "", 
548  }); 
549  console.log("submitOrganization"); 
550  let site = document.getElementById("siteOrganizacao").value; 
551  let linkedin = document.getElementById("linkedinOrganizacao").value; 
552 
553  if (site != "") { 
554    if ( 
555      !site.startsWith("https://") && 
556      !site.startsWith("http://") && 
557      !site.startsWith("https://www") && 
558      !site.startsWith("http://www") 
559    ) { 
560      Liferay.Util.openToast({ 
561        message: 
562          "O campo 'site' precisa começar com 'https://', 'http://', 'https://www' ou 'http://www' para ser válido", 
563        type: "danger", 
564        title: "", 
565        toastProps: { 
566          autoClose: 5000, 
567        }, 
568      }); 
569      return; 
570
571
572 
573  if (linkedin != "") { 
574    if ( 
575      !linkedin.startsWith("https://www.linkedin.com") && 
576      !site.startsWith("http://www.linkedin.com") && 
577      !linkedin.startsWith("https://linkedin.com") && 
578      !site.startsWith("http://linkedin.com") 
579    ) { 
580      Liferay.Util.openToast({ 
581        message: 
582          "O campo 'linkedin' precisa começar com 'https://www.linkedin.com' ou 'http://www.linkedin.com' com ou sem os 'www.' para ser válido", 
583        type: "danger", 
584        title: "", 
585        toastProps: { 
586          autoClose: 5000, 
587        }, 
588      }); 
589      return; 
590
591
592 
593  fetch( 
594    Liferay.ThemeDisplay.getPortalURL() + 
595      "/o/profile-management/organization/${_CUSTOM_FIELD_organization.getData()}", 
596
597      method: "PUT", 
598      headers: { 
599        "x-csrf-token": Liferay.authToken, 
600        "Content-Type": "application/json", 
601      }, 
602      body: JSON.stringify({ 
603        imagem: document.getElementById("inputOrgBase64OrgModal").value, 
604        tipo: document.getElementById("tipo-de-organizacao").value, 
605        nome: document.getElementById("nomeOrganizacao").value.trim(), 
606        cidade: document.getElementById("cidadeOrganizacao").value, 
607        estado: document.getElementById("estadoOrganizacao").value, 
608        pais: document.getElementById("paisOrganizacao").value, 
609        site: document.getElementById("siteOrganizacao").value, 
610        linkedin: document.getElementById("linkedinOrganizacao").value, 
611        sobre: document.getElementById("sobreOrganizacao").value, 
612        setores: $("#setores-de-atuacao").select2("val"), 
613        competencias: document.getElementById("competenciasOrganizacao").value, 
614        tipodeentidade: document.getElementById("tipodeentidadeOrganizacao") 
615          .value, 
616        instituicao: document.getElementById("instituicaoOrganizacao").value, 
617      }), 
618
619
620    .then( 
621      (response) => 
622        new Promise((resolve, reject) => { 
623          resolve({ 
624            status: response.status, 
625            ok: response.ok, 
626          }).then((r) => console.log(r)); 
627          reject({}).then((c) => console.log(c)); 
628        }) 
629
630    .then((res) => { 
631      if (res.status == "200") { 
632        Liferay.Util.openToast({ 
633          message: "Perfil alterado com sucesso.", 
634          type: "success", 
635          title: "", 
636          toastProps: { 
637            autoClose: 5000, 
638          }, 
639        }); 
640        location.reload(); 
641      } else if(res.status == "302"){ 
642			Liferay.Util.openToast({ 
643            message: "Cadastre uma organização com SITE diferente.", 
644            type: "danger", 
645            title: "Site inserido já existe", 
646            toastProps: { 
647                autoClose: 5000 
648
649        })  
650	} else if(res.status == "409"){ 
651			Liferay.Util.openToast({ 
652            message: "Cadastre uma organização com Nome da Organização diferente.", 
653            type: "danger", 
654            title: "Nome da Organização cadastrada já existe", 
655            toastProps: { 
656                autoClose: 5000 
657
658        }) 
659	}  
660    }) 
661    .catch((e) => console.log(e)); 
662
663 
664		 
665</script> 
666	 
667</#if> 
  • Sobre
  • Infraestruturas
  • Demandas
  • Ofertas
  • Publicações
Sobre drop zone
An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy136.getOrganization(long)" threw an exception when invoked on com.sun.proxy.$Proxy136 object "com.liferay.portal.service.impl.OrganizationLocalServiceImpl@51e5b32a"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: organization = OrganizationLocalServi...  [in template "34764#34807#null" at line 15, column 17]
----
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> 
An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy136.getOrganization(long)" threw an exception when invoked on com.sun.proxy.$Proxy136 object "com.liferay.portal.service.impl.OrganizationLocalServiceImpl@51e5b32a"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: organization = OrganizationLocalServi...  [in template "34764#34807#null" at line 22, column 9]
----
1<#assign  
2	viewerHasPrivileges = false 
3	userId = themeDisplay.getUserId() 
4/> 
5<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
6<#if userId?? > 
7	<#assign  
8		OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") 
9	/> 
10	<#assign  
11		orgId = _CUSTOM_FIELD_organization.getData()?number 
12		viewerHasPrivileges = OrganizationLocalService.hasUserOrganization(userId, orgId) 
13	/> 
14</#if> 
15 
16<#assign  
17	UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService") 
18/> 
19<#assign  
20	orgId = _CUSTOM_FIELD_organization.getData()?number 
21	users = UserLocalService.getOrganizationUsers(orgId) 
22	organization = OrganizationLocalService.getOrganization(orgId) 
23	nomeDaOrg = organization.getName()!"" 
24/> 
25 
26<div class="bioec_org_admins"> 
27		<label>Administradores desse perfil</label> 
28 
29		<#list users as user> 
30		<#assign userArticleId = user.getExpandoBridge().getAttribute("journal-article")!"0" > 
31		 
32		<#assign urlWC = ""> 
33		<#if userArticleId != "0" && userArticleId != ""> 
34		<#assign userArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), userArticleId?string) > 
35		<#assign urlWC = userArticle.getUrlTitle()!""> 
36		</#if> 
37		 
38		 
39			<#assign  
40				nome = user.getFullName() 
41			/> 
42			<div class="bioec_org_admin_container"> 
43				<div class="bioec_org_admin_img_placeholder"> 
44					<i class="fa-solid fa-user"></i> 
45				</div> 
46				<div class="bioec_org_admin_content"> 
47					<b><a style="color: #5B5C61;" href="<#if urlWC != ''>/w/${urlWC}</#if>">${nome}</a></b> 
48					Administrador 
49				</div> 
50				<#if viewerHasPrivileges> 
51				<div class="bioec_org_admin_buttons_container"> 
52					<#if userId != user.getUserId() > 
53						<button class="bioec_org_admin_button d-none" data-toggle="modal" data-target="#bioec-admin-modal"> 
54							<i class="fa-solid fa-pen-to-square"></i> 
55						</button> 
56						<button class="bioec_org_admin_button" onclick="removeAdminFromOrg(${user.getUserId()})"> 
57							<i class="fa-solid fa-trash-can"></i> 
58						</button> 
59					</#if> 
60				</div> 
61				</#if> 
62			</div> 
63		</#list> 
64 
65	<#if viewerHasPrivileges> 
66		<div class="bioec_org_flex_end"> 
67			<#if (1 < users?size)> 
68			<button class="bioec_secondary_button mx-3 mb-4 mb-md-0" data-toggle="modal" data-target="#bioec-leave-modal">DEIXAR DE SER ADMINISTRADOR</button> 
69			</#if> 
70			<button class="bioec_primary_button bioec_modal-adicionar" data-toggle="modal" data-target="#bioec-admin-modal">ADICIONAR ADMINISTRADOR</button> 
71		</div> 
72 
73		<#-- MODAL DE ADICIONAR ADMINISTRADOR --> 
74		<div id="bioec-admin-modal" class="modal fade" style="display: none;" role="dialog" aria-hidden="true"> 
75			<div class="modal-dialog modal-lg" role="document"> 
76				<div class="modal-content"> 
77					<div class="py-3 px-4 d-flex justify-content-between bioec_modal-line"> 
78						<div class="bioec_modal-title">Adicionar administrador</div> 
79						<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
80							<i class="fa-solid fa-xmark"></i> 
81						</button> 
82					</div> 
83					<div class="bioec_modal-form"> 
84						<div class="py-3 px-4 bioec_modal-line"> 
85							<h1>${title.getData()}</h1> 
86							<div class="bioec_modal-form-control">  
87								<label>E-mail do administrador</label>  
88								<input id="admin-email" type="text" placeholder="Digite aqui" value="" >  
89							</div> 
90							<div class="bioec_modal-form-control d-none">  
91								<label>Cargo/Função</label>  
92								<input id="admin-role" type="text" placeholder="Digite aqui" value="" >  
93							</div> 
94						</div> 
95						<div class="py-3 px-4 d-flex justify-content-end"> 
96							<button type="button" class="bioec_secondary_button mx-3" data-dismiss="modal">CANCELAR</button> 
97							<button type="button" class="bioec_primary_button" onclick="addAdminToOrg()">CONTINUAR</button> 
98						</div> 
99					</div> 
100				</div> 
101			</div> 
102		</div> 
103		 
104		<#-- MODAL DE DEIXAR ORGANIZAÇÃO --> 
105		<div id="bioec-leave-modal" class="modal fade" style="display: none;" role="dialog" aria-hidden="true"> 
106			<div class="modal-dialog modal-lg" role="document"> 
107				<div class="modal-content px-4 py-4"> 
108					<div class="d-flex justify-content-between"> 
109						<h5 class="modal-title">Deixar de ser administrador</h5> 
110						<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
111							<span aria-hidden="true">&times;</span> 
112						</button> 
113					</div> 
114					<div class="my-3"> 
115						<div class="mb-3"> 
116							${title.getData()} 
117						</div> 
118						Ao clicar em continuar, a organização será removida do seu perfil. Caso possua outros administradores, ela continuará nos perfis desses usuários. 
119					</div> 
120					<div class="d-flex justify-content-end"> 
121						<button type="button" class="bioec_secondary_button mx-3" data-dismiss="modal">CANCELAR</button> 
122						<button type="button" class="bioec_primary_button" onclick="quitOrganization()" >CONTINUAR</button> 
123					</div> 
124				</div> 
125			</div> 
126		</div> 
127		 
128	</#if> 
129</div> 
130 
131<script> 
132 
133$(document).ready(() => { 
134		let urlSearchParams = new URLSearchParams(window.location.search); 
135	 
136		if( urlSearchParams.has('popup_adicionar_admin') == 1){ 
137		$('.bioec_modal-adicionar').click(); 
138		urlSearchParams.delete("popup_adicionar_admin"); 
139		if (history.replaceState) { 
140        let searchString = urlSearchParams.toString().length > 0 ? '?' + urlSearchParams.toString() : ''; 
141        let newUrl = window.location.protocol + "//" + window.location.host + window.location.pathname +  searchString + window.location.hash; 
142        history.replaceState(null, '', newUrl); 
143
144
145}); 
146 
147 
148 
149 
150function quitOrganization() { 
151			const url = Liferay.ThemeDisplay.getPortalURL() + "/o/profile-management/organization/${_CUSTOM_FIELD_organization.getData()}/user/" + ${userId} 
152		fetch(url, { 
153			method: 'DELETE', 
154			"headers": { 
155				"x-csrf-token": Liferay.authToken, 
156				"Content-Type": "application/json" 
157
158		}) 
159			.then(res => { 
160			if(res.status == "200"){ 
161				Liferay.Util.openToast({ 
162						message: "Você deixou de ser Administrador", 
163						type: "success", 
164						title: "", 
165						toastProps: { 
166								autoClose: 5000 
167
168				}) 
169			location.reload(); 
170			} else {throw "err";} 
171		}) 
172		.catch(() => showErrorToast("Não foi possível adicionar o administrador. Verifique o email e tente novamente")) 
173
174 
175function removeAdminFromOrg(userId) { 
176	console.log(userId) 
177	if(userId) { 
178		const url = Liferay.ThemeDisplay.getPortalURL() + "/o/profile-management/organization/${_CUSTOM_FIELD_organization.getData()}/user/" + userId 
179		fetch(url, { 
180			method: 'DELETE', 
181			"headers": { 
182				"x-csrf-token": Liferay.authToken, 
183				"Content-Type": "application/json" 
184
185		}) 
186		.then(res => { 
187			if(res.status == "200"){ 
188				Liferay.Util.openToast({ 
189					message: "Administrador deletado com sucesso.", 
190					type: "success", 
191					title: "", 
192					toastProps: { 
193							autoClose: 5000 
194
195			}) 
196			location.reload(); 
197			} else {throw "err";} 
198		}) 
199		.catch(() => showErrorToast("Não foi possível adicionar o administrador. Verifique o email e tente novamente")) 
200
201
202 
203function addAdminToOrg() { 
204	const userEmail = document.getElementById("admin-email").value 
205	console.log(userEmail) 
206	if(userEmail) { 
207		const url = Liferay.ThemeDisplay.getPortalURL() + "/o/profile-management/organization/${_CUSTOM_FIELD_organization.getData()}/user/" + userEmail 
208		fetch(url, { 
209			method: 'POST', 
210			"headers": { 
211				"x-csrf-token": Liferay.authToken, 
212				"Content-Type": "application/json" 
213
214		}) 
215		.then(res => { 
216			if(res.status == "200"){ 
217				Liferay.Util.openToast({ 
218						message: "Administrador adicionado com sucesso.", 
219						type: "success", 
220						title: "", 
221						toastProps: { 
222								autoClose: 5000 
223
224				}) 
225			location.reload(); 
226				gtag('event', 'admnistrador_registrado', { 
227				"orgName" : "${nomeDaOrg}" 
228				}); 
229			} else {throw "err";} 
230		}) 
231		.catch(() => showErrorToast("Não foi possível adicionar o administrador. Verifique o email e tente novamente")) 
232
233
234 
235const showErrorToast = message => { 
236        Liferay.Util.openToast({ 
237            message, 
238            type: "danger", 
239            title: "", 
240            toastProps: { 
241                autoClose: 5000, 
242                style: { top: 0 }, 
243
244        }) 
245
246	 
247</script> 
248 
249<style> 
250	.bioec_org_admins { 
251		margin-bottom: 40px; 
252
253 
254	.bioec_org_admins label { 
255		color: #5B5C61; 
256		font-weight: 700; 
257		margin-bottom: 10px; 
258		font-size: 20px; 
259		line-height: 30px; 
260
261 
262	.bioec_org_admin_container { 
263		border: 1px solid #BEBEBE; 
264		padding: 24px; 
265			margin-bottom: 25px; 
266			display: flex; 
267			flex-direction: row; 
268			align-items: center; 
269
270 
271	.bioec_org_flex_end { 
272			display: flex; 
273			flex-direction: row; 
274			align-items: center; 
275			justify-content: end; 
276
277 
278	.bioec_org_admin_img_placeholder { 
279			align-self: center; 
280			height: 48px; 
281			width: 48px; 
282			background-color: #595A5F; 
283			border-radius: 50%; 
284			display: flex; 
285			align-items: center; 
286			justify-content: center; 
287			color: var(--white-1); 
288			font-size: 28px; 
289
290 
291	.bioec_org_admin_content { 
292			font-size: 16px; 
293			color: #5B5C61; 
294			flex: 1; 
295			margin: 0 12px; 
296
297 
298	.bioec_org_admin_content b { 
299			display: block; 
300
301 
302	.bioec_org_admin_button { 
303			color: var(--white-1); 
304			background-color: #595A5F; 
305			border-radius: 8px; 
306			border: none; 
307			outline: none; 
308			width: 34px; 
309			height: 34px; 
310			font-size: 16px; 
311			padding: 0px; 
312			margin-left: 12px; 
313
314 
315	.bioec_org_admin_buttons_container { 
316			display: flex; 
317			flex-direction: row; 
318
319	 
320	.bioec_modal-title { 
321		font-weight: 700; 
322		font-size: 20px; 
323		color: #5B5C61; 
324
325	 
326	.bioec_modal-line { 
327		border-bottom: 1px solid #E8ECEF; 
328
329	 
330	.bioec_modal-form h1 { 
331		font-weight: 400; 
332		font-size: 24px; 
333		line-height: 150%; 
334		color: #5B5C61; 
335		margin-bottom: 40px; 
336
337 
338	.bioec_modal-form-control { 
339		margin-bottom: 24px; 
340
341 
342	.bioec_modal-form-control label { 
343		color: #5B5C61; 
344		font-size: 20px; 
345		font-weight: 700; 
346		line-height: 30px; 
347		margin-bottom: 8px; 
348
349 
350				.bioec_modal-form-control label[required]::before { 
351					content: "*"; 
352					color: #ff0000; 
353					margin-right: 0.4rem; 
354
355 
356				.bioec_modal-form-control input { 
357					border-radius: 0; 
358					outline: none; 
359					border: none; 
360					border-bottom: 1px solid #BEBEBE; 
361					font-size: 16px; 
362					font-weight: 400; 
363					line-height: 24px; 
364					color: #5B5C61; 
365					width: 100%; 
366					background-color: transparent; 
367					padding: 2px; 
368					margin: 0; 
369
370 
371	@media (max-width: 767px) { 
372			.bioec_org_admin_buttons_container { 
373					flex-direction: column; 
374
375			.bioec_org_admin_button { 
376					margin-bottom: 12px; 
377
378			.bioec_org_flex_end { 
379					flex-direction: column; 
380					align-items: center; 
381
382
383</style> 
Infraestruturas drop zone
An error occurred while processing the template.
The following has evaluated to null or missing:
==> autorArticleId  [in template "34764#34807#41130" at line 104, column 46]

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

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

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

| 02/10/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 11/08/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 10/10/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 14/08/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 10/10/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 23/11/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 23/11/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 23/11/2023 | 0 comentários | Publicado por Anônimo
  • Sobre
  • Infraestruturas
  • Demandas
  • Ofertas
  • Publicações
Sort
Category
Tag