teste_imagem_teste_testeaaaa
Organização
teste_imagem_teste_testeaaaa
Sobre drop zone
lucas motta Administrador
Infraestruturas drop zone
Um erro ocorreu enquanto processava o modelo.
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">×</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
adfgdfgf
hgsfghfsgh
sem imagem
Contato
54324354236
ghnsfgh
10/04/2023 | 0 cometários
teste pro analytics demanda org
teste pro analytics demanda org
29/06/2023 | 0 cometários
Equipamento para determinação de ponto de fulgor
teste pro analytics demanda org
13/03/2023 | 0 cometários
Reatores de alta pressão em batelada 1L, 2L, 7L
teste pro analytics demanda org
13/03/2023 | 0 cometários
Tensiômetro para baixas tensões interfaciais
teste pro analytics demanda org
13/03/2023 | 0 cometários
Analisador de tamanho de partícula
teste pro analytics demanda org
13/03/2023 | 0 cometários
Potencial Zeta
teste pro analytics demanda org
13/03/2023 | 0 cometários
Analisador de estabilidade coloidal
teste pro analytics demanda org
13/03/2023 | 0 cometários
Análise Termogravimétrica com Calorimetria Exploratória Diferencial (TGA/DSC/DTA)
teste pro analytics demanda org
13/03/2023 | 0 cometários
Equipamento de análise elementar de CHNS/O
teste pro analytics demanda org
13/03/2023 | 0 cometários
Reator de Vidro de baixa pressão
teste pro analytics demanda org
13/03/2023 | 0 cometários
Equipamento para determinação de ponto de fusão
teste pro analytics demanda org
13/03/2023 | 0 cometários
Analisador de área
teste pro analytics demanda org
13/03/2023 | 0 cometários
CG-MS
teste pro analytics demanda org
13/03/2023 | 0 cometários
Ângulo de contato
teste pro analytics demanda org
13/03/2023 | 0 cometários
Tensiômetro
teste pro analytics demanda org
13/03/2023 | 0 cometários
Rotaevaporador
teste pro analytics demanda org
13/03/2023 | 0 cometários
Reator Contínuo de Tanque Agitado de Alta Pressão
teste pro analytics demanda org
13/03/2023 | 0 cometários
Titulador automático
teste pro analytics demanda org
13/03/2023 | 0 cometários
ULTRA-TURRAX®
teste pro analytics demanda org
13/03/2023 | 0 cometários
Ofertas drop zone
Um erro ocorreu enquanto processava o modelo.
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">×</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">×</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
10/04/2023 | 0 comentários
sem imagem
29/06/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários
sem imagem
13/03/2023 | 0 comentários