diff --git a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json
index 6911fa56..1c4de72e 100644
--- a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json
+++ b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/block.json
@@ -12,6 +12,10 @@
"heading": {
"type": "string",
"default": "Featured"
+ },
+ "featuredExpertId": {
+ "type": "number",
+ "default": 0
}
},
"supports": {
diff --git a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js
index 63db88f0..27b810b0 100644
--- a/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js
+++ b/web/app/plugins/mitlib-blocks/blocks/featured-and-events-section/edit.js
@@ -4,14 +4,47 @@
* @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-i18n/
*/
import { __ } from '@wordpress/i18n';
-import { useBlockProps, RichText } from '@wordpress/block-editor';
+import { useBlockProps, RichText, InspectorControls } from '@wordpress/block-editor';
+import { PanelBody, SelectControl, Spinner } from '@wordpress/components';
+import { useSelect } from '@wordpress/data';
+import { store as coreStore } from '@wordpress/core-data';
import './editor.scss';
export default function Edit( { attributes, setAttributes } ) {
- const { heading } = attributes;
+ const { heading, featuredExpertId } = attributes;
+
+ const { experts, hasResolvedExperts } = useSelect( ( select ) => {
+ const query = { per_page: -1, status: 'publish', orderby: 'title', order: 'asc' };
+ return {
+ experts: select( coreStore ).getEntityRecords( 'postType', 'experts', query ),
+ hasResolvedExperts: select( coreStore ).hasFinishedResolution( 'getEntityRecords', [ 'postType', 'experts', query ] ),
+ };
+ }, [] );
+
+ const expertOptions = [
+ { label: __( 'Select an expert…', 'mitlib-blocks' ), value: 0 },
+ ...( experts || [] ).map( ( expert ) => ( {
+ label: expert.title.rendered,
+ value: expert.id,
+ } ) ),
+ ];
return (
+
+
+ { hasResolvedExperts ? (
+ setAttributes( { featuredExpertId: Number( value ) } ) }
+ />
+ ) : (
+
+ ) }
+
+
post_type && 'publish' === $maybe_expert->post_status ) {
+ $featured_expert = $maybe_expert;
+ }
+}
+
+// Fallback used when no librarian has been selected in the block editor.
+$default_expert = array(
+ 'name' => 'Alejandro Paz',
+ 'first_name' => 'Alejandro',
+ 'url' => 'https://libguides.mit.edu/profiles/apaz',
+ 'image' => 'https://libapps.s3.amazonaws.com/accounts/349/images/apaz-100x100.jpg',
+ 'excerpt' => 'Librarian for Energy and Environment',
+);
+
+// If we have a valid expert, use those values. If not, use the fallback values.
+if ( $featured_expert ) {
+ $expert_name = get_the_title( $featured_expert );
+ $expert_first_name = strtok( $expert_name, ' ' );
+ $expert_url = get_post_meta( $featured_expert->ID, 'expert_url', true );
+ $expert_image = get_the_post_thumbnail_url( $featured_expert, 'thumbnail' );
+ $expert_excerpt = get_the_excerpt( $featured_expert );
+} else {
+ $expert_name = $default_expert['name'];
+ $expert_first_name = $default_expert['first_name'];
+ $expert_url = $default_expert['url'];
+ $expert_image = $default_expert['image'];
+ $expert_excerpt = $default_expert['excerpt'];
+}
+
+// Generate the strings for alt text and help link text
+$expert_alt_text = "Headshot of " . $expert_name;
+$expert_help_link_text = "How can " . $expert_first_name . " help you?";
+
?>
@@ -23,15 +62,19 @@
Spotlight
-
+
+
+
-
+
-
Librarian for Energy and Environment
+
-
How can Alejandro help you?
+
+
+
diff --git a/web/app/plugins/mitlib-blocks/build/blocks-manifest.php b/web/app/plugins/mitlib-blocks/build/blocks-manifest.php
index bc025787..09787ef5 100644
--- a/web/app/plugins/mitlib-blocks/build/blocks-manifest.php
+++ b/web/app/plugins/mitlib-blocks/build/blocks-manifest.php
@@ -17,6 +17,10 @@
'heading' => array(
'type' => 'string',
'default' => 'Featured'
+ ),
+ 'featuredExpertId' => array(
+ 'type' => 'number',
+ 'default' => 0
)
),
'supports' => array(
diff --git a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/block.json b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/block.json
index da49d47c..121821f3 100644
--- a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/block.json
+++ b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/block.json
@@ -12,6 +12,10 @@
"heading": {
"type": "string",
"default": "Featured"
+ },
+ "featuredExpertId": {
+ "type": "number",
+ "default": 0
}
},
"supports": {
diff --git a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.asset.php b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.asset.php
index c04c9847..bb409504 100644
--- a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.asset.php
+++ b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.asset.php
@@ -1 +1 @@
- array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => 'adae8abbc4a7ca67c4b9');
+ array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-i18n'), 'version' => '08aea560c65be378d62e');
diff --git a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.js b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.js
index 2b93ff42..8e01b976 100644
--- a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.js
+++ b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/index.js
@@ -1 +1 @@
-(()=>{"use strict";var e={308(){const e=window.wp.blocks,t=window.wp.i18n,n=window.wp.blockEditor,o=window.ReactJSXRuntime,i=JSON.parse('{"UU":"mitlib/featured-and-events-section"}');(0,e.registerBlockType)(i.UU,{edit:function({attributes:e,setAttributes:i}){const{heading:r}=e;return(0,o.jsx)("div",{...(0,n.useBlockProps)(),children:(0,o.jsx)(n.RichText,{tagName:"h2",value:r,onChange:e=>i({heading:e}),placeholder:(0,t.__)("Featured","mitlib-blocks"),allowedFormats:[]})})},save:function(){return null}})}};const t={};function n(o){const i=t[o];if(void 0!==i)return i.exports;const r=t[o]={exports:{}};return e[o](r,r.exports,n),r.exports}n.m=e,(()=>{const e=[];n.O=(t,o,i,r)=>{if(o){r||=0;for(var s=e.length;s>0&&e[s-1][2]>r;s--)e[s]=e[s-1];return void(e[s]=[o,i,r])}let l=1/0;for(s=0;s=r)||!Object.keys(n.O).every(e=>n.O[e](o[c]))?(a=!1,rObject.hasOwn(e,t),(()=>{const e={226:0,238:0};n.O.j=t=>0===e[t];const t=(t,o)=>{let[i,r,s]=o;var l,c,a=0;if(i.some(t=>0!==e[t])){for(l in r)n.o(r,l)&&(n.m[l]=r[l]);if(s)var u=s(n)}for(t&&t(o);an(308));o=n.O(o)})();
\ No newline at end of file
+(()=>{"use strict";var e={839(){const e=window.wp.blocks,t=window.wp.i18n,o=window.wp.blockEditor,r=window.wp.components,s=window.wp.data,n=window.wp.coreData,i=window.ReactJSXRuntime,l=JSON.parse('{"UU":"mitlib/featured-and-events-section"}');(0,e.registerBlockType)(l.UU,{edit:function({attributes:e,setAttributes:l}){const{heading:a,featuredExpertId:c}=e,{experts:d,hasResolvedExperts:p}=(0,s.useSelect)(e=>{const t={per_page:-1,status:"publish",orderby:"title",order:"asc"};return{experts:e(n.store).getEntityRecords("postType","experts",t),hasResolvedExperts:e(n.store).hasFinishedResolution("getEntityRecords",["postType","experts",t])}},[]),u=[{label:(0,t.__)("Select an expert…","mitlib-blocks"),value:0},...(d||[]).map(e=>({label:e.title.rendered,value:e.id}))];return(0,i.jsxs)("div",{...(0,o.useBlockProps)(),children:[(0,i.jsx)(o.InspectorControls,{children:(0,i.jsx)(r.PanelBody,{title:(0,t.__)("Featured Expert","mitlib-blocks"),children:p?(0,i.jsx)(r.SelectControl,{label:(0,t.__)("Featured expert","mitlib-blocks"),value:c,options:u,onChange:e=>l({featuredExpertId:Number(e)})}):(0,i.jsx)(r.Spinner,{})})}),(0,i.jsx)(o.RichText,{tagName:"h2",value:a,onChange:e=>l({heading:e}),placeholder:(0,t.__)("Featured","mitlib-blocks"),allowedFormats:[]})]})},save:function(){return null}})}};const t={};function o(r){const s=t[r];if(void 0!==s)return s.exports;const n=t[r]={exports:{}};return e[r](n,n.exports,o),n.exports}o.m=e,(()=>{const e=[];o.O=(t,r,s,n)=>{if(r){n||=0;for(var i=e.length;i>0&&e[i-1][2]>n;i--)e[i]=e[i-1];return void(e[i]=[r,s,n])}let l=1/0;for(i=0;i=n)||!Object.keys(o.O).every(e=>o.O[e](r[a]))?(c=!1,nObject.hasOwn(e,t),(()=>{const e={226:0,238:0};o.O.j=t=>0===e[t];const t=(t,r)=>{let[s,n,i]=r;var l,a,c=0;if(s.some(t=>0!==e[t])){for(l in n)o.o(n,l)&&(o.m[l]=n[l]);if(i)var d=i(o)}for(t&&t(r);co(839));r=o.O(r)})();
\ No newline at end of file
diff --git a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/render.php b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/render.php
index dc9096f4..d402695d 100644
--- a/web/app/plugins/mitlib-blocks/build/featured-and-events-section/render.php
+++ b/web/app/plugins/mitlib-blocks/build/featured-and-events-section/render.php
@@ -6,6 +6,45 @@
* @var string $content Block default content.
* @var WP_Block $block Block instance.
*/
+
+// Look up the librarian chosen in the block editor's "Featured Librarian" panel.
+$featured_expert = null;
+$featured_expert_id = absint( $attributes['featuredExpertId'] ?? 0 );
+if ( $featured_expert_id ) {
+ $maybe_expert = get_post( $featured_expert_id );
+ if ( $maybe_expert && 'experts' === $maybe_expert->post_type && 'publish' === $maybe_expert->post_status ) {
+ $featured_expert = $maybe_expert;
+ }
+}
+
+// Fallback used when no librarian has been selected in the block editor.
+$default_expert = array(
+ 'name' => 'Alejandro Paz',
+ 'first_name' => 'Alejandro',
+ 'url' => 'https://libguides.mit.edu/profiles/apaz',
+ 'image' => 'https://libapps.s3.amazonaws.com/accounts/349/images/apaz-100x100.jpg',
+ 'excerpt' => 'Librarian for Energy and Environment',
+);
+
+// If we have a valid expert, use those values. If not, use the fallback values.
+if ( $featured_expert ) {
+ $expert_name = get_the_title( $featured_expert );
+ $expert_first_name = strtok( $expert_name, ' ' );
+ $expert_url = get_post_meta( $featured_expert->ID, 'expert_url', true );
+ $expert_image = get_the_post_thumbnail_url( $featured_expert, 'thumbnail' );
+ $expert_excerpt = get_the_excerpt( $featured_expert );
+} else {
+ $expert_name = $default_expert['name'];
+ $expert_first_name = $default_expert['first_name'];
+ $expert_url = $default_expert['url'];
+ $expert_image = $default_expert['image'];
+ $expert_excerpt = $default_expert['excerpt'];
+}
+
+// Generate the strings for alt text and help link text
+$expert_alt_text = "Headshot of " . $expert_name;
+$expert_help_link_text = "How can " . $expert_first_name . " help you?";
+
?>
@@ -23,15 +62,19 @@
Spotlight
-
+
+
+
-
+
-
Librarian for Energy and Environment
+
-
How can Alejandro help you?
+
+
+
diff --git a/web/app/plugins/mitlib-blocks/package.json b/web/app/plugins/mitlib-blocks/package.json
index 7c3c8875..76987e01 100644
--- a/web/app/plugins/mitlib-blocks/package.json
+++ b/web/app/plugins/mitlib-blocks/package.json
@@ -18,6 +18,8 @@
"@wordpress/block-editor": "latest",
"@wordpress/blocks": "latest",
"@wordpress/components": "latest",
+ "@wordpress/core-data": "latest",
+ "@wordpress/data": "latest",
"@wordpress/i18n": "latest"
},
"devDependencies": {