Info Center Main Carousel

Resources Overview Tabbed Content

Asset Publisher

Addressing Burnout & Compassion Fatigue In Nonprofit Employees

             

Nonprofit workers strive to make the world a better place. However, these passionate professionals often face long working hours, limited resources, funding deficiencies and an unrelenting stream of other on-the-job challenges. All this and more can lead to employee burnout, as well as nonprofit compassion fatigue.

How can nonprofit employees of all levels better address such difficulties and avoid becoming overly strained? Below are some actionable ideas to help prevent employee burnout and work toward a healthier work-life balance.

First, what is nonprofit compassion fatigue and what does it look like? Referred to at times as secondary trauma or vicarious trauma, compassion fatigue is a way to describe the excessive stress affecting those exposed to the traumatic suffering of others leading to desensitization, indifference or apathy. When untreated, it could lead to exhaustion, irritability, reduced productivity and absenteeism, along with physical and mental health problems.

Essentially, compassion fatigue means that a person working continuously under strenuous conditions no longer feels able to care about the people they serve. Often, these individuals get to this point by minimizing their own suffering. In fact, industry reports have found that 62% of people who engage in emotional work tend to hide their personal feelings. Combine this with being buried in work and these people can easily develop feelings of helplessness and hopelessness.

Over time, this not only affects an employee’s health and relationships, but it can significantly impact employee retention. A 2021 study found that 69% of participants believe their organizations are understaffed. Chronic staffing issues ultimately whittle away at a nonprofit's ability to achieve objectives.

What can leaders and HR professionals do to address compassion fatigue and burnout? It starts by implementing a strategy designed to promote a healthy work culture. Everyone should be encouraged to capitalize on vacation time, lunch breaks and time off-the-clock to de-stress from the important work they are striving to accomplish. Leaders should also establish and enforce reasonable work hours.

Another way to help address arduous workloads is to create a prioritization system for projects and tasks. While the job market is understandably in flux, efforts should be made to hire more staff or recruit additional volunteer support.

Lastly, open the door to enhanced communication strategies. Extend genuine thanks to the staff and encourage honest feedback, anonymous or otherwise. Not only are these methods more sustainable, but, in the end, they can generate greater employee engagement, retention and job satisfaction.

For employees, to avoid becoming burnt out and feeling powerless, it’s advised to utilize vacation time and take regular breaks. By “unplugging” during the day — even if it’s only a short break — it’s possible to reduce stress, gain perspective and feel more in control. Also, learn to say “no” without feeling guilty. Setting clear boundaries on messaging after hours, task delegation and more could do wonders for future productivity.

To learn more about combating nonprofit employee burnout, please see the accompanying resource.

Resources:

https://www.qgiv.com/blog/how-to-overcome-nonprofit-burnout-and-compassion-fatigue/

https://www.forbes.com/sites/forbesnonprofitcouncil/2020/01/24/how-to-avoid-compassion-fatigue-care-for-your-staff-so-they-can-care-for-the-world/?sh=ffa58b276f88

https://hashtagnonprofit.org/index.php/resources/mentalhealth/355-recognising-compassion-fatigue-in-the-npo-workplace

https://www.missionbox.com/article/98/combating-compassion-fatigue-finding-balance-in-the-nonprofit-workplace

https://www.keela.co/blog/nonprofit-resources/3-leading-causes-of-nonprofit-burnout

https://www.idealist.org/en/careers/recognizing-compassion-fatigue-helping-professions


Asset Publisher

An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy131.getDLFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on com.sun.proxy.$Proxy131 object "com.liferay.portlet.documentlibrary.service.impl.DLFileEntryLocalServiceImpl@24795d42"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign dlfileEntry2 = documentServic...  [in template "6242803#6242849#6281901" at line 83, column 1]
----
1<#assign liferay_ui = taglibLiferayHash["/META-INF/liferay-ui.tld"] /> 
2<#assign liferay_theme = taglibLiferayHash["/META-INF/liferay-theme.tld"] /> 
3<@liferay_theme["defineObjects"]/> 
4 
5<#assign blogsEntryLocalService = serviceLocator.findService("com.liferay.blogs.kernel.service.BlogsEntryLocalService")> 
6<#assign assetCategoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryService")> 
7<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
8<#assign documentService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
9 
10 
11<#assign namespace = randomNamespace /> 
12<#assign smallImageURL = ""> 
13<#assign imageUrl = ""> 
14<#assign videoUrl = ""> 
15<#assign subHeading = ""> 
16<#assign blogClassName="com.liferay.blogs.kernel.model.BlogsEntry"> 
17<#assign documentClassName = "com.liferay.document.library.kernel.model.DLFileEntry"> 
18<#assign vocabularyNameToUse = "Topic"> 
19<#assign resetCurParam = "false"> 
20<#if renderRequest.getParameter("resetCur")?? && renderRequest.getParameter("resetCur")??> 
21    <#if renderRequest.getParameter("resetCur") == "true"> 
22        <#assign resetCurParam = "false"> 
23    </#if> 
24</#if> 
25<#assign categoryIdParam = ""> 
26<#if renderRequest.getParameter("categoryId")?? && renderRequest.getParameter("categoryId")??> 
27    <#assign categoryIdParam = renderRequest.getParameter("categoryId")> 
28</#if> 
29<#assign pagination = "none"> 
30<#assign pageinationDelta = 5> 
31 
32<#attempt> 
33    <#assign pagination = portletPreferences["paginationType"]?first > 
34    <#recover> 
35</#attempt> 
36 
37<#attempt> 
38    <#assign pageinationDelta = portletPreferences["delta"]?first?number > 
39    <#recover> 
40</#attempt> 
41 
42<#assign portletId = themeDisplay.getPortletDisplay().getId()> 
43<#assign siteGroupID = themeDisplay.getSiteGroupId()> 
44 
45<#assign vocabularyIdToUse = 0> 
46<#attempt> 
47    <#assign vocabularyIdToUse = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getSiteGroupId(), vocabularyNameToUse).getVocabularyId()> 
48        <#recover> 
49</#attempt> 
50 
51<script> 
52function redirectToPage(pageURL){ 
53	var pathValue = window.location.pathname; 
54	pageURL = pageURL.replace(" ","-").replace("'","-").replace("&",""); 
55	var rest = pathValue.substring(0, pathValue.lastIndexOf("/") + 1); 
56	var last = pathValue.substring(pathValue.lastIndexOf("/") + 1, pathValue.length); 
57	var pathValue = pathValue.replace(last,pageURL); 
58	//console.log("pathValue : " +pathValue);	 
59	window.location.href = pathValue; 
60
61</script> 
62 
63<script> 
64$(document).ready(function() { 
65    $('.${namespace}asset-img .video-click-popup').click(function() { 
66        showVideoPlayerModal($(this).attr('href')); 
67    }); 
68}); 
69</script> 
70 
71<div id="${namespace}info-wrapper" class="info-wrapper"> 
72<#assign fullUid = ""> 
73<#list entries as entry> 
74<#-- ${entry.title}<br> --> 
75<#assign firstChar = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("image-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())?last_index_of("/")> 
76<#assign lastChar = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("image-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())?index_of("?")> 
77 
78<#assign firstSlash = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("image-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())?index_of("/")> 
79<#assign lastSlash = firstChar> 
80<#assign strToReplace = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("image-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())?substring(firstSlash+1, lastSlash)> 
81 
82<#assign fullUid = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("image-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())?substring(firstChar+1, lastChar)> 
83<#assign dlfileEntry2 = documentService.getDLFileEntryByUuidAndGroupId(fullUid, siteGroupID)> 
84<#-- ${fullUid}<br> --> 
85<#assign imageFolderID = dlfileEntry2.getFolderId()> 
86<#assign imageTitle = dlfileEntry2.getTitle()> 
87<#assign replaceStr = "documents"+"/"+siteGroupID+"/"+imageFolderID+"/"+imageTitle> 
88 
89    <#assign dateToUse = entry.getCreateDate()> 
90	<#assign entry = entry /> 
91 
92	<#assign assetRenderer = entry.getAssetRenderer() /> 
93     
94	<#assign entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) /> 
95 
96    <#assign dlfileModalPopup = ""> 
97 
98	<#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) /> 
99    <#assign linkTarget = ""> 
100	<#if assetLinkBehavior != "showFullContent"> 
101		<#assign viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL) /> 
102		<#assign viewURL = "/c/blogs/find_entry?entryId=" + entry.getClassPK()> 
103	</#if> 
104	<#assign blogCategoies = assetCategoryService.getCategories(entry.getClassName(), entry.getClassPK())> 
105	<#assign entryClassName = entry.getClassName()> 
106	 
107	<#if (entryClassName == blogClassName)> 
108		<#assign blogEntry = blogsEntryLocalService.getEntry(entry.getClassPK())> 
109		<#assign dateToUse = blogEntry.getDisplayDate()> 
110		<#assign imageUrl = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("image-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())> 
111		 
112	<#assign fixUrl = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("image-url")?replace(strToReplace, replaceStr)> 
113		<#assign imageUrl = fixUrl> 
114		 
115		<#assign videoUrl = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("video-url")> 
116		<#assign subHeading = blogsEntryLocalService.getEntry(entry.getClassPK()).getExpandoBridge().getAttribute("sub-heading")> 
117		<#if blogEntry.isSmallImage() > 
118			<#assign smallImageURL = blogEntry.getEntryImageURL(themeDisplay)?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())> 
119		</#if> 
120	<#elseif entryClassName == documentClassName> 
121	    <#attempt> 
122    	    <#assign dlFileEntry = documentService.getDLFileEntry(entry.getClassPK())> 
123    	    <#if dlFileEntry.getExpandoBridge().hasAttribute("image-url")> 
124    	        <#assign imageUrl = dlFileEntry.getExpandoBridge().getAttribute("image-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())> 
125    	   	${imageUrl} 
126            </#if> 
127            <#if dlFileEntry.getExpandoBridge().hasAttribute("icon-url")> 
128    	        <#assign smallImageURL = dlFileEntry.getExpandoBridge().getAttribute("icon-url")?replace("[$SITE_GROUP_ID$]", themeDisplay.getSiteGroupId())> 
129    	    </#if> 
130    	    <#if dlFileEntry.getExpandoBridge().hasAttribute("display-title")> 
131    	        <#assign documentDisplayTitle = dlFileEntry.getExpandoBridge().getAttribute("display-title")> 
132    	        <#if documentDisplayTitle?has_content> 
133    	            <#assign entryTitle = htmlUtil.escape(documentDisplayTitle) /> 
134    	        </#if> 
135    	    </#if> 
136    	    <#if dlFileEntry.getExpandoBridge().hasAttribute("modal-popup-function")> 
137    	        <#assign dlfileModalPopup = dlFileEntry.getExpandoBridge().getAttribute("modal-popup-function")> 
138    	    </#if> 
139    	     
140    	    <#if !dlfileModalPopup?has_content> 
141    	        <#assign viewURL = themeDisplay.getPortalURL() + "/c/document_library/get_file?uuid=" + dlFileEntry.getUuid() + "&groupId=" + themeDisplay.getScopeGroupId()> 
142    	        <#assign linkTarget = "target=\"_blank\""> 
143    	    </#if> 
144	    <#recover> 
145	         
146	    </#attempt> 
147	</#if> 
148	<#assign linkTarget = "target=\"_blank\""> 
149	 
150<div class="asset-wrapper"> 
151    <#if dlfileModalPopup?has_content> 
152        <div class="${namespace}asset-img asset-img"> 
153            <img src="${imageUrl}" onclick="${dlfileModalPopup}" class="asset-image" > 
154        </div> 
155    <#else> 
156        <#if (imageUrl != "") || (videoUrl != "")> 
157    	<div class="${namespace}asset-img asset-img"> 
158            <#if (videoUrl != "")> 
159        		<div class="video-modal video-click-popup" href="${videoUrl}"> 
160        	<#else> 
161        	    <#if (imageUrl != "")> 
162        	        <a href="${viewURL}" target="_blank" ${linkTarget}> 
163        	    </#if> 
164        	</#if> 
165    	 
166        	<#if (imageUrl != "")> 
167        		<img src="${imageUrl}" class="asset-image" > 
168        	</#if> 
169        	 
170        	<#if (videoUrl != "")> 
171        		</div> 
172        	<#else> 
173        	    <#if (imageUrl != "")> 
174        	        </a> 
175        	    </#if> 
176        	</#if> 
177    	</div> 
178        </#if> 
179    </#if> 
180<div class="asset-icon"> </div> 
181	<div class="asset-abstract"> 
182		<div class="lfr-meta-actions asset-actions"> 
183						<@getEditIcon /> 
184		</div> 
185<#assign categoryName= ""> 
186<#if entry.getCategories()?has_content> 
187    <#list entry.getCategories() as curCategory> 
188        <#if curCategory.getVocabularyId() == vocabularyIdToUse> 
189    		<#assign categoryName= curCategory.getName()> 
190    		<#break> 
191    	</#if> 
192    </#list> 
193</#if> 
194 
195<#attempt> 
196    <#if categoryIdParam?? && !validator.isNull(categoryIdParam) && validator.isNumber(categoryIdParam)> 
197        <#assign categoryName = assetCategoryService.getCategory(categoryIdParam?number).getName()> 
198    </#if> 
199    <#recover> 
200</#attempt> 
201 
202<#if categoryName?has_content> 
203    <div class="asset-category"> 
204        <span class="content-pillar" style="background-color: #707070;">${categoryName}</span>   
205    </div> 
206</#if> 
207		<div class="asset-title-image">	 
208			<#if (smallImageURL != "")> 
209				<img alt="" src="${smallImageURL}" /> 
210			</#if> 
211					 
212			<h3 class="title"> 
213			    <#if dlfileModalPopup?has_content> 
214			        <a onclick="${dlfileModalPopup}">${entryTitle}</a> 
215			    <#else> 
216			    	<a href="${viewURL}" ${linkTarget}>${entryTitle}</a> 
217			    </#if> 
218			</h3> 
219		</div> 
220 
221	 
222<div class="date-and-author"><span class="asset-date"> 
223				${dateUtil.getDate(dateToUse, "MMMM dd, yyyy ", locale)} 
224			</span><!--/ 
225			<span class="asset-author"> 
226				<@liferay.language key="written-by" /> ${htmlUtil.escape(portalUtil.getUserName(entry.getUserId(), entry.getUserName()))} 
227			</span>--> 
228			</div> 
229		<div class="asset-content"> 
230		 
231 
232			<div class="asset-summary"> 
233				<@getMetadataField fieldName="author" /> 
234				 
235                <#assign abstractTxt = htmlUtil.escape(assetRenderer.getSummary(locale)) > 
236                <#-- <#assign abstractTxtLen = abstractTxt?length > 172  --> 
237                <#if abstractTxt?length gt 172> 
238                    ${abstractTxt[0..172]}... 
239				<!-- ${htmlUtil.escape(assetRenderer.getSummary(locale))} --> 
240                <#else> 
241                    ${abstractTxt} 
242                </#if> 
243 
244			</div> 
245			<#if dlfileModalPopup?has_content> 
246			    <a onclick="${dlfileModalPopup}" class="more-link"><@liferay.language key="read-more" /><span class="hide-accessible"><@liferay.language key="about" />${entryTitle}</span></a> 
247			<#else> 
248			 
249				<a href="${viewURL}" ${linkTarget} class="more-link"><@liferay.language key="read-more" /><span class="hide-accessible"><@liferay.language key="about" />${entryTitle}</span></a> 
250			</#if> 
251			 
252		</div> 
253	</div> 
254	<div class="clearfix"></div> 
255</div> 
256</#list> 
257</div> 
258 
259<script> 
260    AUI().use('liferay-portlet-url', function(A) { 
261     
262        $(document).ready(function() { 
263            if ($('#${namespace}info-wrapper').siblings('.lfr-pagination').find('ul.lfr-pagination-buttons a').length) { 
264                $('#${namespace}info-wrapper').siblings('.lfr-pagination').find('ul.lfr-pagination-buttons a').attr('href', 'javascript:;'); 
265                $('#${namespace}info-wrapper').siblings('.lfr-pagination').attr('curParam', '1'); 
266                $('#${namespace}info-wrapper').siblings('.lfr-pagination').click(function() { 
267                    if ($(this).attr('curParam') === '1') { 
268                        $($(this).find('ul.lfr-pagination-buttons li')[0]).addClass('disabled'); 
269                    } else { 
270                        $($(this).find('ul.lfr-pagination-buttons li')[0]).removeClass('disabled'); 
271
272                }); 
273                 
274                $($('#${namespace}info-wrapper').siblings('.lfr-pagination').find('ul.lfr-pagination-buttons a')[0]).click(function() { 
275                    if (!$(this).parent().hasClass('disabled')) { 
276                       var curParam = Number($(this).parents('.lfr-pagination').attr('curParam')); 
277                       if (Number(curParam) <= 1) { 
278                        return; 
279
280                       $(this).parents('ul.lfr-pagination-buttons').find('li:nth-child(2)').removeClass('disabled'); 
281                       //console.log($(this).parents('ul.lfr-pagination-buttons').find('li:nth-child(2)')); 
282                       var nextURL = Liferay.PortletURL.createRenderURL(); 
283                       $(this).parents('.lfr-pagination').attr('curParam', Number(curParam) - 1); 
284                       nextURL.setPortletId('${portletId}'); 
285                       nextURL.setWindowState('exclusive'); 
286                       nextURL.setParameter('cur', curParam - 1); 
287                       nextURL.setParameter('resetCur', '${resetCurParam}'); 
288                       <#if categoryIdParam??> 
289                            nextURL.setParameter('categoryId', '${categoryIdParam}'); 
290                       </#if> 
291                       //$('#${namespace}info-wrapper').load(nextURL.toString() + ' .info-wrapper'); 
292                       $.ajax({ 
293                          url: nextURL.toString(), 
294                        }).done(function( data ) { 
295                            Liferay.fire('activateTab', {tabId: $('#${namespace}info-wrapper').parents('div.content[tabNameValue]').attr('tabNameValue'), scrollToTab: true}); 
296                            $('#${namespace}info-wrapper').html($(data).find('.info-wrapper').addBack('.info-wrapper').html()); 
297                            if ($($(data).find('.lfr-pagination-buttons li')[1]).hasClass('disabled')) { 
298                                 $($('#${namespace}info-wrapper').siblings('.lfr-pagination').find('ul.lfr-pagination-buttons li')[1]).addClass('disabled'); 
299                              
300
301                        }); 
302
303                }); 
304                $($('#${namespace}info-wrapper').siblings('.lfr-pagination').find('ul.lfr-pagination-buttons a')[1]).click(function() { 
305                    //console.log('clicked ' + !$(this).hasClass("disabled")) 
306                    if (!$(this).parent().hasClass('disabled')) { 
307                       var nextURL = Liferay.PortletURL.createRenderURL(); 
308                       var curParam = Number($(this).parents('.lfr-pagination').attr('curParam')); 
309                       $(this).parents('.lfr-pagination').attr('curParam', Number(curParam) + 1); 
310                       nextURL.setPortletId('${portletId}'); 
311                       nextURL.setWindowState('exclusive'); 
312                       nextURL.setParameter('cur', curParam + 1); 
313                       nextURL.setParameter('resetCur', '${resetCurParam}'); 
314                       <#if categoryIdParam??> 
315                            nextURL.setParameter('categoryId', '${categoryIdParam}'); 
316                       </#if> 
317                       //$('#${namespace}info-wrapper').load(nextURL.toString() + ' .info-wrapper'); 
318                       $.ajax({ 
319                          url: nextURL.toString(), 
320                        }).done(function( data ) { 
321                            $('#${namespace}info-wrapper').html($(data).find('.info-wrapper').addBack('.info-wrapper').html()); 
322                            if ($($(data).find('.lfr-pagination-buttons li')[1]).hasClass('disabled')) { 
323                                 $($('#${namespace}info-wrapper').siblings('.lfr-pagination').find('ul.lfr-pagination-buttons li')[1]).addClass('disabled'); 
324
325                            Liferay.fire('activateTab', {tabId: $('#${namespace}info-wrapper').parents('div.content[tabNameValue]').attr('tabNameValue'), scrollToTab: true}); 
326                        }); 
327
328                }); 
329
330            
331        }); 
332    }); 
333    </script> 
334 
335<#macro getDiscussion> 
336	<#if validator.isNotNull(assetRenderer.getDiscussionPath()) && (enableComments == "true")> 
337		<br /> 
338 
339		<#assign discussionURL = renderResponse.createActionURL() /> 
340 
341		${discussionURL.setParameter("struts_action", "/asset_publisher/" + assetRenderer.getDiscussionPath())} 
342 
343		<@liferay_ui["discussion"] 
344			className=entry.getClassName() 
345			classPK=entry.getClassPK() 
346			formAction=discussionURL?string 
347			formName="fm" + entry.getClassPK() 
348			ratingsEnabled=enableCommentRatings == "true" 
349			redirect=portalUtil.getCurrentURL(request) 
350			userId=assetRenderer.getUserId() 
351		/> 
352	</#if> 
353</#macro> 
354 
355<#macro getEditIcon> 
356	<#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())> 
357		<#assign redirectURL = renderResponse.createRenderURL() /> 
358 
359		${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")} 
360		${redirectURL.setWindowState("pop_up")} 
361 
362		<#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!"" /> 
363 
364		<#if validator.isNotNull(editPortletURL)> 
365			<#assign title = languageUtil.format(locale, "edit-x", entryTitle) /> 
366 
367			<@liferay_ui["icon"] 
368				image="edit" 
369				message=title 
370				url="javascript:Liferay.Util.openWindow({dialog: {width: 960}, id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});" 
371			/> 
372		</#if> 
373	</#if> 
374</#macro> 
375 
376<#macro getFlagsIcon> 
377	<#if enableFlags == "true"> 
378		<@liferay_ui["flags"] 
379			className=entry.getClassName() 
380			classPK=entry.getClassPK() 
381			contentTitle=entry.getTitle(locale) 
382			label=false 
383			reportedUserId=entry.getUserId() 
384		/> 
385	</#if> 
386</#macro> 
387 
388<#macro getMetadataField 
389	fieldName 
390
391	<#if stringUtil.split(metadataFields)?seq_contains(fieldName)> 
392		<span class="metadata-entry metadata-${fieldName}"> 
393			<#assign dateFormat = "dd MMM yyyy - HH:mm:ss" /> 
394 
395			<#if fieldName == "author"> 
396				<@liferay.language key="by" /> ${portalUtil.getUserName(assetRenderer.getUserId(), assetRenderer.getUserName())} 
397			<#elseif fieldName == "categories"> 
398				<@liferay_ui["asset-categories-summary"] 
399					className=entry.getClassName() 
400					classPK=entry.getClassPK() 
401					portletURL=renderResponse.createRenderURL() 
402				/> 
403			<#elseif fieldName == "create-date"> 
404				${dateUtil.getDate(entry.getCreateDate(), dateFormat, locale)} 
405			<#elseif fieldName == "expiration-date"> 
406				${dateUtil.getDate(entry.getExpirationDate(), dateFormat, locale)} 
407			<#elseif fieldName == "modified-date"> 
408				${dateUtil.getDate(entry.getModifiedDate(), dateFormat, locale)} 
409			<#elseif fieldName == "priority"> 
410				${entry.getPriority()} 
411			<#elseif fieldName == "publish-date"> 
412				${dateUtil.getDate(entry.getPublishDate(), dateFormat, locale)} 
413			<#elseif fieldName == "tags"> 
414				<@liferay_ui["asset-tags-summary"] 
415					className=entry.getClassName() 
416					classPK=entry.getClassPK() 
417					portletURL=renderResponse.createRenderURL() 
418				/> 
419			<#elseif fieldName == "view-count"> 
420				<@liferay_ui["icon"] 
421					image="history" 
422				/> 
423 
424				${entry.getViewCount()} <@liferay.language key="views" /> 
425			</#if> 
426		</span> 
427	</#if> 
428</#macro> 
429 
430<#macro getPrintIcon> 
431	<#if enablePrint == "true" > 
432		<#assign printURL = renderResponse.createRenderURL() /> 
433 
434		${printURL.setParameter("struts_action", "/asset_publisher/view_content")} 
435		${printURL.setParameter("assetEntryId", entry.getEntryId()?string)} 
436		${printURL.setParameter("viewMode", "print")} 
437		${printURL.setParameter("type", entry.getAssetRendererFactory().getType())} 
438 
439		<#if (validator.isNotNull(assetRenderer.getUrlTitle()))> 
440			<#if (assetRenderer.getGroupId() != themeDisplay.getScopeGroupId())> 
441				${printURL.setParameter("groupId", assetRenderer.getGroupId()?string)} 
442			</#if> 
443 
444			${printURL.setParameter("urlTitle", assetRenderer.getUrlTitle())} 
445		</#if> 
446 
447		${printURL.setWindowState("pop_up")} 
448 
449		<@liferay_ui["icon"] 
450			image="print" 
451			message="print" 
452			url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "printAsset', title: '" + languageUtil.format(locale, "print-x-x", ["hide-accessible", entryTitle]) + "', uri: '" + htmlUtil.escapeURL(printURL.toString()) + "'});" 
453		/> 
454	</#if> 
455</#macro> 
456 
457<#macro getRatings> 
458	<#if (enableRatings == "true")> 
459		<div class="asset-ratings"> 
460			<@liferay_ui["ratings"] 
461				className=entry.getClassName() 
462				classPK=entry.getClassPK() 
463			/> 
464		</div> 
465	</#if> 
466</#macro> 
467 
468<#macro getRelatedAssets> 
469	<#if enableRelatedAssets == "true"> 
470		<@liferay_ui["asset-links"] 
471			assetEntryId=entry.getEntryId() 
472		/> 
473	</#if> 
474</#macro> 
475 
476<#macro getSocialBookmarks> 
477	<#if enableSocialBookmarks == "true"> 
478		<@liferay_ui["social-bookmarks"] 
479			displayStyle="${socialBookmarksDisplayStyle}" 
480			target="_blank" 
481			title=entry.getTitle(locale) 
482			url=viewURL 
483		/> 
484	</#if> 
485</#macro> 

Asset Publisher

Nonprofit Finance
April 23, 2021
According to the 2021 Benchmarks Report, the average nonprofit donor contributed an average of $167 in 2020&#x2014;this per-donor metric was slightly lower than 2019.
Read MoreAboutOnline Fundraising Best Practices for the New Year (and Beyond)
Nonprofit Finance
December 18, 2019
Understanding the concept of the “business model” for your nonprofit has become a more integral component to maintaining organization sustainability within the nonprofit sec...
Read MoreAboutThe Importance of Understanding Your Nonprofit's Cash Flow
Nonprofit Finance
November 14, 2019
Last year, the Financial Accounting Standards Board (FASB) released Accounting Standards Update (ASU) 2018-08, which clarifies the accounting guidelines for contributions re...
Read MoreAbout[Webinar Recording] Accounting for Nonprofit Grants and Contributions
Nonprofit Finance
October 29, 2019
Giving in the U.S. in 2020 will be different in many ways than previously&#x2014;mainly because of campaigns, economic conditions, and tax law implications. Don&#39;...
Read MoreAbout[Webinar Recording] Trends and Forecasts for Charitable Giving
Nonprofit Finance
October 08, 2019
What is an executive director? An executive director is “responsible for overseeing the administration, the program and the strategic plan of a nonprofit organization. Other...
Read MoreAboutHow an Executive Director Becomes a Financial Leader
Nonprofit Finance
September 27, 2019
Thousands of nonprofits have registered with their states in order to legally solicit donations... do you know what state requirements extend to your organization?Presented ...
Read MoreAbout[Webinar Recording] Fundraising Registration 101
Nonprofit Finance
August 07, 2019
Nonprofit professionals face a challenging job that is made even more complex by industry dynamics and a competitive talent marketplace&#x2014;requiring even more attent...
Read MoreAbout​​​​​​​[Webinar Recording] National Nonprofit Benefit Study
Nonprofit Finance
May 10, 2019
Are you familiar with the Accounting Standards Update (ASU) 2016-14 issued by FASB? It’s a standard created to offer solutions to simplify and improve how a nonprofit organi...
Read MoreAbout​​​​​​​Lessons Learned from Implementing ASU 2016-14 – Functional Expenses
Nonprofit Finance
May 01, 2019
Did you know that certain nonprofits can legally opt out of paying state unemployment taxes? Do you understand who is benefiting from this tax exemption law? In this article...
Read MoreAbout​​​​​​​The True Story of Nonprofits and Taxes
Nonprofit Finance
November 08, 2018
With holidays on the horizon, this is the time for holiday shopping, family gatherings and ringing in the New Year. With so much on our plates, time can get away from us&...
Read MoreAboutExercise Your Nonprofit’s Tax Exemption for 2019

UST HR Video_Banner Ad (1)

Toolkit Banner Ad

eBook Download Button

UST Video Banner Ad_Resources Page

GotoStage Webinar Channel