Governor - RBI - Reserve Bank of India
Governor

Shri Sanjay Malhotra
Shri Sanjay Malhotra, an Indian Administrative Service Officer of 1990 Batch Rajasthan Cadre, took over charge as the 26th Governor of the Reserve Bank of India for a period of three years effective December 11, 2024. Immediately prior to this appointment, Shri Malhotra was Secretary, Department of Revenue (DOR) in the Ministry of Finance, Government of India, before which Shri Malhotra held the post of Secretary in Department of Financial Services in the Ministry of Finance, Government of India.
Shri Malhotra has vast and diverse experience across various key sectors including power, finance and taxation, information technology, etc. and has held key positions both at the State and the Central Government, apart from having a stint with a United Nations agency. He was also Chairman and Managing Director of Rural Electrification Corporation Limited. Shri Malhotra served on the Central Board of Reserve Bank of India as a Government Nominee Director from February 16, 2022 to November 14, 2022.
Shri Malhotra is a graduate in Computer Science and Engineering from the Indian Institute of Technology, Kanpur and a Master in Public Policy from the Princeton University, USA.
Contact Information
-
Reserve Bank Of india
18th floor, Central Office Building, Shahid Bhagat Singh Road,
Mumbai-400 001 -
-
22661784
-
List of Previous Governors

Shri Shaktikanta Das
Shri Shaktikanta Das, IAS Retd., former Secretary, Department of Revenue and Department of Economic Affairs, Ministry of Finance, Government of India assumed charge as the 25th Governor of the Reserve Bank of India effective December 12, 2018. Immediately prior to his current assignment, he was acting as Member, 15th Finance Commission and G20 Sherpa of India.
Shri Shaktikanta Das has vast experience in various areas of governance in the last 38 years. Shri Das has held important positions in the Central and State Governments in the areas of Finance, Taxation, Industries, Infrastructure, etc.
During his long tenure in the Ministry of Finance, Government of India, he was directly associated with the preparation of as many as 8 Union Budgets. Shri Das has also served as India’s Alternate Governor in the World Bank, Asian Development Bank (ADB), New Development Bank (NDB) and Asian Infrastructure Investment Bank (AIIB). He has represented India in international fora like the IMF, G20, BRICS, SAARC, etc.
Shri Shaktikanta Das is a postgraduate from St. Stephen’s College, Delhi University.
Central Government has re-appointed Shri Shaktikanta Das as Governor, Reserve Bank of India for a further period of three years beyond the 10th day of December 2021, or until further orders, whichever is earlier.

Dr. Urjit R. Patel
Dr. Urjit R. Patel assumed charge as the twenty-fourth Governor of the Reserve Bank of India effective September 4, 2016 after serving as Deputy Governor since January 2013. He was re-appointed as Deputy Governor on January 11, 2016 after completion of his first three-year term of office. Among his assignments as Deputy Governor, Dr. Patel chaired the Expert Committee to Revise and Strengthen the Monetary Policy Framework. Representing India, he actively participated in steering the signing into force of the inter-governmental treaty and the Inter-Central Bank Agreement (ICBA) among the BRICS nations, which led to the establishment of the Contingent Reserve Arrangement (CRA), a swap line framework among the central banks of these countries.
Dr. Patel has also served at the International Monetary Fund (IMF). He was on deputation from the IMF to the Reserve Bank during 1996-1997, and in that capacity he provided advice on development of the debt market, banking sector reforms, pension fund reforms, and evolution of the foreign exchange market. He was a Consultant to the Ministry of Finance (Department of Economic Affairs), Government of India, from 1998 to 2001. He has also had other assignments in the public and private sectors.
Dr. Patel has worked closely with several central and state government high level committees, including the Task Force on Direct Taxes (Kelkar Committee), the High Level Expert Group for Reviewing the Civil & Defence Services Pension System, the Prime Minister’s Task Force on Infrastructure, the Group of Ministers on Telecom Matters, the Committee on Civil Aviation Reforms and the Ministry of Power’s Expert Group on State Electricity Boards.
Dr. Patel has several publications in the areas of Indian macroeconomics, monetary policy, public finance, the Indian financial sector, international trade, and regulatory economics.
Dr. Patel has a Ph.D in economics from Yale University, an M. Phil from University of Oxford and a B. Sc. from the University of London.

Dr. Raghuram G. Rajan
Dr. Raghuram Rajan assumed charge as the 23rd Governor of the Reserve Bank of India on September 4, 2013. Prior to this, he was the Chief Economic Advisor, Ministry of Finance, Government of India and the Eric J. Gleacher Distinguished Service Professor of Finance at the University of Chicago's Booth School. Between 2003 and 2006, Dr. Rajan was the Chief Economist and Director of Research at the International Monetary Fund.
Dr. Rajan's research interests are in banking, corporate finance, and economic development, especially the role finance plays in it. He has co-authored Saving Capitalism from the Capitalists with Luigi Zingales in 2003. He then wrote Fault Lines: How Hidden Fractures Still Threaten the World Economy, for which he was awarded the Financial Times-Goldman Sachs prize for best business book in 2010.
Dr. Rajan is a member of the Group of Thirty. He was the President of the American Finance Association in 2011 and is a member of the American Academy of Arts and Sciences. In January 2003, the American Finance Association awarded Dr. Rajan the inaugural Fischer Black Prize for the best finance researcher under the age of 40. The other awards he has received include the global Indian of the year award from NASSCOM in 2011, the Infosys prize for the Economic Sciences in 2012, and the Center for Financial Studies-Deutsche Bank Prize for financial economics in 2013.
Born on February 3, 1963, Dr. Rajan is married to Radhika and has two children.

Dr. D. Subbarao
Dr. D. Subbarao took over on September 5, 2008 as the 22nd Governor of the Reserve Bank of India. Dr. Subbarao has been appointed for a three-year term. Prior to this appointment, Dr. Subbarao was the Finance Secretary in the Ministry of Finance, Government of India.
Dr. Subbarao has earlier been Secretary to the Prime Minister's Economic Advisory Council (2005-2007), lead economist in the World Bank (1999-2004), Finance Secretary to the Government of Andhra Pradesh (1993-98) and Joint Secretary in the Department of Economic Affairs, Ministry of Finance, Government of India (1988-1993).
Dr. Subbarao has wide experience in public finance. In the World Bank, he worked on issues of public finance in countries of Africa and East Asia. He managed a flagship study on decentralisation across major countries of East Asia including China, Indonesia, Vietnam, Philippines and Cambodia. Dr. Subbarao was also involved in initiation of fiscal reforms at the state level. Dr. Subbarao has written extensively on issues in public finance, decentralisation and political economy of reforms.
Born on August 11, 1949, Dr. Subbarao holds a B.Sc (Hons) in Physics from the Indian Institute of Technology, Kharagpur and M.Sc in Physics from the Indian Institute of Technology, Kanpur. Dr. Subbarao also holds an MS degree in Economics from Ohio State University. He was a Humphrey fellow at MIT during 1982-83. He has a Ph.D. in Economics with thesis on fiscal reforms at the sub-national level. Dr. Subbarao was a topper in the All India Civil Service examination for entry into Indian Administrative Services and Indian Foreign Services in 1972. He was one of the first IITians to join the civil service.

Dr. Y.V. Reddy
Dr. Yaga Venugopal Reddy the twenty-first Governor, is a member of the Indian Administrative Service. He has spent most of his career in the areas of finance and planning. He served as Secretary (Banking) in Ministry of Finance, Additional Secretary, Ministry of Commerce, Joint Secretary in Ministry of Finance in Government of India, Principal Secretary, Government of Andhra Pradesh and had a a six year tenure as Deputy Governor of the Reserve Bank of India. Prior to his appointment as the Governor, Dr. Reddy was India's Executive Director on the Board of the International Monetary Fund.
Dr. Reddy has made significant policy contributions in the areas of financial sector reforms; trade finance; monitoring of balance of payments and exchange rate; external commercial borrowings; centre-state financial relations; regional planning; and public enterprise reform and has been closely associated with institution building. He has several publications to his credit mainly in areas relating to finance, planning and public enterprises.
The following has evaluated to null or missing: ==> speakerCategoryId [in template "20099#20125#104631168" at line 43, column 226] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if category.getCategoryId() == speak... [in template "20099#20125#104631168" at line 43, column 193] ----
1<#assign
2 assetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
3 dLFileEntryLocalService=serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")
4 assetVocabularyLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")
5 assetCategoryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
6<#assign UUID="" groupId="" fileSize="" docURL="" FID=""/>
7<#assign index= 0 />
8<#assign currDate=.now?date />
9<#assign contentCategoryId = 8508119 />
10<#assign speakerVocabularyId = 45696473 />
11<#assign plId = layout.getPlid()>
12<#assign layoutEntry = assetEntryLocalService.fetchEntry("com.liferay.portal.kernel.model.Layout", plId) />
13<#assign assetCategories = layoutEntry.getCategories()/>
14 <#list assetCategories as assetCategory>
15 <#if assetCategory.getVocabularyId() == speakerVocabularyId >
16 <#assign speakerCategoryId = assetCategory.getCategoryId()/>
17 </#if>
18 </#list>
19<#assign count = 0 />
20<#if entries?has_content>
21<div class="Notification-content-wrap full-width governor-page-related-links dynamic-resize" tabindex="0">
22 <div class="container">
23 <div class="row no-gutters">
24 <div class="col-10" id="title-heading">
25 <h3 class="section-blcok-heading">${languageUtil.get(locale, "speeches")} </h3>
26 </div>
27 <div class="col-12">
28 <div class="notifications-row-wrapper toogle-grid-row show-row-view">
29 <div class="row">
30 <#list entries as curEntry>
31
32 <#if curEntry.getClassName()== "com.liferay.journal.model.JournalArticle">
33 <#assign assetRenderer=curEntry.getAssetRenderer()
34 article=assetRenderer.getArticle()
35 journalArticle=assetRenderer.getAssetObject()
36 resourceKey = journalArticle.getResourcePrimKey()
37 categories = assetCategoryLocalService.getCategories(curEntry.getClassName(),resourceKey?number) />
38 <#list categories as category>
39
40 <#if category.getCategoryId()== contentCategoryId >
41 <#list categories as category>
42
43 <#if category.getCategoryId() == speakerCategoryId >
44 <#assign article=assetRenderer.getArticle()
45 URL=article.getExpandoBridge().getAttribute("pdf-url")
46 groupId=article.getGroupId()
47 content=saxReaderUtil.read(assetRenderer.getArticle().getContentByLocale(locale))
48 displayDate=article.getDisplayDate()
49 publishDate=curEntry.publishDate
50 speaker=content.valueOf("//dynamic-element[@name='Text48856133']/dynamic-content")
51 designation=content.valueOf("//dynamic-element[@name='Text01027456']/dynamic-content")
52 videoLink=content.valueOf("//dynamic-element[@name='Field62975852']/dynamic-content")
53 viewURL=assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse,
54 curEntry) viewURL=assetRenderer.getURLViewInContext(renderRequest, renderResponse,
55 viewURL) index=index+1 />
56 <#assign count=count + 1 />
57 <#if count gt 5>
58 <#break>
59 </#if>
60 <#if index gt 5>
61 <div class=" col-12 toggle-content-each grid-view-col d-none">
62 <#else>
63 <div class="col-12 toggle-content-each grid-view-col">
64 </#if>
65 <div class="notification-row-each">
66 <div class="notification-row-each-inner">
67 <div class="notification-date">
68 <#if displayDate?has_content>
69 ${dateUtil.getDate(publishDate, "MMM dd, yyyy", locale)}
70 <#if publishDate?has_content>
71 <#if currDate?string==publishDate?date?string>
72 <div class="tag-new tag-date"><span>New</span></div>
73 </#if>
74 </#if>
75 </#if>
76 </div>
77 <a href="${viewURL}" class="mtm_list_item_heading">
78 <div class="covid19-result-heading c-tooltips position-relative">
79 <span class="mtm_list_item_heading textTruncate governor-page-title">
80 ${curEntry.getTitle(locale)} </span>
81 <div class="custom-tooltip covid19-tooltip">
82 <div class="tooltip-arrow-up"></div>
83 <div class="tooltip-content covid19-content">
84 ${curEntry.getSummary(locale)}
85 </div>
86 </div>
87 </div>
88 </a>
89 <div class="speaker-content font-resized">
90 <#if speaker?has_content>${speaker}, </#if>
91 <#if designation?has_content>${designation} </#if>
92 </div>
93 <#if URL?has_content>
94 <#list URL?keys as key>
95 <#if key==locale>
96 <#assign docURL=URL?values[key_index] />
97 </#if>
98 </#list>
99 </#if>
100
101 <#if docURL?has_content>
102
103 <#if docURL?contains("fileEntryId")>
104
105 <#list docURL?split("?") as sValue>
106 <#if sValue?is_last>
107
108 <#list sValue?split("=") as fid>
109
110 <#if fid?is_last>
111
112 <#assign FID=fid />
113 </#if>
114 </#list>
115 </#if>
116 </#list>
117
118
119 <#else>
120
121 <#list docURL?split("/") as sValue>
122 <#if sValue?is_last>
123 <#list sValue?split("?") as uuid>
124 <#if uuid?is_first>
125 <#assign UUID=uuid />
126 </#if>
127 </#list>
128 </#if>
129 </#list>
130 </#if>
131 </#if>
132 <#if UUID?has_content || FID?has_content>
133
134
135 <#attempt>
136
137 <#if FID?has_content>
138 <#assign dlFileEntry=dLFileEntryLocalService.fetchDLFileEntry(FID?number) />
139 <#else>
140 <#assign dlFileEntry=dLFileEntryLocalService.fetchFileEntry(UUID,groupId?number)
141 fileAssetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry",
142 dlFileEntry.getFileEntryId())/>
143 </#if>
144 <#assign fileSize=dlFileEntry.getSize()/>
145
146 <#if UUID?has_content>
147 <#assign docURL=fileAssetEntry.getAssetRenderer().getURLDownload(themeDisplay)/>
148 <#assign docURL=docURL?replace("/"+UUID,"") />
149 </#if>
150 <#recover>
151 </#attempt>
152 </#if>
153
154
155
156
157 <div class="btn-wrap">
158 <#if docURL?has_content && docURL!="">
159 <div class="inner-wrap">
160 <a href="${docURL?split('?')[0]}" target="_blank"
161 class="matomo_download ">
162 <img src="/documents/70233/0/fileDownload.svg"
163 class="downloadFile" alt="Download File"
164 title="Download File">
165 ${languageUtil.get(locale, "pdf")} (<span class="fileSizeSpeeches">${fileSize}</span>)
166 </a>
167 </div>
168
169 </#if>
170
171 <#if videoLink?has_content && videoLink!="">
172 <div class="inner-wrap yt-link-wrap">
173 <a href="javascript:void(0)"
174 data-toggle="modal"
175 data-target="#videoPopUpYT-${curEntry?counter}">
176 <img src="/documents/20125/67624/icon-youtube.svg"
177 class="downloadFile mtm_yt"
178 alt="${languageUtil.get(locale,'youtube')}"
179 title="${languageUtil.get(locale,'youtube')}">
180 <span
181 class="mtm_yt">${languageUtil.get(locale,'youtube')}</span>
182 </a>
183 </div>
184 </#if>
185 </div>
186 </div>
187 </div>
188 </div>
189 </#if>
190 </#list>
191 </#if>
192 </#list>
193 </#if>
194 </#list>
195
196 <#if index gt 5>
197 <div class="col-12 ">
198 <div class="view-all-wrap toggle-view-content">
199 <a href=" ${themeDisplay.getURLPortal()}/web/rbi/speeches?speaker=${speakerCategoryId}" role="button"
200 class=" link-view-more link-animation-hover">
201 <span class="txtToggle"> ${languageUtil.get(locale, "view-more")} </span>
202 <span>
203 <img class="down-arrow" src="/documents/20125/67624/icon+feather-down.svg"
204 alt="view more" title="view more">
205 </span>
206 </a>
207
208 </div>
209 </div>
210 </#if>
211 </div>
212 </div>
213 </div>
214 </div>
215 </div>
216 </div>
217 </#if>
218
219 <input type="hidden" id="speechesIndex" value="${index}">
220
221<script>
222 $(document).ready(function () {
223 $(".youtube-video-popup #yt-player").each(function () {
224 let newYoutubeLink = $(this).find("#iframe-yt").attr("data-src");
225 if (newYoutubeLink.includes("youtube.com")) {
226 if (newYoutubeLink.includes('?')) {
227 if (newYoutubeLink.includes('/live/')) {
228 if (newYoutubeLink.includes('www')) {
229 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
230 }
231 else {
232 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
233 }
234 }
235 if (!newYoutubeLink.includes('?enablejsapi=1')) {
236 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
237 }
238 }
239 else {
240 if (newYoutubeLink.includes('/live/')) {
241 if (newYoutubeLink.includes('www')) {
242 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
243 }
244 else {
245 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
246 }
247 }
248 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
249 }
250 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
251 }
252 else if (newYoutubeLink.includes("youtu.be")) {
253 newYoutubeLink = newYoutubeLink.replace("youtu.be", "www.youtube.com/embed");
254 if (newYoutubeLink.includes('?')) {
255 if (!newYoutubeLink.includes('?enablejsapi=1')) {
256 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
257 }
258 }
259 else {
260 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
261 }
262 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
263 return;
264 } else if (newYoutubeLink.includes("watch?v=")) {
265 newYoutubeLink = newYoutubeLink.replace("watch?v=", "embed/");
266 if (newYoutubeLink.includes('?')) {
267 if (!newYoutubeLink.includes('?enablejsapi=1')) {
268 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
269 }
270 }
271 else {
272 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
273 }
274 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
275 return;
276 }
277 });
278 $(".fileSizeSpeeches").each(function () {
279 var fileSizeSpeeches = $(this).html()
280 if (fileSizeSpeeches != "") {
281 $(this).html(formatFileSizeSpeeches(parseInt(fileSizeSpeeches), 2))
282 }
283 });
284
285 function formatFileSizeSpeeches(bytes, decimalPoint) {
286 if (bytes == 0)
287 return '0 Bytes';
288 var k = 1024,
289 dm = decimalPoint || 2,
290 sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
291 i = Math.floor(Math.log(bytes) / Math.log(k));
292 return (parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]);
293 }
294 });
295
296</script>
The following has evaluated to null or missing: ==> speakerCategoryId [in template "20099#20125#104631164" at line 40, column 226] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if category.getCategoryId() == speak... [in template "20099#20125#104631164" at line 40, column 193] ----
1<#assign
2 assetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
3 dLFileEntryLocalService=serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")
4 assetVocabularyLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")
5 assetCategoryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
6<#assign UUID="" groupId="" fileSize="" docURL="" FID=""/>
7<#assign indexInteractions= 0 />
8<#assign currDate=.now?date />
9<#assign contentCategoryId = 8508122 />
10<#assign speakerVocabularyId = 45696473 />
11<#assign plId = layout.getPlid()>
12<#assign layoutEntry = assetEntryLocalService.fetchEntry("com.liferay.portal.kernel.model.Layout", plId) />
13<#assign assetCategories = layoutEntry.getCategories()/>
14 <#list assetCategories as assetCategory>
15 <#if assetCategory.getVocabularyId() == speakerVocabularyId >
16 <#assign speakerCategoryId = assetCategory.getCategoryId()/>
17 </#if>
18 </#list>
19<#assign count = 0 />
20<#if entries?has_content>
21<div class="Notification-content-wrap full-width governor-page-related-links dynamic-resize" tabindex="0">
22 <div class="container">
23 <div class="row no-gutters">
24 <div class="col-10" id="title-interaction">
25 <h3 class="section-blcok-heading">${languageUtil.get(locale, "interviews")}</h3>
26 </div>
27 <div class="col-12">
28 <div class="notifications-row-wrapper toogle-grid-row show-row-view">
29 <div class="row">
30 <#list entries as curEntry>
31 <#if curEntry.getClassName()== "com.liferay.journal.model.JournalArticle">
32 <#assign assetRenderer=curEntry.getAssetRenderer()
33 article=assetRenderer.getArticle()
34 journalArticle=assetRenderer.getAssetObject()
35 resourceKey = journalArticle.getResourcePrimKey()
36 categories = assetCategoryLocalService.getCategories(curEntry.getClassName(),resourceKey?number) />
37 <#list categories as category>
38 <#if category.getCategoryId()== contentCategoryId >
39 <#list categories as category>
40 <#if category.getCategoryId() == speakerCategoryId >
41 <#assign article=assetRenderer.getArticle()
42 URL=article.getExpandoBridge().getAttribute("pdf-url")
43 groupId=article.getGroupId()
44 content=saxReaderUtil.read(assetRenderer.getArticle().getContentByLocale(locale))
45 displayDate=article.getDisplayDate()
46 publishDate=curEntry.publishDate
47 speaker=content.valueOf("//dynamic-element[@name='Text48856133']/dynamic-content")
48 designation=content.valueOf("//dynamic-element[@name='Text01027456']/dynamic-content")
49 viewURL=assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse,
50 curEntry) viewURL=assetRenderer.getURLViewInContext(renderRequest, renderResponse,
51 viewURL) indexInteractions=indexInteractions+1 />
52 <#assign count=count + 1 />
53 <#if count gt 5>
54 <#break>
55 </#if>
56 <#if indexInteractions gt 5>
57 <div class=" col-12 toggle-content-each grid-view-col d-none">
58 <#else>
59 <div class="col-12 toggle-content-each grid-view-col">
60 </#if>
61 <div class="notification-row-each">
62 <div class="notification-row-each-inner">
63 <div class="notification-date">
64 <#if displayDate?has_content>
65 ${dateUtil.getDate(publishDate, "MMM dd, yyyy", locale)}
66 <#if publishDate?has_content>
67 <#if currDate?string==publishDate?date?string>
68 <div class="tag-new tag-date"><span>New</span></div>
69 </#if>
70 </#if>
71 </#if>
72 </div>
73 <a href="${viewURL}" class="mtm_list_item_heading">
74 <div class="covid19-result-heading c-tooltips position-relative">
75 <span class="mtm_list_item_heading textTruncate governor-page-title">
76 ${curEntry.getTitle(locale)} </span>
77 <div class="custom-tooltip covid19-tooltip">
78 <div class="tooltip-arrow-up"></div>
79 <div class="tooltip-content covid19-content">
80 ${curEntry.getSummary(locale)}
81 </div>
82 </div>
83 </div>
84 </a>
85 <div class="speaker-content font-resized">
86 <#if speaker?has_content>${speaker}, </#if>
87 <#if designation?has_content>${designation} </#if>
88 </div>
89 <#if URL?has_content>
90 <#list URL?keys as key>
91 <#if key==locale>
92 <#assign docURL=URL?values[key_index] />
93 </#if>
94 </#list>
95 </#if>
96
97
98 <#if docURL?has_content>
99
100 <#if docURL?contains("fileEntryId")>
101
102 <#list docURL?split("?") as sValue>
103 <#if sValue?is_last>
104
105 <#list sValue?split("=") as fid>
106
107 <#if fid?is_last>
108
109 <#assign FID=fid />
110 </#if>
111 </#list>
112 </#if>
113 </#list>
114
115
116 <#else>
117
118 <#list docURL?split("/") as sValue>
119 <#if sValue?is_last>
120 <#list sValue?split("?") as uuid>
121 <#if uuid?is_first>
122 <#assign UUID=uuid />
123 </#if>
124 </#list>
125 </#if>
126 </#list>
127 </#if>
128 </#if>
129
130
131
132 <#if UUID?has_content || FID?has_content>
133
134
135
136
137 <#if FID?has_content>
138 <#assign dlFileEntry=dLFileEntryLocalService.fetchDLFileEntry(FID?number) />
139 <#else>
140 <#assign dlFileEntry=dLFileEntryLocalService.fetchFileEntry(UUID,groupId?number)
141 fileAssetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry",
142 dlFileEntry.getFileEntryId())/>
143 </#if>
144 <#assign fileSize=dlFileEntry.getSize()/>
145
146 <#if UUID?has_content>
147 <#assign docURL=fileAssetEntry.getAssetRenderer().getURLDownload(themeDisplay)/>
148
149 </#if>
150
151 </#if>
152
153 <div class="btn-wrap">
154 <#if docURL?? && docURL?has_content>
155 <div class="inner-wrap">
156
157 <a href="${docURL?split('?')[0]}" target="_blank"
158 class="matomo_download ">
159 <img src="/documents/70233/0/fileDownload.svg"
160 class="downloadFile" alt="Download File"
161 title="Download File">
162 ${languageUtil.get(locale, "pdf")} (<span class="fileSizeInteractions">${fileSize}</span>)
163 </a>
164 </div>
165 </#if>
166
167 <#if videoLink?has_content>
168 <div class="inner-wrap yt-link-wrap">
169 <a href="javascript:void(0)"
170 data-toggle="modal"
171 data-target="#videoPopUpYT-${curEntry?counter}">
172 <img src="/documents/20125/67624/icon-youtube.svg"
173 class="downloadFile mtm_yt"
174 alt="${languageUtil.get(locale,'youtube')}"
175 title="${languageUtil.get(locale,'youtube')}">
176 <span
177 class="mtm_yt">${languageUtil.get(locale,'youtube')}</span>
178 </a>
179
180 </div>
181 </#if>
182
183
184 </div>
185
186
187 </div>
188 </div>
189 </div>
190 </#if>
191 </#list>
192 </#if>
193 </#list>
194 </#if>
195 </#list>
196
197 <#if indexInteractions gt 5>
198 <div class="col-12 ">
199 <div class="view-all-wrap toggle-view-content">
200 <a href=" ${themeDisplay.getURLPortal()}/web/rbi/interviews?interviewees=${speakerCategoryId}" role="button"
201 class=" link-view-more link-animation-hover">
202 <span class="txtToggle">${languageUtil.get(locale, "view-more")}</span>
203 <span>
204 <img class="down-arrow" src="/documents/20125/67624/icon+feather-down.svg"
205 alt="view more" title="view more">
206 </span>
207 </a>
208
209 </div>
210 </div>
211 </#if>
212
213 </div>
214 </div>
215 </div>
216 </div>
217 </div>
218 </div>
219 </#if>
220
221 <input type="hidden" id="indexInteractions" value="${indexInteractions}">
222
223<script>
224 $(document).ready(function () {
225 $(".youtube-video-popup #yt-player").each(function () {
226 let newYoutubeLink = $(this).find("#iframe-yt").attr("data-src");
227 if (newYoutubeLink.includes("youtube.com")) {
228 if (newYoutubeLink.includes('?')) {
229 if (newYoutubeLink.includes('/live/')) {
230 if (newYoutubeLink.includes('www')) {
231 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
232 }
233 else {
234 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
235 }
236 }
237 if (!newYoutubeLink.includes('?enablejsapi=1')) {
238 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
239 }
240 }
241 else {
242 if (newYoutubeLink.includes('/live/')) {
243 if (newYoutubeLink.includes('www')) {
244 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
245 }
246 else {
247 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
248 }
249 }
250 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
251 }
252 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
253 }
254 else if (newYoutubeLink.includes("youtu.be")) {
255 newYoutubeLink = newYoutubeLink.replace("youtu.be", "www.youtube.com/embed");
256 if (newYoutubeLink.includes('?')) {
257 if (!newYoutubeLink.includes('?enablejsapi=1')) {
258 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
259 }
260 }
261 else {
262 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
263 }
264 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
265 return;
266 } else if (newYoutubeLink.includes("watch?v=")) {
267 newYoutubeLink = newYoutubeLink.replace("watch?v=", "embed/");
268 if (newYoutubeLink.includes('?')) {
269 if (!newYoutubeLink.includes('?enablejsapi=1')) {
270 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
271 }
272 }
273 else {
274 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
275 }
276 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
277 return;
278 }
279 });
280 $(".fileSizeInteractions").each(function () {
281 var fileSizeInteractions = $(this).html()
282 if (fileSizeInteractions != "") {
283 $(this).html(formatFileSizeInteractions(parseInt(fileSizeInteractions), 2))
284 }
285 });
286
287 function formatFileSizeInteractions(bytes, decimalPoint) {
288 if (bytes == 0)
289 return '0 Bytes';
290 var k = 1024,
291 dm = decimalPoint || 2,
292 sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
293 i = Math.floor(Math.log(bytes) / Math.log(k));
294 return (parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]);
295 }
296 });
297
298</script>
The following has evaluated to null or missing: ==> speakerCategoryId [in template "20099#20125#104631160" at line 37, column 226] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if category.getCategoryId() == speak... [in template "20099#20125#104631160" at line 37, column 193] ----
1<#assign
2 assetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
3 dLFileEntryLocalService=serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")
4 assetVocabularyLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")
5 assetCategoryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
6<#assign UUID="" groupId="" fileSize="" docURL="" docURL="" FID="" />
7<#assign indexKeyReleases= 0 />
8<#assign currDate=.now?date />
9<#assign speakerVocabularyId = 45696473 />
10<#assign plId = layout.getPlid()>
11<#assign layoutEntry = assetEntryLocalService.fetchEntry("com.liferay.portal.kernel.model.Layout", plId) />
12<#assign assetCategories = layoutEntry.getCategories()/>
13 <#list assetCategories as assetCategory>
14 <#if assetCategory.getVocabularyId() == speakerVocabularyId >
15 <#assign speakerCategoryId = assetCategory.getCategoryId()/>
16 </#if>
17 </#list>
18<#assign count = 0 />
19<#if entries?has_content>
20<div class="Notification-content-wrap full-width governor-page-related-links dynamic-resize" tabindex="0">
21 <div class="container">
22 <div class="row no-gutters">
23 <div class="col-10" id = "title-keyreleases">
24 <h3 class="section-blcok-heading">${languageUtil.get(locale, "Key-Releases")}</h3>
25 </div>
26 <div class="col-12">
27 <div class="notifications-row-wrapper toogle-grid-row show-row-view">
28 <div class="row">
29 <#list entries as curEntry>
30 <#if curEntry.getClassName()== "com.liferay.journal.model.JournalArticle">
31 <#assign assetRenderer=curEntry.getAssetRenderer()
32 article=assetRenderer.getArticle()
33 journalArticle=assetRenderer.getAssetObject()
34 resourceKey = journalArticle.getResourcePrimKey()
35 categories = assetCategoryLocalService.getCategories(curEntry.getClassName(),resourceKey?number) />
36 <#list categories as category>
37 <#if category.getCategoryId() == speakerCategoryId >
38 <#assign article=assetRenderer.getArticle()
39 URL=article.getExpandoBridge().getAttribute("pdf-url")
40 groupId=article.getGroupId()
41 content=saxReaderUtil.read(assetRenderer.getArticle().getContentByLocale(locale))
42 displayDate=article.getDisplayDate()
43 publishDate=curEntry.publishDate
44 viewURL=assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse,
45 curEntry) viewURL=assetRenderer.getURLViewInContext(renderRequest, renderResponse,
46 viewURL) indexKeyReleases=indexKeyReleases+1 />
47 <#assign count=count + 1 />
48 <#if count gt 5>
49 <#break>
50 </#if>
51 <#if indexKeyReleases gt 5>
52 <div class=" col-12 toggle-content-each grid-view-col d-none">
53 <#else>
54 <div class="col-12 toggle-content-each grid-view-col">
55 </#if>
56 <div class="notification-row-each">
57 <div class="notification-row-each-inner">
58 <div class="notification-date">
59 <#if displayDate?has_content>
60 ${dateUtil.getDate(publishDate, "MMM dd, yyyy", locale)}
61 <#if publishDate?has_content>
62 <#if currDate?string==publishDate?date?string>
63 <div class="tag-new tag-date"><span>New</span></div>
64 </#if>
65 </#if>
66 </#if>
67 </div>
68 <a href="${viewURL}" class="mtm_list_item_heading">
69 <div class="covid19-result-heading c-tooltips position-relative">
70 <span class="mtm_list_item_heading textTruncate governor-page-title">
71 ${curEntry.getTitle(locale)} </span>
72 <div class="custom-tooltip covid19-tooltip">
73 <div class="tooltip-arrow-up"></div>
74 <div class="tooltip-content covid19-content">
75 ${curEntry.getSummary(locale)}
76 </div>
77 </div>
78 </div>
79 </a>
80 <div class="speaker-content font-resized">
81 <#if speaker?has_content>${speaker}, </#if>
82 <#if designation?has_content>${designation} </#if>
83 </div>
84 <#if URL?has_content>
85 <#list URL?keys as key>
86 <#if key==locale>
87 <#assign docURL=URL?values[key_index] />
88 </#if>
89 </#list>
90 </#if>
91 <!--<#if docURL?has_content>
92 <#list docURL?split("/") as sValue>
93 <#if sValue?is_last>
94 <#list sValue?split("?") as uuid>
95 <#if uuid?is_first>
96 <#assign UUID=uuid />
97 </#if>
98 </#list>
99 </#if>
100 </#list>
101 </#if>-->
102 <#if docURL?has_content>
103
104 <#if docURL?contains("fileEntryId")>
105
106 <#list docURL?split("?") as sValue>
107 <#if sValue?is_last>
108
109 <#list sValue?split("=") as fid>
110
111 <#if fid?is_last>
112
113 <#assign FID=fid />
114 </#if>
115 </#list>
116 </#if>
117 </#list>
118
119
120 <#else>
121
122 <#list docURL?split("/") as sValue>
123 <#if sValue?is_last>
124 <#list sValue?split("?") as uuid>
125 <#if uuid?is_first>
126 <#assign UUID=uuid />
127 </#if>
128 </#list>
129 </#if>
130 </#list>
131 </#if>
132 </#if>
133
134 <!-- File -->
135 <!--<#attempt>
136 <#if UUID?has_content>
137 <#assign
138 DLFileEntry=dLFileEntryLocalService.fetchFileEntry(UUID,groupId?number)
139 fileSize=DLFileEntry.getSize()
140 fileAssetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry",
141 DLFileEntry.getFileEntryId())
142 docURL=fileAssetEntry.getAssetRenderer().getURLDownload(themeDisplay) />
143 </#if>
144 <#recover>
145 </#attempt>-->
146 <#if UUID?has_content || FID?has_content>
147
148
149 <#attempt>
150
151 <#if FID?has_content>
152 <#assign dlFileEntry=dlFileEntryLocalService.fetchDLFileEntry(FID?number) />
153 <#else>
154 <#assign dlFileEntry=dlFileEntryLocalService.fetchFileEntry(UUID,groupId?number)
155 fileAssetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry",
156 dlFileEntry.getFileEntryId())/>
157 </#if>
158 <#assign fileSize=dlFileEntry.getSize()/>
159
160 <#if UUID?has_content>
161 <#assign docURL=fileAssetEntry.getAssetRenderer().getURLDownload(themeDisplay)/>
162
163 </#if>
164 <#recover>
165 </#attempt>
166 </#if>
167
168 <div class="btn-wrap">
169 <#if docURL?? && docURL?has_content>
170 <div class="inner-wrap">
171 <a href="${docURL?split('?')[0]}" target="_blank"
172 class="matomo_download ">
173 <img src="/documents/70233/0/fileDownload.svg"
174 class="downloadFile" alt="Download File"
175 title="Download File">
176 ${languageUtil.get(locale, "pdf")} (<span class="fileSizeReleases">${fileSize}</span>)
177 </a>
178 </div>
179 </#if>
180
181 <#if videoLink?has_content>
182 <div class="inner-wrap yt-link-wrap">
183 <a href="javascript:void(0)"
184 data-toggle="modal"
185 data-target="#videoPopUpYT-${curEntry?counter}">
186 <img src="/documents/20125/67624/icon-youtube.svg"
187 class="downloadFile mtm_yt"
188 alt="${languageUtil.get(locale,'youtube')}"
189 title="${languageUtil.get(locale,'youtube')}">
190 <span
191 class="mtm_yt">${languageUtil.get(locale,'youtube')}</span>
192 </a>
193
194 </div>
195 </#if>
196 </div>
197
198 </div>
199 </div>
200 </div>
201 </#if>
202 </#list>
203 </#if>
204 </#list>
205
206 </div>
207 </div>
208 </div>
209 </div>
210 </div>
211 </div>
212 </#if>
213
214 <input type="hidden" id="indexKeyReleases" value="${indexKeyReleases}">
215
216<script>
217 $( document ).ready(function() {
218 var indexSp = $('#speechesIndex').val();
219 console.log("indexSp " + indexSp);
220 var indexMI = $('#indexInteractions').val();
221 console.log("indexMI " + indexMI);
222 var indexKR = $('#indexKeyReleases').val();
223 console.log("indexKR " + indexKR);
224 if (indexSp == 0) {
225 $('#title-heading').hide(); // Hide the div
226 }
227 if(indexMI == 0){
228 $('#title-interaction').hide(); // Hide the div
229 }
230 if(indexKR == 0){
231 $('#title-keyreleases').hide(); // Hide the div
232 }
233 if (indexSp == 0 && indexMI == 0 && indexKR == 0){
234 $('.governor-page-related-links,.related_links_heading').hide();
235 }
236 $(".youtube-video-popup #yt-player").each(function(){
237 let newYoutubeLink = $(this).find("#iframe-yt").attr("data-src");
238 console.log("newYoutubeLink : "+newYoutubeLink);
239 if(newYoutubeLink.includes("youtube.com")){
240 if(newYoutubeLink.includes('?')){
241 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
242 }
243 else{
244 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
245 }
246 $(this).find("#iframe-yt").attr("data-src",newYoutubeLink);
247 }
248 else if(newYoutubeLink.includes("youtu.be")){
249 newYoutubeLink = newYoutubeLink.replace("youtu.be","www.youtube.com/embed");
250 if(newYoutubeLink.includes('?')){
251 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
252 }
253 else{
254 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
255 }
256 console.log("newYoutubeLink : "+newYoutubeLink);
257 $(this).find("#iframe-yt").attr("data-src",newYoutubeLink);
258 return;
259 }else if(newYoutubeLink.includes("watch?v=")){
260 newYoutubeLink = newYoutubeLink.replace("watch?v=","embed/");
261 if(newYoutubeLink.includes('?')){
262 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
263 }
264 else{
265 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
266 }
267 console.log(newYoutubeLink);
268 $(this).find("#iframe-yt").attr("data-src",newYoutubeLink);
269 return;
270 }
271 });
272 $(".fileSizeReleases").each(function () {
273 var fileSizeReleases = $(this).html()
274 if (fileSizeReleases != "") {
275 $(this).html(formatFileSizeReleases(parseInt(fileSizeReleases), 2))
276 }
277 });
278
279 function formatFileSizeReleases(bytes, decimalPoint) {
280 if (bytes == 0)
281 return '0 Bytes';
282 var k = 1024,
283 dm = decimalPoint || 2,
284 sizes = ['Bytes' , 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
285 i = Math.floor(Math.log(bytes) / Math.log(k));
286 return (parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]);
287 }
288 $('.search-filter-wrapper .search-option').click(function (ev) {
289 if ($(this).hasClass("selected")) {
290 $(this).removeClass("selected");
291 } else {
292 $(this).addClass("selected");
293 }
294 });
295 });
296 </script>