Asset Publisher

Pixabay / Sharonang

Development Policy Monitor

South Africa's Role in International Development Policy

by Henning Suhr

Strong ambitions but limited scope for an African regional power

With its "Monitor Development Policy" series, the Konrad Adenauer Foundation focuses on the role of non-traditional donors in development cooperation. This time we take a look at South Africa, which cannot be considered a classic donor country due to limited possibilities, but which is committed to cooperation in line with its principles, especially at the multilateral level.

Asset Publisher

South Africa cannot be described as a donor country in the classical sense. The funding it provides is too low to fit into that category and the inflow of funds from other donors is too significant. Nevertheless, South Africa became involved in the international arena relatively early on, pursuing its own cooperation strategies and approaches. The country has established itself in international politics as a major advocate for multilateralism and pan-africanism. Due to limited possibilities, South African foreign and development policy is geared towards creating institutions and changing rules and norms to suit South African interests.
 
Given the historic economic crisis and an accompanying shift in domestic political priorities, financial expenditures for foreign and development policy are expected to decrease in the coming years. Nevertheless, for lack of alternatives, South Africa remains the most important partner in the region for non-African donor countries.
 
Read our Monitor Development Policy "South Africa’s Role in International Development Policy" here as a PDF.

Asset Publisher

An error occurred while processing the template.
Java method "de.usu.kas.frontend.service.impl.common.KASArticleServiceImpl.getMarginalPublication(long, com.liferay.portal.kernel.theme.ThemeDisplay)" threw an exception when invoked on de.usu.kas.frontend.service.impl.common.KASArticleServiceImpl object "de.usu.kas.frontend.service.impl.common.KASArticleServiceImpl@3ef2de38"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #local pub = FrontendService.article... [in template "kas-de-theme_SERVLET_CONTEXT_/templates/macros/atomic-modules/AMMarginalLinks.ftl" in macro "AMMarginalArticlePublication" at line 75, column 5]
- Reached through: @AMMarginalArticlePublication assetEntry [in template "kas-de-theme_SERVLET_CONTEXT_/templates/macros/atomic-modules/AMMarginalLinks.ftl" in macro "AMMarginalArticle" at line 66, column 9]
- Reached through: @AMMarginalArticle entry [in template "kas-de-theme_SERVLET_CONTEXT_/templates/macros/atomic-modules/AMMarginalLinks.ftl" in macro "AMMarginalArticleFilteredList" at line 182, column 9]
- Reached through: @AMMarginalArticleFilteredList "WCS_K... [in template "kas-de-theme_SERVLET_CONTEXT_/templates/macros/atomic-modules/AMMarginalLinks.ftl" in macro "AMMarginalLinks" at line 293, column 21]
~ Reached through: #nested [in template "kas-de-theme_SERVLET_CONTEXT_/templates/macros/atomic-modules/AMMarginalLinks.ftl" in macro "AMSegmentWithIcon" at line 174, column 9]
~ Reached through: @AMSegmentWithIcon "#icon-publication... [in template "kas-de-theme_SERVLET_CONTEXT_/templates/macros/atomic-modules/AMMarginalLinks.ftl" in macro "AMMarginalLinks" at line 292, column 17]
- Reached through: @AMMarginalLinks data [in template "kas-de-theme_SERVLET_CONTEXT_/templates/macros/page-modules/PMMarginalspalte.ftl" in macro "PMMarginalspalte" at line 788, column 17]
- Reached through: @PMMarginalspalte "ADT_KASDE_MARGINAL... [in template "252001#252047#252853" at line 139, column 5]
----
1<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" /> 
2<#include "${fullTemplatesPath}/functions/freemarkerUtil.ftl" /> 
3<#include "${fullTemplatesPath}/macros/debugging.ftl" /> 
4<#include "${fullTemplatesPath}/functions/liferayServicesUtil.ftl" /> 
5 
6<#include "${fullTemplatesPath}/macros/page-modules/PMNavigation.ftl" /> 
7<#include "${fullTemplatesPath}/macros/page-modules/PMMarginalspalte.ftl" /> 
8<#include "${fullTemplatesPath}/macros/atomic-modules/AMVenue.ftl" /> 
9<#include "${fullTemplatesPath}/macros/atomic-modules/AMMarginalContent.ftl" /> 
10<#include "${fullTemplatesPath}/macros/atomic-modules/AMPricing.ftl" /> 
11<#include "${fullTemplatesPath}/macros/atomic-modules/AMPerson.ftl" /> 
12<#include "${fullTemplatesPath}/macros/atomic-modules/AMMediaElement.ftl" /> 
13<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" /> 
14<#include "${fullTemplatesPath}/macros/atomic-modules/AMMap.ftl" /> 
15<#include "${fullTemplatesPath}/macros/atomic-modules/AMMarginalLinks.ftl" /> 
16<#include "${fullTemplatesPath}/macros/atomic-modules/AMCollapsibleListItem.ftl" /> 
17 
18<#assign 
19 JournalArticleLocalService = getJournalArticleLocalService() 
20  
21  
22 
23 themeDisplay = getThemeDisplay() 
24 languageId = themeDisplay.getLocale() 
25 editmode = FrontendService.user.isPrivilegedUser(themeDisplay) 
26 
27 groupId = themeDisplay.getScopeGroupId() 
28 currentUrl = themeDisplay.getURLCurrent() 
29 
30 layout = themeDisplay.getLayout() 
31 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id") 
32 
33 isMicrosite = FrontendService.site.isMicrosite(groupId)!false 
34/> 
35 
36<#-- Veranstaltungen-Detail, Publikationen-Detail --> 
37<#if currentUrl?contains("/-/content") > 
38 
39 <#assign journalArticle = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! > 
40 
41 <#if journalArticle?has_content> 
42 <#if journalArticle.resourcePrimKey??> 
43 <#assign primaryKey = journalArticle.resourcePrimKey?number > 
44 <#elseif journalArticle.classPK??> 
45 <#assign primaryKey = journalArticle.classPK?number > 
46 </#if> 
47 
48 <#assign 
49 jsonString = FrontendService.article.getWebcontent(primaryKey) 
50 json = FrontendService.json.parseAsJson(jsonString) 
51 /> 
52 
53 
54 <@debugJsonString jsonString "ADT_KASDE_MARGINALSPALTE" /> 
55 
56 <#if hasContent('title', locale, json)> 
57 <#assign 
58 pageName = "" 
59 title = " - " + getValueForLanguage("title", languageId, json, "first") 
60 /> 
61 <#if isMicrosite > 
62 <#assign 
63 pageGroup = layout.getGroup() 
64 pageName = " - " + htmlUtil.escape(pageGroup.getDescriptiveName()) 
65 /> 
66 </#if> 
67  
68 </#if> 
69 
70 <#assign content = getMarginalContent(json, locale, primaryKey, FrontendService, JournalArticleLocalService, themeDisplay) >  
71 
72 
73 <#if hasContent('ausgebucht', locale, json)> 
74 <#assign content = content + { "ausgebucht" : getValueForLanguage('ausgebucht', locale, json, "first") }> 
75 </#if> 
76 
77 <#if hasContent('storniert', locale, json)> 
78 <#assign content = content + { "storniert" : getValueForLanguage('storniert', locale, json, "first") }> 
79 </#if> 
80 
81 <#if hasContent('document_pdfDMTBASICDOCUMENT', locale, json)> 
82 <#assign 
83 pdfDocumentString = getValueForLanguage('document_pdfDMTBASICDOCUMENT', locale, json, "first") 
84 pdfDocument = FrontendService.json.parseAsJson(pdfDocumentString) 
85 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, pdfDocument.groupId?number)!/> 
86 <#if fileEntry?has_content> 
87 <#assign 
88 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay) 
89 covermedia = getDefaultMediaObject(linkToThumbnail, "pdf cover") 
90 covermedia = covermedia + {"hrefSource" : content.pdfBasicDocumentUrl.url } 
91 content = content + { "covermedia": covermedia } 
92 /> 
93 </#if> 
94 </#if> 
95 
96 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
97 <#assign calendar = FrontendService.event.createCalendarFile(primaryKey, locale) /> 
98 <#assign content = content + {"calendar": calendar } /> 
99 </#if> 
100 <#elseif (editmode?? && editmode)> 
101 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_MARGINALSPALTE" layouttpl /> 
102 </#if> 
103 
104<#-- Themen-Detail and others --> 
105<#else> 
106 <#-- content in marginalspalte --> 
107 <#if entries?has_content> 
108 <#assign 
109 entry = entries?first 
110 primaryKey = entry.classPK?number 
111 
112 jsonString = FrontendService.article.getWebcontent(primaryKey) 
113 json = FrontendService.json.parseAsJson(jsonString) 
114 /> 
115 <@debugJsonString jsonString "ADT_KASDE_MARGINALSPALTE" /> 
116 <@debugJson json "MARGINALSPALTE_CONTENT_JSON" /> 
117 
118 <#assign content = getMarginalContent(json, locale, primaryKey, FrontendService, JournalArticleLocalService, themeDisplay) > 
119 <#elseif (editmode?? && editmode)> 
120 <@errorMessage languageUtil.get(locale, "es.existieren.keine.entries") "ADT_KASDE_MARGINALSPALTE" layouttpl /> 
121 </#if> 
122</#if> 
123 
124 
125<#if content??> 
126 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
127 <#assign type = "veranstaltung" /> 
128 
129 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")> 
130 <#assign type = "publikation" /> 
131 <#elseif layouttpl?contains("LAYOUT_KASDE_THEMEN_DETAIL")> 
132 <#assign type = "thema" /> 
133 <#else> 
134 <#assign type = "default" /> 
135 </#if> 
136 
137 <#assign content = content + {"type": type } /> 
138 <@debugJsonString content "ADT_KASDE_MARGINALSPALTE_CONTENT" /> 
139 <@PMMarginalspalte "ADT_KASDE_MARGINALSPALTE" content AMArticle AMPerson AMVenue AMPricing AMMediaElement AMDatetime AMMap AMMarginalContent AMMarginalLinks/> 
140<#elseif (editmode?? && editmode)> 
141 <@errorMessage languageUtil.get(locale, "entries.enthalten.keinen.content") "ADT_KASDE_MARGINALSPALTE" layouttpl /> 
142</#if> 

comment-portlet

Asset Publisher