Ressurspublisering

En feil oppsto under behandling av malen.
The following has evaluated to null or missing:
==> assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL)  [in template "29767924528592#240049#336752" at line 158, column 40]

----
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 viewURL = assetRenderer.getUR...  [in template "29767924528592#240049#336752" at line 158, column 21]
----
1<#-- STAFF PICKS ASSET DISPLAY TEMPLATE  --> 
2 
3<#function getFieldValue ddmFormFieldValues fieldReference> 
4    <#list ddmFormFieldValues as ddmFormFieldValue> 
5        <#if ddmFormFieldValue.getDDMFormField().getFieldReference()==fieldReference> 
6            <#if (ddmFormFieldValue.getValue())??> 
7                <#assign value=ddmFormFieldValue.getValue().getString(locale) /> 
8                <#return value /> 
9            <#else> 
10                <#return null /> 
11            </#if> 
12        </#if> 
13    </#list> 
14    <#return 'null' /> 
15</#function> 
16 
17<#assign queryLimit = 8 /><#-- Limits how many records are shown at maximum in list view --> 
18 
19<#assign centralApiEndpoint = ArenaConfigurationScopeManager.arenaSystemConfiguration().centralApiEndpoint() /> 
20<#assign localApiEndpoint = ArenaConfigurationScopeManager.arenaSystemConfiguration().localApiEndpoint() /> 
21<#assign csAddress =centralApiEndpoint /> 
22<#assign lsAddress =localApiEndpoint  /> 
23 
24<#assign friendlyUrl = "" /> 
25<#assign sitePrefix = "/web/arena" /> 
26 
27<#-- If friendlyUrl is not set, get it from the organization --> 
28<#if friendlyUrl == "" > 
29    <#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")/> 
30    <#assign group = groupLocalService.getGroup(groupId)/> 
31    <#assign friendlyUrl = group.getFriendlyURL() /> 
32    <#assign sitePrefix = "/web${friendlyUrl}" /> 
33</#if> 
34 
35<#-- Get server and page URLs --> 
36<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() /> 
37<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
38<#assign portalUrl = themeDisplay.getPortalURL() /> 
39<#assign portalUrlSecure = portalUrl /> 
40<#if portalUrlSecure?index_of("https") == -1> 
41    <#assign portalUrlSecure = portalUrl?replace("http", "https") /> 
42</#if> 
43<#if portalUrl?index_of("https") != -1> 
44    <#assign portalUrl = portalUrl?replace("https", "http") /> 
45</#if> 
46 
47<#assign virtualURL = portalUrlSecure?replace("https://","") /> 
48 
49<#assign fullPageUrl = portalUrl + themeDisplay.getURLCurrent() /> 
50<#assign crdPageUrl = portalUrlSecure + sitePrefix+"/results"/> 
51<#assign searchPageUrl = portalUrlSecure + sitePrefix+"/search"/> 
52 
53 
54<#--Makes a query to the REST API and requests records. This function should be used to call the API within this template. 
55Returns the result as a simpleHash object --> 
56<#function queryAPI query limit> 
57    <#assign fullRequestUrl = "${lsAddress}/portalsites/${portalSiteID}/records?query=${urlCodec.encodeURL(query)}&count=${limit}&isShowExtended=false&sortDirection=Descending&sortField=Relevance&agencyMemberId=${agencyMemberID}&decorationNames=Ratings"/> 
58    <#assign response = httpUtilUnsafe.URLtoString(fullRequestUrl) /> 
59    <#assign result = jsonFactoryUtil.looseDeserialize(response) /> 
60    <#return result /> 
61</#function> 
62 
63<#-- Makes a query to Central REST API to get portal site settings --> 
64<#function getPortalSiteSettingsFromCentralService> 
65    <#assign requestUrlPortalSites = "${csAddress}/configs/portalsites?vhost=${urlCodec.encodeURL(virtualURL)}&friendlyUrl=${urlCodec.encodeURL(friendlyUrl)}" /> 
66    <#assign response = httpUtilUnsafe.URLtoString(requestUrlPortalSites) /> 
67    <#assign result = jsonFactoryUtil.looseDeserialize(response) /> 
68    <#return result /> 
69</#function> 
70 
71<#-- Makes a query to Central REST API to get Member settings to extract Agency ID from --> 
72<#function getAgencySettingsFromCentralService> 
73    <#assign requestUrlMemberAgencies = "${csAddress}/configs/agencymembers/${agencyMemberID}" /> 
74    <#assign response = httpUtilUnsafe.URLtoString(requestUrlMemberAgencies) /> 
75    <#assign result = jsonFactoryUtil.looseDeserialize(response) /> 
76    <#return result /> 
77</#function> 
78 
79<#function getServerSettingsFromCentralService> 
80    <#assign portalSites = "" /> 
81    <#assign returnValue = "OK" /> 
82    <#assign portalSites = "" /> 
83    <#assign memberData = "" /> 
84    <#assign favoriteAgencyName = "" /> 
85    <#attempt> 
86        <#assign portalSites = getPortalSiteSettingsFromCentralService() /> 
87        <#if portalSites.id??> 
88            <#assign portalSiteID = portalSites.id?string /> 
89            <#assign favoriteAgencyName = portalSites.mainGroup.properties["Favourite Agency Member"] /> 
90        <#else> 
91            <#assign requestUrlPortalSites = "${csAddress}/configs/portalsites?vhost=${urlCodec.encodeURL(virtualURL)}&friendlyUrl=${urlCodec.encodeURL(friendlyUrl)}" /> 
92            <#assign response = httpUtilUnsafe.URLtoString(requestUrlPortalSites) /> 
93        </#if> 
94        <#if favoriteAgencyName != ""> 
95        <#-- Go through portalSites.agencyMemberSummaries to find the one with matching favoriteAgencyName --> 
96            <#list portalSites.agencyMemberSummaries as summary> 
97                <#if summary.name == favoriteAgencyName> 
98                    <#assign agencyMemberID = summary.id?string /> 
99                </#if> 
100            </#list> 
101        </#if> 
102        <#recover> 
103            <#assign returnValue =  "Portal Sites failed" /> 
104    </#attempt> 
105    <#if agencyMemberID != "" && returnValue == "OK"> 
106        <#attempt> 
107            <#assign memberData = getAgencySettingsFromCentralService() /> 
108            <#if memberData.agency??> 
109                <#assign agencyID = memberData.agency.id /> 
110                <#assign agencyName = memberData.agency.name /> 
111            </#if> 
112            <#recover> 
113                <#assign returnValue =  "Agency member data failed" /> 
114        </#attempt> 
115    </#if> 
116 
117    <#return returnValue /> 
118</#function> 
119 
120<#-- Shows server info gained from the central service. You can add a call to this macro when debugging --> 
121<#macro debugServerInfo> 
122    <div class="serverInfo debug informative"> 
123        <p class="idsForRestAPI"> 
124            <strong>Portal Site ID:</strong> ${portalSiteID}<br /> 
125            <strong>Agency ID:</strong> ${agencyID}<br /> 
126            <strong>Agency name:</strong> ${agencyName}<br /> 
127            <strong>Member ID:</strong> ${agencyMemberID} 
128        </p> 
129        <p class="serverURL"> 
130            <strong>Portal site URL:</strong> ${portalUrl}<br /> 
131            <strong>Portal site URL Secure:</strong> ${portalUrlSecure}<br /> 
132            <strong>Virtual URL:</strong> ${virtualURL} 
133        </p> 
134    </div> 
135</#macro> 
136 
137 
138<link rel="stylesheet" href="//cdn-s3.axiell.com/arena/staffpicks/staffpicks.css"> 
139<div class="staffpick-list-large-container"> 
140    <#assign status = getServerSettingsFromCentralService() /> 
141    <#if status != "OK" > 
142        <script> 
143            console.log("Failed to get API settings with: "+${status}); 
144        </script> 
145    </#if> 
146 
147    <ul class="staffpick-list-large"> 
148        <#if entries?has_content> 
149            <#list entries as curEntry> 
150                <#assign assetRenderer = curEntry.getAssetRenderer() /> 
151                <#assign className = assetRenderer.getClassName() > 
152                <#assign ddmFormValuesReader = assetRenderer.getDDMFormValuesReader() /> 
153                <#assign ddmFormFieldValues = ddmFormValuesReader.getDDMFormValues().getDDMFormFieldValues() /> 
154                <#if className == "com.liferay.journal.model.JournalArticle"> 
155                    <#assign article = assetRenderer.getArticle() > 
156                    <#assign img = article.getSmallImageURL() > 
157                    <#assign dateFormat = "d.M.yyyy - HH:mm" /> 
158                    <#assign viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL) /> 
159                    <#assign recordId = getFieldValue(ddmFormFieldValues, 'recordId') /> 
160                    <#assign articleAuthor = getFieldValue(ddmFormFieldValues, 'articleAuthor') /> 
161                    <#assign articleTitle = assetRenderer.getTitle(locale) /> 
162                    <#assign searchQuery = "" /> 
163                    <#if recordId?? && recordId != ""> 
164                        <#if recordId?index_of("id:") == -1> 
165                            <#assign searchQuery = 'id:"${recordId}"' /> 
166                        <#else> 
167                            <#assign searchQuery = recordId /> 
168                        </#if> 
169                    </#if> 
170                    <#assign result = "" /> 
171                    <#assign recordCSS = "" /> 
172                    <#assign recordInfo = ""/> 
173                    <#assign containerCSS = "connected" /> 
174                    <#if searchQuery != ""> 
175                        <#attempt> 
176                            <#assign result = queryAPI(searchQuery, 1) /> 
177                            <#assign recordInfo = result.records[0] /> 
178                            <#recover><#-- Rest call failed. Populating similar object with dummy values--> 
179                                <#assign recordInfo = { 
180                                "fields" : { 
181                                "title" :  "${articleTitle}" 
182
183                                } /> 
184                                <#assign containerCSS = "no-connection" /> 
185                        </#attempt> 
186                    <#else> 
187                        <#assign containerCSS = "no-connection" /> 
188                        <#assign recordInfo = { 
189                        "fields" : { 
190                        "title" :  "${articleTitle}" 
191
192                        } /> 
193                    </#if> 
194                    <#if recordId?? && recordId != ""> 
195                        <#assign recordCSS = "record-${recordId}" /> 
196                    </#if> 
197                    <li class="row staffpick-entry ${recordCSS} ${containerCSS}"> 
198                        <a class="" href="${viewURL}"> 
199                            <div class="ccol-xs-3 col-sm-3"> 
200                                <#if recordInfo.id??> <#-- simple check to see if we have record data --> 
201                                    <#assign agencyID = recordInfo.agencyId /> 
202                                    <#if assetRenderer.getThumbnailPath(renderRequest)??> 
203                                        <img class="cover-image cover-overwrite" alt="" src="${renderer.getThumbnailPath(renderRequest)}"/> 
204                                    <#else> 
205                                        <img class="cover-image" alt="" src="${portalUrlSecure}/local-rest/api/v1/portalsites/${portalSiteID}/agencies/${agencyID}/records/${urlCodec.encodeURL(recordInfo.id)}/cover" /> 
206                                    </#if> 
207                                <#else> 
208                                    <#if assetRenderer.getThumbnailPath(renderRequest)??> 
209                                        <img class="cover-image cover-overwrite" alt="" src="${renderer.getThumbnailPath(renderRequest)}"/> 
210                                    </#if> 
211                                </#if> 
212                            </div> 
213                            <div class="ccol-xs-9 col-sm-9 record-info"> 
214                                <h2 class="staffpick-list-record-title"> 
215                                    ${recordInfo.fields.title} 
216                                </h2> 
217                                <#if recordInfo.fields?? && recordInfo.fields.authors?? && recordInfo.fields.authors?size gt 0 && recordInfo.fields.authors[0]??> 
218                                    <p class="staffpick-list-author"> 
219                                        <@liferay.language_format key="staffpicks.list.author" arguments=[recordInfo.fields.authors[0].name] /> 
220                                    </p> 
221                                </#if> 
222                                <p class="staffpick-list-summary"> 
223                                    ${article.getDescription(locale)} 
224                                </p> 
225                                <#if articleAuthor?? && articleAuthor != ""> 
226 
227                                    <p class="recommended-by"> 
228                                        <@liferay.language_format key="staffpicks.list.articleauthor" arguments=[articleAuthor] /> 
229                                    </p> 
230                                </#if> 
231                            </div> 
232                        </a> 
233                    </li> 
234                <#else> 
235                    ${assetRenderer.getClassName()} 
236                </#if> 
237            </#list> 
238        </#if> 
239    </ul> 
240 
241</div> 
242 
243<#macro getEditIcon> 
244    <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())> 
245        <#assign redirectURL = renderResponse.createRenderURL() /> 
246 
247        ${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")} 
248        ${redirectURL.setWindowState("pop_up")} 
249 
250        <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL) /> 
251 
252        <#if validator.isNotNull(editPortletURL)> 
253            <#assign title = languageUtil.format(locale, "edit-x", htmlUtil.escape(assetRenderer.getTitle(locale))) /> 
254 
255            <@liferay_ui["icon"] 
256            <#--image="edit"--> 
257            iconCssClass="icon-edit" 
258            message=title 
259            url="javascript:Liferay.Util.openWindow({dialog: {destroyOnHide: true, width: 960}, id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});" 
260            /> 
261        </#if> 
262    </#if> 
263</#macro> 

Konto

Språkvelger