Governor - आरबीआय - 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
Listofpreviousgovernors
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="" />
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 <#if docURL?has_content>
101 <#list docURL?split("/") as sValue>
102 <#if sValue?is_last>
103 <#list sValue?split("?") as uuid>
104 <#if uuid?is_first>
105 <#assign UUID=uuid />
106 </#if>
107 </#list>
108 </#if>
109 </#list>
110 </#if>
111 <#attempt>
112 <#if UUID?has_content>
113 <#assign
114 DLFileEntry=dLFileEntryLocalService.fetchFileEntry(UUID,groupId?number)
115 fileSize=DLFileEntry.getSize()
116 fileAssetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry",
117 DLFileEntry.getFileEntryId())
118 docURL=fileAssetEntry.getAssetRenderer().getURLDownload(themeDisplay) />
119 </#if>
120 <#recover>
121 </#attempt>
122
123 <div class="btn-wrap">
124 <#if docURL?has_content && docURL!="">
125 <div class="inner-wrap">
126 <a href="${docURL?split('?')[0]}" target="_blank"
127 class="matomo_download ">
128 <img src="/documents/70233/0/fileDownload.svg"
129 class="downloadFile" alt="Download File"
130 title="Download File">
131 ${languageUtil.get(locale, "pdf")} (<span class="fileSizeSpeeches">${fileSize}</span>)
132 </a>
133 </div>
134
135 </#if>
136
137 <#if videoLink?has_content && videoLink!="">
138 <div class="inner-wrap yt-link-wrap">
139 <a href="javascript:void(0)"
140 data-toggle="modal"
141 data-target="#videoPopUpYT-${curEntry?counter}">
142 <img src="/documents/20125/67624/icon-youtube.svg"
143 class="downloadFile mtm_yt"
144 alt="${languageUtil.get(locale,'youtube')}"
145 title="${languageUtil.get(locale,'youtube')}">
146 <span
147 class="mtm_yt">${languageUtil.get(locale,'youtube')}</span>
148 </a>
149 </div>
150 </#if>
151 </div>
152 </div>
153 </div>
154 </div>
155 </#if>
156 </#list>
157 </#if>
158 </#list>
159 </#if>
160 </#list>
161
162 <#if index gt 5>
163 <div class="col-12 ">
164 <div class="view-all-wrap toggle-view-content">
165 <a href=" ${themeDisplay.getURLPortal()}/web/rbi/speeches?speaker=${speakerCategoryId}" role="button"
166 class=" link-view-more link-animation-hover">
167 <span class="txtToggle"> ${languageUtil.get(locale, "view-more")} </span>
168 <span>
169 <img class="down-arrow" src="/documents/20125/67624/icon+feather-down.svg"
170 alt="view more" title="view more">
171 </span>
172 </a>
173
174 </div>
175 </div>
176 </#if>
177 </div>
178 </div>
179 </div>
180 </div>
181 </div>
182 </div>
183 </#if>
184
185 <input type="hidden" id="speechesIndex" value="${index}">
186
187<script>
188 $(document).ready(function () {
189 $(".youtube-video-popup #yt-player").each(function () {
190 let newYoutubeLink = $(this).find("#iframe-yt").attr("data-src");
191 if (newYoutubeLink.includes("youtube.com")) {
192 if (newYoutubeLink.includes('?')) {
193 if (newYoutubeLink.includes('/live/')) {
194 if (newYoutubeLink.includes('www')) {
195 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
196 }
197 else {
198 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
199 }
200 }
201 if (!newYoutubeLink.includes('?enablejsapi=1')) {
202 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
203 }
204 }
205 else {
206 if (newYoutubeLink.includes('/live/')) {
207 if (newYoutubeLink.includes('www')) {
208 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
209 }
210 else {
211 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
212 }
213 }
214 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
215 }
216 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
217 }
218 else if (newYoutubeLink.includes("youtu.be")) {
219 newYoutubeLink = newYoutubeLink.replace("youtu.be", "www.youtube.com/embed");
220 if (newYoutubeLink.includes('?')) {
221 if (!newYoutubeLink.includes('?enablejsapi=1')) {
222 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
223 }
224 }
225 else {
226 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
227 }
228 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
229 return;
230 } else if (newYoutubeLink.includes("watch?v=")) {
231 newYoutubeLink = newYoutubeLink.replace("watch?v=", "embed/");
232 if (newYoutubeLink.includes('?')) {
233 if (!newYoutubeLink.includes('?enablejsapi=1')) {
234 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
235 }
236 }
237 else {
238 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
239 }
240 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
241 return;
242 }
243 });
244 $(".fileSizeSpeeches").each(function () {
245 var fileSizeSpeeches = $(this).html()
246 if (fileSizeSpeeches != "") {
247 $(this).html(formatFileSizeSpeeches(parseInt(fileSizeSpeeches), 2))
248 }
249 });
250
251 function formatFileSizeSpeeches(bytes, decimalPoint) {
252 if (bytes == 0)
253 return '0 Bytes';
254 var k = 1024,
255 dm = decimalPoint || 2,
256 sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
257 i = Math.floor(Math.log(bytes) / Math.log(k));
258 return (parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]);
259 }
260 });
261
262</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="" />
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 <#if docURL?has_content>
97 <#list docURL?split("/") as sValue>
98 <#if sValue?is_last>
99 <#list sValue?split("?") as uuid>
100 <#if uuid?is_first>
101 <#assign UUID=uuid />
102 </#if>
103 </#list>
104 </#if>
105 </#list>
106 </#if>
107 <!-- File -->
108 <#attempt>
109 <#if UUID?has_content>
110 <#assign
111 DLFileEntry=dLFileEntryLocalService.fetchFileEntry(UUID,groupId?number)
112 fileSize=DLFileEntry.getSize()
113 fileAssetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry",
114 DLFileEntry.getFileEntryId())
115 docURL=fileAssetEntry.getAssetRenderer().getURLDownload(themeDisplay) />
116 </#if>
117 <#recover>
118 </#attempt>
119
120 <div class="btn-wrap">
121 <#if docURL?? && docURL?has_content>
122 <div class="inner-wrap">
123
124 <a href="${docURL?split('?')[0]}" target="_blank"
125 class="matomo_download ">
126 <img src="/documents/70233/0/fileDownload.svg"
127 class="downloadFile" alt="Download File"
128 title="Download File">
129 ${languageUtil.get(locale, "pdf")} (<span class="fileSizeInteractions">${fileSize}</span>)
130 </a>
131 </div>
132 </#if>
133
134 <#if videoLink?has_content>
135 <div class="inner-wrap yt-link-wrap">
136 <a href="javascript:void(0)"
137 data-toggle="modal"
138 data-target="#videoPopUpYT-${curEntry?counter}">
139 <img src="/documents/20125/67624/icon-youtube.svg"
140 class="downloadFile mtm_yt"
141 alt="${languageUtil.get(locale,'youtube')}"
142 title="${languageUtil.get(locale,'youtube')}">
143 <span
144 class="mtm_yt">${languageUtil.get(locale,'youtube')}</span>
145 </a>
146
147 </div>
148 </#if>
149
150
151 </div>
152
153
154 </div>
155 </div>
156 </div>
157 </#if>
158 </#list>
159 </#if>
160 </#list>
161 </#if>
162 </#list>
163
164 <#if indexInteractions gt 5>
165 <div class="col-12 ">
166 <div class="view-all-wrap toggle-view-content">
167 <a href=" ${themeDisplay.getURLPortal()}/web/rbi/interviews?interviewees=${speakerCategoryId}" role="button"
168 class=" link-view-more link-animation-hover">
169 <span class="txtToggle">${languageUtil.get(locale, "view-more")}</span>
170 <span>
171 <img class="down-arrow" src="/documents/20125/67624/icon+feather-down.svg"
172 alt="view more" title="view more">
173 </span>
174 </a>
175
176 </div>
177 </div>
178 </#if>
179
180 </div>
181 </div>
182 </div>
183 </div>
184 </div>
185 </div>
186 </#if>
187
188 <input type="hidden" id="indexInteractions" value="${indexInteractions}">
189
190<script>
191 $(document).ready(function () {
192 $(".youtube-video-popup #yt-player").each(function () {
193 let newYoutubeLink = $(this).find("#iframe-yt").attr("data-src");
194 if (newYoutubeLink.includes("youtube.com")) {
195 if (newYoutubeLink.includes('?')) {
196 if (newYoutubeLink.includes('/live/')) {
197 if (newYoutubeLink.includes('www')) {
198 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
199 }
200 else {
201 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
202 }
203 }
204 if (!newYoutubeLink.includes('?enablejsapi=1')) {
205 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
206 }
207 }
208 else {
209 if (newYoutubeLink.includes('/live/')) {
210 if (newYoutubeLink.includes('www')) {
211 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'youtube.com/embed/')
212 }
213 else {
214 newYoutubeLink = newYoutubeLink.replace('youtube.com/live/', 'www.youtube.com/embed/')
215 }
216 }
217 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
218 }
219 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
220 }
221 else if (newYoutubeLink.includes("youtu.be")) {
222 newYoutubeLink = newYoutubeLink.replace("youtu.be", "www.youtube.com/embed");
223 if (newYoutubeLink.includes('?')) {
224 if (!newYoutubeLink.includes('?enablejsapi=1')) {
225 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
226 }
227 }
228 else {
229 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
230 }
231 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
232 return;
233 } else if (newYoutubeLink.includes("watch?v=")) {
234 newYoutubeLink = newYoutubeLink.replace("watch?v=", "embed/");
235 if (newYoutubeLink.includes('?')) {
236 if (!newYoutubeLink.includes('?enablejsapi=1')) {
237 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
238 }
239 }
240 else {
241 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
242 }
243 $(this).find("#iframe-yt").attr("data-src", newYoutubeLink);
244 return;
245 }
246 });
247 $(".fileSizeInteractions").each(function () {
248 var fileSizeInteractions = $(this).html()
249 if (fileSizeInteractions != "") {
250 $(this).html(formatFileSizeInteractions(parseInt(fileSizeInteractions), 2))
251 }
252 });
253
254 function formatFileSizeInteractions(bytes, decimalPoint) {
255 if (bytes == 0)
256 return '0 Bytes';
257 var k = 1024,
258 dm = decimalPoint || 2,
259 sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
260 i = Math.floor(Math.log(bytes) / Math.log(k));
261 return (parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]);
262 }
263 });
264
265</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="" />
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 <!-- File -->
103 <#attempt>
104 <#if UUID?has_content>
105 <#assign
106 DLFileEntry=dLFileEntryLocalService.fetchFileEntry(UUID,groupId?number)
107 fileSize=DLFileEntry.getSize()
108 fileAssetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry",
109 DLFileEntry.getFileEntryId())
110 docURL=fileAssetEntry.getAssetRenderer().getURLDownload(themeDisplay) />
111 </#if>
112 <#recover>
113 </#attempt>
114
115 <div class="btn-wrap">
116 <#if docURL?? && docURL?has_content>
117 <div class="inner-wrap">
118 <a href="${docURL?split('?')[0]}" target="_blank"
119 class="matomo_download ">
120 <img src="/documents/70233/0/fileDownload.svg"
121 class="downloadFile" alt="Download File"
122 title="Download File">
123 ${languageUtil.get(locale, "pdf")} (<span class="fileSizeReleases">${fileSize}</span>)
124 </a>
125 </div>
126 </#if>
127
128 <#if videoLink?has_content>
129 <div class="inner-wrap yt-link-wrap">
130 <a href="javascript:void(0)"
131 data-toggle="modal"
132 data-target="#videoPopUpYT-${curEntry?counter}">
133 <img src="/documents/20125/67624/icon-youtube.svg"
134 class="downloadFile mtm_yt"
135 alt="${languageUtil.get(locale,'youtube')}"
136 title="${languageUtil.get(locale,'youtube')}">
137 <span
138 class="mtm_yt">${languageUtil.get(locale,'youtube')}</span>
139 </a>
140
141 </div>
142 </#if>
143 </div>
144
145 </div>
146 </div>
147 </div>
148 </#if>
149 </#list>
150 </#if>
151 </#list>
152
153 </div>
154 </div>
155 </div>
156 </div>
157 </div>
158 </div>
159 </#if>
160
161 <input type="hidden" id="indexKeyReleases" value="${indexKeyReleases}">
162
163<script>
164 $( document ).ready(function() {
165 var indexSp = $('#speechesIndex').val();
166 console.log("indexSp " + indexSp);
167 var indexMI = $('#indexInteractions').val();
168 console.log("indexMI " + indexMI);
169 var indexKR = $('#indexKeyReleases').val();
170 console.log("indexKR " + indexKR);
171 if (indexSp == 0) {
172 $('#title-heading').hide(); // Hide the div
173 }
174 if(indexMI == 0){
175 $('#title-interaction').hide(); // Hide the div
176 }
177 if(indexKR == 0){
178 $('#title-keyreleases').hide(); // Hide the div
179 }
180 if (indexSp == 0 && indexMI == 0 && indexKR == 0){
181 $('.governor-page-related-links,.related_links_heading').hide();
182 }
183 $(".youtube-video-popup #yt-player").each(function(){
184 let newYoutubeLink = $(this).find("#iframe-yt").attr("data-src");
185 console.log("newYoutubeLink : "+newYoutubeLink);
186 if(newYoutubeLink.includes("youtube.com")){
187 if(newYoutubeLink.includes('?')){
188 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
189 }
190 else{
191 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
192 }
193 $(this).find("#iframe-yt").attr("data-src",newYoutubeLink);
194 }
195 else if(newYoutubeLink.includes("youtu.be")){
196 newYoutubeLink = newYoutubeLink.replace("youtu.be","www.youtube.com/embed");
197 if(newYoutubeLink.includes('?')){
198 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
199 }
200 else{
201 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
202 }
203 console.log("newYoutubeLink : "+newYoutubeLink);
204 $(this).find("#iframe-yt").attr("data-src",newYoutubeLink);
205 return;
206 }else if(newYoutubeLink.includes("watch?v=")){
207 newYoutubeLink = newYoutubeLink.replace("watch?v=","embed/");
208 if(newYoutubeLink.includes('?')){
209 newYoutubeLink = newYoutubeLink + '&enablejsapi=1'
210 }
211 else{
212 newYoutubeLink = newYoutubeLink + '?enablejsapi=1';
213 }
214 console.log(newYoutubeLink);
215 $(this).find("#iframe-yt").attr("data-src",newYoutubeLink);
216 return;
217 }
218 });
219 $(".fileSizeReleases").each(function () {
220 var fileSizeReleases = $(this).html()
221 if (fileSizeReleases != "") {
222 $(this).html(formatFileSizeReleases(parseInt(fileSizeReleases), 2))
223 }
224 });
225
226 function formatFileSizeReleases(bytes, decimalPoint) {
227 if (bytes == 0)
228 return '0 Bytes';
229 var k = 1024,
230 dm = decimalPoint || 2,
231 sizes = ['Bytes' , 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
232 i = Math.floor(Math.log(bytes) / Math.log(k));
233 return (parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]);
234 }
235 $('.search-filter-wrapper .search-option').click(function (ev) {
236 if ($(this).hasClass("selected")) {
237 $(this).removeClass("selected");
238 } else {
239 $(this).addClass("selected");
240 }
241 });
242 });
243 </script>