EducaixaSearchGlobal

177 resultats  per ''narraci�� d���hist��ries''
Àrea de coneixement
Nivell educatiu
Competències
S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444774" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444774" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#assign journalArticleId = .vars['reserved-article-id'].data/> 
19<#assign userId =themeDisplay.getUserId()/> 
20<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
21 
22<#-- get the content URL --> 
23<#assign jaUrlTitle = article.getUrlTitle() /> 
24<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
25<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
26<#assign valoracionesDisplayAverage = 0/> 
27<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
28    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
29    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
30</#if> 
31 
32<#assign itinerancesActive = UtilsService.getDateRelatedItinerancia(journalArticleId,themeDisplay) /> 
33 
34<#-- Escape title text --> 
35<#assign titleEscaped = "" /> 
36<#if title.getData()??> 
37    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
39    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
43		<#assign titleEscaped = titleEscaped?replace('"','&quot;','r')/> 
44</#if> 
45 
46<#assign subtituloEscaped = "" /> 
47<#if subtitle.getData()??> 
48    <#assign subtituloEscaped = subtitle.getData() /> 
49    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
51</#if> 
52 
53<#-- get image alt --> 
54<#-- En PCC no viene ningun alt para las imagenes--> 
55    <#assign altImage = titleEscaped /> 
56 
57<#-- get image banner --> 
58<#if thumbnail ?? && thumbnail.getData() ?? && thumbnail.getData() != ""> 
59    <#assign imageSrc = thumbnail.getData() /> 
60<#elseif bannerImage?? && bannerImage.getData()?? && bannerImage.getData() != "">   
61    <#assign imageSrc = bannerImage.getData() /> 
62<#else>     
63    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-actividades.png" /> 
64</#if> 
65 
66<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
67<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
68<#assign categories = thesaurusCategories + tagsCategories /> 
69 
70<#-- Login --> 
71<#assign is_signed_in = themeDisplay.isSignedIn()/> 
72<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
73<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
74${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
75${loginURL.setWindowState("POP_UP")} 
76 
77<#assign isAlumno = false /> 
78<#if is_signed_in> 
79    <#assign isAlumno = UtilsService.isAlumno(themeDisplay.getUserId()) /> 
80</#if> 
81 
82<#-- Centers --> 
83<#assign plidCenter = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet") /> 
84<#assign centersURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
85${centersURL.setParameter("mvcRenderCommandName", "get_centers")} 
86${centersURL.setWindowState("POP_UP")} 
87${centersURL.setParameter("articleId", journalArticleId)} 
88<#assign centersBookingURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
89${centersBookingURL.setParameter("mvcRenderCommandName", "get_centers")} 
90${centersBookingURL.setWindowState("POP_UP")} 
91${centersBookingURL.setParameter("articleId", journalArticleId)} 
92${centersBookingURL.setParameter("isBooking", "true")} 
93 
94<#assign language = themeDisplay.getLocale()/> 
95<#assign area_conocimiento = []> 
96<#assign competencias = []> 
97 
98<#list asset.getCategories() as cur_category> 
99	<#if cur_category.vocabularyId == 10515> 
100		<#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
101		<#elseif cur_category.vocabularyId == 401> 
102		<#assign competencias = competencias + [cur_category.getTitle(language)]> 
103	</#if> 
104</#list> 
105 
106<#-- button plan --> 
107<#assign CentersService = serviceLocator.findService("com.educaixa.planner.core.activitylist.service.CenterService")/> 
108<#assign hasCentersToPlan = CentersService.hasCentersToPlan(journalArticleId, themeDisplay)/> 
109<#--  --> 
110 
111<#if FBLCID ?? && FBLCID.getData() ?? && FBLCID.getData() != ""> 
112	<#assign fblcActivityId = FBLCID.getData()?replace(' ','','r') /> 
113</#if> 
114 
115<#-- Identificador symphony itinerante --> 
116<#assign symphonyActivityId = propsUtil.get("symphony.fblcActivityId") /> 
117 
118<#-- W-664 START --> 
119<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")/> 
120 
121<#assign titlesActivityTest = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente.list") /> 
122<#if titlesActivityTest?has_content> 
123<#assign titlesActivityList = titlesActivityTest?split(",") /> 
124<#assign titleEscapedUC = titleEscaped?lower_case /> 
125</#if> 
126<#list titlesActivityList as titleTest> 
127	<#assign titleTestUC = titleTest?lower_case /> 
128	<#if titleEscapedUC==titleTestUC> 
129		<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente") /> 
130	</#if> 
131</#list> 
132<#-- W-664 END --> 
133 
134<div class="cards element row" id="1" style=""> 
135    <div class="col-lg-12"> 
136            <div class="element-img "> 
137                <a href = "${card_url}" class="element-img actividades"> 
138                    <img alt="${altImage}" src="${imageSrc}"> 
139                </a> 
140            </div> 
141        <div class="element-text"> 
142            <#-- <span class="element-type color-caixa-blue">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")}</span> --> 
143			<span class="element-type color-caixa-blue">${activityType} </span> 
144			<label id="added_label" data-fblcid="${fblcActivityId}" class="card-course__tag hide">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.TAG.ADDED")}</label> 
145            <a href="${card_url}"> 
146                <#if title?has_content> 
147                	<h3 class="element-title">${titleEscaped}</h3> 
148				</#if> 
149                <#if subtitle?has_content>	 
150                	<p class="element-body">${subtituloEscaped}</p> 
151				</#if> 
152            </a> 
153        </div> 
154        <div class="valoration-row"> 
155            <div class="links-wrapper"> 
156                <#if categories?has_content> 
157        			<div class="bloque hide-below-980"> 
158        				<div class="tags"> 
159        					<#list categories as category> 
160        						<#-- redirects to the results page with the tag--> 
161                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
162        					</#list> 
163        				</div> 
164        			</div> 
165    			</#if> 
166            </div>     
167        </div> 
168        <div> 
169            <p></p> 
170            <div class="card-share flex"> 
171				<#if card_url != "">					 
172					<#if symphonyActivityId != fblcActivityId> 
173						<#if itinerancesActive && hasCentersToPlan> 
174							<#if is_signed_in> 
175							    <#if !isAlumno> 
176								    <button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${centersBookingURL}','','700', '800')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
177								    </#if> 
178							<#else> 
179								<button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
180							</#if> 
181							<#if !isAlumno> 
182							    <button id="plan_button" data-fblcid="${fblcActivityId}" onClick="addGTMAddActivityToPlani('${titleEscaped?js_string?html}','${fblcActivityId}','','${area_conocimiento?join(", ")}','${competencias?join(", ")}');event.stopPropagation();openPopup('${centersURL}','','700', '800')" class="card-button btn-primary btn-default ml-2">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.PLAN.BUTTON")}</button> 
183						    </#if> 
184						</#if> 
185					</#if>   
186                </#if>   
187                <div class="card-actions flex"> 
188                    <div class="statistics"> 
189						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
190							<path class="circle-bg" d="M18 2.0845 
191								a 15.9155 15.9155 0 0 1 0 31.831 
192								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
193							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
194								a 15.9155 15.9155 0 0 1 0 31.831 
195								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
196							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
197						</svg> 
198					</div> 
199					<div class="share"> 
200                        <button id="share"></button> 
201                        <div class="addthis_inline_share_toolbox tooltip"></div> 
202                    </div> 
203					<div class="bookmark"> 
204						<#if is_signed_in> 
205							<#if isUserBookmark> 
206								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
207							<#else> 
208								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
209							</#if> 
210						<#else> 
211							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
212						</#if> 
213					</div> 
214                </div>                     
215            </div> 
216        </div> 
217    </div>  
218</div> 
219 
220<script> 
221$( document ).ready(function() { 
222    initAddThis(); 
223	 
224	var fblcActivityId = '${fblcActivityId}'; 
225	 
226	ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
227 
228    
229	$(document).bind("DOMNodeRemoved", function(e) 
230
231		var currentTarget = e.target; 
232		if (currentTarget){ 
233			var idName = currentTarget.id; 
234			if (idName == 'dialog'){ 
235				ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
236				PlannerIcons.refreshIcons(); 
237
238
239            
240	}); 
241}); 
242 
243function hideLabelActivity(fblcActivityId){ 
244	 
245	var plan_button = document.getElementById("plan_button"); 
246	 
247	 
248	$("#added_label[data-fblcid='" + fblcActivityId + "']").addClass('hide'); 
249
250 
251function showLabelActivity(fblcActivityId){	 
252	$("#added_label[data-fblcid='" + fblcActivityId + "']").removeClass('hide'); 
253	$("#plan_button[data-fblcid='" + fblcActivityId + "']").addClass('card-button-dark'); 
254	$("#plan_button[data-fblcid='" + fblcActivityId + "']").text('${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.GO.PLANIFICADOR")}'); 
255	var url = getPlannerUrl(); 
256	$("#plan_button[data-fblcid='" + fblcActivityId + "']").attr('onclick','location.href=\''+url+'\''); 
257	$("#book_button[data-fblcid='" + fblcActivityId + "']").hide(); 
258		 
259
260 
261function getPlannerUrl(){ 
262	if(!${is_signed_in?c}) { 
263			url = Liferay.Util.PortletURL.createPortletURL( 
264				'${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}', 
265
266						'p_p_id': 'com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet', 
267						'activities': JSON.stringify(LocalStorage.getAllByPrefix(ACTIVITY_PREFIX)) 
268
269		); 
270
271	else url = '${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}'; 
272	return url; 
273
274 
275</script> 
S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444832" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444832" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#-- get the content URL --> 
19<#assign jaUrlTitle = article.getUrlTitle() /> 
20<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
21<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
22<#assign valoracionesDisplayAverage = 0/> 
23<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
24    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
25    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
26</#if> 
27 
28<#assign journalArticleId = .vars['reserved-article-id'].data/> 
29<#assign userId =themeDisplay.getUserId()/> 
30<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
31 
32<#-- Escape title text --> 
33<#assign titleEscaped = "" /> 
34<#if title.getData()??> 
35<#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
36<#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
37<#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
38<#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
39<#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
40<#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
41</#if> 
42 
43<#assign subtituloEscaped = "" /> 
44<#if subtitle.getData()??> 
45	<#assign subtituloEscaped = subtitle.getData() /> 
46	<#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/>								    
47	<#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
48</#if> 
49 
50<#-- get image alt --> 
51<#if imagenthumbnail?? && imagenthumbnail.getData()?? && imagenthumbnail.getData() != ""> 
52    <#assign altImage = imagenthumbnail.getAttribute("alt") /> 
53<#elseif bannerImage_?? && bannerImage_.getData()?? && bannerImage_.getData() != ""> 
54    <#assign altImage = bannerImage_.getAttribute("alt") /> 
55<#else> 
56    <#assign altImage = titleEscaped /> 
57</#if> 
58 
59<#-- get image banner --> 
60<#if imagenthumbnail ?? && imagenthumbnail.getData()?? && imagenthumbnail.getData() != ""> 
61    <#assign imageSrc = imagenthumbnail.getData() /> 
62<#elseif bannerImage_?? && bannerImage_.getData()?? && bannerImage_.getData() != "">   
63    <#assign imageSrc = bannerImage_.getData() /> 
64<#else>     
65    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-formacion.png" /> 
66</#if> 
67 
68<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
69<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
70<#assign categories = thesaurusCategories + tagsCategories /> 
71 
72<#-- get text by Type field --> 
73<#if tipo.getData()?? && tipo.getData() == "training"> 
74<#assign textByType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.formacion") /> 
75<#else>     
76    <#assign textByType =LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.formacion.proyecto")/> 
77</#if> 
78 
79 
80<#-- Login --> 
81<#assign is_signed_in = themeDisplay.isSignedIn()/> 
82<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
83<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
84${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
85${loginURL.setWindowState("POP_UP")} 
86 
87<div class="cards element row" id="1" style=""> 
88	<div class="col-lg-12"> 
89		<div class="element-img"> 
90			<a href = "${card_url}" class="element-img form"> 
91                <img alt="${altImage}" src="${imageSrc}"> 
92            </a> 
93		</div> 
94		<div class="element-text"> 
95			<span class="element-type color-caixa-green">${textByType}</span> 
96		<#-- 	<span class="element-type color-caixa-green">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.formacion")}</span> --> 
97			<a href = "${card_url}"> 
98				<#if title?has_content> 
99                	<h3 class="element-title">${titleEscaped}</h3> 
100				</#if> 
101                <#if subtitle?has_content>	 
102                	<p class="element-body">${subtituloEscaped}</p> 
103				</#if> 
104			</a> 
105		</div> 
106		<div class="valoration-row"> 
107			<div class="links-wrapper"> 
108				<#if categories?has_content> 
109				<div class="bloque hide-below-980"> 
110					<div class="tags"> 
111						<#list categories as category> 
112							<#-- redirects to the results page with the tag--> 
113							<a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
114						</#list> 
115					</div> 
116				</div> 
117				</#if> 
118			</div>     
119		</div> 
120		<div> 
121			<p></p> 
122			<div class="card-share flex"> 
123				<#if card_url != ""> 
124					<a href = "${card_url}" class="card-button-green color-caixa-green background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.ver")}</a> 
125				</#if> 
126				<div class="card-actions flex"> 
127					<div class="statistics"> 
128						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
129							<path class="circle-bg" d="M18 2.0845 
130								a 15.9155 15.9155 0 0 1 0 31.831 
131								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
132							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
133								a 15.9155 15.9155 0 0 1 0 31.831 
134								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
135							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
136						</svg> 
137					</div> 
138					<div class="share"> 
139                        <button id="share"></button> 
140                        <div class="addthis_inline_share_toolbox tooltip"></div> 
141                    </div> 
142					<div class="bookmark"> 
143						<#if is_signed_in> 
144							<#if isUserBookmark> 
145								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
146							<#else> 
147								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
148							</#if> 
149						<#else> 
150							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
151						</#if> 
152					</div> 
153				</div>                     
154			</div> 
155		</div> 
156	</div>  
157</div> 
158 
159<script> 
160$( document ).ready(function() { 
161    initAddThis(); 
162}); 
163</script> 
S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444774" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444774" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#assign journalArticleId = .vars['reserved-article-id'].data/> 
19<#assign userId =themeDisplay.getUserId()/> 
20<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
21 
22<#-- get the content URL --> 
23<#assign jaUrlTitle = article.getUrlTitle() /> 
24<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
25<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
26<#assign valoracionesDisplayAverage = 0/> 
27<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
28    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
29    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
30</#if> 
31 
32<#assign itinerancesActive = UtilsService.getDateRelatedItinerancia(journalArticleId,themeDisplay) /> 
33 
34<#-- Escape title text --> 
35<#assign titleEscaped = "" /> 
36<#if title.getData()??> 
37    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
39    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
43		<#assign titleEscaped = titleEscaped?replace('"','&quot;','r')/> 
44</#if> 
45 
46<#assign subtituloEscaped = "" /> 
47<#if subtitle.getData()??> 
48    <#assign subtituloEscaped = subtitle.getData() /> 
49    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
51</#if> 
52 
53<#-- get image alt --> 
54<#-- En PCC no viene ningun alt para las imagenes--> 
55    <#assign altImage = titleEscaped /> 
56 
57<#-- get image banner --> 
58<#if thumbnail ?? && thumbnail.getData() ?? && thumbnail.getData() != ""> 
59    <#assign imageSrc = thumbnail.getData() /> 
60<#elseif bannerImage?? && bannerImage.getData()?? && bannerImage.getData() != "">   
61    <#assign imageSrc = bannerImage.getData() /> 
62<#else>     
63    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-actividades.png" /> 
64</#if> 
65 
66<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
67<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
68<#assign categories = thesaurusCategories + tagsCategories /> 
69 
70<#-- Login --> 
71<#assign is_signed_in = themeDisplay.isSignedIn()/> 
72<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
73<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
74${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
75${loginURL.setWindowState("POP_UP")} 
76 
77<#assign isAlumno = false /> 
78<#if is_signed_in> 
79    <#assign isAlumno = UtilsService.isAlumno(themeDisplay.getUserId()) /> 
80</#if> 
81 
82<#-- Centers --> 
83<#assign plidCenter = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet") /> 
84<#assign centersURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
85${centersURL.setParameter("mvcRenderCommandName", "get_centers")} 
86${centersURL.setWindowState("POP_UP")} 
87${centersURL.setParameter("articleId", journalArticleId)} 
88<#assign centersBookingURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
89${centersBookingURL.setParameter("mvcRenderCommandName", "get_centers")} 
90${centersBookingURL.setWindowState("POP_UP")} 
91${centersBookingURL.setParameter("articleId", journalArticleId)} 
92${centersBookingURL.setParameter("isBooking", "true")} 
93 
94<#assign language = themeDisplay.getLocale()/> 
95<#assign area_conocimiento = []> 
96<#assign competencias = []> 
97 
98<#list asset.getCategories() as cur_category> 
99	<#if cur_category.vocabularyId == 10515> 
100		<#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
101		<#elseif cur_category.vocabularyId == 401> 
102		<#assign competencias = competencias + [cur_category.getTitle(language)]> 
103	</#if> 
104</#list> 
105 
106<#-- button plan --> 
107<#assign CentersService = serviceLocator.findService("com.educaixa.planner.core.activitylist.service.CenterService")/> 
108<#assign hasCentersToPlan = CentersService.hasCentersToPlan(journalArticleId, themeDisplay)/> 
109<#--  --> 
110 
111<#if FBLCID ?? && FBLCID.getData() ?? && FBLCID.getData() != ""> 
112	<#assign fblcActivityId = FBLCID.getData()?replace(' ','','r') /> 
113</#if> 
114 
115<#-- Identificador symphony itinerante --> 
116<#assign symphonyActivityId = propsUtil.get("symphony.fblcActivityId") /> 
117 
118<#-- W-664 START --> 
119<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")/> 
120 
121<#assign titlesActivityTest = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente.list") /> 
122<#if titlesActivityTest?has_content> 
123<#assign titlesActivityList = titlesActivityTest?split(",") /> 
124<#assign titleEscapedUC = titleEscaped?lower_case /> 
125</#if> 
126<#list titlesActivityList as titleTest> 
127	<#assign titleTestUC = titleTest?lower_case /> 
128	<#if titleEscapedUC==titleTestUC> 
129		<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente") /> 
130	</#if> 
131</#list> 
132<#-- W-664 END --> 
133 
134<div class="cards element row" id="1" style=""> 
135    <div class="col-lg-12"> 
136            <div class="element-img "> 
137                <a href = "${card_url}" class="element-img actividades"> 
138                    <img alt="${altImage}" src="${imageSrc}"> 
139                </a> 
140            </div> 
141        <div class="element-text"> 
142            <#-- <span class="element-type color-caixa-blue">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")}</span> --> 
143			<span class="element-type color-caixa-blue">${activityType} </span> 
144			<label id="added_label" data-fblcid="${fblcActivityId}" class="card-course__tag hide">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.TAG.ADDED")}</label> 
145            <a href="${card_url}"> 
146                <#if title?has_content> 
147                	<h3 class="element-title">${titleEscaped}</h3> 
148				</#if> 
149                <#if subtitle?has_content>	 
150                	<p class="element-body">${subtituloEscaped}</p> 
151				</#if> 
152            </a> 
153        </div> 
154        <div class="valoration-row"> 
155            <div class="links-wrapper"> 
156                <#if categories?has_content> 
157        			<div class="bloque hide-below-980"> 
158        				<div class="tags"> 
159        					<#list categories as category> 
160        						<#-- redirects to the results page with the tag--> 
161                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
162        					</#list> 
163        				</div> 
164        			</div> 
165    			</#if> 
166            </div>     
167        </div> 
168        <div> 
169            <p></p> 
170            <div class="card-share flex"> 
171				<#if card_url != "">					 
172					<#if symphonyActivityId != fblcActivityId> 
173						<#if itinerancesActive && hasCentersToPlan> 
174							<#if is_signed_in> 
175							    <#if !isAlumno> 
176								    <button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${centersBookingURL}','','700', '800')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
177								    </#if> 
178							<#else> 
179								<button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
180							</#if> 
181							<#if !isAlumno> 
182							    <button id="plan_button" data-fblcid="${fblcActivityId}" onClick="addGTMAddActivityToPlani('${titleEscaped?js_string?html}','${fblcActivityId}','','${area_conocimiento?join(", ")}','${competencias?join(", ")}');event.stopPropagation();openPopup('${centersURL}','','700', '800')" class="card-button btn-primary btn-default ml-2">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.PLAN.BUTTON")}</button> 
183						    </#if> 
184						</#if> 
185					</#if>   
186                </#if>   
187                <div class="card-actions flex"> 
188                    <div class="statistics"> 
189						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
190							<path class="circle-bg" d="M18 2.0845 
191								a 15.9155 15.9155 0 0 1 0 31.831 
192								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
193							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
194								a 15.9155 15.9155 0 0 1 0 31.831 
195								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
196							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
197						</svg> 
198					</div> 
199					<div class="share"> 
200                        <button id="share"></button> 
201                        <div class="addthis_inline_share_toolbox tooltip"></div> 
202                    </div> 
203					<div class="bookmark"> 
204						<#if is_signed_in> 
205							<#if isUserBookmark> 
206								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
207							<#else> 
208								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
209							</#if> 
210						<#else> 
211							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
212						</#if> 
213					</div> 
214                </div>                     
215            </div> 
216        </div> 
217    </div>  
218</div> 
219 
220<script> 
221$( document ).ready(function() { 
222    initAddThis(); 
223	 
224	var fblcActivityId = '${fblcActivityId}'; 
225	 
226	ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
227 
228    
229	$(document).bind("DOMNodeRemoved", function(e) 
230
231		var currentTarget = e.target; 
232		if (currentTarget){ 
233			var idName = currentTarget.id; 
234			if (idName == 'dialog'){ 
235				ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
236				PlannerIcons.refreshIcons(); 
237
238
239            
240	}); 
241}); 
242 
243function hideLabelActivity(fblcActivityId){ 
244	 
245	var plan_button = document.getElementById("plan_button"); 
246	 
247	 
248	$("#added_label[data-fblcid='" + fblcActivityId + "']").addClass('hide'); 
249
250 
251function showLabelActivity(fblcActivityId){	 
252	$("#added_label[data-fblcid='" + fblcActivityId + "']").removeClass('hide'); 
253	$("#plan_button[data-fblcid='" + fblcActivityId + "']").addClass('card-button-dark'); 
254	$("#plan_button[data-fblcid='" + fblcActivityId + "']").text('${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.GO.PLANIFICADOR")}'); 
255	var url = getPlannerUrl(); 
256	$("#plan_button[data-fblcid='" + fblcActivityId + "']").attr('onclick','location.href=\''+url+'\''); 
257	$("#book_button[data-fblcid='" + fblcActivityId + "']").hide(); 
258		 
259
260 
261function getPlannerUrl(){ 
262	if(!${is_signed_in?c}) { 
263			url = Liferay.Util.PortletURL.createPortletURL( 
264				'${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}', 
265
266						'p_p_id': 'com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet', 
267						'activities': JSON.stringify(LocalStorage.getAllByPrefix(ACTIVITY_PREFIX)) 
268
269		); 
270
271	else url = '${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}'; 
272	return url; 
273
274 
275</script> 
S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444774" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444774" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#assign journalArticleId = .vars['reserved-article-id'].data/> 
19<#assign userId =themeDisplay.getUserId()/> 
20<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
21 
22<#-- get the content URL --> 
23<#assign jaUrlTitle = article.getUrlTitle() /> 
24<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
25<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
26<#assign valoracionesDisplayAverage = 0/> 
27<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
28    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
29    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
30</#if> 
31 
32<#assign itinerancesActive = UtilsService.getDateRelatedItinerancia(journalArticleId,themeDisplay) /> 
33 
34<#-- Escape title text --> 
35<#assign titleEscaped = "" /> 
36<#if title.getData()??> 
37    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
39    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
43		<#assign titleEscaped = titleEscaped?replace('"','&quot;','r')/> 
44</#if> 
45 
46<#assign subtituloEscaped = "" /> 
47<#if subtitle.getData()??> 
48    <#assign subtituloEscaped = subtitle.getData() /> 
49    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
51</#if> 
52 
53<#-- get image alt --> 
54<#-- En PCC no viene ningun alt para las imagenes--> 
55    <#assign altImage = titleEscaped /> 
56 
57<#-- get image banner --> 
58<#if thumbnail ?? && thumbnail.getData() ?? && thumbnail.getData() != ""> 
59    <#assign imageSrc = thumbnail.getData() /> 
60<#elseif bannerImage?? && bannerImage.getData()?? && bannerImage.getData() != "">   
61    <#assign imageSrc = bannerImage.getData() /> 
62<#else>     
63    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-actividades.png" /> 
64</#if> 
65 
66<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
67<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
68<#assign categories = thesaurusCategories + tagsCategories /> 
69 
70<#-- Login --> 
71<#assign is_signed_in = themeDisplay.isSignedIn()/> 
72<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
73<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
74${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
75${loginURL.setWindowState("POP_UP")} 
76 
77<#assign isAlumno = false /> 
78<#if is_signed_in> 
79    <#assign isAlumno = UtilsService.isAlumno(themeDisplay.getUserId()) /> 
80</#if> 
81 
82<#-- Centers --> 
83<#assign plidCenter = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet") /> 
84<#assign centersURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
85${centersURL.setParameter("mvcRenderCommandName", "get_centers")} 
86${centersURL.setWindowState("POP_UP")} 
87${centersURL.setParameter("articleId", journalArticleId)} 
88<#assign centersBookingURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
89${centersBookingURL.setParameter("mvcRenderCommandName", "get_centers")} 
90${centersBookingURL.setWindowState("POP_UP")} 
91${centersBookingURL.setParameter("articleId", journalArticleId)} 
92${centersBookingURL.setParameter("isBooking", "true")} 
93 
94<#assign language = themeDisplay.getLocale()/> 
95<#assign area_conocimiento = []> 
96<#assign competencias = []> 
97 
98<#list asset.getCategories() as cur_category> 
99	<#if cur_category.vocabularyId == 10515> 
100		<#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
101		<#elseif cur_category.vocabularyId == 401> 
102		<#assign competencias = competencias + [cur_category.getTitle(language)]> 
103	</#if> 
104</#list> 
105 
106<#-- button plan --> 
107<#assign CentersService = serviceLocator.findService("com.educaixa.planner.core.activitylist.service.CenterService")/> 
108<#assign hasCentersToPlan = CentersService.hasCentersToPlan(journalArticleId, themeDisplay)/> 
109<#--  --> 
110 
111<#if FBLCID ?? && FBLCID.getData() ?? && FBLCID.getData() != ""> 
112	<#assign fblcActivityId = FBLCID.getData()?replace(' ','','r') /> 
113</#if> 
114 
115<#-- Identificador symphony itinerante --> 
116<#assign symphonyActivityId = propsUtil.get("symphony.fblcActivityId") /> 
117 
118<#-- W-664 START --> 
119<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")/> 
120 
121<#assign titlesActivityTest = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente.list") /> 
122<#if titlesActivityTest?has_content> 
123<#assign titlesActivityList = titlesActivityTest?split(",") /> 
124<#assign titleEscapedUC = titleEscaped?lower_case /> 
125</#if> 
126<#list titlesActivityList as titleTest> 
127	<#assign titleTestUC = titleTest?lower_case /> 
128	<#if titleEscapedUC==titleTestUC> 
129		<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente") /> 
130	</#if> 
131</#list> 
132<#-- W-664 END --> 
133 
134<div class="cards element row" id="1" style=""> 
135    <div class="col-lg-12"> 
136            <div class="element-img "> 
137                <a href = "${card_url}" class="element-img actividades"> 
138                    <img alt="${altImage}" src="${imageSrc}"> 
139                </a> 
140            </div> 
141        <div class="element-text"> 
142            <#-- <span class="element-type color-caixa-blue">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")}</span> --> 
143			<span class="element-type color-caixa-blue">${activityType} </span> 
144			<label id="added_label" data-fblcid="${fblcActivityId}" class="card-course__tag hide">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.TAG.ADDED")}</label> 
145            <a href="${card_url}"> 
146                <#if title?has_content> 
147                	<h3 class="element-title">${titleEscaped}</h3> 
148				</#if> 
149                <#if subtitle?has_content>	 
150                	<p class="element-body">${subtituloEscaped}</p> 
151				</#if> 
152            </a> 
153        </div> 
154        <div class="valoration-row"> 
155            <div class="links-wrapper"> 
156                <#if categories?has_content> 
157        			<div class="bloque hide-below-980"> 
158        				<div class="tags"> 
159        					<#list categories as category> 
160        						<#-- redirects to the results page with the tag--> 
161                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
162        					</#list> 
163        				</div> 
164        			</div> 
165    			</#if> 
166            </div>     
167        </div> 
168        <div> 
169            <p></p> 
170            <div class="card-share flex"> 
171				<#if card_url != "">					 
172					<#if symphonyActivityId != fblcActivityId> 
173						<#if itinerancesActive && hasCentersToPlan> 
174							<#if is_signed_in> 
175							    <#if !isAlumno> 
176								    <button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${centersBookingURL}','','700', '800')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
177								    </#if> 
178							<#else> 
179								<button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
180							</#if> 
181							<#if !isAlumno> 
182							    <button id="plan_button" data-fblcid="${fblcActivityId}" onClick="addGTMAddActivityToPlani('${titleEscaped?js_string?html}','${fblcActivityId}','','${area_conocimiento?join(", ")}','${competencias?join(", ")}');event.stopPropagation();openPopup('${centersURL}','','700', '800')" class="card-button btn-primary btn-default ml-2">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.PLAN.BUTTON")}</button> 
183						    </#if> 
184						</#if> 
185					</#if>   
186                </#if>   
187                <div class="card-actions flex"> 
188                    <div class="statistics"> 
189						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
190							<path class="circle-bg" d="M18 2.0845 
191								a 15.9155 15.9155 0 0 1 0 31.831 
192								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
193							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
194								a 15.9155 15.9155 0 0 1 0 31.831 
195								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
196							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
197						</svg> 
198					</div> 
199					<div class="share"> 
200                        <button id="share"></button> 
201                        <div class="addthis_inline_share_toolbox tooltip"></div> 
202                    </div> 
203					<div class="bookmark"> 
204						<#if is_signed_in> 
205							<#if isUserBookmark> 
206								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
207							<#else> 
208								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
209							</#if> 
210						<#else> 
211							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
212						</#if> 
213					</div> 
214                </div>                     
215            </div> 
216        </div> 
217    </div>  
218</div> 
219 
220<script> 
221$( document ).ready(function() { 
222    initAddThis(); 
223	 
224	var fblcActivityId = '${fblcActivityId}'; 
225	 
226	ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
227 
228    
229	$(document).bind("DOMNodeRemoved", function(e) 
230
231		var currentTarget = e.target; 
232		if (currentTarget){ 
233			var idName = currentTarget.id; 
234			if (idName == 'dialog'){ 
235				ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
236				PlannerIcons.refreshIcons(); 
237
238
239            
240	}); 
241}); 
242 
243function hideLabelActivity(fblcActivityId){ 
244	 
245	var plan_button = document.getElementById("plan_button"); 
246	 
247	 
248	$("#added_label[data-fblcid='" + fblcActivityId + "']").addClass('hide'); 
249
250 
251function showLabelActivity(fblcActivityId){	 
252	$("#added_label[data-fblcid='" + fblcActivityId + "']").removeClass('hide'); 
253	$("#plan_button[data-fblcid='" + fblcActivityId + "']").addClass('card-button-dark'); 
254	$("#plan_button[data-fblcid='" + fblcActivityId + "']").text('${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.GO.PLANIFICADOR")}'); 
255	var url = getPlannerUrl(); 
256	$("#plan_button[data-fblcid='" + fblcActivityId + "']").attr('onclick','location.href=\''+url+'\''); 
257	$("#book_button[data-fblcid='" + fblcActivityId + "']").hide(); 
258		 
259
260 
261function getPlannerUrl(){ 
262	if(!${is_signed_in?c}) { 
263			url = Liferay.Util.PortletURL.createPortletURL( 
264				'${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}', 
265
266						'p_p_id': 'com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet', 
267						'activities': JSON.stringify(LocalStorage.getAllByPrefix(ACTIVITY_PREFIX)) 
268
269		); 
270
271	else url = '${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}'; 
272	return url; 
273
274 
275</script> 
Registra't a EduCaixa

Uneix-te a EduCaixa i comença a descobrir l'univers de continguts educatius que tenim preparats per a tu.

S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444774" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444774" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#assign journalArticleId = .vars['reserved-article-id'].data/> 
19<#assign userId =themeDisplay.getUserId()/> 
20<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
21 
22<#-- get the content URL --> 
23<#assign jaUrlTitle = article.getUrlTitle() /> 
24<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
25<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
26<#assign valoracionesDisplayAverage = 0/> 
27<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
28    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
29    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
30</#if> 
31 
32<#assign itinerancesActive = UtilsService.getDateRelatedItinerancia(journalArticleId,themeDisplay) /> 
33 
34<#-- Escape title text --> 
35<#assign titleEscaped = "" /> 
36<#if title.getData()??> 
37    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
39    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
43		<#assign titleEscaped = titleEscaped?replace('"','&quot;','r')/> 
44</#if> 
45 
46<#assign subtituloEscaped = "" /> 
47<#if subtitle.getData()??> 
48    <#assign subtituloEscaped = subtitle.getData() /> 
49    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
51</#if> 
52 
53<#-- get image alt --> 
54<#-- En PCC no viene ningun alt para las imagenes--> 
55    <#assign altImage = titleEscaped /> 
56 
57<#-- get image banner --> 
58<#if thumbnail ?? && thumbnail.getData() ?? && thumbnail.getData() != ""> 
59    <#assign imageSrc = thumbnail.getData() /> 
60<#elseif bannerImage?? && bannerImage.getData()?? && bannerImage.getData() != "">   
61    <#assign imageSrc = bannerImage.getData() /> 
62<#else>     
63    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-actividades.png" /> 
64</#if> 
65 
66<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
67<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
68<#assign categories = thesaurusCategories + tagsCategories /> 
69 
70<#-- Login --> 
71<#assign is_signed_in = themeDisplay.isSignedIn()/> 
72<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
73<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
74${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
75${loginURL.setWindowState("POP_UP")} 
76 
77<#assign isAlumno = false /> 
78<#if is_signed_in> 
79    <#assign isAlumno = UtilsService.isAlumno(themeDisplay.getUserId()) /> 
80</#if> 
81 
82<#-- Centers --> 
83<#assign plidCenter = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet") /> 
84<#assign centersURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
85${centersURL.setParameter("mvcRenderCommandName", "get_centers")} 
86${centersURL.setWindowState("POP_UP")} 
87${centersURL.setParameter("articleId", journalArticleId)} 
88<#assign centersBookingURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
89${centersBookingURL.setParameter("mvcRenderCommandName", "get_centers")} 
90${centersBookingURL.setWindowState("POP_UP")} 
91${centersBookingURL.setParameter("articleId", journalArticleId)} 
92${centersBookingURL.setParameter("isBooking", "true")} 
93 
94<#assign language = themeDisplay.getLocale()/> 
95<#assign area_conocimiento = []> 
96<#assign competencias = []> 
97 
98<#list asset.getCategories() as cur_category> 
99	<#if cur_category.vocabularyId == 10515> 
100		<#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
101		<#elseif cur_category.vocabularyId == 401> 
102		<#assign competencias = competencias + [cur_category.getTitle(language)]> 
103	</#if> 
104</#list> 
105 
106<#-- button plan --> 
107<#assign CentersService = serviceLocator.findService("com.educaixa.planner.core.activitylist.service.CenterService")/> 
108<#assign hasCentersToPlan = CentersService.hasCentersToPlan(journalArticleId, themeDisplay)/> 
109<#--  --> 
110 
111<#if FBLCID ?? && FBLCID.getData() ?? && FBLCID.getData() != ""> 
112	<#assign fblcActivityId = FBLCID.getData()?replace(' ','','r') /> 
113</#if> 
114 
115<#-- Identificador symphony itinerante --> 
116<#assign symphonyActivityId = propsUtil.get("symphony.fblcActivityId") /> 
117 
118<#-- W-664 START --> 
119<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")/> 
120 
121<#assign titlesActivityTest = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente.list") /> 
122<#if titlesActivityTest?has_content> 
123<#assign titlesActivityList = titlesActivityTest?split(",") /> 
124<#assign titleEscapedUC = titleEscaped?lower_case /> 
125</#if> 
126<#list titlesActivityList as titleTest> 
127	<#assign titleTestUC = titleTest?lower_case /> 
128	<#if titleEscapedUC==titleTestUC> 
129		<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente") /> 
130	</#if> 
131</#list> 
132<#-- W-664 END --> 
133 
134<div class="cards element row" id="1" style=""> 
135    <div class="col-lg-12"> 
136            <div class="element-img "> 
137                <a href = "${card_url}" class="element-img actividades"> 
138                    <img alt="${altImage}" src="${imageSrc}"> 
139                </a> 
140            </div> 
141        <div class="element-text"> 
142            <#-- <span class="element-type color-caixa-blue">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")}</span> --> 
143			<span class="element-type color-caixa-blue">${activityType} </span> 
144			<label id="added_label" data-fblcid="${fblcActivityId}" class="card-course__tag hide">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.TAG.ADDED")}</label> 
145            <a href="${card_url}"> 
146                <#if title?has_content> 
147                	<h3 class="element-title">${titleEscaped}</h3> 
148				</#if> 
149                <#if subtitle?has_content>	 
150                	<p class="element-body">${subtituloEscaped}</p> 
151				</#if> 
152            </a> 
153        </div> 
154        <div class="valoration-row"> 
155            <div class="links-wrapper"> 
156                <#if categories?has_content> 
157        			<div class="bloque hide-below-980"> 
158        				<div class="tags"> 
159        					<#list categories as category> 
160        						<#-- redirects to the results page with the tag--> 
161                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
162        					</#list> 
163        				</div> 
164        			</div> 
165    			</#if> 
166            </div>     
167        </div> 
168        <div> 
169            <p></p> 
170            <div class="card-share flex"> 
171				<#if card_url != "">					 
172					<#if symphonyActivityId != fblcActivityId> 
173						<#if itinerancesActive && hasCentersToPlan> 
174							<#if is_signed_in> 
175							    <#if !isAlumno> 
176								    <button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${centersBookingURL}','','700', '800')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
177								    </#if> 
178							<#else> 
179								<button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
180							</#if> 
181							<#if !isAlumno> 
182							    <button id="plan_button" data-fblcid="${fblcActivityId}" onClick="addGTMAddActivityToPlani('${titleEscaped?js_string?html}','${fblcActivityId}','','${area_conocimiento?join(", ")}','${competencias?join(", ")}');event.stopPropagation();openPopup('${centersURL}','','700', '800')" class="card-button btn-primary btn-default ml-2">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.PLAN.BUTTON")}</button> 
183						    </#if> 
184						</#if> 
185					</#if>   
186                </#if>   
187                <div class="card-actions flex"> 
188                    <div class="statistics"> 
189						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
190							<path class="circle-bg" d="M18 2.0845 
191								a 15.9155 15.9155 0 0 1 0 31.831 
192								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
193							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
194								a 15.9155 15.9155 0 0 1 0 31.831 
195								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
196							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
197						</svg> 
198					</div> 
199					<div class="share"> 
200                        <button id="share"></button> 
201                        <div class="addthis_inline_share_toolbox tooltip"></div> 
202                    </div> 
203					<div class="bookmark"> 
204						<#if is_signed_in> 
205							<#if isUserBookmark> 
206								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
207							<#else> 
208								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
209							</#if> 
210						<#else> 
211							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
212						</#if> 
213					</div> 
214                </div>                     
215            </div> 
216        </div> 
217    </div>  
218</div> 
219 
220<script> 
221$( document ).ready(function() { 
222    initAddThis(); 
223	 
224	var fblcActivityId = '${fblcActivityId}'; 
225	 
226	ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
227 
228    
229	$(document).bind("DOMNodeRemoved", function(e) 
230
231		var currentTarget = e.target; 
232		if (currentTarget){ 
233			var idName = currentTarget.id; 
234			if (idName == 'dialog'){ 
235				ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
236				PlannerIcons.refreshIcons(); 
237
238
239            
240	}); 
241}); 
242 
243function hideLabelActivity(fblcActivityId){ 
244	 
245	var plan_button = document.getElementById("plan_button"); 
246	 
247	 
248	$("#added_label[data-fblcid='" + fblcActivityId + "']").addClass('hide'); 
249
250 
251function showLabelActivity(fblcActivityId){	 
252	$("#added_label[data-fblcid='" + fblcActivityId + "']").removeClass('hide'); 
253	$("#plan_button[data-fblcid='" + fblcActivityId + "']").addClass('card-button-dark'); 
254	$("#plan_button[data-fblcid='" + fblcActivityId + "']").text('${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.GO.PLANIFICADOR")}'); 
255	var url = getPlannerUrl(); 
256	$("#plan_button[data-fblcid='" + fblcActivityId + "']").attr('onclick','location.href=\''+url+'\''); 
257	$("#book_button[data-fblcid='" + fblcActivityId + "']").hide(); 
258		 
259
260 
261function getPlannerUrl(){ 
262	if(!${is_signed_in?c}) { 
263			url = Liferay.Util.PortletURL.createPortletURL( 
264				'${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}', 
265
266						'p_p_id': 'com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet', 
267						'activities': JSON.stringify(LocalStorage.getAllByPrefix(ACTIVITY_PREFIX)) 
268
269		); 
270
271	else url = '${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}'; 
272	return url; 
273
274 
275</script> 
S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444774" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444774" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#assign journalArticleId = .vars['reserved-article-id'].data/> 
19<#assign userId =themeDisplay.getUserId()/> 
20<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
21 
22<#-- get the content URL --> 
23<#assign jaUrlTitle = article.getUrlTitle() /> 
24<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
25<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
26<#assign valoracionesDisplayAverage = 0/> 
27<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
28    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
29    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
30</#if> 
31 
32<#assign itinerancesActive = UtilsService.getDateRelatedItinerancia(journalArticleId,themeDisplay) /> 
33 
34<#-- Escape title text --> 
35<#assign titleEscaped = "" /> 
36<#if title.getData()??> 
37    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
39    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
43		<#assign titleEscaped = titleEscaped?replace('"','&quot;','r')/> 
44</#if> 
45 
46<#assign subtituloEscaped = "" /> 
47<#if subtitle.getData()??> 
48    <#assign subtituloEscaped = subtitle.getData() /> 
49    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
51</#if> 
52 
53<#-- get image alt --> 
54<#-- En PCC no viene ningun alt para las imagenes--> 
55    <#assign altImage = titleEscaped /> 
56 
57<#-- get image banner --> 
58<#if thumbnail ?? && thumbnail.getData() ?? && thumbnail.getData() != ""> 
59    <#assign imageSrc = thumbnail.getData() /> 
60<#elseif bannerImage?? && bannerImage.getData()?? && bannerImage.getData() != "">   
61    <#assign imageSrc = bannerImage.getData() /> 
62<#else>     
63    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-actividades.png" /> 
64</#if> 
65 
66<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
67<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
68<#assign categories = thesaurusCategories + tagsCategories /> 
69 
70<#-- Login --> 
71<#assign is_signed_in = themeDisplay.isSignedIn()/> 
72<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
73<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
74${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
75${loginURL.setWindowState("POP_UP")} 
76 
77<#assign isAlumno = false /> 
78<#if is_signed_in> 
79    <#assign isAlumno = UtilsService.isAlumno(themeDisplay.getUserId()) /> 
80</#if> 
81 
82<#-- Centers --> 
83<#assign plidCenter = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet") /> 
84<#assign centersURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
85${centersURL.setParameter("mvcRenderCommandName", "get_centers")} 
86${centersURL.setWindowState("POP_UP")} 
87${centersURL.setParameter("articleId", journalArticleId)} 
88<#assign centersBookingURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
89${centersBookingURL.setParameter("mvcRenderCommandName", "get_centers")} 
90${centersBookingURL.setWindowState("POP_UP")} 
91${centersBookingURL.setParameter("articleId", journalArticleId)} 
92${centersBookingURL.setParameter("isBooking", "true")} 
93 
94<#assign language = themeDisplay.getLocale()/> 
95<#assign area_conocimiento = []> 
96<#assign competencias = []> 
97 
98<#list asset.getCategories() as cur_category> 
99	<#if cur_category.vocabularyId == 10515> 
100		<#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
101		<#elseif cur_category.vocabularyId == 401> 
102		<#assign competencias = competencias + [cur_category.getTitle(language)]> 
103	</#if> 
104</#list> 
105 
106<#-- button plan --> 
107<#assign CentersService = serviceLocator.findService("com.educaixa.planner.core.activitylist.service.CenterService")/> 
108<#assign hasCentersToPlan = CentersService.hasCentersToPlan(journalArticleId, themeDisplay)/> 
109<#--  --> 
110 
111<#if FBLCID ?? && FBLCID.getData() ?? && FBLCID.getData() != ""> 
112	<#assign fblcActivityId = FBLCID.getData()?replace(' ','','r') /> 
113</#if> 
114 
115<#-- Identificador symphony itinerante --> 
116<#assign symphonyActivityId = propsUtil.get("symphony.fblcActivityId") /> 
117 
118<#-- W-664 START --> 
119<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")/> 
120 
121<#assign titlesActivityTest = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente.list") /> 
122<#if titlesActivityTest?has_content> 
123<#assign titlesActivityList = titlesActivityTest?split(",") /> 
124<#assign titleEscapedUC = titleEscaped?lower_case /> 
125</#if> 
126<#list titlesActivityList as titleTest> 
127	<#assign titleTestUC = titleTest?lower_case /> 
128	<#if titleEscapedUC==titleTestUC> 
129		<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente") /> 
130	</#if> 
131</#list> 
132<#-- W-664 END --> 
133 
134<div class="cards element row" id="1" style=""> 
135    <div class="col-lg-12"> 
136            <div class="element-img "> 
137                <a href = "${card_url}" class="element-img actividades"> 
138                    <img alt="${altImage}" src="${imageSrc}"> 
139                </a> 
140            </div> 
141        <div class="element-text"> 
142            <#-- <span class="element-type color-caixa-blue">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")}</span> --> 
143			<span class="element-type color-caixa-blue">${activityType} </span> 
144			<label id="added_label" data-fblcid="${fblcActivityId}" class="card-course__tag hide">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.TAG.ADDED")}</label> 
145            <a href="${card_url}"> 
146                <#if title?has_content> 
147                	<h3 class="element-title">${titleEscaped}</h3> 
148				</#if> 
149                <#if subtitle?has_content>	 
150                	<p class="element-body">${subtituloEscaped}</p> 
151				</#if> 
152            </a> 
153        </div> 
154        <div class="valoration-row"> 
155            <div class="links-wrapper"> 
156                <#if categories?has_content> 
157        			<div class="bloque hide-below-980"> 
158        				<div class="tags"> 
159        					<#list categories as category> 
160        						<#-- redirects to the results page with the tag--> 
161                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
162        					</#list> 
163        				</div> 
164        			</div> 
165    			</#if> 
166            </div>     
167        </div> 
168        <div> 
169            <p></p> 
170            <div class="card-share flex"> 
171				<#if card_url != "">					 
172					<#if symphonyActivityId != fblcActivityId> 
173						<#if itinerancesActive && hasCentersToPlan> 
174							<#if is_signed_in> 
175							    <#if !isAlumno> 
176								    <button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${centersBookingURL}','','700', '800')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
177								    </#if> 
178							<#else> 
179								<button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
180							</#if> 
181							<#if !isAlumno> 
182							    <button id="plan_button" data-fblcid="${fblcActivityId}" onClick="addGTMAddActivityToPlani('${titleEscaped?js_string?html}','${fblcActivityId}','','${area_conocimiento?join(", ")}','${competencias?join(", ")}');event.stopPropagation();openPopup('${centersURL}','','700', '800')" class="card-button btn-primary btn-default ml-2">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.PLAN.BUTTON")}</button> 
183						    </#if> 
184						</#if> 
185					</#if>   
186                </#if>   
187                <div class="card-actions flex"> 
188                    <div class="statistics"> 
189						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
190							<path class="circle-bg" d="M18 2.0845 
191								a 15.9155 15.9155 0 0 1 0 31.831 
192								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
193							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
194								a 15.9155 15.9155 0 0 1 0 31.831 
195								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
196							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
197						</svg> 
198					</div> 
199					<div class="share"> 
200                        <button id="share"></button> 
201                        <div class="addthis_inline_share_toolbox tooltip"></div> 
202                    </div> 
203					<div class="bookmark"> 
204						<#if is_signed_in> 
205							<#if isUserBookmark> 
206								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
207							<#else> 
208								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
209							</#if> 
210						<#else> 
211							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
212						</#if> 
213					</div> 
214                </div>                     
215            </div> 
216        </div> 
217    </div>  
218</div> 
219 
220<script> 
221$( document ).ready(function() { 
222    initAddThis(); 
223	 
224	var fblcActivityId = '${fblcActivityId}'; 
225	 
226	ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
227 
228    
229	$(document).bind("DOMNodeRemoved", function(e) 
230
231		var currentTarget = e.target; 
232		if (currentTarget){ 
233			var idName = currentTarget.id; 
234			if (idName == 'dialog'){ 
235				ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
236				PlannerIcons.refreshIcons(); 
237
238
239            
240	}); 
241}); 
242 
243function hideLabelActivity(fblcActivityId){ 
244	 
245	var plan_button = document.getElementById("plan_button"); 
246	 
247	 
248	$("#added_label[data-fblcid='" + fblcActivityId + "']").addClass('hide'); 
249
250 
251function showLabelActivity(fblcActivityId){	 
252	$("#added_label[data-fblcid='" + fblcActivityId + "']").removeClass('hide'); 
253	$("#plan_button[data-fblcid='" + fblcActivityId + "']").addClass('card-button-dark'); 
254	$("#plan_button[data-fblcid='" + fblcActivityId + "']").text('${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.GO.PLANIFICADOR")}'); 
255	var url = getPlannerUrl(); 
256	$("#plan_button[data-fblcid='" + fblcActivityId + "']").attr('onclick','location.href=\''+url+'\''); 
257	$("#book_button[data-fblcid='" + fblcActivityId + "']").hide(); 
258		 
259
260 
261function getPlannerUrl(){ 
262	if(!${is_signed_in?c}) { 
263			url = Liferay.Util.PortletURL.createPortletURL( 
264				'${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}', 
265
266						'p_p_id': 'com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet', 
267						'activities': JSON.stringify(LocalStorage.getAllByPrefix(ACTIVITY_PREFIX)) 
268
269		); 
270
271	else url = '${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}'; 
272	return url; 
273
274 
275</script> 
S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444774" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444774" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#assign journalArticleId = .vars['reserved-article-id'].data/> 
19<#assign userId =themeDisplay.getUserId()/> 
20<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
21 
22<#-- get the content URL --> 
23<#assign jaUrlTitle = article.getUrlTitle() /> 
24<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
25<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
26<#assign valoracionesDisplayAverage = 0/> 
27<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
28    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
29    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
30</#if> 
31 
32<#assign itinerancesActive = UtilsService.getDateRelatedItinerancia(journalArticleId,themeDisplay) /> 
33 
34<#-- Escape title text --> 
35<#assign titleEscaped = "" /> 
36<#if title.getData()??> 
37    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
39    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
43		<#assign titleEscaped = titleEscaped?replace('"','&quot;','r')/> 
44</#if> 
45 
46<#assign subtituloEscaped = "" /> 
47<#if subtitle.getData()??> 
48    <#assign subtituloEscaped = subtitle.getData() /> 
49    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
51</#if> 
52 
53<#-- get image alt --> 
54<#-- En PCC no viene ningun alt para las imagenes--> 
55    <#assign altImage = titleEscaped /> 
56 
57<#-- get image banner --> 
58<#if thumbnail ?? && thumbnail.getData() ?? && thumbnail.getData() != ""> 
59    <#assign imageSrc = thumbnail.getData() /> 
60<#elseif bannerImage?? && bannerImage.getData()?? && bannerImage.getData() != "">   
61    <#assign imageSrc = bannerImage.getData() /> 
62<#else>     
63    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-actividades.png" /> 
64</#if> 
65 
66<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
67<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
68<#assign categories = thesaurusCategories + tagsCategories /> 
69 
70<#-- Login --> 
71<#assign is_signed_in = themeDisplay.isSignedIn()/> 
72<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
73<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
74${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
75${loginURL.setWindowState("POP_UP")} 
76 
77<#assign isAlumno = false /> 
78<#if is_signed_in> 
79    <#assign isAlumno = UtilsService.isAlumno(themeDisplay.getUserId()) /> 
80</#if> 
81 
82<#-- Centers --> 
83<#assign plidCenter = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet") /> 
84<#assign centersURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
85${centersURL.setParameter("mvcRenderCommandName", "get_centers")} 
86${centersURL.setWindowState("POP_UP")} 
87${centersURL.setParameter("articleId", journalArticleId)} 
88<#assign centersBookingURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
89${centersBookingURL.setParameter("mvcRenderCommandName", "get_centers")} 
90${centersBookingURL.setWindowState("POP_UP")} 
91${centersBookingURL.setParameter("articleId", journalArticleId)} 
92${centersBookingURL.setParameter("isBooking", "true")} 
93 
94<#assign language = themeDisplay.getLocale()/> 
95<#assign area_conocimiento = []> 
96<#assign competencias = []> 
97 
98<#list asset.getCategories() as cur_category> 
99	<#if cur_category.vocabularyId == 10515> 
100		<#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
101		<#elseif cur_category.vocabularyId == 401> 
102		<#assign competencias = competencias + [cur_category.getTitle(language)]> 
103	</#if> 
104</#list> 
105 
106<#-- button plan --> 
107<#assign CentersService = serviceLocator.findService("com.educaixa.planner.core.activitylist.service.CenterService")/> 
108<#assign hasCentersToPlan = CentersService.hasCentersToPlan(journalArticleId, themeDisplay)/> 
109<#--  --> 
110 
111<#if FBLCID ?? && FBLCID.getData() ?? && FBLCID.getData() != ""> 
112	<#assign fblcActivityId = FBLCID.getData()?replace(' ','','r') /> 
113</#if> 
114 
115<#-- Identificador symphony itinerante --> 
116<#assign symphonyActivityId = propsUtil.get("symphony.fblcActivityId") /> 
117 
118<#-- W-664 START --> 
119<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")/> 
120 
121<#assign titlesActivityTest = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente.list") /> 
122<#if titlesActivityTest?has_content> 
123<#assign titlesActivityList = titlesActivityTest?split(",") /> 
124<#assign titleEscapedUC = titleEscaped?lower_case /> 
125</#if> 
126<#list titlesActivityList as titleTest> 
127	<#assign titleTestUC = titleTest?lower_case /> 
128	<#if titleEscapedUC==titleTestUC> 
129		<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente") /> 
130	</#if> 
131</#list> 
132<#-- W-664 END --> 
133 
134<div class="cards element row" id="1" style=""> 
135    <div class="col-lg-12"> 
136            <div class="element-img "> 
137                <a href = "${card_url}" class="element-img actividades"> 
138                    <img alt="${altImage}" src="${imageSrc}"> 
139                </a> 
140            </div> 
141        <div class="element-text"> 
142            <#-- <span class="element-type color-caixa-blue">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")}</span> --> 
143			<span class="element-type color-caixa-blue">${activityType} </span> 
144			<label id="added_label" data-fblcid="${fblcActivityId}" class="card-course__tag hide">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.TAG.ADDED")}</label> 
145            <a href="${card_url}"> 
146                <#if title?has_content> 
147                	<h3 class="element-title">${titleEscaped}</h3> 
148				</#if> 
149                <#if subtitle?has_content>	 
150                	<p class="element-body">${subtituloEscaped}</p> 
151				</#if> 
152            </a> 
153        </div> 
154        <div class="valoration-row"> 
155            <div class="links-wrapper"> 
156                <#if categories?has_content> 
157        			<div class="bloque hide-below-980"> 
158        				<div class="tags"> 
159        					<#list categories as category> 
160        						<#-- redirects to the results page with the tag--> 
161                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
162        					</#list> 
163        				</div> 
164        			</div> 
165    			</#if> 
166            </div>     
167        </div> 
168        <div> 
169            <p></p> 
170            <div class="card-share flex"> 
171				<#if card_url != "">					 
172					<#if symphonyActivityId != fblcActivityId> 
173						<#if itinerancesActive && hasCentersToPlan> 
174							<#if is_signed_in> 
175							    <#if !isAlumno> 
176								    <button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${centersBookingURL}','','700', '800')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
177								    </#if> 
178							<#else> 
179								<button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
180							</#if> 
181							<#if !isAlumno> 
182							    <button id="plan_button" data-fblcid="${fblcActivityId}" onClick="addGTMAddActivityToPlani('${titleEscaped?js_string?html}','${fblcActivityId}','','${area_conocimiento?join(", ")}','${competencias?join(", ")}');event.stopPropagation();openPopup('${centersURL}','','700', '800')" class="card-button btn-primary btn-default ml-2">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.PLAN.BUTTON")}</button> 
183						    </#if> 
184						</#if> 
185					</#if>   
186                </#if>   
187                <div class="card-actions flex"> 
188                    <div class="statistics"> 
189						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
190							<path class="circle-bg" d="M18 2.0845 
191								a 15.9155 15.9155 0 0 1 0 31.831 
192								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
193							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
194								a 15.9155 15.9155 0 0 1 0 31.831 
195								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
196							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
197						</svg> 
198					</div> 
199					<div class="share"> 
200                        <button id="share"></button> 
201                        <div class="addthis_inline_share_toolbox tooltip"></div> 
202                    </div> 
203					<div class="bookmark"> 
204						<#if is_signed_in> 
205							<#if isUserBookmark> 
206								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
207							<#else> 
208								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
209							</#if> 
210						<#else> 
211							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
212						</#if> 
213					</div> 
214                </div>                     
215            </div> 
216        </div> 
217    </div>  
218</div> 
219 
220<script> 
221$( document ).ready(function() { 
222    initAddThis(); 
223	 
224	var fblcActivityId = '${fblcActivityId}'; 
225	 
226	ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
227 
228    
229	$(document).bind("DOMNodeRemoved", function(e) 
230
231		var currentTarget = e.target; 
232		if (currentTarget){ 
233			var idName = currentTarget.id; 
234			if (idName == 'dialog'){ 
235				ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
236				PlannerIcons.refreshIcons(); 
237
238
239            
240	}); 
241}); 
242 
243function hideLabelActivity(fblcActivityId){ 
244	 
245	var plan_button = document.getElementById("plan_button"); 
246	 
247	 
248	$("#added_label[data-fblcid='" + fblcActivityId + "']").addClass('hide'); 
249
250 
251function showLabelActivity(fblcActivityId){	 
252	$("#added_label[data-fblcid='" + fblcActivityId + "']").removeClass('hide'); 
253	$("#plan_button[data-fblcid='" + fblcActivityId + "']").addClass('card-button-dark'); 
254	$("#plan_button[data-fblcid='" + fblcActivityId + "']").text('${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.GO.PLANIFICADOR")}'); 
255	var url = getPlannerUrl(); 
256	$("#plan_button[data-fblcid='" + fblcActivityId + "']").attr('onclick','location.href=\''+url+'\''); 
257	$("#book_button[data-fblcid='" + fblcActivityId + "']").hide(); 
258		 
259
260 
261function getPlannerUrl(){ 
262	if(!${is_signed_in?c}) { 
263			url = Liferay.Util.PortletURL.createPortletURL( 
264				'${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}', 
265
266						'p_p_id': 'com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet', 
267						'activities': JSON.stringify(LocalStorage.getAllByPrefix(ACTIVITY_PREFIX)) 
268
269		); 
270
271	else url = '${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}'; 
272	return url; 
273
274 
275</script> 
S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")  [in template "10154#10192#40444774" at line 3, column 25]

----
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: #assign UtilsService = serviceLocator...  [in template "10154#10192#40444774" at line 3, column 1]
----
1<#-- get services --> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
3<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
5<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
6<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
7<#assign language = themeDisplay.getLocale()/> 
8<#assign groupId = themeDisplay.getScopeGroupId()/> 
9<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
10<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
11<#assign httpServletRequest = serviceContext.getRequest() /> 
12<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
13 
14<#-- get the content categories --> 
15<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
16<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
17 
18<#assign journalArticleId = .vars['reserved-article-id'].data/> 
19<#assign userId =themeDisplay.getUserId()/> 
20<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
21 
22<#-- get the content URL --> 
23<#assign jaUrlTitle = article.getUrlTitle() /> 
24<#assign card_url = "https://${request.serverName}/${locale.getLanguage()}/-/${jaUrlTitle}" /> 
25<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /> 
26<#assign valoracionesDisplayAverage = 0/> 
27<#if valoracionesDisplay.fetchByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
28    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(themeDisplay.getScopeGroupId(),themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
29    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
30</#if> 
31 
32<#assign itinerancesActive = UtilsService.getDateRelatedItinerancia(journalArticleId,themeDisplay) /> 
33 
34<#-- Escape title text --> 
35<#assign titleEscaped = "" /> 
36<#if title.getData()??> 
37    <#assign titleEscaped = title.getData()?replace('<p>','','r')/> 
38    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
39    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
43		<#assign titleEscaped = titleEscaped?replace('"','&quot;','r')/> 
44</#if> 
45 
46<#assign subtituloEscaped = "" /> 
47<#if subtitle.getData()??> 
48    <#assign subtituloEscaped = subtitle.getData() /> 
49    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
51</#if> 
52 
53<#-- get image alt --> 
54<#-- En PCC no viene ningun alt para las imagenes--> 
55    <#assign altImage = titleEscaped /> 
56 
57<#-- get image banner --> 
58<#if thumbnail ?? && thumbnail.getData() ?? && thumbnail.getData() != ""> 
59    <#assign imageSrc = thumbnail.getData() /> 
60<#elseif bannerImage?? && bannerImage.getData()?? && bannerImage.getData() != "">   
61    <#assign imageSrc = bannerImage.getData() /> 
62<#else>     
63    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-actividades.png" /> 
64</#if> 
65 
66<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
67<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
68<#assign categories = thesaurusCategories + tagsCategories /> 
69 
70<#-- Login --> 
71<#assign is_signed_in = themeDisplay.isSignedIn()/> 
72<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
73<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
74${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
75${loginURL.setWindowState("POP_UP")} 
76 
77<#assign isAlumno = false /> 
78<#if is_signed_in> 
79    <#assign isAlumno = UtilsService.isAlumno(themeDisplay.getUserId()) /> 
80</#if> 
81 
82<#-- Centers --> 
83<#assign plidCenter = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet") /> 
84<#assign centersURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
85${centersURL.setParameter("mvcRenderCommandName", "get_centers")} 
86${centersURL.setWindowState("POP_UP")} 
87${centersURL.setParameter("articleId", journalArticleId)} 
88<#assign centersBookingURL = portletURLFactory.create(httpServletRequest, "com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet", plidCenter, "RENDER_PHASE") /> 
89${centersBookingURL.setParameter("mvcRenderCommandName", "get_centers")} 
90${centersBookingURL.setWindowState("POP_UP")} 
91${centersBookingURL.setParameter("articleId", journalArticleId)} 
92${centersBookingURL.setParameter("isBooking", "true")} 
93 
94<#assign language = themeDisplay.getLocale()/> 
95<#assign area_conocimiento = []> 
96<#assign competencias = []> 
97 
98<#list asset.getCategories() as cur_category> 
99	<#if cur_category.vocabularyId == 10515> 
100		<#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
101		<#elseif cur_category.vocabularyId == 401> 
102		<#assign competencias = competencias + [cur_category.getTitle(language)]> 
103	</#if> 
104</#list> 
105 
106<#-- button plan --> 
107<#assign CentersService = serviceLocator.findService("com.educaixa.planner.core.activitylist.service.CenterService")/> 
108<#assign hasCentersToPlan = CentersService.hasCentersToPlan(journalArticleId, themeDisplay)/> 
109<#--  --> 
110 
111<#if FBLCID ?? && FBLCID.getData() ?? && FBLCID.getData() != ""> 
112	<#assign fblcActivityId = FBLCID.getData()?replace(' ','','r') /> 
113</#if> 
114 
115<#-- Identificador symphony itinerante --> 
116<#assign symphonyActivityId = propsUtil.get("symphony.fblcActivityId") /> 
117 
118<#-- W-664 START --> 
119<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")/> 
120 
121<#assign titlesActivityTest = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente.list") /> 
122<#if titlesActivityTest?has_content> 
123<#assign titlesActivityList = titlesActivityTest?split(",") /> 
124<#assign titleEscapedUC = titleEscaped?lower_case /> 
125</#if> 
126<#list titlesActivityList as titleTest> 
127	<#assign titleTestUC = titleTest?lower_case /> 
128	<#if titleEscapedUC==titleTestUC> 
129		<#assign activityType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.actividad.exposicion.permanente") /> 
130	</#if> 
131</#list> 
132<#-- W-664 END --> 
133 
134<div class="cards element row" id="1" style=""> 
135    <div class="col-lg-12"> 
136            <div class="element-img "> 
137                <a href = "${card_url}" class="element-img actividades"> 
138                    <img alt="${altImage}" src="${imageSrc}"> 
139                </a> 
140            </div> 
141        <div class="element-text"> 
142            <#-- <span class="element-type color-caixa-blue">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.actividad")}</span> --> 
143			<span class="element-type color-caixa-blue">${activityType} </span> 
144			<label id="added_label" data-fblcid="${fblcActivityId}" class="card-course__tag hide">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.TAG.ADDED")}</label> 
145            <a href="${card_url}"> 
146                <#if title?has_content> 
147                	<h3 class="element-title">${titleEscaped}</h3> 
148				</#if> 
149                <#if subtitle?has_content>	 
150                	<p class="element-body">${subtituloEscaped}</p> 
151				</#if> 
152            </a> 
153        </div> 
154        <div class="valoration-row"> 
155            <div class="links-wrapper"> 
156                <#if categories?has_content> 
157        			<div class="bloque hide-below-980"> 
158        				<div class="tags"> 
159        					<#list categories as category> 
160        						<#-- redirects to the results page with the tag--> 
161                                <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
162        					</#list> 
163        				</div> 
164        			</div> 
165    			</#if> 
166            </div>     
167        </div> 
168        <div> 
169            <p></p> 
170            <div class="card-share flex"> 
171				<#if card_url != "">					 
172					<#if symphonyActivityId != fblcActivityId> 
173						<#if itinerancesActive && hasCentersToPlan> 
174							<#if is_signed_in> 
175							    <#if !isAlumno> 
176								    <button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${centersBookingURL}','','700', '800')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
177								    </#if> 
178							<#else> 
179								<button id="book_button" data-fblcid="${fblcActivityId}" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"class="card-button color-caixa-blue background-white">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.BOOK.BUTTON")}</button> 
180							</#if> 
181							<#if !isAlumno> 
182							    <button id="plan_button" data-fblcid="${fblcActivityId}" onClick="addGTMAddActivityToPlani('${titleEscaped?js_string?html}','${fblcActivityId}','','${area_conocimiento?join(", ")}','${competencias?join(", ")}');event.stopPropagation();openPopup('${centersURL}','','700', '800')" class="card-button btn-primary btn-default ml-2">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ACTIVITY.PLAN.BUTTON")}</button> 
183						    </#if> 
184						</#if> 
185					</#if>   
186                </#if>   
187                <div class="card-actions flex"> 
188                    <div class="statistics"> 
189						<svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
190							<path class="circle-bg" d="M18 2.0845 
191								a 15.9155 15.9155 0 0 1 0 31.831 
192								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
193							<path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
194								a 15.9155 15.9155 0 0 1 0 31.831 
195								a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
196							<text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
197						</svg> 
198					</div> 
199					<div class="share"> 
200                        <button id="share"></button> 
201                        <div class="addthis_inline_share_toolbox tooltip"></div> 
202                    </div> 
203					<div class="bookmark"> 
204						<#if is_signed_in> 
205							<#if isUserBookmark> 
206								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
207							<#else> 
208								<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
209							</#if> 
210						<#else> 
211							<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
212						</#if> 
213					</div> 
214                </div>                     
215            </div> 
216        </div> 
217    </div>  
218</div> 
219 
220<script> 
221$( document ).ready(function() { 
222    initAddThis(); 
223	 
224	var fblcActivityId = '${fblcActivityId}'; 
225	 
226	ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
227 
228    
229	$(document).bind("DOMNodeRemoved", function(e) 
230
231		var currentTarget = e.target; 
232		if (currentTarget){ 
233			var idName = currentTarget.id; 
234			if (idName == 'dialog'){ 
235				ActivityList.existsActivity(fblcActivityId, showLabelActivity, hideLabelActivity); 
236				PlannerIcons.refreshIcons(); 
237
238
239            
240	}); 
241}); 
242 
243function hideLabelActivity(fblcActivityId){ 
244	 
245	var plan_button = document.getElementById("plan_button"); 
246	 
247	 
248	$("#added_label[data-fblcid='" + fblcActivityId + "']").addClass('hide'); 
249
250 
251function showLabelActivity(fblcActivityId){	 
252	$("#added_label[data-fblcid='" + fblcActivityId + "']").removeClass('hide'); 
253	$("#plan_button[data-fblcid='" + fblcActivityId + "']").addClass('card-button-dark'); 
254	$("#plan_button[data-fblcid='" + fblcActivityId + "']").text('${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.GO.PLANIFICADOR")}'); 
255	var url = getPlannerUrl(); 
256	$("#plan_button[data-fblcid='" + fblcActivityId + "']").attr('onclick','location.href=\''+url+'\''); 
257	$("#book_button[data-fblcid='" + fblcActivityId + "']").hide(); 
258		 
259
260 
261function getPlannerUrl(){ 
262	if(!${is_signed_in?c}) { 
263			url = Liferay.Util.PortletURL.createPortletURL( 
264				'${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}', 
265
266						'p_p_id': 'com_educaixa_planner_portlet_plannerbuilder_PlannerBuilderActivityListPortlet', 
267						'activities': JSON.stringify(LocalStorage.getAllByPrefix(ACTIVITY_PREFIX)) 
268
269		); 
270
271	else url = '${LiteralsToolsServiceUtil.getLiteral(groupId, language, "COM.EDUCAIXA.PLANNER.ICONS.PLANNERURL")}'; 
272	return url; 
273
274 
275</script>